C语言源代码系列-管理系统之职工工资管理系统
创始人
2024-02-06 04:24:46
0
往期文章分享
  • 点击跳转=>《导航贴》- Unity手册,系统实战学习
  • 点击跳转=>《导航贴》- Android手册,重温移动开发

👉关于作者

众所周知,人生是一个漫长的流程,不断克服困难,不断反思前进的过程。在这个过程中会产生很多对于人生的质疑和思考,于是我决定将自己的思考,经验和故事全部分享出来,以此寻找共鸣 !!!
专注于Android/Unity和各种游戏开发技巧,以及各种资源分享(网站、工具、素材、源码、游戏等)
有什么需要欢迎私我,交流群让学习不再孤单

在这里插入图片描述

👉实践过程

😜问题

此工资管理系统可完成以下几方面的功能:能够将每一个职工的姓名、ID号以及基本工资、职务工资、岗位津贴、医疗保险、公积金的数据作为一个记录;可以对数据文件的任意记录的数据进行修改并在修改前后对记录内容进行显示;可以对数据文件的任意记录的数据进行查找并在查找前后对记录内容进行显示;可删除数据文件中的任一记录;在进行统计的工作中按字符表格形式打印全部职工工资信息表及平均工资;且该程序具有保存数据文件的功能。

大致思路就是输入函数,输出函数,修改函数,删除函数,添加函数,查询函数,用于统计成绩的函数,还有保存文件的函数,以及菜单函数,最后全部在主函数里调用。

😜回答

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

/*职工工资管理系统*/
#include
#include
#include
#include
#define N 100struct clerk
{int num;         //ID号char name[20];   //姓名int jbgz;        //基本工资int zwgz;        //职务工资int jt;          // 津贴 int yb;          //医疗保险int gjj;         //公积金int total;       //总工资
}em[100];       
void menu();
void input();
void save(int);
void display();
void del();
void add();
void search();
void search_num();
void search_name();
void modify();  
void sta();
void start(); /*定义各函数*/void start() //开始界面
{system("cls");//清屏system("color 1E"); //设置背景色蓝色 文字颜色为黄色printf("\n\n\n\n\n\n");printf("********************************************************************************");printf("***********************<<<<<<欢迎使用工资管理系统>>>>>>***********************");printf("**********************************************************************************\n\n\n\n\n");printf("\t\t\t\t\t\t      制作:1514011215 田宏锐 \n\n");printf("\t\t\t\t\t\t          2016/2/29-3/11\n\n\n\n");printf("\t\t\t      ***按任意键进入***\n");}void menu() //菜单界面
{system("cls");system("color 1F"); //设置背景色蓝色 文字颜色为白色printf("***菜单***\n\n");printf(">>>>>>>>>>>>>>>>>>>>>>>>>  1  输入  \n\n");printf(">>>>>>>>>>>>>>>>>>>>>>>>>  2  显示  \n\n");printf(">>>>>>>>>>>>>>>>>>>>>>>>>  3  查找  \n\n");printf(">>>>>>>>>>>>>>>>>>>>>>>>>  4  删除  \n\n");printf(">>>>>>>>>>>>>>>>>>>>>>>>>  5  添加  \n\n");printf(">>>>>>>>>>>>>>>>>>>>>>>>>  6  修改  \n\n");printf(">>>>>>>>>>>>>>>>>>>>>>>>>  7  统计  \n\n");printf(">>>>>>>>>>>>>>>>>>>>>>>>>  8  退出  \n\n");printf("说明:*如首次使用 尚未输入数据 请先输入数据 \n      *输入的数据将自动保存 \n      *再次选择输入功能时原数据将被覆盖\n\n");int n,button=0;char a; do{printf("功能选择(1--8):\n");scanf("%d",&n);if(n>=1&&n<=8){button=1;break;}else{button=0;printf("您输入有误,请重新选择!");}}while(button==0);while(button==1){switch(n){	case 1:input();break;case 2:display();break;case 3:search();break; case 4:del();break;case 5:add();break;case 6:modify();break;case 7:sta();break;case 8:exit(0);break;default :break;}getchar();printf("\n");printf("按任意键继续\n");getch();system("cls");  /*清屏*/menu(); /*调用菜单函数*/printf("功能选择(1--8):\n");scanf("%d",&n);printf("\n");}
}void input()   /*录入函数*/
{int i,m;system("cls");printf("职工人数(1--100):\n");scanf("%d",&m);for (i=0;iprintf("请输入职工号: ");scanf("%d",&em[i].num);printf("请输入姓名:  ");scanf("%s",&em[i].name);getchar();printf("请输入基本工资:  ");scanf("%d",&em[i].jbgz);printf("请输入职务工资:  ");scanf("%d",&em[i].zwgz);printf("请输入津贴:  ");scanf("%d",&em[i].jt);printf("请输入医疗保险:  ");scanf("%d",&em[i].yb);printf("请输入公积金:  ");scanf("%d",&em[i].gjj);em[i].total=((em[i].jbgz)+(em[i].zwgz)+(em[i].jt)-(em[i].yb)-(em[i].gjj));//计算总工资printf("\n");}printf("\n创建完毕!\n");save(m);//保存职工人数m
}void save(int m)  /*保存文件函数*/
{int i;FILE*fp;   //声明fp是指针,用来指向FILE类型的对象if ((fp=fopen("clerk_list","wb"))==NULL) //打开职工列表文件为空{printf ("打开失败\n");exit(0);}for (i=0;iFILE*fp;int i=0;if((fp=fopen("clerk_list","rb"))==NULL)    /*“rb”打开一个二进制文件,只允许读 */{printf ("cannot open file\n");exit(0);}else {do {fread(&em[i],sizeof(struct clerk),1,fp); //读取i++;}while(feof(fp)==0);  //检测流上的文件结束符}fclose(fp);return(i-1);//返回人数
}void display()  /*浏览函数*/
{int i,sum=0;int m=load();system("cls");printf("职工号    姓名   基本工资  职务工资   津贴    医疗保险  公积金   总工资 \n");for(i=0;iprintf("\n  %02d      %-6s   %-8d  %-8d  %-8d  %-8d %-8d%-6d  ",em[i].num,em[i].name,em[i].jbgz,em[i].zwgz,em[i].jt,em[i].yb,em[i].gjj,em[i].total);sum+=em[i].total;//计算员工总工资之和}printf("\n\n职工平均工资:%-8d \n",sum/m);
}void del()   /*删除函数 */
{int m=load();int i,j,n,t,button;char name[20];printf("\n 原来的职工信息:\n");display(); //显示删除前的员工信息printf("\n");printf("按姓名删除:\n");scanf("%s",name);for(button=1,i=0;button&&iif(strcmp(em[i].name,name)==0)//按员工姓名查找到某员工 并调出其资料{printf("\n此人原始记录为:\n");//显示选定员工的信息printf("职工号   姓名   基本工资  职务工资   津贴    医疗保险  公积金   总工资 \n");printf("\n  %02d    %-6s  %-8d  %-8d  %-8d  %-8d  %-8d %-8d  ",em[i].num,em[i].name,em[i].jbgz,em[i].zwgz,em[i].jt,em[i].yb,em[i].gjj,em[i].total);  printf("\n确定删除 请按1,不删除请按0\n");scanf("%d",&n);if(n==1){for(j=i;jstrcpy(em[j].name,em[j+1].name);em[j].num=em[j+1].num;em[j].jbgz=em[j+1].jbgz;em[j].zwgz=em[j+1].zwgz;em[j].jt=em[j+1].jt;em[j].yb=em[j+1].yb;  em[j].gjj=em[j+1].gjj;em[j].total=em[j+1].total;}button=0;}}}if(!button)//button==0表明删除已完成m=m-1;//总员工数减少一人elseprintf("\n查无此人!\n");getch();save(m);     //调用保存函数display();  //调用浏览函数printf("\n继续删除请按1,不再删除请按0\n");scanf("%d",&t);switch(t){case 1:del();break;case 0:break;default :break;}
}void add()/*添加函数*/
{FILE*fp;int n;int count=0;int i;int m=load();printf("\n 原来的职工信息:\n");display();  printf("\n");fp=fopen("clerk_list","a");     /*已追加文件的形式打开clerk_list文件追加信息*/printf("请输入想增加的职工数:\n");//确定要加入的职工数nscanf("%d",&n);for (i=m;i<(m+n);i++)//添加n名员工的信息{printf("\n 请输入新增加职工的信息:\n");printf("请输入职工号:  ");scanf("%d",&em[i].num);printf("请输入姓名:  ");scanf("%s",em[i].name);printf("请输入基本工资:  ");scanf("\t%d",&em[i].jbgz);printf("请输入职务工资:  ");scanf("%d",&em[i].zwgz);printf("请输入津贴:  ");scanf("%d",&em[i].jt);printf("请输入医疗保险:  ");scanf("\t%d",&em[i].yb);printf("请输入公积金:  ");scanf("%d",&em[i].gjj);em[i].total=( em[i].jbgz+ em[i].zwgz + em[i].jt- em[i].yb- em[i].gjj);//计算该员工总工资printf("\n");count=count+1;}printf("\n添加成功,请按任意键\n"); getch();m=m+count;//将新添加员工的人数加到总员工人数中save(m);display();//显示添加后的信息fclose(fp);
}void search()/*查询函数*/
{int t,button;system("cls");//清屏do{printf("\n按1 按工号查询\n\n按2 按姓名查询\n\n按3 回主菜单\n");scanf("%d",&t);if(t>=1&&t<=3){button=1;break;}else{button=0;printf("输入错误,请重新输入\n");}}while(button==0);//回到查询选择项while(button==1){switch(t)//选择查询方式{ case 1:printf("按工号查询\n");search_num();break;case 2:printf("按姓名查询\n");search_name();break;case 3:menu();break;default:break;}}}void search_num()//按职工号查询
{int a;int i,t;int m=load();printf("请输入要查找的职工号:\n");scanf("%d",&a);for(i=0;i  printf("职工号   姓名   基本工资  职务工资   津贴    医疗保险  公积金   总工资 \n");printf("\n  %02d    %-6s  %-8d  %-8d  %-8d  %-8d  %-8d %-8d  ",em[i].num,em[i].name,em[i].jbgz,em[i].zwgz,em[i].jt,em[i].yb,em[i].gjj,em[i].total);   break;}if(i==m)  printf("\n对不起,查无此人\n");printf("\n");printf("返回查询函数请按1,继续查询职工号请按2\n");scanf("%d",&t);switch(t){ case 1:search();break;case 2: break;default:break;}
}void search_name()
{char name[30];int i,t;int m=load();printf("请输入姓名:\n");scanf("%s",name);for(i=0;iprintf("\n已找到,其记录为:\n");printf("职工号   姓名   基本工资  职务工资   津贴    医疗保险  公积金   总工资 \n");printf("\n  %02d    %-6s  %-8d  %-8d  %-8d  %-8d  %-8d %-8d  ",em[i].num,em[i].name,em[i].jbgz,em[i].zwgz,em[i].jt,em[i].yb,em[i].gjj,em[i].total);      }if(i==m) printf("\n对不起,查无此人\n");printf("\n返回查询菜单请按1,继续查询姓名请按2\n");scanf("%d",&t);switch(t){ case 1:search();break;case 2:break;default :break;}
}void modify() /*修改函数*/
{int num;char name[20];int jbgz;  int zwgz;int jt;int yb;int gjj;int b,c,i,n,t,button; int m=load();system("cls");printf("\n 原来的职工信息:\n");display(); printf("\n");printf("请输入要修改的职工的姓名:\n");scanf("%s",name);for(button=1,i=0;button&&iif(strcmp(em[i].name,name)==0){printf("\n此人原始记录为:\n");printf("职工号   姓名   基本工资  职务工资   津贴    医疗保险  公积金   总工资 \n");printf("\n  %02d    %-6s  %-8d  %-8d  %-8d  %-8d  %-8d %-8d  ",em[i].num,em[i].name,em[i].jbgz,em[i].zwgz,em[i].jt,em[i].yb,em[i].gjj,em[i].total);    printf("\n确定 按1 ; 不修改请按0\n");scanf("%d",&n);if(n==1){printf("\n需要进行修改的选项\n 1.职工号 2.姓名 3.基本工资 4.职务工资 5.津贴 6.医疗保险 7.公积金 8.返回上层\n");  printf("请选择序号1-8:\n");  scanf("%d",&c);  if(c>8||c<1)  printf("\n选择错误,请重新选择!\n");  }button=0;}		}if(button==1)printf("\n查无此人\n");  do  {switch(c)      /*因为当找到第i个职工时,for语句后i自加了1,所以下面的应该把改后的信息赋值给第i-1个人*/{  case 1:	printf("职工号改为: ");scanf("%d",&num);em[i-1].num=num;break;  case 2: printf("姓名改为: ");scanf("%s",name);strcpy(em[i-1].name,name); break;  case 3: printf("基本工资改为: ");getchar();scanf("%d",&jbgz);em[i-1].jbgz=jbgz;em[i-1].total=( em[i-1].jbgz+ em[i-1].zwgz + em[i-1].jt- em[i-1].yb- em[i-1].gjj);break;  case 4: printf("职务工资改为: ");scanf("%d",&zwgz);em[i-1].zwgz=zwgz;em[i-1].total=( em[i-1].jbgz+ em[i-1].zwgz + em[i-1].jt- em[i-1].yb- em[i-1].gjj);break;  case 5: printf("津贴改为: ");scanf("%d",&jt);em[i-1].jt=jt; em[i-1].total=( em[i-1].jbgz+ em[i-1].zwgz + em[i-1].jt- em[i-1].yb- em[i-1].gjj);break;  case 6: printf("医疗保险改为: ");scanf("%d",&yb);em[i-1].yb=yb;em[i-1].total=( em[i-1].jbgz+ em[i-1].zwgz + em[i-1].jt- em[i-1].yb- em[i-1].gjj);break;  case 7: printf("公积金改为: ");scanf("%d",&gjj);em[i-1].gjj=gjj;em[i-1].total=( em[i-1].jbgz+ em[i-1].zwgz + em[i-1].jt- em[i-1].yb- em[i-1].gjj);break;  case 8: modify(); break;  } printf("\n");printf("\n\n 确定修改 请按1 ; 重新修改 请按2:  \n"); scanf("%d",&b);}while(b==2);printf("\n");save(m);display();printf("\n按1 继续修改 ,不再修改请按0\n");scanf("%d",&t);switch(t){case 1:modify();break;case 0:break;default :break;}
}void sta()//统计函数
{int i,sum=0,suma=0,sumb=0,sumc=0,sumd=0,sume=0;int m=load();system("cls");printf("职工号    姓名   基本工资  职务工资   津贴    医疗保险  公积金   总工资 \n");for(i=0;iprintf("\n  %02d      %-6s   %-8d  %-8d  %-8d  %-8d %-8d%-8d  ",em[i].num,em[i].name,em[i].jbgz,em[i].zwgz,em[i].jt,em[i].yb,em[i].gjj,em[i].total);sum+=em[i].total;//计算员工总工资之和suma+=em[i].jbgz;sumb+=em[i].zwgz;sumc+=em[i].jt;sumd+=em[i].yb;sume+=em[i].gjj;}printf("\n\n职工各项平均工资: %-8d  %-8d  %-8d  %-8d %-8d%-8d \n",suma/m,sumb/m,sumc/m,sumd/m,sume/m,sum/m);
}int main()//主函数
{   start();getch();menu();  
}

👉其他

📢作者:小空和小芝中的小空
📢转载说明-务必注明来源:https://zhima.blog.csdn.net/
📢这位道友请留步☁️,我观你气度不凡,谈吐间隐隐有王者霸气💚,日后定有一番大作为📝!!!旁边有点赞👍收藏🌟今日传你,点了吧,未来你成功☀️,我分文不取,若不成功⚡️,也好回来找我。

温馨提示点击下方卡片获取更多意想不到的资源。
空名先生

相关内容

热门资讯

招募合伙人创业,中国合伙人创业...   如果你正在寻找一个合适的创业(技术)伙伴,或者你正在寻找一个合适的创业项目,想拥有自己的事业,我...
两万以内创业车,创业2手车 两...   一、买二手车主要看年限还是行驶里程?      二手车里面的学问大了去,一句话总结那就是“满满的...
创业培训学习心得50字,就业创...   嘿~方子21班即将踏入大学生活!除了努力学习,我们还应该丰富我们的课余生活。快来挑选你最喜欢的俱...
做装修行业怎么样,装修行业创业...                                                   ...
创意园区宣传视频,大树下新媒体...   秋天总是让人悲伤,落叶归根,秋天总是让人快乐,硕果累累。            Xi安有很多花市...
期待合伙人属于网贷吗,创业贷款...   作者:黄启哲      两部都是都市剧,聚焦年轻女性群体。现在流行的《北辙南辕》和《我在他乡挺好...
创业融资的十大教训,创业融资的...   企业提出的贷款融资需求为500万元,主要融资方向为企业发票税贷款。根据税贷的初步计算,单个产品的...
非诚勿扰廊坊富二代,非诚勿扰富...         往期精彩导读            这两天办公室的小姑娘们一直在讨论赵丽颖和冯绍峰,...
深圳创业合作,深圳市创业补贴常...   #深圳家庭申请创业补贴的利与弊深圳可以多次申请创业补贴吗?      自主创业的方式多种多样,无...
女生创业投资小利润大,16岁能...   1是你有足够的发言权。      女人只要拥有这两样东西,你就会觉得整个世界都属于你。第一是美,...