小型公司工资管理系统报告_第1页
小型公司工资管理系统报告_第2页
小型公司工资管理系统报告_第3页
小型公司工资管理系统报告_第4页
小型公司工资管理系统报告_第5页
已阅读5页,还剩24页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

中国石油大学(华东)信息与控制工程学院程序设计实习报告小型公司工资管理系统的设计与实现专业班级:电气工程及其自动化12级1班学号:姓名:XXXXX起止日期:2013.7.222013.7.27指导老师:齐玉娟2013年7月27日目录一、 实习内容二、 设计思路三、 调试分析四、 程序清单五、 测试结果六、 实习总结及心得体会七、 程序的使用及相关说明一、实习内容1.1、课程设计的目的 此次课程设计的目的是以程序设计语言(C/C+)为基础,针对具有一定难度的综合性题目,进行分析、编程、调试和运行,进一步掌握面向对象和面向过程程序设计的基本方法和编程技巧,巩固所学理论知识,使理论与实践相结合,提高分析问题、解决问题的能力。通过设计一个简单的小型公司工资管理系统,进一步熟悉C+中类的概念、类的封装、继承和多态的实现方式。了解系统开发的需要分析,类层次设计,模块分析,编码测试,模块组装与整体调试的全过程,逐步熟悉程序设计的方法,并养成良好的编程习惯。1.2、设计题目及要求1 题目:小型公司工资关系系统设计2 设计说明与要求 (1) 公司主要有4类人员:经理、技术员、销售员、销售经理。要求储存这些人的职工号姓名、月工资、年龄、性别等信息。 (2) 工资的计算方法A、经理:固定月薪为8000元;B、技术员:工作时间小时工资(100元每小时);C、销售员:销售额4%提成;D、销售经理:底薪(5000元)+所辖部门销售额总额0.5%;(3) 类的层次结构大体如下:雇员类 技术员类销售员类经理类销售经理类 (4) 输入员工基本数据,要求每类人员不能少于4人,销售员工不少于8人,员工信息输出格式参考运行效果。 (5) 实现功能 应用程序中要有菜单,用于选择各种功能,其中 数据输入:输入各种数据; 数据统计:统计各种销售经理下属销售员的销售额及限售额之和;销售经理按工资进行的冒泡排序; 数据打印:打印各类员工的数据信息; 数据备份:把各类员工的数据星系写入文件中保存; 推出本系统; (6) 菜单说明 数据录入指通过键盘输入各类员工的各项数据; 数据统计指统计各销售经理下属销售员的销售额及销售额之和;销售经理按工资进行冒泡法排序; 数据打印指按照表格的格式在屏幕上输出个员工的信息; 数据备份指将所有员工的信息保存到文件; 退出:结束程序的运行。 (7) 注意一个销售经理管辖多个销售员。 (8) 其他功能可以自己扩充(扩充的功能若比较合理可适当加分)。 (9) 要求在控制台下完成(显示内容都在黑屏下显示)。二、设计思路1、整体考虑程序应该实现的功能,有数据输入,数据统计,数据打印,数据备份和退出系统5个。2、首先定义一个employee的雇员基类,然后由此派生出technician,manager,seller,四个分别为技术员类,经理类,销售员类;再由manager派生出销售经理类sellmanager。每个类中的数据成员都是protected型的,所有的继承都是公有继承,基类中定义有数据输入函数。3、程序里定义了四个对象数组,technician te4;manager ma4;seller se8;sellmanager sm4,中的数据代表各类成员人数。4、整个程序由主函数的一个while循环控制,根据输入的操作选项通过一个switch语句判断该进行什么操作,每一个case后面对应一个函数,每个函数对应一个操作,1对应数据输入,2对应数据统计,3对应数据打印,4对应数据备份,5对应退出系统。5、数据统计、打印以及备份都以表格形式输出。表格通过制表符进行设计。表头表尾表中、菜单还有分隔符均单独定义成void 型的函数。6、主函数中用到了两个switch语句,switch(a)控制数据的输入、数据统计、数据打印、数据备份和退出系统,而switch(b)定义在switch(a)中a=1的情况下,用于对雇员的数据进行输入。7、在进行销售经理的数据输出时,考虑其与销售员之间所属关系,排序时通过if语句先判断所属关系,再进行冒泡法排序,这是要用到双重循环。8、考虑各种数据类型还有所需的C+内的函数,要引用 这四个头文件。用于数据备份,用backup进行数据的输出。用其setw()设置输出数据的宽度,便于表格的制作;三、程序调试由于该程序比较大,所以我在编写的过程中难免会出现很多错误,通过我的努力终于还是克服了重重困难,获得了想要的结果。在无数次的失败后我获得了很多经验,同时也让我对C+有了更家深入的了解。下面就我在编写程序过程中遇到的错误及调试分析过程来加以说明。在定义类的过程中给成员数据赋初值十分重要,在编写程序时我将employee类编成了这样class employee /雇员基类protected:string name;int num;int age;char sex;double wage; 结果在编译的过程中遇到了很多错误其中前几个错误如下:C:UsersyangkaiDesktopC+e.cpp(19) : error C2628: employee followed by void is illegal (did you forget a ;?)C:UsersyangkaiDesktopC+e.cpp(22) : error C2065: name : undeclared identifierC:UsersyangkaiDesktopC+e.cpp(24) : error C2065: sex : undeclared identifier大致上就是说name、sex、age、num、和wage未定义,经过思考我发现是这四个成员数据未赋初值,因此我在类中又加上了:public:employee()name=0; num=0;age=0;sex=0; wage=0;经此修改后,前面的错误果然没有了,由此我得出对成员数据赋初值是类定义的过程中必不可少的环节。在排序的过程中我也犯了一个致命的错误,那就是将冒泡法和选择法弄混淆了。具体的程序如下:for(int i=0;i4;i+) for(int j=i+1;j4;j+)if(smi.show_wage()smj.show_wage()sellmanager g;g=smi;smi=smj;smj=g;在编写的过程中我将i写成了j,虽然在编译的过程中没有出现什么错误,但是在运行时发现得到的结果却并不是安公子由少到多的排序,显然是不符合要求的,由于没有错误提示,找起错误来相对麻烦了许多,在查找过C+课本上关于选择和排序后我才发现原来是自己在编译的过程中将两种方法混合起来了,弄清楚原因后我很容易就将错误改正了过来,再次编译后发现显示的结果符合要求了。经过这一次的分析和调试我对选择法和冒泡法有了更加深刻了解。在编写程序备份的过程中我也犯了个原则上的错误,那就是在使用ofstream 和backup前未加上应有的头文件,结果在编译时出现了不少错误,其中第一个错误是:C:UsersyangkaiDesktopC+e.cpp(349) : error C2079: backup uses undefined class basic_ofstreamchar,struct std:char_traits 从这里我找到了错误的原因,再加上头文件#include再经过编译后顿时发现原来的错误全都消失不见了。四、程序清单#include #include #include #include using namespace std;int i,j,a,b,sum;class employee /雇员基类protected:string name;int num;int age;char sex;double wage;public:employee()name=0;num=0;age=0;sex=0;wage=0;void set()coutname;coutsex;coutage;int show_num()return num;string show_name()return name;char show_sex()return sex;int show_age()return age;double show_wage()return wage;class technician:public employee /技术员派生类protected:int workhour;public:void set()coutnum;employee:set();coutworkhour;coutendl;wage=100*workhour;technician te4;class manager:public employee /经理派生类public:void set()coutnum;employee:set();coutendl;int manager_wage()return 8000;manager ma4;class seller:public employee /销售员派生类protected:double amount;int belong_to_num;public:void set()coutnum;employee:set();coutamount;coutbelong_to_num;wage=amount*0.04;coutendl;int show_belong_to_num()return belong_to_num;double show_amount()return amount;void tongjishuju()coutsetw(12)numsetw(12)namesetw(12)amountendl;seller se8;class sellmanager:public employee /销售经理派生类protected:int sum_amount;public:void set()coutnum;employee:set();coutendl;for (int i=0;i4;i+)if (num=sei.show_belong_to_num()sum_amount=sum_amount+sei.show_amount();wage=5000+sum_amount*0.005;void tongjishuju()cout职工号为 num 销售经理 name 下属销售员的业绩为:endl;coutendl;coutsetw(12)职工号setw(12)姓名setw(12)销售额 endl;sellmanager sm4;void line()cout-endlendl;void shurute() /输入技术员循环 for(i=0;i4;i+)tei.set();line();void shuruma() /输入经理循环 for(i=0;i4;i+)mai.set();line();void shuruse() /输入销售员循环 for(j=0;j8;j+)sej.set();line();void shurusm() /输入销售经理循环 for(i=0;i4;i+)smi.set();line();void mulu()cout 小型公司工资管理系统 endl; coutendl;cout 请选择您所需的操作 endl; cout 数据输入:1,并按回车键 endl;cout 数据统计:2,并按回车键 endl;cout 数据打印:3,并按回车键 endl;cout 数据备份:4,并按回车键 endl;cout 退出系统:5,并按回车键 endl; coutendl;couta;coutendl;void cijimulu()cout 小型公司工资管理系统 endl; coutendl;cout 请选择您所需的操作 endl; cout技术员数据输入: 1,并按回车键 endl;cout经理数据输入: 2,并按回车键 endl;cout销售员数据输入: 3,并按回车键 endl;cout销售经理数据输入:4,并按回车键 endl;cout返回上一级: 5,并按回车键 endl; coutendl;coutb;coutendl;void biaotou() /统计时的表格结构coutendl; coutsetw(12)职工号setw(12)姓名setw(12)性别setw(12)年龄setw(12)工资endl;void biaozhong()coutendl;void biaowei()coutendl; void tongjishuju()int a,b,sum;for(a=0;a4;a+)sum=0;sma.tongjishuju();for(b=0;b8;b+)if(seb.show_belong_to_num()=sma.show_num()coutendl;seb.tongjishuju();sum=sum+seb.show_amount();coutendl;coutsetw(8)销售额总计: setw(21)sum endl;coutendl;cout销售经理按工资排序为:endl;biaotou();for(int i=0;i4;i+) for(int j=i+1;j4;j+)if(smi.show_wage()smj.show_wage()sellmanager g;g=smi;smi=smj;smj=g;for (int k=0;k4;k+)biaozhong();coutsetw(12)smk.show_num()setw(12)smk.show_name()setw(12)smk.show_sex()setw(12)smk.show_age()setw(12)smk.show_wage()endl;biaowei();void displaying()int k;cout请等待.endlendl;cout职工基本情况一览表如下endlendl;cout技术员endlendl;biaotou();for(k=0;k4;k+)biaozhong();coutsetw(12)tek.show_num()setw(12)tek.show_name()setw(12)tek.show_sex()setw(12)tek.show_age()setw(12)tek.show_wage()endl; biaowei();line();cout经理endlendl;biaotou();for(k=0;k4;k+)biaozhong();coutsetw(12)mak.show_num()setw(12)mak.show_name()setw(12)mak.show_sex()setw(12)mak.show_age()setw(12)mak.manager_wage()endl; biaowei();line();cout销售经理endlendl;biaotou();for(k=0;k4;k+)biaozhong();coutsetw(12)smk.show_num()setw(12)smk.show_name()setw(12)smk.show_sex()setw(12)smk.show_age()setw(12)smk.show_wage()endl; biaowei();line();cout销售员endlendl;coutendl;coutsetw(8)职工号setw(8)姓名setw(8)性别setw(8)年龄setw(8)工资setw(20)所属部门经理endl;for(k=0;k8;k+)coutendl; coutsetw(8)sek.show_num()setw(8)sek.show_name()setw(8)sek.show_sex()setw(8)sek.show_age()setw(8)sek.show_wage()setw(20)sek.show_belong_to_num()endl;coutendlendl; cout-endlendl;void copy()ofstream backup(qt.txt);int k;cout请等待.endlendl;backup职工基本情况一览表如下endlendl;backup技术员endlendl;backupendl; backupsetw(12)职工号setw(12)姓名setw(12)性别setw(12)年龄setw(12)工资endl;for(k=0;k4;k+)backupendl;backupsetw(12)tek.show_num()setw(12)tek.show_name()setw(12)tek.show_sex()setw(12)tek.show_age()setw(12)tek.show_wage()endl; backupendl; backup经理endlendl;backupendl; backupsetw(12)职工号setw(12)姓名setw(12)性别setw(12)年龄setw(12)工资endl;for(k=0;k4;k+)backupendl;backupsetw(12)mak.show_num()setw(12)mak.show_name()setw(12)mak.show_sex()setw(12)mak.show_age()setw(12)mak.manager_wage()endl; backupendl; backup销售经理endlendl;backupendl; backupsetw(12)职工号setw(12)姓名setw(12)性别setw(12)年龄setw(12)工资endl;for(k=0;k4;k+)backupendl;backupsetw(12)smk.show_num()setw(12)smk.show_name()setw(12)smk.show_sex()setw(12)smk.show_age()setw(12)smk.show_wage()endl; backupendl; backup销售员endlendl;backupendl;backupsetw(8)职工号setw(8)姓名setw(8)性别setw(8)年龄setw(8)工资setw(20)所属部门经理endl;for(k=0;k8;k+)backupendl; backupsetw(8)sek.show_num()setw(8)sek.show_name()setw(8)sek.show_sex()setw(8)sek.show_age()setw(8)sek.show_wage()setw(20)sek.show_belong_to_num()endl;backupendlendl; int main()while (a!=5)mulu();line();switch(a)case 1: while (b!=5)cijimulu();line();switch(b)case 1:shurute();continue;case 2:shuruma();continue;case 3:shuruse();continue;case 4:shurusm();continue;continue;case 2:tongjishuju();continue;case 3:displaying();continue; case 4:copy();continue;return 0;27五、测试结果六、总结及心得体会通过对小型公司工资管理系统的C+程序编写,加强了我对C+功能的了解,对象与类之间关系的理解,同时也提高了上机实践能力,自主学习能力,错误分析能力实习前对实习内容进行了半天的构思自以为考虑周全了,实则不然,如老师所言,要全局考虑,而我也正因为编写前考虑不周全,在定义完类以后,很快把输入数据的函数编写出来了,上机操作也很成功。可是到统计部分还有打印和备份部分就开始发现原写的程序有许多地方需要改动,或者增添新的成员或函数,比如统计数据时需要计算销售经理的工资并且排序,这就需要定义新的数组,新的函数来判断哪些销售员属于哪位销售经理,并按其工资从高到低排序。还有打印数据时需要计算各类对象的工资,就得回头重新定义一些成员函数,而且由于成员都是保护类型的,类外不能直接访问,所以需要在类中定义具有返回类中各数据功能的函数。这些都是数据输入时没有考虑到的。所以说,全局统筹规划,有缜密的构思很重要。当然,快速接受新事物的能力也是必备的,因为备份数据在课堂上听的不是很明白,所以就需要我下课后上网百度搜索相关的资料让后再自己学习,现学现用,因此我发现自主学习能力很重要。再者,由于程序编写过程中出现错误是常有的事,那么,分析错误的能力也就需要慢慢提高,因为错误提示都是英文,所以学好英

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

最新文档

评论

0/150

提交评论