还剩27页未读,继续阅读
本资源只提供10页预览,全部文档请下载后查看!喜欢就下载吧,查找使用更方便
文本内容:
仲恺农业工程学院课程设计报告****************************课程面向对象课程设计姓名院(系)专业年级学号指导教师日期仲恺农业工程学院教务处制目录1需求与功能分析12系统框架图23类的设计与分析24非成员函数的设计与分析45特色算法分析46存在的问题及对策87用户手册及测试结果
87.1用户手册
87.2测试结果88心得体会119附程序源代码112系统框架图23类的设计与分析24非成员函数的设计与分析45特色算法分析46存在的问题及对策87用户手册及测试结果
87.1用户手册
87.2测试结果88心得体会119附程序源代码111需求与功能分析在信息技术高速发展的今天,传统的数据统计方式在处理庞大繁杂的信息量时显得力不从心,于是,人们对于运用计算机来辅助和管理工作的需求正在逐步提高随着各个企业业务的逐步扩展,企业的员工人数也在迅速增加,由于管理人员水平有限导致某些员工纪录管理并不完善,特别是繁杂的员工工资管理纪录,不易查询、修改,极易导致错误,而落后的员工管理方法随着社会的日益竞争必将被淘汰由计算机来管理庞大而繁杂的企业员工纪录是非常合适的,不仅查询和修改方便,并且效率高,速度快,完全能够满足现代化企业管理的需要,同时也更利于实现全面办公自动化因此开发一套企业员工工资管理系统软件势在必行企业员工工资管理系统是企业管理系统中的一个重要组成部分,它为企业合理的员工调配与编制,以及有关问题的决策能够提供各种必要的基础数据,是公司管理现代化的一个重要方面利用微机对庞杂而繁锁的员工工资系统实现自动化管理,是计算机公司信息管理系统的重要内容我在陈勇老师指导下开发了《企业员工工资管理系统》《企业员工工资管理系统》旨在为商业人士及在社会团体、机构中负责管理关系的人士提供一个功能全面、使用方便的工资管理系统,以替代传统的手工管理工资纪录,同时利用先进信息技术为用户提供一些更为方便实用的功能本系统实现五种基本功能输入员工工资信息、删除员工工资信息、修改员工工资信息、查找员工工资信息、列出所有员工工资信息所以该工资管理系统可以分为5个模块,分别为输入模块、删除模块、修改模块、查找模块、列表模块,每个模块都有其对应的功能以及其设计
(1)输入模块输入模块的功能是创建存储职工工资信息的存储系统以及添加某职工的工资信息为实现输入的功能,有两个方面的任务定义结构体以及建立链表
(2)删除模块删除模块的功能是删除某职工的工资信息
(3)修改模块修改模块的功能是修改某职工的部分工资信息
(4)查找模块查找模块的功能就是输出指定编号职工的工资信息
(5)列表模块列表模块的功能是输出当月全体职工的工资信息2系统框架图图1系统框架图3类的设计与分析classWorker{protected:Worker_pay*head;//链表的头结点指针public:Worker{head=NULL;}//构造函数voidDisplayWorker_pay*;//输出函数Worker_pay*Findint;//查找函数intListCount;//统计员工人数函数voidAddItemintstringintstringstringstringfloatfloat;//创建链表并链表的插入voidRemoveItemint;//删除函数voidReplaceItemint;//修改函数voidListL;//遍历函数voidSearchint;//查找并输出某个员工信息函数voidReal_wagefloatfloat;//计算函数voidRecordinfointstringintstringstringstringfloatfloatfloatfloat;//存储函数};表1Worker类说明表名称属性说明head数据成员链表头结点指针Worker成员函数缺省的构造函数,缺省值为head=NULLvoidDisplayWorker_pay*成员函数输出函数Worker_pay*Findint成员函数查找函数intListCount成员函数统计员工人数函数voidAddItemint···floatfloat成员函数创建链表并链表的插入voidRemoveItemint成员函数删除函数voidReplaceItemint成员函数修改函数voidListL成员函数遍历函数voidSearchint成员函数查找并输出某个员工信息函数voidReal_wage成员函数计算函数voidRecoreinfoint···floatfloat成员函数存储函数4非成员函数的设计与分析表2非成员函数说明表名称说明intMenu用于显示主菜单charExit用于退出程序voidInputint*num···float*allowance用于输入员工工资信息voidAddNew用于调用成员函数AddItemint···floatfloatReal_wage和Recoreinfoint···floatfloatvoidDoFind用于调用成员函数SearchintvoidDoDelete用于调用成员函数RemoveItemintvoidDoMotify用于调用成员函数ReplaceItemintvoidList用于调用成员函数ListLintmain主函数5特色算法分析Worker类中的成员函数voidAddItemint···floatfloat
(1)功能创建存储职工工资信息的存储系统以及添加某职工的工资信息算法思路先定义一个结构体Worker_pay,通过从表尾插入的方法来建立链表首先要先设立一个头指针(head)来存放链表的首地址,然后,不断用new运算符生成一个新的结点,将这个结点链入已有的链表尾部;如果链表中还没有结点,则这个新结点将是首结点,否则,将新结点的地址赋给原有链表的尾结点的next指针
(2)流程图图2流程图
(3)代码voidWorker::AddItemintnum1stringname1intage1stringsex1stringdepartment1stringtitle1floatwage1floatallowance1{if!head{head=newWorker_pay;head-num=num1;head-name=name1;head-age=age1;head-sex=sex1;head-department=department1;head-title=title1;head-wage=wage1;head-allowance=allowance1;head-next=NULL;return;}Worker_pay*t=head;whilett-num!=num1t=t-next;ift{cout操作失败;员工编号为num1的信息已经存在!!!endl;return;}Worker_pay*p=head;whilep-nextp=p-next;Worker_pay*p1=newWorker_pay;p1-num=num1;p1-name=name1;p1-age=age1;p1-sex=sex1;p1-department=department1;p1-title=title1;p1-wage=wage1;p1-allowance=allowance1;p1-next=NULL;p-next=p1;return;}6存在的问题及对策
(1)设计初期,先完成初步构思,写出主函数然后对主函数所涉及的各个模块进行编程,将各个模块利用指针和链表联系起来在环境中进行调试,应一边编译,一边调试,并且要一个模块一个模块的调试直至此模块完全没有错误时,在进入下一模块的调试不能直接输入全部的代码一次性调,这样错误会很多,并且不易找出和修改在完成程序的编译链接后,要用多组数据进行审查,确保做到系统无误设计过程中,不应忽视环境提示的警告,有时程序运行不正确与警告也有很大的关系这次设计中遇到很多问题都是提示类型不匹配,这时就要认真检查前面的代码,及时改正并且认真仔细,杜绝此类错再次发生编写代码时应该少用全局变量,全局变量在编写试看似定义次数少,很方便但全局变量出错几率较大,且不易修改,每次修改时都要全面考虑,所以应避免用到程序调试中碰到的错误可以使自己学到知识养成良好的编程习惯,可以节省很多时间,避免很多不必要的错误
(2)在编辑完整个程序后,进行调试阶段总是会数显head无定义解决办法再类的定义是忘记声明指针Worker_pay*head;7用户手册及测试结果
7.1用户手册运行程序时,界面刚开始出现一个主菜单及提示信息,用户通过在键盘上输入来选择某个功能当用户选择了某个功能,系统将跳转到所选择的功能界面,用户将可以根据提示信息来使用该功能,当用户通过键盘输入编号为-1时,系统将返回主界面
7.2测试结果图3系统主界面图4输入员工信息测试图图5删除员工信息测试图图6修改员工信息测试图图7查找员工信息测试图图8输出全体员工信息测试图图9退出系统测试图8心得体会经过两周的C++课程设计,我对C++语言设计有了一个更深、更全面的了解,尤其体会到了C++面向对象操作对简化程序的重要作用下面是我的几点体会
①刚拿到课题时,我一脸的茫然,看到如此庞大的工程,不知如何下手这个工资管理系统中职工子信息竟然包含15条,以前从来没有遇到过如此多的变量和同学讨论很久好,我发现其实可以化繁为简的,信息中15条不一定全都要,因为其中本身就有重复的,例如津贴和补贴并且可以有一个pay的数组来处理数据所以做任何事情都必须要开动脑筋,积极思考,有时还要学会化繁为简
②在编程时条理清晰是至关重要的主函数,函数,成员函数之间的层次关系,调用关系一定要有一个全面的把握,尤其要体会类的封装性另外很重要的一点就是一定要对链表的五种操作熟练的掌握
③在编译,链接,调试的过程中一定要有耐心因为一个程序中会有很多小的错误,甚至有的问题要几个小时才能解决遇到问题,一定要全面分析,有时候还要向同学请教总得来说,编程时极需要耐心的总之,C++课程设计为我们提供了一个综合应用所学知识,解决实际问题的平台,增强了我们实践动手的能力和工程实践能力,并且锻炼和培养了我们的自学能力,让我们对C++有了一个更全面的了解9附程序源代码/*****************************************************/#includeiostream#includestring#includefstream#includeiomanipusingnamespacestd;/*****************************************************//*定义一个员工信息的结构体Worker_pay*/structWorker_pay{intnum;//员工编号stringname;//员工姓名intage;//年龄stringsex;//性别stringdepartment;//部门stringtitle;//职务floatwage;//工资floatallowance;//津贴floattax;//个人所得税floatreal_wage;//实发数Worker_pay*next;//链表结点的指针域};/*****************************************************//*定义一个员工类Worker*/classWorker{protected:Worker_pay*head;//链表的头结点指针public:Worker{head=NULL;}//构造函数voidDisplayWorker_pay*;//输出函数Worker_pay*Findint;//查找函数intListCount;//统计员工人数函数voidAddItemintstringintstringstringstringfloatfloat;//创建链表并链表的插入voidRemoveItemint;//删除函数voidReplaceItemint;//修改函数voidListL;//遍历函数voidSearchint;//查找并输出某个员工信息函数voidReal_wagefloatfloat;//计算函数voidRecordinfointstringintstringstringstringfloatfloatfloatfloat;//存储函数};/*****************************************************///功能用于统计员工人数intWorker::ListCount{if!headreturn0;Worker_pay*p=head;intn=0;whilep{n++;p=p-next;}returnn;}/*****************************************************///功能在链表中查找员工的编号Worker_pay*Worker::Findintnum{ifListCount==0{cout列表为空,请先输入数据!!!endl;returnNULL;}Worker_pay*p=head;whilep{ifp-num==numbreak;p=p-next;}if!p{cout错误,找不到该信息!!!endl;returnNULL;}returnp;}/*****************************************************///功能创建链表及链表的插入voidWorker::AddItemintnum1stringname1intage1stringsex1stringdepartment1stringtitle1floatwage1floatallowance1{if!head{head=newWorker_pay;head-num=num1;head-name=name1;head-age=age1;head-sex=sex1;head-department=department1;head-title=title1;head-wage=wage1;head-allowance=allowance1;head-next=NULL;return;}Worker_pay*t=head;whilett-num!=num1t=t-next;ift{cout操作失败;员工编号为num1的信息已经存在!!!endl;return;}Worker_pay*p=head;whilep-nextp=p-next;Worker_pay*p1=newWorker_pay;p1-num=num1;p1-name=name1;p1-age=age1;p1-sex=sex1;p1-department=department1;p1-title=title1;p1-wage=wage1;p1-allowance=allowance1;p1-next=NULL;p-next=p1;return;}/*****************************************************///功能从链表中删除一个结点voidWorker::RemoveItemintnum{Worker_pay*t=Findnum;if!treturn;Worker_pay*p=head;ifhead=t{head=head-next;deletep;cout成功删除员工编号为num的信息!endl;return;}whilep-next!=tp=p-next;Worker_pay*p1=p-next;p-next=p1-next;deletep1;cout成功删除员工编号为num的信息!endl;return;}/*****************************************************///功能修改员工信息voidWorker::ReplaceItemintnum{Worker_pay*p=Findnum;if!preturn;cout请重新输入相应信息endl;cout员工编号:;cinp-num;cout员工姓名:;cinp-name;cout年龄:;cinp-age;cout性别:;cinp-sex;cout部门:;cinp-department;cout职务:;cinp-title;cout工资元:;cinp-wage;cout津贴元:;cinp-allowance;return;}/*****************************************************///功能输出员工信息voidWorker::DisplayWorker_pay*p{coutp-numsetw8p-namesetw8p-agesetw8p-sexsetw8p-departmentsetw8p-titlesetw8p-wagesetw8p-allowancesetw8p-taxsetw8p-real_wageendl;return;}/*****************************************************///功能遍历链表voidWorker::ListL{floatsum=0;floataver=0;intn=0;ifListCount==0{cout当前列表为空,请先输入数据!endl;return;}Worker_pay*p=head;cout**********************************员工信息**************************************endl;cout共有ListCount个员工信息endl;cout员工编号员工姓名年龄性别部门职务工资津贴个税实发数endl;whilep{Displayp;n++;sum+=p-wage;p=p-next;}aver=sum/n;cout员工平均薪水:averendl;return;}/*****************************************************///功能查找并输出指定员工信息voidWorker::Searchintnum{coutSearch......endl;Worker_pay*p=Findnum;ifp{cout员工编号为num的员工工资信息:endl;cout员工编号员工姓名年龄性别部门职务工资津贴个税实发数endl;Displayp;}coutendl;return;}/*****************************************************///功能程序内部函数计算的信息例如个人所得税,实发数voidWorker::Real_wagefloattaxfloatreal_wage{ifListCount==0{cout当前列表为空,请先输入数据!endl;return;}Worker_pay*p=head;whilep{ifp-wage=2000p-tax=0;elseifp-wage2000p-wage=2500p-tax=p-wage*
0.05;elseifp-wage2500p-wage=4000p-tax=p-wage*
0.1-25;elseifp-wage4000p-wage=7000p-tax=p-wage*
0.15-125;elseifp-wage7000p-wage=22000p-tax=p-wage*
0.2-375;elseifp-wage22000p-wage=42000p-tax=p-wage*
0.25-1375;elseifp-wage42000p-wage=62000p-tax=p-wage*
0.3-3375;elseifp-wage62000p-wage=82000p-tax=p-wage*
0.35-6375;elseifp-wage82000p-wage=102000p-tax=p-wage*
0.4-10375;elsep-tax=p-wage*
0.45-15375;p-real_wage=p-wage+p-allowance-p-tax;p=p-next;}return;}/*****************************************************///功能存储员工信息voidWorker::Recordinfointnum1stringname1intage1stringsex1stringdepartment1stringtitle1floatwage1floatallowance1floattax1floatreal_wage1{ofstreamfile1info
1.txtios::app;file1员工编号:num1员工姓名:name1年龄:age1性别:sex1部门:department1职务:title1工资元:wage1津贴元:allowance1个人所得税元:tax1实发数元:real_wage1endl;file
1.close;}/*****************************************************//*定义一个对象Worker1*/WorkerWorker1;/*****************************************************//*主菜单函数*/intMenu{cout\t\t~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\tendl;cout\t\t~企业员工工资管理系统\t~endl;cout\t\t~*******主菜单*******\t~endl;intn=1select=-1;cout\t\t~n++.输入员工信息\t\t~endl;cout\t\t~n++.删除指定员工编号信息\t\t~endl;cout\t\t~n++.修改指定员工编号信息\t\t~endl;cout\t\t~n++.查找指定员工编号信息\t\t~endl;cout\t\t~n++.输出全体员工信息\t\t\t~endl;cout\t\t~
0.退出\t\t\t\t~endl;cout\t\t~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\t\tendl;cout[请选择0—5输入相应数字]:;cinselect;returnselect;}/*****************************************************///功能退出程序charExit{chars;cout确定要退出程序吗?[Y/N]:;cins;returns;}/*****************************************************///功能输入员工信息voidInputint*numstring*nameint*agestring*sexstring*departmentstring*titlefloat*wagefloat*allowance{cout现在输入员工信息!endl;cout员工编号:;cin*num;if*num==-1return;cout员工姓名:;cin*name;cout年龄:;cin*age;cout性别:;cin*sex;cout部门:;cin*department;cout职务:;cin*title;cout工资元:;cin*wage;cout津贴元:;cin*allowance;return;}/*****************************************************///功能把员工信息插入到链表中voidAddNew{intnum=0;stringname;intage=0;stringsex;stringdepartment;stringtitle;floatwage=0;floatallowance=0;floattax=0;floatreal_wage=0;cout当输入的员工编号为-1是表示结束输入endl;Inputnumnameagesexdepartmenttitlewageallowance;whilenum!=-1{Worker
1.AddItemnumnameagesexdepartmenttitlewageallowance;Worker
1.Real_wagetaxreal_wage;Worker
1.Recordinfonumnameagesexdepartmenttitlewageallowancetaxreal_wage;Inputnumnameagesexdepartmenttitlewageallowance;}cout员工工资信息已成功存储!!!endl;return;}/*****************************************************///功能查找指定员工编号信息voidDoFind{intnum;cout当输入的员工编号为-1是表示结束输入endl;do{cout请输入要查找的员工的编号:;cinnum;ifnum==-1continue;Worker
1.Searchnum;}whilenum!=-1;return;}/*****************************************************///功能删除指定员工编号信息voidDoDelete{cout当输入的员工编号为-1是表示结束输入endl;intnum;do{cout请输入要删除的员工的编号:;cinnum;ifnum==-1continue;Worker
1.RemoveItemnum;cout已成功删除该员工信息!!!endl;}whilenum!=-1;return;}/*****************************************************///功能修改指定员工编号信息voidDoMotify{cout当输入的员工编号为-1是表示结束输入endl;intnum;do{cout请输入要修改的员工的编号;cinnum;ifnum==-1continue;Worker
1.ReplaceItemnum;}whilenum!=-1;cout已成功修改该员工信息!!!endl;return;}/*****************************************************///功能输出全体员工信息voidList{Worker
1.ListL;}/*****************************************************//*主函数*/intmain{intselect;chars;while1{select=Menu;switchselect{case0:s=Exit;ifs==y||s==Yreturn0;break;case1:AddNew;break;case2:DoDelete;break;case3:DoMotify;break;case4:DoFind;break;case5:List;break;default:cout无效输入!endl;}}return0;}参考文献
[1]陈天华编.面向对象程序设计与VisualC++
6.0教程[M].北京:清华大学出版社2006主菜单输入员工工资信息删除指定员工工资信息修改指定员工工资信息查找指定员工工资信息输出全体员工工资信息退出StartIF!head员工工资信息赋给headReturn*t=headWhilett-num!=num1t=t-nextIFt操作失败Return*p-headWhilep-nextp-next员工工资信息赋给pReturnEnd。