酷代码 AI
菜单
服务商

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]

相关提问
本站限时免费提问中
实用工具查看更多
Linux在线手册 [开发类]
Jquery在线手册 [开发类]
今日油价 [生活类]
图片互转base64 [开发类]
时间转换器 [开发类]