员工管理系统C数据结构课程设计Word格式.docx
- 文档编号:18139643
- 上传时间:2022-12-13
- 格式:DOCX
- 页数:19
- 大小:21.13KB
员工管理系统C数据结构课程设计Word格式.docx
《员工管理系统C数据结构课程设计Word格式.docx》由会员分享,可在线阅读,更多相关《员工管理系统C数据结构课程设计Word格式.docx(19页珍藏版)》请在冰豆网上搜索。
从员工管理文件中删除一名员工对象,分为根据编号删除、根据姓名删除。
(3)查询:
从员工管理文件中查询符合某些条件(编号、姓名)的员工。
(4)修改:
根据编号检索出对象,既可以对整个对象修改,也可对某个属性修改。
(5)排序:
按照年龄、工龄对所有的员工排序(降序),也可以回复排序以前的员工现实状态。
2.概要设计
(一)数据类型定义:
#include<
stdio.h>
string.h>
malloc.h>
stdlib.h>
#defineALLMAX100//总共统计的职工的人数
typedefstructNode
{
longintage,work_time,num;
charsex,name[ALLMAX],job[ALLMAX];
structNode*next;
}SLNode;
typedefstruct{
charname[ALLMAX],sex,job[ALLMAX];
}DataType;
(二)主程序流程图
(三)各程序模块之间的层次(调用)图
3.详细设计
1、主菜单模块:
显示员工管理系统的主菜单,供用户选择所需的功能,通过自己定义的voidput()函数来实现。
2、添加员工模块:
输入员工的编号、姓名、年龄、职位、工龄以,通过自己定义的voidaddMessage()函数来实现。
3、查询员工信息模块:
浏览所有员工的相关信息,通过自己定义的voidListfind()函数来实现。
4、删除员工模块:
删除需要删除的员工的所有信息,通过自己定义的voidListDelete()函数来实现。
5、修改模块:
可以修改需要修改的员工的相关信息,通过自己定义的voidListModify()函数来实现。
6、员工信息排序模块:
可以按照规定要求对员工信息排序,通过自己定义的voidsort()函数来实现。
7、退出系统模块。
四、测试过程
1、进入系统如图所示:
2、根据提示信息输入1、增加员工信息:
3、根据提示信息输入3查询员工信息,选择第一种对姓名进行查询做演示:
4,根据提示信息修改员工信息:
5、根据提示信息输入5,选择按编号进行排序:
6、根据提示信息,输入2删除员工信息
五、用户使用说明
进入员工管理系统,首先看到的就是主菜单界面
选择1:
进入添加员工信息模块,按照提示语依次录入员工对象信息。
选择2:
进入删除员工信息模块。
选择3:
进入员工查询模块,在此模块下,系统提示:
按姓名查询、按编号查询,系统根据用户选择进行相应的处理,退出查询模块时,系统进入主菜单模块。
选择4:
进入修改员工信息模块,在该模块下,系统提示:
修改整条信息,修改部分信息,系统根据用户选择,进行相应的功能处理。
当用户选择退出修改模块时,系统进入主菜单模块。
选择5:
进入排序模块,在该模块下,系统提示:
按年龄排序、按工龄排序、回复原排序,系统根据用户的选择,进行相应的处理。
选择0:
退出系统。
六、总结
本次课程设计是围绕数据结构进行。
根据问题描述可知,需要解决问题并不复杂,整个问题只需要实现一个员工管理系统功能,那就是在这个系统中实现对员工信息的插入、删除、查询、排序、修改。
但是,为了实现该功能,却需要优秀的算法和数据结构以保证实现的时间和空间效率。
把员工信息存储在一个单链表中,利用指针实现对员工信息的各项基本操作。
虽然设计的程序完成了题目描述所需要实现的功能,但是仍然存在不如人意的地方,比如可以排序上面多设计几个算法,实现多角度排序等。
经过这次数据结构课程设计,我们不仅及时巩固的了数据结构、算法、以及软件工程的知识,并明白数据结构和算法对于程序时间和空间性能的影响软件开发流程和工具对于实现特定功能程序的重要意义。
当我们面对一个实际问题,应该迅速根据问题性质和特点抽象成特定的数据结构,当然每个问题都有可能能够抽象成多种数据结构,每种数据结构适应于不同的算法。
因此应该综合考虑这样的数据结构、算法以及它们的空间和时间效率,然后从中选择一个作为实现程序的基础。
七、附录
程序源代码
typedefstruct
voidListInitiate(SLNode**head)//链表初始化
if((*head=(SLNode*)malloc(sizeof(SLNode)))==NULL)exit
(1);
//动态分配存储空间
(*head)->
next=NULL;
}
SLNode*ListInsert(SLNode*head,DataTypex)//职工信息的插入姓名并按照升序排列
SLNode*p,*q,*s;
p=head->
next;
if((q=(SLNode*)malloc(sizeof(SLNode)))==NULL)exit
(1);
q->
age=x.age;
work_time=x.work_time;
num=x.num;
strcpy(q->
name,x.name);
sex=x.sex;
job,x.job);
if(head->
next==NULL)
{//如果只有链表的头结点,没有其他的结点,直接插入在头结点后面
head->
next=q;
next->
}
else{//链表非空
for(;
p;
p=p->
next)
{
if(p->
next!
=NULL)
{
if(strcmp(p->
name,x.name)<
0&
&
strcmp(p->
name,x.name)>
0)
{//位于两个结点之间
s=p->
p->
q->
next=s;
break;
}
elseif(strcmp(p->
name,x.name)==0)break;
//如果姓名相同则不插入信息
}
elseif(strcmp(p->
p->
{//链表非空,并且在排序中是最后一个
p->
q->
break;
if(strcmp(p->
{//位于链表头结点之后的位置
s=head->
head->
}
returnhead;
voidListDelete(SLNode*head)//职工信息的删除
SLNode*p,*s;
charx[20];
s=head;
next==NULL){//链表为空,输出:
名单中无职工信息,无须删除!
printf("
无职工信息,无须删除!
\n"
);
return;
printf("
请输入要删除职工的姓名:
//输入要删除的人的姓名
scanf("
%s"
x);
for(p;
next){//在链表中从头到尾查找输入的人的姓名
if(strcmp(p->
name,x)==0){//如果存在,则删除,否则输出:
s->
next=p->
free(p);
printf("
删除成功!
请继续操作!
break;
s=p;
if(p==NULL)
{//链表本身为空
voidListModify(SLNode*head)//职工信息的修改
DataTypex;
SLNode*p;
if(p==NULL){//链表本身为空
无职工信息,无须修改!
请输入要修改的职工姓名:
x.name);
依次写入该职工的新信息:
for(;
{
if(strcmp(x.name,p->
name)==0)//查找到了该职工的信息
姓名\n"
scanf("
getchar();
性别\n"
%c"
&
x.sex);
年龄\n"
%d"
x.age);
工龄\n"
x.work_time);
职务\n"
x.job);
编号\n"
x.num);
%s%c%d%d%s%d\n"
x.name,x.sex,x.age,x.work_time,x.job,x.num);
修改成功!
if(p==NULL)//如果链表为空
此职工不存在!
voidput(SLNode*head,FILE*fp)//职工信息的保存
if((fp=fopen("
职工名单.txt"
"
w"
))==NULL){//
无法打开'
职工名单.txt'
!
exit(0);
for(p=head->
fprintf(fp,"
p->
name,p->
sex,p->
age,p->
work_time,p->
job,p->
num);
if(fclose(fp)){
无法关闭'
exit(0);
voidListfind(SLNodehead)//职工信息的查找
inti,j;
if(head.next==NULL){//链表为空
无职工信息,无法查询!
//返回主菜单
\t******************************************************************\n"
\t*职工信息查询操作*\n"
\t**\n"
\t*0.退出查询系统,回到主菜单*\n"
\t*1.对姓名进行查询*\n"
\t*2.对编号进行查询*\n"
\t*3.对职务进行查询*\n"
while
(1)
请输入您要选择的操作:
"
i);
if(i==0)//输入0,退出查询系统,回到主菜单
elseif(i==1){//输入1,对姓名进行查询
p=head.next;
请输入姓名:
scanf("
j=0;
for(p;
next){
name,x.name)==0){//如果存在这个人,那么j自加
++j;
printf("
if(j==0)//表示没有找到输入的信息
printf("
职工名单中不存在此人!
elseprintf("
查询成功!
elseif(i==2){//输入2,对编号进行查询
请输入编号:
if(p->
num==x.num){//输入的编号在链表中存在
//如果存在这个人,那么j自加
职工名单中没有这个编号的!
elseif(i==3){//输入3,对职务进行查询
请输入职务:
job,x.job)==0){
职工名单中没有这种职务的!
elseif(i!
=0&
i!
=1&
=2&
=3&
=4&
=5&
=6&
=7)//输入任意不是上述数字的,那么久显示输入错误
输入出错!
请再次输入!
//printf("
0.退出查询系统,回到主菜单\n1.对姓名进行查询\n2.对编号进行查询查询\n3.对对职务进行查询\n"
voidprint(SLNode*head)//职工信息的显示
for(SLNode*p=head->
next)//输出所有职工的信息
voidListpaixu(SLNode*head)//职工信息的排序
inti,n=0,m,flag=1;
next==NULL){//职工链表为空
名单中无职工信息,无法排序!
\n\n"
\t\t************************************************\n"
\t\t*职工信息排序操作***\n"
\t\t****\n"
\t\t*0.退出排序系统,回到主菜单***\n"
\t\t*1.对编号进行排序***\n"
\t\t*2.对年龄进行排序***\n"
\t\t*3.显示全部职工信息***\n"
if(i==0)//输入0,退出排序系统,回到主菜单
elseif(i==1){//输入1,对编号进行排序
n=0,m,flag=1;
for(p=head;
NULL!
=p;
next)//统计职工人数
n++;
for(m=1;
flag&
m<
=n;
m++)
{
flag=0;
for(q=head->
next,p=head,s=p;
q;
s=p,p=q,q=q->
{
if(p->
num>
q->
num)//p为当前节点,p的编号>
p的后继节点的编号
{
if(head==p)//p为头结点
{
head->
next=q->
head=q;
q->
next=p;
//交换节点信息
q=head->
p=head;
}
else
{
p->
s->
p=q;
q=p->
flag=1;
}
}
排好序的信息如下:
print(head);
//输出所有节点的信息
return;
elseif(i==2){//输入2,对年龄进行排序
n++)
age>
age)//对年龄进行排序
if(head==p)
n
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 员工 管理 系统 数据结构 课程设计