用cpp定义一个课程类 course,要求所有数据成员定义成 private,理解类的定义和使用。 (1) 使用#define 定义课程容量 MAXCAP (2) 定义课程类的属性:课程号 id、课程名 name、教室 loc(可选)、课程容量 cap、 教师 tea、学生 stu、已有学生数量 stucnt 和节次 time(可选); (提示:教室 loc 和教师 tea 使用前面定义类的对象,学生 stu 使用学生类数组指 针) (3) 定义总课程数 crscnt (提示:使用静态变量,在构造函数中加 1) (4) 定义无参和有参的构造函数;(提示:初始化 stu 数组,长度为 cap) (5) 定义拷贝构造函数(提示:初始化 stu 数组,长度为 cap,并将参数的数据成员值 复制到数据成员中) (6) 定义析构函数,delete 释放 stu 数组资源,输出课程的简单信息; (7) 定义课程类的功能: 增加选课的学生 bool addstu(const student &s);(提示:给数组元素赋值,增加 stucnt) 录入课程内所有学生的分数 bool setcoursescore();(提示:访问 stu 数组,通过 cin 录入所有选课学生的分数) 获取班级平均分 double averagescore(); 求班级最高分的同学 student topstu(); 成绩排序 void sort_bubble(); 输出班级所有同学的信息和成绩 void stuinfo(); 输出班级的课程信息 void courseinfo(); (8) 在 main 函数,继续声明两个 course 的变量,使用这些成员函数进行计算。
时间: 2023-12-03 15:47:23 浏览: 110
课程.cpp
以下是课程类 course 的定义和实现:
```
#include <iostream>
#include "student.h" // 假设学生类的头文件为 student.h
#define MAXCAP 50
class course {
private:
std::string id;
std::string name;
std::string loc;
int cap;
std::string tea;
student *stu;
int stucnt;
int time;
static int crscnt;
public:
course() : id(""), name(""), loc(""), cap(0), tea(""), stu(nullptr), stucnt(0), time(0) {
crscnt++;
}
course(std::string id_, std::string name_, std::string loc_, int cap_, std::string tea_, int time_ = 0)
: id(id_), name(name_), loc(loc_), cap(cap_), tea(tea_), stucnt(0), time(time_) {
stu = new student[cap];
crscnt++;
}
course(const course &c) : id(c.id), name(c.name), loc(c.loc), cap(c.cap), tea(c.tea), stucnt(c.stucnt), time(c.time) {
stu = new student[cap];
for (int i = 0; i < stucnt; i++) {
stu[i] = c.stu[i];
}
crscnt++;
}
~course() {
delete[] stu;
std::cout << "Course " << id << " (" << name << ") has been destroyed." << std::endl;
}
bool addstu(const student &s) {
if (stucnt >= cap) {
return false;
}
stu[stucnt++] = s;
return true;
}
bool setcoursescore() {
for (int i = 0; i < stucnt; i++) {
std::cout << "Enter score for student " << i + 1 << ": ";
std::cin >> stu[i].score;
}
return true;
}
double averagescore() {
double sum = 0;
for (int i = 0; i < stucnt; i++) {
sum += stu[i].score;
}
return sum / stucnt;
}
student topstu() {
student top = stu[0];
for (int i = 1; i < stucnt; i++) {
if (stu[i].score > top.score) {
top = stu[i];
}
}
return top;
}
void sort_bubble() {
for (int i = 0; i < stucnt - 1; i++) {
for (int j = 0; j < stucnt - i - 1; j++) {
if (stu[j].score < stu[j + 1].score) {
std::swap(stu[j], stu[j + 1]);
}
}
}
}
void stuinfo() {
for (int i = 0; i < stucnt; i++) {
std::cout << "Student " << i + 1 << ": " << stu[i].name << " " << stu[i].score << std::endl;
}
}
void courseinfo() {
std::cout << "Course: " << name << " (" << id << ")" << std::endl;
std::cout << "Teacher: " << tea << std::endl;
std::cout << "Location: " << loc << std::endl;
std::cout << "Capacity: " << cap << std::endl;
std::cout << "Time: " << time << std::endl;
std::cout << "Number of students: " << stucnt << std::endl;
}
};
int course::crscnt = 0;
```
在 main 函数中,可以声明两个 course 的变量并使用成员函数进行计算,例如:
```
int main() {
// 假设已经有一个学生数组指针 stdptr,可以通过 stdptr[i] 访问第 i 个学生
course c1("101", "Math", "Room 101", MAXCAP, "Teacher A", 1);
course c2("102", "English", "Room 102", MAXCAP, "Teacher B");
for (int i = 0; i < MAXCAP / 2; i++) {
c1.addstu(stdptr[i]);
}
for (int i = MAXCAP / 2; i < MAXCAP; i++) {
c2.addstu(stdptr[i]);
}
c1.setcoursescore();
c2.setcoursescore();
std::cout << "Average score of Math: " << c1.averagescore() << std::endl;
std::cout << "Top student of English: " << c2.topstu().name << std::endl;
c1.sort_bubble();
c2.sort_bubble();
std::cout << "Math scores in descending order:" << std::endl;
c1.stuinfo();
std::cout << "English scores in descending order:" << std::endl;
c2.stuinfo();
std::cout << "Total number of courses: " << course::crscnt << std::endl;
return 0;
}
```
阅读全文