职工管理系统数据结构课程设计报告_第1页
职工管理系统数据结构课程设计报告_第2页
职工管理系统数据结构课程设计报告_第3页
职工管理系统数据结构课程设计报告_第4页
职工管理系统数据结构课程设计报告_第5页
已阅读5页,还剩7页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

PAGE12-浙江工商大学计算机与信息工程学院数据结构实验大作业报告专业:电子商务班级:商务1202学号:1212200206姓名:陈志伟指导教师:韩建伟2013年5月一、问题分析职工管理系统是一个工作单位不可缺少的管理工具,它管理的数据对于公司的决策者和管理者来说都至关重要,所以职工管理系统应该能够为用户提供充足的信息和快捷的查询手段。作为计算机应用的一部分,使用计算机对职工进行管理,具有手工管理所无法比拟的优点。例如:检索迅速、查找方便、可靠性高、存储量大、保密性好、寿命长、成本低等。这些优点能够极大地提高职工管理的效率,也是公司的科学化、正规化管理和与世界接轨的重要条件。简单的职工管理系统:1、问题描述对单位的职工进行管理,包括插入、删除、查找、排序等功能。2、要求职工对象包括姓名、性别、出生年月、工作年月、学历、职务、住址、电话等信息。(1)新增一名职工:将新增职工对象按姓名以字典方式职工管理文件中。(2)删除一名职工:从职工管理文件中删除一名职工对象。(3)查询:从职工管理文件中查询符合某些条件的职工。(本实验查询的是2000前进入公司的男职工)(4)修改:检索某个职工对象,对其某些属性进行修改。(本实验修改的是某个职工的电话号码)(5)排序:按某种需要对职工对象文件进行排序。(本实验是按照职工工作时间长短排序)3、实现提示职工对象数不必很多,便于一次读入内存,所有操作不经过内外存交换。(1)由键盘输入职工对象,以文件方式保存。程序执行时先将文件读入内存。(2)对职工对象中的"姓名"按字典顺序进行排序。(3)对排序后的职工对象进行增、删、查询、修改、排序等操作。二、概要设计1、输入功能的实现:要想实现职工管理系统的输入,必须要建立一个职工信息系统的抽象数据类型,其中职工信息以链表的存储方式实现。由键盘输入职工对象,以文件方式保存。程序执行时先将文件读入内存。2、系统处理功能的实现:系统管理员根据公司的人员流动情况,在提示信息的提示下,选择相应的服务进行操作。如对职工对象中的"姓名"按字母顺序进行排序;对排序后的职工对象进行增、删、查询、修改、排序等操作。3、输出的实现:根据选择的操作,输出与之对应的信息。由以上条件可以绘制出职工管理功能的系统流程图,如图1所示图1系统流程图4、系统功能结构根据职工管理系统问题的分析和设计要求,可以得到该职工管理系统可以分为五个模块:职工信息添加模块、职工信息修改模块、职工信息删除模块、职工信息查询模块、职工信息排序模块。其系统功能结构如图2所示。图2系统功能结构图5、模块函数构造根据系统功能结构图的描述,可以构造出该系统的抽象数据类型和相对应的函数,其方法名和功能如表1所示。表1函数功能表模块函数或数据结构功能链表数据类型typedefstruct定义链表结点structdataemployee[maxsize]定义职工信息seqlist*creatlist()初始化链表系统处理模块insertlist(seqlist*L)/插入职工信息deletelist(seqlist*L,charName[])删除职工信息updatelist(seqlist*L,chars[],longb)修改职工信息search(seqlist*L,longx)查询职工信息orderstartlist(seqlist*L)职工信息排序输出模块traveselist(seqlist*L)显示职工信息三、详细设计1、抽象数据类型定义(1)定义表结点(typedefstructdate);structdata//单个员工信息{ charname[5];/*姓名*/ charsex[10];/*性别*/ longbirth;/*出生年月*/ longstart;/*开始工作时间*/ chardegree[5];/*学历*/ charjob[10];/*职务*/ charaddress[10];/*住址*/ longtel;/*电话号码*/}employ(2)定义职工信息(typedefstructDatatype)typedefstructtypedefstruct{ structdataemployee[maxsize]; intsize;}seqlist;(3)创建顺序表(seqlist*creatlist())seqlist*creatlist()/*创建顺序表*/{ charNAME[20]; charm[10]={'e','n','d'}; seqlist*L; L=(seqlist*)malloc(sizeof(seqlist));//申请内存的格式和大小,返回申请内存首地址给l L->size=0;2、主函数设计(1)根据详细设计要求,可以得到主函数代码及其对应的程序流程图:在主函数中,实现了友好的界面设计。系统需要输入职工的基本信息:姓名、性别、出生年月、工作年月、学历、职务、住址、电话等。这个系统还利用键盘输入提供的主菜单服务,在主菜单中,有六种操作的调用:新增职工信息:insertlist(seqlist*L)/查询职工信息:search(seqlist*L,longx)删除职工信息:deletelist(seqlist*L,charName[])修改职工信息:updatelist(seqlist*L,chars[],longb)职工信息排序:orderstartlist(seqlist*L)显示职工信息:traveselist(seqlist*L)(2)主函数程序流程图如图3所示:图3主函数程序流程图4、排序算法设计在排序算法中,职工管理系统提供了四种查询操作,实现了系统的基本排序操作。这些排序操作分别为:对姓名进行排序,对性别进行排序,对出生年月进行排序,对工作年月进行排序。排序算法中,利用链表的指针的移动扫描整个职工信息表,利用strcmp()函数判断字符串是否匹配。四、调试分析经验与体会:本次课程设计是围绕数据结构进行。根据问题描述可知,需要解决问题并不复杂,整个问题只需要实现一个职工管理系统功能,那就是在这个系统中实现对职工信息的插入、删除、查询、排序、修改以及保存。但是,为了实现该功能,却需要优秀的算法和数据结构以保证实现的时间和空间效率。把职工信息存储在一个单链表中,利用指针实现对职工信息的各项基本操作。虽然设计的程序完成了题目描述所需要实现的功能,但是仍然存在不如人意的地方,由于技术方面的原因,程序设计的比较单一、简单,每次只能实现单一的功能,但是可以排序上面多设计几个算法,实现多角度排序。在这个系统中没有职工序号的信息,所以允许职工姓名相同,在一定程度上可能存在职工信息重复。我的程序还需要进一步的改进和成熟才能使这套职工管理系统更加的完善。五、测试结果(1)进入职工管理系统,如图6所示:(3)新增一名职工信息并查询全部职工信息,如图8所示:图8新增并查询职工信息界面(4)删除职工信息,如图9所示:图9删除职工信息界面(6)修改职工信息,如图10所示图10职工信息修改界面(7)职工信息排序,如图11所示图11职工信息排序界面2、实验程序:#include<stdio.h>#include<stdlib.h>#include<string.h>#definemaxsize3000structdata//单个员工信息{ charname[5];/*姓名*/ charsex[10];/*性别*/ longbirth;/*出生年月*/ longstart;/*开始工作时间*/ chardegree[5];/*学历*/ charjob[10];/*职务*/ charaddress[10];/*住址*/ longtel;/*电话号码*/}employ;typedefstruct{ structdataemployee[maxsize];//数组用于存储员工信息 intsize;//现有员工人数}seqlist;seqlist*creatlist()/*创建顺序表*/{ charNAME[20]; charm[10]={'e','n','d'}; seqlist*L; L=(seqlist*)malloc(sizeof(seqlist));//申请内存的格式和大小,返回申请内存首地址给l L->size=0; scanf("%s",NAME);//输入一个名字 while(strcmp(NAME,m)!=0)//比较name和m是否相同,不断输入员工信息直到end { strcpy(L->employee[L->size].name,NAME);//将NAME复制给L->employee[L->size].name scanf("%s%ld%ld%s%s%s%ld",L->employee[L->size].sex,&L->employee[L->size].birth,&L->employee[L->size].start,L->employee[L->size].degree,L->employee[L->size].job,L->employee[L->size].address,&L->employee[L->size].tel); L->size++; scanf("%s",NAME); } returnL;}voidordernamelist(seqlist*L)/*将职工信息按名字的字母顺序排序*/{ inti,j; structdatat; for(i=0;i<L->size-1;i++) { for(j=1;j<L->size;j++) { if(strcmp(L->employee[i].name,L->employee[j].name)>0) { t=L->employee[j]; L->employee[j]=L->employee[i]; L->employee[i]=t; } } }}voidinsertlist(seqlist*L)/*插入一个新职工的全部信息*/{ inti=0,j; structdataM; scanf("%s%s%ld%ld%s%s%s%ld",M.name,M.sex,&M.birth,&M.start,M.degree,M.job,M.address,&M.tel); while(strcmp(L->employee[i].name,M.name)<0&&i<L->size) i++; if(i==L->size) L->employee[i]=M; else for(j=L->size-1;j>=i;j--) { strcpy(L->employee[j+1].name,L->employee[j].name); strcpy(L->employee[j+1].sex,L->employee[j].sex); L->employee[j+1].birth=L->employee[j].birth; L->employee[j+1].start=L->employee[j].start; strcpy(L->employee[j+1].degree,L->employee[j].degree); strcpy(L->employee[j+1].address,L->employee[j].address); L->employee[j+1].tel=L->employee[j].tel; strcpy(L->employee[j+1].job,L->employee[j].job);strcpy(L->employee[i].name,M.name); strcpy(L->employee[i].sex,M.sex); L->employee[i].birth=M.birth; L->employee[i].start=M.start; strcpy(L->employee[i].degree,M.degree); strcpy(L->employee[i].address,M.address); L->employee[i].tel=M.tel; strcpy(L->employee[i].job,M.job); } L->size++; return;}voiddeletelist(seqlist*L,charName[])/*删除某一职工的全部信息*/{ inti=0,j; scanf("%s",Name); while(strcmp(L->employee[i].name,Name)!=0&&i<L->size) i++; if(i==L->size) printf("thereisnothisperson"); else for(j=i+1;j<L->size;j++) { L->employee[j-1]=L->employee[j]; } L->size--; return;}voidsearch(seqlist*L,longx)/*查找在2000年之前进入公司的男职员名单*/{ inti; charn[5]={'m','a','l','e'}; for(i=0;i<L->size;i++) { if(L->employee[i].start<2000&&strcmp(L->employee[i].sex,n)==0) printf("%s\t",L->employee[i].name); } printf("\n");}voidupdatelist(seqlist*L,chars[],longb)/*对某员工的电话进行修改*/{ inti=0; while(strcmp(L->employee[i].name,s)!=0&&i<L->size) i++; if(i==L->size) printf("thereisnothisperson"); else { L->employee[i].tel=b; } return;}voidorderstartlist(seqlist*L)/*按进入公司的时间长短对员工信息进行排序,从长到短排*/{ inti,j; structdataN; for(i=0;i<L->size-1;i++) { for(j=1;j<L->size;j++) { if(L->employee[i].start>L->employee[j].start) { N=L->employee[j]; L->employee[j]=L->employee[i]; L->employee[i]=N; } } }}voidtraveselist(seqlist*L)/*输出各员工信息*/{inti; for(i=0;i<L->size;i++) printf("%s\t%s\t%ld\t%ld\t%s\t%s\t%s\t%ld\n",L->employee[i].name,L->employee[i].sex,L->employee[i].birth, L->employee[i].start,L->employee[i].degree,L->employee[i].job,L->employee[i].address,L->employee[i].tel);}intmain(){ charName[20]; chars[20];longb; longx; seqlist*L;printf("请创建一个职工表\n"); printf("姓名\t性别\t出生年月\t工作年月\t学历\t职务\t住址\t电话\n"); L=creatlist(); ordernamelist(L);printf("职工信息按名字的字典顺序排序如下:\n");

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论