c语言课程设计报告职工工资系统.docx

上传人:b****4 文档编号:11966975 上传时间:2023-04-16 格式:DOCX 页数:31 大小:335.99KB
下载 相关 举报
c语言课程设计报告职工工资系统.docx_第1页
第1页 / 共31页
c语言课程设计报告职工工资系统.docx_第2页
第2页 / 共31页
c语言课程设计报告职工工资系统.docx_第3页
第3页 / 共31页
c语言课程设计报告职工工资系统.docx_第4页
第4页 / 共31页
c语言课程设计报告职工工资系统.docx_第5页
第5页 / 共31页
点击查看更多>>
下载资源
资源描述

c语言课程设计报告职工工资系统.docx

《c语言课程设计报告职工工资系统.docx》由会员分享,可在线阅读,更多相关《c语言课程设计报告职工工资系统.docx(31页珍藏版)》请在冰豆网上搜索。

c语言课程设计报告职工工资系统.docx

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;a

if(strcmp(name,p[a].name)==0)

break;

}

else

{

printf("请输入编号:

\n");

scanf("%s",number);

for(a;a

if(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;j

if((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;i

fwrite(&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",&

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 高等教育 > 其它

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1