用C++写一个学生信息管理系统,要求用到类、vector容器,并创建txt文件保存数据,并从中读取数据,再创建txt文件前,先判断磁盘有没有txt文件,如果没有则创建,如果有则添加数据至txt文件末端,学生信息包括学号、姓名、性别、班级、家庭地址
时间: 2023-10-30 12:05:57 浏览: 136
500行单文件学生信息管理系统,c++实现+文件读写+单链表+排序,可直接运行 应付课程设计绝对没问题
5星 · 资源好评率100%
好的,以下是一个简单的学生信息管理系统的实现,满足你的要求:
```c++
#include <iostream>
#include <fstream>
#include <vector>
#include <string>
using namespace std;
// 学生信息类
class Student {
public:
string id; // 学号
string name; // 姓名
string gender; // 性别
string clazz; // 班级
string address; // 家庭地址
// 构造函数
Student(string id, string name, string gender, string clazz, string address) {
this->id = id;
this->name = name;
this->gender = gender;
this->clazz = clazz;
this->address = address;
}
// 打印学生信息
void printInfo() {
cout << "学号:" << id << endl;
cout << "姓名:" << name << endl;
cout << "性别:" << gender << endl;
cout << "班级:" << clazz << endl;
cout << "家庭地址:" << address << endl;
}
};
// 学生信息管理类
class StudentManager {
private:
vector<Student> students; // 存储学生信息的容器
string filename; // 数据保存的文件名
public:
// 构造函数,传入数据保存的文件名
StudentManager(string filename) {
this->filename = filename;
readData(); // 读取已有数据
}
// 添加学生信息
void addStudent(Student student) {
students.push_back(student); // 将学生信息添加到容器中
saveData(); // 保存数据到文件
}
// 显示所有学生信息
void showAllStudents() {
if (students.size() == 0) {
cout << "学生信息为空!" << endl;
} else {
for (int i = 0; i < students.size(); i++) {
students[i].printInfo(); // 调用学生信息类的打印函数
cout << endl;
}
}
}
private:
// 从文件中读取数据
void readData() {
ifstream ifs(filename); // 打开文件
if (ifs.is_open()) {
string line;
while (getline(ifs, line)) {
vector<string> info = split(line, '\t'); // 将每一行数据按照制表符分割成多个字符串
if (info.size() == 5) {
Student s(info[0], info[1], info[2], info[3], info[4]); // 创建学生信息对象
students.push_back(s); // 将学生信息对象添加到容器中
}
}
ifs.close(); // 关闭文件
}
}
// 将数据保存到文件中
void saveData() {
ofstream ofs(filename, ios::app); // 打开文件(ios::app 表示向文件末尾添加数据)
if (ofs.is_open()) {
for (int i = 0; i < students.size(); i++) {
Student s = students[i];
ofs << s.id << "\t" << s.name << "\t" << s.gender << "\t" << s.clazz << "\t" << s.address << endl; // 将学生信息写入文件
}
ofs.close(); // 关闭文件
}
}
// 按照指定字符分割字符串
vector<string> split(string str, char delimiter) {
vector<string> result;
int start = 0;
int end = str.find(delimiter);
while (end != string::npos) {
result.push_back(str.substr(start, end - start));
start = end + 1;
end = str.find(delimiter, start);
}
result.push_back(str.substr(start));
return result;
}
};
int main() {
StudentManager sm("students.txt"); // 创建学生信息管理对象
char choice;
do {
cout << "请选择操作:" << endl;
cout << "1. 添加学生信息" << endl;
cout << "2. 显示所有学生信息" << endl;
cout << "3. 退出" << endl;
cin >> choice;
switch (choice) {
case '1': {
string id, name, gender, clazz, address;
cout << "请输入学生信息:" << endl;
cout << "学号:";
cin >> id;
cout << "姓名:";
cin >> name;
cout << "性别:";
cin >> gender;
cout << "班级:";
cin >> clazz;
cout << "家庭地址:";
cin >> address;
Student s(id, name, gender, clazz, address); // 创建学生信息对象
sm.addStudent(s); // 添加学生信息到容器中
break;
}
case '2': {
sm.showAllStudents(); // 显示所有学生信息
break;
}
}
} while (choice != '3');
return 0;
}
```
这个程序中,我们使用了类 `Student` 来存储学生的信息,使用了类 `StudentManager` 来管理学生信息。学生信息存储在一个 `vector<Student>` 容器中,数据保存在一个 txt 文件中。在程序运行时,会先读取已有数据,然后根据用户选择进行添加或显示操作,最后退出程序时会将最新的数据保存到文件中。
阅读全文