如何获取具有共同属性的Movie类对象列表并实现影院相关功能
C++影院管理功能实现方案
1 补全基础类定义
你原有代码中Cinema类缺少存储上映电影、每日售票数据的核心成员,先补全结构:
#include <iostream> #include <vector> #include <algorithm> #include <map> #include <functional> using namespace std; class Movie{ public: int ID; string Title; int Ranking; string ReleaseDate; // 建议统一使用YYYY-MM-DD格式存储,方便排序比较 int CharacterNumber; int TicketPrice; string Comment; enum type{ ACTION, COMEDY, DRAMA, FANTASY } Type; Movie(int, string, int, string, int, int, string, type); Movie() = default; }; Movie::Movie(int ID, string Title,int Ranking,string ReleaseDate,int CharacterNumber, int TicketPrice,string Comment, type Type){ this->ID=ID; this->Title=Title; this->Ranking=Ranking; this->ReleaseDate=ReleaseDate; this->CharacterNumber=CharacterNumber; this->TicketPrice=TicketPrice; this->Comment=Comment; this->Type=Type; } class Cinema{ private: // 存储影院上映的所有电影 vector<Movie> movieList; // 存储每日售票数据:键为<电影ID, 日期>,值为当日该电影售票张数 map<pair<int, string>, int> dailyTicketSales; public: string name; string location; // 基础操作接口 void addMovie(const Movie& m) { movieList.push_back(m); } void recordTicketSale(int movieId, const string& date, int count) { dailyTicketSales[{movieId, date}] += count; } // 核心功能接口 int calculateProfit(const Movie* m, const string& day); void sortMoviesByReleaseDate(bool asc = true); vector<Movie> filterMovies(const function<bool(const Movie&)>& condition) const; };
2 核心功能实现
2.1 指定日期利润计算
int Cinema::calculateProfit(const Movie* m, const string& day) { if (!m) return 0; auto it = dailyTicketSales.find({m->ID, day}); if (it == dailyTicketSales.end()) return 0; // 利润=票价*售票数,若需要扣除放映成本可自行修改公式 return m->TicketPrice * it->second; }
2.2 按上映日期排序
void Cinema::sortMoviesByReleaseDate(bool asc) { sort(movieList.begin(), movieList.end(), [asc](const Movie& a, const Movie& b) { return asc ? a.ReleaseDate < b.ReleaseDate : a.ReleaseDate > b.ReleaseDate; }); }
2.3 按指定属性筛选电影
通用筛选接口支持任意属性组合筛选,调用示例如下:
vector<Movie> Cinema::filterMovies(const function<bool(const Movie&)>& condition) const { vector<Movie> res; for (const auto& m : movieList) { if (condition(m)) res.push_back(m); } return res; } // 调用示例: // 筛选所有喜剧类型的电影:auto comedyMovies = cinema.filterMovies([](const Movie& m) {return m.Type == Movie::COMEDY;}); // 筛选票价高于50元的电影:auto highPriceMovies = cinema.filterMovies([](const Movie& m) {return m.TicketPrice > 50;}); // 筛选2024年上映的电影:auto newMovies = cinema.filterMovies([](const Movie& m) {return m.ReleaseDate.substr(0,4) == "2024";});
内容的提问来源于stack exchange,提问作者Sgg8
相关产品推荐
相关产品推荐

