工资管理系统实验报告(附源程序)

时间:2024.3.31

合肥学院

计算机科学与技术系

课程设计报告

2008~20##学年第二期

20##年6月

一、题目

工资管理系统。某小型公司,主要有四类人员:经理、技术人员、销售经理和推销员。要求存储这些人员的姓名、编号、级别、当月薪水,计算月薪总额并显示全部信息。

人员编号基数为1000,每输入一位人员就加一。经理升级三级因此为四级,技术人员和销售经理升级二级所以为三级,销售人员升级为二级。

月薪计算办法是:经理拿固定月薪8000元;技术人员按每小时100元领取月薪;推销员的月薪按该推销员当月销售额的4%提成;销售经理既拿固定月薪也领取销售提成,固定月薪为5000元,销售提成为所管辖部门当月销售总额的0.5‰。

二、问题分析

根据题目要求,编写一个可以管理工资系统的程序,公司有四种成员:经理,销售经理,销售人员,技术人员。每个人员的信息有姓名,编号,级别,当前月薪,人员编号技术为1000。

1.功能选择项:输入选择功能项,及每个功能对应的作用。

2.信息的录入:包括姓名,级别,编号,技术人员需要本月的工作时数,销售经理需要固定月薪和本月销售额,销售人员仅需要本月的销售额,经理需要输入固定月薪。

3.显示信息:显示各人员的姓名,级别,编号和本月应发金额。

根据题目要求设计如下:

1.设计一个主菜单大体如下:

【1】   各成员信息输入一次;

【2】   各成员信息输入两次;

【3】   各成员信息输入三次;

2.程序运行时,首先提示输入雇员姓名;

3.对于经理直接输出其工资及其它信息;

4.对于技术人员,程序提示输入其本月工作时数,然后输出其工资及其它信息;

5.对于推销员,程序提示输入其本月销售额,然后输出其工资及其它信息;

6.对于销售经理,程序提示输入其管辖部门本月销售总额,然后输出其工资及其它信息。

三、算法的设计

根据上述需求,设计一个基类employee,然后派生出technician(技术人员)类、manager(经理)类和salesman(推销员)类。由于销售经理(salesmanager)既是经理又是销售人员,兼具两类人员的特点,因此同时继承manager和salesman两个类。

定义一个雇员类如下:

class employee

{

protected:

       char name[20]; //姓名

       int  num; //个人编号

       int  grade; //级别

       float salary;//月薪总额

       static int No; //静态数据:目前编号

public:

       employee(); //构造函数

       ~employee(); //析构函数

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

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

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

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

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

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

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

       };

在基类中,除了定义构造函数和析构函数以外,还应统一定义对各类人员信息都应有的操作,这样可以规范各派生类的基本行为。但是各类人员的月薪计算方法不同,不能在基类employee中统一定义计算方法。各类人员信息的显示内容也不同,同样不能在基类中统一定义显示方法。因此,在employee类中用纯虚函数的方式定义了计算月薪函数pay,然后在派生类中再根据各自的同名函数实现具体的功能。

由于salesmanager的两个基类又有公共基类employee,为避免二义性,这里将employee类设计为虚基类。


文本框: 基类的数据成员和函数成员描述系统类图

属性和方法定义

四、调试

由于公司每增加一个雇员,无论他(她)是哪一类人员,也就是employee类的所有派生类对象创建时,都要访问同一个No,因此将No定义为静态数据成员。经理类型时,经理拿基本工资8000,技术人员按小时计算本月拿的工资,销售人员按本月销售额并提取成本,销售经理拿基本工资5000和本月的所管辖部门的销售额提成。

在定义销售经理的类函数时可以建立在经理和销售人员的基础上,既是可以把两者作为基类使用。

class salesmanager:public manager,public salesman

{

public:

    salesmanager(); //构造函数

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

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

};

进一步改进

(1)目前程序中,经理月薪,技术人员的小时酬金和销售人员的销售额提成比例均是固定的,这不适应不同公司的需要,可考虑用带参数的构造函数来解决。

(2)销售经理月薪计算中,要输入其管辖部门当月销售总额。实际上,这可以通过将本部门所有推销员销售额相加而得到。可以考虑在推销员类中增加所属部门等属性来完成这方面的功能。

(3)这次课程设计是我第一次面对大程序,以前只是完成课后慢的小型题目,没有牵涉到链表和文件。C++是建立在C语言上的,上学期没怎么学习C语言所以导致这学期有点困难,其实课程设计是基于会编写和使用一些小的类和函数调用的基础上的,设计的成果是基于对这些内容的熟练掌握程度。课程设计中有许多要求没有做到主菜单的设计和选择功能的语句都没有很好的设计,往往菜单设计好了又不知道怎么和函数或者类相结合使用。总之自己感觉自己做的很不好,说明在大一这学年该学的知识还是没有学好。

这次我没有用到链表和文件只是简单的使用了指针。指针调用是是指向字符串的首地址。

(4)课程设计要把握大局,在用小程序是必须 合理插入和调用小程序,思路清晰。

(5)一开始输出姓名,编号,级别,本月工资时用的是如:emp[i].Getname等形式,可是好像只是用于结构体。

(6)在传字符串是使用到指针,如:

Char name[10]

(7)将理论教学中涉及到的知识点贯穿起来,对不同的数据类型、程序控制结构、数据结构作一比较和总结,结合设计题目进行综合性应用,对所学知识达到融会贯通的程度。通过课程设计,学生在下述各方面的能力应该得到锻炼:进一步巩固、加深学生所学专业课程《C++语言教程》的基本理论知识,理论联系实际,进一步培养学生综合分析问题,解决问题的能力,全面考核学生所掌握的基本理论知识及其实际业务能力,从而达到提高学生素质的最终目的,利用所学知识,开发小型应用系统,掌握运用C++语言编写调试应用系统程序,训练独立开发应用系统,进行数据处理的综合能力,对于给定的设计题目,如何进行分析,理清思路,并给出相应的数学模型,掌握自顶而下的设计方法,将大问题进行模块化,领会结构化程序设计的方法,熟练掌握C++语言的基本语法,灵活运用各种数据类型。

五、测试

主函数中声明四个关于雇员类的对象,分别对对象进行输入信息。

测试结果如下:

【选择功能1】:

******************************************************************************

------------------------------功能选项[主菜单]--------------------------------

******************************************************************************

[1]**************-------------各成员只输入一遍-----------------***************

[2]**************-------------重复功能并运用两遍---------------***************

[3]**************-------------重复功能并运用三遍---------------***************

******************************请输入功能选项**********************************

1

******************************只输入一份信息**********************************

---------------------------------------------------------请输入雇员的姓名:YU

---------------------------------------------------------请输入雇员的姓名:WEN

---------------------------------------------------------请输入雇员的姓名:TI

---------------------------------------------------------请输入雇员的姓名:HU

---------------------------------------------------------请输入兼职技术人员  WEN

  本月的工作时数:23

---------------------------------------------------------请输入销售经理  TI  所

管辖部门本月的销售总额:78907

---------------------------------------------------------请输入推销员  HU  本月

的销售额:6789

YU职工号1000级别为4级,本月工资8000

WEN职工号1001级别为3级,本月工资2300

TI职工号1002级别为3级,本月工资5394.54

HU职工号1003级别为1级,本月工资271.56

Press any key to continue

【选择功能2】:

******************************************************************************

------------------------------功能选项[主菜单]--------------------------------

******************************************************************************

[1]**************-------------各成员只输入一遍-----------------***************

[2]**************-------------重复功能并运用两遍---------------***************

[3]**************-------------重复功能并运用三遍---------------***************

******************************请输入功能选项**********************************

2

--------------------------------------------------------请输入雇员的姓名:hua

--------------------------------------------------------请输入雇员的姓名:yu

--------------------------------------------------------请输入雇员的姓名:fang

--------------------------------------------------------请输入雇员的姓名:qing

--------------------------------------------------------请输入兼职技术人员  yu

本月的工作时数:6

--------------------------------------------------------请输入销售经理  fang  所

管辖部门本月的销售总额:5643780

--------------------------------------------------------请输入推销员  qing  本月

的销售额:7896

hua编号1000级别为4级,本月工资8000

yu编号1001级别为3级,本月工资600

fang编号1002级别为3级,本月工资33218.9

qing编号1003级别为1级,本月工资315.84

--------------------------------------------------------请输入雇员的姓名:li

--------------------------------------------------------请输入雇员的姓名:xiu

--------------------------------------------------------请输入雇员的姓名:chun

--------------------------------------------------------请输入雇员的姓名:quan

--------------------------------------------------------请输入兼职技术人员  xiu

 本月的工作时数:21

--------------------------------------------------------请输入销售经理  chun  所

管辖部门本月的销售总额:12000000

--------------------------------------------------------请输入推销员  quan  本月

的销售额:23100

li编号1000级别为7级,本月工资8000

xiu编号1001级别为5级,本月工资2100

chun编号1002级别为5级,本月工资65000

quan编号1003级别为1级,本月工资924

Press any key to continue

【选择功能3】:

******************************************************************************

------------------------------功能选项[主菜单]--------------------------------

******************************************************************************

[1]**************-------------各成员只输入一遍-----------------***************

[2]**************-------------重复功能并运用两遍---------------***************

[3]**************-------------重复功能并运用三遍---------------***************

******************************请输入功能选项**********************************

3

-------------------------------------------------------请输入雇员的姓名:pan

-------------------------------------------------------请输入雇员的姓名:feng

-------------------------------------------------------请输入雇员的姓名:jing

-------------------------------------------------------请输入雇员的姓名:qi

-------------------------------------------------------请输入兼职技术人员feng本

月的工作时数:24

请输入销售经理jing所管辖部门本月的销售总额:42967574

------------------------------------------------------请输入推销员  qi  本月的销

售额:45673

pan编号1000级别为4级,本月工资8000

feng编号1001级别为3级,本月工资2400

jing编号1002级别为3级,本月工资219838

qi编号1003级别为1级,本月工资1826.92

-------------------------------------------------------请输入雇员的姓名:ji

-------------------------------------------------------请输入雇员的姓名:ta

-------------------------------------------------------请输入雇员的姓名:fa

-------------------------------------------------------请输入雇员的姓名:la

-------------------------------------------------------请输入兼职技术人员ta本月

的工作时数:9

请输入销售经理fa所管辖部门本月的销售总额:39074378

------------------------------------------------------请输入推销员  la  本月的销

售额:846810

ji编号1000级别为7级,本月工资8000

ta编号1001级别为5级,本月工资900

fa编号1002级别为5级,本月工资200372

la编号1003级别为1级,本月工资33872.4

-------------------------------------------------------请输入雇员的姓名:ge

-------------------------------------------------------请输入雇员的姓名:ji

-------------------------------------------------------请输入雇员的姓名:ku

-------------------------------------------------------请输入雇员的姓名:nu

-------------------------------------------------------请输入兼职技术人员ji本月

的工作时数:43

请输入销售经理ku所管辖部门本月的销售总额:27808543

------------------------------------------------------请输入推销员  nu  本月的销

售额:34795

ge编号1000级别为10级,本月工资8000

ji编号1001级别为7级,本月工资4300

ku编号1002级别为7级,本月工资144043

nu编号1003级别为1级,本月工资1391.8

Press any key to continue

输入每个成员所需要的信息,经理需要固定工资;销售经理需要固定每月工资和所管辖部门本月的销售额在提取百分比就是本月实拿的工资;技术人员需要本月的工作时数,就可以计算出本月工资;销售人员就是本月销售额在提成。测试结果如下:

六、参考书目

[1] 刘振安.等编著.C++程序设计课程设计. 机械工业出版社。

[2] 吴乃陵.等编著.C++程序设计.北京:高等教育出版社。

[3] 李龙澍.C++程序设计实训教程.北京:清华大学出版社 。

[4] 宁正元.《数据结构(C语言)》南京:东南大学出版社,20##年6月。

[5] 严蔚敏等 《数据结构(C语言版)》 北京:清华大学出版社,1997年。

[6] 胡学钢等《数据结构算法设计指导》 北京:清华大学出版社,1999年 。

[7] 明日科技编著《Visual C++程序开发范例宝典》北京:人民邮电出版社。

七、附录

源程序

#include<iostream>

#include<cstring>

using namespace std;

class employee//---------------------------------------------------基类

{

protected:

       char name[20]; //姓名

       int  num; //个人编号

       int  grade; //级别 

       float salary;//月薪总额

       static int No; //静态数据:目前编号

public:

       employee(); //构造函数

       ~employee(); //析构函数

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

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

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

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

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

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

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

};

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

employee::employee() //输入的员工编号为编号加1

{  num=No++;

  grade=1; //级别初值为1

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

}

employee::~employee(){}

void employee::promote(int jishu)

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

void employee::SetName(char * names)//指针

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

 char* employee::GetName()

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

 int employee::GetNum()

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

 int employee::Getgrade()

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

 float employee::Getsalary()

 { return salary;}   //提取月薪

class technician:public employee //----------------------------------技术人员类

{

private:

       float hourlyRate; //每小时酬金

       int  workHours;//当月工作时数

public:

       technician(); //构造函数

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

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

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

};

 technician::technician()

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

 void technician::SetworkHours(int wh)

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

 void technician::pay()

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

 void technician::promote(int)

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

class salesman:virtual public employee //----------------------------销售人员类

{

protected:

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

       float sales; //当月销售额

public:

       salesman(); //构造函数

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

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

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

};

salesman::salesman()

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

 void salesman::Setsales(float sl)

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

 void salesman::pay()

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

 void salesman::promote(int)

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

class manager:virtual public employee //------------------------------经理类

{

protected:

       float monthlyPay; //固定月薪数

public:

       manager(); //构造函数

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

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

};

manager::manager()

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

 void manager::pay()

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

 void manager::promote(int)

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

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

{

public:

       salesmanager(); //构造函数

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

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

};

salesmanager::salesmanager()

 { monthlyPay=5000;

   CommRate=0.005;}

 void salesmanager::pay()

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

 void salesmanager::promote(int)

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

void main()//-----------------------------------------------------主函数

{   int n;

    manager ml;//声明经理对象

    technician tl;//声明技术人员对象

    salesmanager sml;//声明销售经理对象

    salesman sl;//声明销售人员对象

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

    employee*emp[4]={&ml,&tl,&sml,&sl};//数组指针

cout<<"******************************************************************************"<<endl;

       cout<<"------------------------------功能选项[主菜单]--------------------------------"<<endl;

cout<<"******************************************************************************"<<endl;

    cout<<"                                                                                   "<<endl;

       cout<<"[1]**************-------------各成员只输入一遍-----------------***************"<<endl;

    cout<<"                                                                                   "<<endl;

    cout<<"[2]**************-------------重复功能并运用两遍---------------***************"<<endl;

       cout<<"                                                                                   "<<endl;

       cout<<"[3]**************-------------重复功能并运用三遍---------------***************"<<endl;

       cout<<"                                                                                    "<<endl;

       cout<<"******************************请输入功能选项**********************************"<<endl;

       cin>>n;

       switch(n)

       {

       case 1:{

       cout<<"******************************只输入一份信息**********************************"<<endl;

       int i;

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

    {

     cout<<"---------------------------------------------------------请输入雇员的姓名:";

     cin>>namestr;

     emp[i]->SetName(namestr);   //设置每个成员的姓名

     emp[i]->promote();          //升级,通过基类指针访问各派生类函数

     }

     cout<<"---------------------------------------------------------请输入兼职技术人员  "<<tl.GetName()<<"  本月的工作时数:";

     int ww;

     cin>>ww;

     tl.SetworkHours(ww);   //设置工作时间

     cout<<"---------------------------------------------------------请输入销售经理  "<<sml.GetName()<<"  所管辖部门本月的销售总额:";

     float s1;

     cin>>s1;

     sml.Setsales(s1);

     cout<<"---------------------------------------------------------请输入推销员  "<<sl.GetName()<<"  本月的销售额:";

     cin>>s1;

     sl.Setsales(s1);

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

     {

      emp[i]->pay(); //计算月薪,通过基类指针访问各派生类函数

      cout<<emp[i]->GetName()<<"职工号"<<emp[i]->GetNum()<<"级别为"

          <<emp[i]->Getgrade()<<"级,本月工资"<<emp[i]->Getsalary()

          <<endl;

      }

                 break;}

       case 2:{

    int m;

    for(m=0;m<2;m++)

       {

       int i;

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

    {

     cout<<"--------------------------------------------------------请输入雇员的姓名:";

     cin>>namestr;

     emp[i]->SetName(namestr);   //设置每个成员的姓名

     emp[i]->promote();          //升级,通过基类指针访问各派生类函数

     }

     cout<<"--------------------------------------------------------请输入兼职技术人员  "<<tl.GetName()<<"  本月的工作时数:";

     int ww;

     cin>>ww;

     tl.SetworkHours(ww);   //设置工作时间

     cout<<"--------------------------------------------------------请输入销售经理  "<<sml.GetName()<<"  所管辖部门本月的销售总额:";

     float s1;

     cin>>s1;

     sml.Setsales(s1);

     cout<<"--------------------------------------------------------请输入推销员  "<<sl.GetName()<<"  本月的销售额:";

     cin>>s1;

     sl.Setsales(s1);

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

     {

      emp[i]->pay(); //计算月薪,通过基类指针访问各派生类函数

      cout<<emp[i]->GetName()<<"编号"<<emp[i]->GetNum()<<"级别为"

          <<emp[i]->Getgrade()<<"级,本月工资"<<emp[i]->Getsalary()

          <<endl;

      }

       }

        break;

       }

             

       case 3:{

              int u;

              for(u=0;u<3;u++){

    int i;

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

    {

     cout<<"-------------------------------------------------------请输入雇员的姓名:";

     cin>>namestr;

     emp[i]->SetName(namestr);   //设置每个成员的姓名

     emp[i]->promote();          //升级,通过基类指针访问各派生类函数

     }

     cout<<"-------------------------------------------------------请输入兼职技术人员"<<tl.GetName()<<"本月的工作时数:";

     int ww;

     cin>>ww;

     tl.SetworkHours(ww);   //设置工作时间

     cout<<"请输入销售经理"<<sml.GetName()<<"所管辖部门本月的销售总额:";

     float s1;

     cin>>s1;

     sml.Setsales(s1);

     cout<<"------------------------------------------------------请输入推销员  "<<sl.GetName()<<"  本月的销售额:";

     cin>>s1;

     sl.Setsales(s1);

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

     {

      emp[i]->pay(); //计算月薪,通过基类指针访问各派生类函数

      cout<<emp[i]->GetName()<<"编号"<<emp[i]->GetNum()<<"级别为"

          <<emp[i]->Getgrade()<<"级,本月工资"<<emp[i]->Getsalary()

          <<endl;

      }

              }

              break;

                 }

                 }

}           

更多相关推荐:
工资管理系统实验报告

工资管理系统实验报告一实验目的设计一个职工工资管理系统能够方便的对职工及工资情况进行管理统计每个部门的员工整个公司的员工工资员工信息等包括工资奖金纳税等等并能够修改员工的各种信息在需要的时候可以方便的排序采用菜...

ERP实验报告 薪资管理系统

ERP实验报告二专业班级学号姓名实验时间3月27日课时数8实验名称薪资系统管理以下内容字体小四单倍行距整篇报告至少5页其中实验总结至少1页一实验目的系统学习薪资系统初始化日常业务处理的主要内容和操作方法要求掌握...

工资管理系统 数据库课程设计报告

目录一开发背景1二功能描述2三数据流分析331数据流图332数据字典4四概念模型设计6五逻辑结构设计和优化9六应用程序设计10七心得体会12参考文献13附录13一开发背景随着经济的发展企业正向着大型化规模化发展...

工资管理系统课程设计报告

目录摘要错误未定义书签绪论错误未定义书签第一章需求分析211系统功能需求简介212功能需求描述213目标系统要求214系统平台选择215数据流图3第二章概念模型设计421概念模型设计4第三章逻辑模型设计531数...

管理信息系统工资管理实验报告

管理信息系统实验报告题目IT公司工资管理系统实验名称分析及设计综合报告学号X姓名X指导教师X时间20xx年4月11日目录1引言311系统开发背景及需求分析312系统目标32业务流程分析421IT公司工资系统组织...

工资管理系统实验报告

山东工商学院信电学院高级语言程序设计课程设计报告高级语言程序设计课程设计报告ExperimentDesigningreporter课程名称高级语言程序设计英文名称CProgramExperimentDesign...

某大学工资管理信息系统实验报告

《管理信息系统》实验报告实验课题:某大学工资管理系统姓名:专业班级:信管学号:指导老师:目录一、实验目的与要求.................................1二、实验步骤..........…

c语言课程设计报告 职工工资管理系统

课程设计报告课程设计报告题目职工工资管理系统设计者专业班级学号指导教师所属院系20xx年6月29日一设计需求说明一职工工资管理系统功能设计要求1输入记录将每一个职工的姓名ID号以及基本工资职务工资岗位津贴医疗保...

c语言课程设计报告_职工工资管理系统

课程设计报告课程设计报告题目职工工资管理系统设计者专业班级学号指导教师所属院系20xx年6月29日一设计需求说明一职工工资管理系统功能设计要求1输入记录将每一个职工的姓名ID号以及基本工资职务工资岗位津贴医疗保...

工资管理系统课程设计报告

工资管理系统课程设计报告工资管理系统课程设计报告编写人同组成员课程设计负责人0922305022完成日期辅导教师批阅日期分数11页共4页第工资管理系统课程设计报告1功能描述本程序主要的数据结构是单链表它由四大模...

《职工工资管理系统设计》实验报告

1信息工程学院计算机基础训练程序设计报告内蒙古工业大学信息工程学院实验报告课程名称c语言实验名称实验类型验证性综合性设计性实验室名称电西8楼班级计122学号20xx20xx1042姓名孙亚赛组别同组人勾涛付启恒...

高校工资管理系统实验报告

课程设计报告课程名称算法与程序设计课题名称高校工资管理系统专业信息与计算科学班级1303学号姓名指导教师王祝君老师20xx年12月25日湖南工程学院课程设计任务书课程名称算法与程序设计课题专业班级信息与计算科学...

工资管理系统实验报告(20篇)