职工信息管理系统(链表版)
(o.0)
信息管理系统一共分为8个功能,如下菜单所示。
void menu()
{printf(" ************职工管理系统*************\n");printf(" * 1. 添加职工 *\n");printf(" * 2. 查询职工 *\n");printf(" * 3. 对职工数据排序 *\n");printf(" * 4. 删除职工数据 *\n");printf(" * 5. 修改职工数据 *\n");printf(" * 6. 部门职工分析 *\n");printf(" * 7. 输出信息表 *\n");printf(" * 8. 保存信息 *\n");printf(" * 0. 退出程序 *\n");printf(" *************************************\n");
}
用链表实现系统的第一步要有一个链表,链表的创建包含添加职工函数中。将main函数中的头节点传入函数再用头插法创建链表。
st1 *input(st1*head)//录入职工信息 --------------
{int num,m;printf("请输入职工人数\n");//scanf("%d",&m);m=erro(m);st1 *j=head;st1 *p=head->next;//中间节点for(int i=0;i<m;i++){p=(st1*)malloc(sizeof(st1));printf("第%d个职工的编号\n",i+1);p->bh=erro(p->bh);printf("第%d个职工的姓名\n",i+1);scanf("%s",&p->xm);printf("部门\n");scanf("%s",&p->bm);printf("职称\n");scanf("%s",&p->zc);printf("基本工资\n");p->jb=erro(p->jb);printf("加班工资\n");p->jbb=erro(p->jbb);printf("奖金\n");p->jj=erro(p->jj);p->zgj=p->jb+p->jbb+p->jj;//printf("总工资=%d\n"); p->next=head->next;head->next=p;//p->next=head->next;//head->next=p;}return head;
}
有了链表之后就可以愉快的实现其他功能了。
首先是查询,分为编号查询和姓名查询。这两个其实差不多,只需要把链表遍历一边找到需要的那个输出就行了。
void find(st1 *head,int no)//编号查询-------------
{int i=0;st1 *p=head->next;while(p!=NULL){if(no==p->bh){printf("\n该职工的工资的信息如下:\n");printf("职工编号:%d\n",no);printf("姓名:");printf("%s\n",p->xm);printf("部门:");printf("%s\n",p->bm);printf("职称:");printf("%s\n",p->zc);printf("基本工资:");printf("%.3lf\n",p->jb);printf("加班工资:");printf("%.3lf\n",p->jbb);printf("奖金:");printf("%.3lf\n",p->jj);printf("总工资:");printf("%.3lf\n",p->zgj);p=p->next;i=1;}elsep=p->next;}if(i==0){printf("查无此人!\n"); }
}
void finded(st1 *head,char* name)//姓名查询-------------
{int i=0;st1 *p=head->next;while(p!=NULL){if(strcmp(name,p->xm)==0){printf("\n该职工的工资的信息如下:\n");printf("职工编号:%d\n",p->bh);//printf("姓名:");//printf("%s\n",p->xm);printf("部门:");printf("%s\n",p->bm);printf("职称:");printf("%s\n",p->zc);printf("基本工资:");printf("%.3lf\n",p->jb);printf("加班工资:");printf("%.3lf\n",p->jbb);printf("奖金:");printf("%.3lf\n",p->jj);printf("总工资:");printf("%.3lf\n",p->zgj);p=p->next;i=1;}elsep=p->next;}if(i==0){printf("查无此人!\n"); }
}
然后是排序,这里运用冒泡排序的方法将总工资从小到大排列出来。
void paixu(st1 *head)//***********总工资
{st1 *p,*q,*tail,*l;tail=NULL;while((head->next->next)!=tail){p=head;q=head->next;while(q->next!=tail){if((q->zgj)>(q->next->zgj)){p->next=q->next;q->next=q->next->next;p->next->next=q;q=p->next;}q=q->next;p=p->next;}tail=q;}printf("排序完成 总工资从小到大为:\n");l=head->next;while(l!=NULL){if(l->next!=NULL){printf("%s号%.3lf元->",l->xm,l->zgj);l=l->next;}else{printf("%s号%.3lf元",l->xm,l->zgj);l=l->next;}}printf("\n");
}
删除功能,仍然是遍历链表找到符合条件的节点进行删除,但是要注意删除后要重新将前后节点相连。
void dele(st1*head)
{int no,num=0;st1*p,*q,k;q=head;p=head;printf("请输入要删除员工的编号\n");no=first(no);//printf("%d\n",no);//printf("%d\n",p->bh);//p->第一个节点 while(p->next!=NULL){if(no==p->next->bh){k=*p;k.next=p->next->next;q=p->next;free(q);num++;break;}p=p->next;}if(num!=0){printf("删除完成!\n");}elseprintf("查无此人!\n");
}
修改功能,遍历链表寻找要修改的节点。
void reget(st1* head)
{int no,n,num=0;int bb;st1*p;head:num=0;p=head;printf("请输入要修改的职工编号\n");no=erro(no);while(p!=NULL){if(p->bh==no){loop:num++;printf("请输入要修改的内容\n");printf("1:编号 2:姓名 3:部门 4:职称 5:基本工资 6:加班工资 7:奖金\n");n=first(n);switch(n){case 1:printf("请输入\n");bb=erro(bb);p->bh=bb;printf("完成!\n");break;case 2:printf("请输入\n");scanf("%s",&p->xm);printf("完成!\n");break;case 3:printf("请输入\n");scanf("%s",&p->bm);printf("完成!\n");break;case 4:printf("请输入\n");scanf("%s",&p->zc);printf("完成!\n");break;case 5:printf("请输入\n");p->jb=erro(p->jb);printf("完成!\n");break;case 6:printf("请输入\n");p->jbb=erro(p->jbb);printf("完成!\n");break;case 7:printf("请输入\n");p->jj=erro(p->jj);printf("完成!\n");break;case 0:printf("输入错误\n");goto loop;}}p=p->next;}if(num!=0){printf("修改完成\n");printf("%d",num);}else{char m[10];printf("查无此人,按t退出\n");scanf("%s",m);if(strcmp(m,"t")==0){return;}goto head;}
}
分析平均工资的数据,并分析所要分析的职称在所有职称中的占比。仍然是遍历链表来计算。
void fenxi(st1*head)
{double x=0;char work[20];int num=0;st1*p;st1*k;p=head->next;k=head->next;printf("平均工资:\n");while(p!=NULL){x=x+p->zgj;num++;p=p->next;}printf("%.3lf\n",x/num);loop:int i=0;int j=0;printf("请输入要查询的职称\n");scanf("%s",work);while(k!=NULL){if(strcmp(work,k->zc)==0){j++;}i++;if(k->next!=NULL){k=k->next;}elsebreak;}if(j==0){printf("暂没有此职称,请重新输入\n");getchar();goto loop;}else{printf("职务%s:%d /100\n",k->zc,100*j/i);}
}
最后就可以将信息输出确保无误后保存在文件里。
void print(st1*head)
{st1*p;p=head->next;while(p!=NULL){printf("********************\n");printf("* 编号:%d\n",p->bh);printf("* 姓名:%s\n",p->xm);printf("* 部门:%s\n",p->bm);printf("* 职称:%s\n",p->zc);printf("* 基本工资:%.3lf\n",p->jb);printf("* 加班工资:%.3lf\n",p->jbb);printf("* 奖金:%.3lf\n",p->jj);printf("********************\n");p=p->next;}
}
void baocun(st1*head)
{FILE *fp;int i,d;st1*p;p=head->next;fp=fopen("职工信息.txt","w");if(fp==NULL){printf("file\n");exit(0);}fprintf(fp,"编号\t");fprintf(fp,"姓名\t");fprintf(fp,"部门\t");fprintf(fp,"职称\t");fprintf(fp,"基本工资\t");fprintf(fp,"加班工资\t");fprintf(fp,"奖金\t");fprintf(fp,"\n");while(p!=NULL){fprintf(fp,"%d\t",p->bh);fprintf(fp,"%s\t",p->xm);fprintf(fp,"%s\t",p->bm);fprintf(fp,"%s\t",p->zc);fprintf(fp,"%.3lf \t",p->jb);fprintf(fp,"%.3lf \t",p->jbb);fprintf(fp,"%.3lf\t",p->jj);fprintf(fp,"\n");p=p->next;}fclose(fp);
}
完整代码
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
typedef struct student {int bh;//编号char xm[40];//姓名 char bm[20];//部门char zc[20];//职称 double jb;//基本工资double jbb;//加班工资 double jj;//奖金 double zgj;//总工资 struct student *next;}st1;
void menu()
{printf(" ************职工管理系统*************\n");printf(" * 1. 添加职工 *\n");printf(" * 2. 查询职工 *\n");printf(" * 3. 对职工数据排序 *\n");printf(" * 4. 删除职工数据 *\n");printf(" * 5. 修改职工数据 *\n");printf(" * 6. 部门职工分析 *\n");printf(" * 7. 输出信息表 *\n");printf(" * 8. 保存信息 *\n");printf(" * 0. 退出程序 *\n");printf(" *************************************\n");
}
double erro(double num)//开头编号选择----------
{while(1){if(scanf("%lf",&num)==0){while(getchar()!='\n');}else if(num<=11000&&num>=0){break;}printf("输入错误\n");}
}
int first(int num)//开头编号选择----------
{int i=5;while(1){if(scanf("%d",&num)==0){while(getchar()!='\n');}else if(num==1||num==2||num==3||num==4||num==5||num==6||num==7||num==0||num==8){break;}printf("输入错误(%d)\n",i);i--;if(i==0){printf("结束了!!!");getchar();exit(0);}}
}
/*void replay(st1 *head,st1 *p,int n)//编号查重
{while(1){}
} */
st1 *input(st1*head)//录入职工信息 --------------
{int num,m;printf("请输入职工人数\n");//scanf("%d",&m);m=erro(m);st1 *j=head;st1 *p=head->next;//中间节点for(int i=0;i<m;i++){p=(st1*)malloc(sizeof(st1));printf("第%d个职工的编号\n",i+1);p->bh=erro(p->bh);printf("第%d个职工的姓名\n",i+1);scanf("%s",&p->xm);printf("部门\n");scanf("%s",&p->bm);printf("职称\n");scanf("%s",&p->zc);printf("基本工资\n");p->jb=erro(p->jb);printf("加班工资\n");p->jbb=erro(p->jbb);printf("奖金\n");p->jj=erro(p->jj);p->zgj=p->jb+p->jbb+p->jj;//printf("总工资=%d\n"); p->next=head->next;head->next=p;//p->next=head->next;//head->next=p;}return head;
}
void find(st1 *head,int no)//职工查询-------------
{int i=0;st1 *p=head->next;while(p!=NULL){if(no==p->bh){printf("\n该职工的工资的信息如下:\n");printf("职工编号:%d\n",no);printf("姓名:");printf("%s\n",p->xm);printf("部门:");printf("%s\n",p->bm);printf("职称:");printf("%s\n",p->zc);printf("基本工资:");printf("%.3lf\n",p->jb);printf("加班工资:");printf("%.3lf\n",p->jbb);printf("奖金:");printf("%.3lf\n",p->jj);printf("总工资:");printf("%.3lf\n",p->zgj);p=p->next;i=1;}elsep=p->next;}if(i==0){printf("查无此人!\n"); }
}
void finded(st1 *head,char* name)//职工查询-------------
{int i=0;st1 *p=head->next;while(p!=NULL){if(strcmp(name,p->xm)==0){printf("\n该职工的工资的信息如下:\n");printf("职工编号:%d\n",p->bh);//printf("姓名:");//printf("%s\n",p->xm);printf("部门:");printf("%s\n",p->bm);printf("职称:");printf("%s\n",p->zc);printf("基本工资:");printf("%.3lf\n",p->jb);printf("加班工资:");printf("%.3lf\n",p->jbb);printf("奖金:");printf("%.3lf\n",p->jj);printf("总工资:");printf("%.3lf\n",p->zgj);p=p->next;i=1;}elsep=p->next;}if(i==0){printf("查无此人!\n"); }
}
void paixu(st1 *head)//***********总工资
{st1 *p,*q,*tail,*l;tail=NULL;while((head->next->next)!=tail){p=head;q=head->next;while(q->next!=tail){if((q->zgj)>(q->next->zgj)){p->next=q->next;q->next=q->next->next;p->next->next=q;q=p->next;}q=q->next;p=p->next;}tail=q;}printf("排序完成 总工资从小到大为:\n");l=head->next;while(l!=NULL){if(l->next!=NULL){printf("%s号%.3lf元->",l->xm,l->zgj);l=l->next;}else{printf("%s号%.3lf元",l->xm,l->zgj);l=l->next;}}printf("\n");
}
void paixu2(st1*head)
{st1 *p,*q,*tail,*l;tail=NULL;while((head->next->next)!=tail){p=head;q=head->next;while(q->next!=tail){if((q->jb)>(q->next->jb)){p->next=q->next;q->next=q->next->next;p->next->next=q;q=p->next;}q=q->next;p=p->next;}tail=q;}printf("排序完成 基本工资从小到大为:\n");l=head->next;while(l!=NULL){if(l->next!=NULL){printf("%s号%.3lf元->",l->xm,l->jb);l=l->next;}else{printf("%s号%.3lf元",l->xm,l->jb);l=l->next;}}printf("\n");
}
void dele(st1*head)
{int no,num=0;st1*p,*q,k;q=head;p=head;printf("请输入要删除员工的编号\n");no=first(no);//printf("%d\n",no);//printf("%d\n",p->bh);//p->第一个节点 while(p->next!=NULL){if(no==p->next->bh){k=*p;k.next=p->next->next;q=p->next;free(q);num++;break;}p=p->next;}if(num!=0){printf("删除完成!\n");}elseprintf("查无此人!\n");
}
void reget(st1* head)
{int no,n,num=0;int bb;st1*p;head:num=0;p=head;printf("请输入要修改的职工编号\n");no=erro(no);while(p!=NULL){if(p->bh==no){loop:num++;printf("请输入要修改的内容\n");printf("1:编号 2:姓名 3:部门 4:职称 5:基本工资 6:加班工资 7:奖金\n");n=first(n);switch(n){case 1:printf("请输入\n");bb=erro(bb);p->bh=bb;printf("完成!\n");break;case 2:printf("请输入\n");scanf("%s",&p->xm);printf("完成!\n");break;case 3:printf("请输入\n");scanf("%s",&p->bm);printf("完成!\n");break;case 4:printf("请输入\n");scanf("%s",&p->zc);printf("完成!\n");break;case 5:printf("请输入\n");p->jb=erro(p->jb);printf("完成!\n");break;case 6:printf("请输入\n");p->jbb=erro(p->jbb);printf("完成!\n");break;case 7:printf("请输入\n");p->jj=erro(p->jj);printf("完成!\n");break;case 0:printf("输入错误\n");goto loop;}}p=p->next;}if(num!=0){printf("修改完成\n");printf("%d",num);}else{char m[10];printf("查无此人,按t退出\n");scanf("%s",m);if(strcmp(m,"t")==0){return;}goto head;}
}
void fenxi(st1*head)
{double x=0;char work[20];int num=0;st1*p;st1*k;p=head->next;k=head->next;printf("平均工资:\n");while(p!=NULL){x=x+p->zgj;num++;p=p->next;}printf("%.3lf\n",x/num);loop:int i=0;int j=0;printf("请输入要查询的职称\n");scanf("%s",work);while(k!=NULL){if(strcmp(work,k->zc)==0){j++;}i++;if(k->next!=NULL){k=k->next;}elsebreak;}if(j==0){printf("暂没有此职称,请重新输入\n");getchar();goto loop;}else{printf("职务%s:%d /100\n",k->zc,100*j/i);}
}
void print(st1*head)
{st1*p;p=head->next;while(p!=NULL){printf("********************\n");printf("* 编号:%d\n",p->bh);printf("* 姓名:%s\n",p->xm);printf("* 部门:%s\n",p->bm);printf("* 职称:%s\n",p->zc);printf("* 基本工资:%.3lf\n",p->jb);printf("* 加班工资:%.3lf\n",p->jbb);printf("* 奖金:%.3lf\n",p->jj);printf("********************\n");p=p->next;}
}
void baocun(st1*head)
{FILE *fp;int i,d;st1*p;p=head->next;fp=fopen("职工信息.txt","w");if(fp==NULL){printf("file\n");exit(0);}fprintf(fp,"编号\t");fprintf(fp,"姓名\t");fprintf(fp,"部门\t");fprintf(fp,"职称\t");fprintf(fp,"基本工资\t");fprintf(fp,"加班工资\t");fprintf(fp,"奖金\t");fprintf(fp,"\n");while(p!=NULL){fprintf(fp,"%d\t",p->bh);fprintf(fp,"%s\t",p->xm);fprintf(fp,"%s\t",p->bm);fprintf(fp,"%s\t",p->zc);fprintf(fp,"%.3lf \t",p->jb);fprintf(fp,"%.3lf \t",p->jbb);fprintf(fp,"%.3lf\t",p->jj);fprintf(fp,"\n");p=p->next;}fclose(fp);
}
int main()
{int num;st1 *head=(st1*)malloc(sizeof(st1));head->next=NULL;do{menu();printf("请选择!\n");num=first(num);switch(num){case 1:head=input(head);getchar();printf("按任意键返回主菜单\n");getchar(); system("cls");break;case 2:rein:int no,fi;char name[40]; printf("1:按编号查 2:按姓名查\n");fi=first(fi);if(fi==1){printf("请输入要查找的员工编号\n");no=erro(no);find(head,no);//编号的输入 }else if(fi==2){printf("请输入员工姓名\n");scanf("%s",name);finded(head,name);}else{printf("请重新输入\n");goto rein;}getchar();printf("按任意键回到菜单\n");getchar();system("cls");break;case 3:loop:int choice;printf("1;总工资排序 2;基本工资排序\n") ;choice=first(choice);if(choice==1){paixu(head);}else if(choice==2){paixu2(head);}else {printf("请重新输入\n");goto loop;}getchar();printf("按任意键回到菜单\n");getchar();system("cls");break;case 4:{dele(head);getchar();printf("按任意键回到菜单\n");getchar();system("cls");break;} case 5:{char m[40];lll:reget(head);mmm:printf("是否继续修改?(yes/no)\n");scanf("%s",&m);if(strcmp(m,"yes")==0){goto lll;}else if(strcmp(m,"no")==0){getchar();printf("按任意键回到菜单\n");getchar();system("cls");break;}else{printf("请重新输入!\n");goto mmm;}getchar();printf("按任意键回到菜单\n");getchar();system("cls");break;} case 6:{char reg[20];no1:fenxi(head);no2:printf("是否继续查询?(yes/no)\n");scanf("%s",®);if(strcmp(reg,"yes")==0){goto no1;}else if(strcmp(reg,"no")==0){getchar();printf("按任意键回到菜单\n");getchar();system("cls");break;}else{printf("请重新输入!\n");goto no2;}getchar();printf("按任意键回到菜单\n");getchar();system("cls");break;}case 7:{print(head);getchar();printf("按任意键回到菜单\n");getchar();system("cls");break;}case 8: baocun(head);printf("保存完成!\n");getchar();printf("按任意键回到菜单\n");getchar();system("cls");break;{}case 0:{printf("感谢使用!");} }}while(num);
}
代码很烂,大家互相学习。
职工信息管理系统(链表版)相关推荐
- 职工系统c语言链表,C语言职工信息管理系统(链表)..doc
<程序设计综合训练> 设 计 报 告 专 业: 数字媒体技术 班 级: 11媒体Z 学 号: 姓 名: 朱毅 指导教师: 陈湘军 陈明霞 成 绩: 计算机工程学院 2012年10月 第一部 ...
- c语言用链表写管理系统程序,c语言课程设计职工信息管理系统单链表实现程序源代码-20210401015126.docx-原创力文档...
文档编制序号:[KKIDT-LLE0828-LLETD298-POI08] 文档编制序号:[KKIDT-LLE0828-LLETD298-POI08] C语言课程设计职工信息管理系统单链表实现程序源代 ...
- 职工信息管理系统开发设计报告版(含源代码)
提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 需要解答可以私信给我,冲冲冲. 前言 假设如果我们要存储n个职员信息,我们可以定义一个大小为n的顺序表,每个Si元素可以储存一个职工的 ...
- C语言期末大作业15个(附源码)成绩管理系统、图书馆管理系统、学生打卡系统、超市信息管理系统、学生考勤系统、职工信息管理系统源码、歌曲信息管理系统、超市收款系统等等
C语言期末作业15个(上) 1.C语言学生成绩管理系统 2.C语言图书馆管理系统(复杂版) 3.C语言图书馆管理系统(简洁版) 4.C语言停车管理系统(两个版本) 5.C语言学生考勤系统 6.C语言班 ...
- 数据结构课程设计报告-职工信息管理系统
"数据结构"课程设计报告 系 (院): 信息工程学院 设计题目: 员工管理系统 专业班级: 计算机科学与技术1401B 小 ...
- C语言/C++常见习题问答集锦(五十二) 之职工信息管理系统
C语言/C++常见习题问答集锦(五十二) 之职工信息管理系统 程序之美 用C语言,职工信息管理系统具体要求 1.基本信息:如工号.姓名.性别.年龄.学历.住址.电话号码.工资等. 2.各职工信息用结构 ...
- 用C语言,职工信息管理系统
用C语言,职工信息管理系统具体要求 1.基本信息:如工号.姓名.性别.年龄.学历.住址.电话号码.工资等. 2.各职工信息用结构体来实现,建议使用链表来实现建立.删除.插入等操作. 3.需建立输出文件 ...
- 职工信息管理系统c语言报告,职工信息管理系统(c语言实现)
功能实现: (1)系统以菜单方式工作 (2)职工信息录入功能(职工信息用文件保存)--输入 (3)职工信息浏览功能--输出 (4)职工信息查询功能--算法 查询方式:按姓名查询/按职工号查询 (5)职 ...
- C语言模拟实现职工信息管理系统
代码实现如下: #include <stdio.h>//输入.输出指令 #include <malloc.h>//在内存中动态的分配size字节的存储区 #include &l ...
- C语言期末作业(15个)-货物管理系统、歌曲信息管理系统、职工信息管理系统源码、学生打卡系统、小学生计算机辅助教学系统、门禁系统、银行管理系统等等
C语言期末作业15个(下) 9.C语言货物管理系统 10.C语言歌曲信息管理系统 11.C语言职工信息管理系统源码 12.C语言学生打卡系统 13.C语言小学生计算机辅助教学系统 14.C语言门禁系统 ...
最新文章
- 数据库事务的四大特性和隔离级别
- python+opencv获取最小外接矩形
- 为什么说数据中心是5G最大的受益者?
- MySQL数据库密码重置
- 【Transformer】TNT: Transformer iN Transformer
- Jconsole查看Weblogic自定义MBean
- 阿里面试“神器”,成为众多程序员手中的王炸!
- 大神微服务笔记全过程博客
- 移动端调取摄像头上面如何给出框_智能AI助力家居安防,创维小湃高清智能摄像头...
- DES加密解密-CryptoJS与Java
- 珍藏版仅30M迷你版Microsoft Office(Win10可用)
- MongoDB 数据库基本操作
- T-test检验中的P,α理解
- Learn Git Branching 笔记
- OpenKE 的使用(四)— HolE 和 ComplEx 论文复现
- A - 可以教学姐画画嘛QAQ
- 解决VC中编译出现”SHSQ.dll This required file cannot be loaded. Please re-install Microsoft Visual C++“方法之一
- BCB操作EXCEL
- Java配置环境变量教程,Java配置环境变量的作用
- CTA 策略分享之一
热门文章
- def read()
- 数组的filter方法,数组过滤方法
- plc和c语言和cnc,CNC是什么意思? CNC 和 PLC的区别?
- Linux与数据库简要说明
- error pulling image configuration: read tcp
- EVE-ng模拟器安装教程和使用教程
- (寒假开黑gym)2018 ACM-ICPC, Syrian Collegiate Programming Contest(爽题)
- 注册aws账号创建ec2免费套餐
- 防止电子元器件烧坏那些要避的坑
- 前端 学完HTML+CSS 自己动手写出QQ官网导航栏