某小型公司,主要有四类人员:经理、技术人员、销售经理和推销员。现在,需要存储这些人员的姓名、编号、级别、当月薪水.计算月薪总额并显示全部信息。

某小型公司,主要有四类人员:经理、技术人员、销售经理和推销员。
现在,需要存储这些人员的姓名、编号、级别、当月薪水.计算月薪总额并显示全部信息。
人员编号基数为 1000,每输入一个人员信息编号顺序加 1。
程序要有对所有人员提升级别的功能。 本例中为简单起见, 所有人员的初始级别均为 1级。
然后进行升级,经理升为 4 级,技术人员和销售经理升为 3 级,推销员仍为 1 级。
月薪计算办法是: 经理拿固定月薪 8000 元; 技术人员按每小时  100 元领取月薪;
推销员的月薪按该推销员当月销售额的 4%提成;销售经理既拿固定月薪也领取销售提成,固定月薪为 5000 元,
销售提成为所管辖部门当月销售总额的 5%。

id调整:定义一个全局数组来保存id,每一个员工

#include<iostream>
#include<string>
#include<typeinfo>
using namespace std;

int id[1000];
static int i = 0;

class worker //员工表
{
    public:
        worker(string name)
        {
            m_name = name;
            num++;
            m_id = num;
            level = 1;

            for(int j = 0; j <= i ; j++)
            {
                if(id[j] == m_id)
                {
                    m_id++;
                    j = 0;
                }
            }

            id[i] = m_id;
            i++;
        }
        string getname()const
        {
            return m_name;
        }
        void setid(int id)
        {
            m_id = id;
        }
        int getid() const
        {
            return m_id;
        }
        virtual void display() = 0;//显示员工信息
        virtual void calsalary() = 0;//计算每月薪水
        virtual ~worker()
        {

        }

    protected:
        string m_name; //名字
        static int num;//编号
        int level;     //级别
        int m_id;      //具体人员编号
        float m_salary;//当月薪水
};
int worker::num = 1000;

class manager:public worker//经理
{
    public:
        manager(string name):worker(name)
        {
            level = 4;
        }

        void calsalary()
        {
            m_salary = 8000;
        }

        void display()
        {
            calsalary();
            cout<<"职位:经理,姓名:"<<m_name<<",编号:"<<m_id<<",级别:"<<level<<",工资:"<<m_salary<<endl;
        }
        ~manager()
        {
            num--;
            cout<<"经理:"<<m_name<<"离开了"<<endl;
        }
};

class technician:public worker//技术人员
{
    public:
        technician(string name,int time = 192):worker(name)
        {
            level = 4;
            worktime = time;
        }

        void calsalary()
        {
            m_salary = worktime * 100;
            
        }

        void display()
        {
            calsalary();
            cout<<"职位:技术人员,姓名:"<<m_name<<",编号:"<<m_id<<",级别:"<<level<<",工资:"<<m_salary<<endl;
        }

        ~technician()
        {
            num--;
            cout<<"技术人员:"<<m_name<<"离开了"<<endl;
        }

        private:
            int worktime;
};

class salsesman:public worker//销售员
{
    public:
        salsesman(string name,float volume):worker(name)
        {
            level = 1;
            m_volume = volume;
            sum += volume;
        }

        void calsalary()
        {
            m_salary = m_volume * 0.04;
            
        }

        void display()
        {
            calsalary();
            cout<<"职位:销售,姓名:"<<m_name<<",编号:"<<m_id<<",级别:"<<level<<",工资:"<<m_salary<<endl;
        }

        ~salsesman()
        {
            num--;
            cout<<"销售:"<<m_name<<"离开了"<<endl;
        }

        public:

            static float sum;

        private:

            float m_volume;//销售额
};
float salsesman::sum = 0.0;

class salsesmanager:public worker//销售经理
{
    public:
        salsesmanager(string name):worker(name)
        {
            level = 3;
            
        }

        void calsalary()
        {
            m_salary = salsesman::sum  * 0.05 + 5000;
        }

        void display()
        {
            calsalary();
            cout<<"职位:销售经理,姓名:"<<m_name<<",编号:"<<m_id<<",级别:"<<level<<",工资:"<<m_salary<<endl;
        }

        ~salsesmanager()
        {
            num--;
            cout<<"销售经理:"<<m_name<<"离开了"<<endl;
        }

        public:
            int volume;
};

void upgrade(worker * &w)
{
    int id = w->getid();
    if(typeid(*w) == typeid(salsesman))
    {
        string name = w->getname();
        delete w;
        w = new salsesmanager(name);

    }
    else if(typeid(*w) == typeid(salsesmanager))
    {
        string name = w->getname();
        delete w;
        w = new manager(name);
    }
    else if(typeid(*w) == typeid(technician))
    {
        string name = w->getname();
        delete w;
        w = new manager(name);
    }
    w->setid(id);
}


int main()
{
    worker *w1 = new manager("张三");
  
    w1->display();
    
    

    worker *w2 = new technician("李四");

    w2->display();
    
    delete w1;
    worker *w3 = new salsesman("王五",500000);
    w3->display();

  

    worker *w4 = new salsesmanager("赵六");
    w4->display();
    
    upgrade(w3);
    w3->display();


    cout<<endl<<"当月操作之后"<<endl;
    //w1->display();
    w2->display();
    w3->display();
    w4->display();

    return 0;
}

赋予id时与数组中的进行比对,若有重复则id+1,继续比对,将无人使用的id给人员,并将新的id存入数组
 

  • 3
    点赞
  • 48
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值