职工信息管理系统单链表实现C语言源程序_第1页
职工信息管理系统单链表实现C语言源程序_第2页
职工信息管理系统单链表实现C语言源程序_第3页
职工信息管理系统单链表实现C语言源程序_第4页
职工信息管理系统单链表实现C语言源程序_第5页
已阅读5页,还剩19页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

#include<stdlib.h>#include<string.h>int/*单链表内容有无发生改变,是否需要存盘的标志变量*/employee{num[10];/*工号*//*姓名*/sex[7];/*性别*/int/*年龄*/education[15];/*学历*/intsalary;/*工资*/phone[20];/*电话号码*/address[30];/*住址*/};Node{employee*next;InitList(LinkList*head)/*将单链表初始化为空动态生成一个头结点并将头结点的指针域置为空*{if((*head=(LinkList)malloc(sizeof(ListNode)))==NULL)/*为头结点分配一个存储空间*统分配存储空间失败!\n");exit(-1);(*head)->next=NULL;/*将头结点的指针域置为空*/}ListNode*Locatenum(LinkListhead,charfind[])//通过职工工号查找返回定位指针。{LinkList/

p=head->next;if(!p)//如果职工信息记录为空,返回NULL。NULL;while(p){if(strcmp(p->data.num,find)==0)p;p=p->next;}NULL;}ListNode*Locatename(LinkListhead,charfind[])//通过职工姓名查找,返回定位指针。{LinkListp=head->next;if(!p)//如果职工信息记录为空,返回NULL。NULL;while(p){if(strcmp(p->,find)==0)p;p=p->next;}NULL;}ListNode*Locatesalary(LinkListhead,int//通过职工工资查找,返回定位指针。{LinkListp=head->next;if(!p)//如果职工信息记录为空,返回NULL。NULL;while(p){/

if(p->data.salary==salary)p;p=p->next;}NULL;}{printf("\n***提***:没有找到该职工!\n");}Modify(LinkListL)//修改功能。{ListNode*p;find[20];if(!L->next){printf("\n***提示***:没有资料可以修改!}你输入要修改的职工工号:");scanf("%s",find);p=Locatenum(L,find);{你输入新的工号(原是%getchar();printf("\n");你输入新的姓名(原是%getchar();printf("\n");/

你输入新的性别(原是%s):",p->data.sex);getchar();printf("\n");你输入新的年龄(原是%d):",p->data.age);scanf("%d",&p->data.age);printf("\n");你输入新的学历(原是%scanf("%s",p->cation);getchar();printf("\n");你输入新的工资(原是%scanf("%d",&p->data.salary);printf("\n");你输入新的电话(原是%s):",p->data.phone);getchar();printf("\n");你输入新的住址(原是%getchar();printf("\n");printf("\n***提示***:资料修改成功\n");saveflag=1;}Nofind();结束}//voidModify(LinkListL)//修改功能结束Add(LinkList/*录入职工信息*/{/

ListNode*p,*r,*s;/*实现添加操作的临时的结构体指针变量*/int/*标记重复工号的变量*/num[10];/*链表没有节点时s=NULL;表有节点时,指向第一个职工节点*/while(r->next!=NULL)/*如果存在后继结点时,r指针后移一个*/r=r->next;/*将指针移至于链表最末尾,准备添加记录*/入‘#’将退出职工信息录入,退回至主菜单!\n\n");while(1){职工号为‘#即退出录入功能)\n\n");输入职工号:");//除缓冲区。/*输‘0,跳出while(1),即跳出数*/break;/*每次从第一个节点开始找,看是否重复。*/while(s){if(strcmp(s->data.num,num)==0){printf("***提示***\n工号为’的职工信息已经存在!\n",num);若要修改请按‘4弃请按‘\n");}s=s->next;}//while(s)if((p=(LinkList)malloc(sizeof(ListNode)))==NULL)生成没赋值的新节点p/

{系统分配存储空间失败!\n");退出程序!exit(-1);}strcpy(p->data.num,num);printf("\n");输入该职工姓名:");getchar();printf("\n");输入该职工的性别:男性:;女性:)");getchar();printf("\n");输入该职工的年龄:");scanf("%d",&p->data.age);printf("\n");输入该职工的学历:");scanf("%s",p->cation);getchar();printf("\n");输入该职工的工资:");scanf("%d",&p->data.salary);printf("\n");输入该职工的电话号码:");getchar();printf("\n");输入该职工的住址:");printf("\n");p->next=NULL;/*表明这是链表的尾部结点*/r->next=p;/*将新建的结点加入链表尾部中*/r=p;saveflag=1;printf("\n");/

Add函数结束。printline()//打印横线。{}//打印各分类标题。{printf("工号\t姓名

性别

年龄

学历

工资

电\t\t住址n");}p)//打印p结点各个数据成员的值。{printf("%s%s%d%s%d%s\n",p->data.num,p->dataa.address);}Allemployeeinfo(LinkListhead)//显示所有职工信息。{intListNode*p;p=head->next;if(!p){printf("***提示***:目前没有存储任何职工记录!\n");回主菜单,请重新选择功能!\n");}printf("\t\t\t\t显结果n");printline();printf("\n");while(p)/

{printLinkList(p);p=p->next;count++;}printline();printf("\n");经存储了%d条职工信息!}Wrong(){printf("\n***提***:入错误!\n");}//主单。{printf("\n");printf("\t*******************************************************************\n");*\n");*\n");<统_现>*\n");*\n");[1]

录入职工信息

[2]

删除职工信息*\n");[3]

查询职工信息

[4]

修改职工信息*\n");[5]

插入职工记录

[6]

统计职工信息*\n");[7]

排序

[8]

保存职工信息*\n");[9]

显示所有职工记录

[0]

退出系统/

*\n");*\n");*\n");

版权所有人:彭林

*\n");*\n");1319200063*\n");

电子132班printf("\t*******************************************************************\n");}//voidmenu菜单结束。Del(LinkListL)//删除职工信息。{intselect;//删除方式选择记录变量。ListNode*p,*r;find[20];if(!L->next)//当list无后继结点时,提示和结束Del()函数。{printf("\n***提示***:没有记录可以删除!\n");}printf("\n按工号删除,请按‘’\n按姓名删除,请按‘2’\n");printf("\n=====>功能选择:");scanf("%d",&select);if(select==1){输入要删除的职工工号:");scanf("%s",find);getchar();p=Locatenum(L,find);{r=L;/

r=r->next;//从第一个结点找起,直到发r->next=p,是待删除结点,出循环。r->next=p->next;free(p);printf("\n***提示***:该职工信息已成功删除!\n");saveflag=1;}Nofind();}//if(select==1).if(select==2){输入要删除的职工姓名:");scanf("%s",find);getchar();{r=L;r=r->next;r->next=p->next;free(p);printf("\n***提示***:该职工信息已成功删除!\n");saveflag=1;}Nofind();}//if(select==2).Wrong();//显示输入错误的话Del()删除函数结束。Search(LinkListL)//查询职工信息。{intselect;/

intsalary;intsign=0;find[20];ListNode*p;//实现查询操作的临时结体指针变量。if(!L->next){printf("\n***提示***:没有职工信息资料可以查询!\n");回主菜单,请重新选择功能!\n");}printf("\n按工号查找,请按‘’\n按工资查找,请按‘2’按姓名查找,请按‘3printf("\n=====>功能选择:");scanf("%d",&select);printf("\n");if(select==1)//号。{输入要查找的工号:");scanf("%s",find);getchar();p=Locatenum(L,find);{printf("\t\t\t\t

查找结果n");printline();//打印横线。//打印各分类标题。printLinkList(p);//打印p结点各个数据成员的值。printline();//打印横线。}Nofind();}if(select==2)//资。{输入要查找的工资:");scanf("%d",&salary);p=Locatesalary(L,salary);/

{printf("\t\t\t\t查结果\n");printline();printLinkList(p);printline();sign++;}while(p){{printf("\t\t\t\t查结果\n");printline();printLinkList(p);printline();sign++;}}Nofind();}if(select==3)//名。{输入要查找的姓名:");scanf("%s",find);getchar();{printf("\t\t\t\t查结果\n");printline();printLinkList(p);/

printline();}Nofind();}Wrong();查询函数结束。L)信息保存到文件中。{FILE*fp;ListNode*p;intintflag=1;fp=fopen("Employeeinfo.txt","wb");if(fp==NULL){printf("\n***提示***:打开文件时发生错误!\n");}p=L->next;while(p){将第一个记录结点值写入文件。{p=p->next;//依次写入下一个结点的值。count++;文件的记录数+。}{flag=0;写入文件过程发生错误!\n");break;}/

if(count>0){printf("\n***提示***件保存成功条记录已经保存)\n",count);saveflag=0;}{清屏。件保存失败’条记录被保存。}fclose(fp);Save()函数结束。Sort(LinkListL)//序功能函数。{ListNode*p,*m,*n;inti,j,count=0;p=L->next;if(!p){//清屏。任何职工信息!\n");回主菜单!}//屏。工资从低到高排序:\n");printf("***以下为排序前的所有职工记录***\n");while(p){count++;//包含头结点的职工信息结点的总个数。p=p->next;}for(i=0;i<count-1;i++)//链表的冒泡排序。for(j=0;j<count-1-i;j++)/

{n=L;p=L->next;m=p->next;while(m){{p->next=m->next;m->next=p;m=p->next;}{n=p;m=m->next;}}}printf("***以下为排序后的所有职工记录***\n");saveflag=1;序成功!}Statistics(LinkListL)//统计职工中的最高工资和最低工资。{ListNode*Max,*Min;inti;ListNode*t=L->next;if(!t){//清屏。有储存任何职工记录!\n");/

回主菜单,请先录入职工信息!\n");}Max=Min=t;while(t){if(Max->data.salary<t->data.salary)Max=t;//Max指针指向最高工资的职工结点。if(Min->data.salary>t->data.salary)//Min指针指向最低工资的职工结点。}高工资为:%d\n",Max->data.salary);低工资为:要查看最低,最高工资的相关职工信息,\n");按‘1后按照提示进行相关操作,\n");则请‘1外的任何数字键以退出统计功能回主菜单\n");printf("\n=====>功能选择:");scanf("%d",&i);Search(L);//示符合要求的职工信息。}L)//入新的职工信息。{功能可以通过姓名和工号查找到符合要求的\n");//能介绍。关职工信息,然后将您希望添加进去的新的\n");工信息插入到该职工信息记录的后面。\n");ListNode*p,*s;find[20];//放工号和姓名的变量。inti;过姓名查找,请按‘\n");过工号查找,请按‘\n");/

回主菜单,请按‘\n");printf("\n=====>功能选择:");scanf("%d",&i);printf("\n");{//退出插入功能,返回主菜单。}{输入已在存储记录中的职工姓名:");scanf("%s",find);getchar();//定位。if(!p){输入的该职工姓名不在信息记录中,请重新核审!\n");回主菜单。}if(!s){统分配存储空间失败!\n");}输入新职工工号:");printf("\n");输入新职工姓名:");scanf("%s",s->);getchar();printf("\n");输入新职工的性别:男性:;女性:)");/

getchar();printf("\n");输入新职工的年龄:");scanf("%d",&s->data.age);printf("\n");输入新职工的学历:");scanf("%s",s->cation);getchar();printf("\n");输入新职工的工资:");printf("\n");输入新职工的电话号码:");scanf("%s",s->data.phone);getchar();printf("\n");输入新职工的住址:");scanf("%s",s->data.address);getchar();printf("\n");s->next=p->next;名为:的新职工信息已成功插到姓名为:%s的职工信息记录后面。\n",s->,p->);saveflag=1;//料已改动的存储变量。}{输入已在存储记录中的职工工号:");scanf("%s",find);getchar();p=Locatenum(L,find);//定位。if(!p){输入的该职工工号不在信息记录中,请重新核审!\n");回主菜单。/

}if(!s){统分配存储空间失败!\n");}输入新职工工号:");printf("\n");输入新职工姓名:");scanf("%s",s->);getchar();printf("\n");输入新职工的性别:男性:;女性:)");getchar();printf("\n");输入新职工的年龄:");scanf("%d",&s->data.age);printf("\n");输入新职工的学历:");scanf("%s",s->cation);getchar();printf("\n");输入新职工的工资:");printf("\n");输入新职工的电话号码:");scanf("%s",s->data.phone);getchar();printf("\n");输入新职工的住址:");scanf("%s",s->data.address);getchar();printf("\n");/

s->next=p->next;名为:的新职工信息已成功插到姓名为:%s的职工信息记录后面。\n",s->,p->);saveflag=1;}{能选择有误!返回主菜单。\n");}}main(){LinkListL;/*定义链表*///struct*list;FILE*fp;/*文件指针*/int/*保存选择结果变量*/*保存y,Y,n,N)*/int/*保存文件中的记录条数(或结点个数)*/*p,*r;/*定义记录针变量*printf("\t\t\t\t职信息管理系统n\t\t\t\t\n");L=(structNode*)malloc(sizeof(structNode));if(!L){printf("\n系统分配存储空间失败\n");/*没有申请到,打印提示信息*;/*返回菜单*}L->next=NULL;r=L;if(fp==NULL){printf("\n***提***:存储职工信息的文件还不存在,是否创建?

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论