C语言职工工资管理系统程序设计报告
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
C语言课程设计报告题目小型职工工资管理系统
专业班级2016级通信工程本科1班
组别通信第二组
学生姓名
院(系)信息工程系
指导教师(职称)
完成时间2017年5月31日
课程设计任务书
题目职工工资管理系统
班级2016级通信工程本科1班
学号姓名
学号姓名
学号姓名
学号姓名
学号姓名
一、主要内容:
本课程设计结合本学期所学C语言知识,准备设计开发一个简单职工工资管理
系统。
工资管理系统是企业不可或缺的一部分,它利用计算机对员工工资进行统一
管理,实现工资管理系统的系统化、规范化和自动化,为企业提高工作效率。
设计
开发这个系统需要用到单链表、文件读取操作、结构体、函数、指针等C语言知识。
本课程设计准备通过Windows控制台应用程序实现职工工资管理系统的简单运行。
利用所学知识,本着简单、易用的设计原则,本课程设计尽量实现良好、美观的
“人机界面”,便于软件的操作使用。
本次设计主要学习内容包括:
(一)进一步学习并熟练掌握C语言语法和编程思想。
(二)学习C语言提供的库函数,熟悉VisualC++的开发工具。
(三)学习C语言函数、链表、结构体、文件读取、指针等知识。
(四)学习如何查阅他人的文档进行软件的设计与开发。
二、基本要求:
(一)质量要求
1.职工工资管理系统基本功能模块的设计应包括:显示主菜单功能、职工信
息的录入、添加、删除、修改、查询、排序功能,退出系统。
测试文件的读取与存
储是否正常、测试评估界面是否合理,友好。
2.对职工工资管理系统设计并进行调试、修复、完善、测试。
3.定期主动向指导教师汇报任务进度,认真填写相关报告文档。
4.按时完成各阶段工作,不突击,不抄袭。
(二)进度要求
1.明确课程设计任务,搜集资料:2017年2月28日—3月14日。
2.完成程序的设计与实现,撰写课程设计论文初稿:2017年3月15日—5月15日。
3.与指导教师沟通,完成课程设计论文定稿:2016年5月16日—2017年5月28日。
4.进入课程设计论文审阅阶段,准备答辩:2017年5月29日—6月9日。
三、主要参考资料:
1.工资管理系统课程设计程序
语言程序设计规范及基础
3.《明解C语言第3版》,(日)柴田望洋着,人民邮电出版社
4.《CPrimerPlus第6版中文版》,姜佑?译,人民邮电出版社
5.《C程序设计第四版》,谭浩强着,清华大学出版社
6.《C和C++实物精选》,徐波着,北京邮电出版社
学生签名:
指导教师签名:
年月日
目录
1概述
设计思想
1.系统分成几个相对独立的模块,但这些模块都进行集中式管理。
2.分层的模块化程序设计思想,整个系统采用模块化结构设计作为应用程
序,有较强的可操作性和扩展性。
3.合理的数据设计,在应用系统设计中,相对独立的模块间以数据相互连
接,使各模块间的耦合性较低,方便系统运行,提高系统安全性。
设计原则
为了使本系统功能齐全完备,操作简便,最大限度的提高软件的质量,从而满足用户的实际需要,在设计开发过程中遵循了如下原则:
1.合法性原则:依据产品核算系统的工作规定以及要求,参照核算实际的工作情况,进行诸如产品进货、销售等工作。
2.实用性原则:适合产品信息管理工作的实际需求,并能够处理一些特殊情况的要求,此外,尽可能预留空间,以便扩充功能。
3.准确性原则:对输入的相关资料建立检错机制,及时报错,使用户能够及时准确的输入合法资料(如:类型匹配,长度不超限等)。
4.易操作原则:要求设计的系统功能齐全,界面友好,操作方便,必要的地方进行提示。
5.源程序可读性原则:为了便于其他设计,维护人员读懂代码或以后的代码修改,软件升级维护,即可能做好代码注释工作。
性能需求
(1)支持工资信息一次性多组导入
(2)非法操作能够提示错误并且知道安全行为方式
(3)信息查询时界面显示数量
课程设计报告内容及分工情况
课程设计报告内容
1.系统功能模块结构图和程序流程图
2.数据结构设计及用法说明
3.程序结构(画功能模块图或流程图)
4.各模块的功能
5.实验结果(包括输入数据和输出结果)
6.设计体会
7.参考文献
课程设计分工情况
本组共有5人,具体分工情况如下:
(1)学号:,姓名:司笑笑,具体负责功能模块结构图和程序流
程图的设计;负责“排序”代码的编写及整体代码的整合;负责程序设计报告中函数详细设计。
(2)学号:,姓名:代慧,负责“添加”、“录入”代码的编写;负责显示界面的优化、美化。
(3)学号:,姓名:王春亚,负责“查询”代码的编写;程序的测试与调试;。
(4)学号:,姓名:董子阳,负责“修改”代码的编写;具体负责实验结果的采集;程序设计报告书的校对;负责流程图的绘制。
(5)学号:,姓名:马良智,负责“删除”代码的编写;具体负责程序设计报告书的排版与完善;相关文献的查找和参考。
2总体设计
系统功能设计图
系统功能设计是使整个系统能基本实现职工工资管理功能,能让公司的管理者利用计算机对员工工资进行统一管理,实现工资管理系统的系统化、规范化和自动化,提高了工作效率。
管理信息系统(MIS)主要的功能就是进行信息的收集、查询、存储,同时对这些信息进行维护的。
本系统共包括七大模块,分别是录入模块,添加模块,修改模块,删除模
块,查询模块,排序模块,输出模块。
系统功能模块设计如图2-1所示。
图2-1小型职工工资管理系统功能模块结构图
主函数main()
(1)函数的功能:用于联系各个功能函数模块,以及退出程序时的退出画面提示。
(2)函数的入口:整个程序是从主函数开始的。
(3)函数的出口:当从main()的switch()开关结构中进入,即choise的值大于7时通过return退出main()函数,即:退出整个程序。
(4)函数调用关系:该函数不被其它函数调用。
程序流程图
3详
细设
计
3.1函
数
(1)功
能函数mainMenu()
①函数的功能:显示主菜单
②函数的入口:从main()进入,main()运行时进入该函数。
③函数调用关系:被主函数调用。
④函数的出口:当主菜单显示在屏幕上,结束该函数。
(2)功能函数input(LinkListhead)
①函数的功能:进入录入职工信息系统。
②函数的入口:程序从main()的switch()开关结构中进入,即choice的值为1时,开始进入该函数,进入函数后,首先用inputMenu()显示录入菜单选项,然后选择选项进行录入职工信息。
③函数调用关系:被主函数调用。
从switch()开关结构中进入,并在文中无返回值的空值void函数。
④函数的出口:录入职工信息完成后,结束该函数而并执行主函数main()中“output(head);”,输出职工信息在屏幕上并保存职工信息在磁盘上,然后执行“break;”跳出switch()开关函数,继续执行while循环结构。
(3)功能函数inputMenu()
①函数的功能:显示录入菜单。
②函数的入口:从input(LinkListhead))进入,input(LinkListhead)被调用时进入该函数。
③函数调用关系:被input(LinkListhead))调用,并在文中无返回值的空值void函数。
④函数的出口:当录入菜单显示在屏幕上,结束该函数。
(4)功能函数hand(LinkListhead)
①函数的功能:进入“手动录入职工信息”。
②函数的入口:程序从input(LinkListhead)的switch()开关结构中进入,即choice的值为1时,开始进入该函数,进入函数后,首先输入录入职工人数,然后逐个录入职工信息。
③函数调用关系:被input(LinkListhead)调用。
从switch()开关结构中进入,并在文中无返回值的空值void函数。
④函数的出口:录入全部职工信息完成后,结束该函数并执行
input(LinkListhead)中“break;”跳出switch()开关函数,继续执行while循环结构。
(5)功能函数read(LinkListhead)
①函数的功能:进入“文件录入职工信息”。
②函数的入口:程序从input(LinkListhead)的switch()开关结构中进入,即choice的值为2时,开始进入该函数,进入函数后,输入需要录入的文件路径fileName,通过fopen()函数,即“if((fq=fopen(fileName,"r"))==NULL)”打开文件,进入数据的处理。
③函数调用关系:被input(LinkListhead)调用。
从switch()开关结构中进入,并在文中无返回值的空值void函数。
④函数的出口:自动录入文件中全部职工信息后,结束该函数并执行
input(LinkListhead)中“break;”跳出switch()开关函数,继续执行while循环结构。
(6)功能函数output(LinkListhead)
①函数的功能:输出职工信息。
②函数的入口:程序在录入、添加、修改、删除、查询、排序后都进入该函数,进入函数后,将职工信息用printf()标准输出到屏幕上,然后通过fopen()函数,即“if((fp=fopen("d:\\","w"))==NULL)”打开文件,将职工信息写到d:\\文件中。
③函数调用关系:被main()等多个调用。
在文中无返回值的空值void函数。
④函数的出口:将职工信息用printf()标准输出到屏幕上,将职工信息存入磁盘后,结束该函数。
(7)功能函数add(LinkListhead)
①函数的功能:添加一个职工信息。
②函数的入口:从main()的switch()开关结构中进入,即choice的值为2的时侯,进入该函数,根据提示输入职工信息。
③函数调用关系:被主函数调用。
由switch()开关结构中进入,并在文中有返回值的整型int函数,返回值为1添加成功。
④函数的出口:职工信息添加成功返回1后结束该函数,并执行主函数main()中“output(head);”,输出职工信息在屏幕上并保存职工信息在磁盘上,然后执行“break;”跳出switch()开关函数,继续执行while循环结构。
(8)功能函数deleteWorker(LinkListhead)
①函数的功能:删除一个职工信息。
②函数的入口:从main()的switch()开关结构中进入,即choice的值为3的时侯,进入该函数,输入要删除的职工编号,删除改编号职工信息。
③函数调用关系:被主函数调用。
由switch()开关结构中进入,并在文中有返回值的整型int函数,返回值为1删除成功。
④函数的出口:职工信息删除成功返回1后结束该函数,并执行主函数main()中“output(head);”,输出剩余的职工信息在屏幕上,然后执行“break;”跳出switch()开关函数,继续执行while循环结构。
(9)功能函数update(LinkListhead)
①函数的功能:修改一个职工信息。
②函数的入口:从main()的switch()开关结构中进入,即choice的值为4的时侯,进入该函数,输入要修改的职工编号,根据提示输入新的职工信息。
③函数调用关系:被主函数调用。
由switch()开关结构中进入,并在文中有返回值的整型int函数,返回值为1修改成功。
④函数的出口:职工信息修改成功返回1后结束该函数,并执行主函数main()中“output(head);”,输出职工信息在屏幕上并保存职工信息在磁盘上,然后执行“break;”跳出switch()开关函数,继续执行while循环结构。
(10)功能函数find(LinkListhead)
①函数的功能:进入查询职工信息系统
②函数的入口:程序从main()的switch()开关结构中进入,即choice的值为5时,开始进入该函数,进入函数后,首先用findMenu()显示查询菜单选项,然后选择选项进行查询职工信息。
③函数调用关系:被主函数调用。
从switch()开关结构中进入,并在文中无返回值的空值void函数。
④函数的出口:查询职工信息完成后,结束该函数,然后执行主函数main()中的“break;”跳出switch()开关函数,继续执行while循环结构。
(11)功能函数findMenu()
①函数的功能:显示查询菜单。
②函数的入口:从find(LinkListhead)进入,find(LinkListhead)被调用时进入该函数。
③函数调用关系:被find(LinkListhead)调用,并在文中无返回值的空值void 函数。
④函数的出口:当查询菜单显示在屏幕上,结束该函数。
(12)功能函数findByWay(LinkListhead,intn)
①函数的功能:查询职工信息”。
②函数的入口:程序从find(LinkListhead)的switch()开关结构中进入,即choice的值为1,2,3,4,5,6时,开始进入该函数,进入函数后,根据不同的选项值进行相应的查询。
③函数调用关系:被find(LinkListhead)调用。
从switch()开关结构中进入,并在文中有返回值的的整型int函数,返回值为1查询成功。
④函数的出口:查询职工信息完成后,执行“output(head);”,输出职工信息在屏幕上并保存职工信息在磁盘上,然后结束该函数,执行find(LinkListhead)中“break;”跳出switch()开关函数,继续执行while循环结构。
(13)功能函数sort(LinkListhead)
①函数的功能:进入职工信息排序系统
②函数的入口:程序从main()的switch()开关结构中进入,即choice的值为6时,开始进入该函数,进入函数后,首先用sortMenu()显示排序菜单选项,然
后选择选项进行职工信息排序。
③函数调用关系:被主函数调用。
从switch()开关结构中进入,并在文中无返回值的空值void函数。
④函数的出口:职工信息排序完成后,结束该函数,然后执行主函数main()中的“break;”跳出switch()开关函数,继续执行while循环结构。
(14)功能函数sortMenu()
①函数的功能:显示排序菜单。
②函数的入口:从sort(LinkListhead)进入,sort(LinkListhead)被调用时进入该函数。
③函数调用关系:被sort(LinkListhead)调用,并在文中无返回值的空值void 函数。
④函数的出口:当排序菜单显示在屏幕上,结束该函数。
(15)功能函数sortByWay(LinkListhead,intn)
①函数的功能:职工信息排序。
②函数的入口:程序从sort(LinkListhead)的switch()开关结构中进入,即choice的值为1,2,3,4,5,6时,开始进入该函数,进入函数后,根据不同的选项值进行相应的排序。
③函数调用关系:被sort(LinkListhead)调用。
从switch()开关结构中进入,并在文中有返回值的的整型int函数,返回值为1排序成功。
④函数的出口:职工信息排序完成后,执行“output(head);”,输出职工信息在屏幕上并保存职工信息在磁盘上,然后结束该函数,执行sort(LinkListhead)中“break;”跳出switch()开关函数,继续执行while循环结构。
(16)功能函数uqnum(LinkListhead,intnum)
①函数的功能:判断职工编号是否已存在。
②函数的入口:程序add(LinkListhead)中进入,输入职工编号后,开始进入该函数,进入函数后,判断输入的职工编号是否已经存在。
③函数调用关系:被add(LinkListhead)调用。
在文中有返回值的的整型int
函数,返回值为1职工编号已存在。
④函数的出口:判断职工编号是否已存在后返回add(LinkListhead),继续输入其它职工信息或重新输入职工编号。
功能实现效果如图3-1所示。
图3-1主菜单界面
3.2函数流程图
(1)录入职工信息
该功能模块流程如图3-2所示。
图3-2“录入职工信息”功能模块流程图
(2)添加职工信息
该功能模块流程如图3-3所示。
图3-3“添加职工信息”功能模块流程图
(3)删除职工信息
该功能模块流程如图3-4所示。
图3-4“删除职工信息”功能模块流程图
(4)修改职工信息
该功能模块流程如图3-5所示。
图3-5“修改职工信息”功能模块流程图
(5)查询职工信息
该功能模块流程如图3-6所示。
图3-6“查询职工信息”功能模块流程图
(6)排序职工信息
该功能模块流程如图3-7所示。
图3-7“排序职工信息”功能模块流程图
4运行结果与调试
运行结果
本系统运行初始页面如图4-1所示。
图4-1初始页面
在函数开始时,初始化临时结构体数组,让结构体内所有信息为空.,读取目标文件,然后运行功能函数,选择需要的功能。
实现效果如图4-2所示。
图4-2输入界面
(1)根据自己需要的功能输入相应数字
图4-3职工信息的录入
图4-4职工信息的添加
图4-5职工信息的删除
4-6职工信息的修改
图4-7职工信息的查询
图4-8职工信息的排序
图4-9退出系统
(2)录入职工的信息,通过手动录入和文件录入两个方法录入职工的信息。
图4-10职工信息录入的方式
(3)查找职工的个人信息,通过输入编号、姓名、部门、基本工资、奖金和总工资进行查找。
图4-11职工信息的查询方式
(4)职工信息的排序可以通过编号排序、姓名排序、部门排序、基本工资排序、奖金排序和总工资排序。
图4-12职工信息的排序方式
(5)每次将职工信息输出在屏幕上时,都会通过fwrite写到文件D:\\中。
(6)根据数字提示结束程序。
程序调试
(1)每个选择界面之后,前一屏幕的内容依旧存在,影响界面的美观;经过同学的帮助及上网搜索,发现利用“system(“cls”);”可以消去前一屏幕的内容;然而接下来又出现新的问题:有些函数会出现错误;经过多次调试和修改,才发现把“system(“cls”);”放在调用的函数之前以及适当的位置可以解决
此问题。
(2)修改员工信息时,输入职工编号查询出多条信息,修改错误!后来加入职工编号唯一判断的函数,让职工编号唯一不重复。
(3)排序,开始交换指针指向,一直出现指针不存在导致乱码问题,后来修改为交换指针的数据域。
(4)文件写入磁盘,用笔记本打开磁盘内的文件乱码,经查询资料了解写入磁盘的文件是二进制数据,不能通过笔记本打开,可重新把文件读入程序中,在
程序中显示。
(5)忘导入<>,导致strcmp不能用。
(6)字符串输入输出要用%s。
结束语
工资管理系统对于决策者和管理者来说都至关重要,所以工资管理系统应该能够为用户提供充足的信息和快捷的查询手段。
但一直以来人们使用传统人工的方式管理文件工资档案,这种管理方式存在着许多缺点,如:效率低、保密性差,另外时间一长,将产生大量的文件和数据,这对于查找、更新和维护都带来了不少的困难。
随着科学技术的不断提高,计算机科学日渐成熟,其强大的功能已为人们深刻认识,它已进入人类社会的各个领域并发挥着越来越重要的作用。
作为计算机应用的一部分,使用计算机对工资信息进行管理,具有着手工管理所无法比拟的优点.例如:检索迅速、查找方便、可靠性高、存储量大、保密性好、寿命长、成本低等。
这些优点能够极大地提高工资管理的效率,也是科学化、正规化管理的重要条件。
这一个月以来,在开发这个工资管理系统过程中,我深刻地体会到了自学能力的重要性。
毕竟在学校学习到的知识是有限的,而在开发系统的过程中仅凭原有的一点点知识是远远不够的,只有翻阅大量的资料才能学到更多的知识,才能实现其预期的功能。
在开发过程中,遇到困难是在所难免的,期间我跟我的指导老师和同学们进行交流,从中明白了很多。
开发一个系统,恒心和毅力也是不可缺少的。
同样,在开发过程当中,细心也是非常重要的,由于很多事项都要很注意才行,如果没有做到这一点,就会出错。
在这里要同学的帮助、老师的悉心指导下基本完成本次课程设计,基本达到了工资管理系统的要求。
小组各成员心得体会
Xxx:
这个系统实现了对员工信息的存储、修改、删除、查询及排序。
从拿到题目到完成整个编程,从理论到实践学到了很多东西。
通过这次程序设计我深入了解了链表、结构体,也学会了文件的读写,懂得了理论和实际结合是很重要的。
在设计过程中遇到了很多问题,这毕竟是第一次做,同时在设计过程中发现了自己的不足之处,对以前所学的知识理解的不够深刻,掌握的不够牢固,比如单链表。
总之不收获很多!
Xxx:
通过这次课程设计,我对数据结构中单链表的应用有了更深的理解,并且深刻的认识了实践的重要性,只有理论与实践相结合才能很好的学习。
发现想要做好课程设计,仅靠书本上的知识是不够的,还需要查阅其他的程序和知识。
在这
个过程中,我充分认识了数据结构在编写程序方面的重要地位,知道它的特点是可以用存储单元来存储数据,并且可以方便的实现对数据进行插入、删除和遍历等操作。
Xxx:
这个课程设计实现了对职工信息的管理,通过录入、添加、修改、删除、查询等实现对职工信息的管理。
通过这次的课程设计,我学到了很多的东西。
同时也找到了自己很多的不足之处。
在这次课程设计中,由于以前没有好好学这门课,所以很多知识掌握的不够好,导致在编写的时候遇到很多困难,但是通过队员的帮助,得到了解决。
这次课程设计,不仅让我学到了知识,更好的掌握了函数、结构体、指针、单链表等的用法,也让我知道了团队的重要性。
Xxx:
通过这次课程设计我学到了许多在课堂没有学习好的知识,同时也巩固了我之前学习的知识,在设计的过程中我补全了自己的不足,找到自己掌握的不牢固的,还有理解的不深刻的,比如:函数,结构体等等,通过这次课程设计我提高了独立思考的能力和自己的实际动手能力,我还学会了如何用流程图来表达自己的想法,同时这次课程设计也让我们小组之间加深了了解,总的来说,这次设计让我的c语言知识更加丰富!
Xxx:
经过两学期的C语言学习,我们掌握了C语言的基础知识,我对课程设计有了一定的了解和体会。
并且通过这次课程设计使我懂得了理论与实践相结合是很重要的。
从理论中得出结论,才能真正为今后的学习、工作服务,从而提高自己的实际动手能力和独立思考的能力。
在这次程序设计中,我充分领略了C
语言功能的强大,包括函数、数组、指针、结构体、文件等。
而且我学会了最基本的替换,然后扩展到循环、嵌套,条理很清楚。
让我也深感集体的强大力量,很多东西并不是一两个人就可以完成的,比如这个小型工资管理系统程序的编写,俗话说“众人拾柴火焰高”,经过共同的努力,最终克服难关开发出了该系统。
在本次课程设计中,还有一点不得不说,通过这次程序设计书的编写让我深刻的意识到拥有好的文笔是多么的重要,我们虽为工科生,但是在以后的工作岗位上也不得不面临着各种各样的工作,所以文笔也是非常重要的。
参考资料
[1]工资管理系统课程设计程序
[2]C语言程序设计规范及基础
[3]《明解C语言第3版》,(日)柴田望洋着,人民邮电出版社
[4]《CPrimerPlus第6版中文版》,姜佑?译,人民邮电出版社
[5]《C程序设计第四版》,谭浩强着,清华大学出版社
[6]《C和C++实物精选》,徐波着,北京邮电出版社
附录
源代码清单:。