C++建立两个磁盘文件f1.dat,f2.dat,编写程序实现以下工作:(1)从键盘输入学生姓名,学号,三科成绩,存放在一个磁盘文件中(3)从f1.dat中读入数据,将它们按从小到大的顺序存放到f2.dat(不保留原来的数据)*/
时间: 2023-06-24 11:05:06 浏览: 470
以下是实现上述功能的C++代码:
```c++
#include <iostream>
#include <fstream>
#include <string>
#include <vector>
#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.is_open()) {
cout << "打开文件f1.dat失败!" << endl;
return 1;
}
// 从键盘输入学生信息,并写入文件f1.dat
cout << "请输入学生信息(姓名 学号 三科成绩):" << endl;
cout << "(输入exit结束输入)" << endl;
vector<Student> students;
while (true) {
Student s;
cin >> s.name;
if (s.name == "exit") {
break;
}
cin >> s.id >> s.score1 >> s.score2 >> s.score3;
students.push_back(s);
fout.write((char*)&s, sizeof(Student));
}
fout.close();
// 打开文件f1.dat和f2.dat
ifstream fin1("f1.dat", ios::in | ios::binary);
if (!fin1.is_open()) {
cout << "打开文件f1.dat失败!" << endl;
return 1;
}
ofstream fout2("f2.dat", ios::out | ios::binary);
if (!fout2.is_open()) {
cout << "打开文件f2.dat失败!" << endl;
return 1;
}
// 读取f1.dat中的学生信息,并按照学号从小到大排序后写入f2.dat
vector<Student> students2;
while (true) {
Student s;
fin1.read((char*)&s, sizeof(Student));
if (fin1.eof()) {
break;
}
students2.push_back(s);
}
sort(students2.begin(), students2.end(), cmp);
for (const auto& s : students2) {
fout2.write((char*)&s, sizeof(Student));
}
// 关闭文件
fin1.close();
fout2.close();
cout << "程序运行完毕!" << endl;
return 0;
}
```
该程序实现了根据输入的学生信息,将其写入文件f1.dat,并从f1.dat中读取学生信息,按照学号从小到大排序后写入f2.dat。其中,学生信息保存在一个结构体Student中,通过vector容器存储多个学生信息。在写入和读取文件时,使用ofstream和ifstream类,以二进制方式打开文件。由于涉及到结构体的读写操作,需要使用(char*)&s的形式进行类型转换。最后,通过sort函数实现排序。
阅读全文