职工信息管理系统单链表实现C语言源程序Word文档下载推荐.docx

上传人:b****6 文档编号:18263052 上传时间:2022-12-14 格式:DOCX 页数:27 大小:22.72KB
下载 相关 举报
职工信息管理系统单链表实现C语言源程序Word文档下载推荐.docx_第1页
第1页 / 共27页
职工信息管理系统单链表实现C语言源程序Word文档下载推荐.docx_第2页
第2页 / 共27页
职工信息管理系统单链表实现C语言源程序Word文档下载推荐.docx_第3页
第3页 / 共27页
职工信息管理系统单链表实现C语言源程序Word文档下载推荐.docx_第4页
第4页 / 共27页
职工信息管理系统单链表实现C语言源程序Word文档下载推荐.docx_第5页
第5页 / 共27页
点击查看更多>>
下载资源
资源描述

职工信息管理系统单链表实现C语言源程序Word文档下载推荐.docx

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

职工信息管理系统单链表实现C语言源程序Word文档下载推荐.docx

\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;

p)

***提示***:

目前没有存储任何职工记录!

返回主菜单,请重新选择功能!

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

printline();

printsubject();

printLinkList(p);

count++;

已经存储了%d条职工信息!

count);

voidWrong()

输入错误!

voidmenu()//主菜单。

\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"

\t*版权所有人:

彭林*\n"

\t*电子132班*\n"

\t*1319200063*\n"

}//voidmenu菜单结束。

voidDel(LinkListL)//删除职工信息。

intselect;

//删除方式选择记录变量。

ListNode*p,*r;

next)//当list无后继结点时,提示和结束Del()函数。

没有记录可以删除!

\n按工号删除,请按‘1’\n按姓名删除,请按‘2’\n"

\n=====>

功能选择:

select);

if(select==1)

请输入要删除的职工工号:

p=Locatenum(L,find);

if(p)

{

r=L;

while(r->

=p)

r=r->

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

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

next=p->

free(p);

该职工信息已成功删除!

}

else

Nofind();

}//if(select==1).

elseif(select==2)

请输入要删除的职工姓名:

p=Locatename(L,find);

}//if(select==2).

else

Wrong();

//显示输入错误的话

}//voidDel()删除函数结束。

voidSearch(LinkListL)//查询职工信息。

intsign=0;

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

next)

没有职工信息资料可以查询!

\n按工号查找,请按‘1’\n按工资查找,请按‘2’\n按姓名查找,请按‘3’\n"

if(select==1)//工号。

请输入要查找的工号:

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

printline();

//打印横线。

printsubject();

//打印各分类标题。

printLinkList(p);

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

elseif(select==2)//工资。

请输入要查找的工资:

salary);

p=Locatesalary(L,salary);

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

sign++;

while(p)

p=Locatesalary(p,salary);

if(p)

if(sign==0)

elseif(select==3)//姓名。

请输入要查找的姓名:

}//voidSearch()查询函数结束。

voidSave(LinkListL)//信息保存到文件中。

FILE*fp;

intflag=1;

fp=fopen("

Employeeinfo.txt"

"

wb"

if(fp==NULL)

打开文件时发生错误!

p=L->

if(fwrite(p,sizeof(ListNode),1,fp)==1)//将第一个记录结点值写入文件。

{

p=p->

//依次写入下一个结点的值。

count++;

//文件的记录数+1。

}

else

flag=0;

写入文件过程发生错误!

}//while(p).

if(count>

0)

文件保存成功。

(有%d条记录已经保存。

)\n"

saveflag=0;

system("

//清屏。

文件保存失败!

‘0’条记录被保存。

fclose(fp);

}//voidSave()函数结束。

voidSort(LinkListL)//排序功能函数。

ListNode*p,*m,*n;

inti,j,count=0;

//清屏。

无任何职工信息!

返回主菜单!

按工资从低到高排序:

***以下为排序前的所有职工记录***\n"

Allemployeeinfo(L);

//不包含头结点的职工信息结点的总个数。

for(i=0;

i<

count-1;

i++)//单链表的冒泡排序。

for(j=0;

j<

count-1-i;

j++)

n=L;

p=L->

m=p->

while(m)

if(p->

data.salary>

m->

data.salary)

n->

p->

next=m->

m->

n=m;

m=p->

else

n=p;

p=m;

m=m->

***以下为排序后的所有职工记录***\n"

Allemployeeinfo(L);

排序成功!

voidStatistics(LinkListL)//统计职工中的最高工资和最低工资。

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

当前位置:首页 > 高等教育 > 艺术

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

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