1、c+工资管理系统源代码#include #include #include #include #include #define TITLE n 月份 工号 姓名 应发工资 各种折扣 实发工资n#define DATA %2d %4ld %-10s %6.1f %6.1f %6.1fn,p1-month,p1-num,p1-name,p1-should_pay,p1-rebate,p1-actual_paytypedef struct pay long num; short month; char name20; float gw,jn,zw,zl,jt,yj; float should_pay
2、; float fz,gj,sd,others; float rebate; float actual_pay; struct pay *next;PAY;FILE *fp;PAY *p1=NULL,*p2=NULL,*head=NULL;void menu();PAY *input();void output();void save(PAY *head);PAY *open();PAY *insert();void search();PAY *del();PAY *revise();/*主程序模块*/void main(void) short sel; do menu(); scanf(%d
3、,&sel); switch(sel) case 1: head=input(); /输入模块 break; case 2: head=insert(); /插入模块 break; case 3: head=revise(); /修改模块 break; case 4: head=del(); /删除模块 break; case 5: search(); /查找模块 break; case 6: output(); /输出模块 break; case 7: save(head); /保存模块 break; case 0: break; while(sel!=0);/*菜单*/void menu(
4、) printf(nnnnnnn); printf(tttt *主菜单选项*nn); printf(tttt1.创建工资档案n); printf(tttt2.新增工资信息n); printf(tttt3.修改工资信息n); printf(tttt4.删除工资信息n); printf(tttt5.查找工资信息n); printf(tttt6.分类信息列表n); printf(tttt7.保 存 信 息n); printf(tttt0.退 出n); printf(nnnnnnnn);/*输入模块*/PAY *input() short n=1; p1=(PAY*)malloc(sizeof(PAY
5、); if(p1=NULL) printf(内存不足,无法创建链表!); getch(); printf(n请输入第%d位职工的信息(以工号为0结束):n,n); printf( 工号:); scanf(%d,&p1-num); if(p1-num=0) printf(按任意键返回!); getch(); free(p1); return 0; getchar(); printf( 姓名:); gets(p1-name); printf( 工资月份:); scanf(%d,&p1-month); printf( 岗位工资,技能工资,职务津贴,职龄津贴,交通补贴,业绩津贴:n); scanf(%
6、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
7、=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( 岗位工资,技能工资,职务津
8、贴,职龄津贴,交通补贴,业绩津贴: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;
9、p2-next=NULL; /edit by Yan-Xingyu Class Network-021 printf(职工信息已输入,请按任意键返回,并存盘); getch(); return head;/*输出模块*/void output() short sel,flag,month; float min,max; do do printf(nn请选择您的列表方式:n); printf(tt1.全部清单n); printf(tt2.按月输出n); printf(tt3.按工资段输出n); printf(tt0.返回n); scanf(%d,&sel); while(sel!=1&sel!=
10、2&sel!=3&sel!=0); head=open(); if(head=NULL) return; else switch(sel) case 1: printf(nttt *全部清单*n); printf(TITLE); p1=head; do printf(DATA); p1=p1-next; while(p1!=NULL); break; case 2: flag=0; printf(输入要查的月份:); scanf(%d,&month); printf(nttt*第%d月工资清单*n,month); printf(TITLE); p1=head; do if(p1-month=m
11、onth) printf(DATA); p1=p1-next; flag=1; else p1=p1-next; while(p1!=NULL); if(flag=0) printf(没有该月清单n); break; case 3: flag=0; printf(输入最低工资:); scanf(%f,&min); printf(输入最高工资:); scanf(%f,&max); printf(ntt *%5.1f到%5.1f工资的名单*n,min,max); printf(TITLE); p1=head; do if(p1-actual_paymin&p1-actual_paynext; fl
12、ag=1; else p1=p1-next; while(p1!=NULL); if(flag=0) printf(没有该工资段的职工n); break; case 0: break; while(sel!=0);/*保存文件*/void save(PAY *head) short write; 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(无法写
13、入文件!); getch(); return; p1=p1-next; fclose(fp); printf(成功存盘!); getch();/*打开文件*/PAY *open() short n=1,read; fp=fopen(pay.txt,r); if(fp=NULL) printf(无法打开档案文件!); getch(); return NULL; if(p1=p2=(PAY*)malloc(sizeof(PAY)=NULL) printf(内存不足!); getch(); return NULL; read=fread(p1,sizeof(PAY),1,fp); if(!read)
14、 printf(文件读取出错!1); getch(); return NULL; 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(); return NULL; read=fread(p1,sizeof(PAY),1,fp); if(!read) printf(文件读取出错!2); getch(); return NULL; while(p1-next!=NULL); p
15、2-next=p1; return head; fclose(fp);/*插入模块*/PAY *insert() PAY *p3=NULL; char sel; head=open(); if(head=NULL) return NULL; else do printf(请输入要插入的职工信息:n); p3=(PAY*)malloc(sizeof(PAY); if(p3=NULL) printf(内存不足,无法创建链表!); getch(); printf( 工号:); scanf(%d,&p3-num); getchar(); printf( 姓名:); gets(p3-name); pri
16、ntf( 工资月份:); 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+p
17、3-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(); return head;/*查找模块*/void search() short sel; long num; char name20,choose; head=op
18、en(); if(head=NULL) return; else do do printf(n选择查找方式:n); printf(tt1.按工号查找n); printf(tt2.按姓名查找n); scanf(%d,&sel); getchar(); while(sel!=1&sel!=2); switch(sel) case 1: printf(输入要查的工号:); scanf(%ld,&num); break; case 2: printf(输入要查的姓名:); gets(name); break; p1=head; while(p1-next!=NULL)&(p1-num!=num)&(s
19、trcmp(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() short sel; long num; char na
20、me20,choose; head=open(); if(head=NULL) return NULL; else do do printf(n选择删除方式:n); printf(tt1.按工号删除n); printf(tt2.按姓名删除n); scanf(%d,&sel); getchar(); while(sel!=1&sel!=2); switch(sel) case 1: printf(输入要删除的工号:); scanf(%ld,&num); break; case 2: printf(输入要删除的姓名:); gets(name); break; p1=head; if(p1-num=
21、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(
22、choose=Y|choose=y); printf(任意键返回,并存盘); getch(); return head;/*修改模块*/PAY *revise() short sel; long num; char name20,choose; head=open(); if(head=NULL) return NULL; else do do printf(n查找要修改的对象:n); printf(tt1.按工号查找n); printf(tt2.按姓名查找n); scanf(%d,&sel); getchar(); while(sel!=1&sel!=2); switch(sel) case
23、 1: printf(输入要查的工号:); scanf(%ld,&num); break; case 2: 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将上述信息改为如下信息:
24、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(); return head;
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1