這是一個經典的C語言課程設計題目:設計一個基於文件和鏈表的學生信息管理系統。核心需求包括:
students.txt。sxcj.txt 和 cxsj.txt。typedef struct STD {
char xh[12]; // 學號
char xm[12]; // 姓名
char sxcj[5]; // 數學成績
char cxsj[5]; // 程序設計成績
char zf[5]; // 總分
struct STD *next; // 後驅指針
struct STD *prev; // 前驅指針
} STD;
STD *head = NULL, *tail = NULL, *current = NULL; // 全局鏈表指針
loadData():程序啟動時從 students.txt 讀取數據,逐行解析創建節點,雙向鏈接,更新 head/tail。saveData():遍歷鏈表,將每個節點格式化寫入 students.txt(覆蓋模式)。addRecord())saveData()。deleteRecord())p->prev->next = p->next; p->next->prev = p->prev;。saveData()。sortRecords())qsort)。sxcj.txt/cxsj.txt)並顯示在屏幕上。queryRecord())int main() {
loadData(); // 啟動加載數據
int choice;
while (1) {
printMenu();
scanf("%d", &choice);
switch (choice) {
case 1: createNewDatabase(); break; // 清空鏈表和文件
case 2: addRecord(); break;
case 3: deleteRecord(); break;
case 4: sortRecords(); break;
case 5: queryRecord(); break;
case 6: saveData(); exit(0); // 退出前保存
default: printf("輸入錯誤,請重新選擇!\n");
}
}
return 0;
}
atoi/sprintf 轉換,防止緩衝區溢出。fclose,模式選擇 "r"/"w"/"a+" 需精確。head/tail 為空或單節點時的邊界條件。scanf 後殘留換行符,建議用 getchar() 吸收或改用 fgets + sscanf。這個大作業綜合考察了結構體、雙向鏈表、文件IO、排序算法、模塊化程序設計等C語言核心知識點。建議分階段實現:先跑通「鏈表增刪改查+文件存取」,再添加排序和菜單交互,最後完善異常處理和界面美化。參考答案中的代碼片段(雖不完整)提供了關鍵數據結構和部分邏輯思路,需自行補全成可編譯運行的完整程序。