编写程序,包含以下功能
1增加菜品信息(编号、菜品名、类别、价格、受欢迎程度(0-10分))
2更新菜品信息(价格,受欢迎程度等)
3删除某个类别(类别删除后,此类别下的所有菜品都删除)
4删除某个菜品
5查找某个类别下的所有菜品
6统计评分最高的10个菜品,作为推荐菜显示。
程序设计:食堂菜品管理系统
- 写回答
- 好问题 0 提建议
- 追加酬金
- 关注问题
- 邀请回答
-
5条回答 默认 最新
- ShowMeAI 2022-12-08 15:39关注
已帮你完成所有代码实现,望采纳
下面是代码实现。这个代码实现包含上述功能,并且使用了一个简单的类来存储菜品信息,一个 map 来保存每个类别下的菜品,以及一个 vector 来存储所有菜品:#include <iostream> #include <map> #include <string> #include <vector> using namespace std; class Dish { public: // 构造函数 Dish(int id, const string& name, const string& category, double price, int rating) : id_(id), name_(name), category_(category), price_(price), rating_(rating) { } // 获取菜品 id int getId() const { return id_; } // 获取菜品名 string getName() const { return name_; } // 获取菜品类别 string getCategory() const { return category_; } // 获取菜品价格 double getPrice() const { return price_; } // 获取菜品评分 int getRating() const { return rating_; } // 设置菜品价格 void setPrice(double price) { price_ = price; } // 设置菜品评分 void setRating(int rating) { rating_ = rating; } private: int id_; string name_; string category_; double price_; int rating_; } ; class Menu { public: // 构造函数 Menu() : next_id_(1) { } // 增加菜品信息 void addDish(const string& name, const string& category, double price, int rating) { dishes_[next_id_] = Dish(next_id_, name, category, price, rating); category_dishes_[category].push_back(next_id_); next_id_++; } // 更新菜品信息 void updateDish(int id, double price, int rating) { // 找到菜品 auto it = dishes_.find(id); if (it == dishes_.end()) { // 没有找到菜品 return; } // 更新价格和评分 it->second.setPrice(price); it->second.setRating(rating); } // 删除某个类别(类别删除后,此类别下的所有菜品都删除) void deleteCategory(const string& category) { // 找到类别 auto it = category_dishes_.find(category); if (it == category_dishes_.end()) { // 没有找到类别 return; } Copy code // 删除所有属于该类别的菜品 for (int id : it->second) { dishes_.erase(id); } // 删除该类别 category_dishes_.erase(it); } // 删除某个菜品 void deleteDish(int id) { // 找到菜品 auto it = dishes_.find(id); if (it == dishes_.end()) { // 没有找到菜品 return; } // 从类别中删除该菜品 auto& category_dish = category_dishes_[it->second.getCategory()]; for (int i = 0; i < category_dish.size(); i++) { if (category_dish[i] == id) { category_dish.erase(category_dish.begin() + i); break; } } // 删除该菜品 dishes_.erase(it); } // 查找某个类别下的所有菜品 vector<Dish> findCategory(const string& category) const { vector<Dish> result; // 找到类别 auto it = category_dishes_.find(category); if (it == category_dishes_.end()) { // 没有找到类别 return result; } // 查找该类别下的所有菜品 for (int id : it->second) { result.push_back(dishes_.at(id)); } return result; } // 统计评分最高的10个菜品,作为推荐菜显示 vector<Dish> top10Dishes() const { vector<Dish> result; // 按评分排序所有菜品 vector<pair<int, int>> dishes_by_rating; for (const auto& p : dishes_) { dishes_by_rating.emplace_back(p.second.getRating(), p.first); } sort(dishes_by_rating.rbegin(), dishes_by_rating.rend()); // 取前 10 个 for (int i = 0; i < 10 && i < dishes_by_rating.size(); i++) { result.push_back(dishes_.at(dishes_by_rating[i].second)); } return result; } private: int next_id_; map<int, Dish> dishes_; map<string, vector<int>> category_dishes_; } ; int main() { // 创建菜单 Menu menu; // 添加菜品 menu.addDish("牛排", "肉类", 38.0, 8); menu.addDish("鱼香肉丝", "家常菜", 22.0, 9); menu.addDish("水煮鱼", "川菜", 28.0, 8); // 更新菜品信息 menu.updateDish(1, 40.0, 9); // 删除某个类别 menu.deleteCategory("家常菜"); // 删除某个菜品 menu.deleteDish(3); // 查找某个类别下的所有菜品 auto dishes = menu.findCategory("肉类"); cout << "肉类菜品:" << endl; for (const auto& dish : dishes) { cout << dish.getName() << endl; } // 统计评分最高的10个菜品,作为推荐菜显示 auto top10 = menu.top10Dishes(); cout << "推荐菜品:" << endl; for (const auto& dish : top10) { cout << dish.getName() << endl; } return 0; }
本回答被题主选为最佳回答 , 对您是否有帮助呢?解决 无用评论 打赏 举报
悬赏问题
- ¥60 pb数据库修改或者求完整pb库存系统,需为pb自带数据库
- ¥15 spss统计中二分类变量和有序变量的相关性分析可以用kendall相关分析吗?
- ¥15 拟通过pc下指令到安卓系统,如果追求响应速度,尽可能无延迟,是不是用安卓模拟器会优于实体的安卓手机?如果是,可以快多少毫秒?
- ¥20 神经网络Sequential name=sequential, built=False
- ¥16 Qphython 用xlrd读取excel报错
- ¥15 单片机学习顺序问题!!
- ¥15 ikuai客户端多拨vpn,重启总是有个别重拨不上
- ¥20 关于#anlogic#sdram#的问题,如何解决?(关键词-performance)
- ¥15 相敏解调 matlab
- ¥15 求lingo代码和思路