首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> 關於C語言

C語言課程設計實戰:學生學籍管理系統完整架構與源碼解析

     編輯:關於C語言

系統概覽

本系統是一個功能完整的控制台學生學籍管理系統,採用結構體數組+二進制文件存儲,實現了登錄驗證、增刪改查、數據持久化、分角色權限控制等核心功能。代碼結構清晰,模塊化程度高,適合作為 C 語言大作業或畢業設計參考。

核心數據結構

#define N 100  // 最大支持 100 名學生

struct Date {
    int year, month, day;
};

struct Student {
    char num[20];      // 學號
    char name[25];     // 姓名
    char sex[10];      // 性別
    struct Date birthday;
    int age;           // 年齡
    char addr[50];     // 籍貫
    char dept[50];     // 系別
    char major[30];    // 專業
    char classs[30];   // 班級
    char phone[20];    // 電話
} stu[N];

功能模塊架構

  1. 登錄系統:管理員(固定密碼)+ 普通用戶(姓名+密碼匹配學生記錄)
  2. 主菜單:7 大功能入口(登錄、插入、刪除、查找、修改、瀏覽、退出)
  3. 數據持久化:二進制文件 D:\file.txt,採用 fread/fwrite 整結構體讀寫
  4. 業務邏輯:插入、刪除、查找(姓名/學號)、修改(單字段/全字段)、瀏覽

關鍵函數深度解析

1. 登錄驗證 login()

void login() {
    // 管理員:密碼 "930322",掩碼顯示 '*'
    // 用戶:遍歷學生數組匹配姓名與密碼
    // 成功設置 flag=1,失敗提供重試/返回選項
}

亮點:使用 getch() 實現密碼掩碼輸入,角色分離清晰。

2. 文件加載 load()

int load() {
    FILE *fp = fopen("D:\\file.txt", "rb");
    if (!fp) return 0;
    int i;
    for (i = 0; !feof(fp); i++)  // 注意:feof 判斷在讀取後
        fread(&stu[i], sizeof(struct Student), 1, fp);
    fclose(fp);
    return i - 1;  // 修正 feof 多讀一次
}
⚠️ 經典陷阱:feof() 在讀取失敗後才置位,循環會多執行一次,需返回 i-1 或改用返回值判斷。

3. 數據保存 save()

void save(int n) {
    FILE *fp = fopen("D:\\file.txt", "wb");
    for (int i = 0; i < n; i++)
        if (stu[i].name[0] != '\0')  // 跳過已刪除記錄(標記為空串)
            fwrite(&stu[i], sizeof(struct Student), 1, fp);
    fclose(fp);
}

4. 刪除邏輯 deleter()

採用「標記刪除 + 數組前移 + 重寫文件」策略:

stu[k].name[0] = '\0';  // 標記刪除
save(n);                // 重寫整個文件

5. 修改功能 modify()

支持單字段修改(11 個選項)或全字段重錄,修改前備份原數據,確認後才持久化。

代碼亮點與不足

優點不足與改進
✅ 結構完整,功能齊全⚠️ 硬編碼文件路徑 D:\file.txt
✅ 二進制讀寫效率高⚠️ gets() 不安全,應用 fgets()
✅ 角色權限分離⚠️ 密碼明文存儲,無加密
✅ 交互邏輯健壯(重試機制)⚠️ 無輸入驗證(學號唯一性、日期合法性等)
✅ 代碼模塊化清晰💡 建議:動態內存分配、索引優化、文本/CSV 導出

編譯運行建議

  • 編譯器:GCC / MSVC / Dev-C++ 均可
  • 需鏈接 conio.h(getch()、clrscr()),Linux 下可用 termios 替代
  • 首次運行需創建 D:\file.txt 或修改路徑為當前目錄
  • 管理員默認密碼:930322

擴展方向

  • 引入鏈表/動態數組突破 100 人限制
  • 添加數據校驗(學號格式、手機號正則、日期合法性)
  • 實現密碼哈希存儲(MD5/SHA256)
  • 增加統計報表:平均分、及格率、專業分布
  • 移植到 ncurses 實現文本界面(TUI)
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved