完成修改学生信息功能 (1)实现输入给定学生学号,修改指定学生部分或全部信息。 (2)实现批量修改,如将“数计学院”修改成“数学与计算机科学学院”处理。 (3)记录修改过程,如修改时间,修改前数据、修改后的数据。 用c++程序编写实现以上内容,要求能在devc++中运行
时间: 2024-09-22 22:07:59 浏览: 37
C++ 学生信息管理系统
4星 · 用户满意度95%
在C++中实现上述的学生信息修改功能,可以采用结构体来存储学生的信息,并利用map或vector等容器来管理学生列表。下面是一个简单的示例代码:
```cpp
#include <iostream>
#include <map>
#include <string>
#include <ctime>
// 定义学生信息结构体
struct Student {
std::string id;
std::string name;
std::string department; // 原始学院名
struct TimeStamp {
time_t beforeModify;
time_t afterModify;
} timestamps;
};
// 存储并管理学生信息的类
class StudentManager {
private:
std::map<std::string, Student> studentList;
public:
void addStudent(const std::string& id, const std::string& name, const std::string& department) {
Student s = {id, name, department};
studentList[id] = s;
updateTimestamp(id);
}
void modifyStudent(const std::string& id, const std::string& newName = "", const std::string& newDepartment = "") {
if (studentList.find(id) != studentList.end()) {
Student& s = studentList[id];
if (!newName.empty())
s.name = newName;
if (!newDepartment.empty())
s.department = newDepartment;
updateTimestamp(id);
}
}
void batchModify(const std::string& oldDepartment, const std::string& newDepartment) {
for (auto& pair : studentList) {
if (pair.second.department == oldDepartment) {
pair.second.department = newDepartment;
updateTimestamp(pair.first);
}
}
}
void printStudent(const std::string& id) const {
const Student& s = studentList.at(id);
std::cout << "ID: " << s.id << ", Name: " << s.name << ", Department: " << s.department
<< ", Last Modified: " << ctime(&s.timestamps.afterModify) << '\n';
}
private:
void updateTimestamp(const std::string& id) {
Student& s = studentList[id];
s.timestamps.afterModify = std::time(nullptr);
// 如果有修改前的数据,则记录修改前的时间,这里假设有一个变量记录了修改前的时间
if (s.timestamps.beforeModify > 0)
s.timestamps.beforeModify = s.timestamps.afterModify - 1;
}
};
int main() {
StudentManager manager;
// 添加学生
manager.addStudent("001", "张三", "数计学院");
// 修改单个学生信息
manager.modifyStudent("001", "李四", "数学与计算机科学学院");
manager.printStudent("001");
// 批量修改部门
manager.batchModify("数计学院", "数学与计算机科学学院");
for (const auto& pair : manager.studentList) {
manager.printStudent(pair.first);
}
return 0;
}
```
注意:此代码仅用于演示如何实现基本的功能,实际应用中可能需要增加错误处理、用户输入验证以及数据库持久化等功能。
阅读全文