前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >【C/C++】【学生成绩管理系统】深度剖析

【C/C++】【学生成绩管理系统】深度剖析

作者头像
小李很执着
发布2024-06-18 09:01:32
1390
发布2024-06-18 09:01:32
举报
文章被收录于专栏:学习笔记学习笔记

该学生成绩管理系统是一个用C++实现的程序,通过控制台界面实现对学生信息的增删改查。系统包括以下功能:添加学生信息、删除学生信息、修改学生信息、查询学生信息、显示所有学生信息、统计学生成绩数据和清空系统数据。

实现功能

  1. 添加学生信息: 用户可以通过输入学生的ID、姓名、年龄、性别和成绩来添加学生信息。新添加的学生信息会被存储在一个向量中。
  2. 删除学生信息: 用户可以通过输入学生的ID来删除学生信息。程序会在向量中查找对应的学生ID,如果找到则删除该学生的信息。
  3. 修改学生信息: 用户可以通过输入学生的ID来修改学生信息。程序会在向量中查找对应的学生ID,如果找到则允许用户修改该学生的姓名、年龄、性别和成绩。
  4. 查询学生信息: 用户可以通过输入学生的ID来查询学生信息。程序会在向量中查找对应的学生ID,如果找到则显示该学生的详细信息。
  5. 显示信息列表: 程序会显示所有存储在向量中的学生信息列表,包括每个学生的ID、姓名、年龄、性别和成绩。使用格式化输出使信息更加整齐美观。
  6. 统计学生数据: 程序会计算并显示学生成绩的平均值、最高值和最低值。这有助于用户了解整体的学生成绩分布情况。
  7. 清空系统数据: 用户可以选择清空系统中所有学生的数据。这会删除向量中存储的所有学生信息。
  8. 退出系统: 用户选择退出系统时,程序会显示退出提示信息,并终止运行。

部分1:系统设置和主菜单

首先设置程序的基本结构和主菜单界面。

代码语言:javascript
复制
#include <iostream>
#include <vector>
#include <string>
#include <iomanip>

using namespace std;

// 定义一个结构体来保存学生信息
struct Student {
    int id;
    string name;
    int age;
    string gender;
    double grade;
};

// 函数声明
void addStudent(vector<Student>& students);
void deleteStudent(vector<Student>& students);
void modifyStudent(vector<Student>& students);
void queryStudent(const vector<Student>& students);
void displayStudents(const vector<Student>& students);
void statistics(const vector<Student>& students);
void clearData(vector<Student>& students);
void exitSystem();

int main() {
    vector<Student> students;
    int choice;

    while (true) {
        cout << "*****************欢迎来到学生成绩管理系统*****************\n";
        cout << "你可以进行以下操作:\n";
        cout << "1. 添加学生信息\n";
        cout << "2. 删除学生信息\n";
        cout << "3. 修改学生信息\n";
        cout << "4. 查询学生信息\n";
        cout << "5. 显示信息列表\n";
        cout << "6. 统计学生数据\n";
        cout << "7. 清空系统数据\n";
        cout << "0. 退出\n";
        cout << "请输入你的选择: ";
        cin >> choice;

        switch (choice) {
            case 1:
                addStudent(students);
                break;
            case 2:
                deleteStudent(students);
                break;
            case 3:
                modifyStudent(students);
                break;
            case 4:
                queryStudent(students);
                break;
            case 5:
                displayStudents(students);
                break;
            case 6:
                statistics(students);
                break;
            case 7:
                clearData(students);
                break;
            case 0:
                exitSystem();
                return 0;
            default:
                cout << "无效的选择,请重新输入。\n";
        }
    }
    return 0;
}

1. 引入头文件

首先,引入了C++标准库中的必要头文件:

代码语言:javascript
复制
#include <iostream>
#include <vector>
#include <string>
#include <iomanip>
  • iostream:用于输入输出操作。
  • vector:用于动态数组(向量)的使用。
  • string:用于字符串操作。
  • iomanip:用于格式化输出。

2. 定义结构体

定义了一个结构体 Student,用于保存学生信息:

代码语言:javascript
复制
struct Student {
    int id;           // 学生ID
    string name;      // 学生姓名
    int age;          // 学生年龄
    string gender;    // 学生性别
    double grade;     // 学生成绩
};

3. 函数声明

main 函数之前,声明了一些函数,这些函数将在后续部分实现:

代码语言:javascript
复制
void addStudent(vector<Student>& students);
void deleteStudent(vector<Student>& students);
void modifyStudent(vector<Student>& students);
void queryStudent(const vector<Student>& students);
void displayStudents(const vector<Student>& students);
void statistics(const vector<Student>& students);
void clearData(vector<Student>& students);
void exitSystem();

4. 主函数

主函数包含了一个无限循环,用于显示菜单并处理用户的选择:

代码语言:javascript
复制
int main() {
    vector<Student> students;
    int choice;

    while (true) {
        cout << "*****************欢迎来到学生成绩管理系统*****************\n";
        cout << "你可以进行以下操作:\n";
        cout << "1. 添加学生信息\n";
        cout << "2. 删除学生信息\n";
        cout << "3. 修改学生信息\n";
        cout << "4. 查询学生信息\n";
        cout << "5. 显示信息列表\n";
        cout << "6. 统计学生数据\n";
        cout << "7. 清空系统数据\n";
        cout << "0. 退出\n";
        cout << "请输入你的选择: ";
        cin >> choice;

        switch (choice) {
            case 1:
                addStudent(students);
                break;
            case 2:
                deleteStudent(students);
                break;
            case 3:
                modifyStudent(students);
                break;
            case 4:
                queryStudent(students);
                break;
            case 5:
                displayStudents(students);
                break;
            case 6:
                statistics(students);
                break;
            case 7:
                clearData(students);
                break;
            case 0:
                exitSystem();
                return 0;
            default:
                cout << "无效的选择,请重新输入。\n";
        }
    }
    return 0;
}
  • vector<Student> students:定义一个用于存储学生信息的向量。
  • int choice:用于存储用户的选择。

部分2:添加学生信息

这个功能允许用户输入新的学生信息到系统中。

代码语言:javascript
复制
void addStudent(vector<Student>& students) {
    Student newStudent;
    cout << "请输入学生ID: ";
    cin >> newStudent.id;
    cout << "请输入学生姓名: ";
    cin >> newStudent.name;
    cout << "请输入学生年龄: ";
    cin >> newStudent.age;
    cout << "请输入学生性别: ";
    cin >> newStudent.gender;
    cout << "请输入学生成绩: ";
    cin >> newStudent.grade;

    students.push_back(newStudent);
    cout << "学生信息添加成功!\n";
}
  • 使用 cin 获取用户输入的学生信息,并存储在 newStudent 变量中。
  • newStudent 添加到 students 向量中。
  • 提示用户添加成功。

部分3:删除学生信息

这个功能允许用户根据学生ID删除学生信息。

代码语言:javascript
复制
void deleteStudent(vector<Student>& students) {
    int id;
    cout << "请输入要删除的学生ID: ";
    cin >> id;
    
    for (auto it = students.begin(); it != students.end(); ++it) {
        if (it->id == id) {
            students.erase(it);
            cout << "学生信息删除成功!\n";
            return;
        }
    }
    cout << "未找到该学生ID。\n";
}
  • 获取用户输入的学生ID。
  • 使用迭代器遍历 students 向量,找到匹配的学生ID并删除。
  • 提示用户删除成功或未找到该学生ID。

部分4:修改学生信息

这个功能允许用户修改现有的学生信息。

代码语言:javascript
复制
void modifyStudent(vector<Student>& students) {
    int id;
    cout << "请输入要修改的学生ID: ";
    cin >> id;
    
    for (auto& student : students) {
        if (student.id == id) {
            cout << "请输入新的学生姓名: ";
            cin >> student.name;
            cout << "请输入新的学生年龄: ";
            cin >> student.age;
            cout << "请输入新的学生性别: ";
            cin >> student.gender;
            cout << "请输入新的学生成绩: ";
            cin >> student.grade;
            cout << "学生信息修改成功!\n";
            return;
        }
    }
    cout << "未找到该学生ID。\n";
}
  • 获取用户输入的学生ID。
  • 遍历 students 向量,找到匹配的学生ID并获取新的学生信息进行修改。
  • 提示用户修改成功或未找到该学生ID。

部分5:查询学生信息

这个功能允许用户根据学生ID查询并显示学生信息。

代码语言:javascript
复制
void queryStudent(const vector<Student>& students) {
    int id;
    cout << "请输入要查询的学生ID: ";
    cin >> id;
    
    for (const auto& student : students) {
        if (student.id == id) {
            cout << "学生ID: " << student.id << "\n";
            cout << "学生姓名: " << student.name << "\n";
            cout << "学生年龄: " << student.age << "\n";
            cout << "学生性别: " << student.gender << "\n";
            cout << "学生成绩: " << student.grade << "\n";
            return;
        }
    }
    cout << "未找到该学生ID。\n";
}
  • 获取用户输入的学生ID。
  • 遍历 students 向量,找到匹配的学生ID并显示学生信息。
  • 提示用户未找到该学生ID。

部分6:显示信息列表

这个功能显示所有学生的信息列表。

代码语言:javascript
复制
void displayStudents(const vector<Student>& students) {
    cout << setw(10) << "学生ID" << setw(20) << "学生姓名" << setw(10) << "年龄" << setw(10) << "性别" << setw(10) << "成绩" << "\n";
    for (const auto& student : students) {
        cout << setw(10) << student.id << setw(20) << student.name << setw(10) << student.age << setw(10) << student.gender << setw(10) << student.grade << "\n";
    }
}
  • 使用 setw 设置输出格式,确保信息对齐。
  • 遍历 students 向量,显示每个学生的信息。

部分7:统计学生数据

这个功能提供学生成绩的基本统计信息。

代码语言:javascript
复制
void statistics(const vector<Student>& students) {
    if (students.empty()) {
        cout << "没有学生数据。\n";
        return;
    }

    double sum = 0;
    double maxGrade = students[0].grade;
    double minGrade = students[0].grade;
    
    for (const auto& student : students) {
        sum += student.grade;
        if (student.grade > maxGrade) {
            maxGrade = student.grade;
        }
        if (student.grade < minGrade) {
            minGrade = student.grade;
        }
    }
    
    double average = sum / students.size();
    cout << "学生成绩统计:\n";
    cout << "平均成绩: " << average << "\n";
    cout << "最高成绩: " << maxGrade << "\n";
    cout << "最低成绩: " << minGrade << "\n";
}
  • 计算并显示学生成绩的平均值、最高值和最低值。
  • 如果没有学生数据,提示用户。

部分8:清空系统数据

这个功能清除系统中的所有学生数据。

代码语言:javascript
复制
void clearData(vector<Student>& students) {
    students.clear();
    cout << "系统数据已清空。\n";
}
  • 清空 students 向量中的所有数据。
  • 提示用户数据已清空。

部分9: 退出系统函数

实现了退出系统时的提示功能:

代码语言:javascript
复制
void exitSystem() {
    cout << "感谢使用学生成绩管理系统,再见!\n";
}
  • 提示用户系统退出信息。

总结代码

将所有部分整合在一起,形成完整的学生成绩管理系统代码如下:

代码语言:javascript
复制
#include <iostream>
#include <vector>
#include <string>
#include <iomanip>

using namespace std;

struct Student {
    int id;
    string name;
    int age;
    string gender;
    double grade;
};

void addStudent(vector<Student>& students);
void deleteStudent(vector<Student>& students);
void modifyStudent(vector<Student>& students);
void queryStudent(const vector<Student>& students);
void displayStudents(const vector<Student>& students);
void statistics(const vector<Student>& students);
void clearData(vector<Student>& students);
void exitSystem();

int main() {
    vector<Student> students;
    int choice;

    while (true) {
        cout << "*****************欢迎来到学生成绩管理系统*****************\n";
        cout << "你可以进行以下操作:\n";
        cout << "1. 添加学生信息\n";
        cout << "2. 删除学生信息\n";
        cout << "3. 修改学生信息\n";
        cout << "4. 查询学生信息\n";
        cout << "5. 显示信息列表\n";
        cout << "6. 统计学生数据\n";
        cout << "7. 清空系统数据\n";
        cout << "0. 退出\n";
        cout << "请输入你的选择: ";
        cin >> choice;

        switch (choice) {
            case 1:
                addStudent(students);
                break;
            case 2:
                deleteStudent(students);
                break;
            case 3:
                modifyStudent(students);
                break;
            case 4:
                queryStudent(students);
                break;
            case 5:
                displayStudents(students);
                break;
            case 6:
                statistics(students);
                break;
            case 7:
                clearData(students);
                break;
            case 0:
                exitSystem();
                return 0;
            default:
                cout << "无效的选择,请重新输入。\n";
        }
    }
    return 0;
}

void addStudent(vector<Student>& students) {
    Student newStudent;
    cout << "请输入学生ID: ";
    cin >> newStudent.id;
    cout << "请输入学生姓名: ";
    cin >> newStudent.name;
    cout << "请输入学生年龄: ";
    cin >> newStudent.age;
    cout << "请输入学生性别: ";
    cin >> newStudent.gender;
    cout << "请输入学生成绩: ";
    cin >> newStudent.grade;

    students.push_back(newStudent);
    cout << "学生信息添加成功!\n";
}

void deleteStudent(vector<Student>& students) {
    int id;
    cout << "请输入要删除的学生ID: ";
    cin >> id;
    
    for (auto it = students.begin(); it != students.end(); ++it) {
        if (it->id == id) {
            students.erase(it);
            cout << "学生信息删除成功!\n";
            return;
        }
    }
    cout << "未找到该学生ID。\n";
}

void modifyStudent(vector<Student>& students) {
    int id;
    cout << "请输入要修改的学生ID: ";
    cin >> id;
    
    for (auto& student : students) {
        if (student.id == id) {
            cout << "请输入新的学生姓名: ";
            cin >> student.name;
            cout << "请输入新的学生年龄: ";
            cin >> student.age;
            cout << "请输入新的学生性别: ";
            cin >> student.gender;
            cout << "请输入新的学生成绩: ";
            cin >> student.grade;
            cout << "学生信息修改成功!\n";
            return;
        }
    }
    cout << "未找到该学生ID。\n";
}

void queryStudent(const vector<Student>& students) {
    int id;
    cout << "请输入要查询的学生ID: ";
    cin >> id;
    
    for (const auto& student : students) {
        if (student.id == id) {
            cout << "学生ID: " << student.id << "\n";
            cout << "学生姓名: " << student.name << "\n";
            cout << "学生年龄: " << student.age << "\n";
            cout << "学生性别: " << student.gender << "\n";
            cout << "学生成绩: " << student.grade << "\n";
            return;
        }
    }
    cout << "未找到该学生ID。\n";
}

void displayStudents(const vector<Student>& students) {
    cout << setw(10) << "学生ID" << setw(20) << "学生姓名" << setw(10) << "年龄" << setw(10) << "性别" << setw(10) << "成绩" << "\n";
    for (const auto& student : students) {
        cout << setw(10) << student.id << setw(20) << student.name << setw(10) << student.age << setw(10) << student.gender << setw(10) << student.grade << "\n";
    }
}

void statistics(const vector<Student>& students) {
    if (students.empty()) {
        cout << "没有学生数据。\n";
        return;
    }

    double sum = 0;
    double maxGrade = students[0].grade;
    double minGrade = students[0].grade;
    
    for (const auto& student : students) {
        sum += student.grade;
        if (student.grade > maxGrade) {
            maxGrade = student.grade;
        }
        if (student.grade < minGrade) {
            minGrade = student.grade;
        }
    }
    
    double average = sum / students.size();
    cout << "学生成绩统计:\n";
    cout << "平均成绩: " << average << "\n";
    cout << "最高成绩: " << maxGrade << "\n";
    cout << "最低成绩: " << minGrade << "\n";
}

void clearData(vector<Student>& students) {
    students.clear();
    cout << "系统数据已清空。\n";
}

void exitSystem() {
    cout << "感谢使用学生成绩管理系统,再见!\n";
}
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2024-06-17,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 实现功能
  • 部分1:系统设置和主菜单
    • 1. 引入头文件
      • 2. 定义结构体
        • 3. 函数声明
          • 4. 主函数
          • 部分2:添加学生信息
          • 部分3:删除学生信息
          • 部分4:修改学生信息
          • 部分5:查询学生信息
          • 部分6:显示信息列表
          • 部分7:统计学生数据
          • 部分8:清空系统数据
          • 部分9: 退出系统函数
          • 总结代码
          领券
          问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档