给出如下C++代码,要求,管理员给专业选择在管理员类,学生给自己选课在学生类,管理员录成绩在管理员类。 管理员给专业选课(必修课) 学生给自己选课 (选修课) 管理员 录成绩 按照科目 成绩统计分析
时间: 2024-02-10 09:10:17 浏览: 24
好的,这是一个面向对象程序设计的问题,需要设计管理员类和学生类,下面是一个简单的示例代码:
```c++
#include <iostream>
#include <vector>
#include <map>
using namespace std;
// 课程类
class Course {
public:
string name; // 课程名称
int credit; // 学分
Course(string n, int c) : name(n), credit(c) {}
};
// 学生类
class Student {
public:
string name; // 学生姓名
vector<Course*> courses; // 选修课程
map<string, int> scores; // 成绩
void addCourse(Course* c) {
courses.push_back(c);
}
void addScore(string courseName, int score) {
scores[courseName] = score;
}
};
// 专业类
class Major {
public:
string name; // 专业名称
vector<Course*> courses; // 必修课程
void addCourse(Course* c) {
courses.push_back(c);
}
};
// 管理员类
class Administrator {
public:
vector<Major*> majors; // 专业
void addMajor(Major* m) {
majors.push_back(m);
}
void addCourseToMajor(string majorName, Course* c) {
for (auto m : majors) {
if (m->name == majorName) {
m->addCourse(c);
break;
}
}
}
void recordScore(string courseName, vector<Student*> students) {
for (auto s : students) {
if (s->scores.find(courseName) == s->scores.end()) {
int score;
cout << "请输入学生" << s->name << "的" << courseName << "成绩:";
cin >> score;
s->addScore(courseName, score);
}
}
}
void analyzeScore(string courseName, vector<Student*> students) {
int sum = 0;
int count = 0;
int maxScore = INT_MIN;
int minScore = INT_MAX;
for (auto s : students) {
if (s->scores.find(courseName) != s->scores.end()) {
int score = s->scores[courseName];
sum += score;
count++;
if (score > maxScore) {
maxScore = score;
}
if (score < minScore) {
minScore = score;
}
}
}
if (count > 0) {
double average = (double)sum / count;
cout << "学生" << courseName << "成绩分析如下:" << endl;
cout << "平均分:" << average << endl;
cout << "最高分:" << maxScore << endl;
cout << "最低分:" << minScore << endl;
}
}
};
int main() {
// 初始化数据
Course* c1 = new Course("高等数学", 6);
Course* c2 = new Course("线性代数", 4);
Course* c3 = new Course("大学物理", 4);
Course* c4 = new Course("C++程序设计", 4);
Course* c5 = new Course("数据结构", 4);
Major* m1 = new Major();
m1->name = "计算机科学与技术";
m1->addCourse(c1);
m1->addCourse(c2);
m1->addCourse(c3);
m1->addCourse(c4);
m1->addCourse(c5);
Major* m2 = new Major();
m2->name = "软件工程";
m2->addCourse(c1);
m2->addCourse(c2);
m2->addCourse(c3);
Student* s1 = new Student();
s1->name = "张三";
s1->addCourse(c4);
s1->addCourse(c5);
Student* s2 = new Student();
s2->name = "李四";
s2->addCourse(c4);
vector<Student*> students = { s1, s2 };
Administrator* admin = new Administrator();
admin->addMajor(m1);
admin->addMajor(m2);
admin->recordScore("C++程序设计", students);
admin->analyzeScore("C++程序设计", students);
return 0;
}
```
这段代码中,我们定义了课程类、学生类、专业类和管理员类,其中,课程类包含课程名称和学分两个属性,学生类包含学生姓名、选修课程和成绩三个属性,专业类包含专业名称和必修课程两个属性,管理员类包含专业和一些操作方法。在管理员类中,我们定义了添加专业、给专业添加必修课程、录入成绩和成绩分析四个操作方法。在主函数中,我们初始化了一些数据,并对管理员类的方法进行了简单的测试。