C++学生信息管理系统,链表实现

## 一、项目介绍

这是一个用C++语言编写的学生信息管理系统,采用链表数据结构实现,专门给C++初学者练手用的。只需要一个cpp文件,就能实现完整的学生信息增删改查功能。

**功能特点:**
– 纯C++标准库实现,无需第三方依赖
– 链表存储,动态扩容,不受人数限制
– 支持添加学生信息
– 支持删除学生信息
– 支持修改学生信息
– 支持查询学生信息
– 支持显示所有学生信息
– 控制台界面,操作简单直观

**适合人群:**
– 刚学C++的新手
– 想练习链表操作的同学
– 需要做课程设计的学生
– 想了解数据结构的初学者

二、效果展示

## 二、效果展示

下载图标
cpp_student_screenshot2.png
png文件
8.4K
下载图标
cpp_student_screenshot1.png
png文件
10.0K

 

三、小白教程

**环境准备**

你需要一个C++编译器,推荐新手使用:
– Dev-C++(最简单,适合新手)
– Code::Blocks(功能强大,免费)
– Visual Studio(功能最全,体积较大)

**步骤1:创建文件**
1. 打开你的C++编译器
2. 新建一个源文件(File → New → Source File)
3. 保存为 student_management.cpp(名字随便起,后缀是.cpp就行)

**步骤2:复制代码**
把下面的完整源码全部复制,粘贴到你刚创建的cpp文件里。

**步骤3:编译运行**
1. 点击编译按钮(Compile),检查有没有错误
2. 如果没有错误,点击运行按钮(Run)
3. 程序就会启动,按照菜单提示操作就行

**常见问题**
– 编译报错:检查是不是代码没复制全,或者编译器版本太老
– 中文乱码:在编译器设置里把编码改成GBK或者UTF-8
– 运行闪退:在main函数最后加一句 system(“pause”); 或者 getchar();

四、完整源码

#include <iostream>
#include <string>
#include <cstdlib>

using namespace std;

// 学生结构体
struct Student {
    string id;      // 学号
    string name;    // 姓名
    string gender;  // 性别
    int age;        // 年龄
    double score;   // 成绩
};

// 链表节点结构体
struct Node {
    Student data;
    Node* next;
};

// 全局变量:链表头节点
Node* head = NULL;
int studentCount = 0;

// 函数声明
void showMenu();
void addStudent();
void deleteStudent();
void modifyStudent();
void searchStudent();
void showAllStudents();
void freeMemory();

int main() {
    int choice;
    
    while (true) {
        showMenu();
        cout << "请输入你的选择:";
        cin >> choice;
        
        switch (choice) {
            case 1:
                addStudent();
                break;
            case 2:
                deleteStudent();
                break;
            case 3:
                modifyStudent();
                break;
            case 4:
                searchStudent();
                break;
            case 5:
                showAllStudents();
                break;
            case 0:
                cout << "感谢使用,再见!" << endl;
                freeMemory();
                return 0;
            default:
                cout << "输入错误,请重新选择!" << endl;
                break;
        }
        
        cout << endl;
        system("pause");
        system("cls");
    }
    
    return 0;
}

// 显示菜单
void showMenu() {
    cout << "==============================" << endl;
    cout << "    学生信息管理系统" << endl;
    cout << "==============================" << endl;
    cout << "    1. 添加学生信息" << endl;
    cout << "    2. 删除学生信息" << endl;
    cout << "    3. 修改学生信息" << endl;
    cout << "    4. 查询学生信息" << endl;
    cout << "    5. 显示所有学生" << endl;
    cout << "    0. 退出系统" << endl;
    cout << "==============================" << endl;
    cout << "当前学生人数:" << studentCount << "人" << endl;
}

// 添加学生
void addStudent() {
    cout << "\n--- 添加学生信息 ---" << endl;
    
    Node* newNode = new Node;
    
    cout << "请输入学号:";
    cin >> newNode->data.id;
    cout << "请输入姓名:";
    cin >> newNode->data.name;
    cout << "请输入性别:";
    cin >> newNode->data.gender;
    cout << "请输入年龄:";
    cin >> newNode->data.age;
    cout << "请输入成绩:";
    cin >> newNode->data.score;
    
    newNode->next = NULL;
    
    if (head == NULL) {
        head = newNode;
    } else {
        Node* p = head;
        while (p->next != NULL) {
            p = p->next;
        }
        p->next = newNode;
    }
    
    studentCount++;
    cout << "添加成功!" << endl;
}

// 删除学生
void deleteStudent() {
    cout << "\n--- 删除学生信息 ---" << endl;
    
    if (head == NULL) {
        cout << "暂无学生信息!" << endl;
        return;
    }
    
    string id;
    cout << "请输入要删除的学生学号:";
    cin >> id;
    
    Node* p = head;
    Node* prev = NULL;
    
    while (p != NULL) {
        if (p->data.id == id) {
            break;
        }
        prev = p;
        p = p->next;
    }
    
    if (p == NULL) {
        cout << "找不到该学生!" << endl;
        return;
    }
    
    if (prev == NULL) {
        head = p->next;
    } else {
        prev->next = p->next;
    }
    
    delete p;
    studentCount--;
    cout << "删除成功!" << endl;
}

// 修改学生
void modifyStudent() {
    cout << "\n--- 修改学生信息 ---" << endl;
    
    if (head == NULL) {
        cout << "暂无学生信息!" << endl;
        return;
    }
    
    string id;
    cout << "请输入要修改的学生学号:";
    cin >> id;
    
    Node* p = head;
    
    while (p != NULL) {
        if (p->data.id == id) {
            break;
        }
        p = p->next;
    }
    
    if (p == NULL) {
        cout << "找不到该学生!" << endl;
        return;
    }
    
    cout << "请输入新的姓名:";
    cin >> p->data.name;
    cout << "请输入新的性别:";
    cin >> p->data.gender;
    cout << "请输入新的年龄:";
    cin >> p->data.age;
    cout << "请输入新的成绩:";
    cin >> p->data.score;
    
    cout << "修改成功!" << endl;
}

// 查询学生
void searchStudent() {
    cout << "\n--- 查询学生信息 ---" << endl;
    
    if (head == NULL) {
        cout << "暂无学生信息!" << endl;
        return;
    }
    
    string id;
    cout << "请输入要查询的学生学号:";
    cin >> id;
    
    Node* p = head;
    
    while (p != NULL) {
        if (p->data.id == id) {
            break;
        }
        p = p->next;
    }
    
    if (p == NULL) {
        cout << "找不到该学生!" << endl;
        return;
    }
    
    cout << "\n学生信息:" << endl;
    cout << "学号:" << p->data.id << endl;
    cout << "姓名:" << p->data.name << endl;
    cout << "性别:" << p->data.gender << endl;
    cout << "年龄:" << p->data.age << endl;
    cout << "成绩:" << p->data.score << endl;
}

// 显示所有学生
void showAllStudents() {
    cout << "\n--- 所有学生信息 ---" << endl;
    
    if (head == NULL) {
        cout << "暂无学生信息!" << endl;
        return;
    }
    
    cout << "学号\t姓名\t性别\t年龄\t成绩" << endl;
    cout << "----------------------------------------" << endl;
    
    Node* p = head;
    
    while (p != NULL) {
        cout << p->data.id << "\t" 
             << p->data.name << "\t" 
             << p->data.gender << "\t" 
             << p->data.age << "\t" 
             << p->data.score << endl;
        p = p->next;
    }
}

// 释放内存
void freeMemory() {
    Node* p = head;
    while (p != NULL) {
        Node* temp = p;
        p = p->next;
        delete temp;
    }
    head = NULL;
}

 

© 版权声明
THE END
喜欢就支持一下吧
点赞11 分享
评论 抢沙发

请登录后发表评论

    暂无评论内容