用文件操作实现学生成绩管理系统中的存盘功能。在上一次学生成绩管理系统的基础上增加数据的存盘和加载功能,实现用户输入数据的保存及下次开启程序后的加载功能。要求分别按以下文件格式存放:1)、文本文件;2)、二进制文件。且要求输入的学生信息中至少有一条你自己的信息(包括学号和姓名)。
时间: 2024-03-07 13:48:20 浏览: 22
好的,这是一个涉及文件操作的学生成绩管理系统,需要实现存盘和加载功能,分别采用文本文件和二进制文件两种格式进行存储。
首先,我们需要定义学生信息的数据结构,包括学号、姓名、语文、数学、英语三门科目的成绩:
```c++
struct Student {
string id; // 学号
string name; // 姓名
int chinese; // 语文成绩
int math; // 数学成绩
int english; // 英语成绩
};
```
然后,我们需要实现以下两个函数,分别用于将学生信息存储到文件和从文件中读取学生信息:
```c++
void saveToFile(const string& filename, const vector<Student>& students) {
ofstream out(filename); // 打开输出文件流
if (!out.is_open()) {
cerr << "Error: failed to open file " << filename << " for writing!" << endl;
return;
}
for (const auto& student : students) {
out << student.id << "," << student.name << ","
<< student.chinese << "," << student.math << "," << student.english << endl;
}
out.close(); // 关闭输出文件流
}
vector<Student> loadFromFile(const string& filename) {
vector<Student> students; // 存储学生信息的容器
ifstream in(filename); // 打开输入文件流
if (!in.is_open()) {
cerr << "Error: failed to open file " << filename << " for reading!" << endl;
return students;
}
string line;
while (getline(in, line)) {
stringstream ss(line);
string id, name;
int chinese, math, english;
getline(ss, id, ',');
getline(ss, name, ',');
ss >> chinese >> math >> english;
students.push_back({id, name, chinese, math, english});
}
in.close(); // 关闭输入文件流
return students;
}
```
其中,`saveToFile` 函数将学生信息存储到指定的文件中,每行包含一个学生的信息,格式为:学号,姓名,语文成绩,数学成绩,英语成绩。`loadFromFile` 函数从指定的文件中读取学生信息,并返回一个包含所有学生信息的容器。
最后,我们需要在主函数中调用这两个函数,实现存盘和加载功能。具体实现如下:
```c++
int main() {
vector<Student> students;
// 读取文件中的学生信息
students = loadFromFile("students.txt");
// 添加一条新的学生信息
students.push_back({"20210001", "张三", 90, 80, 85});
// 将学生信息存储到文件中
saveToFile("students.txt", students);
return 0;
}
```
这样,我们就实现了将学生信息存储到文件中并从文件中读取的功能。需要注意的是,不同的文件格式需要采用不同的方式进行读写操作,具体细节可以参考 C++ 标准库中的相关文档。