ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

学习java的第十课—— 实战 吃货联盟

2021-10-11 17:01:09  阅读:172  来源: 互联网

标签:java 吃货 System 签收 订单 第十课 菜品 println out


[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-XulGXPog-1633942182742)(C:\Users\Administrator\AppData\Roaming\Typora\typora-user-images\image-20211009110319493.png)]

项目功能分析

项目框架整体搭建

​ 欢迎菜单展示 控制台输出语句

​ 退出 正常选择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,吃货,System,签收,订单,第十课,菜品,println,out
来源: https://blog.csdn.net/redredredr21/article/details/120706747

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有