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