实验四 类与对象


类与对象

完成下列功能:
(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;
}
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值