寒假期間完成的數據結構課程設計,基於 C 語言實現學生信息管理系統,採用動態鏈表存儲數據,涉及文件持久化、多文件關聯(學生、課程、成績)、增刪改查、多條件查詢等核心功能,是鞏固 C 語言指針、結構體、文件操作與鏈表算法的綜合實踐。
Student.txt(學生基本信息)、Course.txt(課程信息)、SC.txt(學生成績),啟動加載,退出保存。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;
Creat_Student():讀取 Student.txt,跳過標題行,逐行 fscanf 填充學生節點,初始化課程子鏈表頭節點。Creat_Course():讀取 Course.txt 構建課程主鏈表。Read_SC():讀取 SC.txt,通過學號查找學生、課程號查找課程,將課程信息(含成績)掛接到對應學生的課程鏈表尾部。Student* FindStudentByNum(char s[]); // 遍歷學生鏈表匹配學號 Course* FindCourseById(int n); // 遍歷課程鏈表匹配 ID Course* FindCourseByName(char name[]); // 遍歷匹配名稱 bool IsStudent(char num[]); // 判斷學號是否已存在
採用多級菜單結構:主菜單 → 二級菜單(添加/查詢/修改) → 具体操作函數。使用 system("cls") 清屏,getchar() 處理輸入緩衝,switch-case 分發命令。
strstr 實現模糊匹配,格式化輸出學生基本信息及課程成績。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 手動管理內存,注意配對防止洩漏。fscanf/fprintf),注意字段分隔符一致性。「2014,大二下學期,碼農之路還很長,繼續努力。」—— 作者原話,共勉。