package com.fengqing.test01;//包文件名称
import java.util.Scanner;//调用scanner工具包
public class Test {//类文件名称
public static void main(String[] args) {//main方法
//定义数据主体(菜品类):菜品
String[] dishnames = {"红烧带鱼","鱼香肉丝","时令蔬菜"};//菜品名称数组
double[] prices = {38.0,20.0,10.0};//菜品单价数组
int[] praiseNums = new int[3]; //菜品点赞数组
//定义数据主体(订单类):订单-订餐人 餐品信息 送餐时间 送餐地址 总金额 订单状态
String[] names = new String[4]; //订餐人数组
String[] dishMsg = new String[4]; //菜品名称+份数数组
int[] times = new int[4]; //送餐时间
String[] adresses = new String[4]; //送餐地址
double[] sumPrices = new double[4]; //订单金额
int[] states = new int[4]; //订单状态数组:0预定,1完成
//初始化订单1(数组下标为0):
names[0] = "张三";
dishMsg[0] = "红烧带鱼2份";
times[0] = 10;
adresses[0] = "知春路";
sumPrices[0] =76;//餐费>= 50免费配送,<50配送费六元,共计76元。
states[0] =0;//0为预定
//初始化订单2(数组下标为1):
names[1] = "李四";
dishMsg[1] = "鱼香肉丝1份";
times[1] = 13;
adresses[1] = "天成路";
sumPrices[1] =26;//餐费>= 50免费配送,<50配送费六元,餐费20元,配送费6元,共计26。
states[1] =1;//1为签收
//搭建项目主体框架
int num = -1;//用户输入0返回时的输入的数字,num = 0时 重复显示主菜单,num在用户每次订餐后进行提示重新赋值。
Scanner input = new Scanner(System.in);//创建Scanner
System.out.println("欢迎使用“吃货联盟订餐系统”");//显示中文双引号。
//System.out.println("欢迎使用\"吃货联盟订餐系统\"");//显示英文双引号。
//记录用户是否退出系统状态:退出true-----不退出 false.
boolean flag = false;//初始状态为false
//do-while循环,此处为do-while的语句序列,可参考do-while循环过程图。
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();// choose接收Scanner类中的 nextInt()方法输入一个整数。
//Switch循环,choose作为switch的表达式,此参考switch循环过程图。
switch(choose){
case 1://订餐功能模块
System.out.println("\n*****我要订餐*****");//\n是光标下移一个,请与\t区分好
//订餐前提示订单未满,boolean变标识订单是否满了结果,满false不能订餐,未满true能订餐
boolean isadd = false;//more可以订餐
for(int i = 0;i < names.length;i ++){
if(names[i] == null){//58-61订餐是否为空
//可以订单
isadd = true;//isadd为true可以订餐
System.out.print("请输入订餐人:");
String name = input.next();//name请看101行
//循环输出菜品信息
System.out.println("序号\t菜品\t单价 ");
for(int j = 0 ;j < dishnames.length;j++){
String praise = (praiseNums[j] == 0)?"":praiseNums[j] + "赞 ";//提示菜品赞
System.out.println((j + 1)+"\t"+dishnames[j]+"\t"+prices[j] + praise);
}
//菜品编号的输入及判断
System.out.print("请输入菜品编号");
int no = input.nextInt();
while(no < 1 || no > dishnames.length){
System.out.print("本店没有此菜品信息");
}
//点菜份数
System.out.println("请选择菜品份数: ");
int number = input.nextInt();//number代表份数
//送餐时间及判断
System.out.print("请输入送餐时间: ");
int time = input.nextInt();
while(time < 10 || time >20){//如果输入不正确,while会一直循环
System.out.println("输入错误(请示如10-20之间证书): ");
time = input.nextInt();
}
//送餐地址
System.out.println("请输入送餐地址");
String address = input.next();
//输出订单信息给用户看
System.out.println("订单成功");
//菜品信息:菜品名称 份数
String dishInfo= dishnames[no-1] + "" + "份" ;//把dishnames下标和number份数以字符串形式赋给dishInfo
System.out.println("您的订单是 " + dishnames[no-1]);//数组下标0开始,客户看到1开始,所以减一
System.out.println("您的送餐时间 " + time + "点");
//餐费 配送费 总计
//餐费 prices数组下标比用户选择菜品编号小一
double dishprice = prices[no - 1] * number;//餐费=单价*分数
double peisong = (dishprice > 50)?0:6; //prisong=配送费
double sumPrice = dishprice + peisong;
System.out.println("餐费:" + dishprice + "配送费:" + peisong + "总计;" + sumPrice + "元");
//把订餐信息加入订单信息,插入订单关键位置i
names[i] = name;//62行相关
dishMsg[i] = dishInfo;//菜品信息+分数
times[i] = time;//时间
adresses[i] = address;//地址
sumPrices[i] = sumPrice;//配送费
//跳出for循环
break;
}
} //不能定餐
if(!isadd){//isadd为false所以不能订餐
System.out.println("订餐已满,无法订餐");
}
break;
case 2://查看餐袋功能模块
System.out.println("\n*****产看餐袋*****");//\n是光标下移一个,请与\t区分好
System.out.println("序号\t订餐人\t订餐菜品\t\t配送时间\t配送地址\t订餐价格\t订单状态 ");
for(int i = 0;i < names.length;i++){
if(names[i] != null){//显示names不为null的订单
String time = times[i] + "点";
String state = (states[i] ==0)?"已订单":"已完成";
System.out.println((i+1)+"\t"+names[i]+"\t"+dishMsg[i]+"\t"+time+"\t"+adresses[i]+"\t"+sumPrices[i]+"\t"+state );
}
}
break;
case 3:
System.out.println("\n*****签收订单*****");//\n是光标下移一个,请与\t区分好
//签收之前判断订单是否存。boolea判断false不能签收,true能签收
System.out.println("请输入需要签收单号:");
int signo = input.nextInt();
boolean isSign = false;
for(int i = 0; i < names.length;i++){
if(names[i] != null && states[i] == 0 && i == signo - 1){
//有订单信息,用户输入的信息可以找到,并且订单状态为未签收,
isSign = true;
states[i] = 1;
System.out.println("订单签收成功:");
}else if(names[i] != null && states[i] == 1 && i == signo - 1){
//有订单那信息,用户输入依然可以找到,但是已经签收
isSign = true;
//提示不能签收
System.out.println("已签收订单");
}
}
if(!isSign){
System.out.println("订单不存在");
}
break;
case 4:
System.out.println("\n*****删除订单*****");//\n是光标下移一个,请与\t区分好
//删除之前判断订单是否存。boolea判断false不能删除,true能删除
System.out.println("请输入需要删除单号:");
int deleteNo = input.nextInt();
boolean isDelete = false;
for(int i = 0; i < names.length;i++){
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;
//提示不能签收
//*注意删除*删除就是把数组的下一个元素向前移动,也可以裂解为覆盖前一个位置。最后一个元素置空
for(int j = 0;j < names.length - 1;j++){
names[j] = names[j + 1];
dishMsg[j] = dishMsg[j + 1];
times[j] = times[j + 1];
adresses[j] = adresses[j + 1];
sumPrices[j] = sumPrices[j + 1];
states[j] = states[j + 1];
}
names[names.length - 1] = null;
dishMsg[dishMsg.length - 1] = null;
times[times.length - 1] = 0;
adresses[adresses.length - 1] = null;
sumPrices[sumPrices.length - 1] = 0;
states[states.length - 1] = 0;
System.out.println("删除订单成功:");
}
}
if(!isDelete){
System.out.println("订单不存在");
}
break;
case 5:
System.out.println("\n*****我要点赞*****");//\n是光标下移一个,请与\t区分好
break;
case 6:
//退出系统:为退出二级菜单(do-while为一级,Switch为二级),用户输入0正常退出switch循环,且在do-while中
flag = false;//false是为了保证退出Switch二级。
break;//跳出循环Switch
default:
//退出系统,用户输入0以外(且不是1-6)的数字退出switch循环,并退出do-while。
flag = true;//因为初始值为false,且if取反,所有会直接switch和do-while。
break;//跳出循环Switch
}
if(!flag){// !flag代表flag = false,可理解为取反。flag为false执行此下方,为true进入else执行break。
System.out.print("请输入0返回: ");
num = input.nextInt();//num接收Scanner类中的 nextInt()方法输入一个整数。
}else{//
break;
}
}while(num == 0);//括号内为do-while的条件表达式,可参考do-while循环过程图。
System.out.println("谢谢使用,欢迎下次光临");
}
}
刚刚开始学习java,自己慢慢写了最基础的吃货联盟
于 2022-12-14 23:37:40 首次发布