従業員情報管理システム(c++継承)

14374 ワード

  • 簡単な紹介
  • コード
  • educationh
  • educationcpp
  • maincpp


  • 簡単な紹介
  • 従業員(Staff)クラスの1つの属性は教育背景であり、卒業大学と従業員の学歴の2つの属性も含まれているため、教育背景をCEducationクラスに設計し、彼が作成したオブジェクトをサブオブジェクトとしてStaffクラスを組み合わせた.
  • 企業従業員から区分された販売員、行政員、マネージャは、企業従業員の一般的な特徴を持っているため、この3つのクラスはStaffクラスを継承することができ、販売マネージャは販売員とマネージャの2つのクラスの共通の特徴を同時に持っているため、この2つのクラスから派生することができます.これにより,局所的な多重継承関係が生じる.このローカルマルチ継承関係では、Staffクラスはパブリックベースクラスであり、販売マネージャクラスはパブリック派生クラスである.二義性の発生を避けるために,Staffクラスをダミーベースクラスと宣言することができる.煩雑な初期化を避けるために、すべての虚ベースクラスの構造関数にはパラメータがなく、データメンバーはキーボード入力で有効に割り当てられます.

  • コード#コード#education.h
    #ifndef __EDUCATION__H__
    #define __EDUCATION__H__
    #include 
    #include 
    using namespace std;
    const int LEN = 50;
    
    class CEducation
    {
    public:
        CEducation();
        CEducation(char cSchool[], char cDegree);
        ~CEducation();
        void GetEdu(void);
        void PutEdu(void) const;
    private:
        char m_cSchool[LEN];
        char m_cDegree;
    };
    
    class Staff
    {
    public:
        Staff();
        ~Staff();
        void CalculateSal();
        void OutPut();
        void InPut();
    
    protected:
        CEducation Edu;
        int m_iStaffNum;
        char m_cName;
        float m_fRateOfAttend;
        float m_fBasicSal;
        float m_fPrize;
        static int s_iCount;
    };
    
    class CAdminStaff: public Staff
    {
    public:
        CAdminStaff();
        ~CAdminStaff();
        void CalculateSal();
    };
    
    class CManager: virtual public Staff
    {
    public:
        CManager();
        ~CManager();
        void SetMData();
        void CalculateSal();
    
    protected:
        float m_fDeductTRate;
        float m_fTAmount;
    };
    
    class CSaleMan: virtual public Staff
    {
    public:
        CSaleMan();
        ~CSaleMan();
        void SetSData();
        void CalculateSal();
    protected:
        float m_fDeductRate;
        float m_fPersonAmount;
    };
    
    class CSaleManager: public CSaleMan, public CManager
    {
    public:
        CSaleManager();
        ~CSaleManager();
        void CalculateSal();
    };
    #endif
    education.cpp
    #include "education.h"
    int Staff::s_iCount = 1000;
    
    CEducation:: CEducation(){};
    
    CEducation:: CEducation(char cSchool[], char cDegree)
    {
        strcpy(m_cSchool, cSchool);
        m_cDegree = cDegree;
    }
    
    CEducation:: ~CEducation(){};
    
    void CEducation:: GetEdu(void)
    {
        cout << "School:"<< endl;
        cin >> m_cSchool;
        cout << "Degree:"<< endl;
        cin >> m_cDegree;
        m_cDegree = toupper(m_cDegree);
    }
    
    void CEducation:: PutEdu(void) const
    {
        cout << "School: " << m_cSchool << endl;
        cout << "Degree: ";
        switch (m_cDegree)
        {
            case 'c':
                cout << "college" << endl;
                break;
            case 'u':
                cout << "undergraduate college" << endl;
                break;
            case 'M':
                cout << "master" << endl;
                break;
            case 'D':
                cout << "doctor" << endl;
                break;
            default:
                cout << "void" << endl;
                break;
        }
    }
    
    Staff:: Staff(){};
    
    Staff:: ~Staff(){};
    
    void Staff:: CalculateSal(){};
    
    void Staff:: InPut()
    {
        m_iStaffNum = ++s_iCount;
        cout << "No: "<< m_iStaffNum << endl;
        cout << "name :";
        cin >> m_cName;
        Edu.GetEdu();
        cout << " Basic salary:";
        cin >> m_fBasicSal;
        cout << " Prize: ";
        cin >> m_fPrize;
        cout << "Rate Of Attend: ";
        cin >> m_fRateOfAttend;
        if (m_fRateOfAttend > 1.0)
        {
            m_fRateOfAttend = 1.0;
        }
        else if (m_fRateOfAttend < 0)
        {
            m_fRateOfAttend = 0;
        }
    }
    
    void Staff:: OutPut()
    {
        cout << "No: " << m_iStaffNum << endl;
        cout << "name: " << m_cName << endl;
        Edu.PutEdu();
        cout << "basic saraly: " << m_fBasicSal << endl;
        cout << "Prize: " << m_fPrize << endl;
        cout << "Rate of Attend" << m_fRateOfAttend * 100 << "%" << endl;
    
    }
    CAdminStaff:: CAdminStaff(){};
    
    CAdminStaff:: ~CAdminStaff(){};
    
    void CAdminStaff::CalculateSal()
    {
        cout << "the fact salary:";
        cout << m_fBasicSal + m_fRateOfAttend * m_fPrize << endl;
    }
    
    CManager:: CManager(){};
    
    CManager:: ~CManager(){};
    
    void CManager:: SetMData()
    {
        cout << "the company sales";
        cin >> m_fTAmount;
        cout << "the rates of person getted";
        cin >> m_fDeductTRate;
    }
    
    void CManager:: CalculateSal()
    {
        cout << "the fact salary:";
        cout << m_fBasicSal + m_fDeductTRate * m_fTAmount << endl;
    }
    
    CSaleMan :: CSaleMan(){};
    
    CSaleMan :: ~CSaleMan(){};
    
    void CSaleMan:: SetSData()
    {
        cout << "the person sales";
        cin >> m_fPersonAmount;
        cout << "the rates of person getted";
        cin >> m_fDeductRate;
    }
    
    void CSaleMan:: CalculateSal()
    {
        cout << "the fact salary:";
        cout << m_fBasicSal + m_fPersonAmount * m_fDeductRate << endl;
    }
    
    CSaleManager:: CSaleManager(){};
    
    CSaleManager:: ~CSaleManager(){};
    
    void CSaleManager:: CalculateSal()
    {
        cout << "the fact salary:";
        cout << m_fBasicSal + m_fPersonAmount * m_fDeductRate
        + m_fTAmount * m_fDeductTRate << endl;
    }
    main.cpp
    #include "education.h"
    int main(int argc, char const *argv[])
    {
        char flag = 'Y';
        while (toupper (flag) == 'Y')
        {
            cout << "1.maneger  2.saleman   3.saleanager    4.administor" << endl;
            int n;
            cin >> n;
            switch(n)
            {
                case 1:
                {
                    CManager staff;
                    staff.InPut();
                    staff.SetMData();
                    staff.OutPut();
                    staff.CalculateSal();
                    break;
                }
                case 2:
                {
                    CSaleMan staff;
                    staff.InPut();
                    staff.SetSData();
                    staff.OutPut();
                    staff.CalculateSal();
                    break;
                }
                case 3:
                {
                    CSaleManager staff;
                    staff.InPut();
                    staff.SetMData();
                    staff.SetSData();
                    staff.OutPut();
                    staff.CalculateSal();
                    break;
                }
                case 4:
                {
                    CAdminStaff staff;
                    staff.InPut();
                    staff.OutPut();
                    staff.CalculateSal();
                    break;
                }
                default:
                {
                    cout << "error" << endl;
                    break;
                }
            }
            cout << "continue?(y/n)" << endl;
            cin >> flag;
        }
        return 0;
    }