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