计算工资

//公司有四种职位 经理(Manager) 技术人员(Technician) 销售(SaleMan) 销售经理(SaleManager)
//每增加一个人,工号加1
//薪资:经理 8000 技术人员 300/天 销售 总额*4% 销售经理 部门销售额*2%+4000

在代码中,由于代码较多,采取分文件写的方式,首先申明头文件。   写了一个名为“company.h”的头文件,将基类以及派生类的一些函数进行定义申明。

#ifndef _COMPANY_H
#define _COMPANY_H
#include<string.h>
#include<iostream>
using namespace std;
class Company
{
protected:	
	static int number;
	string m_name;
	int m_id;
	double m_salary; 
public:
	Company();
	virtual double GetSalary()=0;
	virtual void show()=0;
}; 
class Manager : virtual public Company
{
protected:
	double m_base;
public:
	Manager(string n,double b);
	double GetSalary();
	void show();
};
class Technician : public Company
{
protected:
	int m_day;
public:
	Technician(string n,int day);
	double GetSalary();
	void show();
};
class SaleMan : virtual public Company
{
protected:
	double m_sale;
public:
	static double sum_sale;
	SaleMan(string n,double s);
	double GetSalary();
	void show();
};
class SaleManager : public SaleMan,public Manager
{
public:
	SaleManager(string n);
	double GetSalary();
	void show();
};
#endif

接下来,我们将头文件内所有的函数进行实现,获取所有不同职员的基本信息以及他们的工资报酬。从以下的代码中可以看出,我们按照题目要求,对于不同的职员不同的工资进行了函数的实现以及获取。

#include<iostream>
#include"company.h"
using namespace std;

int Company::number=0;
double SaleMan::sum_sale=0;
Company::Company()
{
	number++;
	m_id=number;
}
Manager::Manager(string n,double b=8000)
{
	m_name=n;
	m_base=b;
}
double Manager::GetSalary()
{
	m_salary=m_base;
	return m_base;
}
void Manager::show()
{
	cout << "姓名 :" << m_name << " 工号 :" << m_id << " 工资 :" << GetSalary() << endl;
}

Technician::Technician(string n,int day) 
{
	m_name=n;
	m_day=day;
}
double Technician::GetSalary()
{
	m_salary=300*m_day;
	return m_salary;
}
void Technician::show()
{
	cout << "姓名 :" << m_name << " 工号 :" << m_id << " 工资 :" << GetSalary() << endl;
}

SaleMan::SaleMan(string n,double s=0)
{
	m_name=n;
	m_sale=s;
	sum_sale+=m_sale;
}
double SaleMan::GetSalary()
{
	
	m_salary=m_sale*0.04;
	return m_salary;
}
void SaleMan::show()
{
	cout << "姓名 :" << m_name << " 工号 :" << m_id << " 工资 :" << GetSalary() << endl;
}
SaleManager::SaleManager(string n):SaleMan(n),Manager(n,4000)
{
	
}
double SaleManager::GetSalary()
{
	m_salary = m_base + sum_sale * 0.02;
	return m_salary;
}
void SaleManager::show()
{
	cout << "姓名 :" << m_name << " 工号 :" << m_id << " 工资 :" << GetSalary() << endl;
}

通过main函数,实现对上述代码正确性与否的检测。将所有职员的基本信息以及获得的报酬打印出来,在这里采取随机数的方法,有些结果可能不符合实际情况。

#include<iostream>
#include"company.h"
using namespace std;
int main()
{
	srand(time(NULL));
	char name[20]={0};
	Company *pt[5] = {0};
	Company *ps[10] = {0};
	Company *psm = NULL;
	Company *pm = new Manager("aa", 8000);
	pm->show();

	for (int i = 0; i < 5; i++)
	{
		sprintf(name, "Technician%d", i);
		pt[i] = new Technician(name, rand() % 22 + 1);
		pt[i]->show();
	}

	for (int i = 0; i < 10; i++)
	{
		sprintf(name, "S%d", i);
		ps[i] = new SaleMan(name, rand() % 200000);
		ps[i]->show();
	}
	
	psm = new SaleManager("bb");
	psm->show();

	
	return 0;
}

猜你喜欢

转载自blog.csdn.net/tmh_15195862719/article/details/81319582