简单的小题集(二)


一、类模板,创建Employee类,数据成员包括:name(const型字符串类型),salary(模板类型)。成员函数包括:构造函数——对姓名和工资做初始化,成员值设置函数——修改成员的工资,成员值获取函数——分别获取成员姓名和工资,计算平均工资函数。

主函数:创建虚拟类型为int类型的张三对象,输出其工资和姓名,创建虚拟类型为float类型的李四对象,并通过修改工资函数将其工资修改为12345.6,输出其工资和姓名。

创建对象数组,参数初始化值对应如下表:
姓名 工资
张丽 2000
韩丽 5000
袁丽 6500
毛丽 3500

代码如下:

#include<iostream>
#include<string>
using namespace std;
template<class type>
class Employee
{
    public:
        const string name;
        type salary;
    public:
        Employee(string mingzi="liuliuliu",type gongzi=1000):name(mingzi)
        {
            salary=gongzi;
        }
        setchengyuan()
        {
            cout<<"输入"<<name<<"的工资:"<<endl;
            cin>>salary;
        }
        void chengyuanhuoqu()
        {
            cout<<name<<" "<<salary<<endl;
        }
        void pjz(Employee shuzu[],int n)
        {
            cout<<"低于:"<<endl;
            int pinjun=0;
           for(int i=0;i<4;i++)
            {
                pinjun+=shuzu[i].salary;
            }
            pinjun/=4;
            for(int i=0;i<4;i++)
            {
                if(shuzu[i].salary<pinjun)
                cout<<shuzu[i].name<<" "<<shuzu[i].salary<<endl;
            }
        }

};

main()
{
   int pinjun=0;
   Employee<int> zhangsan("张三");
   Employee<float> lisi("李四");
   lisi.setchengyuan();
   lisi.chengyuanhuoqu();
   Employee<int> shuzu[4]={
                            Employee<int>("张丽",2000),
                            Employee<int>("韩丽",5000),
                            Employee<int>("袁丽",6500),
                            Employee<int>("毛丽",3500)
                          };
    shuzu[0].pjz(shuzu,4);
}

二、教师干部类。 设计两个基类:教师类(Teacher)、干部类(Cadre),采用多重继承派生出新类:Teacher_Cadre

(a)两个基类都包含:姓名、年龄、性别、地址、电话;
在Teacher类中包含:title(职称),在Cadre类中包含:post(职务),在Teacher_Cadre
中包含:wages(工资);
(b)两个基类都包含:display()函数,分别输出本类中的成员信息;
(c)在两个基类中的姓名、年龄、性别、地址和电话数据成员使用相同名字,在派生类中引用这些数据成员时,采用指定作用域的方式;
(d)在派生类Teacher_Cadre的成员函数Show()中调用Teacher类中的display()函数;
(e)使用对象数组保存输入的对象;

代码如下:

#include<iostream>
#include<string>
using namespace std;
class teacher
{
    string name;
    int age;
    string xingbie;
    string dizhi;
    int dianhua;
    string title;
public:
    teacher(string a,int age,string xingbie,string dizhi,int dianhua,string title)
    {
        this->name=a;
        this->age=age;
        this->xingbie=xingbie;
        this->dizhi=dizhi;
        this->dianhua=dianhua;
        this->title=title;
    }
    void display()
    {
        cout<<"teacher类中数据:"<<name<<","<<age<<","<<xingbie<<","<<dizhi<<","<<dianhua<<","<<title<<endl;
    }
};



class cadre
{
    string name;
    int age;
    string xingbie;
    string dizhi;
    int dianhua;
    string post;
public:
    cadre(string name,int age,string xingbie,string dizhi,int dianhua,string post)
    {
        this->name=name;
        this->age=age;
        this->xingbie=xingbie;
        this->dizhi=dizhi;
        this->dianhua=dianhua;
        this->post=post;
    }
    void display()
    {
          cout<<"teacher类中数据:"<<name<<","<<age<<","<<xingbie<<","<<dizhi<<","<<dianhua<<","<<post<<endl;
    }
};



class teachercadre : public teacher,public cadre
{
    int wages;
public:
    teachercadre(string a,int age,string xingbie,string dizhi,int dianhua,string b,int gongzi):teacher(a,age,xingbie,dizhi,dianhua,b),cadre(a,age,xingbie,dizhi,dianhua,b)
    {
         wages=gongzi;
    }
    void show()
    {
        teacher::display();
    }
};



main()
{
    teachercadre a[3]={
                            teachercadre("zhang",19,"男","不知道",111,"终极教师",200),
                             teachercadre("zhang",19,"男","不知道",222,"高级教师",2000),
                              teachercadre("cheng",20,"女","嘤嘤嘤",111,"终极教师",200)
                      };
    for(int i=0;i<3;i++)
    a[i].show();
}

三、小型公司人员管理包含两种员工类型:销售员和经理,他们有共同属性:姓名。编号、入职时间和工资。销售员另外还包括销售品类属性和销售量属性,经理还包括级别属性,从1级到3级,并且他们的工资计算方式不同,销售员工资=工龄*100+每件商品提成(每名销售员只销售一种商品)销售额,经理的工资=工龄200+固定工资(一级固定工资10K,每升一级加5K)。

已知不同品类商品的单件提成不同,对应关系如下表:

手机 电脑 打印机 相机 平板电脑 外设
2% 0.8% 3% 2% 3% 8%
5K 8K 2K 3K 2K 1K
代码如下:
#include<iostream>
#include<string>
using namespace std;
class xiaoshouyuan
{
private:
    string name;
    int bianhao;
    int ruzhishijian;
    float gongzi;
    int xiaoshoupinlei;
    int  xiaoshouliang;
public:
    void shezhi(string name,int bianhao,int ruzhishijian,int  xiaoshoupinlei,int xiaoshouliang)
    {
        int i;
        float f;
        switch(xiaoshoupinlei)
        {
        case(1):i=5000,f=0.02;break;
        case(2):i=8000,f=0.008;break;
        case(3):i=2000,f=0.03;break;
        case(4):i=3000,f=0.02;break;
        case(5):i=2000,f=0.03;break;
        case(6):i=1000,f=0.08;break;
        }
        this->name=name;
        this->bianhao=bianhao;
        this->xiaoshoupinlei=xiaoshoupinlei;
        this->ruzhishijian=ruzhishijian;
        this->xiaoshouliang=xiaoshouliang;
        this->gongzi=this->ruzhishijian*100+f*i*xiaoshouliang;
    }
    void shuchu()
    {
        cout<<"这个销售员的情况:"<<name<<","<<bianhao<<","<<ruzhishijian<<","<<xiaoshoupinlei<<","<<xiaoshouliang<<","<<gongzi<<endl;
    }
};

class jinli
{
private:
    string name;
    int bianhao;
    int ruzhishijian;
    int gongzi;
    int jibie;
public:
    void shezhi(string name,int bianhao,int ruzhishijian,int jibie)
    {
        this->name=name;
        this->bianhao=bianhao;
        this->ruzhishijian=ruzhishijian;
        this->jibie=jibie;
        this->gongzi=this->ruzhishijian*200+10000+(jibie-1)*5000;
    }
    void shuchu()
    {
        cout<<"这个经理的情况:"<<name<<","<<bianhao<<","<<ruzhishijian<<","<<jibie<<","<<gongzi<<endl;
    }
};

main()
{
    xiaoshouyuan a;
    jinli        b;
    b.shezhi("A君",101,5,1);
    b.shuchu();
    a.shezhi("B君",111,2,1,1);
    a.shuchu();
}

总结

基础知识,第三个可以应用简单工厂模式来写,比较精炼,不过懒得再写了。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

Magic171

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

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

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

打赏作者

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

抵扣说明:

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

余额充值