工资管理系统毕业论文

上传人:沈*** 文档编号:41835806 上传时间:2021-11-23 格式:DOC 页数:46 大小:293KB
返回 下载 相关 举报
工资管理系统毕业论文_第1页
第1页 / 共46页
工资管理系统毕业论文_第2页
第2页 / 共46页
工资管理系统毕业论文_第3页
第3页 / 共46页
点击查看更多>>
资源描述
郑州科技学院郑州科技学院C 语言课程设计 设计(论文)题目: 工资管理系统 所 在 院: 信息工程学院 专 业 班 级: 13 计算机科学与技术 2 班学 生 姓 名: 吴刘洗 学 号: 201315033 指 导 教 师: 李瑞霞 2014 年 6 月 13 日郑州科技学院课程设计(论文)任务书课程设计(论文)任务书设计题目:设计题目: 工资管理系统 专业班级:专业班级: 13 计算机科学与技术 2 班 学号学号 201315032 姓名姓名 吴刘洗 主要内容主要内容设计工资管理系统,主要包含:主程序模块、.输入模块、插入模块、修改模块、删除模块、查找模块、输出模块和保存模块。采用字符用户界面,通过菜单选择相应的操作,直观且操作简单。数据的存储选用数据文件方式;编辑平台选用 Microsoft Visual C+ 6.0 。所用到的知识点有:三种基本程序结构,数组,函数,指针,结构体,文件操作和链表。基本要求:基本要求:员工工资信息包括:月份、工号、姓名、应发工资、各种折扣、实发工资。系统完成的功能有以下几个:1 主菜单选项 2 创建工资档案 3 新增工资信息 4 修改工资信息 5 删除工资信息 6 查找工资信息 7 分类信息列表 8. 保存信息9 退出完成期限:完成期限: 2014 年 6 月 13 日 指导教师签名:指导教师签名: 评审小组负责人签名:评审小组负责人签名: 摘摘 要要随着企业管理信息化的发展,网络及计算机的引入使管理越上了一个新的发展平台。企业的各项管理都将向信息化方向拓展,工资的管理对于企业来说尤为重要,也正是基于这个原因,我把课程设计的方向定在企业的工资管理上。工资管理系统是一个企业不可缺少的部分,它的内容对于企业的决策者和职工来说都是至关重要的,所以工资管理系统应该能够为用户提供充足的信息和快捷的查询手段。但一直以来人们使用传统人工的方式管理产品,这种管理方式存在着许多缺点,如:效率低、工资透明性差等。另外,由于时间一长,将产生大量的文件和数据,这对于查找和维护产品都带来不少困难。 作为计算机应用的一部分,使用计算机对工资信息进行管理,有着手工管理无法比拟的优点。例如:检索迅速、查找方便、可靠性高、存储量大、保密性好、寿命长、成本低等。这些优点能够极大的提高工资管理的效率。目 录1 1 引言引言.11.1 开发背景.11.2 可行性分析.22 2 需求分析需求分析.42.1 设计要求.42.2 设计目的.42.3 功能实现.53 3 总体设计总体设计.63.1 设计思想.63.2 设计概念.83.2.1 工资管理系统的菜单设计概念.83.2.2 编辑目录中的选项计算方法设计概念.83.3 处理流程.93.4 总体结构.93.5 功能分配.103.6 主要模块.114 4 核心代码实现核心代码实现.144.1 插入模块代码设计.144.2 查询模块代码设计.155 5 测试分析测试分析.165.1 插入模块测试.166 6 课程设计总结课程设计总结.24参考文献参考文献.26附录附录.2711 引言工资管理系统是企业不可缺少的一部分,它利用计算机对员工工资进行统一管理,实现工资管理系统的系统化、规范化和自动化,为企业提高工作效率。本程序旨在训练读者的基本编程能力,了解管理信息系统的开发流程,熟悉 C 与言的文件和结构数组的各种基本操作。 本程序中涉及结构体、数组、文件等方面的知识。1.1 开发背景如今是一个迅速发展的社会,为了更为方便快捷统计和计算员工的工资状况,我们为企业开发了一款工资管理系统。顺应企业的快速发展流程。借助现代信息技术和管理理论,建立企业管理信息系统使得当今社会的重要趋势。全面开发和应用计算机管理信息系统就是近期不能回避的问题。在企业管理中,人力资源是企业最宝贵的资源,也是企业的“生命线” ,因此人事管理是企业的计算机管理系统重要组成部分。而工资管理由市人力资源管理的重中之重,实行电子化的工资管理,可以让人力资源人员从繁重琐碎的案头工作解脱出来,去完成更重要的工作,工资管理信息系统的实现可以减轻比较繁琐的手工工资管理。随着我国经济建设突飞猛进,管理科学化与管理手段的现代化已经提到非常重要的地位。企、事业单位为了提高自身的管理水平和竞争能力,纷纷投入人力物力,开发适合本单位需求的管理信息系统。2中小企业与行政事业单位建立的管理信息系统尤如雨后春笋,一个新的开发和管理信息系统的热潮正在掀起, 为此我计划设计:工资管理系统。它可以大大减少人力,使人们摆脱了原有系统的局限性,只要在电脑上轻轻地点几下就可以完成查询、输入、修改、输出等功能。非计算机专业的人员也可以熟练地进行操作。现代社会发展迅速,市场竞争激烈,尤其是在通信行业中。在企业管理制度中对企业支出费用进行统计分析,极约经营,才能良性发展。 工资管理系统的统计功能可以实现对单位的工资支出项目进行详尽的统计分析,根据比较分析为企业领导提供职工收入的依据,单位领导做出决策判断,有目的的向一些关键岗位和对企业发展贡献大的岗位进行倾斜,调动职工的积极性,保持企业的良性发展。让职工的工资收入和付出的劳动成正比,根据对企业的发展贡献大小与职工的工资收入挂钩。根据工资管理系统的统计分析功能,比较年收入为领导在决策未来市场发展方向中,提供具有较大参考价值的依据。为公司的可持续性快速发展提供重要的价值。1.2 可行性分析随着计算机应用的日益普及和深化,网上办公已经成为一种趋势。本项目要开发的是基于互联网的工资管理系统。由于公司人员多,每天人工记录工资的工作量大,原来的人工工作方式不仅会造成办理时间的延误和人力资源的浪费,而且存在着各种信息不易存放、易丢失、难以备份和查询等缺点。因此,实现一个工资管理功能和员工信息管理系统集成起来的工资管理系统就显得十分必要,既可以节省资源,又可以有效存储、更新、查询信息,提高工作和服务效率。 开发的3系统要求界面友好,方便直观。既要方便公司管理员对工资信息进行添加、删除、修改、查询和统计等管理,又要方便公司员工随时查看自己的工资信息的请假的信息,这样也能有效地督促员工尽量少请假。本系统是一个基于互联网和 WINDOWS 操作的系统,现有技术已较为成熟,利用现有技术完全可以实现系统开发目标。同时,开发期限较为紧迫,但预计可以在规定期限内能完成开发任务。1.2.1 用户使用可行性 使用本系统的人员均有一定计算机应用基础,系统维护员由计算机的专业人员担任,所有人员都要经过本系统的使用培训。经过简单培训人员就会熟练使用本系统。1.2.2 技术可行性 技术上的可行性分析要考虑现有技术条件能否顺利完成开发工作及将来要采用的硬件和软件技术能否满足用户提出的要求(如计算机的容量、速度等) 。 1.2.3 社会可行性 随着计算机的发展与普及,以及互联网技术的扩展,日常劳资人事管理必将实现无纸化办公,并且加入到公司内部的 Intranet 或者是 Internet 上去,实现数据的共享,这样有利于劳资人事信息在单位内部的查询,提高了数据资源的利用,并且能及时的得到更新,不需要象过去那样浪费大量的人力物力去进行抄写,提高了工作的效率。 41.2.4 法律方面的可行性 所有软件都用正版,技术资料都由提出方保管,数据信息均可保证合法来源。所以,在法律方面是可行的。2 需求分析本程序是专门为企业服务的,以供为企业提供便利,能够更方便、更快捷的整理出职工工资信息情况,包括:月份、 工号、 姓名、 应发工资、各种折扣和 实发工资。其中各种折扣又包括:房租扣款,公积金,水电费,其它扣款。根据题目要求,由于工资信息是存放在文件中,所以应提供文件的输入输出等操作;在程序中需要浏览工资信息,应提供显示、查找、排序等操作;另外还应提供键盘式选择彩旦实现功能选择。 2.1 设计要求 工资管理系统设计要求是,需要对员工的信息进行整理。既是:工号,姓名。还要对员工的工资方面进行整理,既是:岗位工资,技能工资,职务津贴,职龄津贴,交通补贴, ,业绩津贴。(1)根据题目要求,应该把职工工资信息用结构体形式输入,在定义一个全局变量和文件指针进行整个程序的运行,然后把职工工资信息送到文件中,所以应该提供一个结构体和 文件的输入输出等操作; (2)在程序中需实现职工工资浏览、查询、统计等功能的操作,所以需要建立相应的功能模块来实现; (3)另外还需要提供键盘式选择菜单实现功能,在运行时达到5所要的目的。 2.2 设计目的 在这高速发展的社会,当然需要快捷的程序来解决我们司空见惯的问题,为企业服务就是我们这次设计程序工资管理系统,为企业提供更方便、快捷的服务。能准确快速的查询员工的工资收入状况,并且透明度高,可以让员工一目了然知道自己工资状况,并且可以进行修改和删除,当员工的信息情况不符合时。1.熟悉 C 语言程序的编辑、编译链接和运行的过程。 2.熟练运用 if 语句和 switch 语句以及嵌套应用。 3.学习并掌握 C 语言定义函数的基本方法、声明函数及调用函数的方法和过程。4.掌握文件的概念以及文件的定义方法,认识文件打开、关闭、读、写等文件基本操作函数。 5.掌握结构体类型变量、数组的定义和使用。6. 掌握数组的定义、引用以及输入输出的方法、通过字符数组存储字符串,进一步使用字符串。2.3 功能实现 随着社会的发展,中小型企业在我国得到迅速发展,工资管理系统对企业的 资金管理,起着越来越重要的作用。本程序就是为了更好更快的管理职建立的工工资而。 它从标准输入设备(键盘)上6输入一批职工工资信息,计算总工资,并按工资降序排序,最后输出到文件中,并将其显示到显示器上。与利用单链表实现的学生成绩管理系统不同的是,此工资管理系统 主要利用数组来实现,其数组元素是结构体类型。整个系统由如下几大功能模块组成。 (1) 输入记录模块。输入记录模块主要完成将数据存入数组中的工作。在此工资 管理系统中,记录可以从以二进制形式存储的数据文件中读入,也可以从键盘逐个输入记录。记录由职工的信息和工资信息字段构成。当从数据文件中读入记录时,它就是以记录为单位存储的数据文件中,将记录逐条复制到数组元素中。 (2) 查询记录模块。 查询模块记录主要完成在数组中查找满足相关条件的记录。 在此工资管理系统中,用户可以按照职工编号或姓名在数组中进行查找。若找到该记录,则以表格形式打印出此记录的信息;否则,返回一个-1 的值,并打印出未找到该记录的提示信息。 (3) 更新记录模块。 更新记录模块主要完成对记录的维护。在此工资管理系统 中,实现对记录的修改、删除、插入和排序操作。一般而言,系统进行了这些操作之后,需要将修改的数据存入源数据文件。 (4) 统计记录模块。 统计记录模块主要完成对公司员工的工资在各等级的人数 统计。 (5) 输出记录模块。 输出记录模块主要完成两个任务。第一,7它实现对记录的 存盘操作,即将数组中各元素中存储的记录信息写入数据文件中。第二,它实现将数组中存储的记录信息以表格的形式在屏幕上打印出来。3 总体设计3.1 设计思想对于整个系统的设计思路是,首先,由员工输入用户信息,包括编号、姓名和职务;然后,在计算某职工的当月工资时,系统先从已输入的职工信息文件中获取职工的工作类型,接着调用不同的处理程序进行计算;最后将结果存档。 从用户需求中,可以发现 5 种类型的职员都可以分别设计为一个类。首先,他们都属于雇员,因此可以设计一个基类 employee(雇员) ,然后从中派生出 technician(技术人员)类,salesman(销售人员)类、secretary(文秘)类。对于技术经理和销售经理来说,他们都属于经理,所以设计时可以从employee 类中派生出一个 manager(经理)类作为 techmanager(技术经理)和 salesman(销售经理)类的父类。而经理类本身并不对应实际的员工类型,由于技术经理有技术人员和经理的双重特点,因此 techmanager 类同时继承 technician 类和 manger 类;销售经理有销售人员和经理的双重特点,因此 salesmanager 类同时继承salesman 类和 manager 类。 根据用户需要 employee 类应该拥有的属性有:编号、姓名、职务、月份和工资。Employee 类的服务可以包括 info() 、 search() 、countSalary() 、recordInfo()和 recordSalary() 。其中,8info()函数用于接收用户输入的职工信息;search()函数用来根据职工名查找职工信息;countSalary()函数为工资计算函数,但在基类中为空,原因是各类人员的工资计算方法不同,无法在基类中统一定义,必须在派生类中分别定义。recordInfo()函数和 recordSalary()函数分别是职工信息和职工工资的记录函数,分别将信息存入文件info.txt 和 salary.txt。3.2 设计概念在头文件中将所需包含的函要数进行输入,再进行变量定义,如:定义数据结构,有关工资管理需要输入的基本信息再用指针的方法将这些有关变量进行地址存储。再定义出工资管理整个程序中所需要的函数原型;然后进行主函数的书写。 3.2.1 工资管理系统的菜单设计概念在主函数中先设计一个有关工资管理系统的菜单,此菜单可以完成以下功能:调用菜单函数返回一个整数值、初始化、输入数据创建双链表、显示所有数据、单条显示、计算实发工资、查找职工信息数据、删除记录、插入记录、追加记录、保存文件、读取文件、复制文件、按实发工资升序排序、计算所需票面数、按职工号索引、按部门求合计、退出等 16 项功能。再对此程序进行输出时工作界面的处理,如:记录所压键值、压任意键进入主菜单、设置文本颜色为黄色、设置背景颜色为兰色、输出左上角边框、输出上边框水平线、输出右上角边框、输出左右两边的垂直线等将输出模式进行点缀。之后进入核心编辑: 93.2.2 编辑目录中的选项计算方法设计概念编辑目录中的选项计算方法,其中含有程序的初始化、输入数据创建双链表、显示所有数据、单条显示、计算实发工资、查找职工信息数据、删除记录、插入记录、追加记录、保存文件、读取文件、复制文件、按实发工资升序排序、计算所需票面数、按职工号索引、按部门求合计等子函数输出语句的编辑。3.3 处理流程主程序模块3.4 总体结构删除模块保存模块查找模块输出模块输入模块插入模块修改模块10主菜单选项创建工资档案新增工资信息退出保存信息修改工资信息删除工资信息查找工资信息分类信息列表113.5 功能分配 创建工资档案包括:员工的工号、姓名、以及工资状况。新增工资信息是对员工工资状况进行调整的功能。修改工资信息是对员工在工作时有错误,为了计算员工所得而添加功能。删除工资信息是对一些辞职、离职的员工因为长时间的储存会占取内存,没有多大用处可以随时删除。查找工资信息是在储存信息的情况下,进行查找员工工资信息。分类信息列表是针对员工各项工资的查询。保存信息是对员工信息所有情况处理完毕的保存。一切就绪就可以退出了。3.6 主要模块3.6.1 员工信息录入本模块对员工的信息进行整理输入,以便最后对各个员工详细查找。输入员工信息姓名工号123.6.2 月份录入 3.6.3 应发工资录入 本模块是对员工工资发放的详细罗列,它包括:岗位工资、技能工资、职务津贴、职龄津贴、交通补贴、业绩补贴。应发工资技能工资职务津贴岗位工资职龄津贴交通补贴业绩津贴133.6.4 各种折扣录入本模块是对员工在公司享受的福利和待遇的折扣它包括:房租扣款、公积金、水电费、其他扣款。各种折扣公积金房租扣款水电费3.6.5 实发工资录入其它扣款144 核心代码实现4.1 插入模块代码设计 本模块是对月份、员工工号、员工姓名、应发工资、各种折扣、实发工资输入#include #include #include #include #include #define TITLE n 月份 工号 姓名 应发工资各种折扣 实发工资n#define DATA %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 long num; short month; char name20; float gw,jn,zw,zl,jt,yj; float should_pay; float fz,gj,sd,others; float rebate; float actual_pay; struct pay *next;PAY;FILE *fp;PAY *p1=NULL,*p2=NULL,*head=NULL;void menu(); PAY *input();void output();void save(PAY *head);15 PAY *open(); PAY *insert();void search(); PAY *del();4.2 查询模块代码设计 本模块对输入、插入、修改、删除、查找、输出、保存模块进行录入。PAY *revise();/*主程序模块*/void main(void) short sel;do menu(); scanf(%d,&sel); switch(sel) 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:output(); /输出模块16 break;case 7:save(head);/保存模块 break;5 测试分析175.1 插入模块测试如图 5.1 所示系统已进入主菜单页面,是对该程序功能总的罗列以及说明图 5.1 系统主菜单如图 5.2 对职工信息以及工资状况进行编辑如:职工工号、姓名、18岗位工资、技能工资、职务津贴、职龄津贴、交通补贴、业绩津贴、房租扣款、公积金、水电费、以及其他扣款。图 5.2 职工信息及工资编辑如图 5.3 对以上职工信息进行保存:通过以上操作此时即可点击19选项 7 对职工信息进行保存。图 5.3 职工信息保存20如图 5.4 保存完毕,可以通过工号或姓名查找,尝试快速查找员工信息。图 4 查找职工信息21如图 5.5 可以通过“分类信息列表”查询所有员工工资状况,根据程序操作可以查找所有员工信息。图 5.5 查询所有员工信息22如图 5.6、5.7、5.8 根据公司需要和员工信息的变动可以对员工的信息进行修改、删除、添加。图 6 修改员工工号或姓名23图 7 删除员工信息图 8 添加员工信息246 课程设计总结通过这一个多星期的课程设计,我学到了很多很多。不仅是在知识上,也表现在了各个方面。 首先,在设计的过程中,我发现我已经遗忘了很多上星期学习过的 C 语言知识,也发现了原来学习中的不少漏洞。有不少地方的树叶还是新的,那方面的知识自然还没有吃透。比如结构体的定义已经不是很熟,字符串数组也不太能熟练运用了,还有就是指向数组和字符串的指针也不是很熟了。在编写项目程序的过程中,我不断的发现自己的不足并努力提高,在原来的基础上对 C语言有了更进一步的理解。 其次就是我发现学习不是一个人的事儿。在与同学们的讨论中我常常会在一个函数的处理上出现新颖的点子,比如最后那个让一段字符串晃来晃去的小功能就是我在和同学讨论在主界面何时使用刷屏时的意外的收获。还有有时用 gets()会读入一个空串。然后在它前面加个 getchar()来获取走这个空串也是同学无心插柳的结果。当然这个后来被老师(fflush(stdin)清除输入缓冲区函数)更好的方法所取代。再有就是我们编程不能光是一个或者几个人在那儿空想。比如说是张老师帮忙解决了我 gets()易读入空串的问题,以及多文件同时编译的重复包含的问题。我程序中还有一个实验性的功能(即播放事件对应的系统声音)就是在网上查找另外一个问题的意外结果。还有有时想一个复杂的算法,迷茫了三四天只想出了大致结构。最后决定上网找资料,不查不知道,一查大吃一惊,不但自己的想法比比皆是,比自己的想法更完美更合理的多得看都看不完。此时真是自愧不如,如早从网上借鉴,集大家之所成,加上自己的修改完善,早已做出了更好的算法和系统了。现在才知道,一人25的智慧敌不过千万人智慧的集成,能借鉴的尽量借鉴,然后再修改完善,增加自己所需的功能。完成设计后,我觉得收获不少,而且这是自己首次应用所学知识做出了这个职工工资管理系统,以前从未做过这样大(这是对我而言,在专业人仕看来是小菜一碟)的程序,多少心里有点甜美的感觉。课程设计诚然是一门专业课,给我很多专业知识以及专业技能上的提升,同时又是一门讲道课,一门辩思课,给了我许多道,给了我很多思,给了我莫大的空间。同时,设计让我感触很深。使我对抽象的理论有了具体的认识。通过这次课程设计,我掌握了如何运用 C 语言编写一个完整的软件,并且掌握了 C 语言的精髓。我认为,在这学期的课程设计中不仅培养了独立思考、动手操作的能力,在各种其它能力上也都有了提高。更重要的是,在实验课上,我们学会了很多学习的方法。而这是日后最实用的,真的是受益匪浅。要面对社会的挑战,只有不断的学习、实践,再学习、再实践。这对于我们的将来也有很大的帮助。以后,不管有多苦,我想我们都能变苦为乐,找寻有趣的事情,发现其中珍贵的事情。就像中国提倡的艰苦奋斗一样,我们都可以在实验结束之后变的更加成熟,会面对需要面对的事情。26参考文献1谭浩强:C 程序设计(第四版) 。北京:清华大学出版社,2010.62刘才:中学学生管理系统 吉林 吉林大学,2009.11.013周钦:学生管理系统的应用 沈阳 沈阳航空职业技术学院 福建电脑(期刊)20104吴启武 刘勇 王俊峰 薛欣:C 语言课程设计 案例精编 (第二版) 北京:清华大学出版社,2011.627附录#include #include #include #include #include #define TITLE n 月份 工号 姓名 应发工资各种折扣 实发工资n#define DATA %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 long num; short month; char name20; float gw,jn,zw,zl,jt,yj; float should_pay; float fz,gj,sd,others; float rebate; float actual_pay; struct pay *next;PAY;FILE *fp;PAY *p1=NULL,*p2=NULL,*head=NULL;void menu(); PAY *input();void output();void save(PAY *head); PAY *open(); PAY *insert();void search(); PAY *del(); PAY *revise();/*主程序模块*/void main(void)28 short sel;do menu(); scanf(%d,&sel); switch(sel) 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: output(); /输出模块 break; case 7: save(head); /保存模块 break; case 0: break;while(sel!=0);/*菜单*/void menu()29 printf(nnnnnnn); printf(tttt *主菜单选项*nn); printf(tttt1.创建工资档案n); printf(tttt2.新增工资信息n); printf(tttt3.修改工资信息n); printf(tttt4.删除工资信息n); printf(tttt5.查找工资信息n); printf(tttt6.分类信息列表n); printf(tttt7.保 存 信 息n); printf(tttt0.退 出n); printf(nnnnnnnn);/*输入模块*/ PAY *input() short n=1; p1=(PAY*)malloc(sizeof(PAY);if(p1=NULL) printf(内存不足无法创建链表!);getch(); printf(n 请输入第%d 位职工的信息(以工号为 0 结束):n,n); printf( 工号:); scanf(%d,&p1-num);if(p1-num=0) printf(按任意键返回,); getch(); free(p1); return 0; getchar(); printf( 姓名:);30 gets(p1-name); printf( 工资月份:); scanf(%d,&p1-month); printf( 岗位工资,技能工资,职务津贴,职龄津贴,交通补贴, ,业绩津贴:n); scanf(%f,%f,%f,%f,%f,%f,&p1-gw,&p1-jn,&p1-zw,&p1-zl,&p1-jt,&p1-yj); printf( 房租扣款,公积金,水电费,其它扣款:n); scanf(%f,%f,%f,%f,&p1-fz,&p1-gj,&p1-sd,&p1-others); p1-should_pay=p1-gw+p1-jn+p1-zw+p1-zl+p1-jt+p1-yj; p1-rebate=p1-fz+p1-gj+p1-sd+p1-others; p1-actual_pay=p1-should_pay-p1-rebate;while(p1!=NULL) if(n=1) head=p1; else p2-next=p1; n+; p2=p1; p1=(PAY*)malloc(sizeof(PAY); if(p1=NULL) printf(内存不足,无法创建链表!); getch(); printf(请输入第%d 位职工的信息(以工号为 0 结束):n,n); printf( 工号:); scanf(%d,&p1-num); getchar(); if(p1-num=0) p1=NULL; break;31 printf( 姓名:); gets(p1-name); printf( 工资月份:); scanf(%d,&p1-month); printf( 岗位工资,技能工资,职务津贴,职龄津贴,交通补贴,业绩津贴:n); scanf(%f,%f,%f,%f,%f,%f,&p1-gw,&p1-jn,&p1-zw,&p1-zl,&p1-jt,&p1-yj); printf( 房租扣款,公积金,水电费,其它扣款:n); scanf(%f,%f,%f,%f,&p1-fz,&p1-gj,&p1-sd,&p1-others); p1-should_pay=p1-gw+p1-jn+p1-zw+p1-zl+p1-jt+p1-yj; p1-rebate=p1-fz+p1-gj+p1-sd+p1-others; p1-actual_pay=p1-should_pay-p1-rebate; p2-next=NULL; /edit by Yan-Xingyu Class Network-021 printf(职工信息已输入,请按任意键返回,并存盘); getch();return head;/*输出模块*/void output() short sel,flag,month; float min,max;dodo printf(nn 请选择您的列表方式:n); printf(tt1.全部清单n); printf(tt2.按月输出n); printf(tt3.按工资段输出n); printf(tt0.返回n); scanf(%d,&sel);while(sel!=1&sel!=2&sel!=3&sel!=0);head=open();32if(head=NULL)return;elseswitch(sel)case 1:printf(nttt *全部清单*n);printf(TITLE);p1=head;do printf(DATA); p1=p1-next;while(p1!=NULL);break; case 2: flag=0; printf(输入要查的月份:); scanf(%d,&month); printf(nttt*第%d 月工资清单*n,month); printf(TITLE);p1=head;doif(p1-month=month)printf(DATA); p1=p1-next; flag=1;else p1=p1-next;while(p1!=NULL);if(flag=0)33 printf(没有该月清单n); break; case 3: flag=0; printf(输入最低工资:); scanf(%f,&min); printf(输入最高工资:); scanf(%f,&max); printf(ntt *%5.1f 到%5.1f 工资的名单*n,min,max); printf(TITLE); p1=head;doif(p1-actual_paymin&p1-actual_paynext; flag=1;else p1=p1-next;while(p1!=NULL);if(flag=0) printf(没有该工资段的职工n); break; case 0: break;while(sel!=0);/*保存文件*/void save(PAY *head) short write; fp=fopen(pay.txt,w); if(fp=NULL)34 printf(创建文件失败!); getch();return; p1=p2=head; while(p1!=NULL) write=fwrite(p1,sizeof(PAY),1,fp);if(!write) printf(无法写入文件!); getch();return; p1=p1-next; fclose(fp); printf(成功存盘!); getch();/*打开文件*/PAY *open() short n=1,read; fp=fopen(pay.txt,r);if(fp=NULL) printf(无法打开档案文件!);getch();return NULL;if(p1=p2=(PAY*)malloc(sizeof(PAY)=NULL) printf(内存不足!); getch();return NULL;35 read=fread(p1,sizeof(PAY),1,fp);if(!read) printf(文件读取出错!1); getch();return NULL;if(p1-next=NULL) head=p1;elsedo if(n=1) head=p1; else p2-next=p1; n+; p2=p1;if(p1=(PAY*)malloc(sizeof(PAY)=NULL) printf(内存不足!); getch();return NULL; read=fread(p1,sizeof(PAY),1,fp);if(!read) printf(文件读取出错!2); getch();return NULL;while(p1-next!=NULL);p2-next=p1;36return head;fclose(fp);/*插入模块*/PAY *insert() PAY *p3=NULL; char sel; head=open();if(head=NULL)return NULL;elsedo printf(请输入要插入的职工信息:n); p3=(PAY*)malloc(sizeof(PAY);if(p3=NULL) printf(内存不足,无法创建链表!); getch(); printf( 工号:); scanf(%d,&p3-num); getchar(); printf( 姓名:); gets(p3-name); scanf(%d,&p3-month); printf( 岗位工资,技能工资,职务津贴,职龄津贴,交通补贴,业绩津贴:n); scanf(%f,%f,%f,%f,%f,%f,&p3-gw,&p3-jn,&p3-zw,&p3-zl,&p3-jt,&p3-yj); printf( 房租扣款,公积金,水电费,其它扣款:n); scanf(%f,%f,%f,%f,&p3-fz,&p3-gj,&p3-sd,&p3-others); p3-should_pay=p3-gw+p3-jn+p3-zw+p3-zl+p3-jt+p3-yj; p3-rebate=p3-fz+p3-gj+p3-sd+p3-others; p3-actual_pay=p3-should_pay-p3-rebate; p1=head;37while(p1!=NULL) p2=p1; p1=p1-next; p2-next=p3; p3-next=NULL; printf(成功插入,是否继续?是(Y) 否(N)n); sel=getch();while(sel=Y|sel=y);printf(n 任意键返回,并存盘n);getch();return head;/*查找模块*/void search() short sel; long num; char name20,choose; head=open(); if(head=NULL) return;elsedodo printf(n 选择查找方式:n); printf(tt1.按工号查找n); printf(tt2.按姓名查找n); scanf(%d,&sel); getchar();while(sel!=1&sel!=2);switch(sel)38 case 1: printf(输入要查的工号:); scanf(%ld,&num); break; case 2: printf(输入要查的姓名:); gets(name); break; p1=head; while(p1-next!=NULL)&(p1-num!=num)&(strcmp(p1-name,name)!=0) /用成 p1!=NULL 有问题? p1=p1-next;if(p1-num=num)|strcmp(p1-name,name)=0) printf(您要查找的信息如下:n); printf(TITLE); printf(DATA);else printf(没有该信息!n); printf(是否继续?是(Y) 否(N)n); choose=getch();while(choose=Y|choose=y);printf(任意键返回); getch();/*删除模块*/ PAY *del() short sel; long num; char name20,choose; head=open(); if(head=NULL)39 return NULL;elsedodoprintf(n 选择删除方式:n);printf(tt1.按工号删除n);printf(tt2.按姓名删除n);scanf(%d,&sel);getchar();while(sel!=1&sel!=2);switch(sel)case 1: printf(输入要删除的工号:); scanf(%ld,&num); break;case 2: printf(输入要删除的姓名:); gets(name); break; p1=head;if(p1-num=num)|strcmp(p1-name,name)=0) head=p1-next; printf(删除信息成功!);else while(p1-next!=NULL)&(p1-num!=num)&(strcmp(p1-name,name)!=0) p2=p1;40 p1=p1-next; if(p1-num=num)|strcmp(p1-name,name)=0) p2-next=p1-next; free(p1); printf(n 删除信息成功!n);else printf(n 没有该信息!n); printf(是否继续?是(Y) 否(N)n); choose=getch();while(choose=Y|choose=y); printf(任意键返回,并存盘); getch();return head;/*修改模块*/ PAY *revise() short sel; long num; char name20,choose; head=open(); if(head=NULL)return NULL;elsedodo printf(n 查找要修改的对象:n); printf(tt1.按工号查找n); printf(tt2.按姓名查找n); scanf(%d,&sel);41getchar();while(sel!=1&sel!=2);switch(sel)case 1: printf(输入要查的工号:); scanf(%ld,&num); break;case 2: printf(输入要查的姓名:); gets(name); break;p1=head; while(p1-next!=NULL)&(p1-num!=num)&(strcmp(p1-name,name)!=0) /用成 p1!=NULL 有问题? p1=p1-next;if(p1-num=num)|strcmp(p1-name,name)=0) printf(您要修改的原始信息如下:n); printf(TITLE); printf(DATA); printf(n 将上述信息改为如下信息:n); printf( 工号:); scanf(%d,&p1-num); getchar(); printf( 姓名:); gets(p1-name); printf( 工资月份:); scanf(%d,&p1-month); printf( 岗位工资,技能工资,职务津贴,职龄津贴,交通补贴,业绩津贴:n); scanf(%f,%f,%f,%f,%f,%f,&p1-gw,&p1-jn,&p1-zw,&p1-zl,&p1-jt,&p1-yj);42printf( 房租扣款公积金,水电费,其它扣款:n);scanf(%f,%f,%f,%f,&p1-fz,&p1-gj,&p1-sd,&p1-others); p1-should_pay=p1-gw+p1-jn+p1-zw+p1-zl+p1-jt+p1-yj; p1-rebate=p1-fz+p1-gj+p1-sd+p1-others; p1-actual_pay=p1-should_pay-p1-rebate;else printf(你要修改的信息不存在!n); printf(是否继续?是(Y) 否(N)n); choose=getch();while(choose=Y|choose=y); printf(任意键返回并存盘); getch(); return head;
展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 办公文档


copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!