用类的方法
描述:
根据是否为经理和普通职员发工资
如果是经理,则工资为10000加上入职时间乘以5000
反之则为2000加上入职时间 乘以200
代码如下:
//SalarySystem.h
#pragma once
#include <string>
#include <iostream>
using namespace std;
const int MAX_COUNT = 1000;
// 员工类即基类
class Emplyee
{
public:
Emplyee(string strName, int nYears)
: m_strName(strName) , m_nYears(nYears)
{
};
public:
virtual int GetSalary() = 0;
string GetName()
{
return m_strName;
}
protected:
int m_nYears;
string m_strName;
};
//经理类
class Manager : public Emplyee
{
public:
Manager(string strName, int nYears)
: Emplyee(strName, nYears) //利用基类的构造函数,完成对属性的初始化工作
{
};
public:
virtual int GetSalary()
{
return 5000*m_nYears+10000;
}
};
//普通员工类
class Worker : public Emplyee
{
public:
Worker(string strName , int nYears)
: Emplyee(strName, nYears)
{
};
public:
virtual int GetSalary()
{
return 200*m_nYears+2000;
}
};
class SalarySystem
{
public:
SalarySystem(void);
~SalarySystem(void);
public:
void InputEmplyee(void);
void DisplaySalary(void);
double GetAverSalary(void);
private:
int m_nCount; //当前员工数目
Emplyee* m_arrEmplyee[MAX_COUNT];
};
// SalarySystem.cpp : 定义控制台应用程序的入口点。
//
#include "stdafx.h"
#include "SalarySystem.h"
SalarySystem::SalarySystem(void)
{
m_nCount = 0;
}
SalarySystem::~SalarySystem(void)
{
for (int i=0;i<m_nCount;++i)
{
Emplyee* pEmplyee = m_arrEmplyee[i];
delete pEmplyee;
m_arrEmplyee[i] = NULL;
}
}
void SalarySystem::InputEmplyee(void)
{
cout<<"请输入员工信息\n"<<"格式:\n员工姓名\t入职时间\t是否为经理级别\n"<<endl;
string strName = "";
int nYears = 0;
bool bManager = false;
int nIndex = 0;
while (nIndex<MAX_COUNT)
{
cin.clear();
cin>>strName>>nYears>>bManager;
if("end" == strName)
break;
Emplyee* pEmplyee = NULL;
if(bManager)
{
pEmplyee = new Manager(strName,nYears);
}
else
{
pEmplyee = new Worker(strName,nYears);
}
m_arrEmplyee[nIndex]=pEmplyee;
++nIndex;
}
m_nCount = nIndex;
}
double SalarySystem::GetAverSalary()
{
int nTotal = 0;
for (int i=0;i<m_nCount;++i)
{
Emplyee* pEmplyee = m_arrEmplyee[i];
nTotal += pEmplyee->GetSalary();
}
return(double)nTotal/(m_nCount);
}
void SalarySystem::DisplaySalary(void)
{
cout<<"工资管理系统"<<endl;
cout<<"当前员工总数:"<<m_nCount<<"\n平均工资是:"<<GetAverSalary()<<endl;
cout<<"员工具体工资信息如下:"<<endl;
for (int i=0;i<m_nCount;++i)
{
Emplyee* pEmplyee = m_arrEmplyee[i];
cout<<pEmplyee->GetName()<<"\t"<<pEmplyee->GetSalary()<<endl;
}
}
int _tmain(int argc, _TCHAR* argv[])
{
SalarySystem nSalarySys;
nSalarySys.InputEmplyee();
nSalarySys.DisplaySalary();
return 0;
}