java實現飯店點菜系統

本文實例為大傢分享瞭java實現飯店點菜系統的具體代碼,供大傢參考,具體內容如下

JAVA實現飯店點菜系統

在這個暑假,我會將一些網絡上比較經典的java編程練習題。 做一做,發佈到博客來。是對我自己學習的監督,也是為瞭方便大傢借鑒學習交流。大傢一起共同進步。

這個點菜系統,和我之前Java課程設計中的小學生數學練習有點像。不過少瞭文件操作,相對比較簡單。

我實現的效果 如圖

最重要的 還是面向對象的思想,我們要理解並使用。

1.在點菜系統中,我們為瞭方便 飯店添加菜譜 ,我們要使用一個list 集合 ,可以改變長度大小。
2.每一個 菜品 都是一個對象 我們要封裝起來,包括 三個屬性 : 編號,菜名 ,價格
3.對點菜的具體需求 ,我們要 寫 每一個 靜態方法。在main 方法中, 按照客戶點菜的過程來設計流程。

看到瞭效果圖 。我們直接貼代碼, 在代碼中解釋 。

import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;
/**
 * 太原理工大學---軟件學院---李同學
 * java實現 點菜系統
 * 歡迎大傢一起交流。評論或者私信。
 */

public class menu {
    //聲明兩個集合,第一個用來保存 飯店菜單,第二個用來保存 客戶所點菜單
    static List<menu> dishList = new ArrayList<>();
    static List<menu> personList = new ArrayList<>();
    int id;
    String name;
    double price;
    //構造方法,每一個菜 都是一個對象
    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);
        //第二種聲明方法   這兩種方法 大傢都要學會
        dishList.add(new menu(4,"山西過油肉",38.0));
        dishList.add(new menu(5,"西湖牛肉羹",36.0));

        Scanner sc = new Scanner(System.in);
        /**
         * 接下來就是 點菜系統的核心代碼瞭。有點復雜,大傢慢慢理解。
         * 我盡量註釋寫全
         * 我們要瞭解 點菜需求 : 1. 飯店有哪些菜  2. 客戶點菜 點菜完畢
         *  重新展示飯店服務 供客戶再次選擇 3.客戶點瞭哪些菜 4.客戶退菜 5. 結賬
         * 首先是一個 while(true) 的 “死循環”  嗎,每執行一次 就輸出一次 飯店服務 number 方法
         * 第二 客戶選擇 服務  sc.nextInt(); 客戶輸入的數字使用switch 進行區分
         * 進入 switch 後, 根據客戶的要求,執行不同的 case 
         * 在執行 case 1  時 也就進入瞭點菜環節 
         * 再次出現一個 while(true) 先將飯店的五個菜 展示給客戶。等待客戶點菜 於是 sc.nextInt();
         * 不同編號,對應不同的菜品,對應集合。 將客戶選擇的菜品,保存在personList 集合中
         * 註意到:在showDish方法中,有一個 “按 0 返回上一級 ” 實現代碼
         * 就是 case 1 中的 if 條件語句  :客戶選擇 0 即為結束點菜 重新返回飯店服務
         * 剩餘的 case 2  3   4  應該比較好理解。 不懂可以私信我哦!
         * 還有一個小技巧就是 case 3  中 沒有使用break 而是使用瞭 return 原因是 : break 隻是會天廚switch 循環,
         * 而在結賬以後,我們需要結束這個點菜系統 使用 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("親,您點瞭:" + 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("點菜 ---> 2");
        System.out.println("結賬 ---> 3");
        System.out.println("退菜 ---> 4");
        System.out.println("---根據編號選擇服務---");

    }
    //展示飯店菜單方法
    public static void showDish() {
        System.out.println("----請您點菜----");
        //遍歷集合,將之前聲明的對象集合 全部展示到控制臺
        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("---根據序號點菜,按 0 返回上一級---");
    }

    //展示客戶已點菜單
    public static void showOrder() {
        System.out.println("----您已點菜品----");
        //註釋掉的這個方法,不適合使用退菜操作。因為 每一個菜品前面的id 值不是真正的集合次序
        /*for (menu dish : personList) {
            System.out.println(dish.id + "  " + dish.name + "   " + dish.price + "元");
        }*/

        //為瞭方便客戶能夠正確的選擇菜品編號,我們采用 1  2 3 4 的順序輸出已點菜品  
        for(int i = 0; i < personList.size();i++){ 
            System.out.println( (i+1) + "    " + personList.get(i).name + "   "  + personList.get(i).price + "元");
        }
    }

    // 結賬 遍歷 personList 集合的 price 累加即可
    public static void paying() {
        double total = 0f;
        System.out.println("----正在結賬,請稍等!----");
        // 另一種遍歷集合的方法。大傢學習哦

        for (menu dish : personList) {
            total += dish.price;
        }
        System.out.println("您共消費:" + total + "元");
    }

    //退菜操作  使用集合的 remove 方法。 采用有參數的方法。先告訴客戶要退掉的菜品,再執行remove操作,這兩句代碼不能顛倒
    public static void exitDish(int i){
        System.out.println("您已退掉:" + personList.get(i-1).name + "  " + personList.get(i-1).price + "元");
        personList.remove(i-1);
    }
}

以上就是本文的全部內容,希望對大傢的學習有所幫助,也希望大傢多多支持WalkonNet。

推薦閱讀: