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