面向对象课程设计——类与对象——人员信息管理系统

面向对象课程设计-人员信息管理系统:

以一个小型公司的人员管理为例,说明类及成员函数的设计。提示:

  1. 类的设计:
    某小型公司,需要存储雇员的编号、级别、月薪,并显示全部信息。根据这些需求,设计一个类employee,在该类中,包括的数据成员有:
    编号(int individualEmpNo)
    级别(int grade)
    月薪(float accumPay)
    成员函数有:
    设置编号(void setEmpNo(int steps)):编号顺序加1(利用静态变量实现)
    提取编号(void getEmpNo)
    晋升级别(void promote(int increment)):提升的级别由参数指定
    提取级别(int getGrade)
    设置月薪(void SetAccumPay(float pa)):
    提取月薪(float GetAccumPay)
    构造函数(用于设置数据成员编号、级别和月薪初值)
    析构函数
  2. 整个程序分为两个独立的文档:employee.h(包含类的定义和类的实现)和employee.cpp(主函数文件)
  3. 在主函数main()中创建employee类的两个对象,对它们设计编号、级别和月薪,并输出每个雇员的基本信息。

/*人员信息管理系统:
以一个小型公司的人员管理为例,说明类及成员函数的设计。提示:
1)	类的设计:
某小型公司,需要存储雇员的编号、级别、月薪,并显示全部信息。根据这些需求,设计一个类employee,在该类中,包括的数据成员有:
编号(int individualEmpNo)
级别(int grade)
月薪(float accumPay)
成员函数有:
设置编号(void setEmpNo(int steps)):编号顺序加1(利用静态变量实现)
提取编号(void getEmpNo)
晋升级别(void promote(int increment)):提升的级别由参数指定
提取级别(int getGrade)
设置月薪(void SetAccumPay(float pa)):
提取月薪(float GetAccumPay)
构造函数(用于设置数据成员编号、级别和月薪初值)
析构函数
2)	整个程序分为两个独立的文档:employee.h(包含类的定义和类的实现)和employee.cpp(主函数文件)
3)	在主函数main()中创建employee类的两个对象,对它们设计编号、级别和月薪,并输出每个雇员的基本信息。*/

#include
using namespace std;
//以下是雇员类的声明
class employee
{
public:
	employee();
	employee(employee&e);
	void setEmpNo(int);
	int getEmpNo()
{
	return individualEmpNo;
}

	void promote(int);
	int getGrade()
{
	return grade;
}
	void SetAccumPay(float);
	float GetAccumPay()
	{
		return accumPay;
	}
	~employee()
{
	//cout<<"析构函数被调用"<
}
private:
	int individualEmpNo;//编号
	static int numOfEmp;
	int grade;//级别
	float accumPay;//月薪

};

//以下是雇员类的成员函数的实现

int employee::numOfEmp=0;//设置静态变量

void employee::setEmpNo(int steps)//按照不同的steps
{
	grade=steps;
	numOfEmp++;
	individualEmpNo+=numOfEmp;
		
}

void employee::promote(int increament)
{
	grade=grade+increament;
	//cout<<"employee::promote(int increament)被调用"<
}

void employee::SetAccumPay(float pa)//调整月薪
{
	accumPay=pa+accumPay;
}

employee::employee()//设置数据成员编号、月薪、级别初值
{
	individualEmpNo=1705110000;
	accumPay=120.0;
	grade=0;
	//cout<<"构造函数被调用"<
}

employee::employee(employee&e)
{
	individualEmpNo=e.individualEmpNo;
	accumPay=e.accumPay;
	grade=e.grade;
}
//以下是主函数
void main()
{
	int step;
	int increments;
	float add;
	employee e1;
	cout<<"请输入e1员工级别"<<endl;
	cin>>step;
	e1.setEmpNo(step);
	step=0;
	employee e2=e1;
	cout<<"请输入e2员工级别"<<endl;
	cin>>step;
	e2.setEmpNo(step);
	step=0;
	employee e3;
	cout<<"请输入e3员工级别"<<endl;
	cin>>step;
	e3.setEmpNo(step);
	cout<<"请输入e3员工需要调整的工资"<<endl;
	cin>>add;
	e3.SetAccumPay(add);
	cout<<"请输入e3员工需要提升的级别"<<endl;
	cin>>increments;
	e3.promote(increments);
	cout<<"e3员工编号为"<<e3.getEmpNo()<<endl;
	cout<<"现在e3员工月薪为"<<e3.GetAccumPay()<<endl;	
	cout<<"现在e3员工级别为"<<e3.getGrade()<<endl;
}


本设计题目的任务是设计一个人员信息管理系统,并使用虚函数实现多态性,
完成显示不同人员信息的任务。设计employee类,用来存储雇员的编号,级别,月薪等信息。
能够对其进行操作和显示。以employee为基类派生出technician类,表示兼职技术人员,
以及manager类,表示经理,以及salesman类,表示兼职推销员。
利用manage类和salesman类派生出salesmanager类,表示销售经理。
注意使用虚基类。进一步使用虚函数和抽象类改进上面的程序。
本设计题目的目的是让学生进一步理解和掌握C++中类的继承,虚基类,多态性,虚函数以及抽象类技术及实现方法

/*本设计题目的任务是设计一个人员信息管理系统,并使用虚函数实现多态性,
完成显示不同人员信息的任务。设计employee类,用来存储雇员的编号,级别,月薪等信息。
能够对其进行操作和显示。以employee为基类派生出technician类,表示兼职技术人员,
以及manager类,表示经理,以及salesman类,表示兼职推销员。
利用manage类和salesman类派生出salesmanager类,表示销售经理。
注意使用虚基类。进一步使用虚函数和抽象类改进上面的程序。
本设计题目的目的是让学生进一步理解和掌握C++中类的继承,虚基类,多态性,虚函数以及抽象类技术及实现方法。*/
#include
#include

using namespace std;
//以下是雇员类的实现
class employee
{
	protected:
		string name;
		int empNo;
		int rank;
		float salary;
	public:
		employee()
		{
			name="DefaultName";empNo=0;salary=0.0;rank=0;
		}
		employee(string name,int empNo,int rank,float salary)
		{
			this->name=name;
			this->empNo=empNo;
			this->rank=rank;
			this->salary=salary;
		}
		~employee(){}
		virtual float display(){return 0.0;}//设置虚函数,为派生类提供接口
};//employee

class manager:public virtual employee
{
	protected:
		int achievement;
	public:
		manager(string name,int empNo,int rank,float salary,int achievement):employee(name,empNo,rank,salary)
		{
			this->achievement=achievement;
		}
		~manager(){}
		float display()
		{					
			cout<<"经理人员的姓名为"<<name<<endl;
			cout<<"经理人员的编号为"<<empNo<<endl;
			cout<<"经理人员的级别为"<<rank<<endl;
			cout<<"经理人员的工资为";	
			return salary+achievement;
		}
};//manager

class technician:public employee
{
	protected:
		int workHours;
	public:
		technician(string name,int empNo,int rank,float salary,int workHours):employee(name,empNo,rank,salary)
		{
			this->workHours=workHours;
		}
		~technician(){}
		float display()
		{
			cout<<"科研人员的姓名为"<<name<<endl;
			cout<<"科研人员的编号为"<<empNo<<endl;
			cout<<"科研人员的级别为"<<rank<<endl;
			cout<<"科研人员的工资为";
			return salary+workHours*200;
		}
};//technician

class salesman:public virtual employee
{
	protected:
		float monthlysales;
	public:
		salesman(string name,int empNo,int rank,float salary,float monthlysales):employee(name,empNo,rank,salary)
		{
			this->monthlysales=monthlysales;
		}
		~salesman(){}
		float display()
		{
			cout<<"销售人员的姓名为"<<name<<endl;
			cout<<"销售人员的编号为"<<empNo<<endl;
			cout<<"销售人员的级别为"<<rank<<endl;
			cout<<"销售人员的工资为";
			return salary+monthlysales*1.8;
		}
};//salesman

class salesmanager:public manager,public salesman//虚基类
{
	public:
		salesmanager(string name,int empNo,int rank,float salary,float monthlysales,int achievement):employee(name,empNo,rank,salary),salesman(name,empNo,rank,salary,monthlysales),manager(name,empNo,rank,salary,achievement)
		{
			this->monthlysales=monthlysales;
			this->achievement=achievement;
		}
		~salesmanager(){}
		float display()
		{
			cout<<"销售经理的姓名为"<<name<<endl;
			cout<<"销售经理的编号为"<<empNo<<endl;
			cout<<"销售经理的级别为"<<rank<<endl;
			cout<<"销售经理的工资为";
			return salary+monthlysales*3.6+achievement;
		}
};//salesmanager类多重继承

float display(employee *emptr)
{
	return emptr->display();                                   
}

int main(void)
{
	employee *e1=new manager("s1",001,5,1000.0,20000);
	employee *e2=new technician("s2",4,002,1000.0,35);
	employee *e3=new salesman("s3",003,3,1000.0,2400);
	employee *e4=new salesmanager("s4",4,004,1000.0,3500,5000);
	cout<<display(e1)<<endl;
	cout<<"/*****************************/"<<endl;
    cout<<display(e2)<<endl;
	cout<<"/*****************************/"<<endl;
    cout<<display(e3)<<endl;
	cout<<"/*****************************/"<<endl;
	cout<<display(e4)<<endl;
	return 0;
}

你可能感兴趣的:(c++语言基础,类与对象,人员信息管理系统)