C工资管理系统源代码.docx
《C工资管理系统源代码.docx》由会员分享,可在线阅读,更多相关《C工资管理系统源代码.docx(19页珍藏版)》请在冰豆网上搜索。
C工资管理系统源代码
NewlycompiledonNovember23.2020
#include<>
#include<>
#include<>
#include<>
#include<>
defineTITLE”\n月份工号姓名应发工资各种折扣实发工资\n”
#defineDATAM%2d%41d%-10s%%%\n*\p1->month,p1->num,p1-
>name,pl->should_pay,p1->rebate,p1->actual_pay
typedefstructpay
{
longnum;
shortmonth;
charname[20];
floatgw,jn,zw,zl,jt,yj;
floatshould_pay;
floatfz,gj,sd,others;
floatrebate;
floatactual_pay;
structpay*next;
}PAY;
FILE*fp;
PAY*p1=NULL,*p2=NULL,*head=NULL;
voidmenu();
PAY*input();
voidoutput();
voidsave(PAY*head);
PAY*open();
PAY*insert();
voidsearch();
PAY*del();
PAY*revise();
/*主程序模块*/
voidmain(void)
{
shortsei;
do
{
menu();
scanf(”%d",&sel);
switch(sel)
case1:
head=input();建工资档案\n”);
printf("\t\t\t\t2.新增工资信息\n”);
printf("\t\t\t\t3.修改工资信息\n”);
printf("\t\t\t\t4.删除工资信息\n”);
printf("\t\t\t\t5.查找工资信息\n”);
printf("\t\t\t\t6.分类信息列表\n”);
printf("\t\t\t\t7.保存信息\n“);
printf("\t\t\t\tO.退出\n");
printf("\n\n\n\n\n\n\n\n");
)
/*输入模块*/
PAY*input()
{
shortn=l;
pl=(PAY*)malloc(sizeof(PAY));
if(pl==NULL)
{
printf("内存不足,无法创建链表!
”);
getch();
}
printf("\n请输入第%<1位职工的信息(以工号为0结束):
\n“,n);
printf("工号:
“);
scanf("%d",&pl->num);
if(pl->num==0)
{
printf("按任意键返回!
“);
getch();
free(pl);
return0;
}
getchar();
printfC姓名:
”);
gets(pl->name);
printf("工资月份:
”);
scanf("%dn,&p1->month);
printf("岗位工资,技能工资,职务津贴,职龄津贴,交通补贴,业绩津贴:
\n”);
scanfC%f,%f,%f,%f,%f,%f\&p1->gw,&p1->jn,&p1・>zw,&p1->zl,&p1->jt,&p1・
>yj);
printf("房租扣款,公积金,水电费,其它扣款:
\n”);
scanfC%f,%f,%f,%f\&pl->fz,&pl->gj,&p1->sd.&p1->others);
pl->should_pay=p1->gw+pl->jn+p1・>zw+p1->zl+pl->jt+p1->yj;
p1->rebate=p1->fz+p1->gj+p1->sd+pl->others;
p1->actual_pay=p1->should_pay-pl->rebate;
whi!
e(pl!
=NULL)
{
if(n==l)
head=p1;
else
p2->next=pl;
n++;
p2=pl;
p1=(PAY*)malloc(sizeof(PAY));
if(pl==NULL)
{
printf(“内存不足,无法创建链表!
n);
getch();
)
printf(”请输入第初位职工的信息(以工号为0结束):
\n“,n);
printf("工号:
”);
scanf(”%cT,&p1->num);
getchar();
if(pl->num==0)
{
pl二NULL;
break;
}
printf(”姓名:
”);
gets(pl->name);
printfC'工资月份:
“);
scanf("%cT,&p1->month);
printfC*岗位工资,技能工资,职务津贴,职龄津贴,交通补贴,业绩津贴:
\nH);
scanf("%f,%f,%f,%f,%f,%f”,&p1->gw,&p1・>jn,&p1・>zw,&p1->zl,&p1・>jt,&p1->yj);
printf(H房租扣款,公积金,水电费.其它扣款:
W);
scanf("%f,%f,%f,%fH,&pl->fz,&p1・>gj,&p1->sd,&pl->others);p1->should_pay=p1->gw+pl->jn+pl->zw+p1->zl+p1->jt+p1->yj;pl->rebate=pl->fz+pl->gj+pl・>sd+pl->others;
p1->actual_pay=p1->should_pay-pl->rebate;
}
p2->next=NULL;
部清单S');
printf(H\t\t2.按月输出W);
printf(H\t\t3.按工资段输出\nJ;
scanf(H%d\&sel);
}while(sel!
=1&&sel!
=2&&sel!
=3&&sel!
=0);head=open();
if(head==NULL)
return;
else
switch(sel)
{
case1:
printf(TITLE);
pl=head;
do
{
printf(DATA);pl=pl->next;
}while(pl!
=NULL);break;
case2:
flag=O;
printf(“输入要查的月份:
“);
scanf(H%d,\&month);
printf(”\n\t\t\t******第協d月工资清单******\n”,month);
printf(TITLE);
pl二head;
do
{
if(p1->month==month)
{
printf(DATA);
pl=pl->next;
flag=l;
}
else
pl=pl->next;
}while(pl!
=NULL);
if(flag==O)
printf("没有该月清单\n”);
break;
case3:
flag=O;
printf(”输入最低工资:
“);
scanf("%f",&min);
printf(“输入最高工资:
");
scanf(H%f\&max);
printf(H\n\t\t******%到%工资的名单******\n*\min,max);
printf(TITLE);
pl二head;
do
{
if(p1->actual_pay>min&&p1->actual_pay{
printf(DATA);
pl=pl->next;
flag=l;
}
elsepl=pl->next;
}while(pl!
=NULL);
if(flag==O)
printfC*没有该工资段的职工\n”);
break;
case0:
break;
}
)whi!
e(sel!
=0);
}
/*保存文件*/
voidsave(PAY*head)
{
shortwrite;
fp=fopen(",\"w");
if(fp==NULL)
{
printf(”创建文件失败!
”);
getch();
return;
}
pl=p2=head;
while(pl!
=NULL)
{
write=fwrite(p1,sizeof(PAY)Jfp);if(!
write)
{
printf("无法写入文件!
");
getch();
return;
}pl=pl->next;
}
fclose(fp);
printf("成功存盘!
“);
getch();
}
/*打开文件勺
PAY*open()
{
shortn=l,read;
fp二fopen(“”,”r“);
if(fp==NULL)
{
printf(“无法打开档案文件!
");
getch();
returnNULL;
}
if((p1=p2=(PAY*)malloc(sizeof(PAY)))==NULL){
printf(”内存不足!
");
getch();
returnNULL;
}
read=fread(p1,sizeof(PAY),1,fp);
if(!
read)
{
printf(“文件读取出错!
1“);
getch();
returnNULL;
}
if(p1->next==NULL)
head=p1;
else
{
do
{
if(n==l)
head=p1;
else
p2->next=pl;
n++;
p2=pl;
if((p1=(PAY*)malloc(sizeof(PAY)))==NULL)
{
printfC内存不足!
");
getch();
returnNULL;
}
read=fread(p1,sizeof(PAY),lfp);
if(!
read)
{
printf(”文件读取出错!
2”);
getch();
returnNULL;
}
}while(pl->next!
=NULL);
p2->next=pl;
}
returnhead;
fclose(fp);
}
/*插入模块*/
PAY*insert()
{
PAY水p3二NULL;
charsei;
head=open();
if(head==NULL)
returnNULL;
else
do
{
printf("请输入要插入的职工信息:
\n”);
p3=(PAY*)malloc(sizeof(PAY));
if(p3==NULL)
{
printf(”内存不足,无法创建链表!
“);
getch();
}
printf("工号:
”);
scanf("%d",&p3->num);
getchar();
printf("姓名:
”);
gets(p3->name);
printf("工资月份:
”);
scanf(n%df\&p3->nionth);
printfC1岗位工资,技能工资,职务津贴,职龄津贴,交通补贴,业绩津
贴:
\nH);
scanf(”%f,%f,%f,%f,%f,%F;&p3->gw,&p3->jn,&p3->zw,&p3->zl、&p3・>jt,&p3->yj);
printf("房租扣款,公积金,水电费,其它扣款:
5”);
scanf(H%f,%f,%f,%f\&p3->fz,&p3->gj,&p3->sd,&p3->others);
p3->should_pay=p3->gw+p3->jn+p3«>zw+p3->zl+p3->jt+p3->yj;
p3->rebate=p3->fz+p3->gj+p3->sd+p3->others;
p3->actual_pay=p3->should_pay-p3->rebate;
pl=head;
while(pl!
=NULL)
{
p2=pl;
pl=pl->next;
)
p2->next=p3;
p3->next=NULL;
printf(”成功插入,是否继续是(Y)否(N)\n“);
sel=getch();
}while(sel=='Y,llsel=='y,);
printf("\n任意键返回,并存盘……\n”);
getch();
returnhead;
)
/*查找模块*/
voidsearch()
{
shortsei;
longnum;
charnanie[20],choose;
head=open();
if(head==NULL)
return;
else
do
do
printffXn选择查找方式:
\十);
printf(n\t\tl.按工号查找W);
printf(n\t\t2.按姓名查找\n”);
scanf("%dH,&sel);
getchar();
)while(sel!
=l&&sel!
=2);
switch(sel)
{
case1:
printf("输入要查的工号:
“);
scanf(H%ld'\&num);
break;
case2:
printf(”输入要查的姓名:
“);
gets(name);
break;
}
pl=head;
while((pl->next!
=NULL)&&(p1->num!
=num)&&(strcmp(pl->name,name)!
=0))
工号删除\n”);
printf("\t\t2.按姓名删除\n”);
scanf(”%d",&sel);
getchar();
)while(sel!
=l&&sel!
=2);
switch(sel)
{
case1:
printf(”输入要删除的工号:
");
scanf(H%ld'\&num);
break;
case2:
printf(”输入要删除的姓名:
");
gets(name);
break;
}
pl=head;
if((p1->num==num)llstrcmp(p1->name,name)==O)
{
head=pl->next;
printf("删除信息成功!
”);
}
else
{
while((p1->next!
=NULL)&&(pl->num!
=num)&&(strcmp(pl->name,name)!
=O)){
p2=pl;
pl=pl->next;
1
if((p1->num==num)llstrcmp(p1->namejiame)==O)
{
p2->next=p1->next;
free(pl);
printf("\n删除信息成功!
\n");
)
else
printf("\n没有该信息!
\n”);
}
printf(堤否继续是(Y)否(N)\n“);
choose=getch();
}while(choose==,Y,llchoose==,y,);
printfC任意键返回,并存盘……”);
getch();
returnhead;
}
/*修改模块*/
PAY*revise()
{
shortsei;
longnum;
charname[20],choose;
head=open();
if(head==NULL)
returnNULL;
else
do
{
do
{
printf("\n查找要修改的对象:
\n”);
printf("\t\tl.按工号查找\n“);
printf("\t\t2.按姓名查找\n”);
scanf(”%d“,&sel);
getchar();
)while(sel!
=l&&sel!
=2);
switch(sel)
{
case1:
printf(”输入要查的工号:
”);
scanf(,,%ld,\&num);
break;
case2:
printf(”输入要查的姓名:
“);
gets(name);
break;
)
pl=head;
while((pl->next!
=NULL)&&(p1->num!
=num)&&(strcmp(pl->name,name)!
=O))//用成pl!
=NULL有问题
pl=pl->next;
if((p1->num==num)llstrcmp(p1->name,name)==O)
{
printf("您要修改的原始信息如下:
\n“);
printf(TITLE);
printf(DATA);
printf(”\n将上述信息改为如下信息:
\nH);
printf(”工号:
”);scanf(H%dH,&p1->num);
getchar();
printfC姓名:
”);
gets(pl->name);
printfC工资月份:
”);
scanf(H%d,\&p1->month);
printfC*岗位工资,技能工资,职务津贴,职龄津贴,交通补贴,业绩津
贴:
\n“);
scanf(M%f,%f,%f,%f,%f,%f\&p1->gw,&p1->jm&p1->zu\&p1->zl.&p1->jt,&p1->yj);
printfC房租扣款,公积金.水电费.其它扣款:
\n“);
scanf(M%f,%f,%f,%f\&pl->fz,&p1・>gj,&p1->sd,&p1->others);
p1->should_pay=p1・>gw+pl->jn+p1->zw+p1->zl+p1->jt+p1->yj;
p1->rebate=p1->fz+p1->gj+p1->sd+pl->others;
p1->actual_pay=pl->should_pay-p1->rebate;
}
else
printf(”你要修改的信息不存在!
\n“);
printf(堤否继续是(Y)否(N)\n“);
choose=getch();
}while(choose==,Y,llchoose==,y,);
printf(“任意键返回,并存盘……“);
getch();
returnhead;