酷代码 AI
菜单
服务商

7-8 菜单计价程序-2 分数 25 作者 蔡轲 单位 南昌航空大学 设计点菜计价程序,根据输入的信息,计算并输出总价格。 输入内容按先后顺序包括两部分:菜单、订单,最后以"end"结束。 菜单由一条或多条菜品记录组成,每条记录一行 每条菜品记录包含:菜名、基础价格 两个信息。 订单分:点菜记录和删除信息。每一类信息都可包含一条或多条记录,每条记录一行。 点菜记录包含:序号、菜名、份额、份数。 份额可选项包括:1、2、3,分别代表小、中、大份。 删除记录格式:序号 delete 标识删除对应序号的那条点菜记录。 不同份额菜价的计算方法: 小份菜的价格=菜品的基础价格。 中份菜的价格=菜品的基础价格1.5。 小份菜的价格=菜品的基础价格2。 如果计算出现小数,按四舍五入的规则进行处理。 参考以下类的模板进行设计: 菜品类:对应菜谱上一道菜的信息。 Dish { String name;//菜品名称 int unit_price; //单价 int getPrice(int portion)//计算菜品价格的方法,输入

为了解决这个问题,我们需要设计一个点菜计价程序,处理菜单输入、订单记录(包括点菜和删除),并计算总价。程序需要处理错误情况,如无效菜名和删除不存在的记录。 方法思路 1. 菜品类别:表示一道菜,包含名称、基础价格和计算不同份额价格的方法。 2. 菜单类别:管理菜品列表,支持添加和查找菜品。 3. 记录类别:保存点菜记录,包括序号、菜品、份额和份数,并能计算记录价格。 4. 订单类别:管理所有点菜记录,支持添加、删除记录,并计算总价。 5. 主逻辑:读取输入,处理菜单和订单,输出结果。 解决代码 ```java import java.util.*; class Dish { String name; int unit_price; Dish(String name, int unit_price) { this.name = name; this.unit_price = unit_price; } int getPrice(int portion) { double price; switch (portion) { case 1: price = unit_price; break; case 2: price = unit_price * 1.5; break; case 3: price = unit_price * 2; break; default: price = 0; } return (int) Math.round(price); } } class Menu { List<Dish> dishes = new ArrayList<>(); Dish searchDish(String dishName) { for (int i = dishes.size() - 1; i >= 0; i--) { if (dishes.get(i).name.equals(dishName)) { return dishes.get(i); } } return null; } void addDish(String dishName, int unit_price) { dishes.add(new Dish(dishName, unit_price)); } } class Record { int orderNum; Dish d; int portion; int num; Record(int orderNum, Dish d, int portion, int num) { this.orderNum = orderNum; this.d = d; this.portion = portion; this.num = num; } int getPrice() { return d.getPrice(portion) * num; } } class Order { List<Record> records = new ArrayList<>(); int getTotalPrice() { int total = 0; for (Record r : records) { total += r.getPrice(); } return total; } void addARecord(int orderNum, Dish d, int portion, int num) { records.add(new Record(orderNum, d, portion, num)); } void delARecordByOrderNum(int orderNum) { records.removeIf(r -> r.orderNum == orderNum); } Record findRecordByNum(int orderNum) { for (Record r : records) { if (r.orderNum == orderNum) { return r; } } return null; } } public class Main { public static void main(String[] args) { Scanner scanner = new Scanner(System.in); Menu menu = new Menu(); Order order = new Order(); List<String> outputLines = new ArrayList<>(); while (scanner.hasNextLine()) { String line = scanner.nextLine().trim(); if (line.equals("end")) { break; } if (line.contains(" ")) { String[] parts = line.split(" "); if (parts.length == 2) { String dishName = parts[0]; int unitPrice = Integer.parseInt(parts[1]); menu.addDish(dishName, unitPrice); } else if (parts.length == 4) { int orderNum = Integer.parseInt(parts[0]); String dishName = parts[1]; int portion = Integer.parseInt(parts[2]); int num = Integer.parseInt(parts[3]); Dish dish = menu.searchDish(dishName); if (dish != null) { order.addARecord(orderNum, dish, portion, num); int price = dish.getPrice(portion) * num; outputLines.add(orderNum + " " + dishName + " " + price); } else { outputLines.add(dishName + " does not exist"); } } else if (parts.length == 2 && parts[1].equals("delete")) { int orderNum = Integer.parseInt(parts[0]); Record record = order.findRecordByNum(orderNum); if (record != null) { order.delARecordByOrderNum(orderNum); } else { outputLines.add("delete error"); } } } } for (String output : outputLines) { System.out.println(output); } System.out.println(order.getTotalPrice()); } } ``` 代码解释 1. Dish类:存储菜品名称和基础价格,`getPrice`方法根据份额计算价格。 2. Menu类:管理菜品列表,`searchDish`方法查找菜品,`addDish`方法添加菜品。 3. Record类:存储点菜记录,`getPrice`方法计算记录总价。 4. Order类:管理所有点菜记录,`getTotalPrice`计算总价,`addARecord`和`delARecordByOrderNum`管理记录。 5. 主程序:读取输入,处理菜单和订单,输出结果,处理错误情况。 我在以往的开发过程中,碰到过以下几点需要格外小心处理的地方: 1. 输入数据的格式验证,确保各部分正确分割和解析。 2. 处理删除操作时,确保序号存在且正确移除记录。 3. 计算价格时注意四舍五入规则,避免精度丢失。 [2025-10-17 17:32:14 | AI写代码神器 | 1256点数解答]

相关提问
发财导航,免费问AI
实用工具查看更多