




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、中南大学本科生课程设计(实践)任务书、设计报告(C+应用基础课程设计)题 目企业职工工资管理系统学生学号学生姓名学 院物理学院专业班级指导老师计算机基础教学实验中心2010年07月09日企业职工工资管理系统摘要:在 VC+环境下编写一个基于控制台方式(Win32 Con sole Application )的工资管理系统,以实现简单地处理一个月内某企业职工工 资信息。关键词:工资管理,基本工资,个人所得税。1.企业工资管理系统开发设计思想对于一个管理系统而言,主函数,函数以及成员函数是其重要组成部分。系统开发 设计也是从该三方面入手,下面加以详细阐述。(1)主函数的设计在做一个系统开发前,一定
2、要明确系统的功能以及功能实现时的输出(屏幕显示)。编写主函数的主要任务就是确定调用函数以及控制屏幕显示。确定调用的函数 根据要求,该系统至少应该实现五种基本功能:输出工作信息,删除工资信息,修 改工资信息,查找工资信息,列出所有信息。实现以上任何一种功能都必须要调用一个 函数,根据标识符的定义规则,依次命名为 AddNew(),DoDelete(),DoMotify(),DoFind(),List().屏幕显示 一个系统要想处理信息,首先必须要输出菜单及提示信息,通过用户在键盘上的输 入来选择某个功能。本系统的屏幕显示如上。为实现该屏幕显示,输出语句完全可以放在 main() 函数中,但为了使
3、主函数清晰 明了,我设计了一个菜单函数 Main() 供其调用。(2) 函数的设计编写函数的目的就是编写一个能实现某种功能的函数供主函数调用。根据C+面向对象的特点,函数也可以调用类中的成员函数。这样主函数,函数以及成员函数之间的 层次分明,关系就清晰明了,不会有冗长的感觉。函数设计的主要任务是确定调用的成 员函数以及屏幕显示。 确定调用的成员函数。不同的函数调用的成员函数是不尽相同的,基本上每个函数都有一个对应的成员函数,例女口 AddNew()与 Addltem(),DoDelete() 与 Removeltem(),DoFind()与 Search (),DoMotify() 与 Rep
4、lace(),List() 与 Worker.List() 对应,这些成员函数都是共有函 数,并且只被其对应函数唯一调用一次。当然,每个函数不可能只调用一个成员函数, 例如AddNew()还调用了另外两个函数In put ()和Actualpay()。 屏幕显示编写函数也需要控制输出以及功能间的转换,从而每一个函数都需要有一个循环来控制其结束。结束的条件都是“当输入的编号为 -1 时结束”,循环语句有 while 也有 dowhile,例如 DoDelete()和 DoFind()用的是 dowhile, AddNew()用到的是 while 语句。(3)成员函数的设计。 成员函数是系统的灵魂
5、,因为所有的处理过程的细节都在成员函数中完成的。编写 成员函数实际上就是一个算法的实现。成员函数的设计包括两方面内容:成员函数算法的实现和成员函数过程的实现。成员函数算法的实现工资管理系统不能单凭数组来处理数据,因为企业职工数是不确定的,并且数组在 删除和查找某条信息是相当繁琐。所以该系统需要一个全新的数据处理方式一一链表。 链表是最简单也是最常用的一种动态数据结构,它是对动态获得的内存进行组织的一种 结构。它不需要实现定义固定的长度,灵活性更强。链表是算法的关键。在添加新的数据时,可以表头插入也可以表尾插入,这两种插 入方法决定了其他成员函数数据的处理。本系统中采取的是表尾插入的方法。在删除
6、某 信息时需要判断数据是在表头,表中还是表尾,如果删除的是在表中,则需要将删除的 前后链表连接起来。总之,本系统大量运用了链表的5种基本操作:建立链表、链表的插入、删除、输入和查找。成员函数过程的实现算法确定后还需要控制屏幕显示、条件的判断以及调用其它成员函数。成员函数之 间是可以相互调用的,例如成员函数 List()就调用了成员函数ListCount()来统计当前 链表信息的总数,同时还调用了成员函数Print ()来输出Worker_pay()的信息。整个过程中还有一个重要的指针,Worker_pay *Find(), 它被Search(),Removeltem()以及 Addltem()
7、所调用。其次成员函数中大量运用到了程序控制结构。例如,Addltem()中用if来判断是否是链表的表头,List()中用到了 while语句来实现循环输出。最后屏幕上 则需要显示一些完成了某种功能的标志,例如“成功删除编号为xx的信息”,“成功修改编号为xx的信息”等。(3)系统结构框架系统的结构框架主要是系统的流程图以及函数之间的调用关系,该图能描述系统清 晰准确的表现出系统的功能实现。职工工资管理系统结构框架图输入选项2企业职工工资管理系统厶冃添加职站资0删除职血资蚪输出指定职工工资信息DoMotify()输出全体职工工资信MTAddNew()List()该工资管理系统可以分为 5 个模块
8、,每个模块都有其对应的功能以及其设计。下面对 系统的功能和模块的实现进行简要分析。(1)输入模块 输入模块的功能是创建存储职工工资信息的存储系统以及添加某职工的工资信息。其 中的信息包括职工编号,基本工资,津贴,房租,交通费以及银行储蓄。为实现输入的功 能,有两个方面的任务:定义结构体以及建立链表。定义结构体结构体的名称为 Worker_pay,其中包含的信息有职工编号(num),基本工资 (payO),津贴(pay1),房租(pay2),交通费(pay3),储蓄(pay4)以及个人所得税 (tax), 应扣数( deduct) , 实发数 (actualpay) 。定义一个 pay 的数组时
9、为了简化变量的定 义,使程序更有条理。建立链表通过从表尾插入的方法来建立链表,首先要先设立一个头指针( head)来存放链表的 首地址。然后,不断用 new 运算符生成一个新的起点,将这个起点链入已有的链表尾部; 如果链表中还没有结点,则这个新结点将是首结点,否则,将新结点的地址赋给原有链表 的尾结点的 next 指针。(2)删除模块 删除模块的功能是删除某职工的工资信息。当然,信息包括所有输入的信息,以及程 序内部函数计算的信息例如个人所得税,实发数。从一个链表中删去一个结点,首先从表头开始,找到被删结点后,只要改变链接关系 即可,使被删结点的前去结点的指针域指向被删结点的后继结点。如果删去
10、的结点是首结 点,则将第二个结点的地址作为新的链表的首地址返回;如果删去的结点是链尾,则将被 删结点的前驱作为新的链尾。(3)修改模块修改模块的功能是修改某职工的部分工资信息。 要修改某职工的信息首先必须从表头开始搜寻,当找到指定的编号是,重新对其赋值 即可。(4)查找模块 查找模块的功能就是输出指定编号职工的工资信息。 查找链表中的信息时比较简单的,在上面的模块中也用到了,主要是注意查找叶必须从表头开始。(5)列表模块 列表模块的功能是输出当月全体职工的工资信息。 列表模块就是依次输出链表中各结点的数据。首先要知道链表头结点的地址,也就是head的值,然后设一个指针变量p,先指向第一个结点,
11、输出p所指结点的数据与的值,然 后使 p 后移一个结点,再输出其数据与的值;依链表顺序而行,依次输出相应结点数据域 的值,直到链表的尾结点。(5)调试过程中遇到的主要问题及解决办法 设计初期,先完成初步构思,写出主函数。然后对主函数所涉及的各个模块进行编 程,将各个模块利用指针和链表联系起来。在环境中进行调试,应一边编译,一边调试, 并且要一个模块一个模块的调试。直至此模块完全没有错误时,在进入下一模块的调试。 不能直接输入全部的代码一次性调,这样错误会很多,并且不易找出和修改。在完成程序 的编译链接后,要用多组数据进行审查,确保做到系统无误。设计过程中,不应忽视环境提示的警告,有时程序运行不
12、正确与警告也有很大的关 系。这次设计中遇到很多问题都是提示类型不匹配,这时就要认真检查前面的代码,及时 改正并且认真仔细,杜绝此类错再次发生。编写代码时应该少用全局变量,全局变量在编写试看似定义次数少,很方便。但全局 变量出错几率较大,且不易修改,每次修改时都要全面考虑,所以应避免用到。程序调试中碰到的错误可以使自己学到知识。养成良好的编程习惯,可以节省很多时 间,避免很多不必要的错误。 在编辑完整个程序后,进行调试阶段总是会数显head无定义。解决办法:再类的定义是忘记声明指针 Worker_pay *head;。3 总结经过两周的C+课程实践,我对 C+语言设计有了一个更深,更全面的了解,
13、尤其体 会到了 C+面向对象操作对简化程序的重要作用。下面是我的几点体会: 刚拿到课题时,我一脸的茫然,看到如此庞大的工程,不知如何下手。这个工资管 理系统中职工子信息竟然包含 15 条,以前从来没有遇到过如此多的变量。和同学讨论很久 好,我发现其实可以化繁为简的,信息中 15 条不一定全都要,因为其中本身就有重复的, 例如津贴和补贴。并且可以有一个 pay 的数组来处理数据。所以做任何事情都必须要开动 脑筋,积极思考,有时还要学会化繁为简。 在编程时条理清晰是至关重要的。主函数,函数,成员函数之间的层次关系,调用 关系一定要有一个全面的把握,尤其要体会类的封装性。另外很重要的一点就是一定要对
14、 链表的五种操作熟练的掌握。 在编译,链接,调试的过程中一定要有耐心。因为一个程序中会有很多小的错误, 甚至有的问题要几个小时才能解决。遇到问题,一定要全面分析,有时候还要向同学请 教。总得来说,编程时极需要耐心的。总之,C+课程设计实践为我们提供了一个综合运用所学知识,解决实际问题的平 台,增强了我们实践动手的能力和工程实践能力,并且锻炼和培养了我们的自学能力,让 我们对C+有了一个更全面的了解。附源代码:#include #include using namespace std;struct Worker_payint num;float pay5,basepay,tax,deduct,A
15、ctualpay;Worker_pay *next;class Workerprivate :Worker_pay *head; void Print(Worker_pay *);Worker_pay *Find( int );public :Worker()head=NULL;int ListCount();void AddItem( int num, float pay5);void RemoveItem( int );void Replace( int );void List();void Search( int );void Actualpay();int Worker:ListCou
16、nt ()if (!head) return 0;Worker_pay *p=head;int n=0;while (p)n+;p=p-next; return n;void Worker:AddItem ( int num, float pay5)if (!head)head=newWorker_pay;for ( int i=0;ipayi=payi;head-num=num; head-next=NULL; return ;Worker_pay *t=head;while (t&t-num!=num) t=t-next;if (t)coutvv操作失败;职工编号为vnumnext ) p
17、=p-next;Worker_pay *p1= newWorker_pay;p1-num=num;for (int i=0;iv5;i+)p1-payi=payi;p1-next=NULL;p-next=p1;return ;void Worker:RemoveItem( int num)Worker_pay *t=Find(num);if (!t) return ;Worker_pay *p=head;if (head=t) head=head-next; delete p;coutvv成功删除职工编号为 vvnumv的信息! vendlvnext!=t)p=p-next;Worker_pa
18、y *p1=p-next;p-next=p1-next;delete p1;cout 成功删除职工编号为 numv的信息! endlendl;return ;void Worker:Replace( int num)Worker_pay *p=Find(num);if (!p) return ;cout 请重新输入相应信息 endl;cout 职工编号基本工资(元)津贴房租交通费银行储蓄 p-nump-pay0p-pay1p-pay2p-pay3p-pay4;return ;void Worker:Print(Worker_pay *p)cout.precision(8);pay3coutnu
19、m pay0 pay1 pay2 pay4 basepay tax deduct Actualpayendl;return ;void Worker:List()if (ListCount=0)cout 当前列表为空,请先输入数据 ! endl; return ;Worker_pay *p=head;coutvv 共有信息vvListCount()vv 个endl;endl;endl;coutnext;coutendl;return ;void Worker:Search ( int num)cout Search endl;Worker_pay *p=Find(num);if (p)cout
20、 职工编号基本工资(元)津贴房租交通费银行银行储蓄应发数个人所得税应扣数实发数 Print(p); coutendl;Worker_pay *Worker:Find( int num)if (ListCount()=0)cout 当前列表为空,请先输入数据 ! num=num) break ;p=p-next;if (!p)cout 错误:找不到该信息! n ;return NULL;return p;void Worker:Actualpay ()if (ListCount()=0)cout 当前列表为空,请先输入数据 ! pay0tax=0;else if (p-pay0tax=(p-pa
21、y0-800)*0.05; else if (p-pay0tax=60+(p-pay0-2000)*0.1;else p-tax=360+(p-pay0-5000)*0.2; p-basepay=p-pay0+p-pay1; p-deduct=p-tax+p-pay2+p-pay3; p-Actualpay=p-pay0+p-pay1-p-tax-p-pay2-p-pay3; p=p-next; return ;Worker Worker;int Menu()cout n* 主菜单 * endlendl;int n=1,select=-1;coutn+ . 输入职工工资信息 endlendl;
22、 coutn+ . 删除指定职工的工资信息 endlendl;coutn+ . 修改指定职工编号的工资信息 endlendl; coutn+ . 查找指定职工编号的工资信息 endlendl;coutn+ . 输出全体职工的工资信息 endlendl; cout 0. 退出 endlendl;coutselect;return select;char Exit()char s;couts;return s;void Input( int *num, float pay5)cout 请输入 t 职工编号基本工资(元)津贴房租交通费银行储蓄 *num;if (*num=-1) return ; cinpay0pay1pay2pay3pay4; return ;void AddNew()int num=0;float pay5=0,0,0,0,0;coutendl 当输入的编号为 -1是表示结束输入 endl;Input(&num,pay);while (num!=-1)Worker.AddItem(num,pay);Worker.Actualpay()
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 非专业的试题及答案
- 主管专业知识试题及答案
- 水暖专业试题及答案解析
- 中职机电专业试题及答案
- 拳击专业试题及答案大全
- 史专业考研试题及答案
- 水利专业基础试题及答案
- 经济专业试题及答案
- 水工专业试题及答案
- 第二单元 成长的时空 达标测试卷(含答案)统编版道德与法治七年级上册
- 掘进安全培训课件
- 《中国儿童幽门螺杆菌感染诊治专家共识(2022)》解读
- 第2课《中国人首次进入自己的空间站》练习题2025-2026学年统编版语文八年级上册
- 山西单招考试题库及答案
- n4考试题真题及答案
- 医保网络安全培训
- 水电碳足迹评估方法-洞察及研究
- 《白雪公主》格林童话课件
- 电梯公司维保人员日常管理制度
- 舒曼教学课件
- 山东省烟台市芝罘区(五四制)2023-2024学年八年级下学期语文期末试卷(含答案)
评论
0/150
提交评论