Java基础之饮食订餐系统

系统开发背景:网络时代,基于Java的外卖服务业蒸蒸日上,为了以后就业的工作需求,现对此系统通过Java基础进行浅层次的开发

需求分析

分析系统有如下功能:我要订餐、查看餐袋、签收订单、删除订单、我要点赞、退出系统。

搭建框架

首先编写一组订单信息做为数据主体
订单信息有:订餐人、所定餐品信息、送餐时间、送餐地址、订单状态、总金额

String[] names = new String[4];//订餐人
String[] dishMegs =new String[4];//所定餐品信息
int[] times =new int[4];//送餐时间
String[] addresses =new String[4];//送餐地址
int[] states =new int[4];//订单状态 0:已经预定 1:已经完成
double[] sumPrices =new double[4];//总金额

随后,编写数据主体:一组餐品信息

String[] dishNames={"红烧带鱼\t","鱼香肉丝\t","水果沙拉\t"};
double[] prices={38.0,42.0,10.0};
int[] praiseNums =new int[3];//点赞数

最后,通过dowhile循环(dowhile循环先进行操作,然后再进行判断)显示主菜单

int num=-1;
do {
    System.out.println("********************");
    System.out.println("1.我要订餐");
    System.out.println("2.查看餐袋");
    System.out.println("3.删除订单");
    System.out.println("4.签收订单");
    System.out.println("5.我要点赞");
    System.out.println("6.退出系统");
    System.out.println("********************");
    //        提示用户输入功能编号,并执行
    System.out.print("请选择");
    int choose =input.nextInt();

具体功能实现

因为功能已经被划分,接下来我们使用switch语句执行功能

一、我要订餐

完成用户订餐,每条订单包含如下信息: 
1、订餐人姓名:要求用户输入 
2、选择菜品及份数:显示三个菜单序号、名称、单价、点赞数,提示用户输入要 选择的菜品序号及份数 
3、送餐时间:要求当天 10 到 20 点间整点送餐,要求用户输入 10~20 的整数,输 入错误,重复输入。 
4、 送餐地址:要求用户输入  状态:两种状态:0:已预定(默认状态) 1、已完成(订单已签收) 
5、 总金额: 总金额 = 菜品单价*份数-送餐费 (送餐费:当单笔订单金额达到 50 元时,免送餐费,否则,需交纳 6 元送餐费) 订餐成功后,显示订单信息。
6、最后要记得用插旗的方法来标记是否餐袋已满

boolean isAdd =false;//true记录一个空的位置
case 1:
 //1.我要订餐
    System.out.println("********我要订餐*******");
    //1.查找要插入的位置
    for (int i = 0; i < names.length; i++) {
        //如果空,则记录下来
        if (names[i] ==null){
            isAdd=true;//记录一个空的位置
            //执行插入操作
            //显示所有菜品信息
            System.out.println("序号\t餐品名\t单价\t点赞数");
            for (int j = 0; j < dishNames.length; j++) {
                String price = prices[j]+"元";
                String praise =praiseNums[j]+"赞";
                System.out.println((j+1)+"\t"+dishNames[j]+"\t"+price+"\t"+praise);
            }
            //输入所选餐品编号以及份数
            System.out.print("输入所选餐品序号");
            int chooseDish=input.nextInt();
            System.out.print("请选择份数");
            int number =input.nextInt();
            String dishMeg =dishNames[chooseDish-1]+" "+number+"份";

            //输入订餐人姓名

            System.out.println("请输入订餐人姓名");
            String name =input.next();

            //输入送餐时间
            System.out.println("请输入送餐时间");
            int time=input.nextInt();
            while (time<10 || time>20){
                System.out.println("您输入的送餐时间不能小于10点以及大于20点");
                time =input.nextInt();
            }

            //输入送餐地址
            System.out.println("请输入送餐地址");
            String address  =input.next();


            //计算餐费
            double sumPrice=prices[chooseDish-1]*number;
            //送餐费
            double deliCharge = sumPrice>=50?0.0:6.0;

            //显示订单信息
            System.out.println("订餐成功,您订的是"+dishMeg);
            System.out.println("订餐人"+name);
            System.out.println("送餐时间"+time);
            System.out.println("送餐地址"+address);
            System.out.println("餐费"+sumPrice+",送餐费"+deliCharge+"元");

            //保存数据
            names[i] =name;
            dishMegs[i] =dishMeg;
            times[i] =time;
            sumPrices[i] =sumPrice+deliCharge;
            addresses[i] =address;
            break;
        }
  }//如果不为空,则提示信息
  if (!isAdd ){
    System.out.println("对不起,你的餐袋已满");
}
break;

二、查看餐袋

遍历显示已有定单
内容包括:序号、订餐人姓名、订餐信息(菜品名和份数)、送餐时间、送餐地址、 状态(已预定或已完成)、总金额

case 2:
    //2.查看餐袋
    System.out.println("********查看餐袋**********");
    System.out.println("序号\t订餐人\t所订餐品信息\t送餐时间\t送餐地址\t\t总金额\t订餐状态");
    for (int i = 0; i < names.length; i++) {
        if (names[i] !=null){
            String time=times[i]+"点";
            String sumPrice =sumPrices[i]+"元";
            String state =states[i]==0?"已预定":"已完成";
            System.out.println((i+1)+"\t"+names[i]+"\t"+dishMegs[i]+"\t"+time+"\t"+addresses[i]+"\t"+sumPrice+"\t"+state);
        }
    }

    break;

三、签收订单
1、找到,状态是已完成,不能再次签收
2、找到,状态是已预定,可以签收、
3、没找到,提示信息没找到

case 3:
                //3.签收订单
                System.out.println("*********签收订单**********");
//                要求用户输入一个签收的订单序号
                System.out.println("请输入要查找的订单序号");
                System.out.println("序号\t订餐人\t所订餐品信息\t送餐时间\t送餐地址\t\t总金额\t订餐状态");
                for (int i = 0; i < names.length; i++) {
                    if (names[i] !=null){
                        String time=times[i]+"点";
                        String sumPrice =sumPrices[i]+"元";
                        String state =states[i]==0?"已预定":"已完成";
                        System.out.println((i+1)+"\t"+names[i]+"\t"+dishMegs[i]+"\t"+time+"\t"+addresses[i]+"\t"+sumPrice+"\t"+state);
                    }
                }
                int signOrderId =input.nextInt();
                boolean isFind = false;
//                查找这条订单(遍历循环)
                for (int i = 0; i < names.length; i++) {
                    //                1、找到,状态是已完成,不能再次签收
//                2、找到,状态是已预定,可以签收
                    if (names[i]!=null && states[i]==1 && signOrderId==(i+1)){
                        System.out.println("对不起,您的订单已完成");
                        isFind=true;
                        break;
                    }else if (names[i]!=null && states[i]==0 && signOrderId==(i+1)){
                        states[i]=1;//改变状态值
                        System.out.println("订单签收成功");
                        isFind=true;
                        break;
                    }
                }
//              3、没找到,提示信息没找到
                if (!isFind){
                    System.out.println("对不起,没有找到这条订单");
                }
                break;

四、删除订单
循环查找订单
1、找到此订单,已签收,执行删除操作
2、找到订单但未签收则提示信息
3、未找到订单,提示信息没找到

case 4:
                //4.删除订单
//                1、输入要删除订单的序号(从1开始);
                System.out.println("********删除订单********");
                System.out.println("请输入要删除的订单序号");
                int delId = input.nextInt();
                int delIndex=-1;//删除订单的下标
                boolean isDelFind = false;
//                2、循环查找这条订单
                for (int i = 0; i < names.length; i++) {
                    //                找到此订单,已签收,执行删除操作
                    if (names[i]!=null && states[i]==1 && delId==(i+1)){
                        delIndex = i;
                        isDelFind = true;
                        break;
                    }
                    //     找到订单但未签收则提示信息
                    else if (names[i]!=null && states[i]==0 && delId==(i+1)){
                        System.out.println("订单未签收,不能删除");
                        break;
                    }
                }
//                未找到订单,提示信息没找到
                if (!isDelFind){
                    System.out.println("未找到订单");
                }
                //执行删除操作
                if (delIndex != -1){
                    //循环移位删除
                    for (int i = delIndex+1; i < names.length-1; i++) {
                        names[i-1] =names[i];
                        dishMegs[i-1] =dishMegs[i];
                        times[i-1]=times[i];
                        addresses[i-1]=addresses[i];
                        states[i-1]=states[i];
                    }
                    //最后一位清空
                    names[names.length-1] =null;
                    dishMegs[names.length-1]=null;
                    times[names.length-1]=0;
                    addresses[names.length-1]=null;
                    states[names.length-1]=0;
                    System.out.println("订单删除成功");
                }
                break;

五、我要点赞
1、显示供点赞的餐品列表
2、输入要点赞的餐品序号
3、该序号的餐品点赞数+1
4、显示点赞数

case 5:
                //5。我要点赞
                System.out.println("************我要点赞************");
//                1、显示供点赞的餐品列表
                System.out.println("序号\t餐品名\t单价\t点赞数");
                for (int j = 0; j < dishNames.length; j++) {
                    String price = prices[j]+"元";
                    String praise =praiseNums[j]+"赞";
                    System.out.println((j+1)+"\t"+dishNames[j]+"\t"+price+"\t"+praise);
                }
//                2、输入要点赞的餐品序号
                System.out.println("请输入要点赞的菜品");
                int dishId =input.nextInt();
//                3、该序号的餐品点赞数+1
                praiseNums[dishId-1]++;
//                4、显示点赞数
                System.out.println("点赞成功");
                System.out.println(dishNames[dishId-1]+" "+praiseNums[dishId-1]+"赞");
                break;

六、退出系统
当用户输入1~5之外的数字时,退出循环,否则提示输入0返回

 case 6:
            //6.退出系统
         default:
            break;
    }
    //当用户输入1~5之外的数字时,退出循环,否则提示输入0返回
        if(choose<1 || choose>5){
            break;
        }else {
            //      循环条件:
            //             输入0返回
            System.out.println("输入0返回");
            num = input.nextInt();
        }
    }while (num==0);
    System.out.println("谢谢使用,欢迎下次光临");
}

最后,这个系统就能通过控制台输出啦
样图

猜你喜欢

转载自blog.csdn.net/weixin_42507474/article/details/106819828