运动会管理系统
#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;
}