职工信息管理系统 单链表实现 C语言源程序Word文档格式.docx
《职工信息管理系统 单链表实现 C语言源程序Word文档格式.docx》由会员分享,可在线阅读,更多相关《职工信息管理系统 单链表实现 C语言源程序Word文档格式.docx(26页珍藏版)》请在冰豆网上搜索。
charphone[20];
/*电话号码*/
charaddress[30];
/*住址*/
};
typedefstructNode
{
structemployeedata;
structNode*next;
}ListNode,*LinkList;
voidInitList(LinkList*head)/*将单链表初始化为空。
动态生成一个头结点,并将头结点的指针域置为空*/
if((*head=(LinkList)malloc(sizeof(ListNode)))==NULL)/*为头结点分配一个存储空间*/
printf("
系统分配存储空间失败!
\n"
);
exit(-1);
(*head)->
next=NULL;
/*将头结点的指针域置为空*/
}
ListNode*Locatenum(LinkListhead,charfind[])//通过职工工号查找,返回定位指针。
LinkListp;
p=head->
next;
if(!
p)//如果职工信息记录为空,返回NULL。
returnNULL;
while(p)
{
if(strcmp(p->
data.num,find)==0)
returnp;
p=p->
}
returnNULL;
ListNode*Locatename(LinkListhead,charfind[])//通过职工姓名查找,返回定位指针。
data.name,find)==0)
ListNode*Locatesalary(LinkListhead,intsalary)//通过职工工资查找,返回定位指针。
if(p->
data.salary==salary)
voidNofind()
printf("
\n***提示***:
没有找到该职工!
voidModify(LinkListL)//修改功能。
ListNode*p;
charfind[20];
L->
next)
{
\n***提示***:
没有资料可以修改!
return;
}
请你输入要修改的职工工号:
"
scanf("
%s"
find);
p=Locatenum(L,find);
if(p)
请你输入新的工号(原来是%s):
p->
data.num);
scanf("
getchar();
请你输入新的姓名(原来是%s):
data.name);
请你输入新的性别(原来是%s):
data.sex);
请你输入新的年龄(原来是%d):
data.age);
%d"
&
p->
请你输入新的学历(原来是%s):
data.education);
请你输入新的工资(原来是%d):
data.salary);
请你输入新的电话(原来是%s):
data.phone);
请你输入新的住址(原来是%s):
data.address);
资料修改成功!
saveflag=1;
else
Nofind();
//if(p)结束
}//voidModify(LinkListL)//修改功能结束
voidAdd(LinkListhead)/*录入职工信息*/
system("
cls"
ListNode*p,*r,*s;
/*实现添加操作的临时的结构体指针变量*/
intsign;
/*标记重复工号的变量*/
r=head;
s=head->
/*链表没有节点时,s=NULL;
链表有节点时,指向第一个职工节点*/
while(r->
next!
=NULL)/*如果存在后继结点时,r指针后移一个*/
r=r->
/*将指针移至于链表最末尾,准备添加记录*/
输入‘#’将退出职工信息录入,退回至主菜单!
\n\n"
while
(1)
(PS:
职工号为‘#’即退出录入功能)\n\n"
请输入职工号:
fflush(stdin);
//清除缓冲区。
gets(num);
if(strcmp(num,"
#"
)==0)/*输入‘0’,跳出while
(1),即跳出Add()函数*/
break;
s=head->
/*每次从第一个节点开始找,看num是否重复。
*/
while(s)
{
if(strcmp(s->
data.num,num)==0)
{
printf("
***提示***\n工号为:
‘%s’的职工信息已经存在!
num);
若要修改请按‘4’,放弃请按‘0’!
scanf("
sign);
if(sign==4)
Modify(head);
else
return;
}
s=s->
}//while(s)
if((p=(LinkList)malloc(sizeof(ListNode)))==NULL)//生成没赋值的新节点p。
printf("
退出程序!
exit(-1);
}
strcpy(p->
data.num,num);
printf("
请输入该职工姓名:
scanf("
getchar();
请输入该职工的性别:
(注:
男性:
male;
女性:
female)"
请输入该职工的年龄:
请输入该职工的学历:
请输入该职工的工资:
请输入该职工的电话号码:
请输入该职工的住址:
gets(p->
p->
/*表明这是链表的尾部结点*/
r->
next=p;
/*将新建的结点加入链表尾部中*/
r=p;
saveflag=1;
}//while
(1)
}//voidAdd函数结束。
voidprintline()//打印横线。
--------------------------------------------------------------------------------\n"
voidprintsubject()//打印各分类标题。
工号\t姓名性别年龄学历工资电话\t\t住址\n"
voidprintLinkList(LinkListp)//打印p结点各个数据成员的值。
%s%s%s%d%s%d%s%s\n"
data.num,p->
data.name,p->
data.sex,p->
data.age,p->
data.education,p->
data.salary,p->
data.phone,p->
voidAllemployeeinfo(LinkListhead)//显示所有职工信息。
intcount=0;
ListNode*