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

tech2022-10-15  123

【需求说明】

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

最新回复(0)