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