1、四、 调试分析8五、 用户使用说明8六、 测试结果9七、 附录10一、需求分析职工管理系统是一个工作单位不可缺少的管理工具,它管理的数据对于公司的决策者和管理者来说都至关重要,所以职工管理系统应该能够为用户提供充足的信息和快捷的查询手段。但一直以来各个公司基本上都是靠传统的人工方式来管理职工信息,这种管理方式存在着许多缺点,如:效率低、性差,另外时间一长,将产生大量的文件和数据,这对于信息的查找、更新和维护都带来了不少的困难。 当今社会,信息迅速膨胀,随着各个公司的规模增大,有关信息管理工作所涉及的数据量越来越大,职工信息量也大大增加,利用传统的手工查询、登记、修改等方法的处理速度远远跟不上公
2、司的需求,有的公司不得不靠增加人力、物力来进行信息管理。 随着计算机技术的不断提高,计算机作为知识经济时代的产物,其强大的功能已为人们深刻认识,它已进入人类社会的各个行业和领域并发挥着越来越重要的作用,成为人们工作和生活中不可缺少的一部分。而作为计算机应用的一部分,使用计算机对职工进行管理,具有手工管理所无法比拟的优点。例如:检索迅速、查找方便、可靠性高、存储量大、性好、寿命长、成本低等。这些优点能够极提高职工管理的效率,也是公司的科学化、正规化管理和与世界接轨的重要条件。职工管理系统作为一种管理软件正在各公司中得到越来越广泛的应用,且已达到了良好效果。简单的职工管理系统:1、问题描述对单位的
3、职工进行管理,包括插入、删除、查找、排序等功能。2、要求职工对象包括(字符串)、性别(字符)、出生年月(数字)、工作年月(数字)、学历(字符串)、职务(字符串)、住址(字符串)、(字符串)等信息。(1)新增一名职工:将新增职工对象按以字典方式职工管理文件中。(2)删除一名职工:从职工管理文件中删除一名职工对象。(3)查询:从职工管理文件中查询符合某些条件的职工。(4)修改:检索某个职工对象,对其某些属性进行修改。(5)排序:按某种需要对职工对象文件进行排序。3、实现功能(1)由键盘输入职工对象,以文件方式保存。程序执行时先将文件读入存。(2)对职工对象中的“”按字典顺序进行排序。(3)对排序后
4、的职工对象进行增、删、查询、修改、排序等操作。二、概要设计 1、输入功能的实现:要想实现职工管理系统的输入,必须要建立一个职工信息系统的抽象数据类型,其中职工信息以链表的存储方式实现。由键盘输入职工对象,以文件方式保存。2、系统处理功能的实现:系统管理员根据公司的人员流动情况,在提示信息的提示下,选择相应的服务进行操作。如对职工对象中的按字典顺序进行排序;对排序后的职工对象进行增、删、查询、修改、排序等操作。3、输出的实现:根据选择的操作,输出与之对应的信息。综上可以绘制出职工管理功能的系统流程图,如图1所示图1 系统流程图4、系统功能结构根据职工管理系统问题的分析和设计要求,可以得到该职工管
5、理系统可以分为五个模块:职工信息添加模块、职工信息修改模块、职工信息删除模块、职工信息查询模块、职工信息排序模块。其系统功能结构如图2所示。图2 系统功能结构图5、模块函数构造根据系统功能结构图的描述,可以构造出该系统的抽象数据类型和相对应的函数,其方法名和功能如表1所示。表1 函数功能表模块函数或数据结构功能链表数据类型typedef struct Node定义链表结点typedef struct Datatype定义职工信息ListInitiate(SLNode *head)初始化链表系统处理模块SLNode *ListInsert(SLNode *head,DataType x)插入职工
6、信息ListDelete(SLNode *head)删除职工信息ListModify(SLNode *head)修改职工信息put(SLNode *head,FILE *fp)保存职工信息Listfind(SLNode head)查询职工信息Listpaixu(SLNode *head)职工信息排序输出模块print(SLNode *head)显示职工信息三、详细设计1、抽象数据类型定义1)定义表结点(typedef struct Node)typedef struct Node long int born_time,work_time,tele_num; char sex,nameALLMA
7、X,degreeALLMAX,jobALLMAX,addressALLMAX; struct Node *next;SLNode;2)定义职工信息(typedef struct Datatype)typedef struct char nameALLMAX,sex,degreeALLMAX,jobALLMAX,addressALLMAX;DataType;3)初始化链表(ListInitiate(SLNode *head)void ListInitiate(SLNode *head)/-链表初始化 if(*head=(SLNode *)malloc(sizeof(SLNode)=NULL) e
8、xit(1);/动态分配存储空间 (*head)-next=NULL;2、主函数设计(1)根据详细设计要求,可以得到主函数代码及其对应的程序流程图:在主函数中,实现了友好的界面设计。系统需要输入职工的基本信息:、性别、出生年月、工作年月、学历、职务、住址、等。这个系统还利用键盘输入提供的主菜单服务,在主菜单中,有七种操作的调用:新增职工信息:查询职工信息:删除职工信息:修改职工信息:职工信息排序:保存职工信息:显示职工信息:(2)主函数程序流程图如图3所示:图 3 主函数程序流程图3、查找算法设计在查询算法中,职工管理系统提供了七种查询操作,实现了系统的人性化查询操作。这些查询操作分别为:对进
9、行查询,对性别进行查询,对出生年月进行查询,对工作年月进行查询,对学历进行查询,对职位进行查询,对住址进行查询,对进行查询等一些列操作。查找算法中,利用链表的指针的移动扫描整个职工信息表,利用strcmp()函数判断字符串是否匹配。查询算法程序流程图如图4所示:图 4 查询算法程序流程图4、排序算法设计在排序算法中,职工管理系统提供了四种查询操作,实现了系统的基本排序操作。这些排序操作分别为:对进行排序,对性别进行排序,对出生年月进行排序,对工作年月进行排序,等一些列操作。排序算法中,利用链表的指针的移动扫描整个职工信息表,利用strcmp()函数判断字符串是否匹配。排序的核心代码:for(q
10、=head-next,p=head,s=p;q;s=p,p=q,q=q-next) if(p-born_timeq-born_time)/对出生年月进行排序 if(head=p) head-next=q-next; head=q; q-next=p; q=head- p=head; else p- s-next=q; p=q; q=p- flag=1; 排序算法流程图如图5所示:图5 排序算法程序流程图四、调试分析测试是使用人工或者自动手段来运行或测试某个系统的过程,其目的在于检验是否满足规定的需求或弄清预期结果与实际结果之间的差别。在调试查询修改功能过程中,查询的总是不正确,查询的结果显示,
11、没有找到职工信息,最后发现查找的结点不正确,查询应该与输入的值和头结点next比较,而不是头结点。还有就是查询结点不知道如何循环,最后又看看了记得笔记和书,才知道如何继续查找而不出错误。修改时总是不能正确的修改,最初时修改总是修改最后输入的数据。最后终于找到了,又是结点写错了。排序时注意交换的先后顺序就可以了,删除时注意交换结点的顺序。经验与体会:本次课程设计是围绕数据结构进行。根据问题描述可知,需要解决问题并不复杂,整个问题只需要实现一个职工管理系统功能,那就是在这个系统中实现对职工信息的插入、删除、查询、排序、修改以及保存。但是,为了实现该功能,却需要优秀的算法和数据结构以保证实现的时间和
12、空间效率。把职工信息存储在一个单链表中,利用指针实现对职工信息的各项基本操作。虽然设计的程序完成了题目描述所需要实现的功能,但是仍然存在不如人意的地方。那就是可以排序上面多设计几个算法。实现多角度排序。在这个系统中没有职工序号的信息,所以允许职工相同,在很大程度上面,可能是的职工信息重复。经过这次数据结构课程设计,我们不仅及时巩固的了数据结构、算法、以及软件工程的知识,并明白数据结构和算法对于程序时间和空间性能的影响,及软件工程提供的开发流程和工具对于实现特定功能程序的重要意义。当我们面对一个实际问题,应该迅速根据问题性质和特点抽象成特定的数据结构,当然每个问题都有可能能够抽象成多种数据结构,每种数据结构适应于不同的算法。因此应该综合考虑这样的数据结构、算法以及它们的空间和时间效率,然后从中选择一个作为实现程序的基础。此外,对程序的测试应该要仔细,根据模块的特点和测试阶段,采用各种软件测试方法对程序进行测试,确保各个模块的正确性和完整性,最后集成起来测试其是否正确和完整地实现了问题描述中要求的功能。五、用户使用说明进入职工管理系统,首先看到的就是欢迎界面,然后提示:请输入要录入的职工数,输入完数字后,就提示:按次序依次输入职工的、性别、出生年月、工作年月、学历、职务、的信息(注意是依次输入,中间可以用空格,tab,回车做切换输入),输完信息后自动回到主界面,根据提示:
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1