文章目录
类与对象
完成下列功能:
(1)定义学生类Student,包含:
- 私有数据成员:学号(int)和成绩(int)。
- 实现构造函数和set/get函数。
(2)定义班级类Classes,包含
- 公有数据成员:最高分(int)、最低分(int)、平均分(float)、学生人数(int)
- 私有数据成员:学生列表(可以用一个指针Student*表示一个数组存放学生列表,在构造函数中动态分配内存)。
- 实现班级类成员函数GenerateStudentsList,用于生成班级的学生列表,学号按顺序 1 ~ n 表示,成绩随机生成,范围 0 ~ 100 。
- 实现班级类成员函数FindMaxMinAvgScore,用于计算最高分、最低分和平均分。
分区实现
定义学生类
私有数据成员:学号(int)和成绩(int)。
private: //私有数据
int number_;//学号
int score_;//成绩
实现构造函数和set/get函数。
Student(int number, int score){
number_ = number;
score_ = score;
}
void set_number(int number){
number_ = number;
}
int get_number(){
return number_;
}
void set_score(int score){
score_ = score;
}
int get_score(){
return score_;
}
输出函数
void Display(){//打印 Find_Max_Min_Avg_Score 中找到的数据
cout <<"number is " << number_ << "; score is " << score_ << "\n\n";
}
定义班级类
公有数据成员:最高分(int)、最低分(int)、平均分(float)、学生人数(int)
public:
int total_student_numbers_;//学生人数
int max_score_;//最高分
int min_score_;//最低分
float avg_score_ = 0;//平均分
Student max, min;
//申请两个位置,一个用于存放最高分的学号和成绩,另一个用于存放最低分的学号和成绩
//可以看作两个结构体,方便理解
私有数据成员:学生列表(可以用一个指针Student*表示一个数组存放学生列表,在构造函数中动态分配内存)。
private:
Student* students_;
实现班级类成员函数Generate_Students_List,用于生成班级的学生列表,学号按顺序 1 ~ n 表示,成绩随机生成,范围 0 ~ 100 。
//generate_students 生成 n个学生组成的数组
//学号按顺序 1~n 表示,成绩为 0~100 随机数
void Generate_Students_List(){
srand(time(0));//重置,保证随机
students_ = new Student[total_student_numbers_];
//new 一个数组,用于存放(存放了学号和成绩的)Class Student
for(int i = 0; i < total_student_numbers_; i ++){
students_[i].set_number(i + 1);//按顺序给予学号
//因为数组从 0 开始,而学号从 1 ~ n,所以要往后顺一位
students_[i].set_score(rand()%100);//循环随机赋值成绩,且成绩为 0 ~ 100
}
}
实现班级类成员函数Find_Max_Min_Avg_Score,用于计算最高分、最低分和平均分。
void Find_Max_Min_Avg_Score(){
//找出最高分、最低分及各自的学号,存入申请的两个位置中。并计算平均分
max_score_ = min_score_ = students_[0].get_score();//将最大最小赋值为第一位,方便查找
for(int i = 0; i < total_student_numbers_; i ++){
avg_score_ += students_[i].get_score();
if(max_score_ < students_[i].get_score()){//查找最大值及其位置
max_score_ = students_[i].get_score ();
max = students_[i];
}
if(min_score_ > students_[i].get_score()){//查找最小值及其位置
min_score_ = students_[i].get_score();
min = students_[i];
}
}
avg_score_ /= total_student_numbers_;
}
最后代码
#include <bits/stdc++.h>
using namespace std;
class Student{
public:
Student(){
//to do;
}
Student(int number, int score){
number_ = number;
score_ = score;
}
void set_number(int number){
number_ = number;
}
int get_number(){
return number_;
}
void set_score(int score){
score_ = score;
}
int get_score(){
return score_;
}
void Display(){//打印 Find_Max_Min_Avg_Score 中找到的数据
cout <<"number is " << number_ << "; score is " << score_ << "\n\n";
}
private://私有数据
int number_;//学号
int score_;//成绩
};
class Classes{
public:
int total_student_numbers_;//学生人数
int max_score_;//最高分
int min_score_;//最低分
float avg_score_ = 0;//平均分
Student max, min;
//申请两个位置,一个用于存放最高分的学号和成绩,另一个用于存放最低分的学号和成绩
//可以看作两个结构体,方便理解
Classes(){
//to do;
}
Classes(int n){//构造函数,输入学生总人数
cout << "The number of students is " << n << "\n";
total_student_numbers_ = n;
}
~Classes(){//构析函数,释放内存
delete[] students_;
}
void Display(){//显示最高分、最低分和平均分
Generate_Students_List();//随机生成表
Find_Max_Min_Avg_Score();//查找
cout << "Max Score: " << "\n";
max.Display();//调用 Student 中的 Display 输出 max
cout << "Min Score: " << "\n";
min.Display();//调用 Student 中的 Display 输出 min
cout << "Avg Score: " << avg_score_ << "\n";
}
private:
Student* students_;
//generate_students 生成 n个学生组成的数组
//学号按顺序 1~n 表示,成绩为 0~100 随机数
void Generate_Students_List(){
srand(time(0));//重置,保证随机
students_ = new Student[total_student_numbers_];
//new 一个数组,用于存放(存放了学号和成绩的)Class Student
for(int i = 0; i < total_student_numbers_; i ++){
students_[i].set_number(i + 1);//按顺序给予学号
//因为数组从 0 开始,而学号从 1 ~ n,所以要往后顺一位
students_[i].set_score(rand()%100);//循环随机赋值成绩,且成绩为 0 ~ 100
}
}
void Find_Max_Min_Avg_Score(){
//找出最高分、最低分及各自的学号,存入申请的两个位置中。并计算平均分
max_score_ = min_score_ = students_[0].get_score();//将最大最小赋值为第一位,方便查找
for(int i = 0; i < total_student_numbers_; i ++){
avg_score_ += students_[i].get_score();
if(max_score_ < students_[i].get_score()){//查找最大值及其位置
max_score_ = students_[i].get_score ();
max = students_[i];
}
if(min_score_ > students_[i].get_score()){//查找最小值及其位置
min_score_ = students_[i].get_score();
min = students_[i];
}
}
avg_score_ /= total_student_numbers_;
}
};
int main(){
Classes classes(100);//创建并调用成员函数 classes,设置学号和成绩
classes.Display();//调用成员函数 Display,打印学号和成绩
return 0;
}