项目

问题及代码:
/*
 *Copyright (c) 2014,烟台大学计算机学院
 *ALL right reserved
 *文件名:学生成绩统计
 *作者;童宇
 *完成日期:2015 年 6月 3日
 *版本号v1.0
 *问题描述:(该题作为期中实验报告,单独编写文档提交)某公司雇员(employee)包括经理 (manager)、技术人员(technician)和销售员(salesman)。
              开发部经理(developermanager), 既是经理也是技术人员。
              销售部经理(salesmanager),既是经理也是销售员。  
              employee类的属性包括姓名、职工号、工资级别、月薪(实发基本工资加业绩工资)。
              操作 包括月薪计算函数(pay()),该函数要求输入请假天数,(一天扣70元),级别1的基本工资 为1500元,级别2的基本工资2500元,级别3的基本工资为3500元,扣去应扣工资后,得出实 发基本工资。
              technician类派生的属性有每小时附加酬金和当月工作时数,及研究完成进度系数。业绩工 资为三者之积。也包括同名的pay( )函数,工资总额为基本工资加业绩工资。
              salesman类派生的属性有当月销售额和酬金提取百分比,业绩工资为两者之积。也包括同名 的pay( )函数,工资总额为基本工资加业绩工资。
              manager类派生属性有固定奖金额和业绩系数,业绩工资为两者之积。工资总额为基本工资 加业绩工资。
              developermanager类,pay( )函数是将作为经理和作为技术人员业绩工资之和的一半作为业绩 工资。
              salesmanager类,pay( )函数则是经理的固定奖金额的一半,加上部门总销售额与提成比例之 积,为业绩工资。 编程实现工资管理。
 *输入描述:
 *程序输出:
 */
#include <iostream>
using namespace std;
class employee  //某公司雇员(employee)
{
protected:
    string name;
    int num;
    int level;
    double bpay;  //基础工资
    double apay;  //提成
    double salary=bpay+apay;
public:
    employee(string a,int b,int c):bpay(0),apay(0)
    {
        name=a;
        num=b;
        level=c;
    }
    virtual double pay()
    {
        int a;
        cout<<"输入请假天数:";
        cin>>a;
        int spay=a*70;
        switch(level)
        {
        case 1:
            bpay=1500;
            break;
        case 2:
            bpay=2500;
            break;
        case 3:
            bpay=3500;
            break;
        }
        bpay=bpay-spay;
        return bpay;
    }
    void printname()
    {
        cout<<"姓名:"<<name<<" 职工号:"<<num<<" ";
    }
    void print()
    {
        cout<<"姓名:"<<name<<" 职工号:"<<num<<" 月薪:"<<salary<<endl;
    }
    friend string getname(employee *a);
};



class manager:virtual public employee  //经理 (manager)继承于雇员类
{
protected:
    int amoney;
    double s;
public:
    manager(string a,int b,int c,double d,double e):employee(a,b,c)
    {
        amoney=d;
        s=e;
    }
    virtual double pay()
    {
        employee::pay();
        apay=amoney*s;
        return (bpay+apay);
    }
};




class technician:virtual public employee  //技术人员(technician)继承于雇员类
{
protected:
    int apayph,time;
    double pro;
public:
    technician(string a,int b,int c,double d,int e,double f):employee(a,b,c)
    {
        apayph=d;
        time=e;
        pro=f;
    }
    virtual double pay()
    {
        employee::pay();
        apay=apayph*time*pro;
        return (bpay+apay);
    }
};




class salesman:virtual public employee    //销售员(salesman)继承于雇员类
{
protected:
    double smoney,p;
public:
    salesman(string a,int b,int c,double d,double e):employee(a,b,c)
    {
        smoney=d;
        p=e;
    }
    virtual double pay()
    {
        employee::pay();
        apay=smoney*p;
        return (bpay+apay);
    }
};




class developermanager:public technician,public manager //开发部经理(developermanager), 既是经理也是技术人员。
{
public:
    developermanager(string a,int b,int c,double d,int e,double f,int g,double h):employee(a,b,c),technician(a,b,c,d,e,f),manager(a,b,c,g,h) {}
    virtual double pay()
    {
        employee::pay();
        bpay=employee::bpay;
        double pay(int day,char level,double amoney,double s);
        double pay(int day,char level,double apayph,double time,double pro);
        apay=manager::apay+technician::apay;
        return (bpay+apay);
    }
};




class salesmanager: public manager, public salesman   //销售部经理(salesmanager),既是经理也是销售员。
{
public:
    salesmanager(string a,int b,int c,double d,double e,int f,double g):employee(a,b,c),salesman(a,b,c,d,e),manager(a,b,c,f,g) {}
    virtual double pay()
    {
        double pay(int day,char level);
        bpay=employee::bpay;
        double pay(int day,char level,double amoney,double s);
        double pay(int day,char level,double smoney,double p);
        apay=manager::apay+salesman::apay;
        return (bpay+apay);
    }
};




class company
{
private:
    manager *m[100];
    technician *t[100];
    salesman *s[100];
    developermanager *dm[100];
    salesmanager *sm[100];
    int mn,tn,sn,dmn,smn;
public:
    company():mn(0),tn(0),sn(0),dmn(0),smn(0) {}
    void addmanager();
    void addtechnician();
    void addsalesman();
    void adddevelopermanager();
    void addsalesmanager();
    void jisuanzhengti()
    {
        int b;
        for (b=0; b<mn; b++)
        {
            m[b]->printname();
            m[b]->pay();
        }
        for (b=0; b<tn; b++)
        {
            t[b]->printname();
            t[b]->pay();
        }
        for (b=0; b<sn; b++)
        {
            s[b]->printname();
            s[b]->pay();
        }
        for (b=0; b<dmn; b++)
        {
            dm[b]->printname();
            dm[b]->pay();
        }
        for (b=0; b<smn; b++)
        {
            sm[b]->printname();
            sm[b]->pay();
        }
    }
    void jisuangeren()
    {
        string a;
        int b;
        cout<<"输入姓名:";
        cin>>a;
        for (b=0; b<mn; b++)
        {
            if (getname(m[b])==a) m[b]->pay();
        }
        for (b=0; b<tn; b++)
        {
            if (getname(t[b])==a) t[b]->pay();
        }
        for (b=0; b<sn; b++)
        {
            if (getname(s[b])==a) s[b]->pay();
        }
        for (b=0; b<dmn; b++)
        {
            if (getname(dm[b])==a) dm[b]->pay();
        }
        for (b=0; b<smn; b++)
        {
            if (getname(sm[b])==a) dm[b]->pay();
        }
    }
    void print()
    {
        int b;
        for (b=0; b<mn; b++)
        {
            m[b]->print();
        }
        for (b=0; b<tn; b++)
        {
            t[b]->print();
        }
        for (b=0; b<sn; b++)
        {
            s[b]->print();
        }
        for (b=0; b<dmn; b++)
        {
            dm[b]->print();
        }
        for (b=0; b<smn; b++)
        {
            sm[b]->print();
        }
    }
    ~company()
    {
        int b;
        for (b=0; b<mn; b++) delete m[b];
        for (b=0; b<tn; b++) delete t[b];
        for (b=0; b<sn; b++) delete s[b];
        for (b=0; b<dmn; b++) delete dm[b];
        for (b=0; b<smn; b++) delete sm[b];
    }
};
void company::addmanager()
{
    string a;
    int b,c,d;
    double e;
    cout<<"输入经理信息(姓名、职工号、工资级别、固定奖金额、业绩系数):";
    cin>>a>>b>>c>>d>>e;
    m[mn]=new manager(a,b,c,d,e);
    mn++;
}
void company::addtechnician()
{
    string a;
    int b,c,d,e;
    double f;
    cout<<"输入技术人员信息(姓名、职工号、工资级别、每小时附加酬金、当月工作时数、研究完成进度系数):";
    cin>>a>>b>>c>>d>>e>>f;
    t[tn]=new technician(a,b,c,d,e,f);
    tn++;
}
void company::addsalesman()
{
    string a;
    int b,c,d;
    double e;
    cout<<"输入销售员信息(姓名、职工号、工资级别、当月销售额、酬金提取百分比):";
    cin>>a>>b>>c>>d>>e;
    s[sn]=new salesman(a,b,c,d,e);
    sn++;
}
void company::adddevelopermanager()
{
    string a;
    int b,c,d,e;
    double f;
    int g;
    double h;
    cout<<"输入开发部经理信息(姓名、职工号、工资级别、每小时附加酬金、当月工作时数、研究完成进度系数、固定奖金额、业绩系数):";
    cin>>a>>b>>c>>d>>e>>f>>g>>h;
    dm[dmn]=new developermanager(a,b,c,d,e,f,g,h);
    dmn++;
}
void company::addsalesmanager()
{
    string a;
    int b,c,d;
    double e;
    int f;
    double g;
    cout<<"输入销售部经理信息(姓名、职工号、工资级别、当月销售额、酬金提取百分比、固定奖金额、业绩系数):";
    cin>>a>>b>>c>>d>>e>>f>>g;
    sm[smn]=new salesmanager(a,b,c,d,e,f,g);
    smn++;
}





string getname(employee *a)
{
    return a->name;
}



int main()
{
    company a;
    int b;
    do
    {
        cout<<"1、添加雇员信息"<<endl
            <<"2、请假天数集体输入"<<endl
            <<"3、请假天数单个修改"<<endl
            <<"4、集体打印工资表"<<endl
            <<"5、退出系统"<<endl
            <<"输入选项:";
        cin>>b;
        switch (b)
        {
        case 1:
        {
            int c;
            cout<<"1、添加技术人员"<<endl
                <<"2、添加销售员"<<endl
                <<"3、添加经理"<<endl
                <<"4、添加开发部经理"<<endl
                <<"5、添加销售部经理"<<endl
                <<"输入选项:";
            cin>>c;
            switch (c)
            {
            case 1:
                a.addtechnician();
                break;
            case 2:
                a.addsalesman();
                break;
            case 3:
                a.addmanager();
                break;
            case 4:
                a.adddevelopermanager();
                break;
            case 5:
                a.addsalesmanager();
                break;
            default:
                cout<<"输入错误!!";
            }
            break;
        }
        case 2:
            a.jisuanzhengti();
            break;
        case 3:
            a.jisuangeren();
            break;
        case 4:
            a.print();
            break;
        case 5:
            cout<<"谢谢使用!!"<<endl;
            break;
        default:
            cout<<"输入错误!!"<<endl;
            break;
        }
    }
    while(b!=5);
    return 0;
}




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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

ah_ty

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值