类的继承之二--简单的继承与使用

本文介绍了一个使用C++实现的人员管理系统,包括学生、教师和职员的管理。系统能够进行信息输入、显示、搜索和资源释放等功能,实现了多态性和继承等面向对象特性。

代码:

#include<iostream>
#include<Windows.h>
#include<string>
#include<cstring>
#define MAXN 1050
#define LOCAL
using namespace std;
#ifndef LOCAL	//如果加了日期就把#define LOCAL删掉即可使用
class Date 
{
private:
	int year, month, day;
public:
	Date() :year(1900), month(1), day(1) {}
	Date(int y, int m, int d) :year(y), month(m), day(d) {}
	Date(Date &date) {
		year = date.year;
		month = date.month;
		day = date.day;
	}
	void Display() { cout << year << ' ' << month << ' ' << day << endl; }
	~Date() {}
};
#endif 
class Student 
{
private:
	string name;
	int age;
	int chinese, math, english;
public:
	Student():name("none"),age(0),chinese(0),math(0),english(0) {}	//默认构造函数初始化
	Student(string name, int age, int chinese, int math, int english);
	string getName() { return name; }
	void Input();
	void Display();
	~Student() {}
};
class Worker
{
protected:
	string name;
	int age;
	int salary;
public:
	Worker() :name("none"),age(0),salary(0) {}
	Worker(string name, int age);
	string getName() { return name; }
	//void Display() { cout << name << ' '<< age << ' '; };
	~Worker() {}
};
class Teacher :virtual public Worker
{
private:
	string level;
public:
	Teacher() :level("none") {}	//默认调用Worker构造函数我就不写了
	Teacher(string name, int age, string level);
	void Input();
	void Match();
	void Display();
	~Teacher() {}
};
class Admin :virtual public Worker
{
private:
	char level;
public:
	Admin():level('0') {}
	Admin(string name, int age, char level);
	void Input();
	void Match();
	void Display();
	~Admin() {}
};
class Manager
{
private:
	Student * stu;
	Teacher * teach;
	Admin * adm;
	int TeacherNum, AdminNum, StudentNum;
public:
	Manager() :TeacherNum(0), AdminNum(0), StudentNum(0) {}
	//Manager(int TeacherN, int AdminN);
	void Alloc();
	void ManagerInput();
	void ManagerSearch();
	void ManagerDisplay();
	~Manager();
};
int main()
{
	//由于只是为了满足题目要求,就没有写完整格式
	Manager mng;
	mng.Alloc();
	mng.ManagerInput();
	mng.ManagerSearch();
	Sleep(5000);
	mng.ManagerDisplay();
	system("pause");
	return 0;
}
Student::Student(string name, int age, int chinese, int math, int english)
{
	this->name = name;
	this->age = age;
	this->chinese = chinese;this->math = math;this->english = english;
}
void Student::Input()
{
	cin >> name >> age >> chinese >> math >> english;
}
void Student::Display()
{
	cout << name << ' ' << age << ' ' << chinese << ' ' << math << ' ' << english << ' ' << chinese + math + english << endl;
	//为了简化问题我直接跟着输出了总成绩
}
Worker::Worker(string name, int age)
{
	this->name = name;
	this->age = age;
}
Teacher::Teacher(string name, int age, string level):Worker(name,age)
{
	this->name = name;
	this->age = age;
	this->level = level;
}
void Teacher::Input()
{
	cin >> name >> age >> level;
}
void Teacher::Match()
{
	if (level._Equal("jiangshi")) salary = 4000;
	else if (level._Equal("fujiaoshou")) salary = 5000;
	else if (level._Equal("jiaoshou")) salary = 6000;
	else cout << "参数传递出错,请检查输入职称是否合法!" << endl;
}
void Teacher::Display()
{
	cout << name <<' '<< age <<' '<< level <<' '<< salary<<endl;
}
Admin::Admin(string name, int age, char level):Worker(name,age)
{
	this->name = name;
	this->age = age;
	this->level = level;
}
void Admin::Input()
{
	cin >> name >> age >> level;
}
void Admin::Match()
{
	switch (level)
	{
	case '1':
		salary = 2000;break;
	case '2':
		salary = 3000;break;
	case '3':
		salary = 4000;break;
	default:
		cout << "参数传递出错,请检查输入职称是否合法!" << endl;break;
	}
}
void Admin::Display()
{
	cout << name << ' ' << age << ' ' << level << ' ' << salary << endl;
}
/*
Manager::Manager(int TeacherN, int AdminN) :TeacherNum(TeacherN), AdminNum(AdminN)
{
	teach = new Teacher[TeacherNum];
}
*/
void Manager::Alloc()
{
	cout << "请分别输入您想要录入的学生、教师、职员数目:" << endl;
	cin >> StudentNum >> TeacherNum >> AdminNum;
	stu = new Student[StudentNum];	//分配内存
	teach = new Teacher[TeacherNum];
	adm = new Admin[AdminNum];
}
void Manager::ManagerInput()
{
	int i;
	cout << "请依次输入" << StudentNum << "个学生的信息:" << endl;
	for (i = 0;i < StudentNum;i++)
		stu[i].Input();
	cout << "请依次输入" << TeacherNum << "个教师的信息:" << endl;
	for (i = 0;i < TeacherNum;i++)
	{
		teach[i].Input();
		teach[i].Match();
	}
	cout << "请依次输入" << AdminNum << "个职员的信息:" << endl;
	for (i = 0;i < AdminNum;i++)
	{
		adm[i].Input();
		adm[i].Match();
	}
}
void Manager::ManagerSearch()
{
	int i;
	char ch;
	string NN;
	cout << "请输入想要查找人员的职位序号(1--学生 2--教师 3--职员):" << endl;
	cin >> ch;
	cout << "请输入想要查找人员的姓名:";
	cin >> NN;
	switch (ch)
	{
	case '1':
		for (i = 0;i < StudentNum;i++)
			if (stu[i].getName()._Equal(NN)) stu[i].Display();
		break;
	case '2':
		for (i = 0;i < TeacherNum;i++)
			if (teach[i].getName()._Equal(NN)) teach[i].Display();
		break;
	case '3':
		for (i = 0;i < AdminNum;i++)
			if (adm[i].getName()._Equal(NN)) adm[i].Display();
		break;
	default:
		cout << "参数传递出错,请检查输入序号是否合法!" << endl;
		break;
	}
}
void Manager::ManagerDisplay()
{
	int i;
	cout << "学生信息(姓名、年龄、语数外成绩、总成绩):" << endl;
	for (i = 0;i < StudentNum;i++)
		stu[i].Display();
	cout << "教师信息(姓名、年龄、等级、总工资)" << endl;
	for (i = 0;i < TeacherNum;i++)
		teach[i].Display();
	cout << "职员信息(姓名、年龄、等级、总工资)" << endl;
	for (i = 0;i < AdminNum;i++)
		adm[i].Display();
}
Manager::~Manager()
{
	delete[] teach;
	delete[] adm;
	delete[] stu;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值