C++学习之企业员工信息管理系统(vs2010上实现,部分实现思路以及代码示例)

本次学习王老师的课件至day9然后打算实现自己企业员工信息管理系统:

一个小型公司的人员信息管理系统

某小型公司,主要有四类人员:经理、技术人员、销售经理和推销员。现在,需要存储这些人员的姓名、编号、级别、当月薪水.计算月薪总额并显示全部信息。人员编号基数为 1000,每输入一个人员信息编号顺序加 1。程序要有对所有人员提升级别的功能。 本例中为简单起见, 所有人员的初始级别均为 1级。然后进行升级,经理升为 4 级,技术人员和销售经理升为 3 级,推销员仍为 1 级。月薪计算办法是: 经理拿固定月薪 8000 元; 技术人员按每小时 100 元领取月薪; 推销员的月薪按该推销员当月销售额的 4%提成;销售经理既拿固定月薪也领取销售提成,固定月薪为 5000 元,销售提成为所管辖部门当月销售总额的 5%。

类设计以及分析:


有了各类的成员以及函数,实现起来就容易了。

先看父类的实现父类里面都是用的纯虚函数,提供接口

class Emp_class
{
public:
	Emp_class(string emp_name = "");
	virtual ~Emp_class();
	virtual void cala_salary() = 0;	
	virtual void print_info() = 0;	
	virtual void grade_pro() = 0;	
protected:
	string	name;	
	int	grade;	
	double	mont_salary;	
	static int	num;	
private:
};
int Emp_class::num = 1000;
Emp_class::Emp_class(string emp_name)
{
	cout<<"------------------"<<endl;
	cout<<"请输入"<<emp_name<<"员工姓名:"<<endl;
	cin>>name;
	num++;
}

Emp_class::~Emp_class()
{
	cout<<"~Emp_class"<<endl;
}

然后实现Mang_class,这里的话来一个虚继承:

class Mang_class:virtual public Emp_class
{
public:
	Mang_class();
	~Mang_class();
	void cala_salary();	
	void print_info();	
	void grade_pro();		
protected:
	double fmont_salary;		
private:
	int num_pri;
};
Mang_class::Mang_class()
	:Emp_class("经理"),fmont_salary(8000),num_pri(num)
{
}

Mang_class::~Mang_class()
{
	cout<<"~Mang_class"<<endl;
}

void Mang_class::cala_salary()
{
	mont_salary = fmont_salary;
}
void Mang_class::print_info()
{
	cout<<"-------经理------"<<endl;
	cout<<"经理姓名:"<<name<<endl;
	cout<<"经理编号:"<<num_pri<<endl;
	cout<<"经理级别:"<<grade<<endl;
	cout<<"经理薪水:"<<mont_salary<<endl;
	cout<<"-------经理------"<<endl;
}

然后实现sale_class:

class Sale_class:virtual public Emp_class
{
public:
	Sale_class();
	~Sale_class();
	void cala_salary();	
	void print_info();	
	void grade_pro();	
protected:
	int sale_amounts;	
	double per_salary;	
private:
	int	num_pri;	
};
Sale_class::Sale_class()
	:Emp_class("销售"),per_salary(0.04),num_pri(num)
{
	cout<<"请输入销售额:"<<endl;
	cin>>sale_amounts;
	
}

Sale_class::~Sale_class()
{
	cout<<"~Sale_class"<<endl;
}

void Sale_class::cala_salary()
{
	mont_salary = sale_amounts*per_salary;
}
void Sale_class::print_info()
{
	cout<<"-------销售人员------"<<endl;
	cout<<"销售人员姓名:"<<name<<endl;
	cout<<"销售人员编号:"<<num_pri<<endl;
	cout<<"销售人员级别:"<<grade<<endl;
	cout<<"销售人员薪水:"<<mont_salary<<endl;
	cout<<"-------销售人员------"<<endl;
}

void Sale_class::grade_pro()
{
	grade = 3;
}

然后实现salemang_class,这个类公有继承前边两个类:

class SaleMang_class:public Sale_class,public Mang_class
{
public:
	SaleMang_class();
	~SaleMang_class();
	void cala_salary();	
	void print_info();	
	void grade_pro();	
protected:
private:
	int	num_pri;	
};
SaleMang_class::SaleMang_class()
	:Emp_class("销售经理"),Sale_class(),Mang_class(),num_pri(num)
{
	per_salary = 0.05;
	fmont_salary = 5000;
}

SaleMang_class::~SaleMang_class()
{
	cout<<"~SaleMang_class"<<endl;
}

void SaleMang_class::cala_salary()
{
	mont_salary =fmont_salary + sale_amounts*per_salary;
}
void SaleMang_class::print_info()
{
	cout<<"-------销售经理------"<<endl;
	cout<<"销售经理姓名:"<<name<<endl;
	cout<<"销售经理编号:"<<num_pri<<endl;
	cout<<"销售经理级别:"<<grade<<endl;
	cout<<"销售经理薪水:"<<mont_salary<<endl;
	cout<<"-------销售经理------"<<endl;
}

void SaleMang_class::grade_pro()
{
	grade = 3;
}
最后实现tech_class类:
class Tech_class:public Emp_class
{
public:
	Tech_class();
	~Tech_class();
	void cala_salary();	
	void print_info();	
	void grade_pro();	
protected:
	double work_hours;	
	const int hout_salary;	
private:
	int num_pri;
};
Tech_class::Tech_class()
	:Emp_class("技术"),hout_salary(100),num_pri(num)
{
	cout<<"请输入工作小时数:"<<endl;
	cin>>work_hours;
}

Tech_class::~Tech_class()
{
	cout<<"~Tech_class"<<endl;
}

void Tech_class::cala_salary()
{
	mont_salary = work_hours*hout_salary;
}
void Tech_class::print_info()
{
	cout<<"--------技术人员------"<<endl;
	cout<<"技术人员姓名:"<<name<<endl;
	cout<<"技术人员编号:"<<num_pri<<endl;
	cout<<"技术人员级别:"<<grade<<endl;
	cout<<"技术人员薪水:"<<mont_salary<<endl;
	cout<<"--------技术人员------"<<endl;
}

void Tech_class::grade_pro()
{
	grade = 3;
}

好到这里各类的实现就完成了,下面建立main_emp来进行调用:

Emp_class *p[] = {new Tech_class,new Mang_class,new Sale_class,new SaleMang_class};
	for (int i = 0;i<sizeof(p)/sizeof(p[0]);i++)
	{
		p[i]->cala_salary();
		p[i]->grade_pro();  
		p[i]->print_info();
	}

	for (int i = 0;i<sizeof(p)/sizeof(p[0]);i++)
	{
		delete p[i];
	}

输出结果如下:


哈哈,成了,然后下边还看到了一个有意思的东西,叫typeid和dynamic_cast ,它们是 C++ 运行时类型信息 RTTI(run time type identificaiton)重要组成部分。运行时信息,来自于多态,所以以下运算符只用于基于多态的继承体系中。

例如,假如我们看胡月她男朋友表现勤奋,要给他加工资,怎么加呢?

改下主函数以及给salemang_class类添加一个成员函数就可以了,哈哈,到此结束。拜拜。
	Emp_class *p[] = {new Tech_class,new Mang_class,new Sale_class,new SaleMang_class};
	for (int i = 0;i<sizeof(p)/sizeof(p[0]);i++)
	{
		if (typeid(*p[i]) == typeid(SaleMang_class) )
		{
			SaleMang_class* ps =dynamic_cast<SaleMang_class*>(p[i]);
			ps->salary_pro(10000);
		}
		p[i]->cala_salary();
		p[i]->grade_pro();  
		p[i]->print_info();
	}


	for (int i = 0;i<sizeof(p)/sizeof(p[0]);i++)
	{
		delete p[i];
	}

欢迎一起讨论,谢谢观看!

代码以及分析文件已经上传,可以去这里(https://download.csdn.net/download/qq_33268208/10463297)下载。









  • 14
    点赞
  • 62
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值