ImageVerifierCode 换一换
格式:DOCX , 页数:19 ,大小:21.11KB ,
资源ID:7596768      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/7596768.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(员工管理系统C数据结构课程设计.docx)为本站会员(b****6)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

员工管理系统C数据结构课程设计.docx

1、员工管理系统C数据结构课程设计数据结构课程设计报告班级 14计科1班姓名 陈乾学号课题名称 员工管理系统完成日期一、 目的(本次 课程设计 所涉及并要求掌握的知识点。)1、 理解线性表的定义、顺序存储结构和链式存储结构。2、 理解线性表的逻辑结构特征。3、 掌握线性表的两种存储方法(顺序表和链式表),并体会两者差异。4、 掌握线性表的表示和实现。5、 学会使用线性表解决一些相关的实际问题。二、使用环境 Microsoft Visual C+ 6.0三、正文 1需求分析员工信息管理系统是企业管理中的一个重要内容,随着时代的进步,企业也逐渐变得庞大起来。如何管理好企业内部员工的信息,成为企业管理中

2、的一个大问题。在这种情况下,开发一个人力资源管理系统就显得非常必要。现在,市场上可以选购的应用开发产品很多,流行的也有数十种。在目前市场上这些众多的程序开发工具中,有些强调程序语言的弹性与执行效率,有些则偏重于可视化程序开发工具所带来的便利性与效率的得高,各有各的优点和特色,也满足了不同用户的需求。然而,语言的弹性和工具的便利性是密不可分的,只强调程序语言的弹性,却没有便利的工具作配合,会使一些即使非常简单的界面处理动作,也会严重地浪费程序设计师的宝贵时间;相反,如果只有便利的工具,却没有弹性的语言作支持,许多特殊化的处理动作必需要耗费数倍的工夫来处理,使得原来所标榜的效率提高的优点失去了作用

3、。结合现实生活中企业的相关情况,经过实际的需求分析,采用功能强大的Microsoft Visual C+ 6.0作为开发工具而开发出本系统。整个系统具有操作简便、界面友好、灵活、实用、安全等特点,并具有如下功能:1、问题描述:对单位的员工进行管理,包括插入、删除、查找、排序等功能。2、要求:员工对象包括姓名、性别、年龄、职位、工龄等信息。(1)新增一名员工:将新增员工对象按姓名以字典方式员工管理文件中,基本信息中的编号是按照添加顺序自动增加的。(2)删除一名员工:从员工管理文件中删除一名员工对象,分为根据编号删除、根据姓名删除。(3)查询:从员工管理文件中查询符合某些条件(编号、姓名)的员工。

4、(4)修改:根据编号检索出对象,既可以对整个对象修改,也可对某个属性修改。(5)排序:按照年龄、工龄对所有的员工排序(降序),也可以回复排序以前的员工现实状态。2概要设计(一)数据类型定义:#include #include #include #include #define ALLMAX 100 /总共统计的职工的人数typedef struct Node long int age,work_time,num; char sex,nameALLMAX,jobALLMAX; struct Node *next;SLNode;typedef struct long int age,work_ti

5、me,num; char nameALLMAX,sex,jobALLMAX;DataType;(二)主程序流程图(三)各程序模块之间的层次(调用)图3详细设计1、主菜单模块:显示员工管理系统的主菜单,供用户选择所需的功能,通过自己定义的void put( )函数来实现。 2、添加员工模块:输入员工的编号、姓名、年龄、职位、工龄以,通过自己定义的void addMessage( )函数来实现。3、查询员工信息模块:浏览所有员工的相关信息,通过自己定义的void Listfind ( )函数来实现。4、删除员工模块:删除需要删除的员工的所有信息,通过自己定义的void ListDelete ( )

6、函数来实现。5、修改模块:可以修改需要修改的员工的相关信息,通过自己定义的void ListModify( )函数来实现。6、员工信息排序模块:可以按照规定要求对员工信息排序,通过自己定义的void sort( )函数来实现。7、退出系统模块。四、测试过程1、进入系统如图所示:2、根据提示信息输入1、增加员工信息:3、根据提示信息输入3查询员工信息,选择第一种对姓名进行查询做演示:4,根据提示信息修改员工信息:5、根据提示信息输入5,选择按编号进行排序:6、根据提示信息,输入2删除员工信息五、用户使用说明 进入员工管理系统,首先看到的就是主菜单界面选择1:进入添加员工信息模块,按照提示语依次录

7、入员工对象信息。选择2:进入删除员工信息模块。选择3:进入员工查询模块,在此模块下,系统提示:按姓名查询、按编号查询,系统根据用户选择进行相应的处理,退出查询模块时,系统进入主菜单模块。选择4:进入修改员工信息模块,在该模块下,系统提示:修改整条信息,修改部分信息,系统根据用户选择,进行相应的功能处理。当用户选择退出修改模块时,系统进入主菜单模块。选择5:进入排序模块,在该模块下,系统提示:按年龄排序、按工龄排序、回复原排序,系统根据用户的选择,进行相应的处理。选择0:退出系统。六、总结 本次课程设计是围绕数据结构进行。根据问题描述可知,需要解决问题并不复杂,整个问题只需要实现一个员工管理系统

8、功能,那就是在这个系统中实现对员工信息的插入、删除、查询、排序、修改。但是,为了实现该功能,却需要优秀的算法和数据结构以保证实现的时间和空间效率。把员工信息存储在一个单链表中,利用指针实现对员工信息的各项基本操作。虽然设计的程序完成了题目描述所需要实现的功能,但是仍然存在不如人意的地方,比如可以排序上面多设计几个算法,实现多角度排序等。经过这次数据结构课程设计,我们不仅及时巩固的了数据结构、算法、以及软件工程的知识,并明白数据结构和算法对于程序时间和空间性能的影响软件开发流程和工具对于实现特定功能程序的重要意义。当我们面对一个实际问题,应该迅速根据问题性质和特点抽象成特定的数据结构,当然每个问

9、题都有可能能够抽象成多种数据结构,每种数据结构适应于不同的算法。因此应该综合考虑这样的数据结构、算法以及它们的空间和时间效率,然后从中选择一个作为实现程序的基础。七、附录程序源代码#include #include #include #include #define ALLMAX 100 /总共统计的职工的人数typedef struct Node long int age,work_time,num; char sex,nameALLMAX,jobALLMAX; struct Node *next;SLNode;typedef struct long int age,work_time,nu

10、m; char nameALLMAX,sex,jobALLMAX;DataType;void ListInitiate(SLNode *head)/链表初始化 if(*head=(SLNode *)malloc(sizeof(SLNode)=NULL) exit(1);/动态分配存储空间 (*head)-next=NULL;SLNode *ListInsert(SLNode *head,DataType x)/职工信息的插入姓名并按照升序排列 SLNode *p,*q,*s; p=head-next; if(q=(SLNode *)malloc(sizeof(SLNode)=NULL) exi

11、t(1);/动态分配存储空间 q-age=x.age; q-work_time=x.work_time; q-num=x.num; strcpy(q-name,x.name); q-sex=x.sex; strcpy(q-job,x.job); if(head-next=NULL) /如果只有链表的头结点,没有其他的结点,直接插入在头结点后面 head-next=q; head-next-next=NULL; else/链表非空 for(;p;p=p-next) if(p-next!=NULL) if(strcmp(p-name,x.name)next-name,x.name)0) /位于两个

12、结点之间 s=p-next; p-next=q; q-next=s; break; else if(strcmp(p-name,x.name)=0)break; /如果姓名相同则不插入信息 else if(strcmp(p-name,x.name)next=NULL) /链表非空,并且在排序中是最后一个 p-next=q; q-next=NULL; break; if(strcmp(p-name,x.name)0) /位于链表头结点之后的位置 s=head-next; head-next=q; q-next=s; break; return head;void ListDelete(SLNod

13、e *head)/职工信息的删除 SLNode *p,*s; char x20; s=head; 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); print

14、f(删除成功!请继续操作!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,x.name); printf(依次写入该职工的新信息:n); for(;p;p=p-next) if(strcmp(x.name,p-name)=0)

15、/查找到了该职工的信息 printf(姓名n); scanf(%s,x.name); getchar(); printf(性别n); scanf(%c,&x.sex); printf(年龄n); scanf(%d,&x.age); printf(工龄n); scanf(%d,&x.work_time); printf(职务n); scanf(%s,x.job); printf(编号n); scanf(%d,&x.num); printf(%s %c %d %d %s %dn,x.name,x.sex,x.age,x.work_time,x.job,x.num); printf(修改成功!请继续

16、操作!n); break; if(p=NULL)/如果链表为空 printf(此职工不存在!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,p-num); if(fclose(fp) printf(无法关闭职工名单.txt

17、!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(t* *n); printf(t* 0.退出查询系统,回到主菜单 *n); printf(t* 1.对姓名进行查询 *n); printf(t* 2.对编号进行查询 *n); printf(t* 3.对职务

18、进行查询 *n); printf(t*n); while(1) printf(请输入您要选择的操作:); scanf(%d,&i); if(i=0)/输入0,退出查询系统,回到主菜单 break; else if(i=1)/输入1,对姓名进行查询 p=head.next; printf(请输入姓名:); scanf(%s,x.name); j=0; for(p;p;p=p-next) if(strcmp(p-name,x.name)=0)/如果存在这个人,那么j自加 +j; printf(%s %c %d %d %s %dn,p-name,p-sex,p-age,p-work_time,p-j

19、ob,p-num); if(j=0)/表示没有找到输入的信息 printf(职工名单中不存在此人!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-work_time,p-job,p-num); if(j=0)/

20、表示没有找到输入的信息 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 %d %d %s %dn,p-name,p-sex,p-age,p-work_time,p-job,p-num); if(j=0)/表示没有找到输入的信息 printf(职

21、工名单中没有这种职务的!n); else printf(查询成功!请继续操作!n); else if(i!=0 & i!=1 & i!=2 & i!=3 & i!=4 & i!=5 & i!=6 & 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(

22、t* 3.对职务进行查询 *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-num);void Listpaixu(SLNode *head)/职工信息的排序 int i,n=0,m,flag=1; SLN

23、ode *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.对编号进行排序 *n); printf(tt* 2.对年龄进行排序 *n); printf(tt* 3.显示全部职工信息 *n); printf(tt*n); while(1) printf(请输入您要选择的操作:); scanf(%d,&i); if(

24、i=0)/输入0,退出排序系统,回到主菜单 break; else if(i=1)/输入1,对编号进行排序 n=0,m,flag=1; for(p=head;NULL!=p;p=p-next)/统计职工人数 n+; for(m=1;flag&mnext,p=head,s=p;q;s=p,p=q,q=q-next) if(p-numq-num)/p为当前节点,p的编号p的后继节点的编号 if(head=p)/p为头结点 head-next=q-next; head=q; q-next=p;/交换节点信息 q=head-next; p=head; else p-next=q-next; q-nex

25、t=p; s-next=q; p=q; q=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&mnext,p=head,s=p;q;s=p,p=q,q=q-next) if(p-ageq-age)/对年龄进行排序 if(head=p) head-next=q-next; head=q; q-next=p; q=head-next; p=head; else p-next=q-next;

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1