#define MAX_DEPT 50
#define MAX_ATHLETE 500
#define MAX_EVENT 100
#define MAX_RANK 5
typedef struct {
char id[20];
char name[30];
char gender; // 'M'/'F'
int deptIndex; // 院系索引
} Athlete;
typedef struct {
char id[20];
char name[30];
char gender; // 'M'/'F'
int type; // 0-徑賽 1-田賽
} Event;
typedef struct {
int eventIndex;
int rank; // 1-5
int athleteIndex;
} Result;
typedef struct {
char id[20];
char name[50];
int athleteCount;
int totalScore;
} Dept;
// 全局數據存儲
Dept depts[MAX_DEPT];
Athlete athletes[MAX_ATHLETE];
Event events[MAX_EVENT];
Result results[MAX_EVENT * MAX_RANK * 2]; // 男女項目
int deptCnt=0, athleteCnt=0, eventCnt=0, resultCnt=0;
int scoreTable[6] = {0, 7, 5, 3, 2, 1}; // 索引即名次
void calculateScores() {
// 重置院系分數
for (int i=0; irank >= 1 && r->rank <= 5) {
int score = scoreTable[r->rank];
int deptIdx = athletes[r->athleteIndex].deptIndex;
depts[deptIdx].totalScore += score;
}
}
}
void printDeptRanking() {
// 簡單冒泡排序(數據量小)
for (int i=0; i
void menu() {
printf("\n=== 學校運動會管理系統 ===\n");
printf("1. 錄入院系信息\n");
printf("2. 錄入運動員信息\n");
printf("3. 錄入比賽項目\n");
printf("4. 錄入比賽結果\n");
printf("5. 查詢院系排名\n");
printf("6. 查詢運動員成績\n");
printf("7. 查看項目信息\n");
printf("0. 退出系統\n");
printf("請選擇: ");
}
int main() {
loadData(); // 可選:從文件加載
int choice;
while (1) {
menu();
scanf("%d", &choice);
switch (choice) {
case 1: inputDept(); break;
case 2: inputAthlete(); break;
case 3: inputEvent(); break;
case 4: inputResult(); break;
case 5: calculateScores(); printDeptRanking(); break;
case 6: queryAthlete(); break;
case 7: printEvents(); break;
case 0: saveData(); return 0; // 可選:保存到文件
default: printf("無效選項!\n");
}
}
}
運動會管理系統是經典的「多實體關聯+統計排名」問題。核心在於:**規範數據結構、分離業務邏輯、菜單驅動交互**。C語言雖無現代語言便利,但通過結構體數組+索引機制,完全能構建清晰高效的系統。