吃货联盟订餐系统
运行效果如图所示:
1.系统界面
2..功能一
3.查看餐袋
4.签收订单
6.我要点赞
1 package cn.zt; 2 3 import java.util.Scanner; 4 import java.util.jar.Attributes.Name; 5 6 public class OrderingMgr { 7 8 /** 9 * @param args 10 */ 11 public static void main(String[] args) { 12 // 注意:该系统最多接受四条信息, 13 // 数据主体:一组订单信息 14 String[] names = new String[4];// 保存订餐人的姓名 15 String[] dishMegs = new String[4];// 保存所选的信息,包括菜品以及价格 16 int[] times = new int[4];// 保存送餐时间 17 String[] addresses = new String[4];// 保存送餐地址 18 int[] states = new int[4];// 保存订单状态:0表示预定1表示完成 19 double[] sumPrices = new double[4];// 保存订单的总金额 20 21 // 数据初始化 查看餐袋时有数据输出 22 // 创建三个数组存储菜单、单价、以及点赞数 23 String[] dishNames = { "红烧带鱼", "鱼香肉丝", "时令鲜菜" };// 菜单名称 24 double[] prices = { 38.0, 20.0, 10.0 };// 菜单单价 25 int[] praiseNums = new int[3];// 点赞数 26 // 初始化订单信息 27 // 初始化一条订单信息 28 29 names[0] = "张晴"; 30 dishMegs[0] = "红烧带鱼 2份"; 31 times[0] = 12; 32 addresses[0] = "天成路 207 号"; 33 sumPrices[0] = 76.0; 34 states[0] = 1; // 初始化第二条订单信息 35 names[1] = "张晴"; 36 dishMegs[1] = "鱼香肉丝 2份"; 37 times[1] = 18; 38 addresses[1] = "天成路 217 号"; 39 sumPrices[1] = 45.0; 40 states[1] = 0; 41 42 Scanner input = new Scanner(System.in); 43 int num;// 用户输入0返回主菜单,否则退出系统 44 boolean isExit = false;// 标志用户输入是否退出系统,ture为退出系统 45 System.out.println("\n欢迎进入“吃货联盟订餐系统”"); 46 // 循环: 显示菜单,根据用户选择的数字执行相应的功能 47 do { 48 System.out.println("****************************************"); 49 System.out.println("1.我要订餐"); 50 System.out.println("2.查看餐袋"); 51 System.out.println("3.签收订单"); 52 System.out.println("4.删除订单"); 53 System.out.println("5.我要点赞"); 54 System.out.println("6.退出系统"); 55 System.out.println("****************************************"); 56 System.out.print("请选择:"); 57 int choice = input.nextInt();// 记录用户选择功能的编号 58 59 // 要求用户输入1到7之间的数。 60 while (choice > 6 || choice < 1) { 61 System.out.print("您的输入有误,请重新重新选择(1~6):"); 62 choice = input.nextInt(); 63 } 64 // 根据用户的选择之执行相应的功能 65 switch (choice) { 66 case 1: 67 // 我要订餐 68 System.out.println("***我要订餐***"); 69 boolean isAdd = false;// 记录是否可以订餐 70 71 for (int i = 0; i < names.length; i++) { 72 if (names[i] == null) {// 找到添加订单的位置,null表示可以添加订单 73 isAdd = true;// 标记位置可以订餐 74 System.out.print("请输入订餐人的姓名:"); 75 String name = input.next();// 输入姓名 76 // 显示供选择的菜品信息 77 System.out.println("序号\t菜名\t单价\t点赞数"); 78 for (int j = 0; j < dishNames.length; j++) { 79 String price = prices[j] + "元"; 80 String priaiseNum = (praiseNums[j] > 0 ? praiseNums[j] 81 + "\t" + "赞" 82 : " "); 83 System.out.println(j + 1 + "\t" + dishNames[j] 84 + "\t" + prices[j] + priaiseNum); 85 } 86 // 用户点菜 87 System.out.print("请选择你要点的菜品编号:"); 88 int chooseDish = input.nextInt(); 89 90 // 要求用户输入的菜品编号在1~3之间 91 while (chooseDish > 3 || chooseDish < 1) { 92 System.out.println("您的输入有误,请重新重新选择(1~3):"); 93 chooseDish = input.nextInt(); 94 } 95 System.out.print("请选择你要的份数:"); 96 int number = input.nextInt(); 97 String dishMeg = dishNames[chooseDish - 1] + " " 98 + number + "份"; 99 double sumPrise = prices[chooseDish - 1] * number; 100 // 餐费满50元,免送餐费5 101 double deliCharge = (sumPrise >= 50) ? 0 : 5;// 采用三元运 102 // 算比if更简单 103 System.out.print("请输入送餐时间(送餐时间是10点~20点间的整点送餐):"); 104 int time = input.nextInt(); 105 while (time > 20 || time < 10) { 106 System.out.print("您的输入有误,请重新输入10~20间的整数"); 107 time = input.nextInt(); 108 } 109 System.out.print("请输入送餐地址:"); 110 String address = input.next(); 111 112 // 无需添加状态,默认是0,既是已预订状态 113 System.out.println("订餐成功!"); 114 System.out.println("您订的是:" + dishMeg); 115 System.out.println("送餐时间" + time + "点"); 116 System.out.println("餐费:" + sumPrise + "元,送餐费" 117 + deliCharge + "元,总计:" 118 + (sumPrise + deliCharge) + "元"); 119 120 // 添加数据 121 names[i] = name;// 保存订单人的姓名 122 dishMegs[i] = dishMeg; 123 times[i] = time; 124 addresses[i] = address; 125 sumPrices[i] = sumPrise; 126 break; 127 } 128 129 }if(!isAdd) { 130 System.out.println("对不起,您的餐袋已满!!"); 131 } 132 break; 133 case 2: 134 System.out.println("***查看餐袋***"); 135 System.out.println("序号\t订餐人\t餐品信息\t\t送餐日期\t送餐地址\t\t总金额\t订单状态"); 136 for (int i = 0; i < names.length; i++) { 137 if (names[i] != null) { 138 String state = (states[i] == 0) ? "已预订" : "已完成"; 139 String date = times[i] + "日"; 140 String sumPrice = sumPrices[i] + "元"; 141 System.out.println((i + 1) + "\t" + names[i] + "\t" 142 + dishMegs[i] + "\t" + date + "\t" 143 + addresses[i] + "\t\t" + sumPrice + "\t" 144 + state); 145 } 146 } 147 break; 148 case 3: 149 // 签收订单 150 System.out.println("***签收订单***"); 151 boolean isSingnFind = false;// 找到签收的订单 152 System.out.print("请选择你要签收的订单:"); 153 int signOrderId = input.nextInt(); 154 for (int i = 0; i < names.length; i++) { 155 // 状态订单为已预订,序号为用户输入的订单序号减1:可签收 156 // 状态订单为已完成,序号为用户输入的订单序号减1:不可签收 157 if (names[i] != null && states[i] == 0 158 && signOrderId == i + 1) {// 存在用户名、订单状态为预订、序号为i+1 159 states[i] = 1;// 状态设置为已完成 160 System.out.println("订单签收成功!"); 161 isSingnFind = true;// 标记已找到的订单 162 } else if (names[i] != null && states[i] == 1 163 && signOrderId == i + 1) { 164 System.out.println("您选择的订单已完成签收,不能再次签收!"); 165 isSingnFind = true;// 标记已找到的订单 166 } 167 } 168 // 未找到订单序号:不可签收 169 if (!isSingnFind) { 170 System.out.println("您选择的订单不存在!"); 171 } 172 break; 173 case 4: 174 // 删除订单 175 System.out.println("***删除订单***"); 176 boolean isDelFind = false;// 标记是否找到要删除的订单 177 System.out.print("请输入要删除的订单序号"); 178 int delId = input.nextInt(); 179 for (int i = 0; i < names.length; i++) { 180 // 状 值为已完成,序号值为用户输入的序号减1,可删除 181 // 状态为已预订,序号为用户输入的序号减1,不可删除 182 if (names[i] != null && states[i] == 1 && delId == i + 1) { 183 isDelFind = true;// 标记已找到此订单 184 // 执行删除操作:删除位置后的元素一次迁移 185 for (int j = delId - 1; j < names.length - 1; j++) { 186 names[j] = names[j + 1]; 187 dishMegs[j] = dishMegs[j + 1]; 188 times[j] = times[j + 1]; 189 addresses[j] = addresses[j + 1]; 190 states[j] = states[j + 1]; 191 sumPrices[j] = sumPrices[j + 1]; 192 } 193 // 最后一位元素清空 194 int endIndex = names.length - 1; 195 names[endIndex] = null; 196 dishMegs[endIndex] = null; 197 times[endIndex] = 0; 198 addresses[endIndex] = null; 199 states[endIndex] = 0; 200 sumPrices[endIndex] = 0; 201 System.out.println("删除订单成功!"); 202 // break;//这里不加break可以吗???我认为这里可以不用加break,因为if里面的条件是唯一满足的 203 // 只有这一种情况。。。。。 204 } else if (names[i] != null && states[i] == 0 205 && delId == i + 1) { 206 System.out.println("您选择的订单未签收,不能删除!"); 207 isDelFind = true; 208 // break;//这里不加break可以吗???我认为这里可以不用加break,因为if里面的条件是唯一满足的 209 // 只有这一种情况。。。。。 210 } 211 } 212 if (!isDelFind) { 213 System.out.println("您要删除的订单不存在!"); 214 } 215 break; 216 case 5: 217 // 我要点赞 218 System.out.println("***我要点赞***"); 219 System.out.println("序号\t菜名\t单价\t点赞数"); 220 for (int i = 0; i < dishNames.length; i++) { 221 for (int j = 0; j < dishNames.length; j++) { 222 String price = prices[j] + "元"; 223 String priaiseNum = (praiseNums[j] >= 0 ? praiseNums[j] 224 + "赞" : ""); 225 System.out.println((j + 1) + "\t" + dishNames[j] + "\t" 226 + prices[j] + "\t" + priaiseNum); 227 } 228 System.out.print("请选择你要点赞的菜品序号:"); 229 int priaiseNum = input.nextInt(); 230 praiseNums[priaiseNum - 1]++;// 赞数加1 231 System.out.println("点赞成功!"); 232 } 233 break; 234 case 6: 235 isExit = true;// 退出系统 236 break; 237 } 238 if (!isExit) { 239 System.out.print("输入0返回:"); 240 num = input.nextInt(); 241 while (num != 0) { 242 System.out.print("输入有误,请重新输入:"); 243 num = input.nextInt(); 244 } 245 } else { 246 break; 247 } 248 } while (num == 0); 249 System.out.println("谢谢使用,欢迎下次光临!!"); 250 } 251 }
时间: 2024-10-14 19:15:27