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

C++學生成績管理系統課程設計:菜單驅動、鏈表存儲與功能模塊化實現

     編輯:程式設計綜合問答

需求分析

管理 10 位學生成績,功能:輸入、顯示、查找、最高分、插入、排序、退出。界面為多級菜單確認機制。

數據結構設計

struct Student {
    int id;           // 學號/序號
    char name[20];    // 姓名
    float score;      // 成績
    Student* next;    // 鏈表指針
};

class GradeSystem {
    Student* head;    // 鏈表頭
    int count;        // 當前節點數
    // 功能方法...
};

核心功能實現框架

菜單驅動主循環

void run() {
    while (true) {
        printMainMenu();           // 1.輸入 2.顯示 3.查找 4.最高 5.插入 6.排序 0.退出
        int choice = getChoice();
        if (choice == 0) break;
        
        if (!confirmChoice(choice)) continue; // 二級確認菜單
        
        switch (choice) {
            case 1: inputScores(); break;
            case 2: displayScores(); break;
            case 3: queryScore(); break;
            case 4: showMaxScore(); break;
            case 5: insertScore(); break;
            case 6: sortScores(); break;
        }
        pause(); // 按任意鍵繼續
    }
}

關鍵難點:鏈表排序


// 歸併排序(適合鏈表,穩定、O(n log n)、O(log n)棧空間)
Student* mergeSort(Student* head) {
    if (!head || !head->next) return head;
    // 1. 快慢指針找中點分割
    Student *slow = head, *fast = head->next;
    while (fast && fast->next) { slow = slow->next; fast = fast->next->next; }
    Student* mid = slow->next; slow->next = nullptr;
    // 2. 遞歸排序左右半部
    Student* left = mergeSort(head);
    Student* right = mergeSort(mid);
    // 3. 合併兩有序鏈表(降序)
    return mergeDesc(left, right);
}

Student* mergeDesc(Student* a, Student* b) {
    Student dummy; Student* tail = &dummy;
    while (a && b) {
        if (a->score >= b->score) { tail->next = a; a = a->next; }
        else { tail->next = b; b = b->next; }
        tail = tail->next;
    }
    tail->next = a ? a : b;
    return dummy.next;
}

擴展建議

  • 文件持久化:退出時序列化鏈表到二進制文件,啟動時反序列化
  • 動態內存檢查:`new` 失敗處理、退出時完整釋放鏈表內存
  • 單元測試:每個功能函數編寫獨立測試用例
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved
功能關鍵邏輯時間複雜度
輸入成績尾插法建立鏈表,驗證輸入合法性O(n)
顯示成績遍歷鏈表格式化輸出O(n)
查找成績按姓名/學號遍歷比對,或排序後二分查找O(n) / O(log n)
最高成績遍歷記錄最大值節點O(n)
插入成績指定位置/有序插入,修改指針O(n)
排序(降序)鏈表歸併排序或轉數組快排再重建O(n log n)