因为要答辩,尽量注释代码用途
题目:学生运动会管理系统
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;
}
对于优化学生运动会管理系统的代码,以下是一些可能的建议和方案:
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
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))
```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语言编写一个学生运动会管理系统,支持运动项目创建、运动员报名、比赛结果输入和查询等功能。系统需要实现以下要求: