编写一段程序,从键盘输入学生姓名、学号和语文、数学、英语考试成绩,计算出总成绩,将原有数据和计算出的总成绩存放在磁盘文件result.dat中。将result.dat中的数据读出,按总成绩由高到低排序处理,并将排序后的数据存入新文件sort.dat中。
时间: 2024-12-28 13:32:38 浏览: 16
好的,首先我们需要创建一个结构体来存储学生的个人信息和成绩,然后分别处理输入、输出和排序操作。以下是一个简单的C++程序实现:
```cpp
#include <iostream>
#include <fstream>
#include <string>
#include <vector>
#include <algorithm>
// 定义学生信息结构体
struct Student {
std::string name;
int id;
int chinese;
int math;
int english;
int total_score; // 初始化为0,后续累加
};
void inputData(std::ifstream& inputFile, std::ofstream& outputFile) {
Student student;
while (inputFile >> student.name >> student.id >> student.chinese >> student.math >> student.english) {
student.total_score = student.chinese + student.math + student.english;
outputFile << student.name << " " << student.id << " " << student.total_score << "\n";
}
}
void sortAndOutput(const std::vector<Student>& students, std::ofstream& outputFile) {
std::sort(students.begin(), students.end(), [](const Student& a, const Student& b) { return a.total_score > b.total_score; });
for (const auto& student : students) {
outputFile << student.name << " " << student.id << " " << student.total_score << "\n";
}
}
int main() {
try {
std::ifstream inputFile("result.dat");
std::ofstream outputFile("sort.dat");
if (!inputFile.is_open()) {
std::cout << "Error opening the input file." << std::endl;
return 1;
}
if (!outputFile.is_open()) {
std::cout << "Error creating the output file." << std::endl;
return 1;
}
// 输入数据
inputData(inputFile, outputFile);
// 关闭输入文件并准备排序
inputFile.close();
// 加载已有的学生数据并排序
std::vector<Student> loadedStudents;
std::copy_back_inserter(loadedStudents, std::istream_iterator<Student>(inputFile));
// 排序并输出结果
sortAndOutput(loadedStudents, outputFile);
// 再次关闭输出文件
outputFile.close();
} catch (std::exception& e) {
std::cerr << "An error occurred: " << e.what() << std::endl;
}
return 0;
}
```
这段程序首先打开`result.dat`文件进行输入,读取每个学生的姓名、学号和各科成绩,计算总成绩并写入到`sort.dat`文件中。接着,关闭输入文件后,再从`result.dat`重新加载数据并根据总成绩进行排序,然后将排序后的数据写回`sort.dat`。
**相关问题:**
1. 如何处理文件打开失败的情况?
2. 怎样用C++实现文件内容的读取和写入?
3. 使用`std::sort`时如何提供比较准则?
4. `try-catch`块有什么作用?
阅读全文