《数据结构简单的职工管理系统完整版.pdf》由会员分享,可在线阅读,更多相关《数据结构简单的职工管理系统完整版.pdf(40页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、WORD 格式湖南涉外经济学院数据结构课程设计报告题目:简单的职工管理系统院系名称:计算机学院专业名称:计算机科学与技术班级:计科 201001班学生姓名:刘兴斌学号:30指导教师:张建明设计起止时间:2011 年 11 月 20 日2011 年 12 月 30 日完成于 2011 年 12 月 29 日i专业资料整理星期四WORD 格式目第一章序.1 1.第二章系统总体功能的设计和分析.2.21、问题描述.2.2、详细要求.2.3、功能分析.3.、具体要求错误!未定义书签。录1.2、系统流程分析.3、系统功能结构.4、模块函数构造.第三章详细设计分析.1、抽象数据类型定义.2、主函数设计.3
2、、查找算法设计.4、排序算法设计.第四章源程序代码.3345 555681111专业资料整理WORD 格式第六章第五章系统实现29课程设计总结.31i专业资料整理WORD 格式重要。本课程系统地介绍了软件设计中常用的数据结构以及相应的存储结构和实现算法,介绍了常用的多种查找和排序技术。整个专业的学习以及软件设计水平的提高打下良好的基础。数据结构,必须掌握编写一些在特定数据结构上的算法,并通过上机调试,更好地掌握各种数据结构及其特点。经过本次课程设计,我们对于数据结构基本理论和存储结构及算法设计将有更加深入的理解,并提高我们在实际设计操作中系统分析、结构确定、算法选择、数学建模和信息加工的能力,
3、提高我们的 C/C+语言程序设计能力,以及培养学我们编写程序设计文档的能力,为将来在实战工作中打下良好的基础。在经济发达的今天对于职工简单的管理都是有很大程度上的要求,一个工司能否较好较快的运行,与职工管理的好坏分不开关系,通过该系统,将一系列的问题系统化,能够更好的管理职工。简化管理,使管理更方便,准确性、直观性和实用性更强。本着以锻炼自己的能力为目的,通过设计与制作进一步学习和掌握简单的职工管理系统的原理和使用方法。虽然在一定程度上较为简单,在人员管理上的方便快捷,也体现一个领导的管理水平是不是充满艺术。但也能体现在出为了学好本课程将为第一章序电子信息时代由如洪水一样的凶猛,能在现实社会应
4、用软件给我们的生活和工作带来方便和实用性就是软件存在的最大的价值。数据结构所能解决的就是这些复杂的问题简单化。数据结构是计算机专业学生学习的一门基础课程,但十分的1专业资料整理WORD 格式第二章系统总体功能的设计和分析1、问题描述根据课程设计题目的要求,由于职工信息是一定要存放在指定的文件中,所以应提供文件的输入、输出等操作;在程序中需要浏览职工的信息,应提供显示、查找、删除、插入、排序等一系列的操作;另外还应提供键盘式选择菜单实现功能选择对功能要求的实现是解决管理系统的关键问题。一个管理系统能将其划分为插入、删除、查找、排序等功能。对不同的功能模块进行代码的编写实现,最后通过一定的方式的进
5、行连接测试和最终的调用,从而完成对各部分的操作。2、详细要求1.要求职工对象包括姓名、性别、出生年月、工作年月、学历、职务、住址、电话等信息。(1)新增一名职工:将新增职工对象按姓名以字典方式职工管理文件中。(2)删除一名职工:从职工管理文件中删除一名职工对象。(3)查询:从职工管理文件中查询符合某些条件的职工。(4)修改:检索某个职工对象,对其某些属性进行修改。(5)排序:按某种需要对职工对象文件进行排序。2专业资料整理WORD 格式工信息系统的抽象数据类型,其中职工信息以链表的存储方式实现。职工对象,以文件方式保存。程序执行时先将文件读入内存。(2)系统处理功能的实现:系统管理员根据公司的
6、人员流动情况,在提示(3)输出的实现:根据选择的操作,输出与之对应的信息。输入模块综上可以绘制出职工管理功能的系统流程图,如图1 所示信息的提示下,选择相应的服务进行操作。如对职工对象中的姓名按字典顺序进行排序;对排序后的职工对象进行增、删、查询、修改、排序等操作。由键盘输入3功能分析1、实现提示职工对象数不必很多,便于一次读入内存,所有操作不经过内外存交换。(1)由键盘输入职工对象,以文件方式保存。程序执行时先将文件读入内存。(2)对职工对象中的姓名按字典顺序进行排序。(3)对排序后的职工对象进行增、删、查询、修改、排序等操作。2 2、系统流程分析(1)输入功能的实现:要想实现职工管理系统的
7、输入,必须要建立一个职总控模块系统处理3 3、系统功能结构模块输出模块测试模块图 1 系统流程图根据职工管理系统问题的分析和设计要求,可以得到该职工管理系统可以分专业资料整理WORD 格式3专业资料整理WORD 格式为五个模块:职工信息添加模块、职工信息修改模块、职工信息删除模块、职工信息查询模块、职工信息排序模块。其系统功能结构如图职工管理系统2 所示。对姓名进行查询对出生年月进行查询对学历进行查询查询职工信息新增职工信息删除职工信息修改职工信息排序职工信息对工作年月进行查询对职务进行查询对住址进行查询对电话进行查询对性别进行排序对工作年月进行排序对出生年月进行排序对姓名进行排序图 2 系统
8、功能结构图4、模块函数构造根据系统功能结构图的描述,可以构造出该系统的抽象数据类型和相对应的函数,其方法名和功能如表模块链表数据类型系统处理模块输出模块1 所示。表 1 函数功能表函数或数据结构typedefstructNodetypedefstructDatatypeListInitiate(SLNode*head)SLNode*ListInsert(SLNode*head,DataTypex)ListDelete(SLNode*head)ListModify(SLNode*head)put(SLNode*head,FILE*fp)Listfind(SLNodehead)Listpaixu(
9、SLNode*head)print(SLNode*head)功能定义链表结点定义职工信息初始化链表插入职工信息删除职工信息修改职工信息保存职工信息查询职工信息职工信息排序显示职工信息专业资料整理WORD 格式4专业资料整理WORD 格式函数中,实现了友好的界面设计。系统需要输入职工的基本信息:姓名、性别、出生年月、工作年月、学历、职务、住址、电话等。这个系统还利用键盘输入提供的主菜单服务,在主菜单中,有七种操作的调用:新增职工信息:SLNode*ListInsert(SLNode*head,DataTypex)查询职工信息:Listfind(SLNodehead)删除职工信息:ListDele
10、te(SLNode*head)if(*head=(SLNode*)malloc(sizeof(SLNode)=NULL)储空间(*head)-next=NULL;exit(1);/动态分配存(3)初始化链表(ListInitiate(SLNode*head))voidListInitiate(SLNode*head)/-链表初始化(2)定义职工信息(typedefstructDatatype)typedefstructlongintborn_time,work_time,tele_num;charnameALLMAX,sex,degreeALLMAX,jobALLMAX,addressALLM
11、AX;DataType;1、抽象数据类型定义第三章详细设计分析(1)定义表结点(typedefstructNode)typedefstructNodelongintborn_time,work_time,tele_num;charsex,nameALLMAX,degreeALLMAX,jobALLMAX,addressALLMAX;structNode*next;SLNode;2、主函数设计(1)根据详细设计要求,可以得到主函数代码及其对应的程序流程图:在主5专业资料整理WORD 格式修改职工信息:ListModify(SLNode*head)职工信息排序:Listpaixu(SLNode*h
12、ead)保存职工信息:put(SLNode*head,FILE*fp)新增职显示职工信息:print(SLNode*head)(2)主函数程序流程图如图3 所示:开始输入职工人数和对应的信息显示主菜单提示工信息选 1选查询3职工信息选职工5信息排序修改职工信息结束系统删除职工信息询操作。这些查询操作分别为:3、查找算法设计选 0选择操作选除上述选选2数字4之外的操作图 3 主函数程序流程图在查询算法中,职工管理系统提供了七种查询操作,实现了系统的人性化查对姓名进行查询,对性别进行查询,对出生年月进行查询,对工作年月进行查询,对学历进行查询,对职位进行查询,对住址进行查询,对电话进行查询等一些列
13、操作。查找算法中,利用链表的指针的移动扫描整个职工信息表,利用专业资料整理WORD 格式strcmp()函数判断字符串是否匹配。6专业资料整理WORD 格式对姓名查询选 1选 0选 3对工作年月查询选 4操作。这些排序操作分别为:对姓名进行排序,对性别进行排序,对出生年月进行排序,对工作年月进行排序,等一些列操作。排序算法中,利用链表的指针的移动扫描整个职工信息表,利用 strcmp()函数判断字符串是否匹配。4、排序算法设计图 4 查询算法程序流程图链表是否为空选 6否对住址查询是无职工信息查询算法程序流程图如图4 所示:显示查询主菜单退出查询选 2 对年龄查询选择执行的操作对职选 5 务查
14、询对学历查询对出生年月查询选 7选择除上述数字之外的操作在排序算法中,职工管理系统提供了四种查询操作,实现了系统的基本排序专业资料整理WORD 格式7专业资料整理WORD 格式排序算法流程图如图5 所示:flag=1;elsep-next=q-next;q-next=p;s-next=q;p=q;q=p-next;排序的核心代码:for(q=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-ne
15、xt;p=head;退出排显示排序菜单是无职工信息链表是否为空否选 0序系统选 3选择操作选 2选1选除上述操作的任意操作对性别排序对工作日期排序对出生日期排序图 5 排序算法程序流程图专业资料整理WORD 格式8专业资料整理WORD 格式第四章源程序代码#include#include#include#include#include#include#include#includeusingnamespacestd;structEmployee/声明职工的结构作为链表节点。/-数据域-stringm_Code;stringm_Name;unsignedshortintm_Year;string
16、m_Sex;stringm_Post;stringm_Department;9专业资料整理WORD 格式/-函数实现-voidDisplay_List(LinkHead);voidDisplay_Node(LinkpNode);LinkModify(LinkHead);LinkDel(LinkHead);voidSave_ByFile(LinkHead,fstream&ofile);LinkSort(LinkHead);LinkCreate(LinkHead);voidRelease(LinkHead);LinkAdd(LinkHead);boolSearch(LinkHead);LinkSe
17、arch_Unique(LinkHead);typedefstructEmployeeNode;typedefNode*Link;structEmployee*Next;unsignedintm_Wage;/链表节点的指针域-/-个人习惯:取别名-/-函数声明-10专业资料整理WORD 格式LinkCreate(LinkHead)/创建一个带头节点的空链表。Head=(Link)newNode;if(!Head)cout分配内存失败!m_Code=;Head-m_Name=;Head-m_Year=0;Head-m_Sex=;Head-m_Post=;Head-m_Department=;He
18、ad-m_Wage=0;Head-Next=NULL;returnHead;voidRelease(LinkHead)/释放链表。11专业资料整理WORD 格式Linkptr;/声明一个操作用的指针。LinkpNew;/coutcode;unsignedintwage;dopNew=(Link)newNode;/数据域。charagain;stringcode,name,sex,post,department;unsignedshortintyear;声明一个新节点。while(Head!=NULL)ptr=Head;Head=Head-Next;deleteptr;/释放节点资源。LinkA
19、dd(LinkHead)/前插法添加数据。12专业资料整理WORD 格式coutendlname;coutendlyear;while(cin.fail()coutyear;coutendl请输入职工性别:coutendl请输入职工职称:coutendl请输入职工部门:coutendlwage;while(cin.fail()cout请输入正确的工资数据。13专业资料整理sex;cinpost;cindepartment;wage;coutm_Code=code;pNew-m_Name=name;pNew-m_Year=year;pNew-m_Sex=sex;pNew-m_Post=post;
20、pNew-m_Department=department;pNew-m_Wage=wage;/指针域。pNew-Next=Head-Next;Head-Next=pNew;coutagain;while(again=Y|again=y);returnHead;boolSearch(LinkHead)14专业资料整理(Y/N)Next;coutdepartment;coutendlname;coutendl-查-endl;coutendlm_Name=name)&(ptr-m_Department=department)Display_Node(ptr);/打印满足条件的节点。returntru
21、e;ptr=ptr-Next;/查询下一节点。15专业资料整理询结endl;果WORD 格式cout无此职工的信息。endl;returnfalse;LinkSearch_Unique_Front(LinkHead)/查询满足“职工代码“的职工信息(职工代码必需唯一)。Linkptr;stringcode;ptr=Head;coutcode;coutendl-查-endl;coutendl职工代码、姓名、出生年份、性别、职称、部门、工资Next)if(ptr-Next-m_Code=code)/Display_Node(ptr);/打印满足条件的节点。returnptr;/注意,是返回的查询到
22、的节点的直接前趋节16专业资料整理询果结WORD 格式点。ptr-Next=ptr-Next-Next;/查询下一节点。returnptr;voidDisplay_List(LinkHead)Linkptr;ptr=Head-Next;cout=endl;coutendlNext;voidDisplay_Node(LinkpNode)所有职工endl;17专业资料整理信息WORD 格式/在标准输出设备上输出。setw(10)leftm_Postsetw(10)leftm_Departmentcoutsetw(10)leftm_Codesetw(10)leftm_Namesetw(10)left
23、m_Yearsetw(10)leftm_Sexsetw(10)leftm_WageNext)cout-你现在可以修改此职工的信息了-endl;LinkModify(LinkHead)/修改单一个节点。Linkptr;ptr=Search_Unique_Front(Head);18专业资料整理WORD 格式coutendl职工代码、姓名、出生年份、性别、职称、部门、工资endl;/数据域。coutcode;coutendlname;coutendlyear;while(cin.fail()coutyear;coutendlsex;coutendlpost;coutendldepartment;1
24、9专业资料整理;endl;WORD 格式coutendlwage;ptr-Next;ptr-Next-m_Name=name;ptr-Next-m_Year=year;ptr-Next-m_Sex=sex;ptr-Next-m_Post=post;ptr-Next-m_Department=department;ptr-Next-m_Wage=wage;cout没找到此职工的记录,无法修改。wage;coutNext-m_Code=code;/因 ptr 是前趋节点,所以要用while(cin.fail()cout请输入正确的工资数据。Next;if(ptr)ptr_front-Next=pt
25、r-Next;deleteptr;/删除此节点。coutNext;ofile.clear();/清除文件结束状态。21专业资料整理endl;WORD 格式while(pNode)ofilesetw(10)leftm_Codesetw(10)leftm_Namesetw(10)leftm_Yearsetw(10)leftm_Sexsetw(10)leftm_Postsetw(10)leftm_Departmentsetw(10)leftm_WageNext;cout数据文件保存成功!Next=NULL)|(Head-Next-Next=NULL)/此步条件判断非常有价值。cout数据节点数少于2
26、 个,不用排序!returnHead;22专业资料整理m_Wageptr_F-Next-m_Wage)ptr-Next=ptr_F-Next;ptr_F-Next=ptr;break;while(ptr_F-Next)ptr_N=ptr-Next;ptr_F=Head;/ptr_F 的归位。ptr=Head-Next-Next;ptr_F=Head;Head-Next-Next=NULL;/到此,分成了两个链表。Linkptr;Linkptr_F;Linkptr_N;/-第二步;/if23专业资料整理WORD 格式if(ptr_F-Next=NULL)ptr-Next=ptr_F-Next;p
27、tr_F-Next=ptr;/表示插到有序链表的最后面了。elseptr_F=ptr_F-Next;/while(ptr_F-Next)ptr=ptr_N;/归位,准备下一次排序。/while(ptr)cout从高到低,排序成功!endl;returnHead;LinkHead=0;intmain()24专业资料整理WORD 格式Head=Create(Head);fstreamiofile;iofile.open(d:iofile.txt,ios_base:in|ios_base:out|ios_base:app);/文件以三种方式打开。if(!iofile)cout打开文件失败!endl;
28、return-1;intmenu;while(1)cout*endl;cout*欢迎进入职工管理系统*endl;cout*endl;coutendl;coutendl;cout主菜单 endl;cout=endl;cout endl;cout25专业资料整理WORD 格式 endl;cout1.注册职工2.修改信息endl;cout3.删除信息4.信息查询endl;cout5.保存文件6.工资排行endl;cout7.信息显示0.退出系统endl;coutendl;coutendl;coutendl;coutendl;coutendlmenu;while(cin.fail()cout请选择正确
29、的菜单选项。menu;26专业资料整理WORD 格式switch(menu)case0:cout成功退出系统!endl;return0;case1:Head=Add(Head);break;case2:Head=Modify(Head);break;case3:Head=Del(Head);break;case4:Search(Head);break;case5:Save_ByFile(Head,iofile);break;case6:Sort(Head);27专业资料整理WORD 格式break;case7:Display_List(Head);break;default:cout请选择正确
30、的菜单项进行操作。多谢合作!endl;Release(Head);iofile.close();return0;第五章系统实现测试是使用人工或者自动手段来运行或测试某个系统的过程验是否满足规定的需求或弄清预期结果与实际结果之间的差别系统运行结果:(1)进入职工管理系统,如图6 所示:28专业资料整理,其目的在于检.WORD 格式图 6 主菜单选择界面(2)新增一职工信息并查询全部职工信息,如图7、8 所示:图 7 新增职工信息界面29专业资料整理WORD 格式图 8 查询职工信息界面(3)修改职工信息并与前面信息对照,如图9 所示:图 9 修改职工信息界面30专业资料整理WORD 格式(4)退
31、出系统,如图10 所示:选择0,退出职工管理系统。图 10退出职工管理系统31专业资料整理WORD 格式第六章课程设计总结本次课程设计的一切实现和代码都是围绕数据结构进行设计的操作的。根据问题的描述可知,需要解决问题并不是很复杂,整个问题只需要实现简单的职工管理系统功能,那就是在这个系统中实现对职工信息的插入、删除、查询、排序、修改以及保存。但是,为了实现该功能,却需要优秀的算法和以数据结构为核心思想作为框架,以保证实现的时间最优化和空间的最大利用化。把职工信息存储在一个单链表中,利用指针实现对职工信息的各项简单的操作。程序在长久的修改和上网查询借鉴的情况下最终完成了题目描述所需要实现的功能,
32、但仍有我认为不足的问题,还有需要改进的地方,就是还可以在排序上面多设计几个算法,实现多方位的排序。我发现在这个系统中没有职工序号或者是工作序号之类的信息,所以允许职工姓名相同,在很大程度上面,可能会出现职工信息有所重复,值得思考和改进并且实现最佳功能。经过这次数据结构课程设计,我们不仅再一次的巩固了我对数据结构、算法、以及软件工程的知识的了解,并更加的明白了数据结构和算法对于程序时间和空间性能的极大影响,及软件工程提供的开发流程和工具对于实现特定功能程序的深远而重大的意义。我们面对一个最现实的问题的时候,应该迅速根据问题性质和特点抽象构成特定的数据结构,用计算机的思维方式来看待,每个问题都有可能能够抽象成多种数据结构,每种数据结构也有可能适应不同的算法。应该全面的考虑这些的数据结构、算法以及它们的空间和时间效率是不是达到最大化的应用和实现,然后从中选择一个最优的作为实现程序的基本框架进行操作和实现。此外,我认为对程序的测试要做到十分的仔细,依据模块的特点和功能,可以进行阶段性的测试和全面性的测试,采用各种软件测试方法对程序进行全方位的进行测试,确保各个模块的正确性和完整性。最终的目的是完整的实现了问题描述中要求的功能和使我们要解决的问题达到最优32化解决。2011 年 12 月 29 日星期四专业资料整理