1、洛 阳 理 工 学 院课 程 设 计 报 告 课程名称 数据结构 设计题目 职员管理系统 课 程 设 计 任 务 书设计题目: 职员管理系统 _设计内容和要求:问题描述 每个职员信息包含:编号、姓名、性别、出生年月、学历、职务、电话、住址等。系统能够完成职员信息查询、更新、插入、删除、排序等功效。基础要求(1) 排序:按不一样关键字,对全部职员信息进行排序。(2) 查询:按特定条件查找职员。(3) 更新:按编号对某个职员某项信息进行修改。(4) 插入:加入新职员信息。 (5) 删除:按编号删除已离职职员信息。课 程 设 计 评 语 成绩: 指导老师:_ 年 月 日序言职员管理系统是一个工作单位
2、不可缺乏管理工具,它管理数据对于企业决议者和管理者来说全部至关关键,所以职员管理系统应该能够为用户提供充足信息和快捷查询手段。但一直以来各个企业基础上全部是靠传统人工方法来管理职员信息,这种管理方法存在着很多缺点,如:效率低、保密性差,另外时间一长,将产生大量文件和数据,这对于信息查找、更新和维护全部带来了不少困难。当今社会,信息快速膨胀,伴随各个企业规模增大,相关信息管理工作所包含数据量越来越大,职员信息量也大大增加,利用传统手工查询、登记、修改等方法处理速度远远跟不上企业需求,有企业不得不靠增加人力、物力来进行信息管理。 伴随计算机技术不停提升,计算机作为知识经济时代产物,其强大功效已为大
3、家深刻认识,它已进入人类社会各个行业和领域并发挥着越来越关键作用,成为大家工作和生活中不可缺乏一部分。而作为计算机应用一部分,使用计算机对职员进行管理,含有手工管理所无法比拟优点。比如:检索快速、查找方便、可靠性高、存放量大、保密性好、寿命长、成本低等。这些优点能够极大地提升职员管理效率,也是企业科学化、正规化管理和和世界接轨关键条件。职员管理系统作为一个管理软件正在各企业中得到越来越广泛应用,且已达成了良好效果。需求分析职员信息管理系统是企业管理中一个关键内容,伴随时代进步,企业也逐步变得庞大起来。怎样管理好企业内部职员信息,成为企业管理中一个大问题。在这种情况下,开发一个人力资源管理系统就
4、显得很必需现在,市场上能够选购应用开发产品很多,流行也有数十种。在现在市场上这些众多程序开发工具中,有些强调程序语言弹性和实施效率;有些则偏重于可视化程序开发工具所带来便利性和效率得高,各有各优点和特色,也满足了不一样用户需求。然而,语言弹性和工具便利性是密不可分,只强调程序语言弹性,却没有便利工具作配合,会使部分即使很简单界面处理动作,也会严重地浪费程序设计师宝贵时间;相反,假如只有便利工具,却没有弹性语言作支持,很多特殊化处理动作必需要花费数倍工夫来处理,使得原来所标榜效率提升优点失去了作用。本系统结合企业实际人事、制度,经过实际需求分析,采取功效强大Visual C+ 6.0作为开发工具
5、而开发出来管理系统。整个系统从符合操作简便、界面友好、灵活、实用、安全要求出发,本管理系统含有以下功效:1、问题描述对单位职员进行管理,包含插入、删除、查找、排序等功效。2、要求职员对象包含姓名、性别、年纪、职位、工龄等信息。(1)新增一名职员:将新增职员对象按姓名以字典方法职员管理文件中,基础信息中编号是根据添加次序自动增加。(2)删除一名职员:从职员管理文件中删除一名职员对象,分为依据编号删除、依据姓名删除。(3)查询:从职员管理文件中查询符合一些条件(编号、姓名)职员。(4)修改:依据编号检索出对象,既能够对整个对象修改,也可对某个属性修改。(5)排序:根据年纪、工龄对全部职员排序(降序
6、),也能够回复排序以前职员现实状态。3、实现提醒职员对象数无须很多,便于一次读入内存,全部操作不经过内外存交换。(1)当开启程序是,自动从文件(message.txt)中读出职员信息(2)由键盘输入职员对象存入链表当中。(3)对职员对象中编号、年纪、工龄按字典次序进行排序。(4)对排序后职员对象进行增、删、查询、修改、排序等操作。(5)当退出程序时,将此刻单链表中存放数据写入到文件(message.txt)中去,保留起来。概要设计(一)数据类型定义:typedef structint num; /编号 char nameMAX_NUM;/姓名 int age; /年纪 char jobMAX_
7、NUM;/职位; int workTime;/ 工龄 People; ypedef struct nodePeople people;struct node * next;int len;/表示链表长度 linklist; (二)步骤图:(图1)(三)各程序模块之间层次图:(图2)具体设计1、主菜单模块:显示职员管理系统主菜单,供用户选择所需功效,经过自己定义void main()函数来实现。 2、添加职员模块:输入职员编号、姓名、年纪、职位、工龄以,经过自己定义void addMessage()函数来实现。3、查询职员信息模块:浏览全部职员相关信息,经过自己定义void searchPeop
8、le()函数来实现。(1)按职员姓名查询:能够按职员工号来查询职员相关信息,经过自己定义void searchPeopleByName( )函数来实现。(2)按职员编号查询:能够按职员职务来查询职员相关信息,经过自己定义void searchPeopleByNum( )函数来实现。(3)退出。4、删除职员模块:删除需要删除职员全部信息,经过自己定义void deletePeople( )函数来实现。(1)按职员姓名删除模块:能够按职员工号来删除职员相关信息,经过自己定义void deletePeopleByName( )函数来实现。(2)按职员编号删除模块:能够按职员编号删除职员相关信息,经过
9、自己定义void deletePeopleByNum( )函数来实现。(3)退出5、修改模块:能够修改需要修改职员相关信息,经过自己定义 void editMessage()函数来实现。(1)修改整条统计,能够修改该职员全部信息,经过自己定义voideditAll()函数来实现。(2)修改部分统计,能够修改该职员部分信息,经过自己定义voideditSome()函数来实现。(3)退出。、职员信息排序模块:能够根据要求要求对职员信息排序,经过自己定义voidsort()函数来实现。(1)按年纪排序:能够按职员工号对职员信息排序,经过自己定义voidsortByAge()函数来。(2)按工龄排序:
10、能够按职员工龄对职员信息排序,经过自己定义voidsortByWorkTime()函数来实现。(3)回复原排序:能够回复排序前次序,经过自己定义voidsortByNum()函数来实现。(4)退出。、退出系统模块:退出职员信息管理系统,通exit(0)函数来实现。函数调用图:(图3)测试结果(一)当操作人员运行程序时,弹出DOS界面以下:(二)依据提醒语,输入1,添加职员信息,操作以下界面:(三)在主菜单输入2,进入输出职员功效,操作以下:添加职员、展示全部职员信息功效实现。(四)在主菜单输入3,查询职员信息按编号查询,测试以下:按姓名查询,测试以下:以上查询功效测试功效。(五)在主菜单,输入
11、4,删除职员功效:按编号删除,测试以下:按姓名删除以下:以上测试完成。(六)在主菜单输入5,进入修改信息功效:(七)在主菜单输入6,进入排序功效:按年纪排序,测试以下:按工龄排序相同操作,测试成功。回复排序,回复到未排序状态,测试成功。(八)退出,将全部职员信息写入message.txt 文件中,实现永久保留。退出系统,测试完成。总结在本系统开发过程中因为时间也比较仓促、准备不充足,系统肯定会存在部分缺点和不足。对职员信息管理整个步骤不够熟悉,在需求分析时未能做到完全满足用户需求。课程设计中我们碰到很多问题。我们在开发时,我们查阅了很多资料,了解到即是对职员编号号,姓名,年纪,工龄等复杂多样信
12、息,能够较清楚,快捷而操作方便现代化管理系统。搞清了这个基础概念以后,我们又具体了解了老师所讲设计要求和注意事项,大致确定了总体设计思绪,初步提出问题处理方案,和系统大致设计方案和框架,接下来我们就着手编程。在编程过程中,先是依据系统所要求,找出所需要知识点。编完程序,我们在机房进行了一次又一次调试,找出了其中错误,一一纠正,而且修改了其中不太完善部分,努力争取做到实用而且正确尽管本管理系统存在着很多不足,但其功效全方面、易于以后程序更新、数据库管理轻易、界面友好、操作方便、效率高、安全性好等优点是本管理系统所必需。经过开发这个系统,我组掌握了项目基础开发过程,用到知识巩固了我对C语言学习,但
13、在这次设计中最大收获并不是掌握这几门开发工具应用,而是学会了设计系统思维方法。经过此次课程设计,我们对数据结构知识掌握了很多,并能将它用以程序编写中,而且提升了自己处理实际问题能力。-附录:源代码#includestdio.h#includestdlib.h#include string.h#define TRUE 1#define FALSE 0#define OK 1#define ERROR 0#define OVERFLOW -2typedef struct LNodechar id20;char name10;char sex10;char birth10;char edu10;ch
14、ar duty10;char phone20;char address30;struct LNode *next;LNode,*Linklist;/定义节点类型int CreatList(Linklist &L)Linklist p;p=(Linklist)malloc(sizeof(LNode);if(!p)return (0);elseprintf(请输入职员编号n);scanf(%s,p-id); printf(请输入职员姓名n);scanf(%s,p-name); printf(请输入职员性别n); scanf(%s,p-sex); printf(请输入职员生日n);scanf(%s,
15、p-birth); printf(请输入职员学历n); scanf(%s,p-edu); printf(请输入职员职务n);scanf(%s,p-duty);printf(请输入职员电话n);scanf(%s,p-phone); printf(请输入职员地址n);scanf(%s,p-address);p-next=L-next;L-next=p;/头插法生成单链表int Initlist(Linklist &L)L=(Linklist)malloc(sizeof(LNode);if(!L)return (0);L-next=NULL;return OK;/初始化单链表void Display
16、(Linklist &L)Linklist p;for(p=L-next;p;p=p-next)printf(编号 %sn,p-id);printf(姓名 %sn,p-name);printf(性别 %sn,p-sex);printf(生日 %sn,p-birth);printf(学历 %sn,p-edu);printf(职务 %sn,p-duty);printf(电话 %sn,p-phone);printf(地址 %sn,p-address); printf(=n);/显示全部职员信息int SearchID(Linklist &L,char id20)LNode *p;p=L;while(
17、p)if(strcmp(p-id,id)=0)printf(编号 %sn,p-id);printf(姓名 %sn,p-name);printf(性别 %sn,p-sex);printf(生日 %sn,p-birth);printf(学历 %sn,p-edu);printf(职务 %sn,p-duty);printf(电话 %sn,p-phone);printf(地址 %sn,p-address);p=p-next;return OK;/ID查询int SearchName(Linklist &L,char name10)LNode *p;p=L;while(p)if(strcmp(p-name
18、,name)=0)printf(编号 %sn,p-id);printf(姓名 %sn,p-name);printf(性别 %sn,p-sex);printf(生日 %sn,p-birth);printf(学历 %sn,p-edu);printf(职务 %sn,p-duty);printf(电话 %sn,p-phone);printf(地址 %sn,p-address);p=p-next;return OK;/姓名查询void SortID(Linklist &L ,char id20) Linklist La;Linklist p,q,m; La=(Linklist)malloc(sizeof
19、(LNode);La-next =NULL;while(L-next) for(q=L-next ,p=L-next ;p-next ;p=p-next )if(strcmp( p-next-id,q-id )0 )m=p;q=p-next ; if(q=L-next)L-next =L-next-next ;elsem-next =q-next ;q-next =La-next ;La-next =q ;L=La;Display(L);/编号排序void SortName(Linklist &L ,char name10) Linklist La;Linklist p,q,m; La=(Li
20、nklist)malloc(sizeof(LNode);La-next =NULL;while(L-next) for(q=L-next ,p=L-next ;p-next ;p=p-next )if(strcmp( p-next-name,q-name )0 )m=p;q=p-next ; if(q=L-next)L-next =L-next-next ;elsem-next =q-next ;q-next =La-next ;La-next =q ;L=La;Display(L);/姓名排序void SortSex(Linklist &L ,char sex10) Linklist La;
21、Linklist p,q,m; La=(Linklist)malloc(sizeof(LNode);La-next =NULL;while(L-next) for(q=L-next ,p=L-next ;p-next ;p=p-next )if(strcmp( p-next-sex,q-sex)0 )m=p;q=p-next ; if(q=L-next)L-next =L-next-next ;elsem-next =q-next ;q-next =La-next ;La-next =q ;L=La;Display(L);/性别排序void SortBirth(Linklist &L ,cha
22、r birth10) Linklist La;Linklist p,q,m; La=(Linklist)malloc(sizeof(LNode);La-next =NULLwhile(L-next) for(q=L-next ,p=L-next ;p-next ;p=p-next )if(strcmp( p-next-birth,q-birth )0 )m=p;q=p-next ; if(q=L-next)L-next =L-next-next ;elsem-next =q-next ;q-next =La-next ;La-next =q ;L=La;Display(L);/出生年月排序vo
23、id SortEdu(Linklist &L ,char edu10) Linklist La;Linklist p,q,m; La=(Linklist)malloc(sizeof(LNode);La-next =NULL;while(L-next) for(q=L-next ,p=L-next ;p-next ;p=p-next )if(strcmp( p-next-edu,q-edu )0 )m=p;q=p-next ; if(q=L-next)L-next =L-next-next ;elsem-next =q-next ;q-next =La-next ;La-next =q L=La
24、;Display(L);/学历排序void SortDuty(Linklist &L ,char duty10) Linklist La;Linklist p,q,m; La=(Linklist)malloc(sizeof(LNode);La-next =NULL;while(L-next) for(q=L-next ,p=L-next ;p-next ;p=p-next )if(strcmp( p-next-duty,q-duty )0 )m=p;q=p-next ; if(q=L-next)L-next =L-next-next ;elsem-next =q-next ;q-next =L
25、a-next ;La-next =q ;L=La;Display(L);/职务排序void SortPhone(Linklist &L ,char phone20) Linklist La;Linklist p,q,m; La=(Linklist)malloc(sizeof(LNode);La-next =NULL;while(L-next) for(q=L-next ,p=L-next ;p-next ;p=p-next )if(strcmp( p-next-phone,q-phone )0 )m=p;q=p-next ; if(q=L-next)L-next =L-next-next ;e
26、lsem-next =q-next ;q-next =La-next ;La-next =q L=La;Display(L);/电话排序void SortAddress(Linklist &L ,char address30) Linklist La;Linklist p,q,m; La=(Linklist)malloc(sizeof(LNode);La-next =NULL;while(L-next) for(q=L-next ,p=L-next ;p-next ;p=p-next )if(strcmp( p-next-address,q-address )0 )m=p;q=p-next ;
27、 if(q=L-next)L-next =L-next-next ;elsem-next =q-next ;q-next =La-next ;La-next =q ;L=La;Display(L);/地址排序int Alter(Linklist &L,char id20)LNode *p;p=L;while(p)if(strcmp(p-id,id)=0)printf(请输入职员编号n);scanf(%s,p-id); printf(请输入职员姓名n);scanf(%s,p-name);printf(请输入职员性别n);scanf(%s,p-sex);printf(请输入职员生日n);scanf
28、(%s,p-birth);printf(请输入职员学历n);scanf(%s,p-edu);printf(请输入职员职务n);scanf(%s,p-duty);printf(请输入职员电话n);scanf(%s,p-phone);printf(请输入职员地址n);scanf(%s,p-address);p=p-next;return OK;/更改int Del(Linklist &L,char id20)LNode *p;LNode *r;p=L-next;r=L;while(!(strcmp(p-id,id)=0)&p)r=p;p=p-next;if(!p)printf(n删除位置不合理n)
29、;elser-next=p-next; free(p);printf(删除成功n);return OK;/按ID删除/主函数void main()Linklist L;int a;char m;char name10; char id20; char sex10;char birth10;char edu10;char duty10;char phone20;char address30;Initlist(L);int y;int x=1;while(x)printf(=n);printf(欢迎进入职员管理系统!n);printf(=n);printf(1-添加职员信息n);printf(2-
30、查询职员信息n);printf(3-排序职员信息n);printf(4-显示全部职员信息n);printf(5-更改职员信息n);printf(6-删除职员信息n);printf(7-退出n);printf(请选择操作序号并按回车:);scanf(%d,&y);switch(y)case 1: CreatList(L);doprintf(是否继续输入?(y/n);getchar();scanf(%c,&m);if(m=y)CreatList(L);while(m!=n);break;case 2: printf(请输入查询方法(1按编号查询,2按姓名查找);scanf(%d,&a);if(a=
31、1)printf(请输入查询职员编号n);scanf(%s,&id);SearchID(L,id);if(a=2)printf(请输入查询职员姓名n);scanf(%s,&name);SearchName(L,name);break;case 3: printf(请选择排序条件:1.编号2.姓名3.性别4.出生年月5.学历6.职务7.电话8.地址0.退出n); scanf(%d,&a);if(a=1)printf(编号排序n); SortID(L,id); if(a=2)printf(姓名排序n); SortName(L,name); if(a=3)printf(性别排序n);SortSex(
32、L,sex); if(a=4)printf(出生年月排序n); SortBirth(L,birth); if(a=5)printf(姓名排序n); SortDuty(L,duty); if(a=6)printf(姓名排序n); SortEdu(L,edu); if(a=7)printf(姓名排序n); SortPhone(L,phone); if(a=8)printf(姓名排序n); SortAddress(L,address); break case 4: printf(全部职员信息以下所表示n);Display(L);break;case 5: printf(请输入更改职员编号);getchar();scanf(%s,&id);Alter(L,id);break;case 6: printf(请输入删除职员编号);getchar();scanf(%s,&id);Del(L,id);break;case 7: x=0;break;default:printf(请输入正确序号!n);break;