C++语言课程设计——职工工资表

一、设计题目

职工工资表

二、设计目的

设计一个职工工资表,能够通过菜单实现简单的信息录入与显示操作。注意对象数组的使用,利用赋值兼容规则实现不同类型的员工的信息存储,并使用虚函数完成对于不同类型员工的工资计算任务。

三、设计要求

使用继承的方法,设计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;
}
  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值