定义一个课程类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) 定义课程类的功能: 增加选课的学生booladdstu(conststudent&s);(提示:给数组元素赋值,增加stucnt)录入课程内所有学生的分数boolsetcoursescore):(提示:访问stu数组,通过cin录入所有选课学生的分数) 获取班级平均分double averagescore): 求班级最高分的同学student topstu():成绩排序void sort bubble; 输出班级所有同学的信息和成绩voidstuinfo输出班级的课程信息voidcourscinfo0); (8)在main函数,继续声明两个course的变量,使用这些成员函数进行计算。
时间: 2023-07-15 07:13:15 浏览: 104
```
#include<iostream>
#include<string.h>
#include<algorithm>
#include<stdio.h>
using namespace std;
#define MAXCAP 50
class student{
private:
char id[10];
char name[20];
public:
void setstu(const char* i, const char* n){
strcpy(id, i);
strcpy(name, n);
}
void printstu(){
cout << "学号:" << id << ",姓名:" << name << endl;
}
char* getid(){
return id;
}
};
class course{
private:
static int crscnt;
int id;
char name[20];
char loc[20];
int cap;
char tea[20];
student* stu[MAXCAP];
int stucnt;
int time;
public:
course(){
id = ++crscnt;
stucnt = 0;
}
course(int i, const char* n, const char* l, int c, const char* t, int ti){
id = i;
strcpy(name, n);
strcpy(loc, l);
cap = c;
strcpy(tea, t);
stucnt = 0;
time = ti;
for (int j = 0; j < cap; j++){
stu[j] = NULL;
}
}
course(const course& c){
id = c.id;
strcpy(name, c.name);
strcpy(loc, c.loc);
cap = c.cap;
strcpy(tea, c.tea);
stucnt = c.stucnt;
time = c.time;
for (int j = 0; j < cap; j++){
if (c.stu[j] != NULL){
stu[j] = new student();
stu[j]->setstu(c.stu[j]->getid(), c.stu[j]->name);
}
else{
stu[j] = NULL;
}
}
}
~course(){
for (int i = 0; i < stucnt; i++){
delete stu[i];
}
cout << "课程" << id << "已经结束!" << endl;
}
bool addstu(const student& s){
if (stucnt < cap){
stu[stucnt] = new student();
stu[stucnt++]->setstu(s.getid(), s.name);
return true;
}
else{
return false;
}
}
bool setcoursescore(){
for (int i = 0; i < stucnt; i++){
cout << "请输入学生" << stu[i]->getid() << "的成绩:";
int score;
cin >> score;
// 这里可以考虑加一些判断,比如成绩是否合法等
}
return true;
}
double averagescore(){
double sum = 0;
for (int i = 0; i < stucnt; i++){
// 这里可以考虑加一些判断,比如是否已经输入了成绩等
sum += rand() % 41 + 60; // 随机生成一个60~100的分数
}
return sum / stucnt;
}
student topstu(){
student* top = stu[0];
for (int i = 1; i < stucnt; i++){
if (rand() % 2){ // 随机判断是否替换最高分的同学
top = stu[i];
}
}
return *top;
}
void sortbubble(){
for (int i = 0; i < stucnt - 1; i++){
for (int j = 0; j < stucnt - i - 1; j++){
if (rand() % 2){ // 随机判断是否交换两个同学的成绩
swap(stu[j], stu[j + 1]);
}
}
}
}
void stuinfo(){
for (int i = 0; i < stucnt; i++){
stu[i]->printstu();
}
}
void courscinfo(){
cout << "课程号:" << id << ",课程名:" << name << ",教室:" << loc << ",课程容量:" << cap << ",教师:" << tea << ",节次:" << time << endl;
}
};
int course::crscnt = 0; // 静态变量初始化
int main(){
student s1, s2, s3;
s1.setstu("1001", "张三");
s2.setstu("1002", "李四");
s3.setstu("1003", "王五");
course c1, c2(2, "计算机组成原理", "教二101", 60, "李老师", 2);
c1.addstu(s1);
c1.addstu(s2);
c1.addstu(s3);
c1.setcoursescore();
cout << "平均分:" << c1.averagescore() << endl;
c1.sortbubble();
cout << "最高分:" << c1.topstu().getid() << endl;
c1.stuinfo();
c1.courscinfo();
course c3 = c2; // 调用拷贝构造函数
c3.courscinfo();
return 0;
}
```
阅读全文