《2022年教师工资管理系统王晋瑞张大漠.docx》由会员分享,可在线阅读,更多相关《2022年教师工资管理系统王晋瑞张大漠.docx(30页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、精品学习资源中南高校本科生课程设计 实践任务书、设计报告(C+ 应用基础课程设计)题目工资治理系统同学学号同学姓名 指学导老师院专业班级指导老师运算机基础教案试验中心2021 年 09 月 08 日欢迎下载精品学习资源老师工资治理系统摘要:每个老师的信息为:老师号、姓名、性别、单位名称、家庭住址、联系电话、基本工资、津贴、生活补贴、应发工资、电话费、水电费、房租、所得税、卫生费、公积金、合计扣款、实发工资;注:应发工资 =基本工资 +津贴+生活补贴;合计扣款 =电话费+水电费 +房租+所得税+卫生费 +公积金;实发工资 =应发工资 合计扣款;具体实现如下功能:A 、老师信息处理(1) 输入老师
2、信息(2) 插入(修改)老师信息:(3) 删除老师信息:(4) 浏览老师信息:提示:具体功能及操作参考题 1;B、老师数据处理:(1) 按老师号录入老师基本工资、津贴、生活补贴、电话费、水电费、房租、所得税、卫生费、公积金等基本数据;(2) 老师实发工资、应发工资、合计扣款运算;提示:运算规章如题目;(3) 老师数据治理提示:输入老师号,读出并显示该老师信息,输入新数据,将改后信息写入文件(4) 老师数据查询:欢迎下载精品学习资源提示:输入老师号或其他信息,即读出全部数据信息,并显示出来;(5) 老师综合信息输出提示:输出老师信息到屏幕;1. 老师工资治理系统开发设计思想对于一个治理系统而言,
3、主函数,函数以及成员函数是其重要组成部分;系统开发设计也是从该三方面入手,下面加以具体阐述;( 1)主函数的设计在做一个系统开发前,肯定要明确系统的功能以及功能实现时的输出(屏幕显示);编写主函数的主要任务就是确定调用函数以及掌握屏幕显示;确定调用的函数依据要求,该系统至少应当实现五种基本功能:输出工作信息,删除工资信息,修改工资信息,查找工资信息,列出全部信息;实现以上任何一种功能都必需要调用一个函数,依据标识符的定义规章,依次命名为AddNew,DoDelete,DoMotify,DoFind,List.屏幕显示欢迎下载精品学习资源一个系统要想处理信息,第一必需要输出菜单及提示信息,通过用
4、户在键盘上的输入来挑选某个功能;本系统的屏幕显示如上;为实现该屏幕显示,输出语句完全可以放在main 函数中,但为了使主函数清楚明白,我设计了一个菜单函数Main 供其调用;2 函数的设计编写函数的目的就是编写一个能实现某种功能的函数供主函数调用;依据 C+面对对象的特点,函数也可以调用类中的成员函数;这样主函数,函数以及成员函数之间的层次分明,关系就清楚明白,不会有冗长的感觉;函数设计的主要任务是确定调用的成员函数以及屏幕显示;确定调用的成员函数;不同的函数调用的成员函数是不尽相同的,基本上每个函数都有一个对 应 的 成 员 函 数 , 例 如 AddNew 与 AddItem,DoDele
5、te 与RemoveItem,DoFind 与 Search() ,DoMotify 与 Replace,List 与Worker.List 对应,这些成员函数都是共有函数,并且只被其对应函数唯一调用一次;当然,每个函数不行能只调用一个成员函数,例如 AddNew仍调用了另外两个函数 Input ()和 Actualpay ;欢迎下载精品学习资源屏幕显示编写函数也需要掌握输出以及功能间的转换,从而每一个函数都需要有一个循环来掌握其终止;终止的条件都是“当输入的编号为 0 时终止”,循环语句有 while 也有 dowhile ,例如 DoDelete 和 DoFind 用的是 dowhile,
6、 AddNew 用到的是 while 语句;( 3)成员函数的设计;成员函数是系统的灵魂,由于全部的处理过程的细节都在成员函数中完成的;编写成员函数实际上就是一个算法的实现;成员函数的设计包括两方面内容:成员函数算法的实现和成员函数过程的实现;成员函数算法的实现工资治理系统不能单凭数组来处理数据,由于企业老师数是不确定的,并且数组在删除和查找某条信息是相当繁琐;所以该系统需要一个全新的数据处理方式链表;链表是最简洁也是最常用的一种动态数据结构,它是对动态获得的内存进行组织的一种结构;它不需要实现定义固定的长度,敏捷性更强;链表是算法的关键;在添加新的数据时,可以表头插入也可以表尾插入,这两种插
7、入方法打算了其他成员函数数据的处理;本系统中实行的是表尾插入的方法;在删除某信息时需要判定数据是在表头,表中仍是表 尾,假如删除的是在表中,就需要将删除的前后链表连接起来;总之,本系统大量运用了链表的5 种基本操作:建立链表、链表的插入、删除、输入和查找;成员函数过程的实现算法确定后仍需要掌握屏幕显示、条件的判定以及调用其它成员函数;成员函数之间是可以相互调用的,例如成员函数List就调用了成员函数 ListCount来统计当前链表信息的总数,同时仍调用了成员函数 Print ()来输出Worker_pay 的信息;整个过程中仍有一个重要的指针, Worker_pay *Find,它被 Sea
8、rch , RemoveItem以及 AddItem 所调用;其次成员函数中大量运用到了程序掌握结构;例如,AddItem 中用欢迎下载精品学习资源if来判定是否是链表的表头, List中用到了 while语句来实现循环输出;最终屏幕上就需要显示一些完成了某种功能的标志,例如“胜利删除编号为 xx 的信息”,“胜利修改编号为 xx 的信息”等;(3)系统结构框架系统的结构框架主要是系统的流程图以及函数之间的调用关系,该图能描述系统清楚精确的表现出系统的功能实现;老师工资治理系统输出主菜单输入选项AddNewDoMotifyListDoDeleteDoFindAddItemReplace.Lis
9、tRemovrItemSearch退出老师工资治理系统结构框架图添删修输输加除改出出教教教指全师师师定体工工工教教资资资师师信信信工工息息息资信息资信息欢迎下载精品学习资源2 老师工资治理系统功能及系统设计介绍 终止该工资治理系统可以分为 5 个模块,每个模块都有其对应的功能以及其设计;下面对系统的功能和模块的实现进行简要分析;( 1)输入模块输入模块的功能是创建储备老师工资信息的储备系统以及添加某老师的工资信息;其中的信息包括老师编号,基本工资,津贴,房租,交通费以及银行储蓄;为实现输入的功能,有两个方面的任务:定义结构体以及建立链表;定义结构体结构体的名称为 Worker_pay, 其中包
10、含的信息有老师编号( num),基本工资pay0 ,津贴 pay1 ,房租 pay2 ,交通费 pay3, 储蓄pay4 以及个人所得税 tax, 应扣数( deduct ), 实发数 actualpay ;定义一个 pay 的数组时为了简化变量的定义,使程序更有条理;建立链表通过从表尾插入的方法来建立链表,第一要先设立一个头指针(head)来存放链表的首地址;然后,不断用new 运算符生成一个新的起点,将这个起点链入已有的链表尾部;假如链表中仍没有结点,就这个新结点将是首结点,否就,将新结点的地址赋给原有链表的尾结点的next 指针;( 2)删除模块删除模块的功能是删除某老师的工资信息;当然
11、,信息包括全部输入的信息,以及程序内部函数运算的信息例如个人所得税,实发数;从一个链表中删去一个结点,第一从表头开头,找到被删结点后,只要转变链接关系即可,使被删结点的前去结点的指针域指向被删结点的后继结点;假如删去的结点是首结点,就将其次个结点的地址作为新的链表的首地址返 回;假如删去的结点是链尾,就将被删结点的前驱作为新的链尾;( 3)修改模块修改模块的功能是修改某老师的部分工资信息;要修改某老师的信息第一必需从表头开头搜寻,当找到指定的编号是,重新对其赋值即可;( 4)查找模块查找模块的功能就是输出指定编号老师的工资信息;查找链表中的信息时比较简洁的,在上面的模块中也用到了,主要是留意查
12、找叶必需从表头开头;( 5)列表模块欢迎下载精品学习资源列表模块的功能是输出当月全体老师的工资信息;列表模块就是依次输出链表中各结点的数据;第一要知道链表头结点的地址,也就是 head 的值,然后设一个指针变量 p,先指向第一个结点,输出 p 所指结点的数据与的值,然后使p 后移一个结点,再输出其数据与的值;依链表次序而行,依次输出相应结点数据域的值,直到链表的尾结点;( 5)调试过程中遇到的主要问题及解决方法设计初期,先完成初步构思,写出主函数;然后对主函数所涉及的各个模块进行编程,将各个模块利用指针和链表联系起来;在环境中进行调试,应一边编译,一边调试,并且要一个模块一个模块的调试;直至此
13、模块完全没有错误时,在进入下一模块的调试;不能直接输入全部的代码一次性调,这样错误会许多,并且不易找出和修改;在完成程序的编译链接后,要用多组数据进行审查,确保做到系统无误;设计过程中,不应忽视环境提示的警告,有时程序运行不正确与警告也有很大的关系;这次设计中遇到许多问题都是提示类型不匹配,这时就要认真检查前面的代码,准时改正并且认真认真,杜绝此类错再次发生;编写代码时应当少用全局变量,全局变量在编写试看似定义次数少,很便利;但全局变量出错几率较大,且不易修改,每次修改时都要全面考虑,所以应防止用到;程序调试中遇到的错误可以使自己学到学问;养成良好的编程习惯,可以节约许多时间,防止许多不必要的
14、错误;在编辑完整个程序后,进行调试阶段总是会数显head无定义;解决方法:再类的定义是遗忘声明指针Worker_pay *head;3 总结经过一周的 C+课程实践,我对 C+语言设计有了一个更深,更全面的了解,特别体会到了 C+面对对象操作对简化程序的重要作用;下面是我的几点体会:刚拿到课题时,我一脸的茫然,看到如此巨大的工程,不知如何下手; 这个工资治理系统中老师子信息竟然包含15 条,以前从来没有遇到过如此多的变量;和同学争论很久好,我发觉其实可以化繁为简的,信息中 15 条不肯定全都要,由于其中本身就有重复的,例如津贴和补贴;并且可以有一个 pay 的数组来处理数据;所以做任何事情都必
15、需要开动脑筋,积极摸索,有时仍要学会化繁为简;在编程时条理清楚是至关重要的;主函数,函数,成员函数之间的层次关系,调用关系肯定要有一个全面的把握,特别要体会类的封装性;另外很重要的一点就是肯定要对链表的五种操作娴熟的把握;在编译,链接,调试的过程中肯定要有耐心;由于一个程序中会有许多小的错误,甚至有的问题要几个小时才能解决;遇到问题,肯定要全面分析, 有时候仍要向同学请教;总得来说,编程时极需要耐心的;总之, C+课程设计实践为我们供应了一个综合运用所学学问,解决实际问题的平台,增强了我们实践动手的才能和工程实践才能,并且锤炼和培育了我们的自学才能,让我们对 C+有了一个更全面的明白;欢迎下载
16、精品学习资源4 输入过程即截图:欢迎下载精品学习资源附源代码:/ 题目:工资治理系统/ 代码如下:#include /标准输入输出头文件#include /standard library标准库头文件包含了 C、C+语言的最常用的系统函数 该文件包含了的 C语言标准库函数的定义#include / malloc的全称是 memory allocation,中文叫动态内存安排#include /字符串处理#include /conio是 Console Input/Output(掌握台输入输出)的简写,其中定义了通过掌握台进行数据输入和数据输出的函数,主要是一些用户通过按键盘产生的对应操作,比如
17、getch 函数等等#define TITLE n月份 老师编号 姓名 应发数 各种折扣 实发数n#defineDATA%2d%4ld%-10s%6.1f%6.1f%6.1fn,p1-month,p1-num,p1-name,p1-should_pay,p1-rebate,p1-actual_paytypedef struct pay /结构体声明, pay 为外号long num ;/老师编号short month; /月份char name20; /姓名,占长度为 20 float jb,ji,gt,bt,ft,jt; /float should_pay;/ 应发数float fz,cx,
18、hf,gr;欢迎下载精品学习资源float rebate;/ 各种折扣float actual_pay;/ 实发数struct pay *next;/ 建立链表PAY;欢迎下载精品学习资源FILE *fp;/ 指针变量指向 FILEPAY *p1=NULL,*p2=NULL,*head=NUL;L/ 初值为空欢迎下载精品学习资源void menu ;PAY *input;void output;void savePAY *head;PAY *open ;PAY *insert;void search;PAY *del;PAY *revise;/* 主程序模块 */ void mainvoids
19、hort sel;domenu ;scanf%d,&sel;/格式输入函数,读入十进制数switchselcase 1:head=input; /输入模块break;case 2:head=insert; /插入模块break;case 3:head=revise; /修改模块break;case 4:head=del; /删除模块break;case 5:search; /查找模块break;case 6:欢迎下载精品学习资源output; /输出模块break;case 7:savehead; /储存模块break;case 0:break;whilesel.=0;/* 菜单*/ void
20、 menuprintfnnnnnnn;/ 格式化输出函数换行printftttt *主菜单功能选项 晋瑞手打 *nn;/tab符printftttt1.创建工资档案 n;printftttt2.添加工资信息 n;printftttt3.修改工资信息 n;printftttt4.删除工资信息 n;printftttt5.查找工资信息 n;printftttt6.分类信息列表 n;printftttt7.保 存 信 息n;printftttt0.退出nprintfnnnnnnnn;/* 输入模块 */ PAY *inputshort n=1;p1=PAY*mallocsizeofPAY;ifp1=
21、NULLprintf内存不足,无法创建链表! ;getch;/从掌握台读取一个字符,但不显示在屏幕上printfn请输入第 %d 位老师的信息(以老师编号为0 终止)晋瑞手打:n,n;printf老师编号: ;scanf%d,&p1-numifp1-num=0;printf按任意键返回! ;欢迎下载精品学习资源getch;freep1;return 0;getchar;printf姓名: ;getsp1-name ;printf工资月份: ;scanf%d,&p1-month;printf基本工资,津贴,岗贴,补贴,房贴,交通费:n ;scanf%f,%f,%f,%f,%f,%f,&p1-jb
22、,&p1-ji,&p1-gt,&p1-bt,&p1-ft,&p1-jt;printf房租,储蓄,会费: n ;scanf%f,%f,%f,%f,&p1-fz,&p1-cx,&p1-hf;p1-should_pay=p1-jb+p1-ji+p1-gt+p1-bt+p1-ft+p1-jt;ifp1-should_paygr=0;else ifp1-should_pay=800&p1-should_paygr=p1-should_pay-800*5/100;else ifp1-should_pay=2000&p1-should_paygr=p1-should_pay-2000*1/10+60;els
23、ep1-gr=p1-should_pay-5000*2/10+60+300;p1-rebate=p1-fz+p1-cx+p1-hf+ p1-gr;p1-actual_pay=p1-should_pay-p1-rebate;whilep1.=NULLifn=1 head=p1 ;elsep2-next=p1;n+ ;p2=p1 ;p1=PAY*mallocsizeofPAY;ifp1=NULLprintf内存不足,无法创建链表! ;getch;printf请输入第 %d 位老师的信息(以老师编号为0 终止)晋瑞手打:n,n;printf老师编号: ;欢迎下载精品学习资源scanf%d,&p1-n
24、um;getchar;ifp1-num=0p1=NULL ;break;printf姓名: ;getsp1-name;printf工资月份: ;scanf%d,&p1-month;printf基本工资,津贴,岗贴,补贴,房贴,交通费:n ;scanf%f,%f,%f,%f,%f,%f,&p1-jb,&p1-ji,&p1-gt,&p1-bt,&p1-ft,&p1-jt;printf房租,储蓄,会费: n ;scanf%f,%f,%f,%f,&p1-fz,&p1-cx,&p1-hf;p1-should_pay=p1-jb+p1-ji+p1-gt+p1-bt+p1-ft+p1-jt;ifp1-sho
25、uld_paygr=0;else ifp1-should_pay=800&p1-should_paygr=p1-should_pay-800*5/10;else ifp1-should_pay=2000&p1-should_paygr=p1-should_pay-2000*1/10+60;elsep1-gr=p1-should_pay-5000*2/10+60+300;p1-rebate=p1-fz+p1-cx+p1-hf+p1-gr;p1-actual_pay=p1-should_pay-p1-rebate;p2-next=NULL ;printf老师信息已输入,请按任意键返回,并存盘 ;g
26、etch;return head;/* 输出模块 */ void outputshort sel,flag,month;float min,max;dodo欢迎下载精品学习资源printfnn请挑选您的列表方式 晋瑞手打: n ;printftt1.全部清单 n ;printftt2.按月输出 n ;printftt3.按工资段输出 n ;printftt0.返回n ;scanf%d,&sel;whilesel.=1&sel.=2&sel.=3&sel.=0;head=open;ifhead=NULL return; elseswitchselcase 1:printfnttt*全部清单 *n
27、;printfTITLE;p1=head;doprintfDATA;p1=p1-next;whilep1.=NULL;break;case 2:flag=0;printf输入要查的月份 晋瑞手打: ;scanf%d,&month;printfnttt*第%d月工资清单 *n,month;printfTITLE;p1=head;doifp1-month=monthprintfDATA;p1=p1-next;flag=1;elsep1=p1-next;whilep1.=NULL;ifflag=0printf没有该月清单 n ;欢迎下载精品学习资源break;case 3:flag=0;printf
28、输入最低工资: ;scanf%f,&min;printf输入最高工资: ;scanf%f,&max;printfntt *%5.1f到%5.1f 工资的名单 *n,min,max;printfTITLE;p1=head;doifp1-actual_paymin&p1-actual_paynext;flag=1;elsep1=p1-next;whilep1.=NULL;ifflag=0printf没有该工资段的老师 n ;break;case 0: break;whilesel.=0;/* 储存文件 */void savePAY *headshort write;fp=fopenpay.txt,
29、w;iffp=NULLprintf创建文件失败! ;getch;return;p1=p2=head;whilep1.=NULL欢迎下载精品学习资源write=fwritep1,sizeofPAY,1,fp;if.writeprintf无法写入文件! ;getch;return;p1=p1-next;fclosefp;printf胜利存盘!晋瑞手打 ;getch;/* 打开文件 */ PAY *openshort n=1,read;fp=fopenpay.txt,r;iffp=NULLprintf无法打开档案文件!晋瑞手打 ;getch;return NULL;ifp1=p2=PAY*mallo
30、csizeofPAY=NULLprintf内存不足! ;getch;return NULL;read=freadp1,sizeofPAY,1,fp;if.readprintf文件读取出错! 1 ;getch;return NULL;ifp1-next=NULL head=p1 ;elsedo欢迎下载精品学习资源ifn=1 head=p1;elsep2-next=p1;n+ ;p2=p1 ;ifp1=PAY*mallocsizeofPAY=NULLprintf内存不足! ;getch;return NULL;read=freadp1,sizeofPAY,1,fp;if.readprintf文件读
31、取出错! 2 ;getch;return NULL;whilep1-next.=NULL;p2-next=p1;return head;fclosefp;/* 插入模块 */ PAY *insertPAY *p3=NULL;char sel;head=open ;ifhead=NULL return NULL;elsedoprintf请输入要插入的老师信息晋瑞手打: n ;p3=PAY*mallocsizeofPAY;ifp3=NULLprintf内存不足,无法创建链表! ;getch;欢迎下载精品学习资源printf老师编号: ;scanf%d,&p3-num;getchar;printf姓
32、名: ;getsp3-name;printf工资月份: ;scanf%d,&p3-month;printf基本工资,津贴,岗贴,补贴,房贴,交通费:n ;scanf%f,%f,%f,%f,%f,%f,&p3-jb,&p3-ji,&p3-gt,&p3-bt,&p3-ft,&p3-jt;printf房租,储蓄,会费: n ;scanf%f,%f,%f,%f,&p3-fz,&p3-cx,&p3-hf;p3-should_pay=p3-jb+p3-ji+p3-gt+p3-bt+p3-ft+p3-jt;ifp3-should_paygr=0;else ifp3-should_pay=800&p3-sho
33、uld_paygr=p3-should_pay-800*5/100;else ifp3-should_pay=2000&p3-should_paygr=p3-should_pay-2000*1/10+60;elsep1-gr=p3-should_pay-5000*2/10+60+300;p3-rebate=p3-fz+p3-cx+p3-hf+ p1-gr;p3-actual_pay=p3-should_pay-p3-rebate;p1=head ;whilep1.=NULLp2=p1;p1=p1-next;p2-next=p3;p3-next=NULL;printf胜利插入,是否连续?是( Y
34、) 否( N)n ;sel=getch;whilesel=Y|sel=y;printfn任意键返回,并存盘 n ;getch;return head;/* 查找模块 */ void search欢迎下载精品学习资源short sel;long num ;char name20,choose;head=open ;ifhead=NULLreturn;else dodoprintfn挑选查找方式晋瑞手打: n ;printftt1.按老师编号查找 n ;printftt2.按姓名查找 n ;scanf%d,&sel;getchar;whilesel.=1&sel.=2;switchselcase
35、1:printf输入要查的老师编号: ;scanf%ld,#break;case 2:printf输入要查的姓名: ;getsname;break;p1=head ;whilep1-next.=NULL&p1-num.=num&strcmpp1-name,name.=0/ 用成 p1.=NULL有问题? p1=p1-next;ifp1-num=num|strcmpp1-name,name=0printf您要查找的信息如下: n ;printfTITLE;printfDATA;elseprintf没有该信息! n ;printf是否连续?是( Y) 否( N)n ;choose=getc
36、h;whilechoose=Y|choose=y;欢迎下载精品学习资源printf任意键返回 ;getch;/* 删除模块 */ PAY *delshort sel;long num ;char name20,choose;head=open ;ifhead=NULLreturn NULL;else dodoprintfn挑选删除方式: n ;printftt1.按老师编号删除 n ;printftt2.按姓名删除 n ;scanf%d,&sel;getchar;whilesel.=1&sel.=2;switchselcase 1:printf输入要删除的老师编号晋瑞手打: ;scanf%ld
37、,#break;case 2:printf输入要删除的姓名: ;getsname;break;p1=head ;ifp1-num=num|strcmpp1-name,name=0head=p1-next;printf删除信息胜利! ;elsewhilep1-next.=NULL&p1-num.=num&strcmpp1-欢迎下载精品学习资源name,name.=0p2=p1;p1=p1-next;ifp1-num=num|strcmpp1-name,name=0p2-next=p1-next;freep1;printfn删除信息胜利! n ;elseprintfn没有该信息! n ;printf是否连续?是( Y) 否( N)n ;choose=getch;whilechoose=Y|choose=y;printf任意键返回 , 并存盘 ;getch;return head;/* 修改模块 */ PAY *reviseshort sel;long num ;char name20,choose;head=open ;ifhead=NULLreturn NULL;else dodoprintfn查找要修改的对象晋瑞手打: n ;printftt1.按老师编号查找 n ;printftt2.按姓名查找 n ;scanf%d,&sel;getchar;whiles