首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計綜合問答

C語言實現學校運動會管理系統:數據結構設計與核心邏輯完整指南

     編輯:程式設計綜合問答

需求分析

  • 院系數N、男子項目M、女子項目W
  • 各項目前5名得分:7,5,3,2,1
  • 功能:錄入比賽結果、查詢院系/個人成績、查看院系/運動員/項目信息

核心數據結構設計


#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");
        }
    }
}

關鍵實現細節

  1. 輸入驗證:院系ID唯一、運動員歸屬院系存在、項目性別匹配
  2. 結果錄入:同一項目不可重複錄入前5名、運動員不可重複獲獎
  3. 查詢優化:建立「院系→運動員」「項目→結果」索引數組加速查詢
  4. 數據持久化:二進制文件 `fwrite`/`fread` 整個結構體數組

總結

運動會管理系統是經典的「多實體關聯+統計排名」問題。核心在於:**規範數據結構、分離業務邏輯、菜單驅動交互**。C語言雖無現代語言便利,但通過結構體數組+索引機制,完全能構建清晰高效的系統。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved