本文主要是介绍综合实战 网上订餐系统——吃货联盟,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
文章目录
- 第一章 绪论
- 1.1 研究背景与意义
- 1.2 基本开发技术
- 1.3 相关技术分析
- 第二章 需求分析
- 2.1 主页面
- 2.2 订单页面
- 2.3 签收订单页面
- 2.4 删除订单页面
- 2.5 点赞页面
- 2.6 订餐页面
- 第三章 系统设计
- 3.1 数据初始化
- 3.2 主页面
- 3.3 订单页面
- 3.4 签收订单页面
- 3.5 删除订单页面
- 3.6 点赞页面
- 3.7 订餐页面
- 第四章 系统实现与测试
- 4.1 订餐功能
- 4.2 查看餐袋
- 4.3 签收功能
- 4.4 删除功能
- 4.5 点赞功能
- 4.6 功能测试
- 项目源码
第一章 绪论
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置1states[i] = 1;isSignFind = true;System.out.println("签收成功");} else if (names[i] != null && states[i] == 1 && signOrderId == i+1) {//如果订单的状态为1System.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 功能测试
功能模块 | 测试用例 | 预期结果 | 测试结果 |
---|---|---|---|
主页面 | 输入正确的页面序号 | 跳转到响应的功能模块 | 通过 |
主页面 | 输入错误的页面序号 | 退出系统 | 通过 |
订餐功能 | 输入合法的订餐信息 | 订餐成功并打印信息 | 通过 |
订餐功能 | 输入不合法的菜的编号 | 示意用户并重新输入 | 通过 |
订餐功能 | 输入不合法的菜的数量 | 示意用户并重新输入 | 通过 |
订餐功能 | 输入不合法的订餐时间 | 示意用户并重新输入 | 通过 |
订餐功能 | 再次输入不合法的订餐时间 | 示意用户并重新输入 | 通过 |
查看餐袋 | 进入查看餐袋页面 | 显示所有订单信息 | 通过 |
签收订单 | 输入已预定的订单编号 | 签收成功并将订单状态改为已完成 | 通过 |
签收订单 | 输入已完成的订单编号 | 弹出警告并返回主页面 | 通过 |
签收订单 | 输入不存在的订单编号 | 弹出警告并返回主页面 | 通过 |
删除订单 | 输入已完成的订单编号 | 删除成功并将后续所有信息前移一位 | 通过 |
删除订单 | 输入已预定的订单编号 | 弹出警告并返回主页面 | 通过 |
删除订单 | 输入不存在的订单编号 | 弹出警告并返回主页面 | 通过 |
点赞功能 | 输入存在的菜的编号 | 点赞成功并且该菜点赞数加已 | 通过 |
点赞功能 | 输入不存在的菜的编号 | 点赞失败并且弹出警告 | 通过 |
退出功能 | 返回主页时输入正确的字符 | 成功返回主页 | 通过 |
退出功能 | 返回主页时输入错误的字符 | 退出系统 | 通过 |
项目源码
源码下载地址
这篇关于综合实战 网上订餐系统——吃货联盟的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!