zoukankan      html  css  js  c++  java
  • Fourth practice 2

    Fourth practice 2

    任务描述

    某学校有3类员工:教师、行政人员、教师兼行政人员,共有的信息包括编号、姓名、性别和职工类别。工资计算方法如下。 教师:基本工资+课时数×课时补贴。 行政人员:基本工资+行政补贴。 教师兼行政人员:基本工资+课时数×课时补贴+行政补贴。 分析以上信息,定义人员抽象类,派生不同类型的员工,并完成工资的计算。

    测试输入:

    请输入教师的信息:
    输入编号:01
    输入姓名:李明
    输入性别(f或m):m
    基本工资:2000
    课 时 数:60
    课时补贴:100
    
    请输入行政人员的信息:
    输入编号:03
    输入姓名:王强
    输入性别(f或m):m
    基本工资:3000
    行政补贴:200
    
    请输入教师兼行政人员的信息:
    输入编号:05
    输入姓名:张蕾
    输入性别(f或m):f
    基本工资:2500
    课 时 数:80
    课时补贴:200
    行政补贴:100
    
    

    预期输出:

    ********教师信息*********
    编    号--1
    姓    名--李明
    性    别--女
    类    别--教师
    基本工资--2000
    课 时 数--60
    课时补贴--100
    本月工资--8000
    
    ********行政人员信息*********
    编    号–3
    姓    名–王强
    性    别–女
    类    别–行政人员
    基本工资–3000
    行政补贴–200
    本月工资–3200
    
    ********教师兼行政人员信息*********
    编    号--5
    姓    名--张蕾
    性    别--女
    类    别--教师兼行政人员
    基本工资--2500
    课 时 数--80
    课时补贴--200
    行政补贴--100
    本月工资--18600
    

    源代码

    #include <iostream>
    #include <string>
    using namespace std;
    class Person
    {
    public:
    	Person(int n = 0, string nm = "", char s = 'f', string t = "", double w = 0):num(n), name(nm), sex(s), title(t), wage(w) {}
    	virtual void Input();
    	virtual void Display();
    	virtual double Pay() = 0;     //计算工资
    protected:
    	int num;
    	string name;
    	char sex;
    	string title;
    	double wage;    //基本工资
    };
    void Person::Input()
    {
    	cout << "输入编号:"; cin >> num;
    	if(num<10)cout<<"0"<<num<<endl;
    	else cout<<num<<endl;
    	cout << "输入姓名:"; cin >> name;
    	cout<<name<<endl;
    	cout << "输入性别(f或m):"; cin >> sex;
    	cout<<sex<<endl;
    	cout << "基本工资:"; cin >> wage;
    	cout<<wage<<endl;
    }
    void Person::Display()
    {
    	cout << "编    号--" << num << endl;
    	cout << "姓    名--" << name << endl;
    	cout << "性    别--" << (sex == 'f' || 'F' ? "女" : "男") << endl;
    	cout << "类    别--" << title << endl;
    	cout << "基本工资--" << wage << endl;
    
    }
    
    class Teacher :virtual public Person
    {
    public:
    	Teacher(int n = 0, string nm = "", char s = 'f', double w = 0, int h = 0, double hr = 0)
    		:Person(n, nm, s, "教师", w), hours(h), hourlyrate(hr) {}
    	void T_Input();
    	virtual void Input();
    	virtual double Pay();
    	void T_Display();
    	virtual void Display();
    protected:
    	int hours;            //课时数
    	double hourlyrate;    //课时补贴
    };
    
    void Teacher::T_Input()
    {
    	cout << "课 时 数:"; cin>>hours;
        cout<<hours<<endl;
    	cout << "课时补贴:"; cin>>hourlyrate;
        cout<<hourlyrate<<endl;
    
    }
    void Teacher::Input()
    {
    	cout << "请输入教师的信息:" << endl;
    	
    }
    double Teacher::Pay()
    {
    	return this->wage + this->hours * this->hourlyrate;
    }
    void Teacher::T_Display()
    {
    	cout << "课 时 数--" << hours << endl;
    	cout << "课时补贴--" << hourlyrate << endl;
    }
    void Teacher::Display()
    {
    	cout << "********教师信息*********" << endl;
    	
        
    }
    
    
    class Staff :virtual public Person
    {
    public:
    	Staff(int n = 0, string nm = "", char s = 'f', double w = 0, double all = 0)
    		:Person(n, nm, s, "行政人员", w), allowance(all) {}
    	void S_Input();
    	virtual void Input();
    	virtual double Pay();
    	void S_Display();
    	virtual void Display();
    protected:
    	double allowance;       //行政补贴
    };
    
    void Staff::S_Input()
    {
    	cout << "行政补贴:";	cin>>allowance;
    	cout<<allowance<<endl;
        
    }
    void Staff::Input()
    {
    	cout << "请输入行政人员的信息:" << endl;
    	
    }
    double Staff::Pay()
    {
    	return this->wage + this->allowance;
    }
    void Staff::S_Display()
    {
    	cout << "行政补贴--" << allowance << endl;
    }
    void Staff::Display()
    {
    	cout << "********行政人员信息*********" << endl;
    	
    }
    
    class Tea_St :public Teacher, public Staff
    {
    public:
    	Tea_St(int n = 0, string nm = "", char s = 'f', double w = 0, int h = 0, double hr = 0, double all = 0)
    		:Person(n, nm, s, "教师兼行政人员", w), Teacher(n, nm, s, w, h, hr),
    		Staff(n, nm, s, w, all) {}
    	virtual void Input();
    	virtual double Pay();
    	virtual void Display();
    };
    void Tea_St::Input()
    {
    	cout << "请输入教师兼行政人员的信息:" << endl;
    	
    }
    double Tea_St::Pay()
    {
    	return this->wage + this->allowance + this->hours * this->hourlyrate;
    }
    void Tea_St::Display()
    {
    	cout << "********教师兼行政人员信息*********" << endl;
    	
    }
    int main()
    {
    	int n,h;
    	string nm;
    	char s;
    	double w,hr;
    	
    	//输入教师信息
    	Teacher tc;
    	tc.Input();
    	tc.Person::Input();
    	tc.T_Input();
    	cout<<endl;
    	//输入行政人员信息
    	Staff sf;
    	sf.Input();
    	sf.Person::Input();
    	sf.S_Input();
    	cout<<endl;
    	//输入教师及行政人员信息
    	Tea_St ts;
    	ts.Input();
    	ts.Person::Input();
    	ts.Teacher::T_Input();
    	ts.Staff::S_Input();
    	cout<<endl;
    	//输出教师信息
    	tc.Display();
    	tc.Person::Display();
    	tc.T_Display();
    	cout << "本月工资--" << tc.Pay() << endl;
    	cout<<endl;
    	//输出行政人员信息
    	sf.Display();
    	sf.Person::Display();
    	sf.S_Display();
    	cout << "本月工资--" << sf.Pay() << endl;
    	cout<<endl;
    	// 输出教师及行政人员信息
    	ts.Display();
    	ts.Person::Display();
    	ts.T_Display();
    	ts.S_Display();
    	cout << "本月工资--" << ts.Pay()<< endl;
    	cout<<endl;
    	
    	return 0;
    }
    
    
  • 相关阅读:
    Nhibernate代码生成器v2.1中文版
    在asp.net中生成16位随机密码
    IIS 启动不了(发生意外错误0x8ffe2740)
    NET代码生成器
    Linux系统
    VS2005快捷键大全
    ASP+ACCESS数据库中文乱码问题解决
    如何配置ASP.NETOracle 9i 远程登陆数据库
    ASP.NET获取汉字拼音的首字母
    checkbox 实时操作,勾选后变色[带演示]
  • 原文地址:https://www.cnblogs.com/lightice/p/12911040.html
Copyright © 2011-2022 走看看