C++用类建立两个磁盘文件f1.dat,f2.dat,编写程序实现以下工作:(1)从键盘输入学生姓名,学号,三科成绩,存放在一个磁盘文件中(3)从f1.dat中读入数据,将它们按从小到大的顺序存放到f2.dat(不保留原来的数据)*/
时间: 2024-05-10 10:19:18 浏览: 104
以下是一个实现上述功能的C++程序:
```
#include <iostream>
#include <fstream>
#include <string>
#include <algorithm>
using namespace std;
// 定义学生类
class Student {
public:
string name;
int id;
float score1, score2, score3;
};
// 比较函数,用于按照学号从小到大排序
bool compare(const Student& s1, const Student& s2) {
return s1.id < s2.id;
}
int main() {
// 打开文件f1.dat
ofstream fout("f1.dat", ios::binary);
if (!fout) {
cout << "Failed to open f1.dat" << endl;
return 1;
}
// 从键盘输入学生姓名、学号、三科成绩,并存储到文件f1.dat中
int n;
cout << "Enter the number of students: ";
cin >> n;
for (int i = 0; i < n; ++i) {
Student s;
cout << "Enter the name of student " << i + 1 << ": ";
cin >> s.name;
cout << "Enter the id of student " << i + 1 << ": ";
cin >> s.id;
cout << "Enter the score1 of student " << i + 1 << ": ";
cin >> s.score1;
cout << "Enter the score2 of student " << i + 1 << ": ";
cin >> s.score2;
cout << "Enter the score3 of student " << i + 1 << ": ";
cin >> s.score3;
fout.write((char*)&s, sizeof(Student));
}
fout.close();
// 打开文件f1.dat和f2.dat
ifstream fin1("f1.dat", ios::binary);
if (!fin1) {
cout << "Failed to open f1.dat" << endl;
return 1;
}
ofstream fout2("f2.dat", ios::binary);
if (!fout2) {
cout << "Failed to open f2.dat" << endl;
return 1;
}
// 从f1.dat中读入数据,并按照学号从小到大排序,然后存储到f2.dat中
Student students[n];
for (int i = 0; i < n; ++i) {
fin1.read((char*)&students[i], sizeof(Student));
}
sort(students, students+n, compare);
for (int i = 0; i < n; ++i) {
fout2.write((char*)&students[i], sizeof(Student));
}
fin1.close();
fout2.close();
return 0;
}
```
程序首先打开文件f1.dat并从键盘输入学生信息,然后将学生信息存储到f1.dat中。接着程序打开文件f1.dat和f2.dat,从f1.dat中读入数据并按照学号从小到大排序,最后将排序后的数据存储到f2.dat中。
需要注意的是,我们在此使用了二进制文件读写,因为学生类中包含字符串类型的成员变量,而文本文件读写无法直接处理字符串类型的数据。
阅读全文