每日一卷 2022-12-10 20:18 采纳率: 100%
浏览 89
已结题

足球联赛管理系统,c++写

img


就按照这个要求做一个足球联赛的管理系统,尽量简易一点。谢谢。

  • 写回答

5条回答 默认 最新

  • ShowMeAI 2022-12-10 22:30
    关注
    #include <iostream>
    #include <string>
    #include <vector>
    #include <map>
    #include <algorithm>
    #include <fstream>
    // 球队类
    class Team {
        public:
          std::string name;
        // 球队名称
        int id;
        // 编号
        int points;
        // 积分
        std::vector<std::string> homeLossOpponents;
        // 主场失利的对手名称
        // 构造函数
        Team(std::string name, int id) : name(name), id(id), points(0) {
        }
        // 球队比赛数据
        struct MatchData {
            int round;
            // 轮次
            bool isHome;
            // 是否为主场
            std::string opponent;
            // 对手名称
            int goalsScored;
            // 进球数
            int goalsConceded;
            // 失球数
            int score;
            // 本场得分
            // 构造函数
            MatchData(int round, bool isHome, std::string opponent, int goalsScored, int goalsConceded, int score)
                    : round(round), isHome(isHome), opponent(opponent), goalsScored(goalsScored), goalsConceded(goalsConceded),
                      score(score) {
            }
        }
        ;
        std::vector<MatchData> matchData;
        // 比赛数据
        // 添加比赛数据
        void addMatchData(int round, bool isHome, std::string opponent, int goalsScored, int goalsConceded, int score) {
            matchData.emplace_back(round, isHome, opponent, goalsScored, goalsConceded, score);
            points += score;
            if (isHome && score == 0) {
                homeLossOpponents.push_back(opponent);
            }
        }
        // 显示球队比赛数据
        void showMatchData() const {
            std::cout << "球队名称\t联赛轮次\t主或客场\t对手球队\t进球数\t失球数\t本场得分\t积分\n";
            for (const auto &data : matchData) {
                std::cout << name << '\t' << data.round << '\t' << (data.isHome ? "主" : "客") << '\t' << data.opponent << '\t'
                                << data.goalsScored<< '\t' << data.goalsConceded << '\t' << data.score << '\t' << points << '\n';
            }
        }
        // 显示主场失利的对手名称
        void showHomeLossOpponents() const {
            std::cout << "主场失利的对手名称:\n";
            for (const auto &opponent : homeLossOpponents) {
                std::cout << opponent << '\n';
            }
        }
    }
    ;
    int main() {
        // 初始化球队
        std::vector<Team> teams;
        teams.emplace_back("广州队", 1);
        teams.emplace_back("山东队", 2);
        teams.emplace_back("深圳队", 3);
        teams.emplace_back("北京队", 4);
        // 初始化球队名称到编号的映射
        std::map<std::string, int> teamNameToId;
        for (const auto &team : teams) {
            teamNameToId[team.name] = team.id;
        }
        // 录入比赛结果
        std::cout << "请输入比赛结果:\n";
        for (int i = 0; i < 2; ++i) {
            std::string homeTeam, awayTeam;
            int homeGoals, awayGoals;
            std::cin >> homeTeam >> awayTeam >> homeGoals >> awayGoals;
            // 生成各球队的比赛数据
            teams[teamNameToId[homeTeam] - 1].addMatchData(1, true, awayTeam, homeGoals, awayGoals,
                                                           homeGoals > awayGoals ? 3 : (homeGoals == awayGoals ? 1 : 0));
            teams[teamNameToId[awayTeam] - 1].addMatchData(1, false, homeTeam, awayGoals, homeGoals,
                                                           awayGoals > homeGoals ? 3 : (awayGoals == homeGoals ? 1 : 0));
        }
        // 显示各球队的比赛数据
        for (const auto &team : teams) {
            team.showMatchData();
        }
        // 显示所有球队截止到本轮的积分
        std::cout << "所有球队截止到本轮的积分:\n";
        for (const auto &team : teams) {
            std::cout << team.name << ' ' << team.points << '\n';
        }
        // 显示某球队的积分
        std::string teamName;
        std::cin >> teamName;
        std::cout << teamName << " 的积分: " << teams[teamNameToId[teamName] - 1].points << '\n';
        // 显示某球队某轮次的比赛数据
        std::cin >> teamName;
        int round;
        std::cin >> round;
        std::cout << teamName << " 第 " << round << " 轮的比赛数据:\n";
        teams[teamNameToId[teamName] - 1].showMatchData();
        // 显示某球队所有在主场失利时的对手
        std::cin >> teamName;
        std::cout << teamName << " 所有在主场失利时的对手:\n";
        teams[teamNameToId[teamName] - 1].showHomeLossOpponents();
        // 显示某球队所有在客场时的比赛数据
        std::cin >> teamName;
        std::cout << teamName << " 所有在客场时的比赛数据:\n";
        for (const auto &data : teams[teamNameToId[teamName] - 1].matchData) {
            if (!data.isHome) {
                std::cout << teamName << '\t' << data.round << '\t' << (data.isHome ? "主" : "客") << '\t' << data.opponent
                << '\t' << data.goalsScored << '\t' << data.goalsConceded << '\t' << data.score << '\t'
                << teams[teamNameToId[teamName] - 1].points << '\n';
            }
        }
        // 对球队排名
        std::cout << "球队排名:\n";
        std::sort(teams.begin(), teams.end(),
        [](const auto &lhs, const auto &rhs) {
            return lhs.points > rhs.points;
        }
        );
        std::cout << "前两名:\n";
        for (int i = 0; i < 2; ++i) {
            std::cout << teams[i].name << '\n';
        }
        std::cout << "最后两名:\n";
        for (int i = 0; i < 2; ++i) {
            std::cout << teams[teams.size() - i - 1].name << '\n';
        }
        // 保存所有球队一个赛季的完整比赛数据
        std::ofstream fout("match_data.txt");
        for (const auto &team : teams) {
            fout << team.id << ' ' << team.name << ' ' << team.points << '\n';
            for (const auto &data : team.matchData) {
                fout << data.round << ' ' << data.isHome << ' ' << data.opponent << ' ' << data.goalsScored << ' '
                << data.goalsConceded << ' ' << data.score << '\n';
            }
        }
        fout.close();
        return 0;
    }
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(4条)

报告相同问题?

问题事件

  • 系统已结题 12月19日
  • 已采纳回答 12月11日
  • 创建了问题 12月10日

悬赏问题

  • ¥15 各位请问平行检验趋势图这样要怎么调整?说标准差差异太大了
  • ¥15 delphi webbrowser组件网页下拉菜单自动选择问题
  • ¥15 wpf界面一直接收PLC给过来的信号,导致UI界面操作起来会卡顿
  • ¥15 init i2c:2 freq:100000[MAIXPY]: find ov2640[MAIXPY]: find ov sensor是main文件哪里有问题吗
  • ¥15 运动想象脑电信号数据集.vhdr
  • ¥15 三因素重复测量数据R语句编写,不存在交互作用
  • ¥15 微信会员卡等级和折扣规则
  • ¥15 微信公众平台自制会员卡可以通过收款码收款码收款进行自动积分吗
  • ¥15 随身WiFi网络灯亮但是没有网络,如何解决?
  • ¥15 gdf格式的脑电数据如何处理matlab