java基础-7(项目练习)

需求说明

模拟订餐系统,要求有如下功能:

1、订餐

1 .1进入此流程后,弹出菜单,顾客选择菜品

1 .2菜品选好后,依次填写收货人,配送时间和配送地点等信息

1 .3填写完成后,显示订餐成功,并选择返回上级还是退出程序

2、查看订单信息及状态

2.1点击显示全部订单信息(包含订单序号、菜品种类,预定数量、总金额、配送时间、配 送地点和收货人等信息)及状态

3、确认收货

3 .1进入此流程后,提示顾客输入确认收货的订单编号

3 .2对订单编号进行校验,若订单存在且未收货,则将订单状态改为已完成

4、删除订单

4 .1进入此流程后,提示顾客输入要删除订单的编号

4 .2对订单编号进行校验,若订单存在且已收货,则将订单删除,并相应调整剩余订单编号

5、为菜品点赞

5.1进入此流程后,提示顾客输入要点赞的菜品编号

5 .2编号校验合格后,对菜品点赞,输出点赞成功,并询问是否查看全部菜品的当前点赞数量

5 .3选择查看则显示全部点赞数量

思路分析

需要处理的信息汇总:

菜品名称(String)、菜品单价(double)、点赞数量(int)

订餐种类(String)、订餐数量(int)、配送时间(int)、配送地址(String)、收货人(String)

每条订单包含以上信息,因此可将每条订单保存在一个String数组中,全部订单保存在一个二维数组中

主方法可以选择采用可以控制是否结束的死循环保持程序运行装填(while(flag),循环内可以设置flag状态,可以关闭退出)

将菜品名称(String)、菜品单价(double)、点赞数量(int)以及订单二维数组等信息作为main方法的全局变量写在最开始,通过Scanner类选择操作,使用switch结构对输入的数字进行判断,执行相应操作

订餐即为多次Scanner输入,最后将输入的信息保存在订单二维数组中

查看全部订单状态,即为打印订单二维数组

确认收货即为将订单二维数组中指定序号的字符串数组中的“已预定”修改为“已完成”

删除订单即为将订单二维数组中指定序号的字符串数组删除,并将后面的订单前移

点赞即为对应菜品名称序号的点赞数量数组元素加一

退出程序,将flag设为false即可

代码实现

public static void main(String[] args) {
        Scanner sc=new Scanner(System.in);
        String[] dishes={"红烧肉","水煮肉","清蒸鱼","干锅鸭"};//菜品预定
        double[] prizes=   {   25,    30,    18,      28};//单价预定
        int[] honours={     0,     0,      0,      0};//初始点赞值
        String[][] orders=new String[1024][];//保存全部订单的二维数组,将数组容量设置足够大
        boolean flag=true;//标志位,判断程序是否退出
        while (flag){
            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("---输入5:我要点赞---");
            System.out.println("---输入6:退出程序---");
            System.out.println("********************");
            System.out.print("请输入您的选择:\t");
            int chose=sc.nextInt();
            switch (chose){
                //订餐,目的为向订单数组中添加元素
                case 1:
                    System.out.println("***我要订餐***");
                    System.out.println("序号\t\t菜品\t\t单价");
                    for (int i = 0; i < dishes.length; i++) {//打印菜品及单价
                        System.out.println(" "+(i+1)+"\t   "+dishes[i]+"\t"+prizes[i]+"元");
                    }
                    //获得选择的餐品种类
                    int dishNum=0;
                    do {
                        System.out.print("请输入您要预定的餐品序号:");
                        dishNum=sc.nextInt();
                        if (dishNum>4||dishNum<1) System.out.println("输入错误,请重试");
                    }while (dishNum>4||dishNum<1);//数据合法检测,防止输入不存在的菜品序号
                    //获得餐品份数
                    int dishMount=0;
                    do {
                        System.out.print("请输入您要预定的份数:");
                        dishMount=sc.nextInt();
                        if (dishMount<1){
                            System.out.println("输入错误,请重试");
                        }
                    }while (dishMount<1);//数据合法检测,防止输入小于一份的份数
                    //获得订餐人信息
                    String eater="";
                    System.out.print("请输入订餐人姓名:");
                    eater=sc.next();
                    //输入配送时间
                    int deliveryTime=0;
                    do {
                        System.out.print("请输入配送时间:");
                        deliveryTime=sc.nextInt();
                        if (deliveryTime<8||deliveryTime>21){
                            System.out.println("您输入的配送时间不再商家工作时间内,请重新输入");
                        }
                    }while (deliveryTime<8||deliveryTime>21);//要求在8-21点内配送
                    //获得配送地址
                    System.out.print("请输入配送地址:");
                    String address=sc.next();
                    //订餐成功,输出提示信息,并将以上信息汇总存入订单数组
                    System.out.println("订餐成功,请耐心等待");
                    for (int i = 0; i < orders.length; i++) {
                        if (orders[i]==null){
                            orders[i]=new String[2];
                            orders[i][0]="   "+dishes[dishNum-1]+"\t\t"
                            	+dishMount+"\t "+prizes[dishNum-1]*dishMount+"\t\t"
                            	+eater+"\t\t "+deliveryTime+"点\t\t"+address;
                            orders[i][1]="已预定";
                            break;
                        }
                    }
                    break;
                //输出全部订单信息
                case 2:
                    System.out.println("***查看餐袋***");
                    System.out.println("序号\t餐品种类\t订餐数量\t总金额\t订餐人\t配送时间\t\t配送地址\t\t订单状态");
                    for (int i = 0; i < orders.length; i++) {
                        if (orders[i]==null){//过滤掉订单数组中多余的部分
                            break;
                        }
                        System.out.println(" "+(i+1)+orders[i][0]+"\t\t"+orders[i][1]);
                    }
                    break;
                //确认收货:修改订单状态信息
                case 3:
                    System.out.println("***确认收货***");
                    int confirmNum=0;
                    int currentNumber=0;
                    for (int i = 0; i < orders.length; i++) {//获取当前订单总量
                        if (orders[i]!=null){
                            currentNumber++;
                        }
                    }
                    do {//数据合法检测,过滤掉不存在的订单编号、已完成的订单编号
                        System.out.println("请输入要收货的编号");
                        boolean isConfirmed=false;
                        confirmNum=sc.nextInt();
                        if (confirmNum<1||confirmNum>currentNumber){
                            System.out.println("您要确认的订单不存在,请确认后重试");
                        }else {
                            if ("已完成".equals(orders[confirmNum-1][1])){
                            //防止订单全部收货时进入此页面卡死,输入一个已收货的订单序号后可以跳转到模块结束位置
                                System.out.println("订单已完成,无法重复确认");
                            }else {
                                isConfirmed=true;
                                orders[confirmNum-1][1]="已完成";
                            }
                        }
                        if (isConfirmed){
                            System.out.println("订单已确认,请您用餐");
                            break;
                        }
                    }while (confirmNum<1||confirmNum>currentNumber);
                    break;
                //删除订单
                case 4:
                    System.out.println("***删除订单***");
                    int deleteNum=0;//要删除的订单编号
                    int currentNum=0;//订单总数量
                    for (int i = 0; i < orders.length; i++) {
                        if (orders[i]!=null){
                            currentNum++;
                        }
                    }
                    do {//数据合法检测,过滤掉不存在的订单编号、未完成的订单编号
                        System.out.print("请输入要删除的订单编号");
                        deleteNum=sc.nextInt();
                        if (deleteNum<1||deleteNum>currentNum){
                            System.out.println("您要删除的订单不存在,请确认后重试");
                        }else if ("已预定".equals(orders[deleteNum-1][1])){
                            System.out.println("未完成的订单无法删除");
                        }else {
                            if (deleteNum==currentNum){
                                orders[deleteNum-1]=null;
                                System.out.println("删除成功");
                                break;
                            }else {
                                for (int i = deleteNum; i < orders.length; i++) {
                                    orders[i]=orders[i+1];
                                    if (i==currentNum){
                                        break;
                                    }
                                }
                                System.out.println("删除成功");
                                break;
                            }
                        }
                    }while (deleteNum<1||deleteNum>currentNum||"已完成".equals(orders[deleteNum-1][1]));
                    break;
                 //点赞
                case 5:
                    int honourNo=0;
                    do {
                        System.out.println("请输入您要点赞的菜品编号");
                        honourNo=sc.nextInt();
                        if (honourNo>dishes.length||honourNo<1){
                            System.out.println("您要点赞的菜品不存在,请确认后重试");
                        }else {
                            honours[honourNo]++;
                        }
                    }while (honourNo>dishes.length||honourNo<1);
                    System.out.println("点赞成功");
                    int willLook=0;
                    do {
                        System.out.println("是否查看菜品点赞数量");
                        System.out.print("输入0查看 输入1不查看");
                        willLook=sc.nextInt();
                        if (willLook==0){
                            System.out.println("序号\t菜品\t点赞数");
                            for (int i = 0; i < dishes.length; i++) {
                                System.out.println(" "+(i+1)+dishes[i]+"\t"+honours[i]);
                            }
                        }else if (willLook==1){

                        }else {
                            System.out.println("输入错误,请重试");
                        }
                    }while (willLook!=0&&willLook!=1);
                    break;
                //退出程序
                case 6:
                    flag=false;
                    break;
                default:
                    System.out.println("输入错误,请确认后重新输入");
            }
            if (chose>0&&chose<6){
                do {
                    System.out.println("输入0返回上级:");
                    System.out.println("输入1结束程序:");
                    System.out.print("请输入您的选择:");
                    chose=sc.nextInt();
                    if (chose==0){
                    }else if (chose==1){
                        flag=false;
                    }else {
                        System.out.println("输入错误,请重试!");
                    }
                }while(chose!=0&&chose!=1);
            }else {
                break;
            }
        }
        System.out.println("感谢使用,欢迎下次光临");
        System.out.println("********************");
    }
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值