欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

c++:实现公司员工计算薪资功能

程序员文章站 2022-07-15 16:50:56
...

1、首先明确Person.h里面的内容

(1)公司职员包括:经理Manager、技术人员Technician、销售SalesMan、销售经理SaleManager。

(2)当每增加一个员工,对应的员工工号就加一。

(3)薪资:经理每月固定工资8000元;技术人员每天300元,根据工作天数计算工资;销售人员每月工资是个人销售总额的4%;销售经理每月工资是部门销售总额的2%,再Sale加上固定的工资4000元。

(4)销售经理SaleManager既有固定薪水又有提成,所以直接让它继承Manager和SaleMan;为了减省代码和空间,将manager和SaleMan都是虚继承。

(5)c++中没有java中接口这个概念,可以用纯虚函数实现接口 。

(6)为了计算销售人员的数目,用了两个静态成员变量,一个用来计算总人数,来获取工号,一个用来计算销售总额。

#ifndef _PERSON_H
#define _PERSON_H
#include<iostream>
#include<string.h>
using namespace std;

class Person
{
protected:
    static int count;
    string m_name;
	double m_salary;     //访问权限定义为保护类型是为了能被继承下去
	int m_id;            //工号
public:
	virtual void print() = 0;
	virtual double Get() = 0;        //纯虚函数
};

class Manager : virtual public Person           //经理
{
protected:
    int m_base;
public:
	Manager(string n,int b);
	double Get();
    void show();
};

class Technician : public Person                //技术人员
{
private:
    int m_day;
public:
	Technician(string n,int d);
	double Get();
    void show();
};

class SaleMan : virtual public Person           //销售人员
{
protected:
    static int sum; 
    int m_s1;
public:
	SaleMan(string n,int s1);
	double Get();
    void show();
};

class SaleManager : public Saleman,public Manager         //销售经理
{
public:
	SaleManager(string n);
	double Get();
    void show();
};

#endif

2、根据类中内容编写各个类的成员函数

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

int Person::count = 0;            //静态成员变量 计算工号
int SaleMan::sum = 0;             //静态成员变量 计算部门销售总额

Person::Person()
{
	count++;
	m_id = count;
}

Manager::Manager(string n,int b=8000)
{
	m_name = n;
	m_base = b;
}

double Manager::Get()
{
	m_salary = m_base;        //基本的固定工资
	return m_salary;
}

void Manager::show()
{
	cout<< "名字:" << m_name << "工号:" << m_id << "工资:" << Get() <<endl;
}	

Technician::Technician(string n,int d)
{
	m_name = n;
	m_day = d;
}

double Technician::Get()
{
	m_salary = m_day*300
	return m_salary;
}

void Technician::show()
{
	cout<< "名字:" << m_name << "工号:" << m_id << "工资:" << Get() <<endl;
}

SaleMan::SaleMan(string n,int s1=0)
{
	m_name = n;
	m_s1 = s1;
	sum += m_s1;                //部门销售总额就是个人销售总额的和
}

double SaleMan::Get()
{
	m_salary = 0.04*m_s1;
	return m_salary;
}

void Saleman::show()
{
	cout<< "名字:" << m_name << "工号:" << m_id << "工资:" << Get() <<endl;
}

SaleManager::SaleManager(string n) : SaleMan(n),Manager(n,4000)
{
	//已经继承,不需再写
}

double SaleManager::Get()
{
	m_salary = 0.02*sum + m_base;
	return m_salary;
}

void SaleManager::show()
{
	cout<< "名字:" << m_name << "工号:" << m_id << "工资:" << Get() <<endl;
}

3、最后编写main函数,实现功能

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

int main()
{
	srand(time(NULL));
	char name[20] = {0};
	Person *p1[5] = {0};
	Person *p2[10] = {0};
	Person *p3 = NULL;
	Person *p4 = new Manager("aa",8000);
	
	for(int i=0;i<5;i++)     //技术人员
	{
		sprintf(name,"Technician%d",i);
		p1[i] = new Technician(name,rand() % 22 + 1);
        p1[i]->show();
	}
	
	for(int i=0;i<10;i++)     //销售人员
	{
		sprintf(name,"S%d",i);
		p2[i] = new SaleMan(name,rand() % 100000);
        p2[i]->show();
	}
	
	p3 = new SaleManager("bb");
    p3->show();
	
	return 0;
}