学生运动会的管理系统

因为要答辩,尽量注释代码用途

题目:学生运动会管理系统
1.运动会管理系统需要支持运动项目创建,包括但不限于:乒乓球,跳远,跳高,短跑,接力赛
2.运动项目分为:男子组,女子组
3.运动员需要通过系统进行报名,选择相应的项目和组别
4.初始化输入:N-参赛院系总数,M-男子竞赛项目数,W-女子竞赛项目数;
5.各项目名次取法有如下几种:
取前5名:每一名依次得分7.5.3.2.1         
6.由程序提醒用户填写比赛结果,输入各项目获奖运动员的信息。
7.所有信息记录完毕后,用户可以查询各个院系或个人的比赛成绩,生成团体总分报表,查看参赛院系信息、获奖运动员、比赛项目信息等。

linux?

参考

 
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
 
// 运动员结构体
typedef struct {
    char name[20];
    char department[20];
    int score;
} Athlete;
 
// 运动项目结构体
typedef struct {
    char name[20];
    char group[10];
    int numAthletes;
    Athlete* athletes[100];
} Sport;
 
// 运动会结构体
typedef struct {
    int numDepartments;
    int numMaleSports;
    int numFemaleSports;
    char** departments;
    Sport** maleSports;
    Sport** femaleSports;
} SportsMeeting;
 
// 创建运动会
SportsMeeting* createSportsMeeting(int numDepartments, int numMaleSports, int numFemaleSports) {
    SportsMeeting* meeting = (SportsMeeting*)malloc(sizeof(SportsMeeting));
    meeting->numDepartments = numDepartments;
    meeting->numMaleSports = numMaleSports;
    meeting->numFemaleSports = numFemaleSports;
    meeting->departments = (char**)malloc(numDepartments * sizeof(char*));
    meeting->maleSports = (Sport**)malloc(numMaleSports * sizeof(Sport*));
    meeting->femaleSports = (Sport**)malloc(numFemaleSports * sizeof(Sport*));
    return meeting;
}
 
// 销毁运动会
void destroySportsMeeting(SportsMeeting* meeting) {
    for (int i = 0; i < meeting->numDepartments; i++) {
        free(meeting->departments[i]);
    }
    free(meeting->departments);
    for (int i = 0; i < meeting->numMaleSports; i++) {
        free(meeting->maleSports[i]);
    }
    free(meeting->maleSports);
    for (int i = 0; i < meeting->numFemaleSports; i++) {
        free(meeting->femaleSports[i]);
    }
    free(meeting->femaleSports);
    free(meeting);
}
 
// 添加运动项目
void addSport(SportsMeeting* meeting, int index, const char* name, const char* group) {
    Sport* sport = (Sport*)malloc(sizeof(Sport));
    strcpy(sport->name, name);
    strcpy(sport->group, group);
    sport->numAthletes = 0;
    meeting->maleSports[index] = sport;
}
 
// 注册运动员
void registerAthlete(SportsMeeting* meeting, int sportIndex, const char* department, const char* name) {
    Athlete* athlete = (Athlete*)malloc(sizeof(Athlete));
    strcpy(athlete->name, name);
    strcpy(athlete->department, department);
    athlete->score = 0;
    Sport* sport;
    if (sportIndex < meeting->numMaleSports) {
        sport = meeting->maleSports[sportIndex];
    }
    else {
        sport = meeting->femaleSports[sportIndex - meeting->numMaleSports];
    }
    if (sport->numAthletes < 100) {
        sport->athletes[sport->numAthletes] = athlete;
        sport->numAthletes++;
    }
    else {
        printf("该项目已报满\n");
    }
}
 
// 输入比赛结果
void inputResults(SportsMeeting* meeting) {
    for (int i = 0; i < meeting->numMaleSports; i++) {
        Sport* sport = meeting->maleSports[i];
        printf("请输入%s(%s)的比赛结果:\n", sport->name, sport->group);
        for (int j = 0; j < sport->numAthletes; j++) {
            printf("请输入第%d名运动员的得分:", j + 1);
            scanf("%d", &(sport->athletes[j]->score));
        }
    }
    for (int i = 0; i < meeting->numFemaleSports; i++) {
        Sport* sport = meeting->femaleSports[i];
        printf("请输入%s(%s)的比赛结果:\n", sport->name, sport->group);
        for (int j = 0; j < sport->numAthletes; j++) {
            printf("请输入第%d名运动员的得分:", j + 1);
            scanf("%d", &(sport->athletes[j]->score));
        }
    }
}
 
// 查询院系比赛成绩
void queryDepartmentScore(SportsMeeting* meeting, const char* department) {
    int totalScore = 0;
    for (int i = 0; i < meeting->numMaleSports; i++) {
        Sport* sport = meeting->maleSports[i];
        for (int j = 0; j < sport->numAthletes; j++) {
            if (strcmp(sport->athletes[j]->department, department) == 0) {
                totalScore += sport->athletes[j]->score;
            }
        }
    }
    for (int i = 0; i < meeting->numFemaleSports; i++) {
        Sport* sport = meeting->femaleSports[i];
        for (int j = 0; j < sport->numAthletes; j++) {
            if (strcmp(sport->athletes[j]->department, department) == 0) {
                totalScore += sport->athletes[j]->score;
            }
        }
    }
    printf("%s院系的总分为:%d\n", department, totalScore);
}
 
// 查询个人比赛成绩
void queryAthleteScore(SportsMeeting* meeting, const char* name) {
    int totalScore = 0;
    for (int i = 0; i < meeting->numMaleSports; i++) {
        Sport* sport = meeting->maleSports[i];
        for (int j = 0; j < sport->numAthletes; j++) {
            if (strcmp(sport->athletes[j]->name, name) == 0) {
                totalScore += sport->athletes[j]->score;
            }
        }
    }
    for (int i = 0; i < meeting->numFemaleSports; i++) {
        Sport* sport = meeting->femaleSports[i];
        for (int j = 0; j < sport->numAthletes; j++) {
            if (strcmp(sport->athletes[j]->name, name) == 0) {
                totalScore += sport->athletes[j]->score;
            }
        }
    }
    printf("%s的总分为:%d\n", name, totalScore);
}
 
int main() {
    int numDepartments, numMaleSports, numFemaleSports;
    printf("请输入院系数量:");
    scanf("%d", &numDepartments);
    printf("请输入男子项目数量:");
    scanf("%d", &numMaleSports);
    printf("请输入女子项目数量:");
    scanf("%d", &numFemaleSports);
 
    SportsMeeting* meeting = createSportsMeeting(numDepartments, numMaleSports, numFemaleSports);
 
    // 输入院系名称
    for (int i = 0; i < numDepartments; i++) {
        char department[100];
        printf("请输入第%d个院系名称:", i + 1);
        scanf("%s", department);
        meeting->departments[i] = (char*)malloc(strlen(department) * sizeof(char));
        strcpy(meeting->departments[i], department);
    }
 
    // 输入男子项目名称和分组
    for (int i = 0; i < numMaleSports; i++) {
        char name[100];
        char group[100];
        printf("请输入第%d个男子项目名称:", i + 1);
        scanf("%s", name);
        printf("请输入第%d个男子项目分组:", i + 1);
        scanf("%s", group);
        addSport(meeting, i, name, group);
    }
 
    // 输入女子项目名称和分组
    for (int i = 0; i < numFemaleSports; i++) {
        char name[100];
        char group[100];
        printf("请输入第%d个女子项目名称:", i + 1);
        scanf("%s", name);
        printf("请输入第%d个女子项目分组:", i + 1);
        scanf("%s", group);
        addSport(meeting, numMaleSports + i, name, group);
    }
 
    // 注册运动员
    printf("请输入注册运动员的个数:");
    int numAthletes;
    scanf("%d", &numAthletes);
    for (int i = 0; i < numAthletes; i++) {
        char department[100];
        char name[100];
        int sportIndex;
        printf("请输入第%d个运动员所在院系:", i + 1);
        scanf("%s", department);
        printf("请输入第%d个运动员的姓名:", i + 1);
        scanf("%s", name);
        printf("请输入第%d个运动员参加的项目序号:", i + 1);
        scanf("%d", &sportIndex);
        registerAthlete(meeting, sportIndex, department, name);
    }
 
    // 输入比赛结果
    inputResults(meeting);
 
    // 查询院系比赛成绩
    printf("请输入要查询的院系名称:");
    char department[100];
    scanf("%s", department);
    queryDepartmentScore(meeting, department);
 
    // 查询个人比赛成绩
    printf("请输入要查询的运动员姓名:");
    char name[100];
    scanf("%s", name);
    queryAthleteScore(meeting, name);
 
    destroySportsMeeting(meeting);
 
    return 0;
}
 

什么语言?

#include <iostream>
#include <vector>
#include <map>

using namespace std;

// 运动项目类
class SportEvent {
public:
    string name;
    string gender;
    int numParticipants;

    SportEvent(string n, string g) : name(n), gender(g), numParticipants(0) {}
};

// 运动员类
class Athlete {
public:
    string name;
    string gender;
    string department;
    int score;

    Athlete(string n, string g, string d) : name(n), gender(g), department(d), score(0) {}
};

// 学生运动会管理系统类
class SportsManagementSystem {
public:
    map<string, vector<Athlete>> athletesByDepartment;  // 按院系分组的运动员信息
    vector<SportEvent> sportEvents;  // 运动项目列表

    // 创建运动项目
    void createSportEvent(string name, string gender) {
        SportEvent event(name, gender);
        sportEvents.push_back(event);
    }

    // 运动员报名参赛
    void registerAthlete(string name, string gender, string department) {
        Athlete athlete(name, gender, department);
        athletesByDepartment[department].push_back(athlete);
    }

    // 记录比赛结果
    void recordResults(string eventName, vector<pair<string, int>> results) {
        for (auto& event : sportEvents) {
            if (event.name == eventName) {
                for (auto& result : results) {
                    string athleteName = result.first;
                    int score = result.second;

                    for (auto& athlete : athletesByDepartment[event.gender]) {
                        if (athlete.name == athleteName) {
                            athlete.score += score;
                            break;
                        }
                    }
                }
                break;
            }
        }
    }

    // 查询个人成绩
    void queryIndividualScore(string athleteName) {
        for (auto& department : athletesByDepartment) {
            for (auto& athlete : department.second) {
                if (athlete.name == athleteName) {
                    cout << "姓名:" << athlete.name << endl;
                    cout << "性别:" << athlete.gender << endl;
                    cout << "院系:" << athlete.department << endl;
                    cout << "总分:" << athlete.score << endl;
                    return;
                }
            }
        }

        cout << "找不到该运动员的信息。" << endl;
    }

    // 查询院系成绩
    void queryDepartmentScore(string department) {
        if (athletesByDepartment.find(department) == athletesByDepartment.end()) {
            cout << "找不到该院系的信息。" << endl;
            return;
        }

        int totalScore = 0;
        for (auto& athlete : athletesByDepartment[department]) {
            totalScore += athlete.score;
        }

        cout << "院系:" << department << endl;
        cout << "总分:" << totalScore << endl;
    }

    // 生成团体总分报表
    void generateTeamScoreReport() {
        map<string, int> departmentScores;  // 各院系总分

        // 计算各个院系的总分
        for (auto& department : athletesByDepartment) {
            int totalScore = 0;
            for (auto& athlete : department.second) {
                totalScore += athlete.score;
            }
            departmentScores[department.first] = totalScore;
        }

        // 输出团体总分报表
        cout << "团体总分报表:" << endl;
        for (auto& department : departmentScores) {
            cout << "院系:" << department.first << ",总分:" << department.second << endl;
        }
    }
};

int main() {
    SportsManagementSystem system;

    // 初始化输入
    int N, M, W;
    cout << "请输入参赛院系总数:";
    cin >> N;
    cout << "请输入男子竞赛项目数:";
    cin >> M;
    cout << "请输入女子竞赛项目数:";
    cin >> W;

    // 创建运动项目
    cout << endl << "创建运动项目:" << endl;
    for (int i = 0; i < M; i++) {
        string name = "男子项目" + to_string(i + 1);
        system.createSportEvent(name, "男子组");
        cout << "已创建男子项目:" << name << endl;
    }
    for (int i = 0; i < W; i++) {
        string name = "女子项目" + to_string(i + 1);
        system.createSportEvent(name, "女子组");
        cout << "已创建女子项目:" << name << endl;
    }

    // 运动员报名参赛
    cout << endl << "运动员报名参赛:" << endl;
    for (int i = 0; i < N; i++) {
        string name, gender, department;
        cout << "请输入第" << i + 1 << "位运动员的姓名:";
        cin >> name;
        cout << "请输入第" << i + 1 << "位运动员的性别(男/女):";
        cin >> gender;
        cout << "请输入第" << i + 1 << "位运动员的院系:";
        cin >> department;

        system.registerAthlete(name, gender, department);
        cout << "已完成报名:" << name << ",院系:" << department << ",性别:" << gender << endl;
    }

    // 记录比赛结果
    cout << endl << "记录比赛结果:" << endl;
    for (auto& event : system.sportEvents) {
        string eventName = event.name;
        vector<pair<string, int>> results;
        cout << "请输入" << eventName << "的获奖运动员信息(姓名 成绩):" << endl;
        for (int i = 0; i < 5; i++) {
            string name;
            int score;
            cout << "第" << i + 1 << "名:";
            cin >> name >> score;
            results.push_back(make_pair(name, score));
        }
        system.recordResults(eventName, results);
    }

    // 查询个人成绩
    cout << endl << "查询个人成绩:" << endl;
    string queryName;
    cout << "请输入要查询的运动员姓名:";
    cin >> queryName;
    system.queryIndividualScore(queryName);

    // 查询院系成绩
    cout << endl << "查询院系成绩:" << endl;
    string queryDepartment;
    cout << "请输入要查询的院系名称:";
    cin >> queryDepartment;
    system.queryDepartmentScore(queryDepartment);

    // 生成团体总分报表
    cout << endl;
    system.generateTeamScoreReport();

    return 0;
}


首先,我们需要实现一个Project类来表示运动项目,包括项目名称、参赛人数等信息:

public class Project {
    private String name; // 运动项目名称
    private int maleNum; // 男子参赛人数
    private int femaleNum; // 女子参赛人数

    public Project(String name, int maleNum, int femaleNum) {
        this.name = name;
        this.maleNum = maleNum;
        this.femaleNum = femaleNum;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getMaleNum() {
        return maleNum;
    }

    public void setMaleNum(int maleNum) {
        this.maleNum = maleNum;
    }

    public int getFemaleNum() {
        return femaleNum;
    }

    public void setFemaleNum(int femaleNum) {
        this.femaleNum = femaleNum;
    }

    // ...
}

接着,我们需要实现一个Athlete类来表示运动员,包括姓名、年龄、所属院系、报名的比赛项目及其组别等信息:

public class Athlete {
    private String name; // 运动员姓名
    private int age; // 运动员年龄
    private String department; // 运动员所属院系
    private String project; // 运动员报名的比赛项目
    private String group; // 运动员所属的组别(男子组/女子组)

    public Athlete(String name, int age, String department, String project, String group) {
        this.name = name;
        this.age = age;
        this.department = department;
        this.project = project;
        this.group = group;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }

    public String getDepartment() {
        return department;
    }

    public void setDepartment(String department) {
        this.department = department;
    }

    public String getProject() {
        return project;
    }

    public void setProject(String project) {
        this.project = project;
    }

    public String getGroup() {
        return group;
    }

    public void setGroup(String group) {
        this.group = group;
    }

    // ...
}

然后,我们需要实现一个Result类来表示比赛结果,包括比赛项目、组别和获奖者等信息:

public class Result {
    private String project; // 比赛项目
    private String group; // 比赛组别
    private List<Athlete> winners; // 获奖者列表

    public Result(String project, String group, List<Athlete> winners) {
        this.project = project;
        this.group = group;
        this.winners = winners;
    }

    public String getProject() {
        return project;
    }

    public void setProject(String project) {
        this.project = project;
    }

    public String getGroup() {
        return group;
    }

    public void setGroup(String group) {
        this.group = group;
    }

    public List<Athlete> getWinners() {
        return winners;
    }

    public void setWinners(List<Athlete> winners) {
        this.winners = winners;
    }

    // ...
}

接着,我们需要实现一个SportsMeeting类来管理整个运动会,包括创建比赛项目、运动员报名、比赛成绩录入和查看等功能:

public class SportsMeeting {
    private List<Project> projects; // 运动项目列表
    private List<Athlete> athletes; // 运动员列表
    private List<Result> results; // 比赛结果列表

    public SportsMeeting() {
        projects = new ArrayList<>();
        athletes = new ArrayList<>();
        results = new ArrayList<>();
    }

    // 管理功能:创建比赛项目
    public void createProject(String name, int maleNum, int femaleNum) {
        projects.add(new Project(name, maleNum, femaleNum));
    }

    // 管理功能:运动员报名
    public void enroll(Athlete athlete) {
        athletes.add(athlete);
    }

    // 管理功能:录入比赛成绩
    public void enterResult(String project, String group, List<String> winnerNames) {
        // 根据比赛项目和组别查找比赛结果
        Result result = null;
        for (Result r : results) {
            if (r.getProject().equals(project) && r.getGroup().equals(group)) {
                result = r;
                break;
            }
        }

        if (result == null) {
            // 如果该比赛项目和组别的比赛结果不存在,则创建之
            result = new Result(project, group, new ArrayList<>());
            results.add(result);
        }

        // 根据获奖者姓名查找运动员,并将其添加到获奖者列表中
        List<Athlete> winners = new ArrayList<>();
        for (String name : winnerNames) {
            Athlete winner = null;
            for (Athlete a : athletes) {
                if (a.getName().equals(name)) {
                    winner = a;
                    break;
                }
            }
            winners.add(winner);
        }

        // 更新比赛结果
        result.setWinners(winners);
    }

    // 查询功能:按院系查询所有成绩
    public Map<String, Integer> getDepartmentScores() {
        Map<String, Integer> departmentScores = new HashMap<>();
        for (Athlete athlete : athletes) {
            String department = athlete.getDepartment();
            int score = calculateScore(athlete.getProject(), athlete.getGroup());
            departmentScores.put(department, departmentScores.getOrDefault(department, 0) + score);
        }
        return departmentScores;
    }

    // 查询功能:按项目和组别查询获奖名单
    public List<Athlete> getWinners(String project, String group) {
        // 根据比赛项目和组别查找比赛结果
        Result result = null;
        for (Result r : results) {
            if (r.getProject().equals(project) && r.getGroup().equals(group)) {
                result = r;
                break;
            }
        }

        if (result == null) {
            return new ArrayList<>(); // 如果比赛结果不存在,则返回空列表
        } else {
            return result.getWinners();
        }
    }

    // 计算某个比赛项目在某个组别中的总分
    private int calculateScore(String project, String group) {
        // 根据比赛项目和组别查找比赛结果
        Result result = null;
        for (Result r : results) {
            if (r.getProject().equals(project) && r.getGroup().equals(group)) {
                result = r;
                break;
            }
        }

        if (result == null) {
            return 0; // 如果比赛结果不存在,则返回0分
        }

        // 根据获奖名次计算总分
        int score = 0;
        List<Athlete> winners = result.getWinners();
        for (int i = 0; i < winners.size(); i++) {
            if (i == 0) {
                score += 7; // 第1名得7分
            } else if (i == 1) {
                score += 5; // 第2名得5分
            } else if (i == 2) {
                score += 3; // 第3名得3分
            } else if (i == 3) {
                score += 2; // 第4名得2分
            } else if (i == 4) {
                score += 1; // 第5名得1分
            }
        }

        return score;
    }
}


添加提醒用户填写比赛结果和查询成绩报表的代码:

import java.util.*;

public class Main {
    public static void main(String[] args) {
        // 初始化比赛项目
        SportsMeeting sm = new SportsMeeting();
        sm.createProject("乒乓球", 16, 16);
        sm.createProject("跳远", 20, 20);
        sm.createProject("跳高", 20, 20);
        sm.createProject("短跑", 20, 20);
        sm.createProject("接力赛", 12, 12);

        // 运动员报名
        sm.enroll(new Athlete("张三", 20, "计算机科学与技术", "乒乓球", "男子组"));
        sm.enroll(new Athlete("李四", 22, "软件工程", "乒乓球", "男子组"));
        sm.enroll(new Athlete("王五", 19, "信息安全", "跳远", "男子组"));
        sm.enroll(new Athlete("赵六", 21, "计算机科学与技术", "跳远", "男子组"));
        sm.enroll(new Athlete("钱七", 20, "计算机科学与技术", "跳高", "男子组"));
        sm.enroll(new Athlete("孙八", 22, "软件工程", "短跑", "男子组"));
        sm.enroll(new Athlete("周九", 19, "信息安全", "短跑", "女子组"));
        sm.enroll(new Athlete("吴十", 21, "计算机科学与技术", "接力赛", "男子组"));
        // ...

        // 提醒录入比赛成绩
        Scanner scanner = new Scanner(System.in);
        System.out.println("运动员报名已经结束,现在可以录入比赛成绩。请按下面的格式输入各项目获奖运动员的信息(用逗号分隔):");
        System.out.println("比赛项目,组别,第1名姓名,第2名姓名,第3名姓名,第4名姓名,第5名姓名,如果没有获奖者则不用输入姓名");
        String input = scanner.nextLine();
        String[] tokens = input.split(",");
        String project = tokens[0];
        String group = tokens[1];
        List<String> winners = new ArrayList<>();
        for (int i = 2; i < tokens.length; i++) {
            if (!tokens[i].isEmpty()) {
                winners.add(tokens[i]);
            }
        }
        sm.enterResult(project, group, winners);

        // 查询比赛成绩报表
        System.out.println("请选择查询类型:");
        System.out.println("1. 按院系查询所有成绩");
        System.out.println("2. 按项目和组别查询获奖名单");
        int choice = scanner.nextInt();
        scanner.nextLine(); // 读取多余的换行符

        if (choice == 1) {
            // 按院系查询所有成绩
            Map<String, Integer> departmentScores = sm.getDepartmentScores();
            System.out.println("各院系得分如下:");
            for (Map.Entry<String, Integer> entry : departmentScores.entrySet()) {
                System.out.println(entry.getKey() + ": " + entry.getValue() + " 分");
            }
        } else if (choice == 2) {
            // 按项目和组别查询获奖名单
            System.out.println("请输入比赛项目名称:");
            String project1 = scanner.nextLine();
            System.out.println("请输入比赛组别(男子组/女子组):");
            String group1 = scanner.nextLine();
            List<Athlete> winners1 = sm.getWinners(project1, group1);
            if (winners1.isEmpty()) {
                System.out.println("该比赛项目和组别的比赛结果不存在");
            } else {
                System.out.println("获奖名单如下:");
                for (int i = 0; i < winners1.size(); i++) {
                    System.out.println("第 " + (i + 1) + " 名:" + winners1.get(i).getName());
                }
            }
        }
    }
}

现在用户可以按照提示输入各项目获奖运动员的信息,并查询各个院系或个人的比赛成绩。如果比赛结果不存在,程序会给出相应的提示。


#include <iostream>
#include <string>
#include <vector>
#include <map>

using namespace std;

class SportEvent {
public:
    SportEvent(string name, string category) : name(name), category(category) {}

    void addParticipant(string participant) {
        participants.push_back(participant);
    }

    vector<string> getParticipants() {
        return participants;
    }

    string getName() {
        return name;
    }

private:
    string name;
    string category;
    vector<string> participants;
};

class Participant {
public:
    Participant(string name, string department) : name(name), department(department) {}

    void addScore(string eventName, int score) {
        scores[eventName] = score;
    }

    map<string, int> getScores() {
        return scores;
    }

    int getTotalScore() {
        int totalScore = 0;
        for (auto& pair : scores) {
            totalScore += pair.second;
        }
        return totalScore;
    }

    string getName() {
        return name;
    }

    string getDepartment() {
        return department;
    }

private:
    string name;
    string department;
    map<string, int> scores;
};

class SportsManagementSystem {
public:
    void createEvent(string name, string category) {
        SportEvent event(name, category);
        events.push_back(event);
    }

    void registerParticipant(string name, string department, string eventName) {
        Participant participant(name, department);
        SportEvent* event = findEvent(eventName);
        if (event) {
            event->addParticipant(name);
        }
        else {
            cout << "Invalid event name." << endl;
        }
    }

    void recordScores(string eventName) {
        SportEvent* event = findEvent(eventName);
        if (event) {
            vector<string> participants = event->getParticipants();
            for (auto& participant : participants) {
                int score;
                cout << "Enter score for " << participant << ": ";
                cin >> score;
                participantsScores[participant][eventName] = score;
            }
        }
        else {
            cout << "Invalid event name." << endl;
        }
    }

    void displayParticipantScores(string participantName) {
        if (participantsScores.count(participantName) > 0) {
            map<string, int> scores = participantsScores[participantName];
            cout << "Scores for " << participantName << ":" << endl;
            for (auto& pair : scores) {
                cout << pair.first << ": " << pair.second << endl;
            }
        }
        else {
            cout << "Participant not found." << endl;
        }
    }

    void displayEventParticipants(string eventName) {
        SportEvent* event = findEvent(eventName);
        if (event) {
            vector<string> participants = event->getParticipants();
            cout << "Participants in " << eventName << ":" << endl;
            for (auto& participant : participants) {
                cout << participant << endl;
            }
        }
        else {
            cout << "Invalid event name." << endl;
        }
    }

private:
    vector<SportEvent> events;
    map<string, map<string, int>> participantsScores;

    SportEvent* findEvent(string eventName) {
        for (auto& event : events) {
            if (event.getName() == eventName) {
                return &event;
            }
        }
        return nullptr;
    }
};

int main() {
    SportsManagementSystem system;
    system.createEvent("乒乓球", "男子组");
    system.createEvent("跳远", "女子组");
    system.registerParticipant("Alice", "计算机系", "乒乓球");
    system.registerParticipant("Bob", "体育系", "乒乓球");
    system.registerParticipant("Cindy", "计算机系", "跳远");
    system.recordScores("乒乓球");
    system.recordScores("跳远");

    system.displayParticipantScores("Alice");
    system.displayEventParticipants("乒乓球");

    return 0;
}
  • 这个问题的回答你可以参考下: https://ask.csdn.net/questions/7451811
  • 以下回答由chatgpt基于相关博客总结生成:

    对于优化学生运动会管理系统的代码,以下是一些可能的建议和方案:

    1. 使用面向对象的设计模式,定义合适的类和对象,可以更好地组织代码并且提高代码可读性和可维护性。 例如,可以定义一个Project类,包含项目名称、组别、参加人数、成绩等信息,以及相应的方法用于添加/查询/修改项目信息等操作。同样,还可以定义一个Player类用于管理运动员报名和成绩录入等操作。 代码示例:
    class Project:
        def __init__(self, name, group):
            self.name = name
            self.group = group
            self.players = []
            self.scores = []
    
        def add_player(self, player):
            self.players.append(player)
    
        def add_score(self, score):
            self.scores.append(score)
    
        def get_top_players(self, num=5):
            sorted_index = sorted(range(len(self.scores)), key=lambda k: -self.scores[k])[:num]
            return [(self.players[i], self.scores[i]) for i in sorted_index]
    
    class Player:
        def __init__(self, name, gender, department):
            self.name = name
            self.gender = gender
            self.department = department
    
    1. 精简代码,尽可能避免冗余和重复代码。例如,可以封装一些常用的功能函数,如读取用户输入、格式化输出信息等。 代码示例:
    def get_input(message, check_func=None):
        """
        Get user input from console, with optional check function to validate input.
        """
        while True:
            try:
                value = input(message)
                if not check_func or check_func(value):
                    return value
            except Exception as e:
                print("Error: ", e)
    
    def print_table(data, headers):
        """
        Print data in table format with headers.
        """
        col_widths = [max(len(str(row[i])) for row in data) for i in range(len(headers))]
        format_str = " | ".join("%%-%ds" % width for width in col_widths)
        print(format_str % tuple(headers))
        print("-" * sum(col_widths + [len(headers) * 3 - 1]))
        for row in data:
            print(format_str % tuple(row))
    
    1. 使用适当的数据结构和算法,可以提高程序的性能和效率。例如,可以使用哈希表来快速查找项目或者运动员信息,使用堆排序来选择前五名运动员等。 代码示例:

    ```python class SportsManager: def init(self): self.projects = {} self.players = {}

    def create_project(self, name, group):
        project = Project(name, group)
        self.projects[name] = project
        return project
    
    def create_player(self, name, gender, department):
        player = Player(name, gender, department)
        self.players[name] = player
        return player
    
    def enroll_player(self, project_name, player_name):
        project = self.projects.get(project_name)
        player = self.players.get(player_name)
        if not project or not player:
            return False
        project.add_player(player)
        return True
    
    def submit_score(self, project_name, player_name, score):
        project = self.projects.get(project_name)
        if not project:
            return False
        player_index = next((i for i, p in enumerate(project.players) if p.name == player_name), None)
        if player_index is None:
            return False
    

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

#define MAX_DEPT_NUM 100
#define MAX_EVENT_NUM 20
#define MAX_NAME_LEN 20

// 运动员信息
typedef struct {
    char name[MAX_NAME_LEN]; // 姓名
    int score; // 成绩
} Athlete;

// 运动项目信息
typedef struct {
    char name[MAX_NAME_LEN]; // 名称
    int athlete_num; // 运动员人数
    Athlete athlete[10]; // 运动员信息
} Event;

// 院系信息
typedef struct {
    char name[MAX_NAME_LEN]; // 名称
    int score; // 总分
    Event event[MAX_EVENT_NUM]; // 运动项目信息
} Department;

int main() {
    int N, M, W; // 参赛院系总数、男子竞赛项目数、女子竞赛项目数
    Department dept[MAX_DEPT_NUM]; // 院系信息

    // 初始化
    printf("请输入参赛院系总数、男子竞赛项目数和女子竞赛项目数:\\n");
    scanf("%d%d%d", &N, &M, &W);
    for (int i = 0; i < N; i++) {
        printf("请输入第%d个参赛院系的名称:\\n", i + 1);
        scanf("%s", dept[i].name);
        dept[i].score = 0;
        for (int j = 0; j < M + W; j++) {
            printf("请输入第%d个竞赛项目的名称:\\n", j + 1);
            scanf("%s", dept[i].event[j].name);
            dept[i].event[j].athlete_num = 0;
        }
    }

    // 运动员报名
    printf("请输入运动员姓名、所属院系、参赛项目和组别(男/女):\\n");
    char name[MAX_NAME_LEN], dept_name[MAX_NAME_LEN], event_name[MAX_NAME_LEN], group[MAX_NAME_LEN];
    while (scanf("%s%s%s%s", name, dept_name, event_name, group) != EOF) {
        // 查找院系和竞赛项目
        int dept_index = -1, event_index = -1;
        for (int i = 0; i < N; i++) {
            if (strcmp(dept_name, dept[i].name) == 0) {
                dept_index = i;
                break;
            }
        }
        for (int i = 0; i < M + W; i++) {
            if (strcmp(event_name, dept[dept_index].event[i].name) == 0) {
                event_index = i;
                break;
            }
        }
        if (dept_index == -1 || event_index == -1) {
            printf("错误:未找到指定的院系或竞赛项目!\\n");
            continue;
        }

        // 添加运动员信息
        Athlete athlete;
        strcpy(athlete.name, name);
        athlete.score = 0;
        dept[dept_index].event[event_index].athlete[dept[dept_index].event[event_index].athlete_num] = athlete;
        dept[dept_index].event[event_index].athlete_num++;
        printf("添加成功!\\n");
    }

    // 输入比赛结果
    printf("请输入各个项目的获奖运动员信息:\\n");
    for (int i = 0; i < M + W; i++) {
        printf("请输入第%d个竞赛项目的名称:\\n", i + 1);
        scanf("%s", event_name);
        int event_index = -1;
        for (int j = 0; j < N; j++) {
            for (int k = 0; k < M + W; k++) {
                if (strcmp(event_name, dept[j].event[k].name) == 0) {
                    event_index = k;
                    break;
                }
            }
            if (event_index != -1) {
                break;
            }
        }
        if (event_index == -1) {
            printf("错误:未找到指定的竞赛项目!\\n");
            continue;
        }
        printf("请输入第%d个竞赛项目的前5名成绩:\\n", i + 1);
        for (int j = 0; j < 5; j++) {
            printf("请输入第%d名运动员的姓名和成绩:\\n", j + 1);
            scanf("%s%d", name, &dept[0].event[event_index].athlete[j].score);
        }
    }

    // 计算院系总分
    for (int i = 0; i < N; i++) {
        for (int j = 0; j < M + W; j++) {
            int count = dept[i].event[j].athlete_num < 5 ? dept[i].event[j].athlete_num : 5;
            for (int k = 0; k < count; k++) {
                int score = 0;
                switch (k) {
                    case 0:
                        score = 7;
                        break;
                    case 1:
                        score = 5;
                        break;
                    case 2:
                        score = 3;
                        break;
                    case 3:
                        score = 2;
                        break;
                    case 4:
                        score = 1;
                        break;
                }
                dept[i].event[j].athlete[k].score *= score;
                dept[i].score += dept[i].event[j].athlete[k].score;
            }
        }
    }

    // 生成团体总分报表
    printf("团体总分报表:\\n");
    for (int i = 0; i < N; i++) {
        printf("%s:%d分\\n", dept[i].name, dept[i].score);
    }

    // 查询院系比赛成绩
    printf("请输入要查询的院系名称:\\n");
    scanf("%s", dept_name);
    int dept_index = -1;
    for (int i = 0; i < N; i++) {
        if (strcmp(dept_name, dept[i].name) == 0) {

C语言 学生运动会的管理系统


//
//   created by stu_kk on 2022/05/01
//
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define L sizeof(ID)
#define FORMAT "\t\t\t%-12s%-\t\t%-15s%-\t\t%-15s%-\t\t%-60s"
#define DATA ids[i].name, ids[i].xy, ids[i].xm,ids[i].score
int n;
int i = 0;
int j = 0;
int c;
int k;
FILE *p; //定义指向FILE类型文件的指针变量
char name[12];
typedef struct
{
    char name[12];    //姓名
    char xy[15];    //学院 
    char xm[15];    //项目 
    char score[60]; //成绩
} ID;                //声明新的类型名ID 代表上面结构体类型
ID ids[100];
void menu() //菜单
{
    system("cls");
    printf("\n\n\n");
    printf("\t\t\t\t|------------------------------------------------------|\n");
    printf("\t\t\t\t|------------------------------------------------------|\n");
    printf("\t\t\t\t|                                                      |\n");
    printf("\t\t\t\t|                校运会信息管理系统                    |\n");
    printf("\t\t\t\t|                                                      |\n");
    printf("\t\t\t\t|     1.录入运动员信息         2.查询运动员信息        |\n");
    printf("\t\t\t\t|                                                      |\n");
    printf("\t\t\t\t|     3.修改运动员信息         4.删除运动员信息        |\n");
    printf("\t\t\t\t|                                                      |\n");
    printf("\t\t\t\t|     5.显示所有信息           6.查询单一项目信息      |\n");
    printf("\t\t\t\t|                                                      |\n");
    printf("\t\t\t\t|     7.查询单一学院信息       8.项目表                |\n");
    printf("\t\t\t\t|                                                      |\n");
    printf("\t\t\t\t|     9.查看秩序册             0.退出系统              |\n");
    printf("\t\t\t\t|                                                      |\n");
    printf("\t\t\t\t|------------------------------------------------------|\n");
    printf("\t\t\t\t|------------------------------------------------------|\n");
    printf("\t\t\t\t|请在(0-9)选择要进行的操作!\n"); //菜单的主页面
}
 
void all() //全部运动员信息展示
{
    system("cls"); //清屏
    printf("\n\n\n\n");
    p = fopen("data.txt", "rb"); //打开文件并将fopen函数的返回值赋给指针变量p
    j = 0;
    while (!feof(p))                      //判断p指向的文件是否结束
        if (fread(&ids[j], L, 1, p) == 1) //将p指向的文件中读入结构体数组ids的一个元素 每次读入一个 则读入成功 其返回值为1
            j++;                          //每读一个 j就加1
    fclose(p);                              //把p指向的文件关闭 以后p不再指向该文件
    if (j == 0)
    {
        printf("\t\t\t\t目前没有运动员信息\n\t\t\t");
        system("pause");
        return;
    }
    printf("\t\t\t姓名\t\t\t学院\t\t\t项目\t\t\t成绩\n");
    for (i = 0; i < j; i++) //输出运动员信息
    {
        printf(FORMAT, DATA);
        printf("\n");
    }
    printf("\t\t\t输入任意键返回主界面\n\t");
    system("pause");
}
 
void input()
{
    system("cls"); //清屏
    printf("\n\n\n");
    if ((p = fopen("data.txt", "a+")) == NULL) //打开文件,先检查是否有错,有错则输出无法打开文件
    {
        printf("\t\t\t\t\t无法打开文件\n\t\t\t\t\t");
        system("pause");
        return;
    }
    while (!feof(p)) //判断p指向的文件是否结束
    {
        if (fread(&ids[j], L, 1, p) == 1) //将p指向的文件中读入结构体数组ids的一个元素 每次读入一个 则读入成功 其返回值为1
            j++;
    }
    fclose(p); //把p指向的文件关闭 以后p不再指向该文件
    if (j == 0)
        printf("\t\t\t\t\t目前没有运动员\n");
    else
    {
        system("cls"); //清屏
        printf("\n\n\n\n");
        all();
    }
    if ((p = fopen("data.txt", "wb")) == NULL) //打开文件,先检查是否有错,有错则输出无法打开文件,p指向该文件
    {
        printf("\t\t\t\t\t文件无法打开\n\t\t\t\t\t");
        system("pause");
        return;
    }
    for (i = 0; i < j; i++) //建立运动员信息
        fwrite(&ids[i], L, 1, p);
    printf("\t\t\t\t\t输入1开始建立运动员信息 输入0结束\n\t\t\t\t\t");
    scanf("%d", &c);
    while (c)
    {
        printf("\t\t\t\t\t输入运动员姓名\n\t\t\t\t\t");
        scanf("%s", &ids[j].name);
        for (i = 0; i < j; i++)
            if (strcmp(ids[j].name, ids[i].name) == 0)
            {
                printf("\t\t\t\t\t该运动员已存在\n\t\t\t\t\t");
                system("pause");
                fclose(p);
                return;
            }
        printf("\t\t\t\t\t学院:\n\t\t\t\t\t");
        scanf("%s", &ids[j].xy);
        printf("\t\t\t\t\t项目:\n\t\t\t\t\t");
        scanf("%s", &ids[j].xm);
        printf("\t\t\t\t\t成绩:\n\t\t\t\t\t");
        scanf("%s", &ids[j].score);
        if (fwrite(&ids[j], L, 1, p) != 1)
        {
            printf("\t\t\t\t\t写入失败\n\t\t\t\t\t");
            system("pause");
            return;
        }
        else
        {
            printf("\t\t\t\t\t运动员信息 %s 写入成功\n", &ids[j].name);
            j++;
        }
        printf("\t\t\t\t\t是否继续输入?输入1继续 输入0结束\n\t\t\t\t\t");
        scanf("%d", &c);
    }
    fclose(p);
    printf("\t\t\t\t\t已关闭文件\n");
    printf("\t\t\t\t\t任意键返回主界面\n\t\t\t\t\t");
    system("pause");
}
 
 
void search()
{
    system("cls");
    printf("\n\n\n\n");
    if ((p = fopen("data.txt", "rb")) == NULL)
    {
        printf("\t\t\t\t\t打开文件失败\n\t\t\t\t\t");
        system("pause");
        return;
    }
    while (!feof(p))
        if (fread(&ids[j], L, 1, p) == 1)
            j++;
    fclose(p);
    if (j == 0)
    {
        printf("\t\t\t\t\t目前没有运动员信息\n\t\t\t\t\t");
        system("pause");
        return;
    }
    printf("\t\t\t\t\t请输入要查找的运动员姓名\n\t\t\t\t\t");
    scanf("%s", name);
    for (i = 0; i < j; i++)
        if (strcmp(ids[i].name, name) == 0)
        {
            printf("\t\t\t\t\t已找到运动员\n");
            printf("\t\t\t\t\t是否显示此运动员? 输入1显示 输入0不显示\n\t\t\t\t\t");
            scanf("%d", &c);
            if (c)
            {
                printf("\t\t\t姓名\t\t\t学院\t\t\t项目\t\t\t成绩\t\t\t\t\n");
                printf(FORMAT, DATA);
            }
            break;
        }
    if (i == j)
        printf("\t\t\t\t\t未查询到该运动员\n");
    printf("\t\t\t\t\t任意键返回主页面\n\t\t\t\t\t");
    system("pause");
}
 
 
void updata()
{
    system("cls");
    printf("\n\n\n\n");
    if ((p = fopen("data.txt", "rb")) == NULL)
    {
        printf("\t\t\t\t\t无法打开文件\n\t\t\t\t\t");
        system("pause");
        return;
    }
    while (!feof(p))
    {
        if (fread(&ids[j], L, 1, p) == 1)
            j++;
    }
    if (j == 0)
    {
        printf("\t\t\t\t\t目前还没有运动员\n");
        fclose(p);
        return;
    }
    fclose(p);
    all();
    printf("\t\t\t\t\t输入你想修改的运动员信息\n");
    printf("\t\t\t\t\t姓名:");
    scanf("%s", name);
    for (i = 0; i < j; i++)
    {
        if (strcmp(name, ids[i].name) == 0)
        {
            printf("\t\t\t\t\t已找到该运动员,请修改\n");
            printf("\t\t\t\t\t姓名:");
            scanf("%s", &ids[i].name);
            printf("\t\t\t\t\t学院:");
            scanf("%s", &ids[i].xy);
            printf("\t\t\t\t\t项目:");
            scanf("%s", &ids[i].xm);
            printf("\t\t\t\t\t成绩:");
            scanf("%s", &ids[i].score);
            fopen("data.txt", "wb");
            for (c = 0; c < j; c++)
                if (fwrite(&ids[c], L, 1, p) != 1)
                {
                    printf("\t\t\t\t\t没有成功保存\n");
                    system("pause");
                    return;
                }
            printf("\t\t\t\t\t运动员 %s 的信息修改成功\n", name);
            fclose(p);
            break;
        }
    }
    if (i == j)
        printf("\t\t\t\t\t没有找到该运动员\n");
    printf("\t\t\t\t\t输入任意键返回主界面\n\t\t\t\t\t");
    system("pause");
}
void dlt()
{
    system("cls");
    printf("\n\n\n\n");
 
    if ((p = fopen("data.txt", "r+")) == NULL)
    {
        

这是一道题目,要求使用C语言编写一个学生运动会管理系统,支持运动项目创建、运动员报名、比赛结果输入和查询等功能。系统需要实现以下要求:

  1. 支持创建运动项目,包括但不限于乒乓球、跳远、跳高、短跑、接力赛。
  2. 运动项目分为男子组和女子组。
  3. 运动员需要通过系统进行报名,选择相应的项目和组别。
  4. 初始化输入包括参赛院系总数N、男子竞赛项目数M、女子竞赛项目数W。
  5. 各项目名次取法有如下几种:取前5名,每一名依次得分7.5.3.2.1。
  6. 程序会提醒用户填写比赛结果,输入各项目获奖运动员的信息。
  7. 所有信息记录完毕后,用户可以查询各个院系或个人的比赛成绩,生成团体总分报表,查看参赛院系信息、获奖运动员、比赛项目信息等。