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点数解答]
- [DeepSeek] 7-8 菜单计价程序-2 分数 25 作者 蔡轲 单位 南昌航空大学 设计点菜计价程序,根据输入的信息,计算并输出总价格。 输入内容按先后顺序包括两部分:菜单、订单,最后以"end"结束。 菜单由一条或多条菜品记录组成,每条记录一行 每条菜品记录包含:菜名、基础价格 两个信息。 订单分:点菜记录和删除信息。每一类信息都可包含一条或多条记录,每条记录一行。 点菜记录包含:序号、菜名、份额、份数。 份额可选项包括:1、2、3,分别代表小、中、大份。 删除记录格式:序号 delete 标识删除对应序号的那条点菜记录。 不同份额菜价的计算方法: 小份菜的价格=菜品的基础价格。 中份菜的价格=菜品的基础价格1.5。 小份菜的价格=菜品的基础价格2。 如果计算出现小数,按四舍五入的规则进行处理。 参考以下类的模板进行设计: 菜品类:对应菜谱上一道菜的信息。 Dish { String name;//菜品名称 int unit_price; //单价 int getPrice(int portion)//计算菜品价格的方法,输入(1256点数解答 | 2025-10-17 17:32:14)93
- 实验目的: 1.巩固理解java的面向对象程序设计概念 2.理解java封装的含义 3.理解static, final等关键字的含义及应用实验内容: 定义 book类,给每一本书自动赋上索书号 is sn1, issn2... 声明一个图书类,其数据成员为书名、编号(利用静态变量实现自动编号“issn1” “is sn2”) 书价,册数和静态属性图书的总册数,在构造方法中利用静态变量为对象的编号赋值,在主方法中 定义对象数组,并求出总册数。运行效果如下: 【书名]:java程序书名]:java程序书名]:ava程序 书名j:c语言程序设计书名]:c语言程序设计书名]:null 书名]:nul1 [书名]:nu11 【价格]:35.6 【价格]:35.6 【价格]:35.6 [价格]:42.6 [价格]:42.6 [价格]:8.日 [价格]:8.8 [价格]:8.0 [图书線号]:issn1图书编号]:issn2[图书编号):issn3[图书编号j:issn4图书编号]:issn5图书線号】:issn6[图书線号]:issn7[图书編号]:issn8 [本书的册数]:3 [本书的册数]:(1469点数解答 | 2024-04-02 10:20:41)401
- [字节豆包] 题目描述 在甜甜圈王国中,每颗甜甜圈都有一个甜度值 S 来衡量其甜蜜程度。根据甜度的不同,甜甜圈被评定为不同的等级,具体规则如下: 如果 S 在 0 到 25 之间(包含 0 和 25 ),输出 "普通甜甜圈"; 如果 S 在 26 到 50 之间(包含 26 和 50 ),输出 "美味甜甜圈"; 如果 S 在 51 到 75 之间(包含 51 和 75 ),输出 "极品甜甜圈"; 如果 S 在 76 到 99 之间(包含 76 和 99 ),输出 "绝世甜甜圈"; 如果 S 等于 100 ,输出 "传说甜甜圈"。 请根据给定的甜度值 S,输出对应的甜甜圈等级名称。 输入格式 一行一个整数 S,表示甜甜圈的甜度值。(243点数解答 | 2025-12-06 18:35:50)59
- [字节豆包] c语言现在有n枚硬币,其中有一枚是假的,假的硬币比真币轻,但也只轻一点点,而**和真币的外观是一模一样的,从外观上无法辨别硬币的真假,请写程序找出**。 程序的要求: 必须使用递归调用函数实现 递归函数原型必须为:int findfakecoin(int *p, int low, int high) 程序中必须包含函数:int getsum(int *p, int start, int end) main函数已经写好,请编写程序剩余部分的代码并提交。 main函数如下: int main() { int coins[n]; int m; int index; int getsum(int *p, int start, int end); int findfakecoin(int *p, int low, int high); scanf("%d", &m); for (int i = 0; i < m; ++i(497点数解答 | 2024-12-02 22:03:42)262
- [讯飞星火] #include <iostream> #include<cstring> using namespace std; class vehicle{ public: void run(); string getname(); vehicle(string name); string name; }; vehicle::vehicle(string name){ this->name = name; } void vehicle::run(){ cout<<"出发"<<endl; } string vehicle::getname(){ return name; } class car:public vehicle{ public: void break(); void display(); car(int seats,string color,string type,int power,string name); en(65点数解答 | 2024-05-26 17:01:16)341
- [GPT] #include <iostream> #include<cstring> using namespace std; class vehicle{ public: void run(); string getname(); vehicle(string name); string name; }; vehicle::vehicle(string name){ this->name = name; } void vehicle::run(){ cout<<"出发"<<endl; } string vehicle::getname(){ return name; } class car:public vehicle{ public: void break(); void display(); car(int seats,string color,string type,int power,string name); en(373点数解答 | 2024-05-26 17:02:18)329
- [字节豆包] 成绩计算-2-关联类 分数 50 作者 蔡轲 单位 南昌航空大学 创建成绩类,包含: 属性:平时成绩(int)、期末成绩(int) 方法:计算总成绩(计算规则:平时成绩*0.4+期末成绩*0.6,保留整数部分,小数部分直接丢弃) 创建学生类,包含: 属性:学号(String)、姓名(String)、语文成绩(成绩类)、数学成绩(成绩类)、物理成绩(成绩类) 方法:计算总分、计算平均分 输入3个学生的信息,将每个学生的信息封装在一个学生对象中。 按输入顺序依次输出3个学生的总分、平均分(精确到小数点后两位,舍去部分按四舍五入规则计入最后一位)。 浮点数保留小数的相关知识可参考:https://blog.csdn.net/huaishuming/article/details/17752365 注意:未用学生类对象封装数据的,本题计0分(655点数解答 | 2025-04-18 11:41:55)350
- [DeepSeek] 7-2 成绩计算-2-关联类 分数 50 作者 蔡轲 单位 南昌航空大学 创建成绩类,包含: 属性:平时成绩(int)、期末成绩(int) 方法:计算总成绩(计算规则:平时成绩*0.4+期末成绩*0.6,保留整数部分,小数部分直接丢弃) 创建学生类,包含: 属性:学号(String)、姓名(String)、语文成绩(成绩类)、数学成绩(成绩类)、物理成绩(成绩类) 方法:计算总分、计算平均分 输入3个学生的信息,将每个学生的信息封装在一个学生对象中。 按输入顺序依次输出3个学生的总分、平均分(精确到小数点后两位,舍去部分按四舍五入规则计入最后一位)。 浮点数保留小数的相关知识可参考:https://blog.csdn.net/huaishuming/article/details/17752365 注意:未用学生类对象封装数据的,本题计0分 输入格式: 依次输入3个学生的每门课成绩,每个学生成绩信息格式: 学号+英文空格+姓名+英文空格+课程名+英文空格+平时成绩+英文空格+期末成绩 注:3个学生的课程顺序可能会不一致 例如: 22201311 张琳 语文 7(621点数解答 | 2025-04-18 11:43:55)562
- [字节豆包] 7-2 成绩计算-2-关联类 分数 50 作者 蔡轲 单位 南昌航空大学 创建成绩类,包含: 属性:平时成绩(int)、期末成绩(int) 方法:计算总成绩(计算规则:平时成绩*0.4+期末成绩*0.6,保留整数部分,小数部分直接丢弃) 创建学生类,包含: 属性:学号(String)、姓名(String)、语文成绩(成绩类)、数学成绩(成绩类)、物理成绩(成绩类) 方法:计算总分、计算平均分 输入3个学生的信息,将每个学生的信息封装在一个学生对象中。 按输入顺序依次输出3个学生的总分、平均分(精确到小数点后两位,舍去部分按四舍五入规则计入最后一位)。 浮点数保留小数的相关知识可参考:https://blog.csdn.net/huaishuming/article/details/17752365 注意:未用学生类对象封装数据的,本题计0分 输入格式: 依次输入3个学生的每门课成绩,每个学生成绩信息格式: 学号+英文空格+姓名+英文空格+课程名+英文空格+平时成绩+英文空格+期末成绩 注:3个学生的课程顺序可能会不一致 例如: 22201311 张琳 语文 7(988点数解答 | 2025-10-08 20:31:01)129
- [字节豆包] 7-2 成绩计算-2-关联类 分数 50 作者 蔡轲 单位 南昌航空大学 创建成绩类,包含: 属性:平时成绩(int)、期末成绩(int) 方法:计算总成绩(计算规则:平时成绩*0.4+期末成绩*0.6,保留整数部分,小数部分直接丢弃) 创建学生类,包含: 属性:学号(String)、姓名(String)、语文成绩(成绩类)、数学成绩(成绩类)、物理成绩(成绩类) 方法:计算总分、计算平均分 输入3个学生的信息,将每个学生的信息封装在一个学生对象中。 按输入顺序依次输出3个学生的总分、平均分(精确到小数点后两位,舍去部分按四舍五入规则计入最后一位)。 浮点数保留小数的相关知识可参考:https://blog.csdn.net/huaishuming/article/details/17752365 注意:未用学生类对象封装数据的,本题计0分 输入格式: 依次输入3个学生的每门课成绩,每个学生成绩信息格式: 学号+英文空格+姓名+英文空格+课程名+英文空格+平时成绩+英文空格+期末成绩 注:3个学生的课程顺序可能会不一致 例如: 22201311 张琳 语文 7(836点数解答 | 2025-10-29 09:00:27)121
- [阿里通义] 7-14 成绩计算-2-关联类 分数 10 作者 蔡轲 单位 南昌航空大学 创建成绩类,包含: 属性:平时成绩(int)、期末成绩(int) 方法:计算总成绩(计算规则:平时成绩*0.4+期末成绩*0.6,保留整数部分,小数部分直接丢弃) 创建学生类,包含: 属性:学号(String)、姓名(String)、语文成绩(成绩类)、数学成绩(成绩类)、物理成绩(成绩类) 方法:计算总分、计算平均分 输入3个学生的信息,将每个学生的信息封装在一个学生对象中。 按输入顺序依次输出3个学生的总分、平均分(精确到小数点后两位,舍去部分按四舍五入规则计入最后一位)。 浮点数保留小数的相关知识可参考:https://blog.csdn.net/huaishuming/article/details/17752365 注意:未用学生类对象封装数据的,本题计0分 输入格式: 依次输入3个学生的每门课成绩,每个学生成绩信息格式: 学号+英文空格+姓名+英文空格+课程名+英文空格+平时成绩+英文空格+期末成绩 注:3个学生的课程顺序可能会不一致 例如: 22201311 张琳 语文 (852点数解答 | 2025-10-29 16:07:33)248
- [DeepSeek] public class Student { private String name; private int age; private double gender; private String phone; private String address; private String email; public Student(){} public Student(String name, int age, double gender, String phone, String address, String email){ this.name = name; this.age = age; this.gender = gender; this.phone = phone; this.address = address; this.email = email; } public String getEmai(464点数解答 | 2025-10-28 16:05:49)74