地狱重生后我学C++ 2022-12-08 15:19 采纳率: 93.8%
浏览 283
已结题

程序设计:食堂菜品管理系统

编写程序,包含以下功能
1增加菜品信息(编号、菜品名、类别、价格、受欢迎程度(0-10分))
2更新菜品信息(价格,受欢迎程度等)
3删除某个类别(类别删除后,此类别下的所有菜品都删除)
4删除某个菜品
5查找某个类别下的所有菜品
6统计评分最高的10个菜品,作为推荐菜显示。

  • 写回答

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;
    }
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(4条)

报告相同问题?

问题事件

  • 系统已结题 12月17日
  • 已采纳回答 12月9日
  • 创建了问题 12月8日

悬赏问题

  • ¥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代码和思路