C语言课程设计职工信息管理系统单链表实现程序源代码Word文档格式.docx

上传人:b****5 文档编号:19512297 上传时间:2023-01-07 格式:DOCX 页数:21 大小:20.89KB
下载 相关 举报
C语言课程设计职工信息管理系统单链表实现程序源代码Word文档格式.docx_第1页
第1页 / 共21页
C语言课程设计职工信息管理系统单链表实现程序源代码Word文档格式.docx_第2页
第2页 / 共21页
C语言课程设计职工信息管理系统单链表实现程序源代码Word文档格式.docx_第3页
第3页 / 共21页
C语言课程设计职工信息管理系统单链表实现程序源代码Word文档格式.docx_第4页
第4页 / 共21页
C语言课程设计职工信息管理系统单链表实现程序源代码Word文档格式.docx_第5页
第5页 / 共21页
点击查看更多>>
下载资源
资源描述

C语言课程设计职工信息管理系统单链表实现程序源代码Word文档格式.docx

《C语言课程设计职工信息管理系统单链表实现程序源代码Word文档格式.docx》由会员分享,可在线阅读,更多相关《C语言课程设计职工信息管理系统单链表实现程序源代码Word文档格式.docx(21页珍藏版)》请在冰豆网上搜索。

C语言课程设计职工信息管理系统单链表实现程序源代码Word文档格式.docx

//将单链表l中的数据写入文件

voidprinte(Node*p);

//本函数用于打印链表中某个节点的数据内容*/

//以下4个函数用于输出中文标题

voidprintstart();

voidWrong();

voidNofind();

voidprintc();

voidmenu()

{

printf("

\t*****************************************************************\n"

);

\t**\n"

\t*职工信息管理系统_结构体数组实现*\n"

\t*[1]增加职工信息[2]删除职工信息*\n"

\t*[3]查询职工信息[4]修改职工信息*\n"

\t*[5]插入职工记录[6]统计职工记录*\n"

\t*[7]排序[8]保存职工信息*\n"

\t*[9]显示数据[0]退出系统*\n"

}//voidmenu菜单结束

voidDisp(Linkl)//显示单链表l中存储的职工记录,内容为employee结构中定义的内容

intcount=0;

Node*p;

p=l->

next;

//l存储的是单链表中头结点的指针,该头结点没有存储职工信息,指针域指向的后继结点才有职工信息

if(!

p)/*p==NULL,NUll在stdlib中定义为0*/

{

printf("

\n=====>

提示:

没有职工记录可以显示!

\n"

return;

}

\t\t\t\t显示结果\n"

printstart();

//打印横线

printc();

//打印各学科标题

while(p)//逐条输出链表中存储的职工信息

printe(p);

p=p->

}//voidDisp结束

voidprintstart()

-----------------------------------------------------------------------\n"

}

voidWrong()

输入错误!

voidNofind()

没有找到该职工!

voidprintc()/*本函数用于输出中文*/

工号\t姓名性别部门职称工资总工资平均工资\n"

voidprinte(Node*p)/*本函数用于打印链表中某个节点的数据内容*/

%-12s%s\t%s\t%d\t%d\t%d\t%d\t%d\n"

p->

data.num,p->

data.name,p->

data.sex,p->

data.bm,p->

data.zc,p->

data.gz);

//Locate(l,findmess,"

num"

/*该函数用于定位连表中符合要求的结点,并返回该指针*/

Node*Locate(Linkl,charfindmess[],charzcornum[])

Node*r;

if(strcmp(zcornum,"

)==0)/*按工号查询*/

r=l->

while(r!

=NULL)

{

if(strcmp(r->

data.num,findmess)==0)/*若找到findmess值的工号*/

returnr;

r=r->

}

elseif(strcmp(zcornum,"

zc"

)==0)/*按职称查询*/

data.zc,findmess)==0)/*若找到findmess值的职工职称*/

return0;

/*若未找到,返回一个空指针*/

//add()函数中,无节点时,r指向list头,有节点时,r指向末尾节点

voidAdd(Linkl)/*增加职工*/

Node*p,*r,*s;

/*实现添加操作的临时的结构体指针变量*/

intflag=0;

r=l;

s=l->

//链表没有节点时,s=null;

/链表有节点时,指向第一个职工节点

while(r->

next!

=NULL)//如果存在后继结点时,r指针后移一个

r=r->

/*将指针移至于链表最末尾,准备添加记录*/

while

(1)

请你输入工号(以'

0'

返回上一级菜单:

)"

scanf("

%s"

num);

if(strcmp(num,"

0"

)==0)//输入'

跳出while

(1),即跳出add()函数

break;

s=l->

//作用?

每次从第一个节点开始找,看num是否重复。

while(s)//工号重复时,返回主菜单

if(strcmp(s->

data.num,num)==0)

{

printf("

=====>

工号为'

%s'

的职工已经存在,若要修改请你选择'

4修改'

!

flag=1;

//break;

return;

}

s=s->

}//while(s)

p=(Node*)malloc(sizeof(Node));

//生成没赋值的新节点p

strcpy(p->

data.num,num);

请你输入姓名:

"

p->

data.name);

getchar();

请你输入性别:

data.sex);

请你输入职工所在部门:

%d"

&

p->

data.bm);

请你输入职工职称:

data.zc);

请你输入职工工资:

/*信息输入已经完成*/

next=NULL;

/*表明这是链表的尾部结点*/

r->

next=p;

/*将新建的结点加入链表尾部中*/

r=p;

saveflag=1;

}//while

(1)

}//voidAdd增加结束

voidDel(Linkl)/*删除*/

intsel;

Node*p,*r;

/*实现删除操作的临时的结构体指针变量*/

charfindmess[20];

l->

next)//当list无后继结点时,提示和结束返回del()

{

没有记录可以删除!

1按工号删除\n=====>

2按姓名删除\n"

scanf("

sel);

if(sel==1)//按工号删除

请你输入要删除的工号:

findmess);

p=Locate(l,findmess,"

if(p)

r=l;

while(r->

=p)

r=r->

//从第一个结点找起,直到发现r->

next=p,是待删除结点,跳出循环

r->

next=p->

//rr->

next(p)p->

next

free(p);

printf("

该职工已经成功删除!

saveflag=1;

else

Nofind();

//显示一句话

}//if(sel==1)

elseif(sel==2)//按姓名删除

请你输入要删除的姓名:

name"

}//if(sel==2)

else

Wrong();

//显示输入错误的话

}//voidDel删除结束

voidQur(Linkl)//查询功能

//实现查询操作的临时的结构体指针变量

next)

没有资料可以查询!

1按工号查找\n=====>

2按职称查找\n"

if(sel==1)/*工号*/

请你输入要查找的工号:

\t\t\t\t查找结果\n"

printstart();

printc();

printe(p);

//打印p结点各个数据成员的值

}//if(sel==1)

elseif(sel==2)/*职称*/

请你输入要查找的职称:

}//voidQur查询结束

voidModify(Linkl)//修改功能

没有资料可以修改!

请你输入要修改的职工工号:

p=Locate(l,findmess,"

if(p)

请你输入新工号(原来是%s):

data.num);

请你输入新姓名(原来是%s):

请你输入新性别(原来是%s):

请你输入新的部门(原来是%s):

请你输入新的职称(原来是%s):

请你输入新的工资(原来是%d):

资料修改成功!

//shoudsave=1;

Nofind();

//if(p)结束

}//voidModify(Linkl)//修改功能结束

//插入记录:

按工号查询到要插入的节点的位置,然后在该工号之后插入一个新节点。

voidInsert(Linkl)

Node*s,*r,*p;

/*p指向插入位置,p指新插入记录节点*/

charch,new_num[10],old_num[10];

//old_num[]保存插入点位置之前的工号,new_num[]保存输入的新记录的工号

system("

cls"

Disp(l);

while

(1)

//stringinput(s,10,"

pleaseinputinsertlocationaftertheNumber:

请你输入已存在的工号(以'

old_num);

if(strcmp(old_num,"

跳出while

(1),即跳出Insert()函数

return;

每次从第一个节点开始找

flag=0;

while(s)/*查询该工号是否存在,flag=1表示该工号存在*/

{

data.num,old_num)==0)

{

break;

}

}

if(flag==1)

/*若工号存在,则进行插入之前的新记录的输入操作*/

else

getchar();

Thenumber%sisnotexisting,tryagain?

(y/n):

scanf("

%c"

ch);

if(ch=='

y'

||ch=='

Y'

{continue;

}

else

{return;

}//回主菜单

}//while

(1)

/*以下新记录的插入新节点,工号不能跟已存在的工号相同,操作与Add()相同*/

请你输入待插入的工号(以'

new_num);

if(strcmp(new_num,"

while(s)//工号重复时,返回主菜单

if(strcmp(s->

data.num,new_num)==0)

的职工已经存在'

flag=1;

return;

s=s->

}//while(s)

p=(Node*)malloc(sizeof(Node));

p)

\nallocatememoryfailure"

/*如没有申请到,打印提示信息*/

return;

/*返回主界面*/

}

strcpy(p->

data.num,new_num);

getchar();

请你输入部门:

请你输入职称:

请你输入工资:

//信息输入已经完成

p->

saveflag=1;

/*在main()有对该全局变量的判断,若为1,则进行存盘操作*/

/*将指针赋值给r,因为l中的头节点的下一个节点才实际保存着学生的记录*/

r=l->

if(strcmp(r->

data.num,old_num)==0)/*在链表中插入一个节点*/

p->

next=r->

}//while

(1),r作为查询指针,依次从第一个节点找起,找到后跳出while

(1)循环

\n\n"

//getchar();

voidTongji(Linkl)//统计

Node*max,*min;

/*用于指向工资最高的节点*/

Node*t=l->

t)

system("

Notemployeerecord!

max=min=t;

while(t)

if(t->

data.gz>

=max->

data.gz)max=t;

data.gz<

=min->

data.gz)min=t;

t=t->

最高工资为:

%d\n"

max);

\t%s\t%s\t%s\t%s\t%s\t%d\n\n"

t->

data.num,t->

data.name,t->

data.sex,t->

data.bm,t->

data.zc,t->

最低工资为:

min);

voidSort(Linkl)//排序

Linkll;

Node*p,*rr,*s;

inti=0;

if(l->

next==NULL)

{system("

return;

ll=(Node*)malloc(sizeof(Node));

/*用于创建新的节点*/

ll)

ll->

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 初中教育 > 政史地

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

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