7 - 8菜单计价程序-2:Java实现点菜计价与订单管理,附详细代码及注意事项
为了解决这个问题,我们需要设计一个点菜计价程序,处理菜单输入、订单记录(包括点菜和删除),并计算总价。程序需要处理错误情况,如无效菜名和删除不存在的记录。 方法思路 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. 计算价格时注意四舍五入规则,避免精度丢失。 ######[AI写代码神器 | 1256点数解答 | 2025-10-17 17:32:14]
- Java 实现复制粘贴功能:打造简易文本复制粘贴程序(GPT | 1497点数解答 | 2024-08-25 09:40:33)405
- 7 - 8菜单计价程序-2:Java实现点菜计价与订单管理,附详细代码及注意事项(DeepSeek | 1256点数解答 | 2025-10-17 17:32:14)119
- 解决数据库“dm.jdbc.driver.dmexception: 数据溢出”问题的全步骤指南(阿里通义 | 598点数解答 | 2024-10-15 15:48:38)305
- 达梦数据库数据溢出问题排查及多维度解决方法(阿里通义 | 403点数解答 | 2024-10-15 15:48:41)1134
- Python 实现球类:精准计算半径、表面积与体积,附输入验证与异常处理!(阿里通义 | 261点数解答 | 2024-11-28 21:19:39)343
- 工程师必备!10 种工程日常易用管理工具大揭秘(百度文心 | 346点数解答 | 2023-11-09 18:26:09)290
- 缜密逻辑,全新无名杀“风餐”技能代码精心打造与深度解析 (字节豆包 | 469点数解答 | 2025-04-05 11:37:06)240
- SQL2008:三表联查显示姓名、订单号与明细号并按序排列 (字节豆包 | 148点数解答 | 2024-12-05 08:48:24)226
- Java:设计圆类与圆柱体类并计算属性及体积表面积(字节豆包 | 470点数解答 | 2024-10-20 10:03:11)181
- Java 实现矩形与长方体类,精准计算底面积与体积(字节豆包 | 319点数解答 | 2024-10-20 10:25:46)286
- 51 单片机:定时器 0 实现 8 个 LED 循环点亮,附代码及优化建议(字节豆包 | 1193点数解答 | 2024-12-27 15:10:29)310
- "Java Code: Uncovering Stock Statistics through CSV File Reading"(字节豆包 | 66点数解答 | 2024-11-13 15:31:04)317