首页 > 编程语言 >学生管理系统(C++)

学生管理系统(C++)

时间:2024-11-03 14:18:25浏览次数:3  
标签:std return cout 管理系统 students C++ 学生 student

#include <iostream>  
#include <vector>  
#include <fstream>  
#include <string>  
#include <sstream>  
#include <algorithm>  
using namespace std;
struct Student {
    std::string name;
    int id;       
    int age;      
    std::string grade;
    std::string classNumber;
};
class StudentManagementSystem {
private:
    std::vector<Student> students;

    auto findStudent(int id) -> decltype(students.begin()) {
        return std::find_if(students.begin(), students.end(),
            [&](const Student& student) { return student.id == id; });
    }

    auto findStudentByName(const std::string& name) -> decltype(students.begin()) {
        return std::find_if(students.begin(), students.end(),
            [&](const Student& student) { return student.name == name; });
    }

public:
    void addStudent(const Student& student) {
        students.push_back(student);
    }

    bool deleteStudent(int id) {
        auto it = findStudent(id);
        if (it != students.end()) {
            students.erase(it);
            return true;
        }
        return false;
    }

    bool deleteStudentByName(const std::string& name) {
        auto it = findStudentByName(name);
        if (it != students.end()) {
            students.erase(it);
            return true;
        }
        return false;
    }
    void setBackgroundBlue() {
        std::cout << "\033[44m";  
    }

    void displayStudents() const {
        for (const auto& student : students) {
            std::cout << "姓名: " << student.name << ", 学号: " << student.id << ", 年龄: " << student.age
                << ", 年级: " << student.grade << ", 班级: " << student.classNumber << std::endl;
        }
    }

    void saveToFile(const std::string& filename) const {
        std::ofstream file(filename);
        for (const auto& student : students) {
            file << student.name << "," << student.id << "," << student.age << "," << student.grade << "," << student.classNumber << std::endl;
        }
    }

    void loadFromFile(const std::string& filename) {
        std::ifstream file(filename);
        std::string line;
        while (std::getline(file, line)) {
            std::istringstream iss(line);
            std::string name, idStr, ageStr, grade, classNumber;
            std::getline(iss, name, ',');
            std::getline(iss, idStr, ',');
            std::getline(iss, ageStr, ',');
            std::getline(iss, grade, ',');
            std::getline(iss, classNumber, ',');
            int id = std::stoi(idStr);
            int age = std::stoi(ageStr);


            students.push_back({ name, id, age, grade, classNumber });


        }
    }
    void displayMenu() {
        void setBackgroundBlue();
        std::cout << "███████╗██╗  ██╗███████╗██████╗ ██████╗ ███╗   ██╗███████╗\n";
        std::cout << "██╔════╝██║  ██║██╔════╝██╔════╝██╔════╝ ████╗  ██║██╔════╝\n";
        std::cout << "███████╗███████║█████╗  ██████╔██║     ██╔██╗ ██║███████╗\n";
        std::cout << "╚════██║██╔══██║██╔══╝  ██╔════╝██║     ██║╚██╗██║╚════██║\n";
        std::cout << "███████║██║  ██║███████╗██║     ╚██████╗██║ ╚████║███████║\n";
        std::cout << "╚══════╝╚═╝  ╚═╝╚══════╝╚═╝      ╚═════╝╚═╝  ╚═══╝╚══════╝\n";
        std::cout << "\n";
        std::cout << "\n";
        cout << "██████████████████████████████████████████████████████████████████████████████" << endl;
        cout << "█〓〓〓〓〓〓〓〓〓〓        学 生  管 理 系统           〓〓〓〓〓〓〓〓〓〓█"<< endl;
        cout << "█〓〓〓〓〓〓〓★★★         ++++++++++++++             ★★★〓〓〓〓〓〓〓█ " << endl;
        cout << "█〓〓〓〓〓〓〓〓〓★       1. 添加学生                  ★〓〓〓〓〓〓〓〓〓█\n";
        cout << "█〓〓〓〓〓〓〓〓〓★       2. 通过学号删除学生          ★〓〓〓〓〓〓〓〓〓█\n";
        cout << "█〓〓〓〓〓〓〓〓〓★       3. 通过姓名删除学生          ★〓〓〓〓〓〓〓〓〓█\n";
        cout << "█〓〓〓〓〓〓〓〓〓★       4. 显示学生名单              ★〓〓〓〓〓〓〓〓〓█\n";
        cout << "█〓〓〓〓〓〓〓〓〓★       5. 保存学生信息到文件        ★〓〓〓〓〓〓〓〓〓█\n";
        cout << "█〓〓〓〓〓〓〓〓〓★       6. 从文件加载学生信息        ★〓〓〓〓〓〓〓〓〓█\n";
        cout << "█〓〓〓〓〓〓〓〓〓★       0. 退出程序                  ★〓〓〓〓〓〓〓〓〓█\n";
        cout << "██████████████████████████████████████████████████████████████████████████████" << endl;
        
    }

    void handleChoice(StudentManagementSystem& sms, char choice) {
        Student student;
        int idToDelete;
        std::string nameToDelete;

        switch (choice) {
        case '1':
            std::cout << "输入学生姓名: ";
            std::cin >> student.name;
            std::cout << "输入学生学号: ";
            std::cin >> student.id;
            std::cout << "输入学生年龄: ";
            std::cin >> student.age;
            std::cout << "输入学生年级: ";
            std::cin >> student.grade;
            std::cout << "输入学生班级: ";
            std::cin >> student.classNumber;

            sms.addStudent(student);
            break;

        case '2':
            std::cout << "输入要删除的学生学号: ";
            std::cin >> idToDelete;
            std::cout << "正在删除学生学号 '" << idToDelete << "'..." << std::endl;
            if (sms.deleteStudent(idToDelete)) {
                std::cout << "学生学号 '" << idToDelete << "' 删除成功。" << std::endl;
            }
            else {
                std::cout << "未找到学生学号 '" << idToDelete << "'。" << std::endl;
            }
            break;

        case '3':
            std::cout << "输入要删除的学生姓名: ";
            std::cin >> nameToDelete;
            std::cout << "正在删除学生姓名 '" << nameToDelete << "'..." << std::endl;
            if (sms.deleteStudentByName(nameToDelete)) {
                std::cout << "学生姓名 '" << nameToDelete << "' 删除成功。" << std::endl;
            }
            else {
                std::cout << "未找到学生姓名 '" << nameToDelete << "'。" << std::endl;
            }
            break;

        case '4':
            std::cout << "当前学生名单:" << std::endl;
            sms.displayStudents();
            break;

        case '5':
            sms.saveToFile("students.txt");
            std::cout << "学生信息已保存到 students.txt。" << std::endl;
            break;

        case '6':
            std::cout << "从文件中加载学生信息..." << std::endl;
            sms.loadFromFile("students.txt");
            std::cout << "加载的学生名单:" << std::endl;
            sms.displayStudents();
            break;

        case '0':
            std::cout << "退出程序。" << std::endl;
            break;

        default:
            std::cout << "无效的选择,请重试。" << std::endl;
        }
    }
};
    int main() {
        StudentManagementSystem sms;
        char choice;

        do {
            sms.displayMenu();
            std::cout << "请输入你的选择: ";
            std::cin >> choice;
            sms.handleChoice(sms, std::tolower(choice));
        } while (choice != '0');

        return 0;
    }
 

这个学生管理系统是一个基于控制台的简单应用程序,它允许用户通过一系列菜单选项来管理学生信息。以下是该系统的运行结果和功能的介绍:

运行结果

  1. 菜单显示
    当程序运行时,它首先会显示一个菜单,列出了所有可用的选项。这个菜单包括一个标题和几个带有编号的选项,用户可以通过输入相应的数字来选择他们想要执行的操作。

  2. 用户交互
    用户根据菜单提示输入他们的选择。根据输入的选择,程序会要求用户输入必要的信息(例如,添加学生时需要输入学生的姓名、学号、年龄、年级和班级),或者执行相应的操作(例如,删除学生、显示学生名单、保存或加载学生信息)。

  3. 操作反馈
    对于每个操作,程序都会提供反馈。例如,当添加或删除学生时,它会确认操作是否成功。当保存或加载学生信息时,它会通知用户文件操作的结果。

  4. 退出程序
    用户可以通过选择菜单中的“0”选项来退出程序。程序会关闭,不会留下任何未保存的数据(除非用户之前已经选择将数据保存到文件中)。

功能介绍

  1. 添加学生
    允许用户输入一个新的学生的详细信息,并将其添加到系统中。这些信息包括姓名、学号、年龄、年级和班级。

  2. 通过学号删除学生
    允许用户通过输入学生的学号来删除该学生的信息。如果找到了具有该学号的学生,则将其从系统中删除。

  3. 通过姓名删除学生
    与通过学号删除学生类似,但这次是通过输入学生的姓名来删除。

  4. 显示学生名单
    在控制台上列出系统中所有学生的详细信息。这对于查看当前已添加的学生非常有用。

  5. 保存学生信息到文件
    将学生信息保存到一个名为“students.txt”的文件中。这样,即使程序关闭,用户也可以保留他们的数据。

  6. 从文件加载学生信息
    从“students.txt”文件中读取学生信息,并将其加载到系统中。这对于恢复之前保存的数据非常有用。

  7. 退出程序
    允许用户退出程序。

注意事项

  • 该系统是基于控制台的,因此它使用标准输入和输出来与用户交互。
  • 它使用ASCII艺术来创建菜单,这可能会在某些终端或字体设置下看起来不太清晰。
  • 它将数据保存在一个简单的文本文件中,这意味着数据格式是易于阅读和编辑的,但也可能更容易受到损坏或篡改。
  • 该系统没有实现用户身份验证或权限管理,因此任何能够访问程序的人都可以执行所有操作。在实际应用中,这可能需要额外的安全措施。

标签:std,return,cout,管理系统,students,C++,学生,student
From: https://blog.csdn.net/2402_85533477/article/details/143449285

相关文章

  • 【NOI】C++函数入门二(自定义函数)
    文章目录前言一、概念1.导入1.1首先什么是函数呢?2.函数分类3.为什么要定义函数呢?4.函数结构5.函数使用注意事项二、例题讲解问题:1137-纯粹素数问题:1258-求一个三位数问题:1140-亲密数对问题:1149-回文数个数三、总结四、感谢前言在这一章节中,我们将深入探......
  • C++学习笔记
    一、从C转向C++1.1、使用const和inline而不#define使用constconstintm=10;intn=m;上述代码在C中,编译器会先到m的内存中取出数据,再赋值给n;但在C++中,会直接将10赋值给n。C++的常量更类似于#define,是一个替换过程。#define经常不被认为是语言的一部分。define本......
  • 华为OD机试-E卷,100分 - 最小的调整次数特异性双端队列Java & Python& JS & C++ & C
    最新华为OD机试题目描述有一个特异性的双端队列,该队列可以从头部或尾部添加数据,但是只能从头部移出数据。小A依次执行2n个指令往队列中添加数据和移出数据。其中n个指令是添加数据(可能从头部添加、也可能从尾部添加),依次添加1到n;n个指令是移出数据。现在要求移除数据的顺......
  • 华为OD机试-E卷100分 -货币单位换算Java & Python& JS & C++ & C
    最新华为OD机试题目描述记账本上记录了若干条多国货币金额,需要转换成人民币分(fen),汇总后输出。每行记录一条金额,金额带有货币单位,格式为数字+单位,可能是单独元,或者单独分,或者元与分的组合。要求将这些货币全部换算成人民币分(fen)后进行汇总,汇总结果仅保留整数,小数部分舍弃......
  • 学生信息管理系统标准版
    0.绪论学生信息管理系统需要包含增加学生信息,删除学生信息,查找学生信息,更新学生信息,查看学生信息,对学生信息进行排序等。下面进行逐一介绍。1.头文件1.1.头文件守卫#ifndefSTULIB_H#defineSTULIB_H#define_CRT_SECURE_NO_WARNINGS#endif1.2.头文件#include<s......
  • (开题报告)django+vue旅游管理系统论文+源码
    本系统(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。系统程序文件列表开题报告内容一、选题背景关于旅游管理系统的研究,现有研究主要以传统的开发模式为主,专门针对django+vue技术组合开发旅游管理系统的研究较少。在旅游市场蓬勃......
  • 基于SpringBoot + Vue的宾馆客房管理系统(角色:用户、员工、管理员)
    文章目录前言一、详细操作演示视频二、具体实现截图三、技术栈1.前端-Vue.js2.后端-SpringBoot3.数据库-MySQL4.系统架构-B/S四、系统测试1.系统测试概述2.系统功能测试3.系统测试结论五、项目代码参考六、数据库代码参考七、项目论文示例结语前言......
  • C++中的内联函数:深入解析与应用
    C++中的内联函数:深入解析与应用在C++编程中,内联函数(InlineFunction)是一种优化手段,旨在通过在编译时将函数调用替换为函数体本身,以减少函数调用的开销,从而提高程序的执行效率。内联函数的使用需要谨慎,因为它虽然能带来性能上的提升,但也可能导致代码膨胀和编译时间增加。本......
  • 基于SpringBoot+Vue的广东省家庭旅游接待信息管理系统(源码+LW+调试文档+讲解)
    项目简介背景随着旅游业的蓬勃发展,家庭旅游在广东省越来越受欢迎。家庭旅游接待作为一种特色旅游模式,为游客提供了独特的体验,但目前在信息管理方面存在诸多不足。一方面,家庭旅游接待户信息分散,包括接待能力、服务项目、价格、地理位置等信息缺乏统一的收集和整理渠道,游客......
  • 基于SpringBoot+Vue的公司考勤管理系统(源码+LW+调试文档+讲解)
    项目简介背景在公司日常运营中,考勤管理是人力资源管理的重要组成部分。随着公司规模的扩大和业务模式的多样化,传统的考勤方式(如人工签到、纸质打卡)暴露出诸多问题。一方面,这些方式效率低下,容易造成员工上下班打卡拥堵,浪费时间。另一方面,数据统计和分析困难,考勤数据易丢失......