数据结构课程设计工资管理系统.doc
《数据结构课程设计工资管理系统.doc》由会员分享,可在线阅读,更多相关《数据结构课程设计工资管理系统.doc(93页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、【精品文档】如有侵权,请联系网站删除,仅供学习与交流数据结构课程设计工资管理系统.精品文档.海南大学信息科学技术学院数据结构课程设计 题 目: 工资管理系统 学 院:信息科学技术学院 专 业:09 通信工程 姓 名: 学 号: 指导老师:吴泽晖 二零一一年十二月目录一、 设计目的4二、 功能描述4三、 总体设计63.1功能模块设计61. 主控函数执行流程72. 输入记录模块83. 查询记录模块84. 更新记录模块91) 修改记录92) 删除记录93) 插入记录94) 排序记录105. 统计记录模块116. 输出记录模块123.2数据结构设计123.3函数功能描述13四、 程序实现151. 程序
2、预处理152. 主函数main()173. 主菜单界面184. 表格形式显示记录185. 记录查找定位196. 格式化输入数据207. 增加记录218. 查询记录229. 删除记录2310. 修改记录2511. 插入记录2612. 统计记录2813. 排序记录2914. 存储记录315.运行结果1. 主界面312. 输入记录323. 显示记录334. 删除记录345. 查询记录356. 修改记录367. 插入记录368. 统计记录379. 排序记录3710. 保存记录38六 心得体会39七 参考文献39一、 设计目的本程序旨在训练基本的编程能力,了解管理信息系统的开发流程,熟悉C语言的文件和结
3、构数组的各种基本操作。本程序中涉及结构体、数组、文件等方面的知识。通过本程序的训练,使我对C语言的文件操作有了一个更深刻的了解,掌握利用数组存储结构实现工资管理的原理,为进一步开发出高质量的信息管理管理系统打下坚实的基础。二、 功能描述如后图所示,与利用单链表实现的学生管理系统不同的是,此工资管理系统主要利用数组来实现,其数组元素是结构体类型。整个系统由如下几大功能模块组成。(1) 输入记录模块。输入记录模块主要完成将数据存入数组中的工作。在此工资管理系统中,记录可以从以二进制形式存储的数据文件中读入,也可以从键盘逐个输入记录。记录由职工的基本信息和工资信息字段构成。当从数据文件中读入记录时,
4、它就是在以记录为单位存储的数据文件中,将记录逐条复制到数组元素中。(2) 查询记录模块。查询记录主要完成在数组中查询满足相关条件的记录。在此工资管理系统中,用户可以按照职工编号或姓名在数组中进行查找。若找到该记录,则以表格形式打印出此记录的信息;否则,返回一个-1的值,并打印出未找到该记录的提示信息。(3) 更新记录模块。更新记录模块主要完成对记录的维护。在此工资管理系统中,实现对记录的修改、删除、插入、和排序操作。一般而言,系统进行了这些操作之后,需要将修改的的数据存入源数据文件。(4) 统计记录模块。统计记录模块主要完成对公司员工的工资在各等级的人数统计。(5) 输出记录模块。输出记录模块
5、主要完成两个任务。第一,它实现对记录的存盘操作,即将数组中各元素中存储的记录信息写入数据文件中。第二,它实现将数组中存储的记录信息以表格的形式在屏幕上打印出来。工资管理系统输出至屏幕输出至文件统计公司员工工资在各等级的人数排序记录插入记录删除记录修改记录按姓名查询按编号查寻从键盘输入从文件读入输出记录模块统计模块更新记录模块查询记录模块输入记录模块三、 总体设计一、 功能模块设计1. 主控main()函数执行流程工资管理系统执行流程如后图所示。它先以可读写的方式打开数据文件,此文件默认为“c:zggz”,如该文件不存在,则新建此文件。当打开文件操作成功后,则从文件中一次读出一条记录,添加到新建
6、的数组中,然后执行显示主菜单和进入主循环操作,进行按键判断。在判断键值时,有效的输入为09之间的任意数值,其他输入都被视为错误按键。若输入为0(即变量select=0),则会继续判断是否在对记录进行更新操作之后进行了存盘操作,若未存盘,则全局变量saveflag=1,系统会提示用户是否需要进行数据存盘操作,用户输入Y或y,系统会进行存盘操作。最后,系统执行退出工资管理系统的操作。若选择1,则调用Add()函数,执行增加记录操作;若选择2,则调用Del()函数,执行删除记录操作;若选择3,则调用Qur()函数,执行查询记录操作;若选择4,则调用Modify()函数,执行修改记录操作;若选择5,则
7、调用Insert()函数,执行插入记录操作;若选择6,则调用Tongji()函数,执行统计记录操作;若选择7,则调用Sort()函数,执行按降序排序记录的操作;若选择88,则调用Save()函数,执行将记录记录存入磁盘中的数据文件的操作;若选择9,则调用Disp()函数,执行将记录以表格形式打印输出至屏幕的操作;若输入09之外的值,则调用Wrong()函数,给出按键错误的提示。开 始将此文件的内容读出,并存入一个新的结构体类型的数组中以可读写的方式打开一个数据文件调用menu()菜单函数进入while(1)主循环输入09中的一个数值,选择相应操作输入是否为0 是 否 是否已对修改进行了存盘结束
8、调用Save()函数,进行写数据文件操作判断键值,调用相应函数,完成相应功能. 主控函数流程图2. 输入记录模块输入记录模块主要实现将数据存入数组中。当从数据文件中读出记录时,它调用fread(&gzcount,sizeof(ZGGZ),1,fp)文件读取函数,执行一次从文件中读取一条工资记录信息存入某个数组元素中的操作,并且这个操作在main()中调用执行,即在工资管理系统进入显示菜单界面时,该操作已经执行了。若该文件中没有数据,系统会提示数组为空,没有任何记录可操作,此时,用户应选择1,调用Add()函数,进行记录输入,即完成在数组中添加元素的操作。3. 查询记录模块查询记录模块主要实现在
9、数组中按职工编号或姓名查找满足相关条件的记录。在查询函数Qur()中,为了遵循模块化编程的原则,我们将在数组中进行的记录定位操作设计成了一个单独的函数int Locate(ZGGZ tp,char findmess,char nameornum),参数findmess保存要查找的具体内容,nameornum保存要查找的字段,若找到该记录,则返回指向该记录的数组元素的下标,否则:返回一个-1的值。4. 更新记录模块更新记录模块主要实现对记录的修改、删除、插入和排序操作。因为记录是以数组的结构形式存储的,所以这些操作都在数组中完成。下面分别介绍这4个功能模块。1) 修改记录操作修改记录操作需要对数
10、组中目标元素的数据域中的值进行修改,它分两步完成。第一步,输入要修改的职工编号,输入后调用定位函数Locate()在数组中逐个对职工编号或姓名字段的值进行比较,直到找到该职工编号的纪录;第二步,若找到该记录,则修改除职工编号之外的各字段的值,并将存盘标记变量saveflag置1,表示已经对记录进行了修改,但还未执行存盘操作。2) 删除记录删除记录操作完成删除指定职工编号或姓名的记录,它也分两步完成。第一步,输入要修改的职工编号,输入后调用定位函数Locate()在数组中逐个对职工编号或姓名字段的值进行比较,直到找到该职工的编号或姓名的记录,并返回指向该记录的数组元素小标;第二步,若找到记录,则
11、从该记录所在元素的后续元素起,依次向前移动一个元素位置,有值的数组元素个数减1.3) 插入记录插入记录操作完成在指定职工编号的随后位置插入新的记录。首先,它要求用户输入某个员工的职工编号,新的纪录将插入在该记录之后;然后,提示用户输入一条新的纪录的信息,这些信息保存在新结构体类型的数组元素的各字段中;最后,将该元素插入在已经确认位置的职工编号之后。它的具体插入执行过程如后图所示,新元素B1准备插入至已有5个元素的数组中,插入位置为元素A2之后。具体过程为:现调用Locate()函数找到A2在数组中的下标,从A4开始,往后移动,至A2停止移动,然后再远A3的位置插入元素B1。4) 排序记录冒泡排
12、序法属于内部排序法中的一种,这是运用数值比较后,依据判断规则对数据位置进行交换,以达到排序的目的。针对数组结构的特点,这里采用这种排序法来实现按实发工资字段的值从高到低对记录进行排序。冒泡排序法的基本思想为:将相邻的两个数组元素的实发工资字段的值进行比较,若左边的值小于右边的值,则将此两个元素的值进行交换;若左边的值大于等于右边的值,则此两个值的位置不变。右边的值继续和下一个值做比较,重复此动作,直到比较到最后一个值。用伪代码描述如下:If(左边的值=右边的值*/此两个元素的位置不变;右边的元素继续和下一个元素比较; 插入B1A0 A1 A2 A3 A4 插入B1前A4A0 A1 A2 B1
13、A3插入B1后如下图所示,假设共有n个ZGGZ结构数组元素gz0至gzn-1,其具体比较过程如下。第一轮:从gz0比到gzn-1,实发工资字段值最小的元素存放在gzn-1中。第二轮:从gz0比到gzn-2,实发工资字段值最小的元素存放在gzn-2中。第n轮:从gz0比到gz1,实发工资字段值最小的元素存放在gz1中。gzn-1gz0 gz1 gz2 . gz3 gzn-2 gzn-1 gzn 数组中对记录排序示意图因为是按实发工资的降序排序,所以每进行一轮比较都会以交换位置的方式将该轮的最小者移向数组的尾端。冒泡排序法的优点是,若数组元素已有部分排好序,则使用冒泡排序法可以快速排序。其缺点则是
14、会反复扫描数据,比较相邻的两个元素,速度不快且没有效率。它属于稳定的快速排序法。5. 统计记录模块该模块的实现比较简单,它主要通过依次读取数组中元素的数据域中的实发工资的值进行比较判断的形式,完成工资在各个等级的人数统计。6. 输出记录模块当把记录输出至文件时,调用fwrite(&tpi,sizeof(ZGGZ),1,fp)函数,将数组元素tpi中各字段的值,写入文件指针fp所指的文件;当把记录输出至屏幕时,调用void Disp()函数,将数组中的存储的记录信息以表格的形式在屏幕上打印出来。二、数据结构设计本程序定义了结构体emplyee ,用于存放职工的基本信息和工资信息。Typedef
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 数据结构 课程设计 工资管理 系统
限制150内