用C++写有关学生成绩管理系统的代码,并详细解释
时间: 2024-03-07 11:51:50 浏览: 22
好的,我可以为您提供一个基本的C++学生成绩管理系统代码,并解释一下它的实现。
```c++
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
struct Student {
string name;
int id;
double score;
};
bool cmp(Student a, Student b) {
return a.score > b.score;
}
int main() {
vector<Student> students;
int n, option;
string name;
int id;
double score;
while (true) {
cout << "1. 添加学生" << endl;
cout << "2. 删除学生" << endl;
cout << "3. 修改学生成绩" << endl;
cout << "4. 显示所有学生" << endl;
cout << "5. 按成绩排序" << endl;
cout << "6. 退出" << endl;
cout << "请选择操作:";
cin >> option;
switch (option) {
case 1:
cout << "请输入学生姓名、学号、成绩(用空格分隔):";
cin >> name >> id >> score;
students.push_back({name, id, score});
break;
case 2:
cout << "请输入需要删除的学生学号:";
cin >> id;
for (auto it = students.begin(); it != students.end(); it++) {
if (it->id == id) {
students.erase(it);
break;
}
}
break;
case 3:
cout << "请输入需要修改成绩的学生学号和新成绩(用空格分隔):";
cin >> id >> score;
for (auto it = students.begin(); it != students.end(); it++) {
if (it->id == id) {
it->score = score;
break;
}
}
break;
case 4:
cout << "姓名\t学号\t成绩" << endl;
for (auto student : students) {
cout << student.name << "\t" << student.id << "\t" << student.score << endl;
}
break;
case 5:
sort(students.begin(), students.end(), cmp);
cout << "姓名\t学号\t成绩" << endl;
for (auto student : students) {
cout << student.name << "\t" << student.id << "\t" << student.score << endl;
}
break;
case 6:
cout << "已退出" << endl;
return 0;
default:
cout << "非法操作,请重新输入" << endl;
break;
}
}
return 0;
}
```
这个程序使用了结构体`Student`来表示每个学生的姓名、学号和成绩。它使用了`vector`容器来存储所有的学生信息,并通过循环菜单来实现各种操作。具体实现如下:
1. 添加学生:用户输入学生的姓名、学号和成绩,将学生信息加入到`vector`容器中。
2. 删除学生:用户输入需要删除的学生学号,遍历`vector`容器,找到相应的学生信息并删除。
3. 修改学生成绩:用户输入需要修改成绩的学生学号和新成绩,遍历`vector`容器,找到相应的学生信息并修改成绩。
4. 显示所有学生:遍历`vector`容器,显示所有学生的姓名、学号和成绩。
5. 按成绩排序:使用STL标准库中的sort函数,按学生成绩从高到低排序,并显示排序后的学生信息。
6. 退出:退出程序。
这个程序还有一些需要改进的地方,例如输入的数据没有进行验证,可能会导致程序崩溃;另外,如果学生的学号不是唯一的,删除和修改操作可能会出现问题。希望这个例子能够帮助您理解学生成绩管理系统的实现。