C++面向对象 第三次实验报告

实验:编写一个人员信息管理系统。这个系统的功能是:交互式的实现校园人员信息的录入与显示。

分析:

学校里,主要有四类人员:大学本科学生、教师、研究生和助教。

大学本科生每周有固定的学时数。教师除了固定的学时数外,还有每周的教学时数。研究生除了固定的学时数外,每周还可以自由做一定的研究。助教生除了上课外,还要做研究和一定的教学工作。

人员的基本信息包括姓名、编号、性别、身份证号、总学时数以及每周固定学时数。各个人员之间的关系: people类派生出student 类和teacher类,student 类派生出graduate类, graduate类和teacher类派生出TA类。

#include <iostream>
#include <string>
#include <vector>
using namespace std;
int Allweeks;
class people
{
public:
	people() :Id(0), Name("0"), Sex("0"), IdCard("0"), All_Studytime(0), Weekly_Studytime(0)
	{

	}
	virtual void Set_Data() = 0;
	virtual void Print_Data() = 0;
protected:
	string Name;
	int Id;
	string Sex;
	string IdCard;
	double Weekly_Studytime;
	double All_Studytime;
};
class student : virtual public people
{
public:
	virtual void Set_Data()
	{
		string name;
		int id;
		string sex;
		string idcard;
		double weekly_studytime;
		cout << "依次输入本科生姓名,编号,性别,身份证号,每周固定学时数" << endl;
		cin >> name >> id >> sex >> idcard >> weekly_studytime;
		Name = name;
		Id = id;
		Sex = sex;
		IdCard = idcard;
		Weekly_Studytime = weekly_studytime;
		All_Studytime = Weekly_Studytime * Allweeks;
	}
	virtual void Print_Data()
	{
		cout << endl;
		cout << "本科生" << endl;
		cout << "姓名:" << Name << endl;
		cout << "编号:" << Id << endl;
		cout << "性别:" << Sex << endl;
		cout << "身份证号:" << IdCard << endl;
		cout << "每周固定学时数:" << Weekly_Studytime << endl;
		cout << "总学时数:" << All_Studytime << endl;
	}
protected:

};
class teacher :virtual public people
{
public:
	virtual void Set_Data()
	{
		string name;
		int id;
		string sex;
		string idcard;
		double weekly_studytime;
		double weekly_teachtime;
		cout << "依次输入人员姓名,编号,性别,身份证号,每周固定学时数,每周教学时数" << endl;
		cin >> name >> id >> sex >> idcard >> weekly_studytime >> weekly_teachtime;
		Name = name;
		Id = id;
		Sex = sex;
		IdCard = idcard;
		Weekly_Studytime = weekly_studytime;
		All_Studytime = Weekly_Studytime * Allweeks;
		Weekly_Teachtime = weekly_teachtime;
	}
	virtual void Print_Data()
	{
		cout << endl;
		cout << "教师" << endl;
		cout << "姓名:" << Name << endl;
		cout << "编号:" << Id << endl;
		cout << "性别:" << Sex << endl;
		cout << "身份证号:" << IdCard << endl;
		cout << "每周固定学时数:" << Weekly_Studytime << endl;
		cout << "总学时数:" << All_Studytime << endl;
		cout << "每周教学时数:" << Weekly_Teachtime << endl;
	}
protected:
	double Weekly_Teachtime;
};
class graduate : virtual public student
{
public:
	virtual void Set_Data()
	{
		string name;
		int id;
		string sex;
		string idcard;
		double weekly_studytime;
		double researchtime;
		cout << "依次输入人员姓名,编号,性别,身份证号,每周固定学时数,总研究时长" << endl;
		cin >> name >> id >> sex >> idcard >> weekly_studytime >> researchtime;
		Name = name;
		Id = id;
		Sex = sex;
		IdCard = idcard;
		Weekly_Studytime = weekly_studytime;
		All_Studytime = Weekly_Studytime * Allweeks;
		Reserachtime = researchtime;
	}
	virtual void Print_Data()
	{
		cout << endl;
		cout << "研究生" << endl;
		cout << "姓名:" << Name << endl;
		cout << "编号:" << Id << endl;
		cout << "性别:" << Sex << endl;
		cout << "身份证号:" << IdCard << endl;
		cout << "每周固定学时数:" << Weekly_Studytime << endl;
		cout << "总学时数:" << All_Studytime << endl;
		cout << "总研究时长:" << Reserachtime << endl;
	}
protected:
	double Reserachtime;
};
class TA : public graduate, public teacher
{
public:
	virtual void Set_Data()
	{
		string name;
		int id;
		string sex;
		string idcard;
		double weekly_studytime;
		double weekly_teachtime;
		double researchtime;
		cout << "依次输入人员姓名,编号,性别,身份证号,每周固定学时数,每周教学时数,总研究时长" << endl;
		cin >> name >> id >> sex >> idcard >> weekly_studytime >> weekly_teachtime >> researchtime;
		Name = name;
		Id = id;
		Sex = sex;
		IdCard = idcard;
		Weekly_Studytime = weekly_studytime;
		All_Studytime = Weekly_Studytime * Allweeks;
		Weekly_Teachtime = weekly_teachtime;
		Reserachtime = researchtime;
	}
	virtual void Print_Data()
	{
		cout << endl;
		cout << "助教" << endl;
		cout << "姓名:" << Name << endl;
		cout << "编号:" << Id << endl;
		cout << "性别:" << Sex << endl;
		cout << "身份证号:" << IdCard << endl;
		cout << "每周固定学时数:" << Weekly_Studytime << endl;	
		cout << "总学时数:" << All_Studytime << endl;
		cout << "每周教学时数:" << Weekly_Teachtime << endl;
		cout << "总研究时长:" << Reserachtime << endl;
	}
protected:

};
void UI()
{
	cout << endl;
	cout << "  ******************************************" << endl;
	cout << "  *   欢迎使用人员信息管理系统:)           *" << endl;
	cout << "  *   1.录入新本科生信息                   *" << endl;
	cout << "  *   2.录入新教师信息                     *" << endl;
	cout << "  *   3.录入新研究生信息                   *" << endl;
	cout << "  *   4.录入新助教信息                     *" << endl;
	cout << "  *   5.显示全部本科学生具体信息;          *" << endl;
	cout << "  *   6.显示全部教师具体信息;              *" << endl;
	cout << "  *   7.显示全部研究生具体信息;            *" << endl;
	cout << "  *   8.显示全部助教具体信息;              *" << endl;
	cout << "  *   9.显示全部人员具体信息;              *" << endl;
	cout << "  *   0.退出系统                           *" << endl;
	cout << "  ******************************************" << endl;
	cout << endl;
}
int main()
{
	cout << "设置本学期周数:" << endl;
	cin >> Allweeks;
	people* p = nullptr;
	vector<people*> stu;
	vector<people*> teach;
	vector<people*> grad;
	vector<people*> ta;
	while (true)
	{
		UI();
		cout << "请输入操作选项:" << endl;
		int option;
		cin >> option;//输入操作选项
		if (option == 0)
			break;
		switch (option)
		{
		case 1:
			p = new student;
			p->Set_Data();
			stu.push_back(p);
			break;
		case 2:
			p = new teacher;
			p->Set_Data();
			teach.push_back(p);
			break;
		case 3:
			p = new graduate;
			p->Set_Data();
			grad.push_back(p);
			break;
		case 4:
			p = new TA;
			p->Set_Data();
			ta.push_back(p);
			break;
		case 5:
			if (stu.empty())
			{
				cout << "暂无本科生信息" << endl;
			}
			for (vector<people*>::iterator it = stu.begin(); it != stu.end(); it++)
			{
				(*it)->Print_Data();
			}
			break;
		case 6:
			if (teach.empty())
			{
				cout << "暂无教师信息" << endl;
			}
			for (vector<people*>::iterator it = teach.begin(); it != teach.end(); it++)
			{
				(*it)->Print_Data();
			}
			break;
		case 7:
			if (grad.empty())
			{
				cout << "暂无研究生信息" << endl;
			}
			for (vector<people*>::iterator it = grad.begin(); it != grad.end(); it++)
			{
				(*it)->Print_Data();
			}
			break;
		case 8:
			if (ta.empty())
			{
				cout << "暂无助教信息" << endl;
			}
			for (vector<people*>::iterator it = ta.begin(); it != ta.end(); it++)
			{
				(*it)->Print_Data();
			}
			break;
		case 9:
			if (stu.empty() && teach.empty() && grad.empty() && ta.empty())
			{
				cout << "暂无人员信息" << endl;
			}
			for (vector<people*>::iterator it = stu.begin(); it != stu.end(); it++)
			{
				(*it)->Print_Data();
			}
			for (vector<people*>::iterator it = teach.begin(); it != teach.end(); it++)
			{
				(*it)->Print_Data();
			}
			for (vector<people*>::iterator it = grad.begin(); it != grad.end(); it++)
			{
				(*it)->Print_Data();
			}
			for (vector<people*>::iterator it = ta.begin(); it != ta.end(); it++)
			{
				(*it)->Print_Data();
			}
			break;
		}
	}
}

小tips:

push——back()是浅拷贝,子类若有堆区数据要写一个拷贝构造函数

疑问:

基类加个纯虚函数会报错

delete p会报错

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值