走进C++程序世界---------雇员工资管理系统

来源:互联网 发布:彩票预测app源码 编辑:程序博客网 时间:2024/04/28 21:40

前面对C++ 面向对象的基本了解和认识,下面来运用前面的基础知识,来实现一个简单的雇员工资管理系统,雇员分为2中,普通员工和管理者,两者工资和工作年限挂钩。具体参见下图:


具体实现参见下面的代码:
/*File : salarySystem.h *Auth : sjin *Date : 2014-04-27 *Mail : 413977243@qq.com */#ifndef __SALARYSYSTEM_H#define __SALARYSYSTEM_H#include <string>#include <iostream>#define MAX_COUNT 1000using namespace std;//员工类class Emplyee{public://构造函数//根据员工的名字和入职时间构造员工对象Emplyee(string strName , int nYears) : m_strName(strName),m_nYears(nYears){};//获得得员工的工资。virtual int GetSalary() const {return 0;};//提供一个公共接口,使外界得到员工的名字string GetName() const { return m_strName;};protected:int m_nYears; //入职时间string m_strName; //姓名};/*经理类 *因为经理是员工中的一种,从员工类派生 */class Manager : public Emplyee {public:/*使用基类的高走函数,完成对属性的初始化工作*/Manager(string strName,int nYears):Emplyee(strName,nYears) {};/* 对基类提供的纯虚函数进行自定义*/virtual int GetSalary() const { return 5000*m_nYears + 10000;};};class Worker: public Emplyee {public:/*使用基类的构造函数,完成对属性的初始化工作*/Worker(string strName,int nYears):Emplyee(strName,nYears) {};/* 对基类提供的纯虚函数进行自定义*/virtual int GetSalary() const { return 200*m_nYears + 2000;};};class SalaryStstem {public:/*构造函数和析构函数*/SalaryStstem(void);~SalaryStstem(void);public:/*输入员工信息*/void InputEmplyee(void);/*现实员工信息*/void DisplaySalary(void);/*计算平均工资*/double GetAverSalary(void);private:/*当前员工总数*/int m_nCount;/*用于保存所有员工对象*/Emplyee *m_arrEmplyee[MAX_COUNT];};#endif


/*File : salarySystem.cpp *Auth : sjin *Date : 2014-04-27 *Mail : 413977243@qq.com */#include "salarySystem.h"/*构造函数初始化*/SalaryStstem::SalaryStstem(void){m_nCount = 0;// 初始化员工总数为0}/*析构函数 清理资源,释放内存*/SalaryStstem::~SalaryStstem(void){int i = 0;for(i = 0; i < m_nCount; i++){Emplyee *pEmplyee = m_arrEmplyee[i];delete pEmplyee;m_arrEmplyee[i] = NULL;}}void help(){//提示信息cout << "*************************************************" << endl;cout << "* 请输入员工信息                                *\n" <<    "* 格式: 员工姓名 入职时间 是否为经理级别       *\n" <<    "* 例如: sjin 4 0                               *\n" <<    "* 输入end 表示输入结束                          *\n" <<     "* 输入help 显示提示信息                         *" << endl;cout << "*************************************************" << endl;}/*获取用户输入*/void SalaryStstem::InputEmplyee(void){string strName = "";int nYears = 0;bool bManager = false;int nIndex = 0;// 提示信息help();/*开始循环接收用户输入的用户数据*/while(nIndex < MAX_COUNT){//清空输入流cin.clear();//读取用户数据cin >> strName ;//cout << strName << nYears << bManager<<endl;if ("end" == strName){break;}if("help" == strName){help();continue;}cin >> nYears >> bManager;Emplyee *pEmplyee = NULL;if(bManager){pEmplyee = new Manager(strName,nYears);} else {pEmplyee = new Worker(strName,nYears);}m_arrEmplyee[nIndex] = pEmplyee;++nIndex;}//保存员工数量总数m_nCount = nIndex;}/*输出员工工资信息*/void SalaryStstem::DisplaySalary(void){cout << "工资管理系统" << endl;cout << "当前员工总数:" << m_nCount <<"\n平均工资" << GetAverSalary() << endl;cout << "员工具体工资信息如下:" << endl;for ( int i = 0; i < m_nCount; i++){cout << "姓名:" << m_arrEmplyee[i]->GetName() << "\t 工资" <<m_arrEmplyee[i]->GetSalary() << endl;}}/*输入员工平均工资*/double SalaryStstem::GetAverSalary(){int nTotal = 0;for ( int i = 0; i < m_nCount; i++){nTotal += m_arrEmplyee[i]->GetSalary();}return (double)nTotal/(m_nCount);}

/*File : main.cpp *Auth : sjin *Date : 2014-04-27 *Mail : 413977243@qq.com */#include "salarySystem.h"int main(){//创建SalaryStstem 对象SalaryStstem nSalarySys;//获得用户输入nSalarySys.InputEmplyee();cout << "*********员工的工资信息表**********" << endl;//显示具体的工资信息nSalarySys.DisplaySalary();return 0;}

通过这个简单的例子,可以将前面的知识进行有效的实践。

3 1
原创粉丝点击