用C语言生成代码包含以下内容校际运动会管理系统 初始化输入:N-参赛学校总数,M-男子竞赛项目数,W-女子竞赛项目数 各项目名次取法有如下几种: 取前5名:第1名得分7,第2名得分5,第3名得分3,第4名得分2,第5名得分1; 取前3名:第1名得分5,第2名得分3,第3名得分2; 用户自定义:各名次权值由用户指定。 2.由程序提示用户填写比赛结果,输入各项目获奖运动员的信息。 3.所有信息记录完毕后,用户可以查询各个学校的比赛成绩,生成团体总分报表,查看参赛学校信息和比赛项目信息等。
时间: 2023-12-16 16:04:00 浏览: 98
以下是生成校际运动会管理系统的C语言代码:
```c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define MAX_SCHOOLS 50 // 参赛学校总数最大值
#define MAX_EVENTS 10 // 竞赛项目数最大值
#define MAX_ATHLETES 100 // 运动员数最大值
// 定义结构体:运动员信息
typedef struct {
char name[20]; // 姓名
int school_id; // 学校编号
int event_id; // 项目编号
int rank; // 名次
float score; // 成绩
} Athlete;
// 定义结构体:学校信息
typedef struct {
char name[20]; // 学校名称
float score; // 总分
} School;
// 定义结构体:项目信息
typedef struct {
char name[20]; // 项目名称
int method; // 取名次方法:1-前5名,2-前3名,3-用户自定义
float scores[5]; // 前5名得分或前3名得分
} Event;
int main() {
int N, M, W; // 参赛学校总数,男子竞赛项目数,女子竞赛项目数
int i, j, k, l; // 循环计数器
Athlete athletes[MAX_ATHLETES]; // 运动员数组
School schools[MAX_SCHOOLS]; // 学校数组
Event events[MAX_EVENTS]; // 项目数组
int athlete_count = 0; // 运动员数量
// 初始化输入
printf("请输入参赛学校总数、男子竞赛项目数、女子竞赛项目数:");
scanf("%d %d %d", &N, &M, &W);
// 初始化项目
for (i = 0; i < M + W; i++) {
printf("请输入第%d个项目名称:", i + 1);
scanf("%s", events[i].name);
printf("请选择第%d个项目取名次方法(1-前5名,2-前3名,3-用户自定义):", i + 1);
scanf("%d", &events[i].method);
if (events[i].method == 1) {
events[i].scores[0] = 7;
events[i].scores[1] = 5;
events[i].scores[2] = 3;
events[i].scores[3] = 2;
events[i].scores[4] = 1;
} else if (events[i].method == 2) {
events[i].scores[0] = 5;
events[i].scores[1] = 3;
events[i].scores[2] = 2;
} else if (events[i].method == 3) {
printf("请依次输入第%d个项目前5名得分:", i + 1);
for (j = 0; j < 5; j++) {
scanf("%f", &events[i].scores[j]);
}
}
}
// 输入比赛结果
printf("请输入比赛结果:\n");
for (i = 0; i < M + W; i++) {
printf("请输入第%d个项目的前%d名:\n", i + 1, events[i].method == 3 ? 5 : events[i].method);
for (j = 0; j < (events[i].method == 3 ? 5 : events[i].method); j++) {
printf("请输入第%d名运动员所在学校编号、姓名和成绩:", j + 1);
scanf("%d %s %f", &athletes[athlete_count].school_id, athletes[athlete_count].name, &athletes[athlete_count].score);
athletes[athlete_count].event_id = i;
athletes[athlete_count].rank = j + 1;
athlete_count++;
}
}
// 计算学校得分
for (i = 0; i < N; i++) {
schools[i].score = 0;
for (j = 0; j < M + W; j++) {
float score_sum = 0;
int count = 0;
for (k = 0; k < athlete_count; k++) {
if (athletes[k].school_id == i && athletes[k].event_id == j) {
count++;
if (athletes[k].rank <= (events[j].method == 3 ? 5 : events[j].method)) {
score_sum += events[j].scores[athletes[k].rank - 1];
}
}
}
if (count > 0) {
schools[i].score += score_sum / count;
}
}
}
// 查询功能
int option;
do {
printf("\n请选择操作:\n");
printf("1. 查询各个学校的比赛成绩\n");
printf("2. 生成团体总分报表\n");
printf("3. 查看参赛学校信息\n");
printf("4. 查看比赛项目信息\n");
printf("5. 退出\n");
printf("请选择:");
scanf("%d", &option);
switch (option) {
case 1: // 查询各个学校的比赛成绩
printf("学校编号\t学校名称\t总分\n");
for (i = 0; i < N; i++) {
printf("%d\t\t%s\t\t%.2f\n", i, schools[i].name, schools[i].score);
}
break;
case 2: // 生成团体总分报表
printf("团体总分报表如下:\n");
printf("学校名称");
for (i = 0; i < M + W; i++) {
printf("\t%s", events[i].name);
}
printf("\t总分\n");
for (i = 0; i < N; i++) {
printf("%s", schools[i].name);
float event_scores[MAX_EVENTS] = {0};
for (j = 0; j < M + W; j++) {
float score_sum = 0;
int count = 0;
for (k = 0; k < athlete_count; k++) {
if (athletes[k].school_id == i && athletes[k].event_id == j) {
count++;
if (athletes[k].rank <= (events[j].method == 3 ? 5 : events[j].method)) {
score_sum += events[j].scores[athletes[k].rank - 1];
}
}
}
if (count > 0) {
event_scores[j] = score_sum / count;
}
printf("\t%.2f", event_scores[j]);
schools[i].score += event_scores[j];
}
printf("\t%.2f\n", schools[i].score);
}
break;
case 3: // 查看参赛学校信息
printf("学校编号\t学校名称\n");
for (i = 0; i < N; i++) {
printf("%d\t\t%s\n", i, schools[i].name);
}
break;
case 4: // 查看比赛项目信息
printf("项目编号\t项目名称\t取名次方法\t得分\n");
for (i = 0; i < M + W; i++) {
printf("%d\t\t%s\t\t%d\t\t", i, events[i].name, events[i].method);
for (j = 0; j < (events[i].method == 3 ? 5 : events[i].method); j++) {
printf("%.2f ", events[i].scores[j]);
}
printf("\n");
}
break;
case 5: // 退出
break;
default: // 无效操作
printf("无效操作!\n");
break;
}
} while (option != 5);
return 0;
}
```
注意:以上代码仅为示例,仍有改进空间。