学习java的第十课—— 实战 吃货联盟
2021/10/11 17:14:16
本文主要是介绍学习java的第十课—— 实战 吃货联盟,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
项目功能分析
项目框架整体搭建
欢迎菜单展示 控制台输出语句
退出 正常选择6-break
相应用户选择(switch)
数组主体(多个数组或者二维数组)
菜品信息(序号 菜名 单价 点赞数)
订单信息(序号 订餐人 餐品信息 送餐时间 送餐地址 总金额 订单时间)
公共:Scanner
我要订餐
循环遍历(菜品信息)
条件判断(送餐时间、送餐费)-条件判断结构、三目运算符(?:)
查看餐袋
循环遍历(订单信息)
条件判断(空的订单不展示)
签收订单
条件判断(订单存在才能签收、已完成的订单无法签收)
删除订单
条件判断(订单存在才能删除、已完成的订单才能删除)
我要点赞
条件判断(存在菜品、点赞数)
循环遍历(菜品信息:序号 菜名 单价 点赞数)
第一阶段:分析数据主体
菜品信息(序号 菜名 单价 点赞数)-订餐 点赞
订单信息(序号 订餐人 餐品信息 送餐时间 送餐地址 总金额 订单时间)
各数组元素通过相同下标关联起来:相同下标的数组元素代表了同一个菜品。比如菜品数组中的第一个下标0为红烧带鱼,单价数组中的第一个下标0就为红烧带鱼的单价金额
String[] name = {"红烧带鱼","鱼香肉丝","时令蔬菜"};//菜品名称 double[] money = {38.0,20.0,10.0};//单价 int[] zan = new int[3];//点赞数 初始没用数值,不需要赋值 //定义数据主体:订单-订餐人 餐品信息 送餐时间 送餐地址 总金额 订单状态 String[] names = new String[4]; String[] msg =new String[4];//菜品名称+订份数 int[] time = new int[4];//事件 String[] dizhi = new String[4];//送餐地址 double[] sum = new double[4];//总金额 int[] states = new int[4];//0:已预定 1:已完成 //初始化2个订单信息 name[0]="张三"; msg[0]="红烧带鱼 2份"; time[0]=10; dizhi[0]="知春路223号"; sum[0]=76;//餐费大于50 免配送费,否则配送费6元 states[0]=0;//已预定 name[1]="李四"; msg[1]="鱼香肉丝 2份"; time[1]=10; dizhi[1]="天成路207号"; sum[1]=26; states[1]=1;//已完成
第二阶段:分析并完成整体框架(重难点)
使用do-while循环
switch分支
System.out.println("欢迎使用“吃货联盟订餐系统”"); 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.println("请选择:"); int choose = input.nextInt(); switch(choose) { 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://退出系统 break; default: break; } System.out.println("请输入0返回:"); num = input.nextInt(); }while(num==0); System.out.println("谢谢使用,欢迎下次光临");
第三阶段:分析并完成退出功能
boolean类型的使用
记录用户是否推出系统的状态:
退出和不退出两种状态,用boolean类型
退出:true 不退出:false
boolean flag=false; case 6://退出系统 flag = true; break; default: flag = true; break; } if(flag ==false) { System.out.println("请输入0返回:"); num = input.nextInt(); }else { break; }
第四阶段:分析并完成查看餐袋功能
循环遍历查看数组内数据
三目运算符来决定是已预定还是已完成String state = (states[i]==0)?“已预订”:“已完成”;
非空判断 if (names[i]!=null) 只有输出不为null的才进行输出
case 2: System.out.println("\n*****查看餐袋*****"); System.out.println("序号\t订餐人\t餐品信息\t\t送餐时间\t送餐地址\t\t总金额\t订单状态"); for(int i = 0;i<name.length;i++) { if (names[i]!=null) {//只有输出结果不为null的才进行输出 String state = (states[i]==0)?"已预订":"已完成"; System.out.println((i+1)+"\t"+names[i]+"\t"+msg[i]+"\t"+time[i]+"点\t"+dizhi[i]+"\t"+sum[i]+"元\t"+state); } } break;
第五阶段:分析并完成订餐功能
case 1: System.out.println("\n*****我要订餐*****"); //订餐前提示订单未满,判断数组有没有被填满 //使用boolean来表示订单是否满了,如果满了不能订餐 boolean isAdd = false; for(int i = 0;i <names.length;i++){ if(names[i]==null) {//说明订单未满 isAdd = true; //可以订餐 //输入订餐人姓名 System.out.println("请输入订餐人姓名:"); String names1 =input.next();//输入的订餐人姓名 //循环输出菜品信息 System.out.println("序号\t菜名\t单价"); for(int j = 0;j <name.length;j++){ String zan1 = (zan[j]==0)?"":zan[j]+"赞";//输出赞数,如果没有则不输出 System.out.println((j+1)+"\t"+name[j]+"\t"+money[j]+"\t"+zan1); } //菜品编号的输入以及判断 System.out.println("请输入您要点的菜品编号"); int no = input.nextInt();//菜品编号 while(no<1 ||no>name.length) {//通过不断的循环来确保输入的菜品编号一定是正确的 System.out.println("本店没有这个菜品请重新选择"); no = input.nextInt(); } //点菜份数 System.out.println("请输入您需要的份数:"); int numCai = input.nextInt();//输入的菜的份数 //送餐时间的输入以及判断 System.out.println("请输入送餐时间(送餐时间只能在10-20之间的整点)"); int timeCai = input.nextInt();//输入的送餐时间 while(timeCai<10 ||timeCai>20) {//通过不断的循环来确保输入的菜品编号一定是正确的 System.out.println("您的输入有误,请输入10-20之间的整数:"); timeCai = input.nextInt();//输入的送餐时间 } //送餐地址 System.out.println("请输入送餐地址"); String dizhiCai = input.next();//输入的送餐地址 //添加到订单信息中 //输出订餐信息给用户看,添加到订单信息 System.out.println("订单已成功"); System.out.println("您订的是:"+name[no-1]+" "+numCai+"份");//注意用户选择的菜品下标比真正的数组元素下标大1 System.out.println("送餐时间:"+timeCai+"点"); double song =(money[no-1]*numCai<50)?6:0;//送餐费 System.out.println("餐费:"+(money[no-1]*numCai)+"元,送餐费:"+song+",总计:"+(money[no-1]*numCai+song)+"元"); double sumCai = money[no-1]*numCai+song;//菜总价 String caiFen =name[no-1]+" "+numCai+"份";//菜品名称+份数 //把订餐信息添加到订单信息数组中,插入订单的位置是个关键点:i //因为上面刚进入循环时,进入if时是第一个输出为null的i值 在for循环中循环的i,循环到names[i]==null,说明没有赋值 //又因为各数组元素通过相同下标关联起来 //所以给每个数组下标为i的元素赋值即可。 names[i]=names1; msg[i]=caiFen; time[i]=timeCai; dizhi[i]=dizhiCai; sum[i]=sumCai; //本次订餐结束跳出循环 break; } } if(isAdd == false) { System.out.println("对不起,您的餐袋已满!"); } break;
第六阶段:分析并完成签收订单功能
签收之前,要先判断订单是否存在
使用boolean判断
false-不存在,不能签收;true-存在,且处于预定状态,能签收;存在,且处于完成状态,不能签收。
System.out.println("\n*****签收订单*****"); //签收之前,要先判断订单是否存在 //使用boolean判断 //false-不存在,不能签收;true-存在,且处于预定状态,能签收;存在,且处于完成状态,不能签收。 boolean isSigh = false; System.out.print("请输入您要签收单订单编号"); int signNo = input.nextInt(); for(int i = 0;i <names.length;i++){ //names[i]!=null为检查数组内元素不是空的, //states[i]==1为String state = (states[i]==0)?"已预订":"已完成";不为0的为已完成 //所以states[i]==0为已预定 //i==signNo-1,因为数组内下标从0开始,所以输入的编号要-1 if(names[i]!=null && states[i]==0 && i==signNo-1) { //有订单信息,并且订单状态为已预定,并且用户输入的订单编号能找到 //能签收 isSigh = true; states[i]=1;//将其变为已成功 System.out.println("订单签收成功!"); }else if(names[i]!=null && states[i]==1 && i==signNo-1) { //有订单信息,但是订单状态为已完成,并且用户输入的订单编号能找到 isSigh = true; //但是订单状态为已完成,不能签收 System.out.println("您选择的订单已经完成签收,不能在此签收!"); } } if(isSigh == false) { System.out.println("您选择的订单不存在!!"); } break;
第七阶段:分析并完成删除功能功能(重难点)
System.out.println("\n*****删除订单*****"); //删除之前,要先判断订单是否存在 //使用boolean判断 //false-不存在,不能删除;true-存在,且处于预定状态,能删除;存在,且处于完成状态,不能删除。 boolean isDelete = false; System.out.print("请输入您要删除的订单编号"); int deleteNo = input.nextInt(); for(int i = 0;i <names.length;i++){ //names[i]!=null为检查数组内元素不是空的, //states[i]==1为String state = (states[i]==0)?"已预订":"已完成";不为0的为已完成 //所以states[i]==0为已预定 //i==signNo-1,因为数组内下标从0开始,所以输入的编号要-1 if(names[i]!=null && states[i]==0 && i==deleteNo-1) { //有订单信息,并且订单状态为已预定,并且用户输入的订单编号能找到 //能签收 isDelete = true; System.out.println("您选择的订单未签收,不能删除!"); }else if(names[i]!=null && states[i]==1 && i==deleteNo-1) { //有订单信息,并且用户输入的订单编号我能找到 isDelete = true; //订单状态为已完成,能删除 //找到删除订单的位置下标i,把i后面的元素依次向前移动,最后一个数组要置空 //注意:移动过程其实是把后一个元素往前一个元素复制的过程 for(int j = 0;j <names.length-1;j++){ //j <names.length-1因为最后一个不需要赋值并且names[j] = names[j+1]时会越界 //将后面的值依次赋值给前面 names[j] = names[j+1]; msg [j]=msg[j+1]; time[j] = time[j+1]; dizhi[j] = dizhi[j+1]; sum[j] =sum[j+1]; states[j] = states[j+1]; } //最后一个元素一定要置空,置空后就可以下新的订单了 names [names.length-1]= null; msg [names.length-1]=null; time[names.length-1] = 0; dizhi[names.length-1] = null; sum[names.length-1] =0; states[names.length-1] = 0; System.out.println("订单删除成功!"); } } if(isDelete == false) { System.out.println("您选择的订单不存在!!"); } break;
第八阶段:分析并完成我要点赞功能
System.out.println("\n*****我要点赞*****"); //显示菜品的信息 System.out.print("序号\t菜名\t单价"); System.out.println(); for(int j = 0;j <name.length;j++){ String zan1 = (zan[j]==0)?"":zan[j]+"赞";//输出赞数,如果没有则不输出 System.out.println((j+1)+"\t"+name[j]+"\t"+money[j]+"\t"+zan1); } //点赞 System.out.println("请输入您要点赞的菜品序号:"); int zanCai = input.nextInt();//输入要点赞的菜品序号 while(zanCai<1 || zanCai>name.length) { System.out.println("本店没有这个菜品,无法点赞!请重新输入一个序号"); zanCai = input.nextInt(); } //关键点:把哪个位置的菜品点赞数+1 zan[zanCai-1]++; break; } //点赞 System.out.println("请输入您要点赞的菜品序号:"); int zanCai = input.nextInt();//输入要点赞的菜品序号 while(zanCai<1 || zanCai>name.length) { System.out.println("本店没有这个菜品,无法点赞!请重新输入一个序号"); zanCai = input.nextInt(); } //关键点:把哪个位置的菜品点赞数+1 zan[zanCai-1]++; break;
总结
这篇关于学习java的第十课—— 实战 吃货联盟的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-11-27本地多文件上传的简单教程
- 2024-11-27低代码开发:初学者的简单教程
- 2024-11-27如何轻松掌握拖动排序功能
- 2024-11-27JWT入门教程:从零开始理解与实现
- 2024-11-27安能物流 All in TiDB 背后的故事与成果
- 2024-11-27低代码开发入门教程:轻松上手指南
- 2024-11-27如何轻松入门低代码应用开发
- 2024-11-27ESLint开发入门教程:从零开始使用ESLint
- 2024-11-27Npm 发布和配置入门指南
- 2024-11-27低代码应用课程:新手入门指南