这是我在以前面试中遇到的一个问题, 面试官说:你能现场实现一个学生管理系统吗,实现对学生的增删查改这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;
}
}