面向对象课程设计——类与对象——人员信息管理系统
面向对象课程设计-人员信息管理系统:
以一个小型公司的人员管理为例,说明类及成员函数的设计。提示:
- 类的设计:
某小型公司,需要存储雇员的编号、级别、月薪,并显示全部信息。根据这些需求,设计一个类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
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<<"析构函数被调用"<
}
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)被调用"<
}void employee::SetAccumPay(float pa)//调整月薪
{accumPay=pa+accumPay;
}employee::employee()//设置数据成员编号、月薪、级别初值
{individualEmpNo=1705110000;accumPay=120.0;grade=0;//cout<<"构造函数被调用"<
}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
#include 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;
}
本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!
