用c++实现学员需要设计一个学员信息表,并在主函数中读取输入,根据输入的内容作出相应的动作。 输入共有4种,格式如下: A <姓名> <分数>,向信息表的末尾添加一条记录,内容为<姓名> <分数>,分数均为整数。 注意:如果表中已有同一个人的记录,那就只更新分数。 R <姓名>,删除表中指定姓名的条目,不存在则不做处理。 P,按照<姓名> <分数>的格式打印整个信息表,每条记录占1行。如果表为空,则输出一行[空]。 S,将整个信息表的数据按照分数的降序排序。 注意 :为了保证排序结果稳定,输入的数据保证不会有两条记录有相同的分数。 每种格式的输入占一行,测试有多行输入。详细见测试说明。 测试说明 测试输入: A 小明 89 A 小张 91 A 小李 67 P R 小李 S P 预期输出: 小明 89 小张 91 小李 67 小张 91 小明 89
时间: 2024-02-15 09:02:13 浏览: 50
好的,这是一个学员信息管理系统的问题,我可以帮你解答。以下是C++代码实现:
```c++
#include <iostream>
#include <vector>
#include <algorithm>
#include <string>
using namespace std;
struct Record {
string name;
int score;
};
void addRecord(string name, int score, vector<Record>& records) {
for (int i = 0; i < records.size(); i++) {
if (records[i].name == name) {
records[i].score = score;
return;
}
}
Record newRecord = {name, score};
records.push_back(newRecord);
}
void removeRecord(string name, vector<Record>& records) {
for (int i = 0; i < records.size(); i++) {
if (records[i].name == name) {
records.erase(records.begin() + i);
return;
}
}
}
void printRecords(vector<Record>& records) {
if (records.size() == 0) {
cout << "[空]" << endl;
} else {
for (int i = 0; i < records.size(); i++) {
cout << records[i].name << " " << records[i].score << endl;
}
}
}
bool compareRecords(const Record& r1, const Record& r2) {
return r1.score > r2.score;
}
void sortRecords(vector<Record>& records) {
sort(records.begin(), records.end(), compareRecords);
}
int main() {
vector<Record> records;
string command, name;
int score;
while (cin >> command) {
if (command == "A") {
cin >> name >> score;
addRecord(name, score, records);
} else if (command == "R") {
cin >> name;
removeRecord(name, records);
} else if (command == "P") {
printRecords(records);
} else if (command == "S") {
sortRecords(records);
}
}
return 0;
}
```
你可以运行这段代码,输入测试样例中的内容,即可得到预期的输出。