用C++实现,*问题描述:通过此系统可以实现如下功能:(1)用户登录,用户分为管理员和新生两种,不同角色功能不同。(2)管理员模块功能:管理员可以添加学生用户,修改学生信息,查询学生信息,删除学生用户等操作,并能够汇总新生注册人数。(3)学生模块功能:学生可以登录后,实现注册报到、查看或修改个人信息、查看报到状态、查看宿舍和班级情况、查看注册报到流程。 要求:新生数据文件(包括学号、身份证号、姓名等个人信息)读写操作通过文件实现
时间: 2024-03-19 18:42:39 浏览: 55
好的,这是一个较为复杂的系统,我可以提供基本的思路和代码框架,但具体实现需要根据实际情况进行修改和完善。
首先,我们需要定义基本的数据结构,包括学生和管理员的信息。可以用类来实现,例如:
```cpp
class Student {
public:
string id; // 学号
string name; // 姓名
string idCard; // 身份证号
// 其他个人信息
// 从文件中读入学生信息
void readFromFile(ifstream& file);
// 将学生信息写入文件
void writeToFile(ofstream& file);
};
class Admin {
public:
string username; // 用户名
string password; // 密码
// 其他个人信息
// 从文件中读入管理员信息
void readFromFile(ifstream& file);
// 将管理员信息写入文件
void writeToFile(ofstream& file);
};
```
然后,我们需要实现登录功能。可以在程序启动时,读取已经保存的管理员和学生信息,然后根据用户输入的用户名和密码进行验证。验证成功后,可以根据用户角色跳转到相应的功能界面。
```cpp
// 读入管理员信息
void readAdminsFromFile(vector<Admin>& admins) {
ifstream file("admins.txt");
if (!file.is_open()) {
// 文件不存在或无法打开
return;
}
while (!file.eof()) {
Admin admin;
admin.readFromFile(file);
if (admin.username != "") {
admins.push_back(admin);
}
}
file.close();
}
// 读入学生信息
void readStudentsFromFile(vector<Student>& students) {
ifstream file("students.txt");
if (!file.is_open()) {
// 文件不存在或无法打开
return;
}
while (!file.eof()) {
Student student;
student.readFromFile(file);
if (student.id != "") {
students.push_back(student);
}
}
file.close();
}
// 验证管理员和学生的用户名和密码
bool validateAdmin(const string& username, const string& password, const vector<Admin>& admins) {
for (const Admin& admin : admins) {
if (admin.username == username && admin.password == password) {
return true;
}
}
return false;
}
bool validateStudent(const string& id, const string& password, const vector<Student>& students) {
for (const Student& student : students) {
if (student.id == id && student.idCard == password) {
return true;
}
}
return false;
}
// 登录界面
void login(vector<Admin>& admins, vector<Student>& students) {
string username, password;
int role;
cout << "请输入用户名和密码:" << endl;
cin >> username >> password;
cout << "请选择角色(1-管理员,2-学生):" << endl;
cin >> role;
if (role == 1) {
if (validateAdmin(username, password, admins)) {
// 进入管理员功能界面
} else {
cout << "用户名或密码错误!" << endl;
}
} else if (role == 2) {
if (validateStudent(username, password, students)) {
// 进入学生功能界面
} else {
cout << "学号或身份证号错误!" << endl;
}
} else {
cout << "无效的角色选择!" << endl;
}
}
```
接下来,我们需要实现管理员和学生的功能。管理员可以添加、修改、删除和查询学生用户,同时还可以汇总新生注册人数。学生可以实现注册报到、查看或修改个人信息、查看报到状态、查看宿舍和班级情况、查看注册报到流程。
```cpp
// 管理员功能界面
void adminMenu(vector<Student>& students) {
int choice;
while (true) {
cout << "请选择操作(1-添加学生用户,2-修改学生信息,3-查询学生信息,4-删除学生用户,5-汇总新生注册人数,6-返回上一级):" << endl;
cin >> choice;
switch (choice) {
case 1: {
// 添加学生用户
Student student;
// 输入学生信息
students.push_back(student);
break;
}
case 2: {
// 修改学生信息
string id;
cout << "请输入要修改的学生学号:" << endl;
cin >> id;
for (Student& student : students) {
if (student.id == id) {
// 输入修改后的学生信息
break;
}
}
break;
}
case 3: {
// 查询学生信息
string id;
cout << "请输入要查询的学生学号:" << endl;
cin >> id;
for (const Student& student : students) {
if (student.id == id) {
// 输出学生信息
break;
}
}
break;
}
case 4: {
// 删除学生用户
string id;
cout << "请输入要删除的学生学号:" << endl;
cin >> id;
for (vector<Student>::iterator it = students.begin(); it != students.end(); ++it) {
if (it->id == id) {
students.erase(it);
break;
}
}
break;
}
case 5: {
// 汇总新生注册人数
cout << "新生注册人数:" << students.size() << endl;
break;
}
case 6: {
// 返回上一级
return;
}
default: {
cout << "无效的操作!" << endl;
break;
}
}
}
}
// 学生功能界面
void studentMenu(vector<Student>& students) {
string id;
cout << "请输入学号:" << endl;
cin >> id;
for (Student& student : students) {
if (student.id == id) {
int choice;
while (true) {
cout << "请选择操作(1-注册报到,2-查看或修改个人信息,3-查看报到状态,4-查看宿舍和班级情况,5-查看注册报到流程,6-返回上一级):" << endl;
cin >> choice;
switch (choice) {
case 1: {
// 注册报到
// 修改学生信息
break;
}
case 2: {
// 查看或修改个人信息
// 输出学生信息或修改后保存
break;
}
case 3: {
// 查看报到状态
// 输出报到状态
break;
}
case 4: {
// 查看宿舍和班级情况
// 输出宿舍和班级情况
break;
}
case 5: {
// 查看注册报到流程
// 输出注册报到流程
break;
}
case 6: {
// 返回上一级
return;
}
default: {
cout << "无效的操作!" << endl;
break;
}
}
}
}
}
cout << "学号不存在!" << endl;
}
```
最后,我们需要实现文件读写操作,将学生和管理员的信息存储到文件中。可以将每个学生和管理员的信息都存储在一行中,使用特定的分隔符分隔各个字段。例如:
```
// 学生信息文件(students.txt)
20190101|张三|310101199001010101|...
20190102|李四|310101199001010102|...
...
// 管理员信息文件(admins.txt)
admin1|password1|...
admin2|password2|...
...
```
```cpp
// 从文件中读入学生信息
void Student::readFromFile(ifstream& file) {
getline(file, id, '|');
getline(file, name, '|');
getline(file, idCard, '|');
// 读入其他个人信息
}
// 将学生信息写入文件
void Student::writeToFile(ofstream& file) {
file << id << "|" << name << "|" << idCard << "|";
// 写入其他个人信息
file << endl;
}
// 从文件中读入管理员信息
void Admin::readFromFile(ifstream& file) {
getline(file, username, '|');
getline(file, password, '|');
// 读入其他个人信息
}
// 将管理员信息写入文件
void Admin::writeToFile(ofstream& file) {
file << username << "|" << password << "|";
// 写入其他个人信息
file << endl;
}
// 将学生和管理员信息写入文件
void saveToFile(const vector<Student>& students, const vector<Admin>& admins) {
ofstream studentFile("students.txt");
if (studentFile.is_open()) {
for (const Student& student : students) {
student.writeToFile(studentFile);
}
studentFile.close();
}
ofstream adminFile("admins.txt");
if (adminFile.is_open()) {
for (const Admin& admin : admins) {
admin.writeToFile(adminFile);
}
adminFile.close();
}
}
```
以上是一个简单的学生信息管理系统的基本框架和实现思路。当然,具体实现还需要考虑很多细节问题,例如输入验证、错误处理、界面美化等等。希望对你有所帮助!
阅读全文