职工工资管理系统C语言.docx
《职工工资管理系统C语言.docx》由会员分享,可在线阅读,更多相关《职工工资管理系统C语言.docx(25页珍藏版)》请在冰豆网上搜索。
职工工资管理系统C语言
1、设计内容
设计一个工资管理程序
存储的数据包括:
姓名,职工号,所属部门,基本工资,奖励工资,补贴项目及金额和扣款项目及金额。
功能:
1)加入一个人的记录
2)删除一个人的记录
3)显示所有人的记录
4)查询(包括按人名查询工资和按工号查询)
5)统计功能(包括统计某一工资范围的人数和统计各部门的工资总数)
6)修改功能
2、设计目的
1.熟悉C语言程序的编辑、编译链接和运行的过程。
2.熟练运用if语句和switch语句以及嵌套应用。
3.学习并掌握C语言定义函数的基本方法、声明函数及调用函数的方法和过程。
4.掌握文件的概念以及文件的定义方法,认识文件打开、关闭、读、写等文件基本操作函数。
5.掌握结构体类型变量、数组的定义和使用。
6.掌握数组的定义、引用以及输入输出的方法、通过字符数组存储字符串,进一步使用字符串。
3、设计思路(包括所用的函数)
图1程序功能图
voidshow();
voidadd();//添加职工信息
voidsee();//查看职工信息
voidsearch();//查找职工信息
voidghcz();//按工号查找
voidxmcz();//按姓名查找
voidbmcz();//按部门查找
voiddel();//删除职工信息
voidxmsc();//按姓名删除
voidghsc();//按工号删除
voidstatistics();//个人工资统计
voidstatistic();//统计职工信息
voidgzdtj();//按工资段统计
voidbmtj();//按部门统计
voidmodify();//修改职工信息
voidghxg();//按工号修改
voidxmxg();//按姓名修改
voidreserve();//保存职工信息
1、添加职工信息:
添加函数流程图
2、查看职工信息:
定义i=0
i输出职工信息
开始
结束
查看函数流程图
3、查找职工信息:
定义n=0
如果n=1
如果n=2
按姓名查找
终止
按工号查找
终止
输入错误
终止
开始
结束
输入n
查找函数流程图
4、删除职工信息:
定义n=0
如果n=1
如果n=2
按姓名删除
终止
按工号删除
终止
开始
结束
输入n
删除函数流程图
5、个人工资统计
开始
定义i=0
For函数初始值i=0
i循环体
输出员工总工资
i++
结束
个人工资统计流程图
6、统计职工工资
定义n=0
如果n=1
如果n=2
按工资段统计
终止
按部门统计
终止
输入错误
终止
开始
结束
输入n
工资统计流程图
7、修改职工工资
修改函数流程图
4、程序代码
#include
#include
#include
structworker
{chardepa[30];
charname[30];
charID[10];
intsalary1,salary2,salary3,salary4;
};
intdq(structworkerwo[]);
voidshow();
voidbc(structworkerwo[]);
voidadd();
voidsee();
voidsearch();
voidghcz();
voidxmcz();
voidbmcz();
voiddel();
voidxmsc();
voidghsc();
voidstatistics();
voidstatistic();
voidgzdtj();
voidbmtj();
voidmodify();
voidghxg();
voidxmxg();
voidreserve();
voidback();
structworkerwo[100];//保存所有的职工信息
intNumber=0;//记录总的职工人数
voidmain()
{
intchoose=0;
while
(1)
{
show();
printf("\t\t====>请选择:
");
scanf("%d",&choose);
system("cls");
switch(choose)
{
case0:
exit(0);//退出
break;
case1:
add();
back();//添加职工信息
break;
case2:
see();
back();//查看职工信息
break;
case3:
search();
back();//查找职工信息
break;
case4:
del();
back();//删除职工信息
break;
case5:
statistics();
back();//个人工资统计
break;
case6:
statistic();
back();//统计职工工资
break;
case7:
modify();
back();//修改职工信息
break;
case8:
reserve();
back();//保存数据
break;
default:
break;
}
fflush(stdin);
system("cls");
}
}
intdq(structworkerwo[])
{
FILE*fp=NULL;
inti=0;
fp=fopen("C:
//worker.dat","rb");
while(fread(&wo[i],sizeof(structworker),1,fp))
i++;
fclose(fp);
returni;
}
voidshow()
{
printf("\n");
printf("\t****************职工工资管理系统****************\n\n");
printf("\t*☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆*\n\n");
printf("\t^^^^^^^^^^^^^^^[1]添加职工信息^^^^^^^^^^^^^^^^^\n");
printf("\t^^^^^^^^^^^^^^^[2]查看职工信息^^^^^^^^^^^^^^^^^\n");
printf("\t^^^^^^^^^^^^^^^[3]查找职工信息^^^^^^^^^^^^^^^^^\n");
printf("\t^^^^^^^^^^^^^^^[4]删除职工信息^^^^^^^^^^^^^^^^^\n");
printf("\t^^^^^^^^^^^^^^^[5]个人工资统计^^^^^^^^^^^^^^^^^\n");
printf("\t^^^^^^^^^^^^^^^[6]统计职工工资^^^^^^^^^^^^^^^^^^\n");
printf("\t^^^^^^^^^^^^^^^[7]修改职工信息^^^^^^^^^^^^^^^^^\n");
printf("\t^^^^^^^^^^^^^^^[8]保存数据^^^^^^^^^^^^^^^^^\n");
printf("\t^^^^^^^^^^^^^^^[0]退出系统^^^^^^^^^^^^^^^^^\n\n");
printf("\t*★★★★★★★★★★★★★★★★★★★★★★★*\n");
}
voidbc(structworker*wo)
{
FILE*fp=NULL;
fp=fopen("C:
//worker.dat","ab+");
fwrite(wo,sizeof(structworker),1,fp);
fclose(fp);
}
//添加职工信息
voidadd()
{
intnumberTemp=0;
inti=0;
structworkertemp;
printf("请输入要添加职工个数:
");
scanf("%d",&numberTemp);
for(i=0;i{
printf("输入第%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);
wo[Number++]=temp;//写入到数组
bc(&temp);//写入到文件
}
printf("添加成功\n");
}
//查看职工信息
voidsee()
{
inti=0;
printf("以下是全部职工\n");
printf("\t姓名\t工号\t所属部门\t基本工资\t奖励工资\t补贴项目及金额\t扣款项目及金额\t总工资\n");
while(i{
printf("\t%s\t%s\t%s\t%d\t\t%d\t\t%d\t\t%d\t\t%d\n",wo[i].name,wo[i].ID,wo[i].depa,wo[i].salary1,wo[i].salary2,wo[i].salary3,wo[i].salary4,wo[i].salary1+wo[i].salary2+wo[i].salary3-wo[i].salary4);
i++;
}
}
//查找职工信息
voidsearch()
{
intn=0;
printf("1按姓名查找\n");
printf("2按工号查找\n");
printf("3按部门查找\n");
scanf("%d",&n);
switch(n)
{
case1:
xmcz();
break;
case2:
ghcz();
break;
case3:
bmcz();
break;
default:
printf("输入错误!
\n");
break;
}
}
voidxmcz()//按姓名查找
{
charname[30];
inti=0;
printf("请输入要查找职工姓名:
");
scanf("%s",name);
system("cls");
printf("\t姓名\t工号\t所属部门\t基本工资\t奖励工资\t补贴项目及金额\t扣款项目及金额\t总工资\n");
for(i=0;i{
if(strcmp(name,wo[i].name)==0)
{
printf("\t%s\t%s\t%s\t%d\t\t%d\t\t%d\t\t%d\t\t%d\n",wo[i].name,wo[i].ID,wo[i].depa,wo[i].salary1,wo[i].salary2,wo[i].salary3,wo[i].salary4,wo[i].salary1+wo[i].salary2+wo[i].salary3-wo[i].salary4);
}
}
}
voidghcz()//按工号查找
{
charid[10];
inti=0;
printf("请输入要查找工号:
");
scanf("%s",id);
system("cls");
printf("\t姓名\t工号\t所属部门\t基本工资\t奖励工资\t补贴项目及金额\t扣款项目及金额\t总工资\n");
for(i=0;i{
if(strcmp(id,wo[i].ID)==0)
{
printf("\t%s\t%s\t%s\t%d\t\t%d\t\t%d\t\t%d\t\t%d\n",wo[i].name,wo[i].ID,wo[i].depa,wo[i].salary1,wo[i].salary2,wo[i].salary3,wo[i].salary4,wo[i].salary1+wo[i].salary2+wo[i].salary3-wo[i].salary4);
}
}
}
voidbmcz()//按部门查找
{
chardepa[30];
inti=0;
printf("请输入要查询的部门名称:
");
scanf("%s",depa);
system("cls");
printf("\t姓名\t工号\t所属部门\t基本工资\t奖励工资\t补贴项目及金额\t扣款项目及金额\t总工资\n");
for(i=0;i{
if(strcmp(depa,wo[i].depa)==0)
{
printf("\t%s\t%s\t%s\t%d\t\t%d\t\t%d\t\t%d\t\t%d\n",wo[i].name,wo[i].ID,wo[i].depa,wo[i].salary1,wo[i].salary2,wo[i].salary3,wo[i].salary4,wo[i].salary1+wo[i].salary2+wo[i].salary3-wo[i].salary4);
}
}
}
//删除职工信息
voiddel()
{
intn=0;
printf("1按姓名删除\n");
printf("2按工号删除\n");
scanf("%d",&n);
switch(n)
{
case1:
xmsc();
break;
case2:
ghsc();
break;
}
}
voidxmsc()//按姓名删除
{
FILE*fp=NULL;
charname[30];
inti=0;
intj=0;
printf("请输入要删除的职工姓名:
");
scanf("%s",name);
for(i=0;i{
if(strcmp(name,wo[i].name)==0)
{
for(j=i;j{
wo[j]=wo[j+1];
}
Number--;
}
}
//将剩余数据写入文件擦除以前的数据
fp=fopen("C:
//worker.dat","wb");
for(i=0;i{
fwrite(&wo[i],sizeof(structworker),1,fp);
}
fclose(fp);
printf("删除成功;\n");
}
voidghsc()//按工号删除
{
FILE*fp=NULL;
charid[60];
inti=0;
intj=0;
printf("请输入要删除的职工工号:
");
scanf("%s",id);
for(i=0;i{
if(strcmp(id,wo[i].ID)==0)
{
for(j=i;j{
wo[j]=wo[j+1];
}
Number--;
}
}
//将剩余数据写入文件擦除以前的数据
fp=fopen("C:
//worker.dat","wb");
for(i=0;i{
fwrite(&wo[i],sizeof(structworker),1,fp);
}
fclose(fp);
printf("删除成功;\n");
}
//个人工资统计
voidstatistics()
{
inti=0;
doublesum[100];
for(i=0;i{
sum[i]=wo[i].salary1+wo[i].salary2+wo[i].salary3-wo[i].salary4;
printf("%s的总工资为:
%f\n",wo[i].name,sum[i]);
}
}
voidstatistic()//统计职工工资
{
intn=0;
printf("1按工资段统计\n");
printf("2按部门统计\n");
scanf("%d",&n);
switch(n)
{
case1:
gzdtj();
break;
case2:
bmtj();
break;
default:
printf("输入错误!
\n");
break;
}
}
voidgzdtj()//按工资段统计
{intsa1,sa2;
inti=0;
intn,m;
intsl[20]={0,0};
doublesum[100];
printf("请输入要查询的工资段:
");
scanf("%d-%d",&sa1,&sa2);
system("cls");
for(i=0;i{
sum[i]=wo[i].salary1+wo[i].salary2+wo[i].salary3-wo[i].salary4;
}
for(i=0;i{n=sum[i]/1000;
if(n>9)n=10;
switch(n)
{case0:
sl[0]++;break;
case1:
sl[1]++;break;
case2:
sl[2]++;break;
case3:
sl[3]++;break;
case4:
sl[4]++;break;
case5:
sl[5]++;break;
case6:
sl[6]++;break;
case7:
sl[7]++;break;
case8:
sl[8]++;break;
case9:
sl[9]++;break;
case10:
sl[10]++;break;
}
}
m=sa1/1000;
switch(m)
{case0:
printf("工资在1000以下的人数为%d\n",sl[0]);break;
case1:
printf("工资在1000到2000之间的人数为%d\n",sl[1]);break;
case2:
printf("工资在2000到3000之间的人数为%d\n",sl[2]);break;
case3:
printf("工资在3000到4000之间的人数为%d\n",sl[3]);break;
case4:
printf("工资在4000到5000之间的人数为%d\n",sl[4]);break;
case5:
printf("工资在5000到6000之间的人数为%d\n",sl[5]);break;
case6:
printf("工资在6000到7000之间的人数为%d\n",sl[6]);break;
case7:
printf("工资在7000到8000之间的人数为%d\n",sl[7]);break;
case8:
printf("工资在8000到9000之间的人数为%d\n",sl[8]);break;
case9:
printf("工资在9000到10000之间的人数为%d\n",sl[9]);break;
case10:
printf("工资在10000以上的人数为%d\n",sl[10]);break;
}
}
voidbmtj()//按部门统计
{
chardepa[30];
floatsum=0;
inti=0;
printf("请输入要查询的部门名称:
");
scanf("%s",depa);
system("cls");
printf("\t姓名\t工号\t所属部门\t基本工资\t奖励工资\t补贴项目及金额\t扣款项目及金额\t总工资\n");
for(i=0;i{
if(strcmp(depa,wo[i].depa)==0)
{
printf("\t%s\t%s\t%s\t%d\t\t%d\t\t%d\t\t%d\t\t%d\n",wo[i].name,wo[i].ID,wo[i].depa,wo[i].salary1,wo[i].salary2,wo[i].salary3,wo[i].salary4,wo[i].salary1+wo[i].salary2+wo[i].salary3-wo[i].salary4);
sum=sum+wo[i].salary1+wo[i].salary2+wo[i].salary3-wo[i].salary4;
}
}
printf("该部门的总工资为:
%f\n",sum);
}
//修改职工信息
voidmodify()
{
intmode=0;
printf("请选择修改查找方式\n");
printf("1按姓名查找修改\n");
printf("2按工号查找修改\n");
scanf("%d",&mode);
switch(mode)
{
case1:
xmxg();
break;
case2:
ghxg();
break;
default:
printf("输入错误!
\n");
break;
}
}
voidxmxg()//按姓名修改
{
FILE*fp=NULL;
charname[30];
inti=0;
printf("请输入要修改的职工姓名:
");
scanf("%s",name);
for(i=0;i{
if(strcmp(name,wo[i].name));
else
break;
}
printf("\t姓名\t工号\t所属部门\t基本工资\t奖励工资\t补贴项目及金额\t扣款项目及金额\t总工资\n");
printf("\t%s\t%s\t%s\t%d\t\t%d\t\t%d\t\t%d\t\t%d\n",wo[i].name,wo[i].ID,wo[i].depa,wo[i].salary1,wo[i].salary2,wo[i].salary3,wo[i].salary4,wo[i].salary1+wo[i].salary2+wo[i].salary3-wo[i].salary4);
printf("请重新输入该职工信息");
printf("姓名:
");
scanf("%s",wo[i].name);
printf("工号:
");
scanf("%s",wo[i].ID);
printf("所属部门:
");
scanf("%s",wo[i].depa);
prin