1创建一个(Food)食物类,定义私有属性(private)变量,生成无参有参set/get/toString方法.
2创建一个(Order)订单类,定义私有属性(private)变量,生成无参有参set/get/toString方法.
3
1>创建主类OrderManger,分别定义静态常量来存储食品和订单信息,然后用静态代码块来初始化订单信息.
2>在主类OrderManger静态代码块下创建main主类,读取用户输入并判断是否退出,这里直接false就行了,毕竟代码还要运行,哈哈.然后就是菜单信息部分,要记得用控制台语句输入,然后功能部分采用switch case结构.case1~6分别对应菜单部分的6个选项.
3>case1.1订餐功能部分精讲:菜单1选项是我要订餐,那木这个功能首先就要打印订餐提示,然后就是键盘输入点餐人姓名,然后显示可以点的菜,即输出一遍菜品信息,然后就是用集合遍历菜品列表,然后就是输入点菜的序号和份数,构造字符串dishMessge用于存储订单信息,之后提示输入送餐时间,验证时间合法性,之后就是输入送餐地址,再设置订单初始状态为未签收.
1.2计算菜品总价(分为订单价格和配送费用),这里注意三目运算符的运用double driverMoney = foodPrice > 50 ? 0 : 6; // 计算配送费,如果菜品金额超过50元则不收配送费,然后就是总费用计算,打印输出点单信息(包括订单和费用信息),,再打印送餐信息,最后将这个信息添加到列表.
case2查看餐袋,遍历输出订单信息即可用集合调用get方法
case3遍历订单列表,检查订单状态并签收订单,如果遍历结束后仍没有匹配到订单,提示用户
case4删除订单功能开始,这里注意订单状态,没签收不能被删除,集合元素下标加一即是要删除的当前订单号
case5即是给菜品点赞的功能,首先要遍历打印菜单列表,因为只有列出来才能供用户选择,然后用if else循环更新用户点赞数,注意在不在列表内以及是不是有效序号.
case6就是退出 isExit = true;
若不在1~6范围类则会提示错误,重新输入
代码部分:
public class Order { private String name;//姓名 private String dishMessg;//订单菜品信息,形式是菜名+份数 private int time;//点餐时间 private String address;//点餐地址 private int state;//订单状态 private double sumPrice;//订单总价 //无参构造 public Order() { } //有参构造 public Order(String name, String dishMessg, int time, String address, int state, double sumPrice) { this.name = name; this.dishMessg = dishMessg; this.time = time; this.address = address; this.state = state; this.sumPrice = sumPrice; } //set和get方法 public String getName() { return name; } public void setName(String name) { this.name = name; } public String getDishMessg() { return dishMessg; } public void setDishMessg(String dishMessg) { this.dishMessg = dishMessg; } public int getTime() { return time; } public void setTime(int time) { this.time = time; } public String getAddress() { return address; } public void setAddress(String address) { this.address = address; } public int getState() { return state; } public void setState(int state) { this.state = state; } public double getSumPrice() { return sumPrice; } public void setSumPrice(double sumPrice) { this.sumPrice = sumPrice; } //toString方法 @Override public String toString() { return "Order{" + "name='" + name + '\'' + ", dishMessg='" + dishMessg + '\'' + ", time=" + time + ", address='" + address + '\'' + ", state=" + state + ", sumPrice=" + sumPrice + '}'; } }
public class Food { private String dishName;//菜名 private double dishPrice;//菜价 private int dishNums;//菜的点赞数 //无参构造 public Food() { } //有参构造 public Food(String dishName, double dishPrice, int dishNums) { this.dishName = dishName; this.dishPrice = dishPrice; this.dishNums = dishNums; } //get和set方法 public String getDishName() { return dishName; } public void setDishName(String dishName) { this.dishName = dishName; } public double getDishPrice() { return dishPrice; } public void setDishPrice(double dishPrice) { this.dishPrice = dishPrice; } public int getDishNums() { return dishNums; } public void setDishNums(int dishNums) { this.dishNums = dishNums; } //toString方法的生成 @Override public String toString() { return "Food{" + "dishName='" + dishName + '\'' + ", dishPrice=" + dishPrice + ", dishNums=" + dishNums + '}'; } }
import java.util.ArrayList;//这里导入数组类 import java.util.Scanner;//scanner调用 public class OrderManage { private static final ArrayList<Food> FOOD_LIST=new ArrayList<>();//用final定义一个静态常量来存储食品信息 private static final ArrayList<Order> ORDER_LIST=new ArrayList<>();//用final定义一个静态常量来存储订单信息 static {//定义静态方法添加订单信息 FOOD_LIST.add(new Food("鱼香肉丝",20.0,5)); FOOD_LIST.add(new Food("红烧带鱼",30.0,15)); FOOD_LIST.add(new Food("时令鲜蔬",15.0,10)); } public static void main(String[] args) { Scanner scanner=new Scanner(System.in);//用于读取用户输入 Boolean isExit=false;//控制是否退出 System.out.println("-------------------------欢迎来到饭店外送订单系统--------------------------");//系统首页 //菜单信息 while (!isExit) { 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("请选择功能(输入序号):"); int choose = scanner.nextInt();//控制台读取用户输入 switch (choose) { // case 1: 订餐功能开始 case 1: System.out.println("----->我要订餐<-----"); // 打印订餐提示 System.out.println("请输入订餐人姓名:"); // 提示用户输入订餐人姓名 String name = scanner.next(); // 读取用户输入的姓名 System.out.println("上菜单"); // 提示菜单信息 System.out.println("序号\t菜名\t价格\t点赞数"); // 打印菜单列标题 // 遍历菜品列表,打印菜品信息 for (int i = 0; i < FOOD_LIST.size(); i++) { System.out.println((i + 1) + "\t" + FOOD_LIST.get(i).getDishName() + "\t" + FOOD_LIST.get(i).getDishPrice() + "元\t" + FOOD_LIST.get(i).getDishNums() + "赞"); } System.out.println("请选择你要点的菜(输入序号):"); // 提示用户选择菜品 int dishChoose = scanner.nextInt(); // 读取用户输入的菜品序号 System.out.println("输入你要的菜品的份数:"); // 提示输入份数 int dishCount = scanner.nextInt(); // 读取用户输入的菜品份数 // 构造菜品信息字符串 String dishMessge = FOOD_LIST.get(dishChoose - 1).getDishName() + dishCount + "份";//订单菜品信息,形式是菜名+份数 System.out.println("请输入送餐时间(10-23之间的整点数):"); // 提示输入送餐时间 int time = scanner.nextInt(); // 读取用户输入的送餐时间 // 验证时间是否在10-23之间 while (time < 10 || time > 23) { System.out.println("时间只能在10-23之间整点,请重新输入:"); time = scanner.nextInt(); } System.out.println("请输入送餐地址:"); // 提示输入送餐地址 String address = scanner.next(); // 读取用户输入的送餐地址 int orderState = 0; // 设置订单初始状态为未签收 // 计算菜品总价 double foodPrice = FOOD_LIST.get(dishChoose - 1).getDishPrice() * dishCount; double driverMoney = foodPrice > 50 ? 0 : 6; // 计算配送费,如果菜品金额超过50元则不收配送费 // 总费用计算 double dishSumPrice = foodPrice + driverMoney; System.out.println("订餐成功,订餐信息如下:"); // 提示订餐成功 System.out.println("你点的菜:" + dishMessge); // 打印菜品信息 System.out.println("菜品金额:" + foodPrice + ",配送费:" + driverMoney); // 打印费用信息 System.out.println("你要求" + time + "点送到" + address); // 打印送餐信息 // 将订单信息添加到订单列表 ORDER_LIST.add(new Order(name, dishMessge, time, address, orderState, dishSumPrice)); break; // case 2: 查看订单功能开始 case 2: System.out.println("----->查看餐袋<-----"); // 打印查看订单提示 System.out.println("序号\t订餐人姓名\t菜品信息\t送餐时间\t送餐地址\t订单价格\t订单状态"); // 打印表头 // 遍历订单列表,打印订单信息 for (int i = 0; i < ORDER_LIST.size(); i++) { System.out.println((i + 1) + "\t" + ORDER_LIST.get(i).getName() + "\t" + ORDER_LIST.get(i).getDishMessg() + "\t" + ORDER_LIST.get(i).getTime() + "点\t" + ORDER_LIST.get(i).getAddress() + "\t" + ORDER_LIST.get(i).getSumPrice() + "元\t" + (ORDER_LIST.get(i).getState() == 0 ? "已预订" : "已完成")); } break; // case 3: 签收订单功能开始 case 3: System.out.println("----->签收订单<-----"); // 签收订单提示 System.out.println("请输入你要签收的订单(输入序号):"); // 提示输入签收订单序号 int orderChoose = scanner.nextInt(); // 读取用户输入的订单序号 // 遍历订单列表,检查订单状态并签收订单 for (int i = 0; i < ORDER_LIST.size(); i++) { if (ORDER_LIST.get(i).getState() == 0 && orderChoose == (i + 1)) { ORDER_LIST.get(i).setState(1); // 更改订单状态为已签收 System.out.println("订单签收成功"); } else if (ORDER_LIST.get(i).getState() == 1 && orderChoose == (i + 1)) { System.out.println("该订单已签收,不能重复签收"); } } // 如果遍历结束后仍没有匹配到订单,提示用户 if (ORDER_LIST.stream().noneMatch(order -> orderChoose == (ORDER_LIST.indexOf(order) + 1))) { System.out.println("系统中没有你要签收的订单"); } break; // case 4: 删除订单功能开始 case 4: System.out.println("----->删除订单<-----"); // 删除订单提示 System.out.println("请输入你要删除的订单序号(输入序号):"); // 提示输入删除订单序号 int deleteChoose = scanner.nextInt(); // 读取用户输入的订单序号 // 遍历订单列表,检查订单状态并删除订单 for (int i = 0; i < ORDER_LIST.size(); i++) { if (ORDER_LIST.get(i).getState() == 1 && deleteChoose == (i + 1)) { ORDER_LIST.remove(i); // 删除订单 System.out.println("订单删除成功"); } else if (ORDER_LIST.get(i).getState() == 0 && deleteChoose == (i + 1)) { System.out.println("订单未签收,不能删除"); } } // 如果遍历结束后仍没有匹配到订单,提示用户 if (ORDER_LIST.stream().noneMatch(order -> deleteChoose == (ORDER_LIST.indexOf(order) + 1))) { System.out.println("系统中没有你要删除的订单"); } break; // case 5: 给菜品点赞功能开始 case 5: System.out.println("----->我要点赞<-----"); // 点赞提示 // 打印菜品列表 System.out.println("序号\t菜名\t价格\t点赞数"); for (int i = 0; i < FOOD_LIST.size(); i++) { System.out.println((i + 1) + "\t" + FOOD_LIST.get(i).getDishName() + "\t" + FOOD_LIST.get(i).getDishPrice() + "元\t" + FOOD_LIST.get(i).getDishNums() + "赞"); } System.out.println("请选择你要点赞的菜(选择序号):"); // 提示选择点赞菜品 int goodChoose = scanner.nextInt(); // 读取用户输入的菜品序号 // 根据输入的菜品序号,更新菜品点赞数 if (goodChoose > 0 && goodChoose <= FOOD_LIST.size()) {//如果用户输入的序号在菜品列表的有效范围内 FOOD_LIST.get(goodChoose - 1).setDishNums(FOOD_LIST.get(goodChoose - 1).getDishNums() + 1); // 获取用户选择的菜品(下标为goodChoose - 1,因为数组/列表的下标从0开始), // 并将其点赞数(或这里可能表示的是数量,但根据语境,我将它解释为点赞数)增加1 System.out.println("点赞成功!"); } else {// 如果用户输入的序号不在菜品列表的有效范围内 System.out.println("请输入有效序号!"); } break; case 6: System.out.println("----->退出系统<-----"); isExit = true; break; default: System.out.println("输入错误,请重新输入序号!"); break; } if (!isExit) { System.out.println("按任意键继续,输入'exit'退出"); String choice = scanner.next(); if ("exit".equalsIgnoreCase(choice)) { isExit = true; } } } System.out.println("欢迎下次光临,再见"); scanner.close(); } }