JAVA学习记录DAY 13

今天记录一下综合运用数组、变量、流程控制中的选择结构和循环结构,完成一个吃货联盟的点餐系统(仅有展示效果)。点餐系统的首页是选项,所以大的框架是选择结构,每次选择完成有提示返回首页,所以嵌套在一个循环结构里,由于不知道循环次数以及无论如何都要展示第一次,因此用do...while...结构比较合适。然后每层再根据需要一一拆解就可以了

Scanner input=new Scanner(System.in);
int choose=-1;
String[] menu={"松鼠桂鱼","麻婆豆腐","上汤羊肉","番茄炒蛋"};
int[] like={1,1,1,1};
double[] price={88,18,68,28};
String[][] bills=new String[400][2];
do {//先完成首页框架搭建
    System.out.println("welcome to FoodLeague System!");
    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("请选择:");
    choose=input.nextInt();
    switch (choose){
        case 1:
            System.out.println("【1.我要点餐】");
            System.out.print("请输入姓名:");
            String name=input.next();,
            System.out.println("序号\t\t菜名\t\t价格\t\t好评数");
            for (int i = 0; i < menu.length; i++) {
                System.out.println(i+1+"\t"+menu[i]+"\t\t"+price[i]+"\t"+like[i]);
            }
            System.out.print("请输入您想要的菜品序号:");
            int num=input.nextInt();
            while(num < 1 || num > menu.length) {
                    System.out.println("输入错误,请重新输入菜品序号:");
                num=input.nextInt();
                }
            System.out.print("请输入您需要的份数:");
            int pcs=input.nextInt();
            int time=0;
            do{
            System.out.print("请输入您期望的配送时间(10-20点送餐):");
            time=input.nextInt();
            if(time<10||time>20){ System.out.println("超出配送时间范围,请重新输入:");}
            }while (time<10||time>20);
            System.out.print("请输入您的配送地址:");
            String address=input.next();
            double total=price[num-1]*pcs;
            double sendprice=total<50?6:0;//计算是否免配送费
            total+=sendprice;
            System.out.println("订餐成功!您的订单是:"+menu[num-1]+pcs+"份。总价为"+total+"元,其中配送费为:"+sendprice+"元。将为您于"+time+"点"+"配送至:"+address+"。");
            for (int i = 0; i < bills.length; i++) {
        //遍历找到插入新订单的位置,这边暂时没有考虑订单溢出的情况
               if(bills[i][0]==null){
                   bills[i][0]=name+"\t   "+menu[num-1]+"\t "+pcs+"份\t  "+time+"点\t\t"+address+"\t\t "+total+"元\t "+sendprice+"元";//合并成字符串存入订单,并填写订单状态
                   bills[i][1]="已预定";
               break;
               }
            }
            break;
​​​​​​​
        case 2:System.out.println("【2.查看订单】");//查看只是遍历展示
            System.out.println("序号\t"+"\t姓名\t"+"\t菜名\t"+"\t数量\t"+"\t送餐时间\t"+
                    "\t送餐地址\t"+"\t订单总金额\t"+"\t配送费\t"+"\t订单状态");
            for (int i = 0; i < bills.length; i++) {
                if(bills[i][0]==null){break;}else {//判断是否为空
                System.out.println(" "+(i+1)+"\t"+bills[i][0]+"\t\t "+bills[i][1]);}
            }
            break;

        case 3:System.out.println("【3.签收订单】");
            System.out.println("序号\t"+"\t姓名\t"+"\t菜名\t"+"\t数量\t"+"\t送餐时间\t"+
                    "\t送餐地址\t"+"\t订单总金额\t"+"\t配送费\t"+"\t\t订单状态");
            int flag=0;//插个旗
            if(bills[0][0]==null){//判断当前是否有订单
                 System.out.println("当前未有订单,请返回首页!");break;}
            for (int i = 0; i < bills.length; i++) {
               if(bills[i][0]==null){break;}if(bills[i][1]=="已预定"){flag=1;
                     System.out.println(i+1+" \t"+bills[i][0]+"\t\t\t "+bills[i][1]);}
                    }
            if(flag==0){//已完成的订单不可以重复签收,判断是否有可签收的订单
                     System.out.println("当前未有已完成订单,请返回首页!");break;}
            int signfornum;
            do {//有可签收订单时的可能性
                System.out.print("请选择要签收的订单:");
                signfornum = input.nextInt();
                if (signfornum < 1 || signfornum > bills.length) {
                    System.out.println("输入错误,请输入0返回首页!");
                } else if (bills[signfornum-1][0] == null) {
                    System.out.println("该订单不存在,请重新输入:");
                }else if (bills[signfornum-1][1].equals("已完成")) {
                    System.out.println("该订单已签收,请勿重复签收");
                    break; } else {
                    bills[signfornum-1][1] = "已完成";
                    System.out.println("签收成功!");break;
                }
            }while (signfornum >=1 && signfornum <= bills.length);
            break;

        case 4:System.out.println("【4.删除订单】");
            System.out.println("序号\t"+"\t姓名\t"+"\t菜名\t"+"\t数量\t"+"\t送餐时间\t"+
                    "\t送餐地址\t"+"\t订单总金额\t"+"\t配送费\t"+"\t\t订单状态");
            if(bills[0][0]==null){//判断当前是否有订单
                 System.out.println("当前未有订单,请返回首页!");break;}
            for (int i = 0; i < bills.length; i++) {
                if(bills[i][0]==null){break;}//遍历到订单为空的时候跳出循环
                else{
                    System.out.println(i+1+" \t"+bills[i][0]+"\t\t\t"+bills[i][1]);}
            }
            int delnum,doublecheck;
            System.out.print("请选择要删除的订单号:");
            delnum = input.nextInt();
            if (delnum < 1 || delnum > bills.length) {
                System.out.println("输入错误,请输入0返回首页!");
            } else if (bills[delnum-1][0] == null) {
                System.out.println("该订单不存在,请输入0返回首页!");
            }else if (!bills[delnum-1][1].equals("已完成")) {
                System.out.println("该订单未签收,不能删除!");
            } else {//再次确认
                System.out.print("即将删除订单" + delnum + ",请再次输入订单号确认删除——");
                doublecheck = input.nextInt();
                if (doublecheck != delnum) {
                    break;
                } else {//删除后把下方订单依次移动到上面
                    for (int i = delnum - 1; i < bills.length; i++) {
                        bills[i][0] = bills[i + 1][0];
                        bills[i][1] = bills[i + 1][1];
                        if (bills[i][0] == null) {
                            System.out.println("删除成功!");
                            break;
                        }
                    }
                }
            }
                break;

        case 5: System.out.println("【5.我要点赞】");
            System.out.println("序号 \t菜名\t\t价格\t\t好评数");
            for (int i = 0; i < menu.length; i++) {
                System.out.println((i+1)+"  \t"+menu[i]+"\t\t"+price[i]+"\t"+like[i]);
            }
            System.out.print("请输入您想要点赞的菜品序号:");
            int likenum=input.nextInt();
            while(likenum < 1 || likenum > menu.length){
                System.out.println("输入错误,请重新输入菜品序号:");
                likenum=input.nextInt();}
                if(likenum >= 1 && likenum < menu.length){like[likenum-1]++;
                System.out.println("点赞成功!菜品"+menu[likenum-1]+"已有"+like[likenum-1]+"个好评!");}
            break;

        case 6:System.out.println("【6.退出系统】");
            break;
            default:System.out.println("输入错误,请重新选择!");
                break;
    }
    if(choose<1||choose>5){continue;}
    System.out.println("如需返回首页,请输入0:");
    int back=input.nextInt();
    if(back!=0){
        System.out.println("输入错误,退出系统!");break;}
}while (choose!=6);
System.out.println("感谢您的使用,欢迎下次再来!");

上一篇:吃货联盟—Java基础代码实例


下一篇:PTA B1016 Phone Bills 模拟题