文档库 最新最全的文档下载
当前位置:文档库 › c++实验指导

c++实验指导

实验一人员信息管理系统(一)

?类与对象的含义是什么?

?构造函数与析构函数的作用以及特点是什么?

开发“人员信息”管理系统:

存储某小型公司雇员的编号,级别和月薪

显示雇员的全部信息

熟悉用Visuanl C++编写多文件结构程序

会按照需求设计人员类的成员

会定义构造函数和析构函数

某小型公司,需要存储雇员的编号、级别、月薪并显示全部信息。根据这些需求,设计一个类employee,在该类中,除了定义构造函数和析构函数以外,还应统一定义对人员信息应有的操作。在类employee中包括的数据成员有编号,级别和月薪等,包括的操作有设置和提取编号,计算和提取级别,设置和提取月薪。构造函数用于设置数据成员编号,级别和月薪的初值。

创建一个工程:EmployeeManagementSystem

创建一个头文件:Employee.h,包含类定义和类的实现

创建一个主函数文件

//employee.h

class employee

{

protected:

int individualEmpNo; //个人编号

int grade; //级别

float accumPay; //月薪

public:

employee(); //构造函数

~employee(); //析构函数

void IncreaseEmpNo (int); //增加编号函数

void promote(int); //升级函数

void SetaccumPay (float); //设置月薪函数

int GetindividualEmpNo(); //提取编号函数

int Getgrade(); //提取级别函数

float GetaccumPay(); //提取月薪函数

};

employee::employee()

{ individualEmpNo=1000; //员工编号目前最大编号为1000 grade=1; //级别初值为1

accumPay=0.0; } //月薪总额初值为0

employee::~employee() {} //析构函数为空

void employee::IncreaseEmpNo (int steps)

{ individualEmpNo+=steps;} //增加编号,增加的步长由steps指定

void employee::promote(int increment)

{ grade+=increment;} //升级,提升的级数由increment指定

void employee::SetaccumPay (float pa)

{ accumPay=pa;} //设置月薪

int employee::GetindividualEmpNo()

{ return individualEmpNo;} //获取成员编号

int employee::Getgrade()

{ return grade;} //获取级别

float employee::GetaccumPay()

{ return accumPay;} //获取月薪

//4_5.cpp

#include

#include"employee.h"

using namespace std;

void main()

{

employee m1;

employee t1;

employee sm1;

employee s1;

cout<<"请输下一个雇员的月薪:";

float pa;

cin>> pa;

m1.IncreaseEmpNo(0); //m1编号为当前编号

m1.promote(3); //m1提升3级

m1.SetaccumPay (pa); //设置m1月薪

cout<<"请输下一个雇员的月薪:";

cin>>pa;

t1.IncreaseEmpNo(1); //t1编号为当前编号加1

t1.promote(2); //t1提升2级

t1.SetaccumPay (pa); //设置t1月薪

cout<<"请输下一个雇员的月薪:";

cin>> pa;

sm1.IncreaseEmpNo(2); //sm1编号为当前编号加2

sm1.promote(2); //sm1提升2级

sm1.SetaccumPay (pa); //设置sm1级别

cout<<"请输下一个雇员的月薪:";

cin >>pa;

s1.IncreaseEmpNo(3); //s1编号为当前编号加3

s1.SetaccumPay (pa); //设置s1月薪

//显示m1信息

cout<<"编号"<

<<"级别为"<

//显示t1信息

cout<<"编号"<

<<"级别为"<

//显示sm1信息

cout<<"编号"<

<<"级别为"<

//显示s1信息

cout<<"编号"<

<<"级别为"<

}

实验二人员信息管理系统(二)

静态数据成员所具有的静态生存期的性质

友元类与友元函数的定义及使用

开发“人员信息”管理系统:

存储某小型公司雇员的编号,级别和月薪

显示雇员的全部信息

实现员工编号的自动增加

应用静态数据成员的性质来处理职员编号数据成员的方法

能熟练进行类定义及构造函数的编写

在实验(一)需求的基础上,在类employee中增加一个静态数据成员来设置本公司职员编号目前最大值,删除了成员函数IncreaseEmpNo(int steps),其功能通过构造函数来实现。

//employee.h

class employee

{

protected:

int individualEmpNo; //个人编号

int grade; //级别

float accumPay; //月薪

static int employeeNo; //本公司职员编号目前最大值

public:

employee(); //构造函数

~employee(); //析构函数

void promote(int); //升级函数

void SetaccumPay (float pa); //设置月薪函数

int GetindividualEmpNo(); //提取编号函数

int Getgrade(); //提取级别函数

float GetaccumPay(); //提取月薪函数

};

//empfunc.cpp

#include

#include"employee.h"

using namespace std;

int employee::employeeNo=1000; //员工编号基数为1000

employee::employee()

{ individualEmpNo=employeeNo++; //新输入的员工编号为目前最大编号加1 grade=1; //级别初值为1

accumPay=0.0; } //月薪总额初值为0

employee::~employee() {}

void employee::promote(int increment)

{ grade+=increment;} //升级,提升的级数由increment指定

void employee::SetaccumPay (float pa)

{ accumPay=pa;} //设置月薪

int employee::GetindividualEmpNo()

{ return individualEmpNo;} //获取成员编号

int employee::Getgrade()

{ return grade;} //获取级别

float employee::GetaccumPay()

{ return accumPay;} //获取月薪

/5_11.cpp

#include

#include"employee.h"

using namespace std;

void main()

{

employee m1;

employee t1;

employee sm1;

employee s1;

cout<<"请输下一个雇员的月薪:";

float pa;

cin>> pa;

m1.promote(3); // m1提升3级

m1. SetaccumPay (pa); //设置m1月薪

cout<<"请输下一个雇员的月薪:";

cin>>pa;

t1.promote(2); //t1提升2级

t1. SetaccumPay (pa); //设置t1月薪

cout<<"请输下一个雇员的月薪:";

cin>> pa;

sm1.promote(2); //s1提升2级

sm1. SetaccumPay (pa); //设置sm1月薪

cout<<"请输下一个雇员的月薪:";

cin >>pa;

s1. SetaccumPay (pa); //设置s1月薪

//显示m1信息

cout<<"编号"<

<<"级别为"<

//显示t1信息

cout<<"编号"<

<<"级别为"<

//显示sm1信息

cout<<"编号"<

<<"级别为"<

//显示s1信息

cout<<"编号"<

<<"级别为"<

}

实验三人员信息管理系统(三)

对象数组被使用时构造函数与析构函数的调用

对象的深拷贝与浅拷贝

升级“人员信息”管理系统,增加以下功能:

录入职员姓名信息

显示员工姓名

字符数组的使用

对象数组的使用

在类employee中新增加另一个数据成员——以字符数组成员char name[20]来保存的职工姓名,相应的增加成员函数setname(char *)和char *GetName( )用来设置和提取姓名。

//employee.h

class employee

{

protected:

char name[20]; //姓名

int individualEmpNo; //个人编号

int grade; //级别

float accumPay; //月薪

static int employeeNo; //本公司职员编号目前最大值

public:

employee(); //构造函数

~employee(); //析构函数

void SetName(char *); //设置姓名函数

char * GetName(); //提取姓名函数

void promote(int); //升级函数

void SetaccumPay (float pa); //设置月薪函数

int GetindividualEmpNo(); //提取编号函数

int Getgrade(); //提取级别函数

float GetaccumPay(); //提取月薪函数

};

//empfunc.cpp

#include

#include //包含字符串操作头文件

#include"employee.h"

using namespace std;

int employee::employeeNo=1000; //员工编号基数为1000

employee::employee()

{ individualEmpNo=employeeNo++; //新输入的员工编号为目前最大编号加1 grade=1; //级别初值为1

accumPay=0.0; } //月薪总额初值为0

employee::~employee() {}

void employee::promote(int increment)

{ grade+=increment;} //升级,提升的级数由increment指定

void employee::SetName(char* names)

{ strcpy(name,names); } //设置姓名

char* employee::GetName()

{ return name;} //提取成员姓名

void employee::SetaccumPay (float pa)

{ accumPay=pa;} //设置月薪

int employee::GetindividualEmpNo()

{ return individualEmpNo;} //获取成员编号

int employee::Getgrade()

{ return grade;} //获取级别

float employee::GetaccumPay()

{ return accumPay;} //获取月薪

//6_25.cpp

#include

#include"employee.h"

using namespace std;

void main()

{

employee emp[4];

char namestr[20]; //输入雇员姓名时首先临时存放在namestr中

float pa;

int grade, i;

for (i=0; i<4; i++)

{

cout<<"请输下一个雇员的姓名:";

cin>>namestr;

emp[i].SetName(namestr); //设置雇员emp[i]的姓名

cout<<"请输入雇员的月薪:";

cin>> pa;

emp[i]. SetaccumPay (pa); //设置emp[i]的月薪

cout<<"请输入雇员的提升级别:";

cin>>grade;

emp[i].promote(grade); // emp[i]升级

}

//显示信息

for (i=0; i<4; i++)

{

cout<< emp[i].GetName()<<"编号"<< emp[i].GetindividualEmpNo()

<<"级别为"<< emp[i].Getgrade()<<"级,本月工资"<< emp[i].GetaccumPay()<

}

}

实验四人员信息管理系统(四)

类的派生与继承

派生类的构造函数与析构函数的使用

虚基类与虚函数的使用

升级“人员信息”管理系统,增加以下功能:

改进月薪处理功能

基类与派生类的定义和使用

虚基类的定义与使用

不同类型员工的月薪计算方法如下:经理固定月薪8000元;兼职技术人员

按每小时100元领取月薪;兼职推销员的月薪按该推销员当月销售额的4%提成;销售经理既拿固定月薪也领取销售提成,固定月薪为5000元,销售提成为所管辖部门当月销售总额的5%。

设计一个基类employee,然后派生technician(兼职技术人员)、manager(经理)

类和salesman(兼职推销员)类。

//employee.h

class employee

{

protected:

char name[20]; //姓名

int individualEmpNo; //个人编号

int grade; //级别

float accumPay; //月薪总额

static int employeeNo; //本公司职员编号目前最大值

public:

employee(); //构造函数

~employee(); //析构函数

void pay(); //计算月薪函数

void promote(int); //升级函数

void SetName(char *); //设置姓名函数

char * GetName(); //提取姓名函数

int GetindividualEmpNo(); //提取编号函数

int Getgrade(); //提取级别函数

float GetaccumPay(); //提取月薪函数

};

class technician:public employee //兼职技术人员类

{

private:

float hourlyRate; //每小时酬金

int workHours; //当月工作时数

public:

technician(); //构造函数

void SetworkHours(int wh); //设置工作时数

void pay(); //计算月薪函数

};

class salesman:virtual public employee //兼职推销员类

{

protected:

float CommRate; //按销售额提取酬金的百分比

float sales; //当月销售额

public:

salesman(); //构造函数

void Setsales(float sl); //设置销售额

void pay(); //计算月薪函数

};

class manager:virtual public employee //经理类

{

protected:

float monthlyPay; //固定月薪数

public:

manager(); //构造函数

void pay(); //计算月薪函数

};

class salesmanager:public manager,public salesman //销售经理类{

public:

salesmanager(); //构造函数

void pay(); //计算月薪函数

};

//employee.cpp

#include

#include

#include"employee.h"

using namespace std;

int employee::employeeNo=1000; //员工编号基数为1000

employee::employee()

{ individualEmpNo=employeeNo++; //新输入的员工编号为目前最大编号加1 grade=1; //级别初值为1

accumPay=0.0; } //月薪总额初值为0

employee::~employee()

{}

void employee::pay() //计算月薪,空函数

{}

void employee::promote(int increment)

{ grade+=increment;} //升级,提升的级数由increment指定

void employee::SetName(char* names)

{ strcpy(name,names); } //设置姓名

char* employee::GetName()

{ return name;} //获取姓名

int employee::GetindividualEmpNo()

{ return individualEmpNo;} //获取成员编号

int employee::Getgrade()

{ return grade;} //获取级别

float employee::GetaccumPay()

{ return accumPay;} //获取月薪

technician::technician()

{ hourlyRate=100;} //每小时酬金100元

void technician::SetworkHours(int wh)

{ workHours=wh;} //设置工作时间

void technician::pay()

{ accumPay=hourlyRate*workHours;} //计算月薪,按小时计酬

salesman::salesman()

{ CommRate=0.04;} //销售提成比例4%

void salesman::Setsales(float sl)

{ sales=sl;} //设置销售额

void salesman::pay()

{ accumPay=sales*CommRate;} //月薪=销售提成

manager::manager()

{ monthlyPay=8000;} //固定月薪8000元

void manager::pay()

{ accumPay=monthlyPay;} //月薪总额即固定月薪数

salesmanager::salesmanager()

{ monthlyPay=5000;

CommRate=0.005;}

void salesmanager::pay()

{ accumPay=monthlyPay+CommRate*sales; } //月薪=固定月薪+销售提成

//7_10.cpp

#include

#include

#include"employee.h"

using namespace std;

void main()

{

manager m1;

technician t1;

salesmanager sm1;

salesman s1;

char namestr[20]; //输入雇员姓名时首先临时存放在namestr中

cout<<"请输下一个雇员的姓名:";

cin>>namestr;

m1.SetName(namestr); //设置雇员m1姓名

cout<<"请输下一个雇员的姓名:";

cin>>namestr;

t1.SetName(namestr); //设置雇员t1姓名

cout<<"请输下一个雇员的姓名:";

cin>>namestr;

sm1.SetName(namestr); //设置雇员sm1姓名

cout<<"请输下一个雇员的姓名:";

cin>>namestr;

s1.SetName(namestr); //设置雇员s1姓名

m1.promote(3); //经理m1提升3级

m1.pay(); //计算m1月薪

cout<<"请输入兼职技术人员"<

int ww;

cin>>ww; //输入t1本月的工作时数

t1.SetworkHours(ww); //设置t1本月的工作时数

t1.promote(2); //t1提升2级

t1.pay(); //计算t1月薪

cout<<"请输入销售经理"<

cin>>sl; //输入s1所管辖部门本月的销售总额

sm1.Setsales(sl); //设置s1所管辖部门本月的销售总额

sm1.pay(); //计算s1月薪

sm1.promote(2); //s1提升2级

cout<<"请输入推销员"<

cin>>sl; //输入s1本月的销售额

s1.Setsales(sl); //设置s1本月的销售额

s1.pay(); //计算s1月薪

//显示m1信息

cout<

<<"级别为"<

//显示t1信息

cout<

<<"级别为"<

//显示sm1信息

cout<

<<"级别为"<

//显示s1信息

cout<

<<"级别为"<

实验五人员信息管理系统(五)

虚函数

抽象类

升级“我行我素shopping”购物管理系统,改进以下功能:

升级promote( )成员函数

使用基类指针调用虚函数

将基类employee的成员函数promte( )声明为虚函数,各派生类中再声明同

名函数,在派生类的promte( )函数中以不同的实参调用基类employee的成员函数promte( )。

//employee.h

class employee

{

protected:

char name[20]; //姓名

int individualEmpNo; //个人编号

int grade; //级别

float accumPay; //月薪总额

static int employeeNo; //本公司职员编号目前最大值

public:

employee(); //构造函数

~employee(); //析构函数

virtual void pay()=0; //计算月薪函数(纯虚函数)

virtual void promote(int increment=0); //升级函数(虚函数)

void SetName(char *); //设置姓名函数

char * GetName(); //提取姓名函数

int GetindividualEmpNo(); //提取编号函数

int Getgrade(); //提取级别函数

float GetaccumPay(); //提取月薪函数

};

class technician:public employee //兼职技术人员类

{

private:

float hourlyRate; //每小时酬金

int workHours; //当月工作时数

public:

technician(); //构造函数

void SetworkHours(int wh); //设置工作时数函数

void pay(); //计算月薪函数

void promote(int); //升级函数

};

class salesman:virtual public employee //兼职推销员类

{

protected:

float CommRate; //按销售额提取酬金的百分比

float sales; //当月销售额

public:

salesman(); //构造函数

void Setsales(float sl); //设置销售额函数

void pay(); //计算月薪函数

void promote(int); //升级函数

};

class manager:virtual public employee //经理类

{

protected:

float monthlyPay; //固定月薪数

public:

manager(); //构造函数

void pay(); //计算月薪函数

void promote(int); //升级函数

};

class salesmanager:public manager,public salesman //销售经理类{

public:

salesmanager(); //构造函数

void pay(); //计算月薪函数

void promote(int); //升级函数

};

//employee.cpp

#include

#include

#include"employee.h"

using namespace std;

int employee::employeeNo=1000; //员工编号基数为1000

employee::employee()

{ individualEmpNo=employeeNo++; //新输入的员工编号为目前最大编号加1 grade=1; //级别初值为1

accumPay=0.0;} //月薪总额初值为0

employee::~employee()

{}

void employee::promote(int increment)

{ grade+=increment; } //升级,提升的级数由increment指定

void employee::SetName(char* names)

{ strcpy(name,names); } //设置姓名

char* employee::GetName()

{ return name;} //提取成员姓名

int employee::GetindividualEmpNo()

{ return individualEmpNo;} //提取成员编号

int employee::Getgrade()

{ return grade;} //提取成员级别

float employee::GetaccumPay()

{ return accumPay;} //提取月薪

technician::technician()

{ hourlyRate=100;} //每小时酬金100元

void technician::SetworkHours(int wh)

{ workHours=wh;} //设置工作时间

void technician::pay()

{ accumPay=hourlyRate*workHours;} //计算月薪,按小时计酬

void technician::promote(int)

{ employee::promote(2); } //调用基类升级函数,升2级

salesman::salesman()

{ CommRate=0.04;} //销售提成比例4%

void salesman::Setsales(float sl)

{ sales=sl;} //设置销售额

void salesman::pay()

{ accumPay=sales*CommRate;} //月薪=销售提成

void salesman::promote(int)

{ employee::promote(0); } //调用基类升级函数,升0级

manager::manager()

{ monthlyPay=8000;} //固定月薪8000元

void manager::pay()

{ accumPay=monthlyPay;} //月薪总额即固定月薪数

void manager::promote(int )

{ employee::promote(3);} //调用基类升级函数,升3级

salesmanager::salesmanager()

{ monthlyPay=5000;

CommRate=0.005;}

void salesmanager::pay()

{ accumPay=monthlyPay+CommRate*sales; } //月薪=固定月薪+销售提成

void salesmanager::promote(int)

{ employee::promote(2);} //调用基类升级函数,升2级

//employee.cpp

#include

#include

#include"employee.h"

using namespace std;

int employee::employeeNo=1000; //员工编号基数为1000

employee::employee()

{ individualEmpNo=employeeNo++; //新输入的员工编号为目前最大编号加1 grade=1; //级别初值为1

accumPay=0.0;} //月薪总额初值为0

employee::~employee()

{}

void employee::promote(int increment)

{ grade+=increment; } //升级,提升的级数由increment指定

void employee::SetName(char* names)

{ strcpy(name,names); } //设置姓名

char* employee::GetName()

{ return name;} //提取成员姓名

int employee::GetindividualEmpNo()

{ return individualEmpNo;} //提取成员编号

int employee::Getgrade()

{ return grade;} //提取成员级别

float employee::GetaccumPay()

{ return accumPay;} //提取月薪

technician::technician()

{ hourlyRate=100;} //每小时酬金100元

void technician::SetworkHours(int wh)

{ workHours=wh;} //设置工作时间

void technician::pay()

{ accumPay=hourlyRate*workHours;} //计算月薪,按小时计酬

void technician::promote(int)

{ employee::promote(2); } //调用基类升级函数,升2级

salesman::salesman()

{ CommRate=0.04;} //销售提成比例4%

void salesman::Setsales(float sl)

{ sales=sl;} //设置销售额

void salesman::pay()

{ accumPay=sales*CommRate;} //月薪=销售提成

void salesman::promote(int)

{ employee::promote(0); } //调用基类升级函数,升0级

相关文档