c++类与对象 学生管理

1. 学生类 Cstudent 及完整程序的设计
(1) 公有数据成员:姓名 name 、学号 studentId 、成绩 score
(2) 成员函数: modify() 用于修改信息, print() 负责显示数据成员的值;构造函数对数据成员初始
化。
(3) 主函数:创建类的对象 student_a ,初始化姓名为“张三”、学号 20170301001 、成绩 86 ,创建
对象 student_b student_b 调用 modify() 设置姓名为“李四”、学号 20170301002 、成绩 66.5 ;然后,
对象调用 print() 显示如下信息:
# 创建 Cstudent 类的对象 student_a ,信息如下
Name: 张三
StudentId: 20170301001
成绩 score: 86
# 创建 Cstudent 类的对象 student_b ,信息如下
Name: 李四
StudentId: 20170301002
成绩 score: 66.5

#include<bits/stdc++.h>
using namespace std;
class CStudent
{
	public:
		string name;
		char *studentid;
		float score;
		CStudent();
		CStudent(char*,char*,float);
		~CStudent();
		void modify(char*,char*,float);
		void print();
};
CStudent::CStudent()
{
	name=" ";
	studentid=new char[12];
	strcpy(studentid," ");
	score=0.0;
}
CStudent::CStudent(char* name_,char* id,float s)
{
	name=name_;
	studentid=new char[strlen(id)+1];
	strcpy(studentid,id);
	score=s;
}
CStudent::~CStudent()
{
	delete []studentid;
}
void CStudent::modify(char *name_,char *id,float s)
{
	name=name_;
	strcpy(studentid,id);
	score=s;
}
void CStudent::print()
{
	cout<<"Name:"<<name<<endl;
	cout<<"StudentId:"<<studentid<<endl;
	cout<<"Score:"<<score<<endl;
}
int main()
{
	CStudent student_a("张三", "20170301001", 86);
	student_a.print();
	cout<<endl;
	CStudent student_b;
	student_b.modify("李四", "20170301002", 66.5);
	student_b.print();
    return 0;
}
2. 班级类 Cclass 及完整程序的设计( 30 分)
1 )数据成员: Cstudent 类对象 student_1 的信息为“张三”、学号 20170301001 、成绩 86 student_2
的信息为“李四”、学号 20170301001 、成绩 66.5 student_3 的信息为“王五”、学号 20170301001
成绩 40 Num 存放班级人数;
(2)成员函数: find() 计算班级中及格与不及格人数, print() 获取(读取)有关数据后显示信息,
以及构造函数。
(3)主函数:创建类 Cclass 的对象 class_c ,采用合适的设计,通过成员函数 find() 等方法计算班
级人数、及格与不及格人数;然后,对象调用 print() 显示如下信息:

# 创建班级对象并显示该班信息
班级成员:张三,李四,王五
班级人数 : 3
班级及格人数 : 2
班级不及格人数 : 1
#include<bits/stdc++.h>
using namespace std;
class CStudent
{
	public:
		string name;
		char *studentid;
		float score;
		CStudent();
		CStudent(char*,char*,float);
		~CStudent();
		void modify(char*,char*,float);
		void print();
		static int obcount;
};
int CStudent::obcount=0;
CStudent::CStudent()
{
	name=" ";
	studentid=new char[12];
	strcpy(studentid," ");
	score=0.0;
	obcount++;
}
CStudent::CStudent(char* name_,char* id,float s)
{
	name=name_;
	studentid=new char[strlen(id)+1];
	strcpy(studentid,id);
	score=s;
	obcount++;
}
CStudent::~CStudent()
{
	delete []studentid;
	obcount--;
}
void CStudent::modify(char *name_,char *id,float s)
{
	name=name_;
	strcpy(studentid,id);
	score=s;
}
void CStudent::print()
{
	cout<<"Name:"<<name<<endl;
	cout<<"StudentId:"<<studentid<<endl;
	cout<<"Score:"<<score<<endl;
}
class Cclass
{
	public:
		CStudent student_1;
		CStudent student_2;
		CStudent student_3;
		int total;
		int pass;
		int fail;
		Cclass();
		~Cclass();
		virtual void print();
		virtual void find();
};
Cclass::Cclass():student_1("张三", "20170301001", 86),student_2("李四", "20170301002", 66.5),
student_3("王五","2017031003",40)
{
	total=CStudent::obcount;
	pass=0;
	fail=0;
}
Cclass::~Cclass()
{
}
void Cclass::find()
{
	if(student_1.score>=60) pass++;
	else fail++;
	if(student_2.score>=60) pass++;
	else fail++;
	if(student_3.score>=60) pass++;
	else fail++;
}
void Cclass::print()
{
	cout<<"班级成员"<<student_1.name<<" "<<student_2.name<<" "<<student_3.name<<endl;
	cout<<"Num:"<<total<<endl;
	cout<<"班级及格人数"<<pass<<endl;
	cout<<"班级不及格人数"<<fail<<endl; 
}
int main()
{
    Cclass class_c;
    class_c.find();
    class_c.print();
    return 0;
}
3. 班级统计类 Canalysis (派生类) 及完整程序的设计( 30 分)
(1) Canalysis 类是 Cclass 类(基类)的派生类,继承方式为 public 方式;
(2) 数据成员: Saver 存放班级平均成绩;构造函数对数据成员初始化(值为 0 );
(3) 成员函数: Aver() 计算班级平均成绩并存到 Saver find() 求出班级中的最高成绩, print() 获取
有关数据后显示信息。
(4) 主函数:创建类 Cclass 的对象 class_c ,创建类 Canalysis 的对象 analysis_d ,采用合适的设计,
由成员函数 Aver() 计算班级平均成绩;设计合适的指针与方法来实现多态性,该指针调用成员函
find() 计算班级中及格与不及格人数,该指针调用成员函数 find() 求出班级中的最高成绩,该指
针调用 print() 显示如下信息:(主函数中 不允许用 cout 语句,但注释行 "#…" 例外)
# 统计计算班级的学生成绩情况
班级成员:张三,李四,王五
班级人数 : 3
班级及格人数 : 2
班级不及格人数 : 1
班级平均成绩 : 64.1
班级最高成绩 : 86

#include<bits/stdc++.h>
using namespace std;
class CStudent
{
	public:
		string name;
		char *studentid;
		float score;
		CStudent();
		CStudent(char*,char*,float);
		~CStudent();
		void modify(char*,char*,float);
		void print();
		static int obcount;
};
int CStudent::obcount=0;
CStudent::CStudent()
{
	name=" ";
	studentid=new char[12];
	strcpy(studentid," ");
	score=0.0;
	obcount++;
}
CStudent::CStudent(char* name_,char* id,float s)
{
	name=name_;
	studentid=new char[strlen(id)+1];
	strcpy(studentid,id);
	score=s;
	obcount++;
}
CStudent::~CStudent()
{
	delete []studentid;
	obcount--;
}
void CStudent::modify(char *name_,char *id,float s)
{
	name=name_;
	strcpy(studentid,id);
	score=s;
}
void CStudent::print()
{
	cout<<"Name:"<<name<<endl;
	cout<<"StudentId:"<<studentid<<endl;
	cout<<"Score:"<<score<<endl;
}
class Cclass
{
	public:
		CStudent student_1;
		CStudent student_2;
		CStudent student_3;
		int total;
		int pass;
		int fail;
		Cclass();
		~Cclass();
		virtual void print();
		virtual void find();
};
Cclass::Cclass():student_1("张三", "20170301001", 86),student_2("李四", "20170301002", 66.5),
student_3("王五","2017031003",40)
{
	total=CStudent::obcount;
	pass=0;
	fail=0;
}
Cclass::~Cclass()
{
}
void Cclass::find()
{
	if(student_1.score>=60) pass++;
	else fail++;
	if(student_2.score>=60) pass++;
	else fail++;
	if(student_3.score>=60) pass++;
	else fail++;
}
void Cclass::print()
{
	cout<<"班级成员"<<student_1.name<<" "<<student_2.name<<" "<<student_3.name<<endl;
	cout<<"Num:"<<total<<endl;
	cout<<"班级及格人数"<<pass<<endl;
	cout<<"班级不及格人数"<<fail<<endl; 
}
class Canalysis:public Cclass
{
	public:
		float Saver;
		float max;
		Canalysis();
		~Canalysis();
		float Aver();
		void find();
		void print();
};
Canalysis::Canalysis()
{
	Saver=0.0;
	max=0.0;
}
Canalysis::~Canalysis()
{	
}
float Canalysis::Aver()
{
	Saver=(student_1.score+student_2.score+student_3.score)/3.0;
	return Saver;
}
void Canalysis::find()
{
	max=student_1.score;
	if(student_2.score>max) max=student_2.score;
	if(student_3.score>max) max=student_3.score;
}
void Canalysis::print()
{
	 cout << "班级平均成绩:" <<Aver() << endl; 
     cout << "班级最高成绩:" <<max<< endl;
}
int main()
{
    Cclass class_c;
    Cclass *p=&class_c;
    p->find();
    p->print();
    Canalysis analysis_d; 
    p = &analysis_d; //基类指针 p 存派生类对象地址
    p->find(); //基类指针 p 调用派生类的成员函数,实现多态性
    p->print(); 
    return 0;
}

主函数也可以这样调用

int main()
{

    Cclass *p=new Cclass;
    p->find();
    p->print();
    Cclass *p1 = new Canalysis; 
    p1->find(); 
    p1->print(); 
    return 0;
}

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值