文档库 最新最全的文档下载
当前位置:文档库 › c++程序设计毕业论文

c++程序设计毕业论文

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();

}

}

资:"<

资:"<

资:"<

资:"<

相关文档