#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
class Student {
private:
string id; // 学号
string name; // 姓名
char gender; // 性别
double chineseScore; // 语文成绩
double mathScore; // 数学成绩
double englishScore; // 英语成绩
public:
// 构造函数
Student(string id, string name, char gender, double chineseScore, double mathScore, double englishScore)
: id(id), name(name), gender(gender), chineseScore(chineseScore), mathScore(mathScore), englishScore(englishScore) {}
// 获取器函数
string getId() const { return id; }
string getName() const { return name; }
char getGender() const { return gender; }
double getChineseScore() const { return chineseScore; }
double getMathScore() const { return mathScore; }
double getEnglishScore() const { return englishScore; }
// 计算平均成绩
double getAverageScore() const {
return (chineseScore + mathScore + englishScore) / 3.0;
}
// 检查学生是否有不及格科目
bool hasFailed() const {
return chineseScore < 60 || mathScore < 60 || englishScore < 60;
}
};
class StudentManagementSystem {
private:
vector<Student> students; // 学生记录向量
public:
// 添加学生记录函数
void addStudent(const Student& student) {
students.push_back(student);
}
// 显示所有学生记录函数
void displayAllStudents() const {
for (const auto& student : students) {
cout << "学号: " << student.getId() << ", 姓名: " << student.getName() << ", 性别: " << student.getGender()
<< ", 语文: " << student.getChineseScore() << ", 数学: " << student.getMathScore()
<< ", 英语: " << student.getEnglishScore() << endl;
}
}
// 按学号或姓名删除学生记录函数
void deleteStudent(const string& key) {
students.erase(remove_if(students.begin(), students.end(),
[&key](const Student& student) {
return student.getId() == key || student.getName() == key;
}), students.end());
}
// 按学号或姓名查询学生记录函数
void searchStudent(const string& key) const {
for (const auto& student : students) {
if (student.getId() == key || student.getName() == key) {
cout << "学号: " << student.getId() << ", 姓名: " << student.getName() << ", 性别: " << student.getGender()
<< ", 语文: " << student.getChineseScore() << ", 数学: " << student.getMathScore()
<< ", 英语: " << student.getEnglishScore() << endl;
return;
}
}
cout << "未找到学生!" << endl;
}
// 按学号或姓名修改学生记录函数
void modifyStudent(const string& key, const Student& newStudent) {
for (auto& student : students) {
if (student.getId() == key || student.getName() == key) {
student = newStudent;
return;
}
}
cout << "未找到学生!" << endl;
}
// 按平均成绩从高到低排序学生记录函数
void sortStudentsByAverageScore() {
sort(students.begin(), students.end(),
[](const Student& a, const Student& b) {
return a.getAverageScore() > b.getAverageScore();
});
}
// 列出至少有一门课程不及格的学生清单函数
void listFailedStudents() const {
for (const auto& student : students) {
if (student.hasFailed()) {
cout << "学号: " << student.getId() << ", 姓名: " << student.getName() << ", 性别: " << student.getGender()
<< ", 语文: " << student.getChineseScore() << ", 数学: " << student.getMathScore()
<< ", 英语: " << student.getEnglishScore() << endl;
}
}
}
};
int main() {
StudentManagementSystem system;
// 添加样本学生记录
system.addStudent(Student("1001", "Alice", 'F', 85, 90, 88));
system.addStudent(Student("1002", "Bob", 'M', 72, 65, 80));
system.addStudent(Student("1003", "Charlie", 'M', 78, 85, 92));
system.addStudent(Student("1004", "David", 'M', 60, 55, 58));
// 显示所有学生记录
cout << "所有学生:" << endl;
system.displayAllStudents();
// 按学号或姓名删除学生记录
cout << "\n删除学号为1002的学生:" << endl;
system.deleteStudent("1002");
system.displayAllStudents();
// 按学号或姓名查询学生记录
cout << "\n查询学号为1003的学生:" << endl;
system.searchStudent("1003");
// 按学号或姓名修改学生记录
cout << "\n修改姓名为Bob的学生:" << endl;
system.modifyStudent("Bob", Student("1005", "Eve", 'F', 95, 92, 88));
system.displayAllStudents();
// 按平均成绩从高到低排序学生记录
cout << "\n按平均成绩排序学生:" << endl;
system.sortStudentsByAverageScore();
system.displayAllStudents();
// 列出至少有一门课程不及格的学生清单
cout << "\n不及格学生清单:" << endl;
system.listFailedStudents();
return 0;
}