面向对象课程设计-人员信息管理系统:
以一个小型公司的人员管理为例,说明类及成员函数的设计。提示:
类的设计:
某小型公司,需要存储雇员的编号、级别、月薪,并显示全部信息。根据这些需求,设计一个类employee,在该类中,包括的数据成员有:
编号(int individualEmpNo)
级别(int grade)
月薪(float accumPay)
成员函数有:
设置编号(void setEmpNo(int steps)):编号顺序加1(利用静态变量实现)
提取编号(void getEmpNo)
晋升级别(void promote(int increment)):提升的级别由参数指定
提取级别(int getGrade)
设置月薪(void SetAccumPay(float pa)):
提取月薪(float GetAccumPay)
构造函数(用于设置数据成员编号、级别和月薪初值)
析构函数整个程序分为两个独立的文档:employee.h(包含类的定义和类的实现)和employee.cpp(主函数文件)在主函数main()中创建employee类的两个对象,对它们设计编号、级别和月薪,并输出每个雇员的基本信息。
/*人员信息管理系统:以一个小型公司的人员管理为例,说明类及成员函数的设计。提示:1)类的设计:某小型公司,需要存储雇员的编号、级别、月薪,并显示全部信息。根据这些需求,设计一个类employee,在该类中,包括的数据成员有:编号(int individualEmpNo)级别(int grade)月薪(float accumPay)成员函数有:设置编号(void setEmpNo(int steps)):编号顺序加1(利用静态变量实现)提取编号(void getEmpNo)晋升级别(void promote(int increment)):提升的级别由参数指定提取级别(int getGrade)设置月薪(void SetAccumPay(float pa)):提取月薪(float GetAccumPay)构造函数(用于设置数据成员编号、级别和月薪初值)析构函数2)整个程序分为两个独立的文档:employee.h(包含类的定义和类的实现)和employee.cpp(主函数文件)3)在主函数main()中创建employee类的两个对象,对它们设计编号、级别和月薪,并输出每个雇员的基本信息。*/#include<iostream>using namespace std;//以下是雇员类的声明class employee{public:employee();employee(employee&e);void setEmpNo(int);int getEmpNo(){return individualEmpNo;}void promote(int);int getGrade(){return grade;}void SetAccumPay(float);float GetAccumPay(){return accumPay;}~employee(){//cout<<"析构函数被调用"<<endl;}private:int individualEmpNo;//编号static int numOfEmp;int grade;//级别float accumPay;//月薪};//以下是雇员类的成员函数的实现int employee::numOfEmp=0;//设置静态变量void employee::setEmpNo(int steps)//按照不同的steps{grade=steps;numOfEmp++;individualEmpNo+=numOfEmp;}void employee::promote(int increament){grade=grade+increament;//cout<<"employee::promote(int increament)被调用"<<endl;}void employee::SetAccumPay(float pa)//调整月薪{accumPay=pa+accumPay;}employee::employee()//设置数据成员编号、月薪、级别初值{individualEmpNo=1705110000;accumPay=120.0;grade=0;//cout<<"构造函数被调用"<<endl;}employee::employee(employee&e){individualEmpNo=e.individualEmpNo;accumPay=e.accumPay;grade=e.grade;}//以下是主函数void main(){int step;int increments;float add;employee e1;cout<<"请输入e1员工级别"<<endl;cin>>step;e1.setEmpNo(step);step=0;employee e2=e1;cout<<"请输入e2员工级别"<<endl;cin>>step;e2.setEmpNo(step);step=0;employee e3;cout<<"请输入e3员工级别"<<endl;cin>>step;e3.setEmpNo(step);cout<<"请输入e3员工需要调整的工资"<<endl;cin>>add;e3.SetAccumPay(add);cout<<"请输入e3员工需要提升的级别"<<endl;cin>>increments;e3.promote(increments);cout<<"e3员工编号为"<<e3.getEmpNo()<<endl;cout<<"现在e3员工月薪为"<<e3.GetAccumPay()<<endl;cout<<"现在e3员工级别为"<<e3.getGrade()<<endl;}
本设计题目的任务是设计一个人员信息管理系统,并使用虚函数实现多态性, 完成显示不同人员信息的任务。设计employee类,用来存储雇员的编号,级别,月薪等信息。 能够对其进行操作和显示。以employee为基类派生出technician类,表示兼职技术人员, 以及manager类,表示经理,以及salesman类,表示兼职推销员。 利用manage类和salesman类派生出salesmanager类,表示销售经理。 注意使用虚基类。进一步使用虚函数和抽象类改进上面的程序。 本设计题目的目的是让学生进一步理解和掌握C++中类的继承,虚基类,多态性,虚函数以及抽象类技术及实现方法
/*本设计题目的任务是设计一个人员信息管理系统,并使用虚函数实现多态性,完成显示不同人员信息的任务。设计employee类,用来存储雇员的编号,级别,月薪等信息。能够对其进行操作和显示。以employee为基类派生出technician类,表示兼职技术人员,以及manager类,表示经理,以及salesman类,表示兼职推销员。利用manage类和salesman类派生出salesmanager类,表示销售经理。注意使用虚基类。进一步使用虚函数和抽象类改进上面的程序。本设计题目的目的是让学生进一步理解和掌握C++中类的继承,虚基类,多态性,虚函数以及抽象类技术及实现方法。*/#include<iostream>#include<string>using namespace std;//以下是雇员类的实现class employee{protected:string name;int empNo;int rank;float salary;public:employee(){name="DefaultName";empNo=0;salary=0.0;rank=0;}employee(string name,int empNo,int rank,float salary){this->name=name;this->empNo=empNo;this->rank=rank;this->salary=salary;}~employee(){}virtual float display(){return 0.0;}//设置虚函数,为派生类提供接口};//employeeclass manager:public virtual employee{protected:int achievement;public:manager(string name,int empNo,int rank,float salary,int achievement):employee(name,empNo,rank,salary){this->achievement=achievement;}~manager(){}float display(){cout<<"经理人员的姓名为"<<name<<endl;cout<<"经理人员的编号为"<<empNo<<endl;cout<<"经理人员的级别为"<<rank<<endl;cout<<"经理人员的工资为";return salary+achievement;}};//managerclass technician:public employee{protected:int workHours;public:technician(string name,int empNo,int rank,float salary,int workHours):employee(name,empNo,rank,salary){this->workHours=workHours;}~technician(){}float display(){cout<<"科研人员的姓名为"<<name<<endl;cout<<"科研人员的编号为"<<empNo<<endl;cout<<"科研人员的级别为"<<rank<<endl;cout<<"科研人员的工资为";return salary+workHours*200;}};//technicianclass salesman:public virtual employee{protected:float monthlysales;public:salesman(string name,int empNo,int rank,float salary,float monthlysales):employee(name,empNo,rank,salary){this->monthlysales=monthlysales;}~salesman(){}float display(){cout<<"销售人员的姓名为"<<name<<endl;cout<<"销售人员的编号为"<<empNo<<endl;cout<<"销售人员的级别为"<<rank<<endl;cout<<"销售人员的工资为";return salary+monthlysales*1.8;}};//salesmanclass salesmanager:public manager,public salesman//虚基类{public:salesmanager(string name,int empNo,int rank,float salary,float monthlysales,int achievement):employee(name,empNo,rank,salary),salesman(name,empNo,rank,salary,monthlysales),manager(name,empNo,rank,salary,achievement){this->monthlysales=monthlysales;this->achievement=achievement;}~salesmanager(){}float display(){cout<<"销售经理的姓名为"<<name<<endl;cout<<"销售经理的编号为"<<empNo<<endl;cout<<"销售经理的级别为"<<rank<<endl;cout<<"销售经理的工资为";return salary+monthlysales*3.6+achievement;}};//salesmanager类多重继承float display(employee *emptr){return emptr->display();}int main(void){employee *e1=new manager("s1",001,5,1000.0,20000);employee *e2=new technician("s2",4,002,1000.0,35);employee *e3=new salesman("s3",003,3,1000.0,2400);employee *e4=new salesmanager("s4",4,004,1000.0,3500,5000);cout<<display(e1)<<endl;cout<<"/*****************************/"<<endl;cout<<display(e2)<<endl;cout<<"/*****************************/"<<endl;cout<<display(e3)<<endl;cout<<"/*****************************/"<<endl;cout<<display(e4)<<endl;return 0;}