You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何获取具有共同属性的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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.30 20:54:00