一、设计题目
职工工资表
二、设计目的
设计一个职工工资表,能够通过菜单实现简单的信息录入与显示操作。注意对象数组的使用,利用赋值兼容规则实现不同类型的员工的信息存储,并使用虚函数完成对于不同类型员工的工资计算任务。
三、设计要求
使用继承的方法,设计5个类,代表四类员工,利用多态性实现信息的输入与输出。
四、设计思想
1、类的结构图
employee |
name:string empNo:string accumPay:float |
SetName(string names):void GetName():string SetEmpNo(string no):void GetEmpNo():string GetaccumPay():float virtual pay():void |
technician |
workHours:int hourlyRate:float |
SetRate(int r):void SetworkHours(int wh):void pay():void |
salesman |
CommRate:float sales:float |
setCommRate(float c):void setSales(float s):void pay():void |
manager |
monthlyPay:float |
setMonthPay(float m):void pay():void |
salesmanager |
pay():void |
话不多说,直接上代码
#include<iostream>
#include<string>
using namespace std;
class employee{
protected:
string name;
string id;
double accumpay;
public:
void setname(string n){name=n;}
//string getname(){return name;}
void setid(string i){id=i;}
//string getid(){return id;}
virtual void pay(){}
double getpay(){return accumpay;}
void print(){
cout<<"姓名为"<<name<<"工号为"<<id<<"工资为"<<getpay()<<endl;
}
};
class technician:virtual public employee{
protected:
int rate;
int hours;
public:
void setrate(int r){rate=r;}
void sethours(int h){hours=h;}
float getpay(){return accumpay=rate*hours;}
};
class saleman:virtual public employee{
protected:
float commrate;
float sales;
public:
void setcommrate(float c){commrate=c;}
void setsales(float s){sales=s;}
float getpay(){return accumpay=commrate*sales;}
};
class manager:virtual public employee{
protected:
float monthlypay;
public:
void setmonthlypay(float mp){monthlypay=mp;}
float getpay(){return accumpay=monthlypay;}
};
class salemanager:virtual public saleman,public manager{
public:
float getpay(){return accumpay=monthlypay+commrate*sales;}
};
void menu(){
cout<<"请输入1-3"<<endl
<<"1.添加信息"<<endl
<<"2.浏览信息"<<endl
<<"3.退出程序"<<endl;
}
int main(){
employee *e[50];
technician t[50];
saleman s[50];
manager m[50];
salemanager sm[50];
int a=0;
string i,n;
int x,y;
int wh;
float hr,c,sa,mp;
int j;
for( ; ; ){
menu();
cin>>x;
if(x<1||x>3){cout<<"输入错误,请从新输入,请输入1-3:"<<endl;}
else{
switch(x){
case 1:cout<<"请输入员工的类型:1.技术人员;<2.销售人员;<3.经理;<4.销售经理>"<<endl;
cin>>y;
if(y<1||y>4){cout<<"输入错误,请重新输入,请输入1-4:"<<endl;}
else{
switch(y){
case 1:
cout<<"技术人员信息初始化..."<<endl
<<"请输入员工编号:";cin>>i;t[a].setid(i);
cout<<"请输入员工姓名:";cin>>n;t[a].setname(n);
cout<<"请输入技术人员工作时间:";cin>>wh;t[a].sethours(wh);
cout<<"请输入技术人员时薪:";cin>>hr;t[a].setrate(hr);
t[a].getpay();
e[a]=&t[a];
a++;
break;
case 2:
cout<<"销售人员信息初始化..."<<endl
<<"请输入员工编号:";cin>>i;s[a].setid(i);
cout<<"请输入员工姓名:";cin>>n;s[a].setname(n);
cout<<"请输入销售人员销售额:";cin>>sa;s[a].setsales(sa);
cout<<"请输入销售人员工作效率:";cin>>c;s[a].setcommrate(c);
s[a].getpay();
e[a]=&s[a];
a++;
break;
case 3:
cout<<"经理信息初始化..."<<endl
<<"请输入员工编号:";cin>>i;m[a].setid(i);
cout<<"请输入员工姓名:";cin>>n;m[a].setname(n);
cout<<"请输入经理固定工资:";cin>>mp;m[a].setmonthlypay(mp);
m[a].getpay();
e[a]=&m[a];
a++;
break;
case 4:
cout<<"销售经理信息初始化..."<<endl
<<"请输入员工编号:";cin>>i;sm[a].setid(i);
cout<<"请输入员工姓名:";cin>>n;sm[a].setname(n);
cout<<"请输入销售经理固定工资:";cin>>mp;sm[a].setmonthlypay(mp);
cout<<"请输入销售经理下属部门销售额:";cin>>sa;sm[a].setsales(sa);
cout<<"请输入销售经理提成:";cin>>c;sm[a].setcommrate(c);
sm[a].getpay();
e[a]=&sm[a];
a++;
} break;
case 2:{
for(j=0;j<a;j++){
e[j]->print();
}break;
}
}
}
}if(x==3){
cout<<"程序已退出,感谢您的观看!"<<endl;
break;
}
}
return 0;
}