【c++】公司职员系统

项目要求:

http://wenku.baidu.com/link?url=7W1Xe8gGtxs-uS-idLhFEEtPg_EIwlr7IdicivC5M7aDdy-QsUWjFx-qJz3f2_Zkh51mvKAHwoOVOjvXqVpfHSJpHw1tzaLmvMCYXyzkfNi

系统分成5个类:Employee基类,包含Manager类,SalesMan类,SalesManager类,Techicians类,EmployeeManager类(管理器类),头文件代码如下(cpp文件太多了,有需要的可以私信我):


#pragma once

enum Sex
{
    MALE,
    FEMALE,
};

enum Department
{
    DEPARTMENT_1,
    DEPARTMENT_2,
    DEPARTMENT_3,
    DEPARTMENT_4,
};

enum EmployeeType
{
    MANAGER,
    TECHNICIAN,
    SALESMAN,
    SALESMANAGER,
};


#pragma once
#include "Enum.h"

class CEmployee
{
public:
    CEmployee();
    CEmployee(const CEmployee& Ep);
    ~CEmployee();

    void SetName(const char* pstrName);
    void SetNumber(const int nNumber);
    void SetSex(const Sex nSex );
    void SetDepartment(const Department nDep);
    void SetGrade(const int nGrade);

    const char* GetName() const;
    const int GetNumber() const;
    int GetSex() const;
    int GetDepartment()const;
    const int GetGrade() const;

    //判断两个职员的名字是否相同   
    bool IsSameName(char* pName,int nNum)const;

    //拷贝构造函数,深拷贝指向职员基类的指针
    virtual CEmployee* Copy();
    virtual double GetSalary() const;
    virtual EmployeeType GetEmployeeType() const;

protected:
    //初始化基类中的数据成员
    void Init(int nNum,char* pstrName,Sex nSex,
              Department nDepartment,int nGrade);

private:
    char*        m_pstrName;      //职员姓名
    int          m_nNumber;       //职员编号
    Sex          m_nSex;          //职员性别
    Department   m_nDepartment;   //职员所在部门
    int          m_nGrade;        //职员级别
    EmployeeType m_nET;           //职员职务
};

#pragma once
#include "Employee.h"


class CManager : public CEmployee
{
public:
    CManager();
    //自定义构造函数
    CManager(int nNum,char* pstrName,Sex nSex,
             Department nDepartment,int nGrade,double m_dFixSalary);
    ~CManager();
    //拷贝构造函数
    CManager(const CManager& Mgr);

    void SetFixSalary(double dSalary);

    virtual double GetSalary()const;
    virtual EmployeeType GetEmployeeType()const;
    virtual CEmployee* Copy();

private:    
    double m_dFixSalary;

};
#pragma once
#include "Employee.h"

class CSalesMan : public CEmployee
{
public:
    CSalesMan();
    ~CSalesMan();
    CSalesMan(const CSalesMan& SM);
    CSalesMan(int nNum,char* pstrName,Sex nSex,
        Department nDepartment,int nGrade,double dSalesVolume);

    void SetSalesVolume(double dSalesVolume);

    virtual double GetSalary()const;
    virtual EmployeeType GetEmployeeType()const;
    virtual CEmployee* Copy();
private:
    double m_dSalesVolume;
};

#pragma once
#include "Employee.h"

class CSalesManager : public CEmployee
{
public:
    CSalesManager();
    ~CSalesManager();

    CSalesManager(int nNum,char* pstrName,Sex nSex,
                  Department nDepartment,int nGrade,double dSalesVolume,double dFixSalary);
    CSalesManager(const CSalesManager& SMgr);

    
    void SetSalesVolume(double dSalesVolume);
    void SetFixSalary(double dFixSalary);
    virtual double GetSalary() const;
    virtual EmployeeType GetEmployeeType()const;
    virtual CSalesManager* Copy();
private:
    double m_dSalesVolume;
    double m_dFixSalary;

};

#pragma once
#include "Employee.h"

class CTechnician:public CEmployee
{
public:
    CTechnician();
    ~CTechnician();
    CTechnician(int nNum,char* pstrName,Sex nSex,
                Department nDepartment,int nGrade,double dWorkTime);
    CTechnician(const CTechnician& Tec);

    void SetWorkTime(double dWorkTime);
    virtual double GetSalary()const;
    virtual EmployeeType GetEmployeeType()const;
    virtual CTechnician* Copy();
private:
    double m_dWorkTime;

};
#pragma once
#include "stdafx.h"
#include <vector>
#include "Manager.h"
#include "SalesMan.h"
#include "Technicians.h"
#include "SalesManager.h"

using namespace std;

class CEmployeeManager
{
public:
    CEmployeeManager();
    ~CEmployeeManager();
    CEmployeeManager(CEmployeeManager& EmpMgr);

    //增删查方法
    void Add(CEmployee* pE);
    void Delete(const int nIndex);
    CEmployee* Find(char* strName) const;

    //获取容器中第i(nIndex)个容器
    CEmployee* GetEmployee(int nIndex);
    CEmployeeManager* Copy();
    //将管理器中的数据拷贝到另一管理器中
    void CopyTo(CEmployeeManager*)const;

    //获得容器中职员个数
    int GetSize();
    //获取容器中上次选中职员的在容器中的位置
    int GetPreSel()const;
    //设置容器中下次选中职员在容器中的位置
    void SetPreSel(int nIndex);
    //删除容器及其中的指针
    void DeleteVector();
    //仅删除容器中的指针
    void Clear();

private:
    std::vector <CEmployee*>     m_vEM;    //职员管理器指针
    int                          m_nPreSel;//记录对话框中上次选中的职员
};

注:本文也是初学者,希望大家能共同学习!



  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
公司雇员(Employee)包括经理(Manager),技术人员(Technician)和销售员(Salesman)。开发部经理(DeveloperManger),既是经理也是技术人员。销售部经理(SalesManager),既是经理也是销售员。 以Employee类为虚基类派生出Manager,Technician和Salesman类;再进一步派生出Developermanager和Salesmanager类。 Employee类的属性包括姓名、职工号、工资级别,月薪(实发基本工资加业绩工资)。操作包括月薪计算函数(pay()),该函数要求输入请假天数,扣去应扣工资后,得出实发基本工资。 Technician类派生的属性有每小时附加酬金和当月工作时数,及研究完成进度系数。业绩工资为三者之积。也包括同名的pay()函数,工资总额为基本工资加业绩工资。 Salesman类派生的属性有当月销售额和酬金提取百分比,业绩工资为两者之积。也包括同名的pay()函数,工资总额为基本工资加业绩工资。 Manager类派生属性有固定奖金额和业绩系数,业绩工资为两者之积。工资总额也为基本工资加业绩工资。 而DeveloperManager类,pay()函数是将作为经理和作为技术人员业绩工资之和的一半作为业绩工资。 SalesManager类,pay()函数则是经理的固定奖金额的一半,加上部门总销售额与提成比例之积,这是业绩工资。 编程实现工资管理。特别注意pay()的定义和调用方法:先用同名覆盖,再用运行时多态。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值