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;
}