C++建立两个磁盘文件f1.dat,f2.dat,编写程序实现以下工作:(1)从键盘输入学生姓名,学号,三科成绩,存放在一个磁盘文件中(3)从f1.dat中读入数据,将它们按从小到大的顺序存放到f2.dat(不保留原来的数据)*/
时间: 2024-05-06 19:18:42 浏览: 68
以下是实现上述功能的C++代码:
```c++
#include <iostream>
#include <fstream>
#include <string>
#include <algorithm>
using namespace std;
// 定义学生类
class Student {
public:
string name; // 姓名
int id; // 学号
int score1; // 第一科成绩
int score2; // 第二科成绩
int score3; // 第三科成绩
// 重载小于运算符,用于排序
bool operator<(const Student& other) const {
return id < other.id;
}
};
int main() {
ofstream outfile("f1.dat", ios::out | ios::binary); // 打开f1.dat文件
if (!outfile) {
cout << "Failed to open f1.dat!" << endl;
return -1;
}
// 从键盘输入学生信息并写入f1.dat文件
Student s;
cout << "Enter student's name, id and three scores:" << endl;
while (cin >> s.name >> s.id >> s.score1 >> s.score2 >> s.score3) {
outfile.write(reinterpret_cast<const char*>(&s), sizeof(s));
}
outfile.close(); // 关闭文件
ifstream infile("f1.dat", ios::in | ios::binary); // 打开f1.dat文件
if (!infile) {
cout << "Failed to open f1.dat!" << endl;
return -1;
}
// 读取f1.dat文件中的学生信息
Student students[100];
int count = 0;
while (infile.read(reinterpret_cast<char*>(&students[count]), sizeof(Student))) {
count++;
}
infile.close(); // 关闭文件
// 对学生信息按学号从小到大排序
sort(students, students + count);
ofstream outfile2("f2.dat", ios::out | ios::binary); // 打开f2.dat文件
if (!outfile2) {
cout << "Failed to open f2.dat!" << endl;
return -1;
}
// 将排序后的学生信息写入f2.dat文件
for (int i = 0; i < count; i++) {
outfile2.write(reinterpret_cast<const char*>(&students[i]), sizeof(Student));
}
outfile2.close(); // 关闭文件
cout << "Done." << endl;
return 0;
}
```
该程序先打开f1.dat文件,从键盘输入学生信息并写入f1.dat文件中。然后再打开f1.dat文件,读取文件中的学生信息,并按学号从小到大排序。最后将排序后的学生信息写入f2.dat文件中。
阅读全文