问题及代码:
/*
*Copyright (c) 2014,烟台大学计算机学院
*ALL right reserved
*文件名:学生成绩统计
*作者;童宇
*完成日期:2015 年 6月 3日
*版本号v1.0
*问题描述:(该题作为期中实验报告,单独编写文档提交)某公司雇员(employee)包括经理 (manager)、技术人员(technician)和销售员(salesman)。
开发部经理(developermanager), 既是经理也是技术人员。
销售部经理(salesmanager),既是经理也是销售员。
employee类的属性包括姓名、职工号、工资级别、月薪(实发基本工资加业绩工资)。
操作 包括月薪计算函数(pay()),该函数要求输入请假天数,(一天扣70元),级别1的基本工资 为1500元,级别2的基本工资2500元,级别3的基本工资为3500元,扣去应扣工资后,得出实 发基本工资。
technician类派生的属性有每小时附加酬金和当月工作时数,及研究完成进度系数。业绩工 资为三者之积。也包括同名的pay( )函数,工资总额为基本工资加业绩工资。
salesman类派生的属性有当月销售额和酬金提取百分比,业绩工资为两者之积。也包括同名 的pay( )函数,工资总额为基本工资加业绩工资。
manager类派生属性有固定奖金额和业绩系数,业绩工资为两者之积。工资总额为基本工资 加业绩工资。
developermanager类,pay( )函数是将作为经理和作为技术人员业绩工资之和的一半作为业绩 工资。
salesmanager类,pay( )函数则是经理的固定奖金额的一半,加上部门总销售额与提成比例之 积,为业绩工资。 编程实现工资管理。
*输入描述:
*程序输出:
*/
#include <iostream>
using namespace std;
class employee //某公司雇员(employee)
{
protected:
string name;
int num;
int level;
double bpay; //基础工资
double apay; //提成
double salary=bpay+apay;
public:
employee(string a,int b,int c):bpay(0),apay(0)
{
name=a;
num=b;
level=c;
}
virtual double pay()
{
int a;
cout<<"输入请假天数:";
cin>>a;
int spay=a*70;
switch(level)
{
case 1:
bpay=1500;
break;
case 2:
bpay=2500;
break;
case 3:
bpay=3500;
break;
}
bpay=bpay-spay;
return bpay;
}
void printname()
{
cout<<"姓名:"<<name<<" 职工号:"<<num<<" ";
}
void print()
{
cout<<"姓名:"<<name<<" 职工号:"<<num<<" 月薪:"<<salary<<endl;
}
friend string getname(employee *a);
};
class manager:virtual public employee //经理 (manager)继承于雇员类
{
protected:
int amoney;
double s;
public:
manager(string a,int b,int c,double d,double e):employee(a,b,c)
{
amoney=d;
s=e;
}
virtual double pay()
{
employee::pay();
apay=amoney*s;
return (bpay+apay);
}
};
class technician:virtual public employee //技术人员(technician)继承于雇员类
{
protected:
int apayph,time;
double pro;
public:
technician(string a,int b,int c,double d,int e,double f):employee(a,b,c)
{
apayph=d;
time=e;
pro=f;
}
virtual double pay()
{
employee::pay();
apay=apayph*time*pro;
return (bpay+apay);
}
};
class salesman:virtual public employee //销售员(salesman)继承于雇员类
{
protected:
double smoney,p;
public:
salesman(string a,int b,int c,double d,double e):employee(a,b,c)
{
smoney=d;
p=e;
}
virtual double pay()
{
employee::pay();
apay=smoney*p;
return (bpay+apay);
}
};
class developermanager:public technician,public manager //开发部经理(developermanager), 既是经理也是技术人员。
{
public:
developermanager(string a,int b,int c,double d,int e,double f,int g,double h):employee(a,b,c),technician(a,b,c,d,e,f),manager(a,b,c,g,h) {}
virtual double pay()
{
employee::pay();
bpay=employee::bpay;
double pay(int day,char level,double amoney,double s);
double pay(int day,char level,double apayph,double time,double pro);
apay=manager::apay+technician::apay;
return (bpay+apay);
}
};
class salesmanager: public manager, public salesman //销售部经理(salesmanager),既是经理也是销售员。
{
public:
salesmanager(string a,int b,int c,double d,double e,int f,double g):employee(a,b,c),salesman(a,b,c,d,e),manager(a,b,c,f,g) {}
virtual double pay()
{
double pay(int day,char level);
bpay=employee::bpay;
double pay(int day,char level,double amoney,double s);
double pay(int day,char level,double smoney,double p);
apay=manager::apay+salesman::apay;
return (bpay+apay);
}
};
class company
{
private:
manager *m[100];
technician *t[100];
salesman *s[100];
developermanager *dm[100];
salesmanager *sm[100];
int mn,tn,sn,dmn,smn;
public:
company():mn(0),tn(0),sn(0),dmn(0),smn(0) {}
void addmanager();
void addtechnician();
void addsalesman();
void adddevelopermanager();
void addsalesmanager();
void jisuanzhengti()
{
int b;
for (b=0; b<mn; b++)
{
m[b]->printname();
m[b]->pay();
}
for (b=0; b<tn; b++)
{
t[b]->printname();
t[b]->pay();
}
for (b=0; b<sn; b++)
{
s[b]->printname();
s[b]->pay();
}
for (b=0; b<dmn; b++)
{
dm[b]->printname();
dm[b]->pay();
}
for (b=0; b<smn; b++)
{
sm[b]->printname();
sm[b]->pay();
}
}
void jisuangeren()
{
string a;
int b;
cout<<"输入姓名:";
cin>>a;
for (b=0; b<mn; b++)
{
if (getname(m[b])==a) m[b]->pay();
}
for (b=0; b<tn; b++)
{
if (getname(t[b])==a) t[b]->pay();
}
for (b=0; b<sn; b++)
{
if (getname(s[b])==a) s[b]->pay();
}
for (b=0; b<dmn; b++)
{
if (getname(dm[b])==a) dm[b]->pay();
}
for (b=0; b<smn; b++)
{
if (getname(sm[b])==a) dm[b]->pay();
}
}
void print()
{
int b;
for (b=0; b<mn; b++)
{
m[b]->print();
}
for (b=0; b<tn; b++)
{
t[b]->print();
}
for (b=0; b<sn; b++)
{
s[b]->print();
}
for (b=0; b<dmn; b++)
{
dm[b]->print();
}
for (b=0; b<smn; b++)
{
sm[b]->print();
}
}
~company()
{
int b;
for (b=0; b<mn; b++) delete m[b];
for (b=0; b<tn; b++) delete t[b];
for (b=0; b<sn; b++) delete s[b];
for (b=0; b<dmn; b++) delete dm[b];
for (b=0; b<smn; b++) delete sm[b];
}
};
void company::addmanager()
{
string a;
int b,c,d;
double e;
cout<<"输入经理信息(姓名、职工号、工资级别、固定奖金额、业绩系数):";
cin>>a>>b>>c>>d>>e;
m[mn]=new manager(a,b,c,d,e);
mn++;
}
void company::addtechnician()
{
string a;
int b,c,d,e;
double f;
cout<<"输入技术人员信息(姓名、职工号、工资级别、每小时附加酬金、当月工作时数、研究完成进度系数):";
cin>>a>>b>>c>>d>>e>>f;
t[tn]=new technician(a,b,c,d,e,f);
tn++;
}
void company::addsalesman()
{
string a;
int b,c,d;
double e;
cout<<"输入销售员信息(姓名、职工号、工资级别、当月销售额、酬金提取百分比):";
cin>>a>>b>>c>>d>>e;
s[sn]=new salesman(a,b,c,d,e);
sn++;
}
void company::adddevelopermanager()
{
string a;
int b,c,d,e;
double f;
int g;
double h;
cout<<"输入开发部经理信息(姓名、职工号、工资级别、每小时附加酬金、当月工作时数、研究完成进度系数、固定奖金额、业绩系数):";
cin>>a>>b>>c>>d>>e>>f>>g>>h;
dm[dmn]=new developermanager(a,b,c,d,e,f,g,h);
dmn++;
}
void company::addsalesmanager()
{
string a;
int b,c,d;
double e;
int f;
double g;
cout<<"输入销售部经理信息(姓名、职工号、工资级别、当月销售额、酬金提取百分比、固定奖金额、业绩系数):";
cin>>a>>b>>c>>d>>e>>f>>g;
sm[smn]=new salesmanager(a,b,c,d,e,f,g);
smn++;
}
string getname(employee *a)
{
return a->name;
}
int main()
{
company a;
int b;
do
{
cout<<"1、添加雇员信息"<<endl
<<"2、请假天数集体输入"<<endl
<<"3、请假天数单个修改"<<endl
<<"4、集体打印工资表"<<endl
<<"5、退出系统"<<endl
<<"输入选项:";
cin>>b;
switch (b)
{
case 1:
{
int c;
cout<<"1、添加技术人员"<<endl
<<"2、添加销售员"<<endl
<<"3、添加经理"<<endl
<<"4、添加开发部经理"<<endl
<<"5、添加销售部经理"<<endl
<<"输入选项:";
cin>>c;
switch (c)
{
case 1:
a.addtechnician();
break;
case 2:
a.addsalesman();
break;
case 3:
a.addmanager();
break;
case 4:
a.adddevelopermanager();
break;
case 5:
a.addsalesmanager();
break;
default:
cout<<"输入错误!!";
}
break;
}
case 2:
a.jisuanzhengti();
break;
case 3:
a.jisuangeren();
break;
case 4:
a.print();
break;
case 5:
cout<<"谢谢使用!!"<<endl;
break;
default:
cout<<"输入错误!!"<<endl;
break;
}
}
while(b!=5);
return 0;
}