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)41
- 实验目的: 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)354
- [字节豆包] 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)231
- [讯飞星火] #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)299
- [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)287
- [字节豆包] 成绩计算-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)281
- [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)436
- [字节豆包] 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)72
- [字节豆包] 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)57
- [阿里通义] 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)125
- [字节豆包] 题目描述 午饭时间,喵喵喵幼儿园的n位小朋友从左到右排成一列等待领取自己的午餐。我们 将这些小朋友从左到右依次标号为 1,2,⋯,n−1,n。 负责配餐的老师已经拿到了所有人的午饭餐食,餐食同样也是从左到右排成一排。 老师手里拿到了一份序列 r1 ⋯rn,代表编号为i的小朋友应该拿到从左向右数第 ri份 午餐餐食(1≤ri≤n且 ri两两不同)。 按照上面的序列分发完成后,老师又拿到了一个序列 a1⋯an,其中 a i代表未分发前从 左向右数第 i 份餐食的一个参数。 老师想要知道,对每个小朋友,他们所拿到的午餐的这个参数的值是多少。但是这个 任务对于老师来说太难了,所以喵喵喵幼儿园找到了万能的你。 输入格式 共三行。 第一行一个整数,代表 n。 第二行 n 个整数,代表 r1⋯rn。 第三行 n 个整数,代表 a1⋯an。 输出格式 一行,n 个整数。第 i 个整数代表编号为 i 的小朋友所拿到的午餐的这个参数是多 少。 输入输出样例 输入 #1 4 4 1 3 2 7 4 2 9 输出 #1 9 7 2 4 说明/提示 样例解释 编号(481点数解答 | 2025-11-16 19:24:11)22
- [讯飞星火] 快速排序:# include< iostream>using namespace std;# include< stdlib. h># include< time. h>const int n =10;const int min= 10;const int max=99;int getrand( int min, int max){return ( rand()%( max-min+1)+ min);}void set( int r[], int n){int i;for(i=0;i<n;i++)r[i]=getrand(min, max);}void show( int r[], int n){int i;for(i=0;i<n;i++)cout << r[i]<<" ";cout << endl;}int partition( int r[], int i, int j){//由你完成}void quicksort( int r[], int i, int j){//由你完成}int main(){srand( time(0));int a[n];set(a, n);cout<<"(710点数解答 | 2024-11-14 10:44:25)275