用较老版本的c++stl实现首先读data数据到demo中,然后demo中空出总成绩,主观题总分和客观题总分,再将客观题求和加至客观题总分,主观题同理,最后求出总成绩,按照成绩从高到低排序,然后导出demo的csv文件,要求按照总成绩排全校排名和班级排名
时间: 2024-03-26 19:38:18 浏览: 88
好的,我会尽力回答你的问题。首先,你提出了一个问题:如何用较老版本的C++ STL实现读取数据并计算总成绩,并按成绩从高到低排序,最后导出CSV文件,包括全校排名和班级排名。
以下是一个简单的程序,可以实现你的要求:
```c++
#include <iostream>
#include <fstream>
#include <vector>
#include <string>
#include <algorithm>
using namespace std;
struct Student {
string name;
int scores[5];
int totalScore;
int schoolRank;
int classRank;
};
bool cmp(const Student& a, const Student& b) {
return a.totalScore > b.totalScore;
}
int main() {
vector<Student> students;
ifstream infile("data.csv");
if (!infile.is_open()) {
cout << "Failed to open file!" << endl;
return 0;
}
string line;
getline(infile, line); // skip the first line
while (getline(infile, line)) {
Student student;
student.totalScore = 0;
int pos = line.find(',');
student.name = line.substr(0, pos);
line = line.substr(pos + 1);
for (int i = 0; i < 5; i++) {
pos = line.find(',');
student.scores[i] = stoi(line.substr(0, pos));
student.totalScore += student.scores[i];
line = line.substr(pos + 1);
}
students.push_back(student);
}
infile.close();
sort(students.begin(), students.end(), cmp);
for (int i = 0; i < students.size(); i++) {
students[i].schoolRank = i + 1;
if (i > 0 && students[i].totalScore == students[i - 1].totalScore) {
students[i].schoolRank = students[i - 1].schoolRank;
}
}
for (int i = 0; i < students.size(); i++) {
int classRank = 1;
for (int j = 0; j < students.size(); j++) {
if (students[j].scores[0] == students[i].scores[0] && students[j].scores[1] == students[i].scores[1]) {
students[j].classRank = classRank;
if (students[j].totalScore == students[i].totalScore) {
students[j].schoolRank = students[i].schoolRank;
}
classRank++;
}
}
}
ofstream outfile("demo.csv");
if (!outfile.is_open()) {
cout << "Failed to open file!" << endl;
return 0;
}
outfile << "Name, Score1, Score2, Score3, Score4, Score5, TotalScore, SchoolRank, ClassRank" << endl;
for (int i = 0; i < students.size(); i++) {
outfile << students[i].name << ",";
for (int j = 0; j < 5; j++) {
outfile << students[i].scores[j] << ",";
}
outfile << students[i].totalScore << ",";
outfile << students[i].schoolRank << ",";
outfile << students[i].classRank << endl;
}
outfile.close();
return 0;
}
```
这个程序做了以下几件事情:
1. 打开名为“data.csv”的文件,读取CSV格式的数据。
2. 将每个学生的信息存储在一个名为“Student”的结构体中。
3. 计算每个学生的总成绩,并按照总成绩从高到低排序。
4. 计算每个学生的全校排名和班级排名。
5. 将排序后的信息存储在一个新的CSV文件“demo.csv”中。
需要注意的是,这个程序中使用了STL中的vector、string和sort函数,这些函数在较老版本的C++ STL中也是可用的。
另外,为了方便起见,这个程序将学生的信息存储在一个结构体中。你可以根据实际情况来修改它的成员变量和成员函数。
阅读全文