建立两个磁盘文件f1.dat,f2.dat,编写程序实现以下工作:(1)从键盘输入学生姓名,学号,三科成绩,存放在一个磁盘文件中(3)从f1.dat中读入数据,将它们按从小到大的顺序存放到f2.dat(不保留原来的数据)*/
时间: 2023-06-20 14:09:37 浏览: 143
以下是实现以上功能的 C++ 代码:
```cpp
#include <iostream>
#include <fstream>
#include <string>
#include <algorithm>
using namespace std;
// 定义学生结构体
struct Student {
string name;
int id;
int score1;
int score2;
int score3;
};
// 定义比较函数,按照学号从小到大排序
bool cmp(const Student& s1, const Student& s2) {
return s1.id < s2.id;
}
int main() {
// 打开文件f1.dat,以写入方式写入数据
ofstream fout("f1.dat", ios::out | ios::binary);
if (!fout) {
cout << "Cannot open file f1.dat!" << endl;
return 1;
}
// 输入学生信息并写入文件f1.dat
Student student;
cout << "Please input student information:" << endl;
while (cin >> student.name >> student.id >> student.score1 >> student.score2 >> student.score3) {
fout.write(reinterpret_cast<char*>(&student), sizeof(student));
cout << "Input next student information or enter \"exit\" to exit:" << endl;
if (cin.peek() == '\n') {
cin.ignore();
}
string command;
getline(cin, command);
if (command == "exit") {
break;
}
}
fout.close();
// 打开文件f1.dat,以读取方式读取数据
ifstream fin("f1.dat", ios::in | ios::binary);
if (!fin) {
cout << "Cannot open file f1.dat!" << endl;
return 1;
}
// 读取学生信息并存入数组
fin.seekg(0, ios::end);
int size = fin.tellg() / sizeof(Student);
fin.seekg(0, ios::beg);
Student* students = new Student[size];
for (int i = 0; i < size; i++) {
fin.read(reinterpret_cast<char*>(&students[i]), sizeof(students[i]));
}
fin.close();
// 按照学号排序
sort(students, students + size, cmp);
// 打开文件f2.dat,以写入方式写入数据
ofstream fout2("f2.dat", ios::out | ios::binary);
if (!fout2) {
cout << "Cannot open file f2.dat!" << endl;
return 1;
}
// 将排序后的学生信息写入文件f2.dat
for (int i = 0; i < size; i++) {
fout2.write(reinterpret_cast<char*>(&students[i]), sizeof(students[i]));
}
fout2.close();
// 释放动态分配的内存
delete[] students;
return 0;
}
```
首先,我们打开文件f1.dat,以写入方式写入学生信息。在输入信息时,我们通过while循环不断读取输入,直到用户输入“exit”为止。每输入一个学生信息,我们就将它写入文件f1.dat中。
接着,我们打开文件f1.dat,以读取方式读取学生信息。由于我们不知道有多少个学生信息,因此需要先获取文件大小,然后根据文件大小动态分配一个数组来存储学生信息。我们使用read函数来读取文件中的数据,并将它们存入数组中。最后,我们使用sort函数对学生信息按照学号进行排序。
最后,我们打开文件f2.dat,以写入方式将排序后的学生信息写入其中。写入方式和写入文件f1.dat时相同。最后,我们释放动态分配的数组内存,并结束程序。
阅读全文