




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、精选优质文档-倾情为你奉上数据结构课程设计报告班级 14计科1班姓名 陈乾学号课题名称 员工管理系统完成日期2015.12.28一、 目的(本次 课程设计 所涉及并要求掌握的知识点。)1、 理解线性表的定义、顺序存储结构和链式存储结构。2、 理解线性表的逻辑结构特征。3、 掌握线性表的两种存储方法(顺序表和链式表),并体会两者差异。4、 掌握线性表的表示和实现。5、 学会使用线性表解决一些相关的实际问题。6、二、使用环境 Microsoft Visual C+ 6.0三、正文 1需求分析员工信息管理系统是企业管理中的一个重要内容,随着时代的进步,企业也逐渐变得庞大起来。如何管理好企业内部员工的
2、信息,成为企业管理中的一个大问题。在这种情况下,开发一个人力资源管理系统就显得非常必要。现在,市场上可以选购的应用开发产品很多,流行的也有数十种。在目前市场上这些众多的程序开发工具中,有些强调程序语言的弹性与执行效率,有些则偏重于可视化程序开发工具所带来的便利性与效率的得高,各有各的优点和特色,也满足了不同用户的需求。然而,语言的弹性和工具的便利性是密不可分的,只强调程序语言的弹性,却没有便利的工具作配合,会使一些即使非常简单的界面处理动作,也会严重地浪费程序设计师的宝贵时间;相反,如果只有便利的工具,却没有弹性的语言作支持,许多特殊化的处理动作必需要耗费数倍的工夫来处理,使得原来所标榜的效率
3、提高的优点失去了作用。结合现实生活中企业的相关情况,经过实际的需求分析,采用功能强大的Microsoft Visual C+ 6.0作为开发工具而开发出本系统。整个系统具有操作简便、界面友好、灵活、实用、安全等特点,并具有如下功能:1、问题描述:对单位的员工进行管理,包括插入、删除、查找、排序等功能。2、要求:员工对象包括姓名、性别、年龄、职位、工龄等信息。(1)新增一名员工:将新增员工对象按姓名以字典方式员工管理文件中,基本信息中的编号是按照添加顺序自动增加的。(2)删除一名员工:从员工管理文件中删除一名员工对象,分为根据编号删除、根据姓名删除。(3)查询:从员工管理文件中查询符合某些条件(
4、编号、姓名)的员工。(4)修改:根据编号检索出对象,既可以对整个对象修改,也可对某个属性修改。(5)排序:按照年龄、工龄对所有的员工排序(降序),也可以回复排序以前的员工现实状态。2概要设计(一)数据类型定义:#include <stdio.h>#include <string.h>#include <malloc.h>#include <stdlib.h>#define ALLMAX 100 /总共统计的职工的人数typedef struct Nodelong int age,work_time,num;char sex,nameALLMAX,
5、jobALLMAX;struct Node *next;SLNode;typedef structlong int age,work_time,num;char nameALLMAX,sex,jobALLMAX;DataType;(二)主程序流程图(三)各程序模块之间的层次(调用)图3详细设计1、主菜单模块:显示员工管理系统的主菜单,供用户选择所需的功能,通过自己定义的void put( )函数来实现。 2、添加员工模块:输入员工的编号、姓名、年龄、职位、工龄以,通过自己定义的void addMessage( )函数来实现。3、查询员工信息模块:浏览所有员工的相关信息,通过自己定义的void
6、Listfind ( )函数来实现。4、删除员工模块:删除需要删除的员工的所有信息,通过自己定义的void ListDelete ( )函数来实现。5、修改模块:可以修改需要修改的员工的相关信息,通过自己定义的void ListModify( )函数来实现。6、员工信息排序模块:可以按照规定要求对员工信息排序,通过自己定义的void sort( )函数来实现。7、退出系统模块。四、测试过程1、进入系统如图所示:2、根据提示信息输入1、增加员工信息:3、根据提示信息输入3查询员工信息,选择第一种对姓名进行查询做演示:4,根据提示信息修改员工信息:5、根据提示信息输入5,选择按编号进行排序:6、根
7、据提示信息,输入2删除员工信息五、用户使用说明 进入员工管理系统,首先看到的就是主菜单界面选择1:进入添加员工信息模块,按照提示语依次录入员工对象信息。选择2:进入删除员工信息模块。选择3:进入员工查询模块,在此模块下,系统提示:按姓名查询、按编号查询,系统根据用户选择进行相应的处理,退出查询模块时,系统进入主菜单模块。选择4:进入修改员工信息模块,在该模块下,系统提示:修改整条信息,修改部分信息,系统根据用户选择,进行相应的功能处理。当用户选择退出修改模块时,系统进入主菜单模块。选择5:进入排序模块,在该模块下,系统提示:按年龄排序、按工龄排序、回复原排序,系统根据用户的选择,进行相应的处理
8、。选择0:退出系统。六、总结 本次课程设计是围绕数据结构进行。根据问题描述可知,需要解决问题并不复杂,整个问题只需要实现一个员工管理系统功能,那就是在这个系统中实现对员工信息的插入、删除、查询、排序、修改。但是,为了实现该功能,却需要优秀的算法和数据结构以保证实现的时间和空间效率。把员工信息存储在一个单链表中,利用指针实现对员工信息的各项基本操作。虽然设计的程序完成了题目描述所需要实现的功能,但是仍然存在不如人意的地方,比如可以排序上面多设计几个算法,实现多角度排序等。经过这次数据结构课程设计,我们不仅及时巩固的了数据结构、算法、以及软件工程的知识,并明白数据结构和算法对于程序时间和空间性能的
9、影响软件开发流程和工具对于实现特定功能程序的重要意义。当我们面对一个实际问题,应该迅速根据问题性质和特点抽象成特定的数据结构,当然每个问题都有可能能够抽象成多种数据结构,每种数据结构适应于不同的算法。因此应该综合考虑这样的数据结构、算法以及它们的空间和时间效率,然后从中选择一个作为实现程序的基础。七、附录程序源代码#include <stdio.h>#include <string.h>#include <malloc.h>#include <stdlib.h>#define ALLMAX 100 /总共统计的职工的人数typedef struc
10、t Nodelong int age,work_time,num;char sex,nameALLMAX,jobALLMAX;struct Node *next;SLNode;typedef structlong int age,work_time,num;char nameALLMAX,sex,jobALLMAX;DataType;void ListInitiate(SLNode *head)/链表初始化if(*head=(SLNode *)malloc(sizeof(SLNode)=NULL) exit(1);/动态分配存储空间(*head)->next=NULL;SLNode *L
11、istInsert(SLNode *head,DataType x)/职工信息的插入姓名并按照升序排列SLNode *p,*q,*s;p=head->next;if(q=(SLNode *)malloc(sizeof(SLNode)=NULL) exit(1);/动态分配存储空间q->age=x.age; q->work_time=x.work_time;q->num=x.num; strcpy(q->name,);q->sex=x.sex; strcpy(q->job,x.job);if(head->next=NULL)/如果只有链
12、表的头结点,没有其他的结点,直接插入在头结点后面head->next=q;head->next->next=NULL;else/链表非空for(;p;p=p->next)if(p->next!=NULL)if(strcmp(p->name,)<0&&strcmp(p->next->name,)>0)/位于两个结点之间s=p->next;p->next=q;q->next=s;break;else if(strcmp(p->name,)=0)break; /如果
13、姓名相同则不插入信息else if(strcmp(p->name,)<0&&p->next=NULL)/链表非空,并且在排序中是最后一个p->next=q;q->next=NULL;break;if(strcmp(p->name,)>0)/位于链表头结点之后的位置s=head->next;head->next=q;q->next=s;break;return head;void ListDelete(SLNode *head)/职工信息的删除SLNode *p,*s;char x20;s=hea
14、d;p=head->next;if(head->next=NULL)/链表为空,输出:名单中无职工信息,无须删除!printf("无职工信息,无须删除!n");return;printf("请输入要删除职工的姓名:n"); /输入要删除的人的姓名scanf("%s",x);for(p;p;p=p->next)/在链表中从头到尾查找输入的人的姓名if(strcmp(p->name,x)=0)/如果存在,则删除,否则输出:名单中无职工信息,无须删除!s->next=p->next;free(p);pri
15、ntf("删除成功!请继续操作!n");break;s=p;if(p=NULL)/链表本身为空printf("无职工信息,无须删除!n");void ListModify(SLNode *head)/职工信息的修改DataType x;SLNode *p;p=head->next;if(p=NULL)/链表本身为空printf("无职工信息,无须修改!n");return;printf("请输入要修改的职工姓名:n");scanf("%s",);printf("依次写
16、入该职工的新信息:n");for(;p;p=p->next)if(strcmp(,p->name)=0)/查找到了该职工的信息printf("姓名n"); scanf("%s",); getchar(); printf("性别n"); scanf("%c",&x.sex); printf("年龄n"); scanf("%d",&x.age); printf("工龄n"); scanf("
17、;%d",&x.work_time); printf("职务n"); scanf("%s",x.job); printf("编号n"); scanf("%d",&x.num); printf("%s %c %d %d %s %dn",,x.sex,x.age,x.work_time,x.job,x.num); printf("修改成功!请继续操作!n");break;if(p=NULL)/如果链表为空printf("此职工不存在
18、!n");void put(SLNode *head,FILE *fp)/职工信息的保存SLNode *p;if(fp=fopen("职工名单.txt","w")=NULL)/printf("无法打开'职工名单.txt'!n");exit(0);for(p=head->next;p;p=p->next)fprintf(fp,"%s %c %d %d %s %dn",p->name,p->sex,p->age,p->work_time,p->job,
19、p->num);if(fclose(fp)printf("无法关闭'职工名单.txt'!n"); exit(0);void Listfind(SLNode head)/职工信息的查找int i,j;SLNode *p;DataType x;if(head.next=NULL)/链表为空printf("无职工信息,无法查询!n");return;/返回主菜单printf("n");printf("t*n");printf("t* 职工信息查询操作 *n");printf(&q
20、uot;t* *n");printf("t* 0.退出查询系统,回到主菜单 *n"); printf("t* 1.对姓名进行查询 *n");printf("t* 2.对编号进行查询 *n"); printf("t* 3.对职务进行查询 *n"); printf("t*n");while(1)printf("请输入您要选择的操作:");scanf("%d",&i);if(i=0)/输入0,退出查询系统,回到主菜单break;else if(
21、i=1)/输入1,对姓名进行查询p=head.next;printf("请输入姓名:");scanf("%s",);j=0;for(p;p;p=p->next)if(strcmp(p->name,)=0)/如果存在这个人,那么j自加+j;printf("%s %c %d %d %s %dn",p->name,p->sex,p->age,p->work_time,p->job,p->num);if(j=0)/表示没有找到输入的信息printf("职工名单中
22、不存在此人!n");else printf("查询成功!请继续操作!n");else if(i=2)/输入2,对编号进行查询p=head.next;printf("请输入编号:");scanf("%d",&x.num);j=0;for(p;p;p=p->next)if(p->num=x.num)/输入的编号在链表中存在+j;/如果存在这个人,那么j自加printf("%s %c %d %d %s %dn",p->name,p->sex,p->age,p->wor
23、k_time,p->job,p->num);if(j=0)/表示没有找到输入的信息printf("职工名单中没有这个编号的!n");else printf("查询成功!请继续操作!n");else if(i=3)/输入3,对职务进行查询p=head.next;printf("请输入职务:");scanf("%s",x.job);j=0;for(p;p;p=p->next)if(strcmp(p->job,x.job)=0)+j;/如果存在这个人,那么j自加printf("%s %c
24、 %d %d %s %dn",p->name,p->sex,p->age,p->work_time,p->job,p->num);if(j=0)/表示没有找到输入的信息printf("职工名单中没有这种职务的!n");else printf("查询成功!请继续操作!n");else if(i!=0 && i!=1 && i!=2 && i!=3 && i!=4 && i!=5 && i!=6 &&
25、i!=7)/输入任意不是上述数字的,那么久显示输入错误printf("输入出错!请再次输入!n");printf("n");printf("t*n");printf("t* 职工信息查询操作 *n");printf("t* *n");printf("t* 0.退出查询系统,回到主菜单 *n"); printf("t* 1.对姓名进行查询 *n");printf("t* 2.对编号进行查询 *n"); printf("t* 3.
26、对职务进行查询 *n"); printf("t*n");/printf("0.退出查询系统,回到主菜单n1.对姓名进行查询n 2.对编号进行查询查询n3.对对职务进行查询n"); void print(SLNode *head)/职工信息的显示for(SLNode *p=head->next;p;p=p->next)/输出所有职工的信息printf("%s %c %d %d %s %dn",p->name,p->sex,p->age,p->work_time,p->job,p->
27、;num);void Listpaixu(SLNode *head)/职工信息的排序int i,n=0,m,flag=1;SLNode *p,*q,*s;if(head->next=NULL)/职工链表为空printf("名单中无职工信息,无法排序!nn");return;printf("tt*n");printf("tt* 职工信息排序操作 *n");printf("tt* *n"); printf("tt* 0.退出排序系统,回到主菜单 *n");printf("tt* 1.
28、对编号进行排序 *n");printf("tt* 2.对年龄进行排序 *n");printf("tt* 3.显示全部职工信息 *n");printf("tt*n");while(1)printf("请输入您要选择的操作:");scanf("%d",&i);if(i=0)/输入0,退出排序系统,回到主菜单break;else if(i=1)/输入1,对编号进行排序n=0,m,flag=1;for(p=head;NULL!=p;p=p->next)/统计职工人数n+; for
29、(m=1;flag&&m<=n;m+) flag=0; for(q=head->next,p=head,s=p;q;s=p,p=q,q=q->next)if(p->num>q->num)/p为当前节点,p的编号>p的后继节点的编号if(head=p)/p为头结点 head->next=q->next; head=q; q->next=p;/交换节点信息q=head->next;p=head;elsep->next=q->next; q->next=p; s->next=q; p=q; q=
30、p->next; flag=1; printf("排好序的信息如下:n");print(head);/输出所有节点的信息return;else if(i=2)/输入2,对年龄进行排序n=0,m,flag=1;for(p=head;NULL!=p;p=p->next)/统计职工人数n+; for(m=1;flag&&m<=n;n+) flag=0; for(q=head->next,p=head,s=p;q;s=p,p=q,q=q->next)if(p->age>q->age)/对年龄进行排序if(head=p)
31、 head->next=q->next; head=q; q->next=p;q=head->next;p=head;elsep->next=q->next; q->next=p; s->next=q; p=q; q=p->next; flag=1;printf("排好序的信息如下:n");print(head);return;else if(i=3)print(head);else if(i!=0&&i!=1&&i!=2&&i!=3)printf("输入出错!请
32、再次输入!nn");printf("tt*n");printf("tt* 职工信息排序操作 *n");printf("tt* *n"); printf("tt* 0.退出排序系统,回到主菜单 *n");printf("tt* 1.对编号进行排序 *n");printf("tt* 2.对年龄进行排序 *n");printf("tt* 3.显示全部职工信息 *n");printf("tt*n");/printf("0.退
33、出排序系统,回到主菜单n1.对编号进行排序n2.对年龄进行排序n3.显示n"); void main()DataType x;SLNode *head;int i,n;FILE *fp;ListInitiate(&head);/初始化链表printf("n");printf("*n"); printf(" 欢迎进入南京晓庄学院员工管理系统 n");printf("*n"); printf("n"); printf(" n"); printf(" *
34、 1、增加员工信息 2、删除员工信息 *n"); printf(" * 3、查询员工信息 4、修改员工信息 *n");printf(" * 5、员工信息排序 0、退出系统 *n"); printf(" n");while(1) printf("请输入您要选择的操作:");scanf("%d",&i);if(i=0)/输入0,结束系统printf("tt您已经选择退出职工管理系统n");break;else if(i=1)/输入1,新增一名职工 printf("姓名n");scanf("%s",);getchar();printf("性别n");scanf("%c",&x.sex);printf("年龄n");scanf("%d",&x.age);printf("工龄n");scanf("%d",&x.work_time);printf("职务n&quo
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 自动驾驶法规标准化研究-洞察阐释
- 2025智能硬件销售合同协议范本
- 详尽财产分配与子女教育抚养责任离婚协议
- 2025年某市区房屋租赁合同范本
- 2025个性化家具定制合同
- 2025合同范本合同审批与签署流程详解
- 护理实践中的裸体护理方法
- 2025年无线通信设备的租赁合同
- 2025四川省水果种植产销合同
- 武理工《水处理生物学》教学大纲
- 《沁园春 长沙》课件22张 统编版高中语文必修上册
- 幼儿园突发事件应急处置流程图
- 日立电梯常用零配件价格清单
- 《新能源材料与器件》教学课件-04电化学能源材料与器件
- 中考英语写作指导优秀课件(共22张)
- DBJ51∕T 153-2020 四川省附着式脚手架安全技术标准
- 安全生产三字经
- 二次供水工程技术规程(CJJ140—2010 )
- 整车数据展示,汽车设计资料
- 加芯搅拌桩技术规程 YB-2007
- 中华口腔医学会修复专委会专科会员入会申请表
评论
0/150
提交评论