(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",&reg);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);
}

代码很烂,大家互相学习。

职工信息管理系统(链表版)相关推荐

  1. 职工系统c语言链表,C语言职工信息管理系统(链表)..doc

    <程序设计综合训练> 设 计 报 告 专 业: 数字媒体技术 班 级: 11媒体Z 学 号: 姓 名: 朱毅 指导教师: 陈湘军 陈明霞 成 绩: 计算机工程学院 2012年10月 第一部 ...

  2. c语言用链表写管理系统程序,c语言课程设计职工信息管理系统单链表实现程序源代码-20210401015126.docx-原创力文档...

    文档编制序号:[KKIDT-LLE0828-LLETD298-POI08] 文档编制序号:[KKIDT-LLE0828-LLETD298-POI08] C语言课程设计职工信息管理系统单链表实现程序源代 ...

  3. 职工信息管理系统开发设计报告版(含源代码)

    提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 需要解答可以私信给我,冲冲冲. 前言 假设如果我们要存储n个职员信息,我们可以定义一个大小为n的顺序表,每个Si元素可以储存一个职工的 ...

  4. C语言期末大作业15个(附源码)成绩管理系统、图书馆管理系统、学生打卡系统、超市信息管理系统、学生考勤系统、职工信息管理系统源码、歌曲信息管理系统、超市收款系统等等

    C语言期末作业15个(上) 1.C语言学生成绩管理系统 2.C语言图书馆管理系统(复杂版) 3.C语言图书馆管理系统(简洁版) 4.C语言停车管理系统(两个版本) 5.C语言学生考勤系统 6.C语言班 ...

  5. 数据结构课程设计报告-职工信息管理系统

    "数据结构"课程设计报告 系 (院):           信息工程学院 设计题目:           员工管理系统 专业班级:          计算机科学与技术1401B 小 ...

  6. C语言/C++常见习题问答集锦(五十二) 之职工信息管理系统

    C语言/C++常见习题问答集锦(五十二) 之职工信息管理系统 程序之美 用C语言,职工信息管理系统具体要求 1.基本信息:如工号.姓名.性别.年龄.学历.住址.电话号码.工资等. 2.各职工信息用结构 ...

  7. 用C语言,职工信息管理系统

    用C语言,职工信息管理系统具体要求 1.基本信息:如工号.姓名.性别.年龄.学历.住址.电话号码.工资等. 2.各职工信息用结构体来实现,建议使用链表来实现建立.删除.插入等操作. 3.需建立输出文件 ...

  8. 职工信息管理系统c语言报告,职工信息管理系统(c语言实现)

    功能实现: (1)系统以菜单方式工作 (2)职工信息录入功能(职工信息用文件保存)--输入 (3)职工信息浏览功能--输出 (4)职工信息查询功能--算法 查询方式:按姓名查询/按职工号查询 (5)职 ...

  9. C语言模拟实现职工信息管理系统

    代码实现如下: #include <stdio.h>//输入.输出指令 #include <malloc.h>//在内存中动态的分配size字节的存储区 #include &l ...

  10. C语言期末作业(15个)-货物管理系统、歌曲信息管理系统、职工信息管理系统源码、学生打卡系统、小学生计算机辅助教学系统、门禁系统、银行管理系统等等

    C语言期末作业15个(下) 9.C语言货物管理系统 10.C语言歌曲信息管理系统 11.C语言职工信息管理系统源码 12.C语言学生打卡系统 13.C语言小学生计算机辅助教学系统 14.C语言门禁系统 ...

最新文章

  1. 数据库事务的四大特性和隔离级别
  2. python+opencv获取最小外接矩形
  3. 为什么说数据中心是5G最大的受益者?
  4. MySQL数据库密码重置
  5. 【Transformer】TNT: Transformer iN Transformer
  6. Jconsole查看Weblogic自定义MBean
  7. 阿里面试“神器”,成为众多程序员手中的王炸!
  8. 大神微服务笔记全过程博客
  9. 移动端调取摄像头上面如何给出框_智能AI助力家居安防,创维小湃高清智能摄像头...
  10. DES加密解密-CryptoJS与Java
  11. 珍藏版仅30M迷你版Microsoft Office(Win10可用)
  12. MongoDB 数据库基本操作
  13. T-test检验中的P,α理解
  14. Learn Git Branching 笔记
  15. OpenKE 的使用(四)— HolE 和 ComplEx 论文复现
  16. A - 可以教学姐画画嘛QAQ
  17. 解决VC中编译出现”SHSQ.dll This required file cannot be loaded. Please re-install Microsoft Visual C++“方法之一
  18. BCB操作EXCEL
  19. Java配置环境变量教程,Java配置环境变量的作用
  20. CTA 策略分享之一

热门文章

  1. def read()
  2. 数组的filter方法,数组过滤方法
  3. plc和c语言和cnc,CNC是什么意思? CNC 和 PLC的区别?
  4. Linux与数据库简要说明
  5. error pulling image configuration: read tcp
  6. EVE-ng模拟器安装教程和使用教程
  7. (寒假开黑gym)2018 ACM-ICPC, Syrian Collegiate Programming Contest(爽题)
  8. 注册aws账号创建ec2免费套餐
  9. 防止电子元器件烧坏那些要避的坑
  10. 前端 学完HTML+CSS 自己动手写出QQ官网导航栏