【Java小项目一:点菜系统】

该项目用到了Java知识点有:while循环、switch、break、continue、HashMap、ArrayList等。

/*
* 菜品类
* */
public class Dish {
    int id;				//编号
    String name;		//菜名
    double price;		//价格

    public Dish(int id, String name, double price) {
        this.id = id;
        this.name = name;
        this.price = price;
    }

    @Override
    public String toString() {
        return id+"\t"+name+"\t"+price;
    }
}

/*
* 点菜主程序
* */
public class DishApp {
    //菜品集合
    static List<Dish> dishList = new ArrayList<>();
    //用户已点菜品
    //用HashMap存储顾客点的菜,可以同一个个菜点多次只修改数量
    //键Dish:菜品类、 值Integer:同一个菜点的数量
    static HashMap<Dish,Integer> personMap = new HashMap<>();

    public static void main(String[] args) {
        //先初始化菜品
        initDish();

        Scanner s = new Scanner(System.in);

        while (true){
            //给用户展示主菜单
            showMenu();
            //获取内容
            int num = s.nextInt();
            //判断用户输入的数字
            switch (num){
                case 1:
                    while (true){
                        //展示菜单
                        showDishMenu();

                        int id = s.nextInt();
                        if (id==0){
                            break;
                        }

                        //从菜品集合获取对象 1 2 3 4 5
                        //集合索引 0 1 2 3 4
                        Dish dish = dishList.get(id - 1);
                        System.out.println("亲,您点了:"+dish.name+" 菜");
                        //用户点一个,存储一个
                        //判断该菜是否已点,点过的数量+1
                        if (personMap.containsKey(dish)){
                            int newnum = personMap.get(dish) + 1;
                            personMap.put(dish,newnum);
                        }else{
                            personMap.put(dish,1);
                        }
                    }

                case 2:
                    //展示用户已点菜品
                    showPersonDish();
                    break;
                case 3:
                    //买单
                    buy();
                    return; //结束while循环
                case 4:
                    //退菜
                    while (true){
                        //展示菜单
                        showPersonDish();

                        int id = s.nextInt();
                        if (id==0){
                            break;
                        }

                        //从菜品集合获取对象 1 2 3 4 5
                        //集合索引
                        Dish dish = dishList.get(id - 1);
                        //判断该菜是否点了,点了数量-1
                        if (personMap.containsKey(dish)){
                            int newnum = personMap.get(dish) - 1;
                            System.out.println("亲,您退了:"+dish.name+" 菜");
                            personMap.put(dish,newnum);
                            //当已点菜的个数为0时,从顾客点单中删除
                            if (personMap.get(dish)==0){
                                personMap.remove(dish);
                            }
                        }else{
                            System.out.println("----亲,您该菜未点----");
                            continue;
                        }
                    }
            }
        }
    }
    
    private static void buy() {
        System.out.println("---请稍等,正在结算---");
        //定义总金额
        double total = 0f;
        Set<Map.Entry<Dish, Integer>> entrySet = personMap.entrySet();
        for (Map.Entry<Dish,Integer> one:entrySet){
            Dish key = one.getKey();
            Integer value = one.getValue();
            System.out.println(key+"\t"+value);
            //总金额=单价*数量
            total += key.price * value;
        }
        System.out.println("亲,您本次共消费了:"+total+" 元");
    }

    private static void showPersonDish() {
        System.out.println("---您已点的菜品---");
        Set<Map.Entry<Dish, Integer>> entrySet = personMap.entrySet();
        for (Map.Entry<Dish,Integer> one:entrySet){
            Dish key = one.getKey();
            Integer value = one.getValue();
            System.out.println(key+"\t"+value);
        }
        System.out.println("----输入序号退菜,按0返回上一级----");

    }

    private static void showDishMenu() {
        System.out.println("---请您点菜---");
        for (int i = 0; i < dishList.size(); i++) {
            Dish dish = dishList.get(i);
            System.out.println(dish.toString());
        }
        System.out.println("----输入序号点菜,按0返回上一级----");
    }
    
    public static void showMenu(){
        System.out.println("-----主菜单-----");
        System.out.println("菜单\t\t\t 1");
        System.out.println("已点菜品\t\t 2");
        System.out.println("买单\t\t\t 3");
        System.out.println("退菜\t\t\t 4");
        System.out.println("---根据编号选择服务---");
    }

    public static void initDish(){
        Dish dish = new Dish(1, "香辣肉丝", 29.0);
        dishList.add(dish);
        Dish dish2 = new Dish(2,"炖王八",59.0);
        dishList.add(dish2);
        //存放菜品
        dishList.add(new Dish(3,"家常凉菜",21.0));
        dishList.add(new Dish(4,"地三鲜",24.0));
        dishList.add(new Dish(5,"油焖大虾",55.0));

    }
}

链接: 参考来源

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值