《职工工资管理系统C语言.pdf》由会员分享,可在线阅读,更多相关《职工工资管理系统C语言.pdf(23页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、.1、设计容设计一个工资管理程序存储的数据包括:XX,职工号,所属部门,基本工资,奖励工资,补贴项目及金额和扣款项目及金额。功能:1)加入一个人的记录2)删除一个人的记录3)显示所有人的记录4)查询(包括按人名查询工资和按工号查询)5)统计功能(包括统计某一工资围的人数和统计各部门的工资总数)6)修改功能2、设计目的1.熟悉 C 语言程序的编辑、编译和运行的过程。2.熟练运用 if 语句和 switch 语句以及嵌套应用。3.学习并掌握 C 语言定义函数的基本方法、声明函数及调用函数的方法和过程。4.掌握文件的概念以及文件的定义方法,认识文件打开、关闭、读、写等文件基本操作函数。5.掌握结构体
2、类型变量、数组的定义和使用。6.掌握数组的定义、引用以及输入输出的方法、通过字符数组存储字符串,进一步使用字符串。3、设计思路(包括所用的函数)职工工资管理系统专业资料-.添查查加看找职职职工工工信信信息息息void show();void add();/添加职工信息void see();/查看职工信息void search();/查找职工信息void ghcz();/按工号查找void xmcz();/按 XX 查找void bmcz();/按部门查找void del();/删除职工信息void xmsc();/按 XX 删除void ghsc();/按工号删除-删个统修保退除人计改存出职工
3、职职数工资工工据信统信信息计息息图 1 程序功能图void statistics();/个人工资统计void statistic();/统计职工信息void gzdtj();/按工资段统计void bmtj();/按部门统计void modify();/修改职工信息void ghxg();/按工号修改void xmxg();/按 XX 修改void reserve();/保存职工信息.可修编.-.开始主菜单选择操作选择 1添加职工信息选择 2查看职工信息按 XX选择 3查找职工信息按工号按 XX选择 4删除职工信息按工号选择 5个人工资统计按工资段选择 6统计职工工资按部门选择 7修改职工信息
4、选择 8保存数据选择 01、添加职工信息:退出结束-.可修编.-.开始定义数据类型 numberTemp,iinumberTemp输出职工信息i+添加成功结束添加函数流程图2、查看职工信息:开始定义 i=0iNumber输出职工信息结束查看函数流程图-.可修编.-.3、查找职工信息:开始定义 n=0输入 n如果 n=1按 XX 查找终止如果 n=2按工号查找终止输入错误终止结束查找函数流程图-.可修编.-.4、删除职工信息:开始定义 n=0输入 n如果 n=1按 XX 删除如果 n=2终止按工号删除终止结束删除函数流程图-.可修编.-.5、个人工资统计开始定义 i=0For 函数初始值 i=0
5、iNumber循环体输出员工总工资i+结束个人工资统计流程图-.可修编.-.6、统计职工工资开始定义 n=0输入 n如果 n=1按工资段统计终止如果 n=2按部门统计终止输入错误终止结束工资统计流程图-.可修编.-.7、修改职工工资开始定义 mode=0输入 mode如果 mode=1按 XX 修改终止如果 mode=2按工号修改终止输入错误终止结束修改函数流程图-.可修编.-.4、程序代码#include#include#include struct workerchar depa30;char name30;char ID10;int salary1,salary2,salary3,sal
6、ary4;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 modify();void ghxg();void xmxg();void reserve();void back();
7、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();/查看职工信息break;case 3:search();back();/查找职工信息break;case 4:del();ba
8、ck();/删除职工信息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*fp=NULL;int i=0;fp=fopen(C:/worker.dat,rb);while(fread(&woi,siz
9、eof(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(t8 保 存 数 据n);printf(t0 退 出 系 统nn);printf(t*n);void bc(st
10、ruct 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(输入第%d 个职工信息n,i+1);printf(XX:);scanf(%s,temp.name);prin
11、tf(工号:);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);/写入到文件printf(添加成功n);/查看职工信息void see()int i=0;printf
12、(以下是全部职工n);printf(tXXt工号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+;/查找职工信息void search()int n=0;printf(1 按 XX 查找n);printf(2
13、按工号查找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()/按 XX 查找char name30;int i=0;printf(请输入要查找职工 XX:);scanf(%s,name);system(cls);printf(tXXt工号t 所属部门t 基本工资t 奖励工资t 补贴项目及金额t 扣款项目及金额t 总工资n);for(i=0;iNum
14、ber;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);system(cls);printf(tXXt工号t 所属部门t 基本工资t 奖励
15、工资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,w-.可修编.-.oi.salary2,woi.salary3,woi.salary4,woi.salary1+woi.salary2+woi.salary3-woi.salary4);void bmcz()/按部门查找char depa30;int i=0;printf(请输入要查询的部门名称:);scanf
16、(%s,depa);system(cls);printf(tXXt 工号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.salary3-woi.salary4);/删除职工信息void del
17、()int n=0;printf(1 按 XX 删除n);printf(2 按工号删除n);scanf(%d,&n);switch(n)case 1:xmsc();break;case 2:ghsc();break;void xmsc()/按 XX 删除FILE*fp=NULL;char name30;int i=0;int j=0;printf(请输入要删除的职工 XX:);-.可修编.-.scanf(%s,name);for(i=0;iNumber;i+)if(strcmp(name,woi.name)=0)for(j=i;jNumber-1;j+)woj=woj+1;Number-;/将
18、剩余数据写入文件 擦除以前的数据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=i;jNumber-1;j+)woj=woj+1;Number-;/
19、将剩余数据写入文件 擦除以前的数据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 的总工资为:%fn,woi.name,sumi);void stati
20、stic()/统计职工工资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);system(cls);for(i=0;iNumber;i+)sumi
21、=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;case 10:sl10+;break;m=sa1/1000;switch(
22、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 之间的人数为%dn,sl5);break
23、;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=0;int i=
24、0;printf(请输入要查询的部门名称:);scanf(%s,depa);system(cls);printf(tXXt 工号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.
25、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 按 XX 查找修改n);printf(2 按工号查找修改n);scanf(%d,&mode);switch(mode)case 1:xmxg();break;case 2:ghxg();break;default:printf(输入错误!n);break;void xmxg()
26、/按 XX 修改FILE*fp=NULL;char name30;int i=0;printf(请输入要修改的职工 XX:);scanf(%s,name);for(i=0;iNumber;i+)if(strcmp(name,woi.name);elsebreak;printf(tXXt工号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,w-.可修编.-.oi.salary2,woi.salary3,woi.s
27、alary4,woi.salary1+woi.salary2+woi.salary3-woi.salary4);printf(请重新输入该职工信息);printf(XX:);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(扣款项目及金额:);scan
28、f(%d,woi.salary4);/信息修改后重新更新文件里面的数据 以保持数据一致性fp=fopen(C:/worker.dat,wb);for(i=0;iNumber;i+)fwrite(&woi,sizeof(struct worker),1,fp);fclose(fp);void ghxg()/按工号修改FILE*fp=NULL;char id30;int i=0;printf(请输入要修改的职工工号:);scanf(%s,id);for(i=0;iNumber;i+)if(strcmp(id,woi.ID);elsebreak;printf(tXXt工号t 所属部门t 基本工资t
29、奖励工资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.salary4,woi.salary1+woi.salary2+woi.salary3-woi.salary4);printf(请重新输入该职工信息);printf(XX:);scanf(%s,woi.name);-.可修编.-.printf(工号:);scanf(%s,woi.ID);printf(所属部门:);scanf(%s,w
30、oi.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;i修改成功n);/保存数据void reserve()printf(t=程序在运行时已自动保存.n);void back()printf(t=按 Enter 键
31、返回主菜单n);5.、运行结果-.可修编.-.*职工工资管理系统*1添加职工信息2查看职工信息3查找职工信息4删除职工信息5个人工资统计6统计职工工资7修改职工信息8 保 存 数 据0 退 出 系 统*=请选择:输入一条记录信息:选择 1,回车。输入记录如图所示:请输入要添加职工个数:2请输入第一个职工信息XX:王五工号:1所属部门:行政部基本工资:2000奖励工资:200补贴项目即金额:300扣款项目及金额:100请输入第二个职工信息XX:四工号:2所属部门:外关部基本工资:2500奖励工资:300补贴项目即金额:100扣款项目及金额:200添加成功=按 Enter 键返回主菜单6、分析与讨
32、论-.可修编.-.通过这几天的努力,职工工资管理系统的设计已基本完成。在本次课程设计中,我充分领略了 C 语言功能的强大,包括函数、数组、指针、结构体、文件等。职工工资管理系统是一个很实用并且使用广泛的操作系统。此系统可以减少很多工作量,做到设计合理,便于使用,易于操作;界面友好,容错性高,可在很短的时间,查找出所需的职工工资资料,提高工作效率。该系统具有添加、显示、查询、修改、删除等基本功能,以方便对工资的各项管理操作。每一条记录包括一个职工的工号、XX、所属部门、工资等信息,系统的各个功能模块都用函数的形式来实现,可以将职工信息保存在文件中,并从文件中读取出来。在对部门人数的统计中我们遇到了一些困难,通过查阅资料、小组探讨,最总做出,更加熟悉了 switch 语句的用法。总的来说,通过这次程序设计,使我加深了对 C 语言的认识,进一步熟悉了对 C 语言功能的灵活运用,而且加深了我对程序的理解和编写能力,通过文献资料和网络资料的帮助,使我对 C 语言程序设计这一基础学科又一次加深了认识,也意识到了其具有的强大功能和发展前景。这会对以后的学习有所帮助。-.可修编.