面试题:实现学生管理系统

发布于:2025-03-16 ⋅ 阅读:(36) ⋅ 点赞:(0)

        这是我在以前面试中遇到的一个问题, 面试官说:你能现场实现一个学生管理系统吗,实现对学生的增删查改这4个功能

        当时写了半天没写出来.....,所以我在这里记录一下

10分钟实现学生管理系统并实现 增删查改 功能

#include <iostream>
#include <vector>
#include <string>
#include <algorithm>

// 学生类
struct Student {
    int id;// 学号
    std::string name;// 名字
    double score;// 分数
    // 打印学生信息
    void print() const {
        std::cout << "ID: " << id << ", Name: " << name << ", Score: " << score << std::endl;
    }
};

// 管理员类
class Admin {
public:
    // 添加学生
    void addStudent(int id, const std::string& name, double score) {
        students.push_back({ id, name, score });// 会调用默认的构造函数生成匿名学生
        std::cout << "添加学生成功!" << std::endl;
    }
    // 删除学生
    void deleteStudent(int id) {
        auto it = std::remove_if(students.begin(), students.end(), [id](const Student& s) {
            return s.id == id;
         });
        if (it != students.end()) {
            students.erase(it,students.end());
            std::cout << "删除学生成功!" << std::endl;
        }
        else {
            std::cout << "学生不存在!" << std::endl;
        }
    }
    // 查找学生
    void findStudent(int id) const {
        auto it = std::find_if(students.begin(), students.end(), [id](const Student& s) {
            return s.id == id;
        });

        if (it != students.end()) {
            it->print();// 调用学生的打印
        }
        else {
            std::cout << "学生不存在!" << std::endl;
        }
    }
    // 更新学生
    void updateStudent(int id, const std::string& newName, double newScore) {
        auto it = std::find_if(students.begin(), students.end(), [id](const Student& s) {
            return s.id == id;
         });

        if (it != students.end()) {
            it->name = newName;
            it->score = newScore;
            std::cout << "更新学生成功!" << std::endl;
        }
        else {
            std::cout << "学生不存在!" << std::endl;
        }
    }
    // 列出所有学生信息
    void listAllStudents() const {
        for (const auto& student : students) {
            student.print();
        }
    }
private:
    std::vector<Student> students;//用数组存储学生
};

int main() {
    Admin manager;
    std::string name;
    int id = 0;
    double score = 0.0;

    int choice = 0;
    while (true) {
        std::cout << "1. 添加学生" << std::endl;
        std::cout << "2. 删除学生" << std::endl;
        std::cout << "3. 查找学生" << std::endl;
        std::cout << "4. 更新学生" << std::endl;
        std::cout << "5. 列出所有学生信息" << std::endl;
        std::cout << "6. 退出" << std::endl;
        std::cout << "Enter your choice: ";
        std::cin >> choice;

        switch (choice) {
        case 1:
            std::cout << "请输入学号 姓名 分数";
            std::cin >> id >> name >> score;
            manager.addStudent(id, name, score);
            break;
        case 2:
            std::cout << "请输入要删除学生的学号";
            std::cin >> id;
            manager.deleteStudent(id);
            break;
        case 3:
            std::cout << "请输入要查找学生的学号";
            std::cin >> id;
            manager.findStudent(id);
            break;
        case 4:
            std::cout << "请输入要更新学生的学号,姓名,分数";
            std::cin >> id >> name >> score;
            manager.updateStudent(id, name, score);
            break;
        case 5:
            manager.listAllStudents();
            break;
        case 6:
            return 0;// 表正常退出
        default:
            std::cout << "输入不合法,请重新输入" << std::endl;
        }
    }
    return 0;
}

remove_if

       remove_if是 C++ <algorithm> 头文件中的一个算法, 将不符合条件的元素移动到前面,并返回新的结束迭代器,需要配合容器的 erase() 方法来真正删除元素(再删除一段访问)

#include <algorithm>  // std::remove_if
#include <vector>     // std::vector
#include <iostream>   // std::cout
using namespace std;

int main() {
    std::vector<int> vec = {1,3, 4, 5, 6};

    auto end_begin =  std::remove_if(vec.begin(), vec.end(), [](int x){
        return x % 2 == 0;//移除所有偶数
    });
    vec.erase(end_begin, vec.end());// 删除一段访问

    for (int n : vec) {
        std::cout << n << " ";  // 输出:1 3 5
    }
    cout << endl;
}

find_if

        find_if 是 C++ <algorithm> 头文件中的一个算法,用于查找容器中第一个符合指定条件的元素,并返回指向该元素的迭代器。如果找不到,则返回 end() 迭代器 

#include <iostream>
#include <vector>
#include <algorithm> // std::find_if

int main() {
    std::vector<int> vec = {1, 3, 5, 4, 6, 7};

    auto it = std::find_if(vec.begin(), vec.end(), [](int x){
        return x % 2 == 0;
    });

    if (it != vec.end()) {
        std::cout << "找到第一个偶数:" << *it << std::endl; // 输出:找到第一个偶数:4
    } else {
        std::cout << "未找到偶数" << std::endl;
    }
}