最新职工信息管理系统 单链表实现 C语言源程序资料.docx

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

最新职工信息管理系统 单链表实现 C语言源程序资料.docx

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

最新职工信息管理系统 单链表实现 C语言源程序资料.docx

最新职工信息管理系统单链表实现C语言源程序资料

#include

#include

#include

intsaveflag=0;/*单链表内容有无发生改变,是否需要存盘的标志变量*/

structemployee

{

charnum[10];/*工号*/

charname[15];/*姓名*/

charsex[7];/*性别*/

intage;/*年龄*/

chareducation[15];/*学历*/

intsalary;/*工资*/

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

}

returnNULL;

}

ListNode*Locatename(LinkListhead,charfind[])//通过职工姓名查找,返回定位指针。

{

LinkListp;

p=head->next;

if(!

p)//如果职工信息记录为空,返回NULL。

returnNULL;

while(p)

{

if(strcmp(p->data.name,find)==0)

returnp;

p=p->next;

}

returnNULL;

}

ListNode*Locatesalary(LinkListhead,intsalary)//通过职工工资查找,返回定位指针。

{

LinkListp;

p=head->next;

if(!

p)//如果职工信息记录为空,返回NULL。

returnNULL;

while(p)

{

if(p->data.salary==salary)

returnp;

p=p->next;

}

returnNULL;

}

voidNofind()

{

printf("\n***提示***:

没有找到该职工!

\n");

}

voidModify(LinkListL)//修改功能。

{

ListNode*p;

charfind[20];

if(!

L->next)

{

printf("\n***提示***:

没有资料可以修改!

\n");

return;

}

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

");

scanf("%s",find);

p=Locatenum(L,find);

if(p)

{

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

",p->data.num);

scanf("%s",p->data.num);

getchar();

printf("\n");

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

",p->data.name);

scanf("%s",p->data.name);

getchar();

printf("\n");

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

",p->data.sex);

scanf("%s",p->data.sex);

getchar();

printf("\n");

printf("请你输入新的年龄(原来是%d):

",p->data.age);

scanf("%d",&p->data.age);

printf("\n");

printf("请你输入新的学历(原来是%s):

",p->data.education);

scanf("%s",p->data.education);

getchar();

printf("\n");

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

",p->data.salary);

scanf("%d",&p->data.salary);

printf("\n");

printf("请你输入新的电话(原来是%s):

",p->data.phone);

scanf("%s",p->data.phone);

getchar();

printf("\n");

printf("请你输入新的住址(原来是%s):

",p->data.address);

scanf("%s",p->data.address);

getchar();

printf("\n");

printf("\n***提示***:

资料修改成功!

\n");

saveflag=1;

}

else

Nofind();//if(p)结束

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

voidAdd(LinkListhead)/*录入职工信息*/

{

system("cls");

ListNode*p,*r,*s;/*实现添加操作的临时的结构体指针变量*/

intsign;/*标记重复工号的变量*/

charnum[10];

r=head;

s=head->next;/*链表没有节点时,s=NULL;链表有节点时,指向第一个职工节点*/

while(r->next!

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

r=r->next;/*将指针移至于链表最末尾,准备添加记录*/

printf("输入‘#’将退出职工信息录入,退回至主菜单!

\n\n");

while

(1)

{

printf("(PS:

职工号为‘#’即退出录入功能)\n\n");

printf("请输入职工号:

");

fflush(stdin);//清除缓冲区。

gets(num);

if(strcmp(num,"#")==0)/*输入‘0’,跳出while

(1),即跳出Add()函数*/

break;

s=head->next;/*每次从第一个节点开始找,看num是否重复。

*/

while(s)

{

if(strcmp(s->data.num,num)==0)

{

printf("***提示***\n工号为:

‘%s’的职工信息已经存在!

\n",num);

printf("若要修改请按‘4’,放弃请按‘0’!

\n");

scanf("%d",&sign);

if(sign==4)

Modify(head);

else

return;

}

s=s->next;

}//while(s)

if((p=(LinkList)malloc(sizeof(ListNode)))==NULL)//生成没赋值的新节点p。

{

printf("系统分配存储空间失败!

\n");

printf("退出程序!

\n");

exit(-1);

}

strcpy(p->data.num,num);

printf("\n");

printf("请输入该职工姓名:

");

scanf("%s",p->data.name);

getchar();

printf("\n");

printf("请输入该职工的性别:

(注:

男性:

male;女性:

female)");

scanf("%s",p->data.sex);

getchar();

printf("\n");

printf("请输入该职工的年龄:

");

scanf("%d",&p->data.age);

printf("\n");

printf("请输入该职工的学历:

");

scanf("%s",p->data.education);

getchar();

printf("\n");

printf("请输入该职工的工资:

");

scanf("%d",&p->data.salary);

printf("\n");

printf("请输入该职工的电话号码:

");

scanf("%s",p->data.phone);

getchar();

printf("\n");

printf("请输入该职工的住址:

");

gets(p->data.address);

printf("\n");

p->next=NULL;/*表明这是链表的尾部结点*/

r->next=p;/*将新建的结点加入链表尾部中*/

r=p;

saveflag=1;

printf("\n");

}//while

(1)

}//voidAdd函数结束。

voidprintline()//打印横线。

{

printf("--------------------------------------------------------------------------------\n");

}

voidprintsubject()//打印各分类标题。

{

printf("工号\t姓名性别年龄学历工资电话\t\t住址\n");

}

voidprintLinkList(LinkListp)//打印p结点各个数据成员的值。

{

printf("%s%s%s%d%s%d%s%s\n",p->data.num,p->data.name,p->data.sex,p->data.age,p->data.education,p->data.salary,p->data.phone,p->data.address);

}

voidAllemployeeinfo(LinkListhead)//显示所有职工信息。

{

intcount=0;

ListNode*p;

p=head->next;

if(!

p)

{

printf("***提示***:

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

\n");

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

\n");

return;

}

printf("\t\t\t\t显示结果\n");

printline();

printsubject();

printf("\n");

while(p)

{

printLinkList(p);

p=p->next;

count++;

}

printline();

printf("\n");

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

\n",count);

}

voidWrong()

{

printf("\n***提示***:

输入错误!

\n");

}

voidmenu()//主菜单。

{

printf("\n");

printf("\t*******************************************************************\n");

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");

printf("\t*版权所有人:

彭林*\n");

printf("\t*电子132班*\n");

printf("\t*1319200063*\n");

printf("\t*******************************************************************\n");

}//voidmenu菜单结束。

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

{

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

ListNode*p,*r;

charfind[20];

if(!

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

{

printf("\n***提示***:

没有记录可以删除!

\n");

return;

}

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

printf("\n=====>功能选择:

");

scanf("%d",&select);

if(select==1)

{

printf("请输入要删除的职工工号:

");

scanf("%s",find);

getchar();

p=Locatenum(L,find);

if(p)

{

r=L;

while(r->next!

=p)

r=r->next;//从第一个结点找起,直到发现r->next=p,是待删除结点,跳出循环。

r->next=p->next;

free(p);

printf("\n***提示***:

该职工信息已成功删除!

\n");

saveflag=1;

}

else

Nofind();

}//if(select==1).

elseif(select==2)

{

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

");

scanf("%s",find);

getchar();

p=Locatename(L,find);

if(p)

{

r=L;

while(r->next!

=p)

r=r->next;

r->next=p->next;

free(p);

printf("\n***提示***:

该职工信息已成功删除!

\n");

saveflag=1;

}

else

Nofind();

}//if(select==2).

else

Wrong();//显示输入错误的话

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

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

{

intselect;

intsalary;

intsign=0;

charfind[20];

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

if(!

L->next)

{

printf("\n***提示***:

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

\n");

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

\n");

return;

}

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

printf("\n=====>功能选择:

");

scanf("%d",&select);

printf("\n");

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

{

printf("请输入要查找的工号:

");

scanf("%s",find);

getchar();

p=Locatenum(L,find);

if(p)

{

printf("\t\t\t\t查找结果\n");

printline();//打印横线。

printsubject();//打印各分类标题。

printLinkList(p);//打印p结点各个数据成员的值。

printline();//打印横线。

}

else

Nofind();

}

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

{

printf("请输入要查找的工资:

");

scanf("%d",&salary);

p=Locatesalary(L,salary);

if(p)

{

printf("\t\t\t\t查找结果\n");

printline();

printsubject();

printLinkList(p);

printline();

sign++;

}

while(p)

{

p=Locatesalary(p,salary);

if(p)

{

printf("\t\t\t\t查找结果\n");

printline();

printsubject();

printLinkList(p);

printline();

sign++;

}

}

if(sign==0)

Nofind();

}

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

{

printf("请输入要查找的姓名:

");

scanf("%s",find);

getchar();

p=Locatename(L,find);

if(p)

{

printf("\t\t\t\t查找结果\n");

printline();

printsubject();

printLinkList(p);

printline();

}

else

Nofind();

}

else

Wrong();

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

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

{

FILE*fp;

ListNode*p;

intcount=0;

intflag=1;

fp=fopen("Employeeinfo.txt","wb");

if(fp==NULL)

{

printf("\n***提示***:

打开文件时发生错误!

\n");

return;

}

p=L->next;

while(p)

{

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

{

p=p->next;//依次写入下一个结点的值。

count++;//文件的记录数+1。

}

else

{

flag=0;

printf("写入文件过程发生错误!

\n");

break;

}

}//while(p).

if(count>0)

{

printf("\n***提示***:

文件保存成功。

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

)\n",count);

saveflag=0;

}

else

{

system("cls");//清屏。

printf("文件保存失败!

‘0’条记录被保存。

\n");

}

fclose(fp);

}//voidSave()函数结束。

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

{

ListNode*p,*m,*n;

inti,j,count=0;

p=L->next;

if(!

p)

{

system("cls");//清屏。

printf("无任何职工信息!

\n");

printf("返回主菜单!

\n");

return;

}

system("cls");//清屏。

printf("按工资从低到高排序:

\n");

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

Allemployeeinfo(L);

while(p)

{

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

p=p->next;

}

for(i=0;i

for(j=0;j

{

n=L;

p=L->next;

m=p->next;

while(m)

{

if(p->data.salary>m->data.salary)

{

n->next=p->next;

p->next=m->next;

m->next=p;

n=m;

m=p->next;

}

else

{

n=p;

p=m;

m=m->next;

}

}

}

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

Allemployeeinfo(L);

saveflag=1;

printf("排序成功!

\n");

}

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

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

当前位置:首页 > 外语学习 > 英语考试

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

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