- 点击跳转=>《导航贴》- Unity手册,系统实战学习
- 点击跳转=>《导航贴》- Android手册,重温移动开发
👉关于作者
众所周知,人生是一个漫长的流程,不断克服困难,不断反思前进的过程。在这个过程中会产生很多对于人生的质疑和思考,于是我决定将自己的思考,经验和故事全部分享出来,以此寻找共鸣 !!!
专注于Android/Unity和各种游戏开发技巧,以及各种资源分享(网站、工具、素材、源码、游戏等)
有什么需要欢迎私我,交流群让学习不再孤单。
👉实践过程
😜问题
此工资管理系统可完成以下几方面的功能:能够将每一个职工的姓名、ID号以及基本工资、职务工资、岗位津贴、医疗保险、公积金的数据作为一个记录;可以对数据文件的任意记录的数据进行修改并在修改前后对记录内容进行显示;可以对数据文件的任意记录的数据进行查找并在查找前后对记录内容进行显示;可删除数据文件中的任一记录;在进行统计的工作中按字符表格形式打印全部职工工资信息表及平均工资;且该程序具有保存数据文件的功能。
大致思路就是输入函数,输出函数,修改函数,删除函数,添加函数,查询函数,用于统计成绩的函数,还有保存文件的函数,以及菜单函数,最后全部在主函数里调用。
😜回答
/*职工工资管理系统*/
#include<stdio.h>
#include<windows.h>
#include<string.h>
#include<conio.h>
#define N 100
struct 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;i<m;i++)
{
printf("请输入职工号: ");
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;i<m;i++) /*将内存中职工的信息输出到磁盘文件中去*/
if (fwrite(&em[i],sizeof(struct clerk),1,fp)!=1)//写入数据块 &em[i]:是要输出数据的地址 sizeof(struct clerk):获取一个单体的长度 1:数据项的个数 fp:目标文件指针
printf("文件读写错误\n");
fclose(fp);// 缓冲区内最后剩余的数据输出到磁盘文件中,并释放文件指针和有关的缓冲区
}
int load() /*导入函数 int型*/
{
FILE*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;i<m;i++) /*m为输入部分的职工人数*/
{
printf("\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&&i<m;i++)//主函数中确定button==1时各函数才可以被调用
{
if(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;j<m-1;j++)//从第i项开始 将后一项的各成员的值赋给前一项各对应的成员 完成对第i项的删除
{
strcpy(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;//总员工数减少一人
else
printf("\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");//确定要加入的职工数n
scanf("%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<m;i++)
if(a==em[i].num)
{
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;i<m;i++)
if(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);
}
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&&i<m;i++)
{
if(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;i<m;i++) /*m为输入部分的职工人数*/
{
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);
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/
📢这位道友请留步☁️,我观你气度不凡,谈吐间隐隐有王者霸气💚,日后定有一番大作为📝!!!旁边有点赞👍收藏🌟今日传你,点了吧,未来你成功☀️,我分文不取,若不成功⚡️,也好回来找我。
温馨提示:点击下方卡片获取更多意想不到的资源。