c++实习报告,小型公司管理系统
一、实习目的:
1、握C++语言编程的基础知识。通过编写一个小型公司管理系统,学会简单的面向对象的编程方法,包括类的结构、继承以及了的多态与虚函数、抽象类之间的关系。
2、悉Visual C++6.0的编程环境,通过编译提示、断点调试能够找出常见的错误,并学会模块化程序设计的方法。
3、过实训使自己所学程序设计的知识得到进一步的巩固,为下一步学习新知识做好准备,程后进行的一个理论与实践相结合的重要教学环节,提高编程能力和自学能力,并初步掌握软件开发的基本方法,为进行专业软件开发打下基础
二、实习题目:
某小型公司,主要有四类人员:经理、兼职技术人员、销售经理和兼职推销员。现在,需要存储这些人员的姓名、编号、级别、当月薪水.计算月薪总额并显示全部信息。
人员编号基数为1000,每输入一个人员信息编号顺序加1。
程序要有对所有人员提升级别的功能。本例中为简单起见,所有人员的初始级别均为1级。然后进行升级,经理升为4级,兼职技术人员和销售经理升为3级,推销员仍为1级。
月薪计算办法是:经理拿固定月薪8000元;兼职技术人员按每小时100元领取月薪;兼职推销员的月薪按该推销员当月销售额的4%提成;销售经理既拿固定月薪也领取销售提成,固定月薪为5000元,销售提成为所管辖部门当月销售总额的5%。
二、实习过程:
1.题目分析:
在这个公司中有四类人员:经理、兼职技术人员、销售经理和兼职推销员要存储的信息有姓名、编号、级别、当月薪水.计算月薪总额,由于所有职员有相同的成员如姓名(name).工资(pay).等。所以可将所有信息归纳为一个职员类(employee),将其作为一个抽象基类,然后派生出子类,实现各类人员不同的信息(如工资计算),
由于销售经理具有销售员和经理的特性,所以销售经理采用多重继承的关系,继承销售员和经理的两个类,为避免二义性将employee定义为虚基类,可用下图表示:
在这一题目中假设公司有2名技术员、3名销售员、经理和销售经理各1名,所以用对象数组的方式,利用循环语句来实现人员的输入和输出,整个程序设计如下:
2.源程序代码:
//类的说明
#include
#include
class employee //定义员工的抽象类
{
public:
employee();//构造函数
~employee();//析构函数
virtual void pay()=0;//计算工资函数(纯虚函数)
virtual void promote(int increment=0)//升级函数(虚函数)
{grade+=increment;};//提升的级数由increment指定
virtual void display()=0;//显示人员信息(纯虚函数)
virtual void putname()
{ char namestr[50]; //输人员工姓名时首先临时存放在namestr中
cout<<"请您输入姓名:";
cin>>namestr;
name=new char[strlen(namestr)+1];//动态申请用于存放姓名的内存空
间
strcpy(name,namestr);//将临时存放的姓名复制到name
}
protected:
char *name;//姓名
int no;//员工编号
int grade; //级别
double Pay;//工资总额
static int MaxNo;//本公司职员编号目前最大值
};
class manager:virtual public employee//经理类
{
public:
manager()//固定工资数8000
{monthlyPay=8000;}
void promote(int)//升级函数
{employee::promote(3);}
void pay();//计算工资函数
void display();//显示人员信息
protected:
double monthlyPay;//固定工资数
};
class salesman:virtual public employee//兼职推销员类
{
public:
salesman(){CommRate=0.04;}//销售提成比例4%
void promote(int)//升级函数
{employee::promote(0);}
void pay();//计算工资函数
void display();//显示人员信息
protected:
double CommRate;
double sales;
};
class salesmanager:public manager,public salesman//销售经理类{
public:
salesmanager()//构造函数
{
monthlyPay=5000;
CommRate=0.005;
}
void promote(int)//升级函数
{employee::promote(2);}
void pay(); //计算工资函数
void display();//显示人员信息
};
class technician:public employee//兼职技术人员类
{
public:
technician(){hourlyRate=100;}//构造函数
void promote(int)//升级函数
{employee::promote(2);}
void pay();//计算工资函数
void display();//显示人员信息
private:
double hourlyRate;//每小时酬金
int workHours;//当月工作时数
};
//类的定义;
int employee::MaxNo=1000;//员工编号基数为1000
employee::employee()
{
no=MaxNo++;//新输入的员工,其编号为目前最大编号加l
grade=1;//级别初值为l
Pay=0.0;//工资总额初值为0
}
employee::~employee()
{
delete[] name;//在析构函数中删除为存放姓名动态分配的内存空间
}
void manager::pay()
{
Pay=monthlyPay;
}
void manager::display()
{
cout<<"\t经理:"< cout<<"______________________________________________________________ ___"< void salesman::pay() { cout<<"请输入\t"< cin>>sales; Pay=sales*CommRate;//计算工资,按小时计算 } void salesman::display() { cout<<" 推销员"< cout<<"______________________________________________________________ ___"< } void salesmanager::pay() { cout<<"请输入\t"< cin>>sales; Pay=monthlyPay+CommRate*sales;//工资等于固定工资+销售提成 } void salesmanager::display() { cout<<" 销售经理"< cout<<"______________________________________________________________ ___"< } void technician::pay()//计算工资函数 { cout<<"输入技术员 "< cin>>workHours; Pay=hourlyRate*workHours; } void technician::display() { cout<<" 技术人员"< cout<<"______________________________________________________________ ___"< } void main() {cout<<"============================================================= =====\n"; cout<<"\t\t\t公司管理系统"< manager m1; employee *mager; mager=&m1; mager->putname(); mager->promote(); mager->pay(); mager->display(); technician t1[2]; employee *technc[2]={&t1[0],&t1[1]}; for(int i=0;i<2;i++) {technc[i]->putname(); technc[i]->promote(); technc[i]->pay(); technc[i]->display(); } salesmanager sm1; employee *salmag=&sm1; salmag->putname(); salmag->promote(); salmag->pay(); salmag->display(); salesman s1[3]; employee *emp[3]={&s1[0],&s1[1],&s1[2] };//用指针数组的各元素存放各对象的地址 for(int j=0;j<4;j++) {emp[j]->putname(); emp[j]->promote(); emp[j]->pay(); emp[j]->display(); } } 资:"< 资:"< 资:"<
资:"<