学生成绩管理系统c++语言二进制文件读写
时间: 2025-01-01 22:21:19 浏览: 26
### C++ 实现学生成绩管理系统的二进制文件读写
为了实现一个简单的学生成绩管理系统并利用二进制文件进行数据存储,可以基于给定的例子扩展功能。下面展示了一个完整的示例代码,该代码不仅能够保存学生的信息到二进制文件中,还支持从这些文件加载信息。
#### 定义结构体用于表示单个学生的记录
```cpp
#include <iostream>
#include <fstream>
using namespace std;
struct StudentRecord {
char name[20];
char course[15];
int score;
};
```
#### 将多个学生记录写入二进制文件
此部分展示了如何创建若干`StudentRecord`对象并将它们序列化为二进制格式写入磁盘文件[^1]。
```cpp
void writeRecordsToFile(const char* filename, const StudentRecord records[], size_t count) {
ofstream outFile(filename, ios::binary);
if (!outFile) {
cerr << "无法打开输出文件。\n";
exit(EXIT_FAILURE);
}
for (size_t i = 0; i < count; ++i) {
outFile.write(reinterpret_cast<const char*>(&records[i]), sizeof(StudentRecord));
}
outFile.close();
}
```
#### 从二进制文件读取多条学生记录
这段代码说明了怎样反向操作——即从之前创建的二进制文件恢复原始的学生记录数组。
```cpp
bool readRecordsFromFile(const char* filename, vector<StudentRecord>& records) {
ifstream inFile(filename, ios::binary | ios::ate);
if (!inFile.is_open()) {
cerr << "无法打开输入文件。\n";
return false;
}
auto fileSize = static_cast<size_t>(inFile.tellg());
size_t recordCount = fileSize / sizeof(StudentRecord);
records.resize(recordCount);
inFile.seekg(0, ios::beg);
inFile.read(reinterpret_cast<char*>(records.data()), fileSize);
inFile.close();
return true;
}
int main() {
// 创建一些测试用的数据点
StudentRecord students[] = {{"Alice", "Mathematics", 87}, {"Bob", "Physics", 92}};
size_t numStudents = sizeof(students)/sizeof(students[0]);
// 写入数据到文件
writeRecordsToFile("students.dat", students, numStudents);
// 清空原有变量准备接收新读取的数据
vector<StudentRecord> loadedStudents;
bool success = readRecordsFromFile("students.dat", loadedStudents);
if(success){
cout << "成功读取" << loadedStudents.size() << "位同学的成绩:\n";
for(auto& student : loadedStudents){
printf("%s 的 %s 成绩是:%d\n",student.name, student.course, student.score);
}
}else{
cout << "未能正确读取文件中的数据.";
}
return 0;
}
```
通过上述方法,实现了基本的学生成绩管理系统的核心逻辑,包括但不限于定义适当的数据结构来容纳所需信息、编写函数处理二进制I/O以及提供主程序入口验证整个流程的工作情况。
阅读全文