版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、#include #include #include #include int saveflag=0;/是否需要存盘的标志变量struct employeechar name15;char num10;char sex4;char pozition15;long salary;char xueli20;char address100;char marriage10;int age;typedef struct nodestruct employee data;struct node *next; Node,*Link;void add(Link l;/添加void disp(Link l;/浏
2、览void del(Link l;/删除Node* Locate(Link l,char findmess,char nameornum;void Qur(Link l;/查询void Tongji(Link l;/统计void Sort(Link l;/排序void Modify(Link l;/修改void Save(Link l;/保存void printe(Node *p;/打印链表中的节点/工具函数void printstart(;void Wrong(;void Nofind(;void printc(;void menu(system("color 07"pr
3、intf("ttn"printf("tt n"printf("tt 欢迎进入职工信息管理系统 n"printf("tt n"printf("tt 1 创建职工信息 2 删除职工信息 n"printf("tt 3 查询职工信息 4 修改职工信息 n"printf("tt 5 追加职工记录 6 统计职工信息 n"printf("tt 7 排序职工信息 8 保存职工信息 n"printf("tt 9 浏览职工信息 0 退出系统 n&
4、quot;printf("tt n"printf("tt 创造者: 龙丹 万莎 廖杰红 沈冠 n"printf("tt 九天出品 必属精品 n"printf("tt (o (*_* O(_O ( n"printf("ttn"void Disp(Link lint count=0;Node *p;p=l->next;/l储存的是单链表头节点的指针,头节点无职工信息if(!p/ p=NULL NULL在stdlib中定义为0printf("n=>提示:没有职工记录可以显示!n&
5、quot;return ;printf("tttt显示结果n"printstart(;printc(;printf("n"while(p/逐条输出链表中储存的职工信息printe(p;p=p->next;printstart(;printf("n"void printstart(printf("-n"void Wrong(printf("n=>提示:输入错误!n"void Nofind(printf("n=>提示:没有找到该职工!n"void printc(
6、printf("工号t姓名t性别t年龄t学历t职称t工资t地址t婚否n"printstart(;void printe(Node *pprintf("%st%st%st%dt%st%st%ldt%st%sn",p->data.num,p->,p->data.sex,p->data.age,p->data.xueli,p->data.pozition,p->data.salary,p->data.address,p->data.marriage;Node* Locate(Link l,
7、char findmess,char zcornum/该函数用于定位链表中符合要求的节点,并返回该指针Node *r;if(strcmp(zcornum,"num"=0/按工号查询r=l->next;while(r!=NULLif(strcmp(r->data.num,findmess=0return r;r=r->next;else if(strcmp(zcornum,"pozition"=0/按职称查询r=l->next;while(r!=NULLif(strcmp(r->data.pozition,findmess=0
8、return r;r=r->next;else if(strcmp(zcornum,"name"=0/按姓名查询r=l->next;while(r!=NULLif(strcmp(r->,findmess=0return r;r=r->next;return 0;/若未找到 返回一个空指针void Add(Link l/次函数中 无节点时r指向list头 有节点时 r指向list尾Node *p,*r,*s;/实现添加操作的临时结构体指针变量char num10;int flag=0;r=l;s=l->next;/链表无节点时
9、s=NULL 有节点时 指向第一个职工节点while(r->next!=NULL/如果存在后继节点时 r指针后移一个r=r->next;/将指针移至链表末尾 准备添加记录while(1printf("请你输入工号(以0返回上一级菜单:)"scanf("%s",num;if(strcmp(num,"0"=0/输0跳出break;s=l->next;/每次从第一个节点开始找 看num是否重复while(s/工号重复时返回主菜单if(strcmp(s->data.num,num=0printf("=>
10、提示:工号为%s的职工已经存在,若要修改请选择4!n",num;flag=1;return ;s=s->next;p=(Node *malloc(sizeof(Node;/生成新节点pstrcpy(p->data.num,num;printf("请输入姓名:"scanf("%s",p->;getchar(;printf("请输入性别:"scanf("%s",p->data.sex;getchar(;printf("请输入年龄:"scanf(&q
11、uot;%d",&p->data.age;getchar(;printf("请输入学历:"scanf("%s",p->data.xueli;getchar(;printf("请输入职称:"scanf("%s",p->data.pozition;getchar(;printf("请输入工资:"scanf("%ld",&p->data.salary;getchar(;printf("请输入地址:"scanf(&
12、quot;%s",p->data.address;getchar(;printf("请输入婚否:"scanf("%s",p->data.marriage;getchar(;p->next=NULL;/表明这是链表的尾部节点r->next=p;/将新建的节点加入链表尾部中r=p;saveflag=1;void Del(Link lint sel;Node *p,*r;/实现删除操作的临时结构体指针变量char findmess20;if(!l->next/当list无后继节点时 提示和返回del(printf(&qu
13、ot;n=>提示:没有记录可以删除!n"return ;printf("n=>1 按工号删除n=>2 按姓名删除n"scanf("%d",&sel;if(sel=1printf("请您输入要删除的工号:"scanf("%s",findmess;p=Locate(l,findmess,"num"if(pr=l;while(r->next!=pr=r->next;/从第一个节点找起 直到找到待删除的节点 跳出循环r->next=p->nex
14、t;free(p;printf("n=>提示:该职工已经成功删除!n"saveflag=1;else Nofind(;else if(sel=2printf("请您输入要删除的姓名:"scanf("%s",findmess;p=Locate(l,findmess,"name"if(pr=l;while(r->next!=pr=r->next;r->next=p->next;free(p;printf("n=>提示:该职工已经成功删除!n"saveflag=1;
15、else Nofind(;else Wrong(;void Qur(Link lint sel;char findmess20;Node *p;/实现查询操作的临时结构体指针变量if(!l->nextprintf("n=>提示:没有资料可查询!n"return ;printf("n=>1按工号查询n=>2按职称查询n=>3按姓名查询n"scanf("%d",&sel;if(sel=1printf("请你输入要查找的工号:"scanf("%s",findmes
16、s;p=Locate(l,findmess,"num"if(pprintf("tttt查找结果n"printstart(;printc(;printe(p;printstart(;else Nofind(;else if(sel=2printf("请您输入要查找的职称:"scanf("%s",findmess;p=Locate(l,findmess,"pozition"if(pprintf("tttt查找结果n"printstart(;printc(;printe(p;pri
17、ntstart(;else Nofind(;else if(sel=3printf("请您输入要查找的姓名:"scanf("%s",findmess;p=Locate(l,findmess,"name"if(pprintf("tttt查找结果n"printstart(;printc(;printe(p;printstart(;else Nofind(;else Wrong(;void Modefy(Link lNode *p;char findmess20;if(!l->nextprintf("n=
18、>提示:没有资料可以修改!n"return ;printf("请您输入要修改的职工工号:"scanf("%s",findmess;p=Locate(l,findmess,"num"if(pprintf("请您输入新工号(原来是%s):",p->data.num;scanf("%s",p->data.num;printf("请您输入新姓名(原来是%s):",p->;scanf("%s",p->data
19、.name;printf("请您输入新性别(原来是%s):",p->data.sex;scanf("%s",p->data.sex;printf("请您输入新年龄(原来是%d):",p->data.age;scanf("%d",&p->data.age;printf("请您输入学历(原来是%s):",p->data.xueli;scanf("%s",p->data.xueli;printf("请您输入职称(原来是%s):&
20、quot;,p->data.pozition;scanf("%s",p->data.pozition;printf("请您输入工资(原来是%ld):",p->data.salary;scanf("%ld",&p->data.salary;printf("请您输入地址(原来是%s):",p->data.address;scanf("%s",p->data.address;printf("请您输入婚否(原来是%s):",p->da
21、ta.marriage;scanf("%s",p->data.marriage;printf("n=>提示:资料修改成功!n"else Nofind(;void Insert(Link l/按工号查询到要插入节点的位置 然后在该工号之后插入一个新节点Node *s,*r,*p;/p指向插入位置 p指新插入记录节点char ch,new_num10,old_num10;/前一个保存插入点位置之前的工号 后一个保存输入的新记录的工号int flag=0;s=l->next;system("cls"Disp(l;while
22、(1printf("请您输入已存在的工号(以0返回上一级菜单:)"scanf("%s",old_num;if(strcmp(old_num,"0"=0return ;s=l->next;flag=0;while(s/查询该工号是否存在if(strcmp(s->data.num,old_num=0flag=1;break;s=s->next;if(flag=1/若工号存在 则进行插入之前的新记录的输入操作break;elsegetchar(;printf("n=>%s不存在,是否重新再输入?(y/n):
23、",old_num;scanf("%c",&ch;if(ch='y'|ch='Y'continue;elsereturn ;/以下记录新节点 类似addprintf("请您输入待插入的工号(以0返回上一级菜单:)"scanf("%s",new_num;if(strcmp(new_num,"0"=0return ;s=l->next;/每次从第一个节点开始找 看num是否重复while(s/工号重复时返回主菜单if(strcmp(s->data.num,n
24、ew_num=0printf("=>提示:工号为%s的职工已经存在!n",new_num;flag=1;return ;s=s->next;p=(Node *malloc(sizeof(Node;if(!pprintf("n allocate memory failure"/申请空间失败return ;strcpy(p->data.num,new_num;printf("请您输入姓名:"scanf("%s",p->;getchar(;printf("请您输入性别:
25、"scanf("%s",p->data.sex;getchar(;printf("请您输入年龄:"scanf("%d",&p->data.age;getchar(;printf("请您输入学历:"scanf("%s",p->data.xueli;getchar(;printf("请您输入职称:"scanf("%s",p->data.pozition;getchar(;printf("请您输入工资:&quo
26、t;scanf("%ld",&p->data.salary;getchar(;printf("请您输入地址:"scanf("%s",p->data.address;getchar(;printf("请您输入婚否:"scanf("%s",p->data.marriage;getchar(;p->next=NULL;/表明这是链表的结尾saveflag=1;/在主函数中有对该全局变量的判断 若为1 则进行存盘操作r=l->next;/将指针赋值给r 因为l中的头
27、节点的下一个节点才实际保存着记录while(1if(strcmp(r->data.num,old_num=0/在链表中插入一个节点p->next=r->next;r->next=p;break;r=r->next;/r作为查询指针 从第一个节点找起 直到找到后跳出循环Disp(l;printf("nn"void Tongji(Link lNode *p;int a=0,b=0,c=0;int deal;p=l;printf("请输入您想统计的项目n"printf("=>1 对各工资段的人数进行统计n"
28、;printf("=>2 对各年龄段的人数进行统计n"scanf("%d",&deal;if(deal=1while(1if(p->data.salary>=5000 a+;else if(p->data.salary>=2000&&p->data.salary<5000 b+;else c+;p=p->next;if(p=NULLbreak;system("cls"Disp(l;printf("=>工资大于等于5000的人数是:%dn"
29、,a-1;printf("=>工资大于等于2000且小于5000的人数是:%dn",b;printf("=>工资小于2000的人数是:%dn",c;else if(deal=2while(1if(p->data.age>=30 a+;else if(p->data.age>=18&&p->data.age<30 b+;else c+;p=p->next;if(p=NULLbreak;system("cls"Disp(l;printf("=>年龄大于等
30、于30的人数是:%dn",a-1;printf("=>年龄大于等于18且小于30的人数是:%dn",b;printf("=>年龄小于18的人数是:%dn",c;else Wrong(;void Sort(Link lLink ll;Node *p,*rr,*s;int i=0;int select;if(l->next=NULLsystem("cls"printf("n=>没有职工记录!n"getchar(;return ;ll=(Node*malloc(sizeof(Node;i
31、f(!llprintf("n allocate memory failure"return ;ll->next=NULL;system("cls"Disp(l;p=l->next;printf("请选择排序方法:n"printf("=>1 按年龄排序n=>2 按工资排序n"scanf("%d",&select;while(ps=(Node*malloc(sizeof(Node;/新建节点用于保存从原链表中取出的节点信息if(!s/s=NULLprintf(&quo
32、t;n allocate memory failure"return ;s->data=p->data;/填数据域s->next=NULL;/指针域为空rr=ll;/rr链表于储存插入单个节点后保存排序的链表 ll是这个链表的头指针 每次从头开始查找插入位置if(select=1while(rr->next!=NULL&&rr->next->data.age>=p->data.agerr=rr->next;/指针移至年龄比p所指节点的年龄小的节点位置if(rr->next=NULL/若新链表ll中的所有节点的
33、年龄都比p大 则将p插入末尾rr->next=s;else/否则将该节点插入至第一个年龄比他小的前面s->next=rr->next;rr->next=s;p=p->next;/原链表的指针下移一个节点else if(select=2while(rr->next!=NULL&&rr->next->data.salary>=p->data.salaryrr=rr->next;if(rr->next=NULLrr->next=s;elses->next=rr->next;rr->next
34、=s;p=p->next;else Wrong(;l->next=ll->next;/ll中储存的是已排序的链表的头指针Disp(l;saveflag=1;printf("n =>排序完成!n"void Save(Link lFILE*fp;Node *p;int flag=1,count=0;fp=fopen("employee.txt","wb"if(fp=NULLprintf("n=>提示:重新打开文件时发生错误!n"return ;p=l->next;/指向第一个记录节点
35、while(pif(fwrite(p,sizeof(Node,1,fp=1/将第一个记录节点值写入文件p=p->next;/依次写第二个节点的值count+;/文件记录+1elseflag=0;break;if(count>0printf("n=>提示:文件保存成功,(有%d条记录已经保存)n",count;saveflag=0;elsesystem("cls"printf("保存文件失败,0条记录被保存!n"fclose(fp;void main(char zhanghao10,mima10;char answer
36、110= "jiutian",password110= "20121314"char answer210= "xiaolong",password210= "1314520"int amg=0;int i,j;printf("请等待"for(i=0; i<15; i+Sleep(300;printf("."printf("n"while(1if(amgbreak;printf("请输入用户名:n"scanf("%s&qu
37、ot;,zhanghao;getchar(;printf("请输入密码:n"scanf("%s",mima;getchar(;if(strcmp(answer1,zhanghao=0&&strcmp(password1,mima=0|(strcmp(answer2,zhanghao=0&&strcmp(password2,mima=0system("cls"Link list;/定义链表FILE *fp;/文件指针int choose;/保存选择结果变量char ch;/保存y/nint count=0;/保存节点个数struct node *p,*r;/定义记录指针变量printf("tttt职工信息管理系统nttttn"list=(struct node*malloc(sizeof(struct node;if(!listprintf("n allocate memory fail
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- DB11T 1065-2014 城市基础地理信息矢量数据要素分类与代码
- 江苏省盐城市2024-2025学年高三上学期11月期中物理试题(无答案)
- 化妆品用香料产业深度调研及未来发展现状趋势
- 家禽料槽市场需求与消费特点分析
- 冷链餐饮供应链行业相关项目经营管理报告
- 妇女腹带产业深度调研及未来发展现状趋势
- 江苏省南通市海门区东洲小学等2024-2025学年四年级上学期11月期中科学试题
- 包装袋用纸产业规划专项研究报告
- 传送高功率电子束的波导管产业运行及前景预测报告
- 小学语文“搭石”说课稿
- 小学二年级上册数学-数角的个数专项练习
- 项目目标成本测算书样表
- 特种设备使用单位日管控、周排查、月调度示范表
- 职业生涯规划概述课件
- JB-T 14320-2022 氧气用止回阀
- 九年级英语《Unit 6 When was it invented》说课稿
- 《两办意见》(关于进一步加强矿山安全生产工作的意见)培训课件2024
- 人教版初中化学实验目录(总表)
- 监控工程验收单-范本模板
- 机械设计产品案例分析报告
- 政治审查表(模板)
评论
0/150
提交评论