吃货联盟java代码
思路
这道题的整体思路就是使用do-while循环把菜单一直可以显示最初页面,然后使用switch选择结构,使每种菜单序号所对应的功能得以实现。
七步骤
第一步:数据初始化
首先定义一些一维数组接受变量,然后根据题意设置两条初始化的信息;
int a;//选择菜单
String []name=new String[3];//订餐人姓名
String []dishmegs=new String[3];//订餐的信息
int []time=new int[3];//送餐时间
String []site=new String[3];//送餐地址
int []states=new int[3];//订单状态
Double []sumPrices=new Double[3];//订单总价
String []dishName={"红烧带鱼","鱼香肉丝","时令鲜蔬"};//菜品名称
double []unitPrice=new double[]{38.0,20.0,10.0};//菜品单价
int []praise={0,0,0};//点赞数
int l=0;
//第一条订单信息
name [l]="张晴";
dishmegs[l]="红烧带鱼 2份";
time[l]=12;
site[l]="天成路207号";
sumPrices[l]=76.0;
states[l]=1;
l++;
//第二条订单信息
name [l]="张晴";
dishmegs[l]="红烧带鱼 2份";
time[l]=18;
site[l]="天成路207号";
sumPrices[l]=45.0;
states[l]=0;
第二步:实现菜单显示与切换
写出基础大概架构,在每个case情况下实现对应的功能。
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.print("请选择:");
a = input.nextInt();
for (; a > 6 || a < 0; ) {
System.out.print("输入有误,请重新输入:");
a = input.nextInt();
}
switch (a) {
case 1:
System.out.println("***我要订餐***");
System.out.print("输入0返回:");
a = input.nextInt();
for (; a != 0; ) {
System.out.print("输入有误,请重新输入:");
a = input.nextInt();
}
break;
case 2:
System.out.println("***查看餐袋***");
System.out.print("输入0返回:");
a = input.nextInt();
for (; a != 0; ) {
System.out.print("输入有误,请重新输入:");
a = input.nextInt();
}
break;
case 3:
System.out.println("***签收订单***");
System.out.print("输入0返回:");
a = input.nextInt();
for (; a != 0; ) {
System.out.print("输入有误,请重新输入:");
a = input.nextInt();
}
break;
case 4:
System.out.print("输入0返回:");
a = input.nextInt();
for (; a != 0; ) {
System.out.print("输入有误,请重新输入:");
a = input.nextInt();
}
break;
case 5:
System.out.println("***我要点赞***");
System.out.print("输入0返回:");
a = input.nextInt();
for (; a != 0; ) {
System.out.print("输入有误,请重新输入:");
a = input.nextInt();
}
break;
case 6:
System.out.println("谢谢使用,欢迎下次光临!");
break;
}
}while (a == 0) ;
第三步:实现订餐功能
首先定义一个布尔值来判断是否还有空的餐袋,然后用if选择结构找出null值来存放订餐的信息。这一步的难点是再定义新的变量来接收键盘输入的值。
注意:在case1中编写程序;
boolean isadd=true;
for (int i = 0; i <name.length ; i++) {
if (name[i]==null){
isadd=false;
System.out.print("请输入订餐人姓名:");
name[i]=input.next();
System.out.println("序号\t\t菜品\t\t\t单价\t\t点赞数");
for (int j = 0; j <name.length ; j++) {
System.out.println((j+1)+"\t\t"+dishName[j]+"\t\t"+unitPrice[j]+"元\t"+praise[j]);
}
System.out.print("请选择您要点的菜品编号:");
int choose=input.nextInt();
for (; choose>3||choose<1 ; ) {
System.out.print("输入有误,请重新输入:");
choose=input.nextInt();
}
System.out.print("请选择您需要的份数:");
int number=input.nextInt();
for (; number<1 ; ) {
System.out.print("输入有误,请重新输入:");
number=input.nextInt();
}
dishmegs[i]=dishName[choose-1]+" "+number+"份";
sumPrices[i]=unitPrice[choose-1]*number;
int songcan=0;
double sum=sumPrices[i];
if (sumPrices[i]<50){
songcan=5;
sum=sumPrices[i]+songcan;
}
System.out.print("请输入送餐时间,(送餐时间是10点到20点整点送餐):");
time[i]=input.nextInt();
for (; time[i] <10||time[i]>20 ; ) {
System.out.print("输入有误,请输入10~20之间的整数:");
time[i]=input.nextInt();
}
System.out.print("请输入送餐地址:"); site[i]=input.next();
System.out.println("订餐成功!");
System.out.println("您订的是:"+dishmegs[i]);
System.out.println("送餐时间:"+time[i]+"点");
System.out.println("餐费:"+sumPrices[i]+"元,送餐费:"+songcan+"元,总计:"+sum+"元");
}
}
if (isadd){
System.out.println("对不起,您的餐袋已满!");
}
第四步:实现查看餐袋功能
这一步要求输出的不能有null值,所以首先判断name[i]不等于null;其次利用if-else转换数值表达的订餐状态。
注意:在case2中编写程序;
System.out.println("序号\t订餐人\t餐品信息\t\t送餐时间\t送餐地址\t\t总金额\t订单状态");
for (int i = 0; i <name.length ; i++) {
if (name[i]!=null){
String state;
if (states[i]==0){
state="已预订";
}else {
state="已完成";
}
String date=time[i]+"点";
String sum=sumPrices[i]+"元";
System.out.println((i+1)+"\t"+name[i]+"\t\t"+dishmegs[i]+"\t"+date+"\t"+site[i]+"\t"+sum+"\t"+state);
}
}
第五步:实现订餐签收功能
首先这一步和第一步一样定义新变量接收键盘输入,然后就是判断订单签收的条件:
- 订单状态为’已完成’;如果订单状态是已完成,进入else-if 提示用户不能签收。
- 不是null值;如果是null值就是订单不存在。
- 要签收的订单序号等于目标数组元素的下标加一;通过这个式子找到要删除的数组元素。
注意:在case3中编写程序;
boolean isSignFind=true;
System.out.print("请选择要签收的订单序号:");
int sign=input.nextInt();
for (int i = 0; i <name.length ; i++) {
if (name[i]!=null&&states[i]==0&&sign==i+1){
states[i]=1;
System.out.println("订单签收成功!");
isSignFind=false;
}else if (name[i]!=null&&states[i]==1&&sign==i+1){
System.out.println("您选择的订单已完成签收,不能再次签收!");
isSignFind=false;
}
}
if (isSignFind){
System.out.println("您选择的订单不存在!");
}
第六步:实现删除订餐功能
和上一步一样先确定数组下标,然后让数组中的每一个元素向前移动一位方便实现查看餐袋的功能;
注意:在case4中编写程序;
boolean isDe=true;
System.out.print("请输入要删除的订单序号:");
int num=input.nextInt();
for (int i = 0; i <name.length ; i++) {
if (name[i]!=null&&states[i]==1&&num==i+1){
isDe=false;
for (int j = num; j <name.length ; j++) {
name[j-1]=name[j];
dishmegs[j-1]=dishmegs[j];
time[j-1]=time[j];
site[j-1]=site[j];
states[j-1]=states[j];
sumPrices[j-1]=sumPrices[j];
}
name[name.length-1]=null;
dishmegs[name.length-1]=null;
time[name.length-1]=0;
site[name.length-1]=null;
sumPrices[name.length-1]=0.0;
states[name.length-1]=0;
System.out.println("删除订单成功!");
break;
}else if (name[i]!=null&&states[i]==0 &&num==i+1){
System.out.println("您选择的订单未签收,不能删除!");
isDe=false;
break;
}
}
if (isDe){
System.out.println("您删除的订单不存在!");
}
第七步:实现点赞菜品功能
这一步是最容易实现的,只需要定义个变量接受键盘输入,然后赋值给praise下标就可以了。
注意:在case5中编写程序;
System.out.println("序号\t\t菜品\t\t\t单价\t\t点赞数");
for (int j = 0; j <name.length ; j++) {
System.out.println((j+1)+"\t\t"+dishName[j]+"\t\t"+unitPrice[j]+"元\t"+praise[j]);
}
System.out.print("请输入要点赞的菜品编号:");
int numm1=input.nextInt();
praise[numm1-1]++;
完整代码程序
public class eat {
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
int a;//选择菜单
String []name=new String[3];//订餐人姓名
String []dishmegs=new String[3];//订餐的信息
int []time=new int[3];//送餐时间
String []site=new String[3];//送餐地址
int []states=new int[3];//订单状态
Double []sumPrices=new Double[3];//订单总价
String []dishName={"红烧带鱼","鱼香肉丝","时令鲜蔬"};//菜品名称
double []unitPrice=new double[]{38.0,20.0,10.0};//菜品单价
int []praise={0,0,0};//点赞数
int l=0;
//第一条订单信息
name [l]="张晴";
dishmegs[l]="红烧带鱼 2份";
time[l]=12;
site[l]="天成路207号";
sumPrices[l]=76.0;
states[l]=1;
l++;
//第二条订单信息
name [l]="张晴";
dishmegs[l]="红烧带鱼 2份";
time[l]=18;
site[l]="天成路207号";
sumPrices[l]=45.0;
states[l]=0;
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.print("请选择:");
a=input.nextInt();
for (; a>6||a<0 ; ) {
System.out.print("输入有误,请重新输入:");
a=input.nextInt();
}
switch (a) {
case 1:
System.out.println("***我要订餐***");
boolean isadd=true;
for (int i = 0; i <name.length ; i++) {
if (name[i]==null){
isadd=false;
System.out.print("请输入订餐人姓名:");
name[i]=input.next();
System.out.println("序号\t\t菜品\t\t\t单价\t\t点赞数");
for (int j = 0; j <name.length ; j++) {
System.out.println((j+1)+"\t\t"+dishName[j]+"\t\t"+unitPrice[j]+"元\t"+praise[j]);
}
System.out.print("请选择您要点的菜品编号:");
int choose=input.nextInt();
for (; choose>3||choose<1 ; ) {
System.out.print("输入有误,请重新输入:");
choose=input.nextInt();
}
System.out.print("请选择您需要的份数:");
int number=input.nextInt();
for (; number<1 ; ) {
System.out.print("输入有误,请重新输入:");
number=input.nextInt();
}
dishmegs[i]=dishName[choose-1]+" "+number+"份";
sumPrices[i]=unitPrice[choose-1]*number;
int songcan=0;
double sum=sumPrices[i];
if (sumPrices[i]<50){
songcan=5;
sum=sumPrices[i]+songcan;
}
System.out.print("请输入送餐时间,(送餐时间是10点到20点整点送餐):");
time[i]=input.nextInt();
for (; time[i] <10||time[i]>20 ; ) {
System.out.print("输入有误,请输入10~20之间的整数:");
time[i]=input.nextInt();
}
System.out.print("请输入送餐地址:");
site[i]=input.next();
System.out.println("订餐成功!");
System.out.println("您订的是:"+dishmegs[i]);
System.out.println("送餐时间:"+time[i]+"点");
System.out.println("餐费:"+sumPrices[i]+"元,送餐费:"+songcan+"元,总计:"+sum+"元");
}
}
if (isadd){
System.out.println("对不起,您的餐袋已满!");
}
System.out.print("输入0返回:");
a=input.nextInt();
for (; a!=0 ; ) {
System.out.print("输入有误,请重新输入:");
a=input.nextInt();
}
break;
case 2:
System.out.println("***查看餐袋***");
System.out.println("序号\t订餐人\t餐品信息\t\t送餐时间\t送餐地址\t\t总金额\t订单状态");
for (int i = 0; i <name.length ; i++) {
if (name[i]!=null){
String state;
if (states[i]==0){
state="已预订";
}else {
state="已完成";
}
String date=time[i]+"点";
String sum=sumPrices[i]+"元";
System.out.println((i+1)+"\t"+name[i]+"\t\t"+dishmegs[i]+"\t"+date+"\t"+site[i]+"\t"+sum+"\t"+state);
}
}
System.out.print("输入0返回:");
a=input.nextInt();
for (; a!=0 ; ) {
System.out.print("输入有误,请重新输入:");
a=input.nextInt();
}
break;
case 3:
System.out.println("***签收订单***");
boolean isSignFind=true;
System.out.print("请选择要签收的订单序号:");
int sign=input.nextInt();
for (int i = 0; i <name.length ; i++) {
if (name[i]!=null&&states[i]==0&&sign==i+1){
states[i]=1;
System.out.println("订单签收成功!");
isSignFind=false;
}else if (name[i]!=null&&states[i]==1&&sign==i+1){
System.out.println("您选择的订单已完成签收,不能再次签收!");
isSignFind=false;
}
}
if (isSignFind){
System.out.println("您选择的订单不存在!");
}
System.out.print("输入0返回:");
a=input.nextInt();
for (; a!=0 ; ) {
System.out.print("输入有误,请重新输入:");
a=input.nextInt();
}
break;
case 4:
System.out.println("***删除订单***");
boolean isDe=true;
System.out.print("请输入要删除的订单序号:");
int num=input.nextInt();
for (int i = 0; i <name.length ; i++) {
if (name[i]!=null&&states[i]==1&&num==i+1){
isDe=false;
for (int j = num; j <name.length ; j++) {
name[j-1]=name[j];
dishmegs[j-1]=dishmegs[j];
time[j-1]=time[j];
site[j-1]=site[j];
states[j-1]=states[j];
sumPrices[j-1]=sumPrices[j];
}
name[name.length-1]=null;
dishmegs[name.length-1]=null;
time[name.length-1]=0;
site[name.length-1]=null;
sumPrices[name.length-1]=0.0;
states[name.length-1]=0;
System.out.println("删除订单成功!");
break;
}else if (name[i]!=null&&states[i]==0 &&num==i+1){
System.out.println("您选择的订单未签收,不能删除!");
isDe=false;
break;
}
}
if (isDe){
System.out.println("您删除的订单不存在!");
}
System.out.print("输入0返回:");
a=input.nextInt();
for (; a!=0 ; ) {
System.out.print("输入有误,请重新输入:");
a=input.nextInt();
}
break;
case 5:
System.out.println("***我要点赞***");
System.out.println("序号\t\t菜品\t\t\t单价\t\t点赞数");
for (int j = 0; j <name.length ; j++) {
System.out.println((j+1)+"\t\t"+dishName[j]+"\t\t"+unitPrice[j]+"元\t"+praise[j]);
}
System.out.print("请输入要点赞的菜品编号:");
int numm1=input.nextInt();
praise[numm1-1]++;
System.out.print("输入0返回:");
a=input.nextInt();
for (; a!=0 ; ) {
System.out.print("输入有误,请重新输入:");
a=input.nextInt();
}
break;
case 6:
System.out.println("谢谢使用,欢迎下次光临!");
break;
}
}while (a==0);
}
}