c++工资管理系统源代码.docx
- 文档编号:5304681
- 上传时间:2022-12-15
- 格式:DOCX
- 页数:19
- 大小:17.09KB
c++工资管理系统源代码.docx
《c++工资管理系统源代码.docx》由会员分享,可在线阅读,更多相关《c++工资管理系统源代码.docx(19页珍藏版)》请在冰豆网上搜索。
c++工资管理系统源代码
#include
#include
#include
#include
#include
#defineTITLE"\n月份工号姓名应发工资各种折扣实发工资\n"
#defineDATA"%2d%4ld%-10s%6.1f%6.1f%6.1f\n",p1->month,p1->num,p1->name,p1->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)
{
shortsel;
do
{
menu();
scanf("%d",&sel);
switch(sel)
{
case1:
head=input();//输入模块
break;
case2:
head=insert();//插入模块
break;
case3:
head=revise();//修改模块
break;
case4:
head=del();//删除模块
break;
case5:
search();//查找模块
break;
case6:
output();//输出模块
break;
case7:
save(head);//保存模块
break;
case0:
break;
}
}while(sel!
=0);
}
/*菜单*/
voidmenu()
{
printf("\n\n\n\n\n\n\n");
printf("\t\t\t\t*主菜单选项*\n\n");
printf("\t\t\t\t1.创建工资档案\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\t0.退出\n");
printf("\n\n\n\n\n\n\n\n");
}
/*输入模块*/
PAY*input()
{
shortn=1;
p1=(PAY*)malloc(sizeof(PAY));
if(p1==NULL)
{
printf("内存不足,无法创建链表!
");
getch();
}
printf("\n请输入第%d位职工的信息(以工号为0结束):
\n",n);
printf("工号:
");
scanf("%d",&p1->num);
if(p1->num==0)
{
printf("按任意键返回!
");
getch();
free(p1);
return0;
}
getchar();
printf("姓名:
");
gets(p1->name);
printf("工资月份:
");
scanf("%d",&p1->month);
printf("岗位工资,技能工资,职务津贴,职龄津贴,交通补贴,业绩津贴:
\n");
scanf("%f,%f,%f,%f,%f,%f",&p1->gw,&p1->jn,&p1->zw,&p1->zl,&p1->jt,&p1->yj);
printf("房租扣款,公积金,水电费,其它扣款:
\n");
scanf("%f,%f,%f,%f",&p1->fz,&p1->gj,&p1->sd,&p1->others);
p1->should_pay=p1->gw+p1->jn+p1->zw+p1->zl+p1->jt+p1->yj;
p1->rebate=p1->fz+p1->gj+p1->sd+p1->others;
p1->actual_pay=p1->should_pay-p1->rebate;
while(p1!
=NULL)
{
if(n==1)
head=p1;
else
p2->next=p1;
n++;
p2=p1;
p1=(PAY*)malloc(sizeof(PAY));
if(p1==NULL)
{
printf("内存不足,无法创建链表!
");
getch();
}
printf("请输入第%d位职工的信息(以工号为0结束):
\n",n);
printf("工号:
");
scanf("%d",&p1->num);
getchar();
if(p1->num==0)
{
p1=NULL;
break;
}
printf("姓名:
");
gets(p1->name);
printf("工资月份:
");
scanf("%d",&p1->month);
printf("岗位工资,技能工资,职务津贴,职龄津贴,交通补贴,业绩津贴:
\n");
scanf("%f,%f,%f,%f,%f,%f",&p1->gw,&p1->jn,&p1->zw,&p1->zl,&p1->jt,&p1->yj);
printf("房租扣款,公积金,水电费,其它扣款:
\n");
scanf("%f,%f,%f,%f",&p1->fz,&p1->gj,&p1->sd,&p1->others);
p1->should_pay=p1->gw+p1->jn+p1->zw+p1->zl+p1->jt+p1->yj;
p1->rebate=p1->fz+p1->gj+p1->sd+p1->others;
p1->actual_pay=p1->should_pay-p1->rebate;
}
p2->next=NULL;
//editbyYan-XingyuClassNetwork-021
printf("职工信息已输入,请按任意键返回,并存盘……");
getch();
returnhead;
}
/*输出模块*/
voidoutput()
{
shortsel,flag,month;
floatmin,max;
do
{
do
{
printf("\n\n请选择您的列表方式:
\n");
printf("\t\t1.全部清单\n");
printf("\t\t2.按月输出\n");
printf("\t\t3.按工资段输出\n");
printf("\t\t0.返回\n");
scanf("%d",&sel);
}while(sel!
=1&&sel!
=2&&sel!
=3&&sel!
=0);
head=open();
if(head==NULL)
return;
else
switch(sel)
{
case1:
printf("\n\t\t\t******全部清单******\n");
printf(TITLE);
p1=head;
do
{
printf(DATA);
p1=p1->next;
}while(p1!
=NULL);
break;
case2:
flag=0;
printf("输入要查的月份:
");
scanf("%d",&month);
printf("\n\t\t\t******第%d月工资清单******\n",month);
printf(TITLE);
p1=head;
do
{
if(p1->month==month)
{
printf(DATA);
p1=p1->next;
flag=1;
}
else
p1=p1->next;
}while(p1!
=NULL);
if(flag==0)
printf("没有该月清单\n");
break;
case3:
flag=0;
printf("输入最低工资:
");
scanf("%f",&min);
printf("输入最高工资:
");
scanf("%f",&max);
printf("\n\t\t******%5.1f到%5.1f工资的名单******\n",min,max);
printf(TITLE);
p1=head;
do
{
if(p1->actual_pay>min&&p1->actual_pay { printf(DATA); p1=p1->next; flag=1; } else p1=p1->next; }while(p1! =NULL); if(flag==0) printf("没有该工资段的职工\n"); break; case0: break; } }while(sel! =0); } /*保存文件*/ voidsave(PAY*head) { shortwrite; fp=fopen("pay.txt","w"); if(fp==NULL) { printf("创建文件失败! "); getch(); return; } p1=p2=head; while(p1! =NULL) { write=fwrite(p1,sizeof(PAY),1,fp); if(! write) { printf("无法写入文件! "); getch(); return; } p1=p1->next; } fclose(fp); printf("成功存盘! "); getch(); } /*打开文件*/ PAY*open() { shortn=1,read; fp=fopen("pay.txt","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==1) head=p1; else p2->next=p1; n++; p2=p1; if((p1=(PAY*)malloc(sizeof(PAY)))==NULL) { printf("内存不足! "); getch(); returnNULL; } read=fread(p1,sizeof(PAY),1,fp); if(! read) { printf("文件读取出错! 2"); getch(); returnNULL; } }while(p1->next! =NULL); p2->next=p1; } returnhead; fclose(fp); } /*插入模块*/ PAY*insert() { PAY*p3=NULL; charsel; 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("%d",&p3->month); printf("岗位工资,技能工资,职务津贴,职龄津贴,交通补贴,业绩津贴: \n"); scanf("%f,%f,%f,%f,%f,%f",&p3->gw,&p3->jn,&p3->zw,&p3->zl,&p3->jt,&p3->yj); printf("房租扣款,公积金,水电费,其它扣款: \n"); scanf("%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; p1=head; while(p1! =NULL) { p2=p1; p1=p1->next; } p2->next=p3; p3->next=NULL; printf("成功插入,是否继续? 是(Y)否(N)\n"); sel=getch(); }while(sel=='Y'||sel=='y'); printf("\n任意键返回,并存盘……\n"); getch(); returnhead; } /*查找模块*/ voidsearch() { shortsel; longnum; charname[20],choose; head=open(); if(head==NULL) return; else do { do { printf("\n选择查找方式: \n"); printf("\t\t1.按工号查找\n"); printf("\t\t2.按姓名查找\n"); scanf("%d",&sel); getchar(); }while(sel! =1&&sel! =2); switch(sel) { case1: printf("输入要查的工号: "); scanf("%ld",&num); break; case2: printf("输入要查的姓名: "); gets(name); break; } p1=head; while((p1->next! =NULL)&&(p1->num! =num)&&(strcmp(p1->name,name)! =0))//用成p1! =NULL有问题? p1=p1->next; if((p1->num==num)||strcmp(p1->name,name)==0) { printf("您要查找的信息如下: \n"); printf(TITLE); printf(DATA); } else printf("没有该信息! \n"); printf("是否继续? 是(Y)否(N)\n"); choose=getch(); }while(choose=='Y'||choose=='y'); printf("任意键返回"); getch(); } /*删除模块*/ PAY*del() { shortsel; longnum; charname[20],choose; head=open(); if(head==NULL) returnNULL; else do { do { printf("\n选择删除方式: \n"); printf("\t\t1.按工号删除\n"); printf("\t\t2.按姓名删除\n"); scanf("%d",&sel); getchar(); }while(sel! =1&&sel! =2); switch(sel) { case1: printf("输入要删除的工号: "); scanf("%ld",&num); break; case2: printf("输入要删除的姓名: "); gets(name); break; } p1=head; if((p1->num==num)||strcmp(p1->name,name)==0) { head=p1->next; printf("删除信息成功! "); } else { while((p1->next! =NULL)&&(p1->num! =num)&&(strcmp(p1->name,name)! =0)) { p2=p1; p1=p1->next; } if((p1->num==num)||strcmp(p1->name,name)==0) { p2->next=p1->next; free(p1); printf("\n删除信息成功! \n"); } else printf("\n没有该信息! \n"); } printf("是否继续? 是(Y)否(N)\n"); choose=getch(); }while(choose=='Y'||choose=='y'); printf("任意键返回,并存盘……"); getch(); returnhead; } /*修改模块*/ PAY*revise() { shortsel; longnum; charname[20],choose; head=open(); if(head==NULL) returnNULL; else do { do { printf("\n查找要修改的对象: \n"); printf("\t\t1.按工号查找\n"); printf("\t\t2.按姓名查找\n"); scanf("%d",&sel); getchar(); }while(sel! =1&&sel! =2); switch(sel) { case1: printf("输入要查的工号: "); scanf("%ld",&num); break; case2: printf("输入要查的姓名: "); gets(name); break; } p1=head; while((p1->next! =NULL)&&(p1->num! =num)&&(strcmp(p1->name,name)! =0))//用成p1! =NULL有问题? p1=p1->next; if((p1->num==num)||strcmp(p1->name,name)==0) { printf("您要修改的原始信息如下: \n"); printf(TITLE); printf(DATA); printf("\n将上述信息改为如下信息: \n"); printf("工号: "); scanf("%d",&p1->num); getchar(); printf("姓名: "); gets(p1->name); printf("工资月份: "); scanf("%d",&p1->month); printf("岗位工资,技能工资,职务津贴,职龄津贴,交通补贴,业绩津贴: \n"); scanf("%f,%f,%f,%f,%f,%f",&p1->gw,&p1->jn,&p1->zw,&p1->zl,&p1->jt,&p1->yj); printf("房租扣款,公积金,水电费,其它扣款: \n"); scanf("%f,%f,%f,%f",&p1->fz,&p1->gj,&p1->sd,&p1->others); p1->should_pay=p1->gw+p1->jn+p1->zw+p1->zl+p1->jt+p1->yj; p1->rebate=p1->fz+p1->gj+p1->sd+p1->others; p1->actual_pay=p1->should_pay-p1->rebate; } else printf("你要修改的信息不存在! \n"); printf("是否继续? 是(Y)否(N)\n"); choose=getch(); }while(choose=='Y'||choose=='y'); printf("任意键返回,并存盘……"); getch(); returnhead; }
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- c+ 工资管理 系统 源代码