C语言课程设计报告-工资管理系统
一. 系统功能
设计一个职工工资管理系统,其功能包括:
(1)职工基本工资信息录入
包括工号,姓名,应发工资,奖金,扣款,应发工资,扣税,实发工资。
(2)职工基本工资信息保存
(3)职工基本工资信息查询
按照工号查询
按照姓名查询
(4)职工基本工资信息显示
在屏幕上显示所有的职工基本工资信息。
(5)职工基本工资信息更新
能够实现修改,删除,插入,排序功能。
(6)职工基本工资信息统计
统计公司员工工资在各等级的人数
主界面系统主界面应有如下功能选项
录入职工基本工资信息
查询职工基本工资信息
保存职工基本工资信息
删除职工基本工资信息
插入职工基本工资信息
修改职工基本工资信息
统计职工基本工资信息
排序职工基本工资信息
显示职工基本工资信息
退出
代码如下:
#include<stdio.h>
typedefstruct employee
{
char num[10];//保存职工编号
char name[15];//保存职工姓名
float jbgz;//保存职工基本工资
float jj;//保存职工奖金
float kk;//保存职工扣款
floatyfgz;//保存职工应发工资
float sk;//保存职工税款
float sfgz;//保存职工实发工资
}ZGGZ;
voidmenu()
{
printf("Empoyee Systemn");
printf("--<-<-<@--<-<-<@--<-<-<@--<-<-<@--<-<-<@--<-<-<@--<-<-<@--<-<-<@n");
printf("*1 inputrecord*2 deleterecordn");
printf("*3 searchrecord*4 modifyrecordn");
printf("*5 insertrecord*6 countrecordn");
printf("*7 sortrecord*8 saverecordn");
printf("*9 displayrecord*0 quitrecordn");
printf("--<-<-<@--<-<-<@--<-<-<@--<-<-<@--<-<-<@--<-<-<@--<-<-<@--<-<-<@n");
printf("Please enter you choice(0-9)n");
}
intinput(ZGGZ a[],int k)
{
int j,x;
char str[10];
j=x=0;
while(1)
{
printf("----------------------------n");
printf("请输入职工的编号:(按0返回主菜单)");
scanf("%s",str);
strcpy(a[k].num,str);
for(j=0;j<k;j++)
{
if(strcmp(a[j].num,str)==0)
{
printf("已经有工号为%s的员工信息!请重新输入员工号。n",str);
printf("请输入职工的编号:");
scanf("%s",str);
strcpy(a[k].num,str);
}
}
if(strcmp(a[k].num,"0")==0)
break;
printf("请输入职工的姓名:");
scanf("%s",a[k].name);
printf("请输入职工的基本工资:");
scanf("%f",&a[k].jbgz);
printf("请输入职工的奖金:");
scanf("%f",&a[k].jj);
printf("请输入职工的扣款:");
scanf("%f",&a[k].kk);
a[k].yfgz=a[k].jbgz+a[k].jj-a[k].kk;
a[k].sk=a[k].yfgz*(0.05);
a[k].sfgz=a[k].yfgz*(0.95);
k++;
}
return k;
}
intdel(ZGGZ a[],int y)
{
int i=0;
int x=0;
char str[15];
printf("请输入你要删除的编号或姓名:");
scanf("%s",str);
printf("--------删除成功--------n");
for(i=0;i<y;i++)
if(!strcmp(str,a[i].num)||!strcmp(str,a[i].name))
{
while(i<y)
{
strcpy(a[i].num,a[i+1].num);
strcpy(a[i].name,a[i+1].name);
a[i].jbgz=a[i+1].jbgz;
a[i].jj=a[i+1].jj;
a[i].kk=a[i+1].kk;
a[i].sfgz=a[i+1].sfgz;
a[i].sk=a[i+1].sk;
a[i].yfgz=a[i+1].yfgz;
i++;
}
x++;
}
if(x==0)
{
printf("输入的编号或姓名不存在,请重新输入:n");
}
return y-x;
}
intsear(ZGGZ a[],int y)
{
int i;
int x=0;
char str[15];
printf("请输入你要查找的编号或姓名:");
scanf("%s",str);
for(i=0;i<y;i++)
if(!strcmp(str,a[i].num)||!strcmp(str,a[i].name))
{
printf("员工编号为%sn",a[i].num);
printf("员工姓名为%sn",a[i].name);
printf("基本工资:%fn",a[i].jbgz);
printf("奖金:%fn",a[i].jj);
printf("扣款:%fn",a[i].kk);
printf("应发工资:%fn",a[i].yfgz);
printf("税款:%fn",a[i].sk);
printf("实发工资:%fn",a[i].sfgz);
x++;
}
if(x==0)
{
printf("未找到该记录n");
return -1;
}
}
voidmod(ZGGZ a[],int y)
{
int i;
int x=0;
char str[15];
printf("请输入你要修改的编号:");
scanf("%s",str);
for(i=0;i<y;i++)
if(!strcmp(str,a[i].num)||!strcmp(str,a[i].name))
{
printf("请输入修改后职工的姓名:");
scanf("%s",a[i].name);
printf("请输入修改后职工的基本工资:");
scanf("%f",&a[i].jbgz);
printf("请输入修改后职工的奖金:");
scanf("%f",&a[i].jj);
printf("请输入修改后职工的扣款:");
scanf("%f",&a[i].kk);
printf("-------------修改成功------------n");
a[i].yfgz=a[i].jbgz+a[i].jj-a[i].kk;
a[i].sk=a[i].yfgz*(0.05);
a[i].sfgz=a[i].yfgz*(0.95);
x++;
}
if(x==0)
{
printf("未找到要修改的编号n");
}
}
intinsert(ZGGZ a[],int y)
{
int i;
int x=0;
char str[15];
printf("请输入你要插入的编号:");
scanf("%s",str);
printf("请输入一条新的记录信息:n");
for(i=0;i<y;i++)
if(strcmp(str,a[i].num)==0)
{
x=i;
for(i=y;i>x+1;i--)
{
a[i].jbgz=a[i-1].jbgz;
a[i].jj=a[i-1].jj;
a[i].kk=a[i-1].kk;
a[i].sfgz=a[i-1].sfgz;
a[i].sk=a[i-1].sk;
a[i].yfgz=a[i-1].yfgz;
strcpy(a[i].name,a[i-1].name);
strcpy(a[i].num,a[i-1].num);
}
}
x++;
printf("请输入职工的编号:");
scanf("%s",a[x].num);
printf("请输入职工的姓名:");
scanf("%s",a[x].name);
printf("请输入职工的基本工资:");
scanf("%f",&a[x].jbgz);
printf("请输入职工的奖金:");
scanf("%f",&a[x].jj);
printf("请输入职工的扣款:");
scanf("%f",&a[x].kk);
a[x].yfgz=a[x].jbgz+a[x].jj-a[x].kk;
a[x].sk=a[x].yfgz*(0.05);
a[x].sfgz=a[x].yfgz*(0.95);
return y+1;
}
voidcount(ZGGZ a[],int y)
{
int q[11]={0,0,0,0,0,0,0,0,0,0,0};
int i;
int x;
for(i=0;i<y;i++)
{
x=(int)a[i].yfgz/1000;
switch(x)
{
case 9:q[1]++;break;
case 8:q[2]++;break;
case 7:q[3]++;break;
case 6:q[4]++;break;
case 5:q[5]++;break;
case 4:q[6]++;break;
case 3:q[7]++;break;
case 2:q[8]++;break;
case 1:q[9]++;break;
case 0:q[10]++;break;
default:q[0]++;break;
}
}
printf("应发工资在10000以上的人数为%dn",q[0]);
printf("应发工资在9000到10000 的人数为%dn",q[1]);
printf("应发工资在8000到9000的人数为%dn",q[2]);
printf("应发工资在7000到8000的人--数为%dn",q[3]);
printf("应发工资在6000到7000的人数为%dn",q[4]);
printf("应发工资在5000到6000的人数为%dn",q[5]);
printf("应发工资在4000到5000的人数为%dn",q[6]);
printf("应发工资在3000到4000的人数为%dn",q[7]);
printf("应发工资在2000到3000的人数为%dn",q[8]);
printf("应发工资在1000到2000的人数为%dn",q[9]);
printf("应发工资在1000以上的人数为%dn",q[10]);
}
voidsort(ZGGZ a[],int y)
{
int i,j;
float t;
char str[15];
for(j=0;j<y-1;j++)
for(i=0;i<y-1-j;i++)
if(a[i].sfgz>a[i+1].sfgz)
{
t=a[i].sfgz;
a[i].sfgz=a[i+1].sfgz;
a[i+1].sfgz=t;
t=a[i].jbgz;
a[i].jbgz=a[i+1].jbgz;
a[i+1].jbgz=t;
t=a[i].jj;
a[i].jj=a[i+1].jj;
a[i+1].jj=t;
t=a[i].kk;
a[i].kk=a[i+1].kk;
a[i+1].kk=t;
t=a[i].yfgz;
a[i].yfgz=a[i+1].yfgz;
a[i+1].yfgz=t;
t=a[i].sk;
a[i].sk=a[i+1].sk;
a[i+1].sk=t;
strcpy(str,a[i].num);
strcpy(a[i].num,a[i+1].num);
strcpy(a[i+1].num,str);
strcpy(str,a[i].name);
strcpy(a[i].name,a[i+1].name);
strcpy(a[i+1].name,str);
}
}
voidsave(ZGGZ a[],int n)
{
FILE *fp;
int i;
if((fp=fopen("sj.txt","wb"))==NULL)
{
printf("cannot open filen");
return;
}
for(i=0;i<n;i++)
if(fwrite(&a[i],sizeof(structemployee),1,fp)!=1)
printf("file write errorn");
fclose(fp);
}
voiddisplay(ZGGZ a[],int n)
{
int i=0;
if(n==0)
{
printf("Files are emptyn");
return;
}
do
{
printf("----------------------------n");
printf("员工编号为%sn",a[i].num);
printf("员工姓名为%sn",a[i].name);
printf("基本工资:%fn",a[i].jbgz);
printf("奖金:%fn",a[i].jj);
printf("扣款:%fn",a[i].kk);
printf("应发工资:%fn",a[i].yfgz);
printf("税款:%fn",a[i].sk);
printf("实发工资:%fn",a[i].sfgz);
i++;
}while(i<n);
}
voidmain()
{
int selete,c=0;
int i=0;
int z=0;
char q,p,x,s;
ZGGZ b[100];
FILE *fp;
if((fp=fopen("sj.txt","rb"))==NULL)
printf("Not Found!n");
else
{
do
{
fread(&b[i],sizeof(structemployee),1,fp);
i++;
}while(!feof(fp));
fclose(fp);
c=i-1;
}
while(1)
{
menu();
scanf("%d",&selete);
if(selete==0)
{
printf("Thank you for your use ( ^_^ ) Byen");
break;
}
switch(selete)
{
case1:c=input(b,c);break;
case2:
{
display(b,c);
do
{
c=del(b,c);
printf("是否继续删除,是按y,否则请按任意值n");
getchar();
scanf("%c",&p);
}while(p=='Y'||p=='y');
break;
}
case3:
{
do
{
sear(b,c);
printf("是否继续查找,是按y,否则请按任意值n");
getchar();
scanf("%c",&x);
}while(x=='Y'||x=='y');
break;
}
case4:
{
display(b,c);
do
{
mod(b,c);
printf("是否继续修改,是按y,否则请按任意值n");
getchar();
scanf("%c",&q);
}while(q=='Y'||q=='y');
break;
}
case5:
{
do
{
c=insert(b,c);
printf("是否继续插入,是按y,否则请按任意值n");
getchar();
scanf("%c",&s);
}while(s=='Y'||s=='y');
break;
}
case6:count(b,c);break;
case7:display(b,c);sort(b,c);break;
case8:save(b,c);break;
case9:display(b,c);break;
default:printf("Please try againn");
}
}
}