java数组及循环专题练习(使用数组和循环结构实现一个简易的功能完善的订餐系统)

【需求说明】

1.使用数组和循环结构实现一个订餐系统,需要具备以下功能:

  • 菜单切换功能:实现系统子菜单和系统主菜单之间的切换。
  • 查看餐袋功能:查看已经已点餐品信息,包括已完成的订单。
  • 我要订餐功能:显示餐品信息,接收客户选择的餐品,包括份数,送餐时间,送餐地址等信息。
  • 签收订单功能:客户可以签收订单。
  • 删除订单功能:删除已经签收的订单。
  • 我要点赞功能:显示菜品信息,接受客户点赞。

2.系统响应迅速,交互良好,有基本的容错提示。

3.系统最多接收4条订单。

4.每条订单不满50元加收5元送餐费。

5.客户选择的菜品序号不存在或者超出菜品种类数有相应的提示。

6.客户可签收的订单必须存在而且是未签收状态。

7.客户可删除的订单必须是存在的且已签收完成的。

【界面设计】

1.主菜单

2.我要订餐功能

3.查看餐袋功能

4.签收订单功能:

5.删除订单功能

6.我要点赞功能:

再次进入我要点餐功能看见点赞数已经加一。

6.退出系统:

【编码】

package day03;

import java.util.Scanner;

public class Task01 {
	public static void main(String[] args) {
		
		Scanner input =new Scanner(System.in);
		
		//创建订单相关数组
		String[] names = new String[4];
		String[] dishMegs=new String[4];
		String[] times=new String[4];
		String[] addresses = new String[4];
		int[] states= new int[4];
		double[] sumPrices = new double[4];
		
		//初始化菜品信息
		String[] dishNames= {"红烧带鱼","鱼香肉丝","时令鲜蔬"};
		double[] prices= {38.0,20.0,10.0};
		int[] praiseName = new int[3];
		
		//初始化订单
		names[0]="张晴";
		dishMegs[0]="红烧带鱼2份";
		times[0]="11:00";
		addresses[0]="天成路207号";
		sumPrices[0]=76.0;
		states[0]=1;
		
		names[1]="张晴";
		dishMegs[1]="鱼香肉丝2份";
		times[1]="12:00";
		addresses[1]="天成路207号";
		sumPrices[1]=45.0;
		states[1]=0;
		
		//循环标志
		boolean istrue=true;
		//返回标志
		int backNum;
		
		System.out.println("欢迎使用吃货联盟订餐系统");
		
		do {
			System.out.println("***************************");
			System.out.println("1.我要订餐\n2.查看餐袋\n3.签收订单\n4.删除订单\n5.我要点赞\n6.退出系统");
			
			int key = input.nextInt();//功能选择
			
			switch(key) {
			case 1:
				System.out.println("***我要订餐***");
				
				//存储订餐人
				System.out.println("请输入订餐人姓名:");
				String clientName=input.next();
				for(int a=0;a<names.length;a++) {
					if(names[a]==null) {
						names[a]=clientName;
						break;
					}
				}
				
				//显示菜单
				System.out.println("序号"+"\t菜名\t"+"\t单价"+"\t点赞数");
				for(int j=0;j<dishNames.length;j++) {
					System.out.println((j+1)+"\t"+dishNames[j]+"\t"+prices[j]+"\t"+praiseName[j]);
				}
				System.out.print("请选择您要点的菜品编号:");
				int dishCode=input.nextInt();
				
				//实际数组下标
				int disNum=dishCode-1;
				
				//将菜品名和菜品份数合并成一条餐品信息存储
				System.out.print("请选择您需要的份数:");
				int orderNum=input.nextInt();
				for(int a=0;a<names.length;a++) {
					if(dishMegs[a]==null) {
						dishMegs[a]=dishNames[dishCode-1]+orderNum+"份";
						break;
					}
				}
				
				//存储订餐时间
				System.out.println("请输入送餐时间:");
				String sendTime=input.next();
				for(int b=0;b<times.length;b++) {
					if(times[b]==null) {
						times[b]=sendTime;
						break;
					}
				}
				
				//存储订餐地址
				System.out.print("请输入送餐地址:");
				String sendAddress=input.next();
				for(int c=0;c<times.length;c++) {
					if(addresses[c]==null) {
						addresses[c]=sendAddress;
						break;
					}
				}
				
				//显示订餐信息
				System.out.println("订餐成功!");
				System.out.println("您订的是:"+dishNames[disNum]+orderNum+"份");
				System.out.println("送餐时间:"+sendTime);
				//送餐费
				double sendFee=0;
				//净餐费总额
				double dishFee=prices[disNum]*orderNum;
				//计算送餐费
				sendFee=(dishFee<50?5:0);
				
				System.out.println("餐费:"+dishFee+"元,送餐费:"+sendFee+"元,共计:"+(dishFee+sendFee)+"元");
				
				//存储总金额
				for(int e=0;e<sumPrices.length;e++) {
					if(sumPrices[e]==0) {
						sumPrices[e]=dishFee+sendFee;
						break;
					}
				}
				
				//存储订单状态
				for(int f=0;f<states.length;f++) {
					if(states[f]==0) {
						states[f]=0;
						break;
					}
				}
				
				//返回主菜单控制逻辑
				System.out.print("输入0返回:");
				backNum=input.nextInt();
				while(backNum!=0) {
					System.out.print("您输入的指令有误,请重新输入0返回主菜单:");
					backNum=input.nextInt();
				}
				break;
				
			case 2:
				System.out.println("***查看餐袋***");
				System.out.println("序号\t"+"订餐人\t"+"\t餐品信息\t"+"\t送餐日期\t"+"送餐地址\t"+"\t总金额\t"+"\t订单状态");
				for(int i=0;i<names.length;i++) {
					if(names[i]!=null) {
						String state =states[i]==0?"已预订":"已完成";
						System.out.println((i+1)+"\t"+names[i]+"\t\t"+dishMegs[i]+"\t\t"+times[i]+"\t\t"+addresses[i]+"\t\t"+sumPrices[i]+"\t\t"+state);
					}
				}
				
				System.out.print("输入0返回:");
				backNum=input.nextInt();
				while(backNum!=0) {
					System.out.print("您输入的指令有误,请重新输入0返回主菜单:");
					backNum=input.nextInt();
				}
				break;
				
			case 3:
				System.out.println("***签收订单***");
				System.out.println("请选择要签收的订单序号:");
				int orderNo = input.nextInt();
				//实际数组下标
				int realOrderNo=orderNo-1;
				if(orderNo>names.length||realOrderNo<0) {
					System.out.println("签收失败,订单不存在!");
				}else if(names[realOrderNo]==null){
					System.out.println("签收失败!未找到订单序号!");
				}else if(states[realOrderNo]==0) {
					states[realOrderNo]=1;
					System.out.println("订单签收成功!");
				}else {
					System.out.println("签收失败,订单已签收,无需重复签收!");
				}
				
				System.out.print("输入0返回:");
				backNum=input.nextInt();
				while(backNum!=0) {
					System.out.print("您输入的指令有误,请重新输入0返回主菜单:");
					backNum=input.nextInt();
				}
				break;
				
			case 4:
				System.out.println("***删除订单***");
				System.out.println("请选择要删除的订单序号:");
				int delNo = input.nextInt();
				//实际数组下标
				int realdelNo=delNo-1;
				if(delNo>names.length||realdelNo<0) {
					System.out.println("删除失败,订单不存在!");
				}else if(names[realdelNo]==null){
					System.out.println("删除失败!未找到订单序号!");
				}else if(states[realdelNo]==0) {
					System.out.println("您选择的订单未签收,不能删除!");
				}else {
					for(int h=realdelNo;h<names.length;h++) {
						if(names[h]==null) 
							break;
						
						if(names[h+1]==null) {
							names[h]=null;
							dishMegs[h]=null;
							times[h]=null;
							addresses[h]=null;
							sumPrices[h]=0;
							states[h]=0;
							break;
						}
						names[h]=names[h+1];
						dishMegs[h]=dishMegs[h+1];
						times[h]=times[h+1];
						addresses[h]=addresses[h+1];
						sumPrices[h]=sumPrices[h+1];
						states[h]=states[h+1];
					}
					System.out.println("删除订单成功!");
				}
				
				System.out.print("输入0返回:");
				backNum=input.nextInt();
				while(backNum!=0) {
					System.out.print("您输入的指令有误,请重新输入0返回主菜单:");
					backNum=input.nextInt();
				}
				break;
				
			case 5:
				System.out.println("***我要点赞***");
				//显示菜单
				System.out.println("序号"+"\t菜名\t"+"\t单价"+"\t点赞数");
				for(int j=0;j<dishNames.length;j++) {
					System.out.println((j+1)+"\t"+dishNames[j]+"\t"+prices[j]+"\t"+praiseName[j]);
				}
				System.out.print("请选择您要点赞的菜品序号:");
				int praiseNum=input.nextInt();
				int realpraiseNum=praiseNum-1;
				if(praiseNum>dishNames.length||realpraiseNum<0) {
					System.out.println("点赞失败,菜品不存在!");
				}else if(dishNames[realpraiseNum]==null){
					System.out.println("点赞失败!未找到菜品序号!");
				}else {
					praiseName[realpraiseNum]+=1;
					System.out.println("点赞成功!");
				}
				
				System.out.print("输入0返回:");
				backNum=input.nextInt();
				while(backNum!=0) {
					System.out.print("您输入的指令有误,请重新输入0返回主菜单:");
					backNum=input.nextInt();
				}
				break;
				
			case 6:
				System.out.println("已退出!!!");
				istrue=false;
				break;
			default:
				System.out.println("您输入的指令不存在");
			}
		}while(istrue);
	}
}

【测试】

1.经测试,实际程序完全满足需求的所有功能,并且具有良好的性能和交互体验,对于误输的指令有友好的提示。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值