public static void main(String[] args) {
//声明加初始化 定义数据主体:菜品
String[] dishName = {"红烧带鱼","鱼香肉丝","时令蔬菜"};
double[] prices = {38.0,26.0,10.0};
int[] praiseName = 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:已经完成
// 初始化订单信息,初始化两个订单信息
names[0] = "张三";
dishMsg[0] = "红烧带鱼2份";
times[0] = 10;
adresses[0] = "卓飞路001号";
sumPrices[0] = 76;//餐费>50免配送费 。否则配送费六元
states[0] = 0;
names[1] = "李六";
dishMsg[1] = "鱼香肉丝1份";
times[1] = 26;
adresses[1] = "卓飞路002号";
sumPrices[1] = 26;//餐费>50免配送费 。否则配送费六元
states[1] = 1;
Scanner sc = new Scanner(System.in);
//用户输入0 返回时的输入数字,num=0 时重复显示主菜单;
//num 在用户每次订单操作后进行提示 重新赋值
int num = -1;
System.out.println("欢迎使用“吃货联盟订餐系统”");
// true:不退出 false:退出
boolean flag = true; // 默认不退出
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("请选择:");
int orderXuHao = sc.nextInt();
switch (orderXuHao){
case 1:
System.out.println("*********我要订餐************");
// 是否能订单的标识符,默认是false 不能订餐
boolean flagOrder = false;
for (int i = 0; i < names.length; i++) {
// 判断订单是否满了,如果不满可以订餐
if(names[i] == null){
flagOrder = true;
// 订餐
System.out.print("请输入订餐人姓名:");
String orderUserName = sc.next();
//循环输出菜品信息
System.out.println("序号\t菜名\t单价");
for (int j = 0; j < dishName.length; j++) {
// +"赞" 需要写否则类型不同
String praise = (praiseName[j] == 0)?"":praiseName[j]+"赞";
System.out.println((j+1)+"\t"+dishName[j]+"\t\t"+prices[j]+praise);
}
//菜品信息输入以及判断
System.out.print("请输入您要点的菜品编号:");
int dishNameNumber = sc.nextInt();
while (dishNameNumber < 1 || dishNameNumber > dishName.length){
System.out.print("本店没有这个菜品请重新输入:");
dishNameNumber =sc.nextInt();
}
// 点餐分数
System.out.print("请输入您需要的份数:");
int dishNameSum = sc.nextInt();
//送餐时间输入以及判断
System.out.print("请输入送餐时间(只能是10-20直接之间的整点):");
int dishNameTime = sc.nextInt();
while (dishNameTime < 10 || dishNameTime > 20){
System.out.println("您的输入有误,请输入10-20之间的整点");
dishNameTime = sc.nextInt();
}
//送餐地址
System.out.print("请输入您的送餐地址:");
String dishNameAddress = sc.next();
// 输出订餐信息给用户看,
System.out.println("订餐成功!");
String dishInfo =dishName[dishNameNumber-1]+""+dishNameSum+"份";
System.out.println("您订的是"+dishInfo);
System.out.println("送餐时间:"+dishNameTime+"点");
// 餐费 配送费 总计
//总价= 单价*份数
double dishPrise = prices[dishNameNumber-1]*dishNameSum;// 菜的总价
double peiSong = (dishPrise > 50)?0 : 6;
double sumPrise = dishPrise + peiSong;
System.out.println("餐费:"+dishPrise+"元,配送费:"+peiSong+"元,总计:"+sumPrise);
// 把订餐信息 添加 到订单信息
names[i] = orderUserName;
dishMsg[i] = dishInfo;
times[i] = dishNameTime;
adresses[i] = dishNameAddress;
sumPrices[i] = sumPrise;
//本次订餐结束 跳出循环
break;
}
}
if (!flagOrder){// 此处 flagOrder==false 等价于 !flagOrder
System.out.println("对不起,您的餐袋已经满了!");
}
break;
case 2:
System.out.println("*********查看餐袋************");
System.out.println("序号\t订餐人\t订餐菜品\t\t\t配送时间\t\t配送地址\t\t\t\t订单金额\t\t订餐状态");
for (int i = 0; i < names.length; i++) {
if (names[i] != null){
String time =times[i] + "点";
String state = (states[i]==0)?"已预定":"已完成";
System.out.println((i+1)+"\t\t"+names[i]+"\t"+dishMsg[i]+"\t\t"+time+"\t\t"+adresses[i]+"\t\t\t"+sumPrices[i]+"\t\t"+state);
}
}
break;
case 3:
System.out.println("*********签收订单************");
// 签收之前 要先判断订单是否存在
// false:订单不存在 true:订单存在 且预定状态能签收,完成状态不能签收
boolean orderFlag = false;
System.out.print("请输入您要签收的订单编号:");
int orderNumber = sc.nextInt();
for (int i = 0; i < names.length; i++) {
if((names[i]!=null) && states[i] == 0 && (i == orderNumber-1)){
// 有订单信息 且 根据用户输入的订单编号能找到订单
orderFlag = true;
// 订单状态已预定 ,能签收
states[i] = 1;
System.out.println("订单签收成功!");
}else if ((names[i]!=null) && states[i] == 1 && (i == orderNumber-1)){
// 有订单信息 且 用户输入的订单编号我能找到
orderFlag = true;
//订单已完成,不能签收
System.out.println("您选择的订单已经完成签收,不能再次签收!");
}
}
if(!orderFlag){
System.out.println("订单不存在");
}
break;
case 4:
System.out.println("*********删除订单************");
// 删除之前,要先判断订单是否存在
// false:不存在,不能删除 true:订单存在 且预定状态不能删, 存在且完成状态能删除
boolean deleteFlag = false;
System.out.print("请输入您要删除订单的编号:");
int deleteNumber = sc.nextInt();
for (int i = 0; i < names.length; i++) {
if(names[i] != null && states[i] ==0 && i ==deleteNumber-1 ){
// 有订单 并且用户输入的订单编号我能找到与之对应的订单
deleteFlag = true;
// 有订单 且 预定状态的订单不能删除
System.out.println("您选择的订单未签收,不能删除!");
}else if (names[i] != null && states[i] ==1 && i == deleteNumber-1){
// 有订单 并且用户输入的订单编号我能找到与之对应的订单
deleteFlag = true;
// 有订单 且 完成状态可以删除
// 所谓的删除就是 i 后面的元素往前移动 , 最后一个数组元素置空
for (int j = i; j < names.length; j++) {
names[j-1] = names[j];
dishMsg[j-1] = dishMsg[j];
times[j-1] = times[j];
adresses[j-1] = adresses[j];
sumPrices[j-1] = sumPrices[j];
states[j-1] = states[j];
}
// 最后一个元素置空,置空后就可以下新订单
names[names.length-1] = null;
dishMsg[names.length-1] = null;
times[names.length-1] = 0;
adresses[names.length-1] =null;
sumPrices[names.length-1] = 0;
states[names.length-1] = 0;
System.out.println("您的订单已删除!");
}
}
if(deleteFlag == false){
System.out.println("您选择的订单不存在");
}
break;
case 5:
System.out.println("*********我要点赞************");
// 循环输出菜品信息
System.out.println("序号\t 菜名 \t 单价");
for (int j = 0; j < dishName.length; j++) {
String praise = (praiseName[j] == 0)?"":praiseName[j]+"赞";
System.out.println((j+1)+"\t"+dishName[j]+"\t\t"+prices[j]+"\t"+praise);
}
// 点赞
System.out.print("请输入您要点赞的菜品序号:");
int praiseNum = sc.nextInt();
while (praiseNum < 1 || praiseNum > dishName.length){
System.out.print("本店没有这个菜品,无法点赞,请重新输入一个菜品序号:");
praiseNum = sc.nextInt();
}
praiseName[praiseNum-1]++;
break;
case 6:
flag = false;
break; // 退出系统
default:
flag = false;
break;//退出系统
}
if (flag == true){
System.out.print("请输入0 返回:");
num = sc.nextInt();
}else {
break;
}
}while (num == 0);
System.out.println("谢谢使用,欢迎下次光临!");