c++工资管理系统

用类的方法

描述:

根据是否为经理和普通职员发工资

如果是经理,则工资为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;
}



  • 0
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值