java實(shí)現(xiàn)飯店點(diǎn)菜系統(tǒng)
本文實(shí)例為大家分享了java實(shí)現(xiàn)飯店點(diǎn)菜系統(tǒng)的具體代碼,供大家參考,具體內(nèi)容如下
JAVA實(shí)現(xiàn)飯店點(diǎn)菜系統(tǒng)
在這個(gè)暑假,我會(huì)將一些網(wǎng)絡(luò)上比較經(jīng)典的java編程練習(xí)題。 做一做,發(fā)布到博客來(lái)。是對(duì)我自己學(xué)習(xí)的監(jiān)督,也是為了方便大家借鑒學(xué)習(xí)交流。大家一起共同進(jìn)步。
這個(gè)點(diǎn)菜系統(tǒng),和我之前Java課程設(shè)計(jì)中的小學(xué)生數(shù)學(xué)練習(xí)有點(diǎn)像。不過(guò)少了文件操作,相對(duì)比較簡(jiǎn)單。
我實(shí)現(xiàn)的效果 如圖
最重要的 還是面向?qū)ο蟮乃枷耄覀円斫獠⑹褂谩?/strong>
1.在點(diǎn)菜系統(tǒng)中,我們?yōu)榱朔奖?飯店添加菜譜 ,我們要使用一個(gè)list 集合 ,可以改變長(zhǎng)度大小。
2.每一個(gè) 菜品 都是一個(gè)對(duì)象 我們要封裝起來(lái),包括 三個(gè)屬性 : 編號(hào),菜名 ,價(jià)格
3.對(duì)點(diǎn)菜的具體需求 ,我們要 寫(xiě) 每一個(gè) 靜態(tài)方法。在main 方法中, 按照客戶點(diǎn)菜的過(guò)程來(lái)設(shè)計(jì)流程。
看到了效果圖 。我們直接貼代碼, 在代碼中解釋 。
import java.util.ArrayList; import java.util.List; import java.util.Scanner; /** ?* 太原理工大學(xué)---軟件學(xué)院---李同學(xué) ?* java實(shí)現(xiàn) 點(diǎn)菜系統(tǒng) ?* 歡迎大家一起交流。評(píng)論或者私信。 ?*/ public class menu { ? ? //聲明兩個(gè)集合,第一個(gè)用來(lái)保存 飯店菜單,第二個(gè)用來(lái)保存 客戶所點(diǎn)菜單 ? ? static List<menu> dishList = new ArrayList<>(); ? ? static List<menu> personList = new ArrayList<>(); ? ? int id; ? ? String name; ? ? double price; ? ? //構(gòu)造方法,每一個(gè)菜 都是一個(gè)對(duì)象 ? ? public menu(int id, String name, double price) { ? ? ? ? this.id = id; ? ? ? ? this.name = name; ? ? ? ? this.price = price; ? ? } ? ? public static void main(String[] args) { ? ? ? ? //聲明對(duì)象 ?本飯店只會(huì)五個(gè)菜。O(∩_∩)O哈哈~ ? ? ? ? //第一種聲明方法,并添加到飯店菜單中。 ? ? ? ? menu dish1 = new menu(1, "魚(yú)香肉絲", 28.0); ? ? ? ? dishList.add(dish1); ? ? ? ? menu dish2 = new menu(2, "燉王八", 58.0); ? ? ? ? dishList.add(dish2); ? ? ? ? menu dish3 = new menu(3, "家常涼菜", 18.0); ? ? ? ? dishList.add(dish3); ? ? ? ? //第二種聲明方法 ? 這兩種方法 大家都要學(xué)會(huì) ? ? ? ? dishList.add(new menu(4,"山西過(guò)油肉",38.0)); ? ? ? ? dishList.add(new menu(5,"西湖牛肉羹",36.0)); ? ? ? ? Scanner sc = new Scanner(System.in); ? ? ? ? /** ? ? ? ? ?* 接下來(lái)就是 點(diǎn)菜系統(tǒng)的核心代碼了。有點(diǎn)復(fù)雜,大家慢慢理解。 ? ? ? ? ?* 我盡量注釋寫(xiě)全 ? ? ? ? ?* 我們要了解 點(diǎn)菜需求 : 1. 飯店有哪些菜 ?2. 客戶點(diǎn)菜 點(diǎn)菜完畢 ? ? ? ? ?* ?重新展示飯店服務(wù) 供客戶再次選擇 3.客戶點(diǎn)了哪些菜 4.客戶退菜 5. 結(jié)賬 ? ? ? ? ?* 首先是一個(gè) while(true) 的 “死循環(huán)” ?嗎,每執(zhí)行一次 就輸出一次 飯店服務(wù) number 方法 ? ? ? ? ?* 第二 客戶選擇 服務(wù) ?sc.nextInt(); 客戶輸入的數(shù)字使用switch 進(jìn)行區(qū)分 ? ? ? ? ?* 進(jìn)入 switch 后, 根據(jù)客戶的要求,執(zhí)行不同的 case? ? ? ? ? ?* 在執(zhí)行 case 1 ?時(shí) 也就進(jìn)入了點(diǎn)菜環(huán)節(jié)? ? ? ? ? ?* 再次出現(xiàn)一個(gè) while(true) 先將飯店的五個(gè)菜 展示給客戶。等待客戶點(diǎn)菜 于是 sc.nextInt(); ? ? ? ? ?* 不同編號(hào),對(duì)應(yīng)不同的菜品,對(duì)應(yīng)集合。 將客戶選擇的菜品,保存在personList 集合中 ? ? ? ? ?* 注意到:在showDish方法中,有一個(gè) “按 0 返回上一級(jí) ” 實(shí)現(xiàn)代碼 ? ? ? ? ?* 就是 case 1 中的 if 條件語(yǔ)句 ?:客戶選擇 0 即為結(jié)束點(diǎn)菜 重新返回飯店服務(wù) ? ? ? ? ?* 剩余的 case 2 ?3 ? 4 ?應(yīng)該比較好理解。 不懂可以私信我哦! ? ? ? ? ?* 還有一個(gè)小技巧就是 case 3 ?中 沒(méi)有使用break 而是使用了 return 原因是 : break 只是會(huì)天廚switch 循環(huán), ? ? ? ? ?* 而在結(jié)賬以后,我們需要結(jié)束這個(gè)點(diǎn)菜系統(tǒng) 使用 return 就會(huì)直接 這個(gè)程序 。 ? ? ? ? ?*/ ? ? ? ? while (true) { ? ? ? ? ? ? number(); ? ? ? ? ? ? int num = sc.nextInt(); ? ? ? ? ? ? switch (num) { ? ? ? ? ? ? ? ? case 1: ? ? ? ? ? ? ? ? ? ? while (true) { ? ? ? ? ? ? ? ? ? ? ? ? showDish(); ? ? ? ? ? ? ? ? ? ? ? ? int id = sc.nextInt(); ? ? ? ? ? ? ? ? ? ? ? ? if (id == 0) { ? ? ? ? ? ? ? ? ? ? ? ? ? ? break; ? ? ? ? ? ? ? ? ? ? ? ? } else { ? ? ? ? ? ? ? ? ? ? ? ? ? ? menu dish = dishList.get(id - 1); ? ? ? ? ? ? ? ? ? ? ? ? ? ? System.out.println("親,您點(diǎn)了:" + dish.name + " 菜"); ? ? ? ? ? ? ? ? ? ? ? ? ? ? personList.add(dish); ? ? ? ? ? ? ? ? ? ? ? ? } ? ? ? ? ? ? ? ? ? ? } ? ? ? ? ? ? ? ? case 2: ? ? ? ? ? ? ? ? ? ? showOrder(); ? ? ? ? ? ? ? ? ? ? break; ? ? ? ? ? ? ? ? case 3: ? ? ? ? ? ? ? ? ? ? paying(); ? ? ? ? ? ? ? ? ? ? return; ? ? ? ? ? ? ? ? case 4 : ? ? ? ? ? ? ? ? ? ? System.out.println("輸入您要退掉菜品的編號(hào)"); ? ? ? ? ? ? ? ? ? ? int id = sc.nextInt(); ? ? ? ? ? ? ? ? ? ? exitDish(id); ? ? ? ? ? ? ? ? ? ? break; ? ? ? ? ? ? } ? ? ? ? } ? ? } ? ? // 展示主菜單方法。 ? ? public static void number() { ? ? ?? ?System.out.println("歡迎光臨小帥菜館!"); ? ? ? ? System.out.println("----主菜單----"); ? ? ? ? System.out.println("菜單 ---> 1"); ? ? ? ? System.out.println("點(diǎn)菜 ---> 2"); ? ? ? ? System.out.println("結(jié)賬 ---> 3"); ? ? ? ? System.out.println("退菜 ---> 4"); ? ? ? ? System.out.println("---根據(jù)編號(hào)選擇服務(wù)---"); ? ? } ? ? //展示飯店菜單方法 ? ? public static void showDish() { ? ? ? ? System.out.println("----請(qǐng)您點(diǎn)菜----"); ? ? ? ? //遍歷集合,將之前聲明的對(duì)象集合 全部展示到控制臺(tái) ? ? ? ? for (int i = 0; i < dishList.size(); i++) { ? ? ? ? ? ? menu dish = dishList.get(i); ? ? ? ? ? ? System.out.println(dish.id + " ?" + dish.name + " ? " + dish.price + "元"); ? ? ? ? } ? ? ? ? System.out.println("---根據(jù)序號(hào)點(diǎn)菜,按 0 返回上一級(jí)---"); ? ? } ? ? //展示客戶已點(diǎn)菜單 ? ? public static void showOrder() { ? ? ? ? System.out.println("----您已點(diǎn)菜品----"); ? ? ? ? //注釋掉的這個(gè)方法,不適合使用退菜操作。因?yàn)?每一個(gè)菜品前面的id 值不是真正的集合次序 ? ? ? ? /*for (menu dish : personList) { ? ? ? ? ? ? System.out.println(dish.id + " ?" + dish.name + " ? " + dish.price + "元"); ? ? ? ? }*/ ? ? ? ? //為了方便客戶能夠正確的選擇菜品編號(hào),我們采用 1 ?2 3 4 的順序輸出已點(diǎn)菜品 ? ? ? ? ? for(int i = 0; i < personList.size();i++){? ? ? ? ? ? ? System.out.println( (i+1) + " ? ?" + personList.get(i).name + " ? " ?+ personList.get(i).price + "元"); ? ? ? ? } ? ? } ? ? // 結(jié)賬 遍歷 personList 集合的 price 累加即可 ? ? public static void paying() { ? ? ? ? double total = 0f; ? ? ? ? System.out.println("----正在結(jié)賬,請(qǐng)稍等!----"); ? ? ? ? // 另一種遍歷集合的方法。大家學(xué)習(xí)哦 ? ? ? ? for (menu dish : personList) { ? ? ? ? ? ? total += dish.price; ? ? ? ? } ? ? ? ? System.out.println("您共消費(fèi):" + total + "元"); ? ? } ? ? //退菜操作 ?使用集合的 remove 方法。 采用有參數(shù)的方法。先告訴客戶要退掉的菜品,再執(zhí)行remove操作,這兩句代碼不能顛倒 ? ? public static void exitDish(int i){ ? ? ? ? System.out.println("您已退掉:" + personList.get(i-1).name + " ?" + personList.get(i-1).price + "元"); ? ? ? ? personList.remove(i-1); ? ? } }
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
java 二維數(shù)組矩陣乘法的實(shí)現(xiàn)方法
java 二維數(shù)組矩陣乘法的實(shí)現(xiàn)方法,需要的朋友可以參考一下2013-03-03Mybatis返回結(jié)果封裝map過(guò)程解析
這篇文章主要介紹了Mybatis返回結(jié)果封裝map過(guò)程解析,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-09-09Spring中@PropertySource注解使用場(chǎng)景解析
這篇文章主要介紹了Spring中@PropertySource注解使用場(chǎng)景解析,@PropertySource注解就是Spring中提供的一個(gè)可以加載配置文件的注解,并且可以將配置文件中的內(nèi)容存放到Spring的環(huán)境變量中,需要的朋友可以參考下2023-11-11SpringMVC整合websocket實(shí)現(xiàn)消息推送及觸發(fā)功能
這篇文章主要為大家詳細(xì)介紹了SpringMVC整合websocket實(shí)現(xiàn)消息推送及觸發(fā)功能,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2018-03-03java 使用idea將工程打成jar并創(chuàng)建成exe文件類(lèi)型執(zhí)行的方法詳解
這篇文章主要介紹了java 使用idea將工程打成jar并創(chuàng)建成exe文件類(lèi)型執(zhí)行,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友參考下吧2020-09-09基于spring?@Cacheable?注解的spel表達(dá)式解析執(zhí)行邏輯
這篇文章主要介紹了spring?@Cacheable?注解的spel表達(dá)式解析執(zhí)行邏輯,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-01-01Java基于redis實(shí)現(xiàn)分布式鎖代碼實(shí)例
這篇文章主要介紹了Java基于redis實(shí)現(xiàn)分布式鎖代碼實(shí)例,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-04-04