




免费预览已结束,剩余23页可下载查看
下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
分类号 编 号 华北*大学North China Institute of Water Conservancy and Hydroelectric Power 课 程 设 计题目 职工管理系统 院 系 信息工程学院 专 业 计算机科学与技术 姓 名 * 学 号 2011100000 指 导 教 师 杨 * 2012年7月 6 日目 录目录11 需求分析21.1 问题描述21.2 要求21.3 实现功能32 概要设计32.1 输入功能实现32.2 系统处理功能实现32.3 输出功能实现32.4 系统功能结构42.5 模块函数构造42.6 模块间调用关系53 详细设计53.1 抽象数据类型定义53.2 主函数设计63.3 查找算法设计63.4 显示算法设计94 测试与分析95 用户使用说明126 总结13参考文献13附录:程序源代码1411 需求分析职工管理系统是一个工作单位不可缺少的管理工具,它管理的数据对于公司的决策者和管理者来说都至关重要,所以职工管理系统应该能够为用户提供充足的信息和快捷的查询手段。但一直以来各个公司基本上都是靠传统的人工方式来管理职工信息,这种管理方式存在着许多缺点,如:效率低、保密性差,另外时间一长,将产生大量的文件和数据,这对于信息的查找、更新和维护都带来了不少的困难。当今社会,信息迅速膨胀,随着各个公司的规模增大,有关信息管理工作所涉及的数据量越来越大,职工信息量也大大增加,利用传统的手工查询、登记、修改等方法的处理速度远远跟不上公司的需求,有的公司不得不靠增加人力、物力来进行信息管理。 随着计算机技术的不断提高,计算机作为知识经济时代的产物,其强大的功能已为人们深刻认识,它已进入人类社会的各个行业和领域并发挥着越来越重要的作用,成为人们工作和生活中不可缺少的一部分。而作为计算机应用的一部分,使用计算机对职工进行管理,具有手工管理所无法比拟的优点。例如:检索迅速、查找方便、可靠性高、存储量大、保密性好、寿命长、成本低等。这些优点能够极大地提高职工管理的效率,也是公司的科学化、正规化管理和与世界接轨的重要条件。职工管理系统作为一种管理软件正在各公司中得到越来越广泛的应用,且已达到了良好效果。简单的职工管理系统:1.1 问题描述对单位的职工进行管理,包括插入、删除、查找、排序等功能。1.2 要求职工对象包括姓名(字符串)、性别(字符)、出生年月(数字)、工作年月(数字)、学历(字符串)、职务(字符串)、住址(字符串)、电话(字符串)等信息。(1)新增一名职工:将新增职工对象按姓名以字典方式职工管理文件中。(2)删除一名职工:从职工管理文件中删除一名职工对象。(3)查询:从职工管理文件中查询符合某些条件的职工。(4)修改:检索某个职工对象,对其某些属性进行修改。(5)排序:按某种需要对职工对象文件进行排序。1.3 实现功能(1)由键盘输入职工对象,以文件方式保存。程序执行时先将文件读入内存。(2)对职工对象中的“姓名”按字典顺序进行排序。(3)对排序后的职工对象进行增、删、查询、修改、排序等操作。2 概要设计 2.1输入功能的实现:要想实现职工管理系统的输入,必须要建立一个职工信息系统的抽象数据类型,其中职工信息以链表的存储方式实现。由键盘输入职工对象,以文件方式保存。程序执行时先将文件读入内存。2.2 系统处理功能的实现:系统管理员根据公司的人员流动情况,在提示信息的提示下,选择相应的服务进行操作。如对职工对象中的姓名按字典顺序进行排序;对排序后的职工对象进行增、删、查询、修改、排序等操作。2.3 输出功能的实现:根据选择的操作,输出与之对应的信息。综上可以绘制出职工管理功能的系统流程图,如图1所示图1 系统流程图2.4 系统功能结构根据职工管理系统问题的分析和设计要求,可以得到该职工管理系统可以分为五个模块:职工信息添加模块、职工信息修改模块、职工信息删除模块、职工信息查询模块、职工信息排序模块。其系统功能结构如图2所示。 职工管理系统 职工信息查询修改职工信息删除职工信息职工信息排序添加职工信息按姓名排序按职位查询按地址查询按学历查询按工作生日查询序按出生日期查询按姓名查询按出生日期排序图2 系统功能结构图2.5 模块函数构造根据系统功能结构图的描述,可以构造出该系统的抽象数据类型和相对应的函数,其方法名和功能如表1所示。 表1 函数功能表模块函数或数据结构功能链表数据类型typedef struct Enode定义链表结点void InitLst(Employee *&head)初始化链表系统处理模块void FirstInsert(Employee *&head)插入职工信息int DeleteByName(Employee *&head,char *name)删除职工信息int AlterLst(Employee *&head,char *name)修改职工信息int Save(Employee *&head)保存职工信息int Load(Employee *&head)加载职工信息void Search(Employee *&head,int &n)查询职工信息void SortByBorn(Employee *&head)职工信息排序输出模块void Display(Employee *&head)显示职工信息2.6 模块间调用关系根据需求分析和概要分析,可得出职工管理系统的各模块调用关系。如图2所示void main( )void FirstInsert(Employee *&head)void InitLst(Employee *&head)void Display(Employee *&head)int Save(Employee *&head)void Run(Employee *&head)int DeleteByName(Employee*&head,char *name)int Load(Employee *&head)void SortByBorn(Employee *&head)intAlterLst(Employee *&head,char *name)void Search(Employee*&head,int &n)图3 模块调用关系图3 详细设计3.1抽象数据类型定义(1)定义表结点(typedef struct Enode)typedef struct Enode /职工结点类型 char EnameMAXSIZE; /姓名 char sex3; /性别 char bornDate11; /出生日期 char workDate11; /工作日期 char degreeMAXSIZE; /学历 char jobMAXSIZE; /职位 char addressMAXSIZE;/地址 char teleNum12; /电话号码 Enode *next; Employee; (2)初始化链表(void InitLst(Employee *&head)void InitLst(Employee *&head) /初始化职工链表 head =(Employee *)malloc(sizeof(Employee); head-next=NULL;3.2 主函数设计(1)根据详细设计要求,可以得到主函数代码及其对应的程序流程图:在主函数中,实现了友好的界面设计。系统需要输入职工的基本信息:姓名、性别、出生年月、工作年月、学历、职务、住址、电话等。这个系统还利用键盘输入提供的主菜单服务,在主菜单中,有七种操作的调用:新增职工信息:void FirstInsert(Employee *&head) /添加职工信息查询职工信息:void Search(Employee *&head,int &n)/按属性查找职工删除职工信息:int DeleteByName(Employee *&head,char *name)/根据姓名删除修改职工信息:int AlterLst(Employee *&head,char *name)/修改职工信息职工信息排序:void SortByBorn(Employee *&head)/按出生日期排序(选择法) void SortByName(Employee *&head) /按姓名排序(冒泡法)保存职工信息:int Save(Employee *&head) /将职工信息保存到文件中显示职工信息:void Display(Employee *&head) /显示职工信息函数代码见附录3.3 查找算法设计在查询算法中,职工管理系统提供了七种查询操作,实现了系统的人性化查询操作。这些查询操作分别为:对姓名进行查询,对性别进行查询,对出生年月进行查询,对工作年月进行查询,对学历进行查询,对职位进行查询,对住址进行查询,对电话进行查询等一些列操作。查找算法中,利用链表的指针的移动扫描整个职工信息表,利用strcmp()函数判断字符串是否匹配。查询算法的核心代码为:void Search(Employee *&head,int &n)/按给定信息查找职工 if( head =NULL |head-next=NULL) return ; int flag=0;Employee *p=head-next;switch(n)case 2:char born11;coutborn;cin.ignore();while(p)if(strcmp(p-bornDate,born)=0)Print(p);flag=1;p=p-next;if(!flag)cout不存在此职工!;break;case 3:char work11;coutwork;cin.ignore();while(p)if(strcmp(p-workDate,born)=0)Print(p);flag=1;p=p-next;if(!flag)cout不存在此职工!;break;case 4:char degreeMAXSIZE;coutdegree;cin.ignore();while(p)if(strcmp(p-degree,degree)=0)Print(p);flag=1;p=p-next;if(!flag)cout不存在此职工!;break;case 5:char jobMAXSIZE;coutjob;cin.ignore();while(p)if(strcmp(p-job,job)=0)Print(p);flag=1;p=p-next;if(!flag)cout不存在此职工!;break;case 6:char addressMAXSIZE;coutaddress;cin.ignore();while(p)if(strcmp(p-address,address)=0)Print(p);flag=1;p=p-next;if(!flag)coutnext=NULL)cout职工信息为空!next;cout职工信息如下:endl;cout*;cout*endl;cout.setf(ios:left,ios:adjustfield);coutsetw(10)姓名;coutsetw(6)性别;coutsetw(12)出生日期;coutsetw(12)工作日期;coutsetw(8)学历;coutsetw(8)职位;coutsetw(8)地址;coutsetw(12)电话号码endl;while(p)cout.setf(ios:left,ios:adjustfield);coutsetw(10)Ename;coutsetw(6)sex;coutsetw(12)bornDate;coutsetw(12)workDate;coutsetw(8)degree;coutsetw(8)job;coutsetw(8)address;coutsetw(12)teleNumnext;4 测试与分析测试是使用人工或者自动手段来运行或测试某个系统的过程,其目的在于检验是否满足规定的需求或弄清预期结果与实际结果之间的差别。职工信息有:姓名、性别、出生年月、工作年月、学历、职务、住址、电话。在数据输入时注意数据类型:现有6组测试数据:姓名、性别、出生年月、工作年月、学历、职务、住址、电话胡文云 女 1990-06 2010-11 本科 职工 新乡 1234李明 男 1988-09 2010-11 研究生 经理 郑州 123456思彤 女 1988-11 2011-11 研究生 经历 郑州 12435654王芳 女 1990-11 2010-11 研究生 经历 许昌 12435654月牙 女 1987-09 2009-11 本科 经理 新郑 123687赵灵歌 女 1989-09 2011-11 本科 职工 郑州 123系统运行结果:4.1 进入职工管理系统主界面:图 4 进入职工管理系统主界面4.2 选择6显示文件中的所有职工信息: 图 5 显示职工信息4.3 选择4进入查询子菜单,查询给定信息的职工:图6显示查询子菜单(1)选择1查询给定姓名为李明的职工的信息:图7显示姓名为李明的所有职工的信息(2) 选择2查询出生日期为1990-11的所有职工的信息:图8显示出生日期为1990-11所有职工的信息选择3查询工作日期为2010-11的所有职工的信息:(3) 选择4查询学历为研究生的所有职工的信息:图9显示学历为研究生所有职工的信息(4) 选择5查询职位为职工的职工的信息:图10显示职位为职工所有职工的信息(5) 选择6查询地址为郑州的所有职工的信息:图11显示地址为郑州的所有职工的信息五 用户使用说明进入职工管理系统,首先看到的就是欢迎界面,提示:选择1添加职工信息,按提示,按次序依次输入职工的姓名、性别、出生年月、工作年月、学历、职务、电话的信息(注意是依次输入,中间可以用空格,tab,回车做切换输入),输完信息后自动回到主界面,根据提示:-1.退出管理系统 1.添加职工信息2.删除职工信息3.修改职工信息4.查询职工信息5.选条件排序6.显示职工信息,输入相应操作的数字,如-1,退出职工管理系统;如1,提示依次输入职工信息,录入完毕自动返回主界面;如2,提示输入要删除的职工的姓名,成功正确返回,错误有提示信息删除失败;如3,提示输入要修改信息的职工姓名,然后进行依次修改职工所有信息;如4,提示查询方式,进入查询子菜单:0.退出查询子菜单,回到主菜单1.按姓名查询2.按出生日期查询3.按工作日期查询,4.按学历查询5,按职位查询6按地址查询,输入相应编号进行查询;如5,提示方式排序,进入排序子菜单:0.退出排序系统子菜单,回到主菜单1.按姓名排序2.按出生日期排序;如6,显示系统内所有职工信息;6 总结本次课程设计是围绕数据结构进行。根据问题描述可知,需要解决问题并不复杂,整个问题只需要实现一个职工管理系统功能,那就是在这个系统中实现对职工信息的插入、删除、查询、排序、修改以及保存。但是,为了实现该功能,却需要优秀的算法和数据结构以保证实现的时间和空间效率。把职工信息存储在一个单链表中,利用指针实现对职工信息的各项基本操作。虽然设计的程序完成了题目描述所需要实现的功能,但是仍然存在不如人意的地方。那就是可以排序上面多设计几个算法。实现多角度排序。在这个系统中没有职工序号的信息,所以允许职工姓名相同,在很大程度上面,可能是的职工信息重复。经过这次数据结构课程设计,我们不仅及时巩固的了数据结构、算法、以及软件工程的知识,并明白数据结构和算法对于程序时间和空间性能的影响,及软件工程提供的开发流程和工具对于实现特定功能程序的重要意义。当我们面对一个实际问题,应该迅速根据问题性质和特点抽象成特定的数据结构,当然每个问题都有可能能够抽象成多种数据结构,每种数据结构适应于不同的算法。因此应该综合考虑这样的数据结构、算法以及它们的空间和时间效率,然后从中选择一个作为实现程序的基础。此外,对程序的测试应该要仔细,根据模块的特点和测试阶段,采用各种软件测试方法对程序进行测试,确保各个模块的正确性和完整性,最后集成起来测试其是否正确和完整地实现了问题描述中要求的功能。参考文献:1 李云清,杨庆红,揭安全.数据结构(C语言版)M.北京:人民邮电大学出版社,2004.62 潘彦.算法设计与分析基础M.北京:清华大学出版社,2007.13 肖梦强,曲秀清.软件工程原理、方法与应用 M.北京:中国水利水电出版社,2005.104 吕凤翥.C+语言程序设计(第2版)M.北京:电子工业出版社,2007.25 严蔚敏,吴伟民.数据结构(C语言版)M.北京:清华大学出版社,2002.96 谭浩强.C程序设计(第四版)M.北京.清华大学出版社,2010.6附录:程序源代码:#include #include #include #include #include #include /头文件#define MAXSIZE 20typedef struct Enode char EnameMAXSIZE; /姓名 char sex3; /性别 char bornDate11; /出生日期 char workDate11; /工作日期 char degreeMAXSIZE; /学历 char jobMAXSIZE; /职位 char addressMAXSIZE;/地址 char teleNum12; /电话号码 Enode *next; Employee; /职工结点类型void InitLst(Employee *&head) /初始化职工链表 head =(Employee *)malloc(sizeof(Employee); head-next=NULL;int CheckSex(char* s) /检查性别是否合法if(strcmp(s,男)=0| strcmp(s,女)=0)return 1;else return 0;int CheckName(Employee *&head,char *name)/检查姓名是否合法 Employee *p=head-next; if(name=NULL) return 1; else while(p) if(strcmp(p-Ename,name)=0) return 1; p=p-next; return 0 ;void Print(Employee *&p) /用以输出满足查询条件的职工信息coutendl;cout.setf(ios:left,ios:adjustfield);coutsetw(10)Ename;coutsetw(6)sex;coutsetw(12)bornDate;coutsetw(12)workDate;coutsetw(8)degree;coutsetw(8)job;coutsetw(8)address;coutsetw(12)teleNumnext=NULL;cout请输入职工相关信息:endl;cin.ignore();coutp-Ename; cin.ignore();while( head-next !=NULL & CheckName(head,p-Ename) coutp-Ename; cin.ignore();coutp-sex;cin.ignore();while(!CheckSex(p-sex)coutp-sex;cin.ignore();coutp-bornDate;cin.ignore();coutp-workDate;cin.ignore();coutp-degree;cin.ignore();coutp-job;cin.ignore();coutp-address;cin.ignore(); coutp-teleNum;cin.ignore();p-next=head-next;head-next=p;cout信息插入成功!next=NULL | name=NULL)return 0; Employee *p=head,*q;while(p-next) /查找结点if(strcmp(name,p-next-Ename)=0) /找到了,就删除q=p-next;p-next=q-next;free(q);break;p=p-next;if(p-next=NULL) /没找到return 0;return 1;Employee * Tail(Employee *&head) /查找链表尾结点,用以每次加载文件时按顺序生成链表 Employee *p; p=head; while(p-next) p=p-next; return p;Employee* SearchByName(Employee *&head,char *name)/按姓名查找职工if( head =NULL |head-next=NULL) return NULL;if(name =NULL)return NULL;else Employee *p=head-next; while(p) if(strcmp(p-Ename,name)=0) return p; p=p-next; return NULL;void Search(Employee *&head,int &n)/按其他信息查找职工 if( head =NULL |head-next=NULL) return ; int flag=0;Employee *p=head-next;switch(n)case 2:char born11;coutborn;cin.ignore();while(p)if(strcmp(p-bornDate,born)=0)Print(p);flag=1;p=p-next;if(!flag)cout不存在此职工!;break;case 3:char work11;coutwork;cin.ignore();while(p)if(strcmp(p-workDate,born)=0)Print(p);flag=1;p=p-next;if(!flag)cout不存在此职工!;break;case 4:char degreeMAXSIZE;coutdegree;cin.ignore();while(p)if(strcmp(p-degree,degree)=0)Print(p);flag=1;p=p-next;if(!flag)cout不存在此职工!;break;case 5:char jobMAXSIZE;coutjob;cin.ignore();while(p)if(strcmp(p-job,job)=0)Print(p);flag=1;p=p-next;if(!flag)cout不存在此职工!;break;case 6:char addressMAXSIZE;coutaddress;cin.ignore();while(p)if(strcmp(p-address,address)=0)Print(p);flag=1;p=p-next;if(!flag)coutnext=NULL| name=NULL)return 0;Employee *p;char teleNum11,addressMAXSIZE,degreeMAXSIZE,jobMAXSIZE;if(p=SearchByName(head,name)!=NULL)cout请输入可修改信息:endl;coutteleNum;cin.ignore();coutaddress;cin.ignore();coutjob;cin.ignore();coutdegree;cin.ignore();strcpy(p-address,address);strcpy(p-degree,degree);strcpy(p-teleNum,teleNum);strcpy(p-job,job);return 1;return 0;void Display(Employee *&head) /显示职工信息if(head-next=NULL)cout职工信息为空!next;cout职工信息如下:endl;cout*;cout*endl;cout.setf(ios:left,ios:adjustfield);coutsetw(10)姓名;coutsetw(6)性别;coutsetw(12)出生日期;coutsetw(12)工作日期;coutsetw(8)学历;coutsetw(8)职位;coutsetw(8)地址;coutsetw(12)电话号码endl;while(p)cout.setf(ios:left,ios:adjustfield);coutsetw(10)Ename;coutsetw(6)sex;coutsetw(12)bornDate;coutsetw(12)workDate;coutsetw(8)degree;coutsetw(8)job;coutsetw(8)address;coutsetw(12)teleNumnext;void SortByName(Employee *&head) /按姓名排序(冒泡法)Employee *p,*q,*temp;Employee *tHead=(Employee *)malloc(sizeof(Employee);tHead-next=NULL; while(head-next)for(q=head-next,p=head-next;p-next;p=p-next) if(strcmp(p-next-Ename,q-Ename)0)temp=p;q=p-next;if(q=head-next)head-next=head-next-next;elsetemp-next=q-next; q-next=tHead-next;tHead-next=q;head=tHead;/*void SortByBorn(Employee *&head)Employee *p,*q,*temp;Employee *tHead=(Employee *)malloc(sizeof(Employee);tHead-next=NULL; while(head-next)for(q=head-next,p=head-next;p-next;p=p-next) if(strcmp(p-next-bornDate,q-bornDate)next;if(q=head-next)head-next=head-next-next;elsetemp-next=q-next; q-next=tHead-next;tHead-next=q;head=tHead;cout排序后的职工信息是:next) flag=0;m=p-next;for(pt=m,q=m-next;q!=NULL;q=q-next,pt=pt-next)if(strcmp(m-bornDate,q-bornDate)next-next!=m) t=m-next;m-next=p-next-next;p-next-next=t;pre-next=p-next; elsep-next-next=m-next;m-next=p-next;p-next=m;p=p-next;/int Save(Employee *&head) /将职工信息保存到文件中 FILE* fp = fopen(Employee.txt,wb);if(fp=NULL)return 0;Employee * p = head-next;while(p)fwrite(p,sizeof(Employee),1,fp);/每次写入一条信息p = p-next;fclose(fp);return 1;int Load(Employee *&head) /程序运行时,加载文件生成链表FILE* fp = fopen(Employee.txt,rb);if(fp=NULL)return 0;int n;while(!feof(fp)Employee *p=(Employee *)malloc(sizeof(Employee);n = fread(p,sizeof(Employee),1,fp);/每次读出一条信息if(n!=1)break;Tail(head)-next=p;/尾插法生成链表p-next=NULL;fclose(fp); return 1; /void ShowMenu() /显示程序主菜单char *strMenu=1、添加职工信息,2、删除职工信息, 3、修改职工信息,4、查询职工信息,5、选择条件排序,6、显示职工信息,-1、退出应用程序;for(int i=0;i7;i+)cout.setf(ios:right,ios:adjustfield);cout.width(45);coutstrMenuiendl;in
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 第9课 IP地址与DHCP 学习任务单 2025-2026学年七年级上册信息技术浙教版
- 冀教版(2024)数学一年级上册第三单元《认识11-20》单元测试卷(基础卷)(含解析)
- 外阴白斑与氧化损伤-洞察及研究
- 2025年公需科目:专业技术人员人文素养和科学素养的培育考试题(含答案)
- 2025年高压电工考试题库(附答案)
- 2025年高压电工(高压试验技术操作)考试题库与解析
- 2025年高校辅导员考试的综合素质分析试题及答案
- 2025年高级会计师考试试题及答案
- 避险逃生试题及答案
- 教师招聘科目题库及答案
- 大学普通化学-课件文档
- 西师大版六年级上册数学全册教案(教学设计)
- 特种设备安全管理的化工设备安全
- 九年级全一册英语单词默写表(人教版)
- 2025年4s店代步车使用协议(三篇)
- 司法鉴定异议书的格式与范本
- 学校食堂服务承诺书
- 《浅析人工智能的伦理关切与治理研究》3100字(论文)
- 2025年中国石油集团招聘笔试参考题库含答案解析
- 海洋平台设备防腐施工方案
- 创新产品设计方法论
评论
0/150
提交评论