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

數據結構課程設計:C語言學生管理系統(動態鏈表實現)

     編輯:關於C

寒假期間完成的數據結構課程設計,基於 C 語言實現學生信息管理系統,採用動態鏈表存儲數據,涉及文件持久化、多文件關聯(學生、課程、成績)、增刪改查、多條件查詢等核心功能,是鞏固 C 語言指針、結構體、文件操作與鏈表算法的綜合實踐。

系統需求

  1. 三個文件持久化存儲:Student.txt(學生基本信息)、Course.txt(課程信息)、SC.txt(學生成績),啟動加載,退出保存。
  2. 學生信息增、刪、改、查全功能。
  3. 支持多樣化查詢:全量、按學號、按姓名、模糊關鍵字、全部課程。
  4. 數據輸入合法性校驗(學號唯一、性別規範、成績範圍等)。

數據結構設計

typedef struct Course {
    int id;              // 課程編號
    char name[20];       // 課程名稱
    int credit;          // 學分
    int grade;           // 成績(僅在學生節點中使用)
    struct Course *next; // 下一門課程指針
} Course;

typedef struct Student {
    char num[10];        // 學號
    char name[16];       // 姓名
    char sex[10];        // 性別
    int age;             // 年齡
    char dept[20];       // 專業
    Course *headCourse;  // 該學生課程鏈表頭節點
    struct Student *next;// 下一個學生指針
} Student;

// 全局鏈表頭指針
Student *student = NULL;
Course *course = NULL;

核心模塊實現

1. 文件讀取與鏈表構建

  • Creat_Student():讀取 Student.txt,跳過標題行,逐行 fscanf 填充學生節點,初始化課程子鏈表頭節點。
  • Creat_Course():讀取 Course.txt 構建課程主鏈表。
  • Read_SC():讀取 SC.txt,通過學號查找學生、課程號查找課程,將課程信息(含成績)掛接到對應學生的課程鏈表尾部。

2. 查找輔助函數

Student* FindStudentByNum(char s[]); // 遍歷學生鏈表匹配學號
Course* FindCourseById(int n);        // 遍歷課程鏈表匹配 ID
Course* FindCourseByName(char name[]); // 遍歷匹配名稱
bool IsStudent(char num[]);            // 判斷學號是否已存在

3. 功能菜單系統

採用多級菜單結構:主菜單 → 二級菜單(添加/查詢/修改) → 具体操作函數。使用 system("cls") 清屏,getchar() 處理輸入緩衝,switch-case 分發命令。

4. 關鍵業務邏輯

  • 添加學生:檢查學號唯一、性別合法,尾插法插入學生鏈表。
  • 添加成績:輸入學號與課程名,查找課程庫確認課程存在,將成績節點插入學生課程鏈表。
  • 添加課程:檢查課程 ID/名稱唯一,尾插入課程主鏈表。
  • 多條件查詢:遍歷學生鏈表,strstr 實現模糊匹配,格式化輸出學生基本信息及課程成績。
  • 刪除學生:雙指針遍歷定位前驅節點,釋放該學生所有課程節點內存,再釋放學生節點本身。
  • 修改信息/成績:定位學生後直接修改結構體字段或遍歷課程鏈表更新成績。

5. 數據持久化寫回

void ReadBack() {
    FILE *stu = fopen("Student.txt", "w");
    FILE *cou = fopen("Course.txt", "w");
    FILE *sc  = fopen("SC.txt", "w");
    // 寫入標題行
    // 遍歷學生鏈表寫入 Student.txt
    // 遍歷每個學生的課程鏈表寫入 SC.txt
    // 遍歷課程主鏈表寫入 Course.txt
    fclose(stu); fclose(cou); fclose(sc);
}

運行截圖

主菜單界面 添加數據菜單 查詢結果展示 修改數據菜單

設計圖

系統流程圖 數據結構關係圖

完整源碼

完整代碼已包含在原文中,約 500 行,涵蓋所有上述模塊。關鍵點:

  • 使用 malloc/free 手動管理內存,注意配對防止洩漏。
  • 鏈表操作統一使用尾插法,簡化邏輯。
  • 文件讀寫採用格式化 I/O (fscanf/fprintf),注意字段分隔符一致性。
  • 菜單系統模塊化,每個功能獨立函數,便於維護擴展。

總結與反思

  • 收獲:鞏固了指針操作、鏈表增刪改查、文件持久化、模塊化程序設計;體會到「紙上得來終覺淺,絕知此事要躬行」。
  • 不足:算法直觀但冗長(如查找重複遍歷);三文件設計雖模擬外鍵關聯,但增加了讀寫複雜度;缺乏輸入異常處理(如非數字輸入導致死循環);代碼風格可進一步規範(縮進、命名、註釋)。
  • 優化方向:引入哈希表加速查找;合併文件或採用結構化存儲(SQLite);完善錯誤處理與用戶體驗;重構為更清晰的分層架構。
「2014,大二下學期,碼農之路還很長,繼續努力。」—— 作者原話,共勉。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved