学生信息管理系统 设计一个管理系统实现对学生基本信息(至少包括姓名,学号,性别,出生日期,宿舍号, 龄(通过计算得到)的管理;具有数据的录入、显示、保存、查询(按学号或姓名查询)、 修改和删除等功能。
时间: 2024-01-12 20:04:59 浏览: 26
好的,这个问题可以分为几个步骤来解决:
1. 定义学生类(Student),包括姓名、学号、性别、出生日期、宿舍号等属性,以及计算龄的方法。
2. 设计一个管理系统类(StudentManager),实现数据的录入、显示、保存、查询、修改和删除等功能。
3. 在主函数中实例化一个学生管理系统对象,通过调用管理系统类的方法实现对学生信息的管理。
下面是一个简单的实现示例:
```c++
#include <iostream>
#include <fstream>
#include <vector>
#include <algorithm>
#include <ctime>
#include <cstdlib>
using namespace std;
class Student {
public:
Student(string n, string id, string g, string b, string r) : name(n), id(id), gender(g), birthday(b), room(r) {}
string getName() const { return name; }
string getId() const { return id; }
string getGender() const { return gender; }
string getBirthday() const { return birthday; }
string getRoom() const { return room; }
int getAge() const {
time_t now = time(0);
struct tm birth = {0};
strptime(birthday.c_str(), "%Y-%m-%d", &birth);
return (now - mktime(&birth)) / (365 * 24 * 60 * 60);
}
friend ostream& operator<< (ostream& os, const Student& student) {
os << student.name << "\t" << student.id << "\t" << student.gender << "\t" << student.birthday << "\t" << student.room << "\t" << student.getAge();
return os;
}
private:
string name;
string id;
string gender;
string birthday;
string room;
};
class StudentManager {
public:
void loadData() {
ifstream fin("students.txt");
if (!fin) return;
string n, id, g, b, r;
while (fin >> n >> id >> g >> b >> r) {
students.push_back(Student(n, id, g, b, r));
}
fin.close();
}
void saveData() {
ofstream fout("students.txt");
for (const auto& s : students) {
fout << s.getName() << "\t" << s.getId() << "\t" << s.getGender() << "\t" << s.getBirthday() << "\t" << s.getRoom() << endl;
}
fout.close();
}
void addStudent() {
string n, id, g, b, r;
cout << "请输入学生信息(姓名 学号 性别 出生日期 宿舍号):" << endl;
cin >> n >> id >> g >> b >> r;
students.push_back(Student(n, id, g, b, r));
cout << "添加成功!" << endl;
}
void showStudents() {
cout << "姓名\t学号\t性别\t出生日期\t宿舍号\t年龄" << endl;
for (const auto& s : students) {
cout << s << endl;
}
}
void queryStudent() {
string q;
cout << "请输入学号或姓名:" << endl;
cin >> q;
auto it = find_if(students.begin(), students.end(), [q](const Student& s) {return s.getName() == q || s.getId() == q; });
if (it != students.end()) {
cout << "姓名\t学号\t性别\t出生日期\t宿舍号\t年龄" << endl;
cout << *it << endl;
}
else {
cout << "未找到该学生!" << endl;
}
}
void modifyStudent() {
string q;
cout << "请输入要修改的学生学号或姓名:" << endl;
cin >> q;
auto it = find_if(students.begin(), students.end(), [q](const Student& s) {return s.getName() == q || s.getId() == q; });
if (it != students.end()) {
cout << "请输入修改后的信息(姓名 学号 性别 出生日期 宿舍号):" << endl;
cin >> it->name >> it->id >> it->gender >> it->birthday >> it->room;
cout << "修改成功!" << endl;
}
else {
cout << "未找到该学生!" << endl;
}
}
void deleteStudent() {
string q;
cout << "请输入要删除的学生学号或姓名:" << endl;
cin >> q;
auto it = find_if(students.begin(), students.end(), [q](const Student& s) {return s.getName() == q || s.getId() == q; });
if (it != students.end()) {
students.erase(it);
cout << "删除成功!" << endl;
}
else {
cout << "未找到该学生!" << endl;
}
}
private:
vector<Student> students;
};
int main() {
StudentManager manager;
manager.loadData();
int choice;
do {
cout << "请选择操作:\n1. 录入学生信息\n2. 显示学生信息\n3. 查询学生信息\n4. 修改学生信息\n5. 删除学生信息\n0. 退出系统" << endl;
cin >> choice;
switch (choice) {
case 1:
manager.addStudent();
break;
case 2:
manager.showStudents();
break;
case 3:
manager.queryStudent();
break;
case 4:
manager.modifyStudent();
break;
case 5:
manager.deleteStudent();
break;
case 0:
manager.saveData();
break;
default:
cout << "输入有误,请重新输入!" << endl;
break;
}
} while (choice != 0);
return 0;
}
```
这个示例实现了学生信息的录入、显示、保存、查询、修改和删除等功能。你可以根据自己的需求进行修改和扩展。