数据结构课程设计职工信息管理系统单链表实现程序源代码.docx
- 文档编号:1964558
- 上传时间:2022-10-25
- 格式:DOCX
- 页数:24
- 大小:21.88KB
数据结构课程设计职工信息管理系统单链表实现程序源代码.docx
《数据结构课程设计职工信息管理系统单链表实现程序源代码.docx》由会员分享,可在线阅读,更多相关《数据结构课程设计职工信息管理系统单链表实现程序源代码.docx(24页珍藏版)》请在冰豆网上搜索。
数据结构课程设计职工信息管理系统单链表实现程序源代码
数据结构课程设计_职工信息管理系统_单链表实现程序源代码
//要求用C语言完成课程设计职工信息管理系统—单链表实现
#include
#include
#include
intsaveflag=0;/*是否需要存盘的标志变量*/
structemployee
{
charname[15];
charnum[10];/*工号*/
charsex[4];
charbm[15];
charzc[20];
intgz;
};
typedefstructnode
{
structemployeedata;
structnode*next;
}Node,*Link;
//Linkl(注意是:
字母l不是数字1)
voidadd(Linkl);
voiddisp(Linkl);//查看职工所有信息
voiddel(Linkl);//删除功能
Node*Locate(Linkl,charfindmess[],charnameornum[]);
voidQur(Linkl);//查询功能
voidTongji(Linkl);//统计
voidSort(Linkl);//排序
voidModify(Linkl);//修改功能
voidsave(Linkl);//将单链表l中的数据写入文件
voidprinte(Node*p);//本函数用于打印链表中某个节点的数据内容*/
//以下4个函数用于输出中文标题
voidprintstart();
voidWrong();
voidNofind();
voidprintc();
voidmenu()
{
printf("\t*****************************************************************\n");
printf("\t**\n");
printf("\t*职工信息管理系统_结构体数组实现*\n");
printf("\t**\n")
printf("\t*[1]增加职工信息[2]删除职工信息*\n");
printf("\t*[3]查询职工信息[4]修改职工信息*\n");
printf("\t*[5]插入职工记录[6]统计职工记录*\n");
printf("\t*[7]排序[8]保存职工信息*\n");
printf("\t*[9]显示数据[0]退出系统*\n");
printf("\t**\n");
printf("\t*****************************************************************\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;
}
printf("\t\t\t\t显示结果\n");
printstart();//打印横线
printc();//打印各学科标题
printf("\n");
while(p)//逐条输出链表中存储的职工信息
{
printe(p);
p=p->next;
}
printstart();
printf("\n");
}//voidDisp结束
voidprintstart()
{
printf("-----------------------------------------------------------------------\n");
}
voidWrong()
{
printf("\n=====>提示:
输入错误!
\n");
}
voidNofind()
{
printf("\n=====>提示:
没有找到该职工!
\n");
}
voidprintc()/*本函数用于输出中文*/
{
printf("工号\t姓名性别部门职称工资总工资平均工资\n");
}
voidprinte(Node*p)/*本函数用于打印链表中某个节点的数据内容*/
{
printf("%-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,"num")==0)/*按工号查询*/
{
r=l->next;
while(r!
=NULL)
{
if(strcmp(r->data.num,findmess)==0)/*若找到findmess值的工号*/
returnr;
r=r->next;
}
}
elseif(strcmp(zcornum,"zc")==0)/*按职称查询*/
{
r=l->next;
while(r!
=NULL)
{
if(strcmp(r->data.zc,findmess)==0)/*若找到findmess值的职工职称*/
returnr;
r=r->next;
}
}
return0;/*若未找到,返回一个空指针*/
}
//add()函数中,无节点时,r指向list头,有节点时,r指向末尾节点
voidAdd(Linkl)/*增加职工*/
{
Node*p,*r,*s;/*实现添加操作的临时的结构体指针变量*/
charnum[10];
intflag=0;
r=l;
s=l->next;//链表没有节点时,s=null;/链表有节点时,指向第一个职工节点
while(r->next!
=NULL)//如果存在后继结点时,r指针后移一个
r=r->next;/*将指针移至于链表最末尾,准备添加记录*/
while
(1)
{
printf("请你输入工号(以'0'返回上一级菜单:
)");
scanf("%s",num);
if(strcmp(num,"0")==0)//输入'0',跳出while
(1),即跳出add()函数
break;
s=l->next;//作用?
每次从第一个节点开始找,看num是否重复。
while(s)//工号重复时,返回主菜单
{
if(strcmp(s->data.num,num)==0)
{
printf("=====>提示:
工号为'%s'的职工已经存在,若要修改请你选择'4修改'!
\n",num);
flag=1;
//break;
return;
}
s=s->next;
}//while(s)
p=(Node*)malloc(sizeof(Node));//生成没赋值的新节点p
strcpy(p->data.num,num);
printf("请你输入姓名:
");
scanf("%s",p->data.name);
getchar();
printf("请你输入性别:
");
scanf("%s",p->data.sex);
getchar();
printf("请你输入职工所在部门:
");
scanf("%d",&p->data.bm);
getchar();
printf("请你输入职工职称:
");
scanf("%d",&p->data.zc);
getchar();
printf("请你输入职工工资:
");
scanf("%d",&p->data.gz);
getchar();
/*信息输入已经完成*/
p->next=NULL;/*表明这是链表的尾部结点*/
r->next=p;/*将新建的结点加入链表尾部中*/
r=p;
saveflag=1;
}//while
(1)
}//voidAdd增加结束
voidDel(Linkl)/*删除*/
{
intsel;
Node*p,*r;/*实现删除操作的临时的结构体指针变量*/
charfindmess[20];
if(!
l->next)//当list无后继结点时,提示和结束返回del()
{
printf("\n=====>提示:
没有记录可以删除!
\n");
return;
}
printf("\n=====>1按工号删除\n=====>2按姓名删除\n");
scanf("%d",&sel);
if(sel==1)//按工号删除
{
printf("请你输入要删除的工号:
");
scanf("%s",findmess);
p=Locate(l,findmess,"num");
if(p)
{
r=l;
while(r->next!
=p)
r=r->next;//从第一个结点找起,直到发现r->next=p,是待删除结点,跳出循环
r->next=p->next;//rr->next(p)p->next
free(p);
printf("\n=====>提示:
该职工已经成功删除!
\n");
saveflag=1;
}
else
Nofind();//显示一句话
}//if(sel==1)
elseif(sel==2)//按姓名删除
{
printf("请你输入要删除的姓名:
");
scanf("%s",findmess);
p=Locate(l,findmess,"name");
if(p)
{
r=l;
while(r->next!
=p)
r=r->nex
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 数据结构 课程设计 职工 信息管理 系统 单链表 实现 程序 源代码