c语言课程设计报告职工工资系统.docx
《c语言课程设计报告职工工资系统.docx》由会员分享,可在线阅读,更多相关《c语言课程设计报告职工工资系统.docx(31页珍藏版)》请在冰豆网上搜索。
c语言课程设计报告职工工资系统
C语言课程设计报告-工资管理系统
一.系统功能
职工工资系统通过用户在菜单界面选择所要使用的不同功能,实现在数组中输入职工的各种信息,并且能够修改信息、删除职工信息、合计职工人数、显示职工信息、将职工按编号排序、保存职工信息及通过职工姓名或者职工编号查询职工信息等功能。
二.总体设计
1、数据结构的设计
定义结构体emolyee,用于存放职工的基本信息和工资信息。
Typedefstructempoyee
{
charnum[10];保存职工编号
charname[15];保存职工姓名
floatjbgz;保存职工基本工资
floatjj保存职工奖金
floatkk;保存职工扣款
floatyfgz;保存职工应发工资
floatsk;保存职工税款
floatsfgz;保存职工实发工资
}ZGGZ;
2、函数设计及功能描述
voidmenu()程序的主菜单界面
intjudge(ZGGZ*p,inti,intnum[])判断输入的职工编号是否已存在
intinput(ZGGZ*p,inti)输入职工信息
intdel(ZGGZ*p,intnum)删除职工信息
intlocated(ZGGZ*p,intnum,inti)按照输入的信息定为职工的信息存储的位置,
voidsearch(ZGGZ*p,intnum)查找职工信息
voidmodify(ZGGZ*p,intnum)修改职工信息
intinsert(ZGGZ*p,intnum)插入职工信息
voidcount(ZGGZ*p,intnum)输入工资上下限按范围统计人数
voidsort(ZGGZ*p,intnum)按实发工资排序
voidsave(ZGGZ*p,intnum)将输入的职工信息保存到文件中
voiddisplay(ZGGZ*p,intnum)显示已有的职工信息
三.函数分析
1.函数的原型和参数说明
*p为结构体数组的指针,num是已有的职工数
voidmenu()程序的主菜单界面
intjudge(ZGGZ*p,inti,intnum[])判断输入的职工编号是否已存在
intinput(ZGGZ*p,inti)输入职工信息
intdel(ZGGZ*p,intnum)删除职工信息
intlocated(ZGGZ*p,intnum,inti)按照输入的信息定为职工的信息存储的位置,i表示按编号查询还是按姓名查询
voidsearch(ZGGZ*p,intnum)查找职工信息
voidmodify(ZGGZ*p,intnum)修改职工信息
intinsert(ZGGZ*p,intnum)插入职工信息
voidcount(ZGGZ*p,intnum)输入工资上下限按范围统计人数
voidsort(ZGGZ*p,intnum)按实发工资排序
voidsave(ZGGZ*p,intnum)将输入的职工信息保存到文件中
voiddisplay(ZGGZ*p,intnum)显示已有的职工信息
2.函数的流程图(选择若干函数算法,绘制函数流程图)
主结构
3.程序清单
#include
#include
typedefstructempoyee//职工信息结构体
{
charnum[10];//保存职工编号
charname[15];//保存职工姓名
floatjbgz;//保存职工基本工资
floatjj;//保存职工奖金
floatkk;//保存职工扣款
floatyfgz;//保存职工应发工资
floatsk;//保存职工税款
floatsfgz;//保存职工实发工资
}ZGGZ;
intceshi=0;
voidmenu()//菜单正确
{
printf("|----------------------------------------------------|\n");
printf("|菜单|\n");
printf("||\n");
printf("|******************欢迎您使用本系统******************|\n");
printf("|1输入****************2删除|\n");
printf("|3查询****************4修改|\n");
printf("|5插入****************6合计|\n");
printf("|7排序****************8保存|\n");
printf("|9显示****************0退出|\n");
printf("|----------------------------------------------------|\n");
}
intjudge(ZGGZ*p,inti,intnum[])
{
inta,k;
for(a=0;a
if(strcmp(num,p[a].num)==0)
{
k=-1;
break;
}
else
k=1;
returnk;
}
intinput(ZGGZ*p,inti)//输入职工信息正确
{
intlocated(ZGGZ*p,intnum,inti);
intjud;
charyon;
floata;
a=0.0;
while
(1)
{
printf("请输入职工的编号(小于十位数字):
");
scanf("%s",p[i].num);
jud=judge(p,i,p[i].num);
if(jud==-1)
{
printf("此编号已存在!
\n");
printf("是否重新输入?
(y/n)\n");
getchar();
scanf("%c",&yon);
if(yon=='n')
break;
else
continue;
}
printf("请输入职工的姓名:
");
scanf("%s",p[i].name);
printf("请输入职工的基本工资:
");
scanf("%f",&p[i].jbgz);
printf("请输入职工的奖金:
");
scanf("%f",&p[i].jj);
printf("请输入职工的扣款:
");
scanf("%f",&p[i].kk);
p[i].yfgz=p[i].jbgz+p[i].jj-p[i].kk;
p[i].sk=(float)(p[i].yfgz*0.02);
p[i].sfgz=p[i].yfgz-p[i].sk;
i++;
ceshi++;
printf("是否继续输入下一个职工信息?
(y/n)");
getchar();
scanf("%c",&yon);
if(yon!
='y')
break;
}
returni;
}
intdel(ZGGZ*p,intnum)//删除职工信息正确
{
intlocated(ZGGZ*p,intnum,inti);
voiddisplay(ZGGZ*p,intnum);
inti,adres,a;
charysn;
while
(1)
{
printf("请选择按编号查询还是名字查询\n");
printf("1.姓名2.编号\n");
scanf("%d",&i);
adres=located(p,num,i);
if(adres>=num)
{
printf("无该记录!
\n");
printf("是否重新输入?
(y/n)\n");
getchar();
scanf("%c",&ysn);
if(ysn=='n')
break;
else
continue;
}
else
for(adres;adres{
a=adres+1;
p[adres]=p[a];
}
num--;
ceshi++;
display(p,num);
printf("是否继续删除?
(y/n)");
getchar();
scanf("%c",&ysn);
if(ysn=='n')
break;
}
returnnum;
}
intlocated(ZGGZ*p,intnum,inti)//定位正确
{
inta=0;
charname[15],number[10];
if(i==1)
{
printf("请输入姓名:
\n");
scanf("%s",name);
for(a;aif(strcmp(name,p[a].name)==0)
break;
}
else
{
printf("请输入编号:
\n");
scanf("%s",number);
for(a;aif(strcmp(number,p[a].num)==0)
break;
}
returna;
}
voidsearch(ZGGZ*p,intnum)//查找正确
{
inti,searchnum;
charysn;
while
(1)
{
printf("请选择按姓名查找或者按编号查找:
\n");
printf("1、姓名2、编号\n");
scanf("%d",&i);
searchnum=located(p,num,i);
if(searchnum>=num)
{
printf("无该记录!
\n");
printf("是否重新输入!
(y/n)\n");
getchar();
scanf("%c",&ysn);
if(ysn=='y')
continue;
else
break;
}
else
{
printf("编号姓名基本工资奖金扣款应发工资税款实发工资\n");
printf("%s",p[searchnum].num);
printf("%s",p[searchnum].name);
printf("%.2f",p[searchnum].jbgz);
printf("%.2f",p[searchnum].jj);
printf("%.2f",p[searchnum].kk);
printf("%.2f",p[searchnum].yfgz);
printf("%.2f",p[searchnum].sk);
printf("%.2f\n",p[searchnum].sfgz);
}
printf("是否继续查询?
(y/n)\n");
getchar();
scanf("%c",&ysn);
if(ysn=='n')
break;
}
}
voidmodify(ZGGZ*p,intnum)//修改正确
{
ZGGZnewone;
inti,searchnum,a,jud;
charysn;
while
(1)
{
printf("请选择按姓名查找或者按编号查找:
\n");
printf("1、姓名2、编号\n");
scanf("%d",&i);
searchnum=located(p,num,i);
if(searchnum>=num)
{
printf("查无此记录!
\n");
printf("是否重新输入?
(y/n)\n");
getchar();
scanf("%c",&ysn);
if(ysn='n')
break;
}
else
{
printf("编号姓名基本工资奖金扣款应发工资税款实发工资\n");
printf("%s%s%.2f%.2f%.2f%.2f%.2f%.2f\n",p[searchnum].num,p[searchnum].name,p[searchnum].jbgz,p[searchnum].jj,p[searchnum].kk,p[searchnum].yfgz,p[searchnum].sk,p[searchnum].sfgz);
printf("是否进行修改?
(y/n)\n");
getchar();
scanf("%c",&ysn);
if(ysn=='y')
{
printf("请选择要修改的部分:
\n");
printf("1、编号2、姓名3、基本工资4、奖金5、扣款\n");
scanf("%d",&a);
switch(a)
{
case1:
{
printf("请输入职工的编号(小于十位数字):
");
scanf("%s",p[searchnum].num);
jud=judge(p,i,p[searchnum].num);
if(jud==-1)
{
printf("此编号已存在!
\n");
printf("是否重新输入?
(y/n)\n");
getchar();
scanf("%c",&ysn);
if(ysn=='n')
break;
else
continue;
}}break;
case2:
printf("请输入职工的姓名:
");scanf("%s",p[searchnum].name);break;
case3:
printf("请输入职工的基本工资:
");scanf("%f",&p[searchnum].jbgz);break;
case4:
printf("请输入职工的奖金:
");scanf("%f",&p[searchnum].jj);break;
case5:
printf("请输入职工的扣款:
");scanf("%f",&p[searchnum].kk);break;
}
p[searchnum].yfgz=p[searchnum].jbgz+p[searchnum].jj-p[searchnum].kk;
p[searchnum].sk=(float)(p[searchnum].yfgz*0.02);
p[searchnum].sfgz=p[searchnum].yfgz-p[searchnum].sk;
ceshi++;
}
printf("是否继续操作?
(y/n)\n");
getchar();
scanf("%c",&ysn);
if(ysn=='n')
break;
}
}
}
intinsert(ZGGZ*p,intnum)//插入正确
{
ZGGZnewone;
inti,searchnum,jud;
charysn;
while
(1)
{
printf("请选择按姓名查找或者按编号查找:
\n");
printf("1、姓名2、编号\n");
scanf("%d",&i);
searchnum=located(p,num,i);
if(searchnum>=num)
{
printf("查无此记录!
\n");
printf("是否重新输入?
(y/n)");
getchar();
scanf("%c",&ysn);
if(ysn=='n')
break;
continue;
}
else
{
for(i=num-1;i>searchnum;i--)
p[i]=p[i+1];
printf("请输入要插入的职工信息:
\n");
printf("请输入职工的编号(小于十位数字):
");
scanf("%s",p[searchnum+1].num);
jud=judge(p,num,p[searchnum+1].num);
if(jud==-1)
{
printf("此编号已存在!
\n");
printf("是否重新输入?
(y/n)\n");
getchar();
scanf("%c",&ysn);
if(ysn=='n')
break;
else
continue;
}
printf("请输入职工的姓名:
");
scanf("%s",p[searchnum+1].name);
printf("请输入职工的基本工资:
");
scanf("%f",&p[searchnum+1].jbgz);
printf("请输入职工的奖金:
");
scanf("%f",&p[searchnum+1].jj);
printf("请输入职工的扣款:
");
scanf("%f",&p[searchnum+1].kk);
p[searchnum+1].yfgz=p[searchnum+1].jbgz+p[searchnum+1].jj-p[searchnum+1].kk;
p[searchnum+1].sk=(float)(p[searchnum+1].yfgz*0.02);
p[searchnum+1].sfgz=p[searchnum+1].yfgz-p[searchnum+1].sk;
num++;
ceshi++;
}
printf("是否继续插入?
(y/n)");
getchar();
scanf("%c",&ysn);
if(ysn=='n')
break;
}
returnnum;
}
voidcount(ZGGZ*p,intnum)//合计正确
{
floatmin,max;
charysn;
inta=0,b=0,c=0,i;
while
(1)
{
printf("请输入工资的范围\n");
printf("工资上限:
\n");
scanf("%f",&max);
printf("工资下限:
\n");
scanf("%f",&min);
for(i=0;i{
if((p[i].sfgz)>max)
{
a++;
}
else
if((p[i].sfgz){
b++;
}
else
{
c++;
}
}
printf("工资在%f元以上的职工有%d人。
\n",max,a);
printf("工资在%f元以下的职工有%d人。
\n",min,b);
printf("工资在%f元以上%f元以下的职工有%d人。
\n",max,min,c);
printf("是否继续统计?
(y/n)");
getchar();
scanf("%c",&ysn);
if(ysn=='n')
break;
}
}
voidsort(ZGGZ*p,intnum)//排序正确
{
voiddisplay(ZGGZ*p,intnum);
inti,j,k;
ZGGZonlyone[100];
for(i=0;i{
k=i;
for(j=i+1;jif((p[j].sfgz)<(p[k].sfgz))
{
k=j;
}
onlyone[0]=p[k];
p[k]=p[i];
p[i]=onlyone[0];
}
ceshi++;
display(p,num);
}
voidsave(ZGGZ*p,intnum)//保存正确
{
FILE*fp;
inti=0;
fp=fopen("职工信息.txt","a");
for(i;ifwrite(&p[i],sizeof(ZGGZ),1,fp);
fclose(fp);
printf("文件保存完毕!
\n");
ceshi=0;
}
voiddisplay(ZGGZ*p,intnum)//显示职工信息
{
inti=0;
charysn;
printf("编号姓名基本工资奖金扣款应发工资税款实发工资\n");
while(i{
printf("%-10s",p[i].num);
printf("%-10s",p[i].name);
printf("%-10.2f",p[i].jbgz);
printf("%-10.2f",p[i].jj);
printf("%-10.2f",p[i].kk);
printf("%-10.2f",p[i].yfgz);
printf("%-10.2f",p[i].sk);
printf("%-10.2f\n",p[i].sfgz);
i++;
}
printf("是否返回?
(y/n)");
getchar();
scanf("%c",&ysn);
if(ysn=='n')
{;}
}
voidmain()
{
ZGGZzggz[10000];
intchoice,num=0;
charyon;
FILE*fp;//读取文件。
。
。
if((fp=fopen("职工信息.txt","r"))==NULL)
printf("暂无记录!
\n");
else
{
while(!
feof(fp))
{
if((fread(&zggz[num],sizeof(ZGGZ),1,fp))==1)
{
num++;
continue;
}
}
fclose(fp);
printf("已有%d个记录。
\n",num);
}
while
(1)//死循环,if判断是否结束
{
menu();
printf("请输入数字0~9选择所需的功能\n");
scanf("%d",&