要求编写一个简单的人员信息管理程序,具体要求如下:

(1)程序涉及到五个类,分别是employee,technician,salesman,manager,salsemanager。这五个类的关系为:employee是顶层父类,technician,salesman,manager是employee的子类,salsemanager是salesman,manager的子类。

(2)employee具有员工号,姓名,收入等属性,有设置姓名,获取姓名,获取员工号,获取收入等函数。

(3)technician的收入计算方法为工作小时数*时薪,另外具有设置工作小时数,时薪的函数,具有工作小时数和时薪的属性。
salesman的收入计算方法为销售额*提成比例,另外具有设置销售额,提成比例的函数,具有销售额和提成比例的属性。
manager的收入计算方法为固定月薪,另外具有设置固定月薪的函数,具有固定月薪的属性。salsemanager收入计算方法为销售额*提成比例+固定月薪。


(4)要求利用employee类型的指针数组,指向8个子类对象(technician,salesman,manager,salsemanager每个类2个),
通过相应方法输出这些对象的姓名(姓名的初始化通过键盘录入),员工号,收入(多态的形式)。

(5)整个程序分为3个文件,employee.h,employee. cpp,mainemployee.cpp,分别用来声明类,实现类,
以及实现主函数。在VC++环境下以project的形式进行联编并输出结果。

 

主函数

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

int _tmain(int argc, _TCHAR* argv[])
{
	  int hour=210;
	 int hourWage=13;


	  employee p1 ;
	  manager m;
	  p1.setName("张三");
	  p1.setNumber(1001);
	
	  
	  cout<<"姓名:"<<p1.getName()<<endl;
	  cout<<"工号:"<<p1.getNumber()<<endl;
	  cout<<"职位:"<<m.position()<<endl;
	  m.setMonthPay(2500);
	  cout<<"工资:"<<m.pay()<<endl;
	  cout<<"*******************:"<<endl;
	   
	  employee p2;
	  technician t;
	  p2.setName("李四");
	  p2.setNumber(1002);
	  
	  cout<<"姓名:"<<p2.getName()<<endl;
	  cout<<"工号:"<<p2.getNumber()<<endl;
	  cout<<"职位:"<<t.position()<<endl;
	  t.setHour(hour);
	  t.setHourPay(hourWage);
	  cout<<"工资:"<<t.pay()<<endl;
	  cout<<"*******************:"<<endl;
	    employee p3;
	  salesman s;
	  p3.setName("王二");
	  p3.setNumber(1003);
	  
	  cout<<"姓名:"<<p3.getName()<<endl;
	  cout<<"工号:"<<p3.getNumber()<<endl;
	  cout<<"职位:"<<s.position()<<endl;
	  s.setRate(0.3);
	  s.setSale(20000);
	  cout<<"工资:"<<s.pay()<<endl;
	  cout<<"*******************:"<<endl;
	  	    employee p4;
	  salsemanager s1;
	  p4.setName("麻子");
	  p4.setNumber(1004);
	  
	  cout<<"姓名:"<<p4.getName()<<endl;
	  cout<<"工号:"<<p4.getNumber()<<endl;
	  cout<<"职位:"<<s1.position()<<endl;
	  s1.setRate(0.3);
	  s1.setSale(20000);
	  s1.setMonthPay(2500);
	  cout<<"工资:"<<s1.pay()<<endl;
	  cout<<"*******************:"<<endl;
	
	
	return 0;
}


类声明

#pragma once


class employee
{
public:
	void setNumber(int number);
	void setName(char *name);
	int getNumber();
	char*getName();
	double getSalary();
	virtual double pay();
	
	int e_number;
	char e_name[20];
	double e_salary;
	
};
class manager:public employee
{
public:
	virtual void setMonthPay(int pay);
	virtual char* position( );
	double pay();
private:
	int monthPay;
};
class technician:public employee
{
public:
	void setHour(int hour);
	void setHourPay(int hourPay);
	virtual char* position();
	double pay();
	
private:
	int t_hour;
	int t_hourPay;
};
class salesman:public employee
{
public:
	virtual void setRate(double rate);
	virtual void setSale(int sale);
	virtual char* position();
    double pay();

private:
	int s_sale;
	double s_rate;
};
class salsemanager:public salesman,public manager
{
public:
	double pay();
	void setRate(double rate);
	void setSale(int sale);
	void setMonthPay(int pay);
	virtual char* position();
private:
	int s_sale;
	double s_rate;
	int monthPay;
};


类实现

#include "StdAfx.h"
//#include "employee.h"
#include<string.h>
class employee
{
public:
 void setNumber(int number);
 void setName(char *name);
 int getNumber();
 char*getName();
 double getSalary();
 virtual double pay();
private:
 int e_number;
 char e_name[20];
 double e_salary;
 
};
void employee::setNumber(int number){e_number = number;}
void employee::setName(char *name){ strcpy(e_name,name);}
int employee::getNumber(){return e_number;}
char*employee::getName(){ return e_name;}
double employee::getSalary(){ return e_salary;}
double employee::pay(){ return e_salary;}

class manager:public employee
{
public:
 virtual void setMonthPay(int pay);
 double pay();
 virtual char* position( );
private:
 int monthPay;
};

void manager::setMonthPay(int pay){ monthPay = pay;}
 double manager::pay(){ return monthPay;}
 char* manager::position( ){return "manager";}

class technician:public employee
{
public:
 void setHour(int hour);
 void setHourPay(int hourPay);
 virtual char* position();
 double pay();
 
private:
 int t_hour;
 int t_hourPay;
};
 void technician::setHour(int hour){t_hour = hour;}
 void technician::setHourPay(int hourPay){t_hourPay = hourPay;}
   char* technician::position(){ return "technician";}
 double technician::pay(){  return t_hour*t_hourPay;}

 class salesman:public employee
{
public:
 virtual void setRate(double rate);
 virtual void setSale(int sale);
 virtual char* position();
    double pay();

private:
 int s_sale;
 double s_rate;
};
 void salesman::setRate(double rate){ s_rate = rate;}
 void salesman::setSale(int sale){ s_sale = sale;}
 char* salesman::position(){ return "salesman";}
    double salesman::pay(){ return s_sale*s_rate; }

 class salsemanager:public salesman,public manager
{
public:
 double pay();
 void setRate(double rate);
 void setSale(int sale);
 virtual char* position();
 void setMonthPay(int pay);
private:
 int s_sale;
 double s_rate;
 int monthPay;
};
  double salsemanager::pay(){ return  monthPay+ s_rate*s_sale;}
 void salsemanager::setRate(double rate){ s_rate = rate;}
 void salsemanager::setSale(int sale){ s_sale = sale;}
 char* salsemanager::position(){ return "salsemanager";}
 void salsemanager::setMonthPay(int pay){ monthPay = pay;}

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值