JAVA课设作业-实现饭店点菜系统源码

本文介绍了一个由JAVA实现的饭店点菜系统,增强了代码的健壮性,包括展示菜单、点菜、结账和退菜等功能。用户可以输入菜品序号进行操作,系统能处理多菜品点选及退菜请求。此外,代码中还包含了异常处理和集合操作,确保了程序的稳定运行。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

JAVA实现饭店点菜系统详解-增强健壮性


原文: JAVA实现饭店点菜系统详解.
本文在上文的基础上增强了代码的健壮性和其他一些修改。如有bug还请各位积极指正,共同成长!
话不多说,码来:

package menuFood;
import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;

/**
 * 原创:太原理工大学---软件学院---李同学  https://blog.youkuaiyun.com/m0_53793974/article/details/119353194?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522164085425116781685351926%2522%252C%2522scm%2522%253A%252220140713.130102334..%2522%257D&request_id=164085425116781685351926&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2~all~sobaiduend~default-1-119353194.pc_search_insert_es_download&utm_term=JAVA%E5%AE%9E%E7%8E%B0%E9%A5%AD%E5%BA%97%E7%82%B9%E8%8F%9C%E7%B3%BB%E7%BB%9F%E8%AF%A6%E8%A7%A3&spm=1018.2226.3001.4187
 * 复现&健壮性:Zohing  https://blog.youkuaiyun.com/weixin_45241364
 * java实现 点菜系统
 * 欢迎大家一起交流。评论或者私信。
 */

class dish {
	
	public int id;
    public String name;
    public double price;
    
	//构造方法,每一个菜 都是一个对象
    public dish(int id, String name, double price) {
        this.id = id;
        this.name = name;
        this.price = price;
    }
}

public class menu {
    //声明两个集合,第一个用来保存 饭店菜单,第二个用来保存 客户所点菜单
    static List<dish> restaurantList = new ArrayList<>();
    static List<dish> clientList = new ArrayList<>();

    public static double total = 0f;
    
    // 展示主菜单方法。
    public static void menu_index() {
        System.out.println("菜单 ---> 1");
        System.out.println("结账 ---> 2");
        System.out.println("退菜 ---> 3");
        System.out.println("退出系统 --->4");
    }
    
    public static void dish_add() {
    	
    	//第一种声明方法,并添加到饭店菜单中。
        dish dish_1 = new dish(1, "鱼香肉丝", 28.0);
        restaurantList.add(dish_1);
        dish dish_2 = new dish(2, "炖王八", 58.0);
        restaurantList.add(dish_2);
        dish dish_3 = new dish(3, "家常凉菜", 18.0);
        restaurantList.add(dish_3);
        //第二种声明方法
        restaurantList.add(new dish(4,"山西过油肉",38.0));
        restaurantList.add(new dish(5,"西湖牛肉羹",36.0));

    }
    
    public static void initial() {

        Scanner sc = new Scanner(System.in);
        boolean in_out = true;
        
    	while (in_out) {
            int num = sc.nextInt();
            try {
            	switch (num) {
                case 1:
                    showdish_();
                    int show_id = sc.nextInt();
                    if (show_id == 0) {
                    	System.out.println();
                        menu_index();
                        break;
                    } else if(show_id >= 1 && show_id <= 5){
                        dish dish_ = restaurantList.get(show_id - 1);
                        System.out.println("亲,您点了:" + dish_.name);
                        clientList.add(dish_);
                        System.out.println();
                        menu_index();
                        break;
                    } else {
                    	System.out.println("菜单序号不存在,请重新输入");
                    	System.out.println();
                    	menu_index();
                    	break;
                    }
                case 2:
                    paying();
                    if(total == 0f) {
                    	System.out.println("您还未点菜");
                		System.out.println();
                		menu_index();
                    }else {
                    	System.out.println();
                    	menu_index();
                    }
                    break;
                case 3:
                	if(clientList.size()==0) {
                		System.out.println("您还未点菜");
                		System.out.println();
                		menu_index();
                	}else {
                		System.out.println("输入您要退掉菜品的编号");
                        int exit_id = sc.nextInt();
                        exitdish_(exit_id);
                        System.out.println();
                        menu_index();
                	}
                    break;
                case 4:
                	in_out = false;
                	break;
                default:
                	System.out.println("输入不正确,请重新输入");
                	System.out.println();
                	menu_index();
                	break;
            }
            }catch (Exception e){
                System.out.println("输入有误,请务必输入整数!");;
                String temp = sc.nextLine();//目的是为了吃掉错误信息和换行符
            }
            
        }sc.close();
    }
    

    //展示饭店菜单方法
    public static void showdish_() {
    	if(clientList.size()==0) {
        	System.out.println("----您没有点菜----");
        }else {
        	System.out.println("----您已点菜品----");
        	//为了方便客户能够正确的选择菜品编号,我们采用 1  2 3 4 的顺序输出已点菜品  
            for(int i = 0; i < clientList.size();i++){ 
                System.out.println( (i+1) + "    " + clientList.get(i).name + "   "  + clientList.get(i).price + "元");
            }
        }
    	System.out.println("----请您点菜----");
        //遍历集合,将之前声明的对象集合 全部展示到控制台
        for (int i = 0; i < restaurantList.size(); i++) {
        	dish dish_ = restaurantList.get(i);
            System.out.println(dish_.id+ "   " + dish_.price + "元" + "  " + dish_.name );
        }
        System.out.println("---根据序号点菜,按 0 返回上一级---");
    }


    // 结账 遍历 clientList 集合的 price 累加即可
    public static void paying() {
    	
        // 另一种遍历集合的方法。大家学习哦
        for (dish dish_ : clientList) {
            total += dish_.price;
        }
        System.out.println("您共消费:" + total + "元");
        System.out.println("----正在结账,请稍等!----");
        System.out.println("支付成功"+total);
    }

    //退菜操作  使用集合的 remove 方法。 采用有参数的方法。先告诉客户要退掉的菜品,再执行remove操作,这两句代码不能颠倒
    public static void exitdish_(int i){
        System.out.println("您已退掉:" + clientList.get(i-1).name + "  " + clientList.get(i-1).price + "元");
        clientList.remove(i-1);
    }
    
    public static void main(String[] args) {
    	
        dish_add();
        menu_index();
    	initial();
        
    }
    
}

以下代码为2023/06/28更新,如还有其他bug欢迎指正

import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;

/**
 * 原创:太原理工大学---软件学院---李同学  https://blog.youkuaiyun.com/m0_53793974/article/details/119353194?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522164085425116781685351926%2522%252C%2522scm%2522%253A%252220140713.130102334..%2522%257D&request_id=164085425116781685351926&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2~all~sobaiduend~default-1-119353194.pc_search_insert_es_download&utm_term=JAVA%E5%AE%9E%E7%8E%B0%E9%A5%AD%E5%BA%97%E7%82%B9%E8%8F%9C%E7%B3%BB%E7%BB%9F%E8%AF%A6%E8%A7%A3&spm=1018.2226.3001.4187
 * 复现&健壮性:Zohing  https://blog.youkuaiyun.com/weixin_45241364
 * java实现 点菜系统
 * 欢迎大家一起交流。评论或者私信。
 */

class dish {
	
	public int id;
    public String name;
    public double price;
    
	//构造方法,每一个菜 都是一个对象
    public dish(int id, String name, double price) {
        this.id = id;
        this.name = name;
        this.price = price;
    }
}

public class menu {
    //声明两个集合,第一个用来保存 饭店菜单,第二个用来保存 客户所点菜单
    static List<dish> restaurantList = new ArrayList<>();
    static List<dish> clientList = new ArrayList<>();

    public static double total = 0f;
    
    // 展示主菜单方法。
    public static void menu_index() {
        System.out.println("菜单 ---> 1");
        System.out.println("结账 ---> 2");
        System.out.println("退菜 ---> 3");
        System.out.println("退出系统 --->4");
    }
    
    public static void dish_add() {
    	
    	//第一种声明方法,并添加到饭店菜单中。
        dish dish_1 = new dish(1, "鱼香肉丝", 28.0);
        restaurantList.add(dish_1);
        dish dish_2 = new dish(2, "炖王八", 58.0);
        restaurantList.add(dish_2);
        dish dish_3 = new dish(3, "家常凉菜", 18.0);
        restaurantList.add(dish_3);
        //第二种声明方法
        restaurantList.add(new dish(4,"山西过油肉",38.0));
        restaurantList.add(new dish(5,"西湖牛肉羹",36.0));

    }
    
    public static void initial() {

        Scanner sc = new Scanner(System.in);
        boolean in_out = true;
        
    	while (in_out) {
            int num = sc.nextInt();
            try {
            	switch (num) {
                case 1:
                    showdish_();
                    String show_ids = sc.next();
                    String[] menuId = show_ids.split(",");
                    for(int i = 0; i < menuId.length; i++) {
                        int show_id = Integer.valueOf(menuId[i]);
                        if (show_id == 0) {
                            break;
                        } else if(show_id >= 1 && show_id <= 5){
                            dish dish_ = restaurantList.get(show_id - 1);
                            System.out.println("亲,您点了:" + dish_.name);
                            clientList.add(dish_);
                        } else {
                        	System.out.println("菜单序号不存在,请重新输入");
                        	break;
                        }
                    }
                    System.out.println();
                    menu_index();
                    break;
                case 2:
                    if(clientList.size()==0) {
                    	System.out.println("您还未点菜");
                		System.out.println();
                		menu_index();
                    }else {
                        paying();
                    	System.out.println();
                    	menu_index();
                    }
                    break;
                case 3:
                	if(clientList.size()==0) {
                		System.out.println("您还未点菜");
                		System.out.println();
                		menu_index();
                	}else {
                		System.out.println("输入您要退掉菜品的编号");
                        int exit_id = sc.nextInt();
                        boolean msg = false;
                        for(int i = 0; i < clientList.size();i++){
                        	if(clientList.get(i).id == exit_id){
                                exitdish_(i,exit_id);
                        	} else {
                        		msg = true;
                        	}
                        }
                        if(msg){
                    		System.out.println("该菜品您还未点菜");
                        }
                        System.out.println();
                        menu_index();
                	}
                    break;
                case 4:
                	in_out = false;
                	break;
                default:
                	System.out.println("输入不正确,请重新输入");
                	System.out.println();
                	menu_index();
                	break;
            }
            }catch (Exception e){
                System.out.println("输入有误,请务必输入整数!");;
                String temp = sc.nextLine();//目的是为了吃掉错误信息和换行符
            }
            
        }sc.close();
    }
    

    //展示饭店菜单方法
    public static void showdish_() {
    	if(clientList.size()==0) {
        	System.out.println("----您没有点菜----");
        }else {
        	System.out.println("----您已点菜品----");
        	//为了方便客户能够正确的选择菜品编号,我们采用 1  2 3 4 的顺序输出已点菜品  
            for(int i = 0; i < clientList.size();i++){ 
                System.out.println( (i+1) + "    " + clientList.get(i).name + "   "  + clientList.get(i).price + "元");
            }
        }
    	System.out.println("----请您点菜----");
        //遍历集合,将之前声明的对象集合 全部展示到控制台
        for (int i = 0; i < restaurantList.size(); i++) {
        	dish dish_ = restaurantList.get(i);
            System.out.println(dish_.id+ "   " + dish_.price + "元" + "  " + dish_.name );
        }
        System.out.println("---根据序号点菜(多点时请使用,分隔),按 0 返回上一级---");
    }


    // 结账 遍历 clientList 集合的 price 累加即可
    public static void paying() {
    	
        // 另一种遍历集合的方法。大家学习哦
        for (dish dish_ : clientList) {
            total += dish_.price;
        }
        System.out.println("您共消费:" + total + "元");
        System.out.println("----正在结账,请稍等!----");
        System.out.println("支付成功"+total+"   您的菜单已重置。");
        clientList.clear();
    }

    //退菜操作  使用集合的 remove 方法。 采用有参数的方法。先告诉客户要退掉的菜品,再执行remove操作,这两句代码不能颠倒
    public static void exitdish_(int i,int menuId){
        System.out.println("您已退掉:" + clientList.get(i).name + "  " + clientList.get(i).price + "元");
        clientList.remove(i);
    }
    
    public static void main(String[] args) {
    	
        dish_add();
        menu_index();
    	initial();
        
    }
    
}



评论 11
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值