综合实战 网上订餐系统——吃货联盟

第一章 绪论

1.1 研究背景与意义

如今已进入网络时代,人们的日常生活已离不开网络,人们通过网络购物、看新闻、交友等。只要动动手指,就能送餐上门,网上订餐越来越受到都市年轻人的青睐。现要求开发一个网上订餐系统,需要实现“我要订餐”、“查看餐袋”、“签收订单”、“删除订单”、“我要点赞”和“退出系统”6个功能。项目运行结果如图所示。
在这里插入图片描述

1.2 基本开发技术

开发工具:IntelliJ IDEA,JDK1.8
开发语言:Java

1.3 相关技术分析

项目覆盖的技能点如下:
程序基本概念——程序、变量、数据类型。
使用顺序、选择、循环、跳转语句编写程序。
数组的使用

第二章 需求分析

2.1 主页面

在这里插入图片描述

2.2 订单页面

在这里插入图片描述

2.3 签收订单页面

在这里插入图片描述

2.4 删除订单页面

在这里插入图片描述

2.5 点赞页面

在这里插入图片描述

2.6 订餐页面

在这里插入图片描述

第三章 系统设计

3.1 数据初始化

将商品信息与订单信息定义为数组,为测试考虑暂时把订单上限设置到4个,并初始化三个商品和两个订单。

        //**********1.数据初始化*****************************************************************************************
        //1.1 商品信息
        String[] dishNames = new String[]{"红烧带鱼","鱼香肉丝","时令鲜蔬"};
        double[] prices = new double[]{38.0,22.5,10.0};
        int[] praiseNums = new int[]{0,0,0};

        //1.2 订单信息
        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];
        double[] sumPrices = new double[4];

        //1.3 初始化两个订单
        names[0] = "张晴";
        dishMegs[0] = "红烧带鱼两份";
        times[0] = 13;
        addresses[0] = "天成路207号";
        states[0] = 1;
        sumPrices[0] = 76.0;

        names[1] = "张晴";
        dishMegs[1] = "鱼香肉丝两份";
        times[1] = 13;
        addresses[1] = "天成路207号";
        states[1] = 0;
        sumPrices[1] = 45.0;

3.2 主页面

构造整体框架,利用do while让用户能够持续操作,再用Scanner类接受用户的输入信息,用switch case让用户能够达到各个功能页面,并记录几个关键判断初始值,如isExit、isAdd、isSignFind、isDelFind,判断用户是否退出系统、是否可以订餐、是否订单已经签收和是都已经删除。

//********2.主页面***********************************************************************************************
        Scanner scanner = new Scanner(System.in);
        int num = -1; //返回菜单标识,返回主页面/退出系统
        boolean isExit = false; //判断用户是否退出当前系统
        System.out.println("欢迎来到吃货联盟");
        do{
            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.println("请选择:");
            //获取用户选择进入哪个页面
            int choise = scanner.nextInt();
            //1.记录是否可以订餐
            boolean isAdd = false;
            //2.定义是否已经签收的订单的状态标识;
            boolean isSignFind = false;
            //3.定义删除标识
            boolean isDelFind = false;
            //利用switch实现用户分支判断
            switch (choise){
                case 1:
                    System.out.println("**********我要订餐**********");
                    break;
                case 2:
                    System.out.println("**********查看餐袋**********");
                    break;
                case 3:
                    System.out.println("**********签收订单**********");
                    break;
                case 4:
                    System.out.println("**********删除订单**********");
                    break;
                case 5:
                    System.out.println("**********我要点赞**********");
                    break;
                case 6:
                    isExit = true;
                    break;
                default:
                    isExit = true;
                    break;
            }
            if(!isExit){
                System.out.println("输入0退出");
                num= scanner.nextInt();
            }else {
                break;
            }
        }while (num == 0);
        System.out.println("谢谢,欢迎下次光临");

3.3 订单页面

利用for循环,依次打印数组订单信息中的内容,打印时用\t(制表符)保证格式美观,并用if进行判空,空信息直接跳过,增加运行速度。

 //*******************3.订单页面************************************************************************
                    System.out.println("序号\t订餐人\t\t餐品信息\t送餐日期\t\t送餐地址\t总金额\t订单状态");
                    for(int i = 0;i< names.length;i++){
                        //如果订单不为空
                        if(names[i] != null){
                            String stateStr = (states[i]==0)?"已预定":"已完成";
                            System.out.println((i+1)+"\t"+names[i]+"\t\t"+dishMegs[i]+"\t"+times[i]
                                    +"\t\t" +addresses[i]+"\t"+sumPrices[i]+"\t"+stateStr);
                        }
                    }

3.4 签收订单页面

for循环遍历数组,当为用户输入的编号时停止,用if判断订单状态是否为“已预定”,如为是,则将状态改为“已完成”;如为“已完成”,则发出警告并返回主页面。

//*******************4.签收订单页面************************************************************************
                    System.out.println("请选择要签收的订单序号");
                    //获取用户输入的订单序号
                    int signOrderId = scanner.nextInt();
                    for(int i = 0;i< names.length;i++){
                        if(names[i] != null && states[i] == 0 && signOrderId == i+1){
                            //name[i] != null的含义判断如果存在数组中有订单
                            //states[i] == 0 的含义是订单状态为已预定状态
                            //signOrderId == i+1 如果订单列表中某个订单的号的角标+1和用户输入的序号等价
                            //如果符合上述条件,则修改订单状态,由0置1
                            states[i] = 1;
                            isSignFind = true;
                            System.out.println("签收成功");
                        } else if (names[i] != null && states[i] == 1 && signOrderId == i+1) {
                            //如果订单的状态为1
                            System.out.println("您选择的订单已完成签收,不能重复签收");
                            isSignFind = true;
                        }
                    }
                    if(!isSignFind){
                        System.out.println("您选择的订单号不存在");
                    }

3.5 删除订单页面

依旧是for循环遍历订单信息,当订单信息编号与用户输入的一致且订单状态为“已完成”时,删除该信息,将数组后面的信息前移一位,并将数组中最后一位信息置空;如果输入不存在的订单或订单状态为“已预定”,则无法删除订单,弹出警告并返回主页面。

 //*******************5.删除订单页面************************************************************************
                    System.out.println("请输入要删除的订单");
                    int delId = scanner.nextInt();
                    for(int i = 0;i<names.length;i++){
                        if(names[i] != null && states[i] == 1 && delId == i+1){
                            //条件1:存在该订单 条件2:订单状态已完成 条件3:输入的订单号存在于当前订单数据中
                            isDelFind = true;
                            //某个订单删除后,后面的订单统一向前移一位
                            for(int j = delId-1;j< names.length-1;j++){
                                names[j] = names[j+1];
                                dishMegs[j] = dishMegs[j+1];
                                times[j] = times[j+1];
                                addresses[j] = addresses[j+1];
                                states[j] = states[j+1];
                                sumPrices[j] = sumPrices[j+1];
                            }

                            //最后一位清空
                            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;
                            sumPrices[names.length-1] = 0;

                            System.out.println("删除订单成功");
                            break;
                        } else if (names[i] != null && states[i] == 0 && delId == i+1) {
                            System.out.println("该订单已预定,不能删除");
                            isDelFind = true;
                            break;
                        }
                    }
                    if(!isDelFind){
                        System.out.println("您选择的订单不存在");
                    }

3.6 点赞页面

首先先利用for循环遍历商品信息,将其打印在控制台上,然后根据用户输入的菜品序号为其点赞数加一。

  //*******************6.点赞页面************************************************************************
                    System.out.println("序号\t菜名\t\t单价\t\t点赞数");
                    for(int i = 0;i< dishNames.length;i++){
                        System.out.println((i+1)+"\t"+dishNames[i]+"\t"+prices[i]+"\t"+praiseNums[i]);
                    }
                    System.out.println("请输入你要点赞的菜品序号:");
                    int praiseNum = scanner.nextInt();

                    if(praiseNum <= 0 || praiseNum> dishNames.length){
                        System.out.println("您输入的菜品不存在");
                    }else {
                        praiseNums[praiseNum-1]++;
                        System.out.println("点赞成功");
                    }

3.7 订餐页面

先用for循环遍历订单信息,如果订单信息还有空位置则可以继续进行订餐,否则弹出警告。依次让用户输入“订餐人姓名”、“菜品编号”、“菜品数量”、“送餐时间”和“送餐地址”,接着打印用户本次订餐的信息,并将信息添加到数组当中。

 //*******************7.订餐页面************************************************************************
                    for(int i = 0;i< names.length;i++){
                        if(names[i] == null){
                            isAdd = true;
                            System.out.println("请输入订餐人姓名");
                            String name = scanner.next();
                            System.out.println("序号\t菜名\t单价\t点赞数");
                            for(int j = 0;j< dishNames.length;j++){
                                System.out.println((j+1)+"\t"+dishNames[j]+"\t"+prices[j]+"\t"+praiseNums[j]);
                            }
                            //用户点菜
                            System.out.println("请输入点的菜的编号");
                            int chooseDish = scanner.nextInt();
                            System.out.println("请输入需要的份数");
                            int number = scanner.nextInt();

                            String dishMeg = dishNames[chooseDish-1]+number+"份";
                            //菜品总价格
                            double sumPrice = prices[chooseDish-1] * number;
                            //运送费
                            double deliCharget = sumPrice>50?0:6;
                            System.out.println("请输入送餐时间(送餐时间为10点到20点整):");
                            //送餐时间
                            int time = scanner.nextInt();
                            if(time<10 || time>20){
                                System.out.println("您的输入有误,请输入10-20之间的整数");
                                time = scanner.nextInt();
                            }
                            System.out.println("请输入运送地址");
                            //运送地址
                            String address = scanner.next();

                            //打印订餐信息
                            System.out.println("*******订餐成功*******");
                            System.out.println("您订购的是"+dishMeg);
                            System.out.println("运送时间为"+time+"点");
                            System.out.println("餐费"+sumPrice);
                            System.out.println("运送费"+deliCharget);
                            System.out.println("总价格"+(sumPrice+deliCharget));

                            //添加信息到数组中
                            names[i] = name;
                            dishMegs[i] = dishMeg;
                            times[i] = time;
                            addresses[i] = address;
                            states[i] = 0;
                            sumPrices[i] = sumPrice+deliCharget;
                            break;
                        }
                    }
                    if(!isAdd){
                        System.out.println("对不起,您的购物车已满");
                    }

第四章 系统实现与测试

4.1 订餐功能

输入1进入订餐页面,依次输入订餐人姓名、点的菜的编号、点的菜的数量、送餐时间和送餐地址,系统将自动打印本次订餐信息。
在这里插入图片描述
在这里插入图片描述

4.2 查看餐袋

输入2进入查看餐袋页面,系统将显示您所有的订餐信息。
在这里插入图片描述

4.3 签收功能

输入3进入签收订单页面,再输入需要签收的订单,系统将输出“签收成功“。
在这里插入图片描述

4.4 删除功能

输入4进入删除订单页面,再输入需要删除的订单,系统将输出“删除订单成功“。
在这里插入图片描述

4.5 点赞功能

输入5进入我要点赞页面,系统会打印所有的菜品信息,输入你想要点赞的菜品的序号,系统将输出“点赞成功“。

4.6 功能测试

功能模块测试用例预期结果测试结果
主页面输入正确的页面序号跳转到响应的功能模块通过
主页面输入错误的页面序号退出系统通过
订餐功能输入合法的订餐信息订餐成功并打印信息通过
订餐功能输入不合法的菜的编号示意用户并重新输入通过
订餐功能输入不合法的菜的数量示意用户并重新输入通过
订餐功能输入不合法的订餐时间示意用户并重新输入通过
订餐功能再次输入不合法的订餐时间示意用户并重新输入通过
查看餐袋进入查看餐袋页面显示所有订单信息通过
签收订单输入已预定的订单编号签收成功并将订单状态改为已完成通过
签收订单输入已完成的订单编号弹出警告并返回主页面通过
签收订单输入不存在的订单编号弹出警告并返回主页面通过
删除订单输入已完成的订单编号删除成功并将后续所有信息前移一位通过
删除订单输入已预定的订单编号弹出警告并返回主页面通过
删除订单输入不存在的订单编号弹出警告并返回主页面通过
点赞功能输入存在的菜的编号点赞成功并且该菜点赞数加已通过
点赞功能输入不存在的菜的编号点赞失败并且弹出警告通过
退出功能返回主页时输入正确的字符成功返回主页通过
退出功能返回主页时输入错误的字符退出系统通过

项目源码

源码下载地址

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值