溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

C++基于單鏈表如何實現學生成績管理系統

發布時間:2022-05-31 09:21:58 來源:億速云 閱讀:365 作者:iii 欄目:開發技術

C++基于單鏈表如何實現學生成績管理系統

引言

學生成績管理系統是學校管理中不可或缺的一部分,它能夠有效地記錄和管理學生的成績信息。本文將介紹如何使用C++語言基于單鏈表數據結構來實現一個簡單的學生成績管理系統。通過單鏈表,我們可以動態地添加、刪除、修改和查詢學生成績信息,從而實現一個靈活且高效的管理系統。

單鏈表簡介

單鏈表是一種線性數據結構,它由一系列節點組成,每個節點包含數據和指向下一個節點的指針。單鏈表的優點在于插入和刪除操作的時間復雜度為O(1),而查找操作的時間復雜度為O(n)。因此,單鏈表非常適合用于需要頻繁插入和刪除操作的場景。

系統設計

1. 學生信息結構體

首先,我們需要定義一個結構體來存儲學生的基本信息,包括學號、姓名、成績等。

struct Student {
    int id;         // 學號
    string name;    // 姓名
    float score;    // 成績
    Student* next;  // 指向下一個節點的指針
};

2. 單鏈表類

接下來,我們定義一個單鏈表類,用于管理學生信息。該類包含以下基本操作:

  • addStudent: 添加學生信息
  • deleteStudent: 刪除學生信息
  • modifyStudent: 修改學生信息
  • searchStudent: 查詢學生信息
  • displayAllStudents: 顯示所有學生信息
class StudentList {
private:
    Student* head;  // 鏈表頭指針

public:
    StudentList() : head(nullptr) {}

    // 添加學生信息
    void addStudent(int id, string name, float score) {
        Student* newStudent = new Student{id, name, score, nullptr};
        if (head == nullptr) {
            head = newStudent;
        } else {
            Student* temp = head;
            while (temp->next != nullptr) {
                temp = temp->next;
            }
            temp->next = newStudent;
        }
    }

    // 刪除學生信息
    void deleteStudent(int id) {
        if (head == nullptr) return;

        if (head->id == id) {
            Student* temp = head;
            head = head->next;
            delete temp;
            return;
        }

        Student* temp = head;
        while (temp->next != nullptr && temp->next->id != id) {
            temp = temp->next;
        }

        if (temp->next != nullptr) {
            Student* toDelete = temp->next;
            temp->next = temp->next->next;
            delete toDelete;
        }
    }

    // 修改學生信息
    void modifyStudent(int id, string name, float score) {
        Student* temp = head;
        while (temp != nullptr) {
            if (temp->id == id) {
                temp->name = name;
                temp->score = score;
                return;
            }
            temp = temp->next;
        }
    }

    // 查詢學生信息
    Student* searchStudent(int id) {
        Student* temp = head;
        while (temp != nullptr) {
            if (temp->id == id) {
                return temp;
            }
            temp = temp->next;
        }
        return nullptr;
    }

    // 顯示所有學生信息
    void displayAllStudents() {
        Student* temp = head;
        while (temp != nullptr) {
            cout << "ID: " << temp->id << ", Name: " << temp->name << ", Score: " << temp->score << endl;
            temp = temp->next;
        }
    }
};

3. 主函數

最后,我們在主函數中實現一個簡單的用戶界面,允許用戶通過命令行與系統進行交互。

int main() {
    StudentList list;
    int choice, id;
    string name;
    float score;

    while (true) {
        cout << "1. Add Student\n2. Delete Student\n3. Modify Student\n4. Search Student\n5. Display All Students\n6. Exit\n";
        cout << "Enter your choice: ";
        cin >> choice;

        switch (choice) {
            case 1:
                cout << "Enter ID: ";
                cin >> id;
                cout << "Enter Name: ";
                cin >> name;
                cout << "Enter Score: ";
                cin >> score;
                list.addStudent(id, name, score);
                break;
            case 2:
                cout << "Enter ID to delete: ";
                cin >> id;
                list.deleteStudent(id);
                break;
            case 3:
                cout << "Enter ID to modify: ";
                cin >> id;
                cout << "Enter new Name: ";
                cin >> name;
                cout << "Enter new Score: ";
                cin >> score;
                list.modifyStudent(id, name, score);
                break;
            case 4:
                cout << "Enter ID to search: ";
                cin >> id;
                Student* student = list.searchStudent(id);
                if (student != nullptr) {
                    cout << "ID: " << student->id << ", Name: " << student->name << ", Score: " << student->score << endl;
                } else {
                    cout << "Student not found." << endl;
                }
                break;
            case 5:
                list.displayAllStudents();
                break;
            case 6:
                return 0;
            default:
                cout << "Invalid choice. Please try again." << endl;
        }
    }

    return 0;
}

總結

通過本文的介紹,我們了解了如何使用C++語言基于單鏈表數據結構來實現一個簡單的學生成績管理系統。單鏈表的動態性和靈活性使得它非常適合用于需要頻繁插入和刪除操作的場景。通過這個系統,我們可以方便地管理學生的成績信息,并進行添加、刪除、修改和查詢等操作。希望本文能夠幫助讀者更好地理解單鏈表的應用,并為實際開發提供參考。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

c++
AI

亚洲午夜精品一区二区_中文无码日韩欧免_久久香蕉精品视频_欧美主播一区二区三区美女