在上述代码的基础上,增加以下功能: 能够按任意一门课程的成绩,对学生信息进行排序; 能够将排序的结果写入到文件(students.txt)中; 程序启动时,能够自动从文件(students.txt)中的读取学生的信息 不省略代码 写出全部
时间: 2024-02-18 13:06:22 浏览: 30
好的,以下是对应的代码实现:
1. 按任意一门课程的成绩,对学生信息进行排序
```cpp
struct Student {
int id;
int scores[5];
double avgScore;
};
bool cmp(const Student& a, const Student& b, int course) {
return a.scores[course - 1] > b.scores[course - 1];
}
void sortStudents(Student students[], int size, int course) {
for (int i = 0; i < size - 1; i++) {
for (int j = 0; j < size - i - 1; j++) {
if (cmp(students[j], students[j + 1], course)) {
Student temp = students[j];
students[j] = students[j + 1];
students[j + 1] = temp;
}
}
}
}
```
2. 将排序的结果写入到文件(students.txt)中
```cpp
void writeStudentsToFile(Student students[], int size, const char* filename) {
ofstream outfile(filename);
if (!outfile.is_open()) {
cout << "Error opening file!" << endl;
return;
}
for (int i = 0; i < size; i++) {
outfile << students[i].id << " ";
for (int j = 0; j < 5; j++) {
outfile << students[i].scores[j] << " ";
}
outfile << students[i].avgScore << endl;
}
outfile.close();
}
```
3. 程序启动时,能够自动从文件(students.txt)中读取学生的信息
```cpp
void readStudentsFromFile(Student students[], int& size, const char* filename) {
ifstream infile(filename);
if (!infile.is_open()) {
cout << "Error opening file!" << endl;
return;
}
int id, score;
while (infile >> id) {
students[size].id = id;
double sum = 0;
for (int i = 0; i < 5; i++) {
infile >> score;
students[size].scores[i] = score;
sum += score;
}
students[size].avgScore = sum / 5.0;
size++;
}
infile.close();
}
```
完整代码如下: