c++实现学生类(学生姓名,学号)、选课记录类(课程号,学生号,成绩)、课程类(课程号,课程名)。实现一个某个学校的学校学生成绩单类(学校名称,多学生,多课程,多人成绩) 1自行初始化学校学生成绩单; 2根据输入的学生姓名 可以得到该学生的所选的课程3根据输入的课程名称可以得到选该课的学生4根据输入的课程名称每一门课程的平均分5根据输入的学号,输出该学生的的平均分6 可以使用vector模板 find模板函数7学生的的平均分大于60的所有学生
时间: 2024-02-18 11:03:50 浏览: 27
好的,下面是C++的实现代码:
```cpp
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
class Student {
public:
Student(string name, int id) : name(name), id(id) {}
string name;
int id;
};
class Course {
public:
Course(int course_id, string course_name) : course_id(course_id), course_name(course_name) {}
int course_id;
string course_name;
};
class Record {
public:
Record(int course_id, int student_id, int score) : course_id(course_id), student_id(student_id), score(score) {}
int course_id;
int student_id;
int score;
};
class SchoolScore {
public:
SchoolScore(string school_name, vector<Student>& students, vector<Course>& courses, vector<Record>& records)
: school_name(school_name), students(students), courses(courses), records(records) {}
vector<string> get_courses_by_student_name(string student_name) {
vector<string> result;
auto student = find_if(students.begin(), students.end(), [&](const Student& s){ return s.name == student_name; });
if (student == students.end()) {
return result;
}
int student_id = student->id;
for (auto& record : records) {
if (record.student_id == student_id) {
auto course = find_if(courses.begin(), courses.end(), [&](const Course& c){ return c.course_id == record.course_id; });
if (course != courses.end()) {
result.push_back(course->course_name);
}
}
}
return result;
}
vector<string> get_students_by_course_name(string course_name) {
vector<string> result;
auto course = find_if(courses.begin(), courses.end(), [&](const Course& c){ return c.course_name == course_name; });
if (course == courses.end()) {
return result;
}
int course_id = course->course_id;
for (auto& record : records) {
if (record.course_id == course_id) {
auto student = find_if(students.begin(), students.end(), [&](const Student& s){ return s.id == record.student_id; });
if (student != students.end()) {
result.push_back(student->name);
}
}
}
return result;
}
double get_average_score_by_course_name(string course_name) {
auto course = find_if(courses.begin(), courses.end(), [&](const Course& c){ return c.course_name == course_name; });
if (course == courses.end()) {
return 0;
}
int course_id = course->course_id;
vector<int> scores;
for (auto& record : records) {
if (record.course_id == course_id) {
scores.push_back(record.score);
}
}
return scores.empty() ? 0 : accumulate(scores.begin(), scores.end(), 0.0) / scores.size();
}
double get_average_score_by_student_id(int student_id) {
vector<int> scores;
for (auto& record : records) {
if (record.student_id == student_id) {
scores.push_back(record.score);
}
}
return scores.empty() ? 0 : accumulate(scores.begin(), scores.end(), 0.0) / scores.size();
}
vector<string> get_students_by_average_score(double score) {
vector<string> result;
for (auto& student : students) {
if (get_average_score_by_student_id(student.id) > score) {
result.push_back(student.name);
}
}
return result;
}
private:
string school_name;
vector<Student> students;
vector<Course> courses;
vector<Record> records;
};
```
这个类包括四个类和一个学校学生成绩单类。在学校学生成绩单类中,我们可以根据输入的学生姓名得到该学生的所选课程,根据输入的课程名称得到选该课的学生,根据输入的课程名称得到每一门课程的平均分,根据输入的学号输出该学生的平均分,以及得到所有平均分大于60的学生。我们可以使用 C++ 中的 vector 和循环来实现这些功能,也可以使用 find 模板函数实现查找。