【C++】C++ 学生信息管理系统(源码+面向对象)【独一无二】

请添加图片描述


👉博__主👈:米码收割机
👉技__能👈:C++/Python语言
👉公众号👈:测试开发自动化【获取源码+商业合作】
👉荣__誉👈:阿里云博客专家博主、51CTO技术博主
👉专__注👈:专注主流机器人、人工智能等相关领域的开发、测试技术。


系列文章目录



一、设计要求

1. 添加学生
  • 功能描述: 允许用户添加新学生到系统中。
  • 输入: 学生姓名、学号、年龄和成绩。
  • 处理: 创建一个新的 Student 对象并将其添加到 StudentManager 的学生列表中。
  • 输出: 无。
2. 删除学生
  • 功能描述: 允许用户根据学号删除系统中的学生。
  • 输入: 学生学号。
  • 处理: 在 StudentManager 的学生列表中查找对应学号的学生并删除。
  • 输出: 成功删除的提示信息;如果未找到学生,则输出未找到的提示信息。
3. 查找学生
  • 功能描述: 允许用户根据学号查找学生信息。
  • 输入: 学生学号。
  • 处理: 在 StudentManager 的学生列表中查找对应学号的学生。
  • 输出: 查找到的学生信息;如果未找到学生,则输出未找到的提示信息。
4. 修改学生信息
  • 功能描述: 允许用户根据学号修改学生的信息。
  • 输入: 学生学号、新的姓名、年龄和成绩。
  • 处理: 在 StudentManager 的学生列表中查找对应学号的学生,并修改其信息。
  • 输出: 成功修改的提示信息;如果未找到学生,则输出未找到的提示信息。

👉👉👉 源码获取 关注【测试开发自动化】公众号,回复 “ 学生 ” 获取,拿来即用。👈👈👈

5. 输出所有学生信息
  • 功能描述: 输出系统中所有学生的信息。
  • 输入: 无。
  • 处理: 遍历 StudentManager 的学生列表并输出每个学生的信息。
  • 输出: 所有学生的信息。
6. 成绩统计
  • 功能描述: 统计学生的成绩信息,包括最高分、最低分和平均分。
  • 输入: 无。
  • 处理: 遍历 StudentManager 的学生列表,计算最高分、最低分和平均分。
  • 输出: 最高分、最低分和平均分。
0. 退出系统
  • 功能描述: 退出学生管理系统。
  • 输入: 无。
  • 处理: 退出程序的循环,结束程序运行。
  • 输出: 无。

👉👉👉 源码获取 关注【测试开发自动化】公众号,回复 “ 学生 ” 获取,拿来即用。👈👈👈


二、设计思路

1. addStudent 函数

void addStudent(const Student& student) {
    if (students.size() < 1000) {
        students.push_back(student);
    } else {
        std::cout << "学生数量已达到上限!" << std::endl;
    }
}

分析

  • 设计思路:该函数用于向学生管理系统中添加一个新的学生对象。
  • 逻辑:首先检查当前学生数量是否超过1000。如果没有超过,则将新学生添加到 students 向量中;如果超过了,则输出错误提示。
  • 优点:通过限定学生数量,避免系统过载。逻辑简单清晰。

2. deleteStudent 函数

void deleteStudent(int id) {
    auto it = std::remove_if(students.begin(), students.end(),
                             [id](const Student& s) { return s.getId() == id; });
    if (it != students.end()) {
        students.erase(it, students.end());
        std::cout << "学生已删除!" << std::endl;
    } else {
    // 略....(至少10行代码)

}

分析

  • 设计思路:该函数用于根据学号删除学生对象。
  • 逻辑:使用 std::remove_if 函数来查找并标记要删除的学生。然后调用 erase 函数实际删除学生对象。如果找到并删除了学生,输出删除成功的提示;否则,输出未找到的提示。
  • 优点:使用标准库算法,使代码简洁高效。

👉👉👉 源码获取 关注【测试开发自动化】公众号,回复 “ 学生 ” 获取,拿来即用。👈👈👈

3. findStudent 函数

Student* findStudent(int id) {
    auto it = std::find_if(students.begin(), students.end(),
                           [id](const Student& s) { return s.getId() == id; });
    if (it != students.end()) {
        return &(*it);
    // 略....(至少10行代码)

}

分析

  • 设计思路:该函数用于根据学号查找学生对象。
  • 逻辑:使用 std::find_if 函数在 students 向量中查找具有指定学号的学生。如果找到,返回指向该学生对象的指针;否则,输出未找到的提示并返回空指针。
  • 优点:通过返回指针的方式,可以直接在外部操作找到的学生对象。

4. modifyStudent 函数

void modifyStudent(const Student& updatedStudent) {
    Student* student = findStudent(updatedStudent.getId());
    if (student != nullptr) {
        student->setName(updatedStudent.getName());
        student->setAge(updatedStudent.getAge());
	    // 略....(至少10行代码)

    }
}

👉👉👉 源码获取 关注【测试开发自动化】公众号,回复 “ 学生 ” 获取,拿来即用。👈👈👈

分析

  • 设计思路:该函数用于修改学生信息。
  • 逻辑:首先调用 findStudent 函数查找要修改的学生对象。如果找到该学生,则更新其姓名、年龄和成绩;否则,不做任何操作。
  • 优点:通过查找和修改分离的方式,代码逻辑清晰,易于维护。

5. printStatistics 函数

void printStatistics() const {
    if (students.empty()) {
        std::cout << "没有学生信息!" << std::endl;
        return;
    }

    double maxScore = std::numeric_limits<double>::min();
    double minScore = std::numeric_limits<double>::max();
    double totalScore = 0;

    // 略....(至少10行代码)
}

分析

  • 设计思路:该函数用于统计并输出学生的最高分、最低分和平均分。
  • 逻辑:首先检查学生列表是否为空。如果为空,输出提示信息并返回。否则,遍历学生列表,计算最高分、最低分和总分。然后计算平均分,并输出这些统计信息。
  • 优点:逻辑清晰,处理了学生列表为空的情况,保证程序的健壮性。

6. operator<< 运算符重载

std::ostream& operator<<(std::ostream& os, const Student& student) {
    os << "姓名: " << student.name << ", 学号: " << student.id
       << ", 年龄: " << student.age << ", 成绩: " << student.score;
    return os;
}

std::ostream& operator<<(std::ostream& os, const StudentManager& manager) {
    for (const auto& student : manager.students) {
        os << student << std::endl;
    }
    return os;
}

分析

  • 设计思路:重载输出运算符,用于友好地输出 Student 对象和 StudentManager 对象的内容。
  • 逻辑
    • 对于 Student 对象:输出学生的姓名、学号、年龄和成绩。
    • 对于 StudentManager 对象:遍历学生列表,逐个输出每个学生的信息。
  • 优点:通过重载运算符,使得输出操作更加直观和简洁,增强了代码的可读性和可维护性。

通过对每个成员函数的分析,可以看出该学生管理系统的设计思路清晰,逻辑合理,并且充分利用了C++的面向对象特性和标准库算法,使代码简洁高效。

👉👉👉 源码获取 关注【测试开发自动化】公众号,回复 “ 学生 ” 获取,拿来即用。👈👈👈

其他代码分析 略… 略…


三、可视化分析

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

👉👉👉 源码获取 关注【测试开发自动化】公众号,回复 “ 学生 ” 获取,拿来即用。👈👈👈

在这里插入图片描述

在这里插入图片描述

👉👉👉 源码获取 关注【测试开发自动化】公众号,回复 “ 学生 ” 获取,拿来即用。👈👈👈


  • 11
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

米码收割机

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值