1、职工工资管理系统C语言1、 设计内容设计一个工资管理程序存储的数据包括:姓名,职工号,所属部门,基本工资,奖励工资,补贴项目及金额和扣款项目及金额。功能:1)加入一个人的记录2)删除一个人的记录3)显示所有人的记录4)查询(包括按人名查询工资和按工号查询)5)统计功能(包括统计某一工资范围的人数和统计各部门的工资总数)6)修改功能2、设计目的1.熟悉C语言程序的编辑、编译链接和运行的过程。 2.熟练运用if语句和switch语句以及嵌套应用。3.学习并掌握C语言定义函数的基本方法、声明函数及调用函数的方法和过程。4.掌握文件的概念以及文件的定义方法,认识文件打开、关闭、读、写等文件基本操作函数
2、。5.掌握结构体类型变量、数组的定义和使用。6. 掌握数组的定义、引用以及输入输出的方法、通过字符数组存储字符串,进一步使用字符串。3、 设计思路(包括所用的函数) 图1 程序功能图void show();void add();/添加职工信息void see();/查看职工信息void search();/查找职工信息void ghcz();/按工号查找void xmcz();/按姓名查找void bmcz();/按部门查找void del();/删除职工信息void xmsc();/按姓名删除void ghsc();/按工号删除void statistics();/个人工资统计void st
3、atistic();/统计职工信息void gzdtj();/按工资段统计void bmtj();/按部门统计void modify();/修改职工信息void ghxg();/ 按工号修改void xmxg();/按姓名修改void reserve();/保存职工信息1、添加职工信息:添加函数流程图2、查看职工信息:查看函数流程图3、查找职工信息:查找函数流程图4、删除职工信息:删除函数流程图5、个人工资统计个人工资统计流程图6、统计职工工资工资统计流程图7、修改职工工资修改函数流程图4、 程序代码#include #include #include struct workerchar de
4、pa30;char name30;char ID10;int salary1,salary2,salary3,salary4;int dq(struct worker wo);void show();void bc(struct worker wo);void add();void see();void search();void ghcz();void xmcz();void bmcz();void del();void xmsc();void ghsc();void statistics();void statistic();void gzdtj();void bmtj();void mo
5、dify();void ghxg(); void xmxg();void reserve();void back();struct worker wo100; /保存所有的职工信息int Number=0; /记录总的职工人数void main()int choose=0;while(1) show();printf(tt=请选择:);scanf(%d,&choose);system(cls);switch(choose)case 0:exit(0);/退出break; case 1:add();back();/添加职工信息break; case 2:see();back();/查看职工信息
6、break;case 3:search(); back();/查找职工信息break;case 4:del ();back();/删除职工信息break;case 5:statistics ();back();/个人工资统计break; case 6:statistic();back();/统计职工工资break; case 7:modify();back();/修改职工信息break;case 8:reserve();back();/保存数据 break;default:break;fflush(stdin);system(cls);int dq(struct worker wo)FILE
7、*fp=NULL;int i=0;fp=fopen(C:/worker.dat,rb);while(fread(&woi,sizeof(struct worker),1,fp)i+;fclose(fp);return i;void show()printf(n);printf(t*职工工资管理系统*nn);printf(t*nn);printf(t1添加职工信息n);printf(t2查看职工信息n);printf(t3查找职工信息n);printf(t4删除职工信息n);printf(t5个人工资统计n);printf(t6统计职工工资n);printf(t7修改职工信息n);printf(
8、t8 保 存 数 据n);printf(t0 退 出 系 统nn);printf(t*n);void bc(struct worker *wo)FILE *fp=NULL;fp=fopen(C:/worker.dat,ab+);fwrite(wo,sizeof(struct worker),1,fp);fclose(fp);/添加职工信息void add() int numberTemp=0;int i=0;struct worker temp; printf(请输入要添加职工个数:);scanf(%d,&numberTemp);for(i=0;inumberTemp;i+)printf(输入
9、第%d个职工信息n,i+1);printf(姓名:);scanf(%s,temp.name);printf(工号:);scanf(%s,temp.ID);printf(所属部门:);scanf(%s,temp.depa);printf(基本工资:);scanf(%d,&temp.salary1);printf(奖励工资:);scanf(%d,&temp.salary2);printf(补贴项目即金额:);scanf(%d,&temp.salary3);printf(扣除项目即金额:);scanf(%d, &temp.salary4);woNumber+=temp; /写入到数组bc(&temp
10、); /写入到文件printf(添加成功n);/查看职工信息void see() int i=0;printf(以下是全部职工n);printf(t姓名t工号t所属部门t基本工资t奖励工资t补贴项目及金额t扣款项目及金额t总工资n);while(iNumber)printf(t%st%st%st%dtt%dtt%dtt%dtt%dn,woi.name,woi.ID,woi.depa,woi.salary1,woi.salary2,woi.salary3,woi.salary4,woi.salary1+woi.salary2+woi.salary3-woi.salary4);i+;/查找职工信息
11、void search() int n=0;printf(1 按姓名查找n);printf(2 按工号查找n); printf(3 按部门查找n);scanf(%d,&n);switch(n)case 1: xmcz();break;case 2: ghcz();break;case 3: bmcz();break;default: printf(输入错误!n);break; void xmcz()/按姓名查找 char name30;int i=0;printf(请输入要查找职工姓名:);scanf(%s,name);system(cls);printf(t姓名t工号t所属部门t基本工资t奖
12、励工资t补贴项目及金额t扣款项目及金额t总工资n);for (i=0;iNumber;i+)if (strcmp(name,woi.name)=0)printf(t%st%st%st%dtt%dtt%dtt%dtt%dn,woi.name,woi.ID,woi.depa,woi.salary1,woi.salary2,woi.salary3,woi.salary4,woi.salary1+woi.salary2+woi.salary3-woi.salary4);void ghcz()/按工号查找 char id10;int i=0;printf(请输入要查找工号:);scanf(%s,id);
13、system(cls);printf(t姓名t工号t所属部门t基本工资t奖励工资t补贴项目及金额t扣款项目及金额t总工资n);for (i=0;iNumber;i+)if (strcmp(id,woi.ID)=0)printf(t%st%st%st%dtt%dtt%dtt%dtt%dn,woi.name,woi.ID,woi.depa,woi.salary1,woi.salary2,woi.salary3,woi.salary4,woi.salary1+woi.salary2+woi.salary3-woi.salary4);void bmcz()/按部门查找 char depa30; int
14、 i=0; printf(请输入要查询的部门名称:); scanf(%s,depa); system(cls); printf(t姓名t工号t所属部门t基本工资t奖励工资t补贴项目及金额t扣款项目及金额t总工资n); for (i=0;iNumber;i+) if (strcmp(depa,woi.depa)=0) printf(t%st%st%st%dtt%dtt%dtt%dtt%dn,woi.name,woi.ID,woi.depa,woi.salary1,woi.salary2,woi.salary3,woi.salary4,woi.salary1+woi.salary2+woi.sal
15、ary3-woi.salary4); /删除职工信息void del() int n=0;printf(1 按姓名删除n);printf(2 按工号删除n);scanf(%d,&n);switch(n)case 1: xmsc();break;case 2: ghsc();break;void xmsc()/按姓名删除 FILE *fp=NULL;char name30;int i=0;int j=0;printf(请输入要删除的职工姓名:);scanf(%s,name);for(i=0;iNumber;i+)if (strcmp(name,woi.name)=0)for (j=i;jNumb
16、er-1;j+)woj=woj+1;Number-;/将剩余数据写入文件 擦除以前的数据fp=fopen(C:/worker.dat,wb);for (i=0;iNumber;i+)fwrite(&woi,sizeof(struct worker),1,fp);fclose(fp);printf(删除成功;n);void ghsc()/按工号删除 FILE *fp=NULL;char id60;int i=0;int j=0;printf(请输入要删除的职工工号:);scanf(%s,id);for(i=0;iNumber;i+)if (strcmp(id,woi.ID)=0) for (j=
17、i;jNumber-1;j+)woj=woj+1;Number-;/将剩余数据写入文件 擦除以前的数据fp=fopen(C:/worker.dat,wb);for (i=0;iNumber;i+)fwrite(&woi,sizeof(struct worker),1,fp);fclose(fp);printf(删除成功;n);/个人工资统计void statistics() int i=0;double sum100;for(i=0;iNumber;i+)sumi=woi.salary1+woi.salary2+woi.salary3-woi.salary4;printf(%s的总工资为:%f
18、n,woi.name,sumi);void statistic()/统计职工工资 int n=0;printf(1 按工资段统计n);printf(2 按部门统计n);scanf(%d,&n);switch(n)case 1: gzdtj();break;case 2: bmtj();break;default: printf(输入错误!n);break; void gzdtj()/按工资段统计int sa1,sa2;int i=0;int n,m;int sl20=0,0;double sum100;printf(请输入要查询的工资段:);scanf(%d-%d,&sa1,&sa2);sys
19、tem(cls);for(i=0;iNumber;i+)sumi=woi.salary1+woi.salary2+woi.salary3-woi.salary4;for(i=0;i9) n=10;switch(n)case 0:sl0+;break; case 1:sl1+;break; case 2:sl2+;break; case 3:sl3+;break; case 4:sl4+;break; case 5:sl5+;break; case 6:sl6+;break; case 7:sl7+;break; case 8:sl8+;break; case 9:sl9+;break; cas
20、e 10:sl10+;break;m=sa1/1000; switch(m)case 0:printf(工资在1000以下的人数为%dn,sl0);break; case 1:printf(工资在1000到2000之间的人数为%dn,sl1);break; case 2:printf(工资在2000到3000之间的人数为%dn,sl2);break; case 3:printf(工资在3000到4000之间的人数为%dn,sl3);break; case 4:printf(工资在4000到5000之间的人数为%dn,sl4);break; case 5:printf(工资在5000到6000之
21、间的人数为%dn,sl5);break; case 6:printf(工资在6000到7000之间的人数为%dn,sl6);break; case 7:printf(工资在7000到8000之间的人数为%dn,sl7);break; case 8:printf(工资在8000到9000之间的人数为%dn,sl8);break; case 9:printf(工资在9000到10000之间的人数为%dn,sl9);break; case 10:printf(工资在10000以上的人数为%dn,sl10);break;void bmtj()/按部门统计 char depa30; float sum=
22、0; int i=0; printf(请输入要查询的部门名称:); scanf(%s,depa); system(cls); printf(t姓名t工号t所属部门t基本工资t奖励工资t补贴项目及金额t扣款项目及金额t总工资n); for (i=0;iNumber;i+) if (strcmp(depa,woi.depa)=0) printf(t%st%st%st%dtt%dtt%dtt%dtt%dn,woi.name,woi.ID,woi.depa,woi.salary1,woi.salary2,woi.salary3,woi.salary4,woi.salary1+woi.salary2+w
23、oi.salary3-woi.salary4); sum=sum+woi.salary1+woi.salary2+woi.salary3-woi.salary4; printf(该部门的总工资为:%fn,sum);/修改职工信息void modify() int mode=0;printf(请选择修改查找方式n);printf(1 按姓名查找修改n); printf(2 按工号查找修改n); scanf(%d,&mode);switch(mode)case 1: xmxg();break;case 2: ghxg();break;default: printf(输入错误!n);break; v
24、oid xmxg()/按姓名修改 FILE *fp=NULL;char name30;int i=0;printf(请输入要修改的职工姓名:);scanf(%s,name);for (i=0;iNumber;i+)if (strcmp(name,woi.name);elsebreak;printf(t姓名t工号t所属部门t基本工资t奖励工资t补贴项目及金额t扣款项目及金额t总工资n);printf(t%st%st%st%dtt%dtt%dtt%dtt%dn,woi.name,woi.ID,woi.depa,woi.salary1,woi.salary2,woi.salary3,woi.sala
25、ry4,woi.salary1+woi.salary2+woi.salary3-woi.salary4);printf(请重新输入该职工信息);printf(姓名:);scanf(%s, woi.name);printf(工号:);scanf(%s,woi.ID);printf(所属部门:);scanf(%s,woi.depa);printf(基本工资:);scanf(%d,woi.salary1);printf(奖励工资:);scanf(%d,woi.salary2);printf(补贴项目即金额:);scanf(%d, woi.salary3);printf(扣款项目及金额:);scanf(%d, woi.salary4);/信息修改后重新更新文件里面的数据 以保持数据一致性fp=fopen(C:/worker.dat,wb);for (i=0;iNumber;i+
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1