#include #include #include #include #include #define TITLE \"\\n 月份 工号 姓名 应发工资 各种折扣 实发工资\\n\" #define DATA \" %2d %4ld %-10s %6.1f %6.1f %6.1f\\n\m,p1->name,p1->should_pay,p1->rebate,p1->actual_pay typedef struct pay { long num; short month; char name[20]; float gw,jn,zw,zl,jt,yj; float should_pay; 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\ 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() { printf(\"\\n\\n\\n\\n\\n\\n\\n\"); printf(\"\\\\ *主菜单选项*\\n\\n\"); printf(\"\\\\1.创建工资档案\\n\"); printf(\"\\\\2.新增工资信息\\n\"); printf(\"\\\\3.修改工资信息\\n\"); printf(\"\\\\4.删除工资信息\\n\"); printf(\"\\\\5.查找工资信息\\n\"); printf(\"\\\\6.分类信息列表\\n\"); printf(\"\\\\7.保 存 信 息\\n\"); printf(\"\\\\0.退 出\\n\"); printf(\"\\n\\n\\n\\n\\n\\n\\n\\n\"); } /*输入模块*/ PAY *input() { short n=1; p1=(PAY*)malloc(sizeof(PAY)); if(p1==NULL) { printf(\"内存不足,无法创建链表!\"); getch(); } printf(\"\\n请输入第%d位职工的信息(以工号为0结束):\\n\ printf(\" 工号:\"); scanf(\"%d\ if(p1->num==0) { printf(\"按任意键返回!\"); getch(); free(p1); return 0; } getchar(); printf(\" 姓名:\"); gets(p1->name); printf(\" 工资月份:\"); scanf(\"%d\ printf(\" 岗位工资,技能工资,职务津贴,职龄津贴,交通补贴,业绩津贴:\\n\"); scanf(\"%f,%f,%f,%f,%f,%f\->yj); printf(\" 房租扣款,公积金,水电费,其它扣款:\\n\"); scanf(\"%f,%f,%f,%f\ 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\ printf(\" 工号:\"); scanf(\"%d\ getchar(); if(p1->num==0) { p1=NULL; break; } printf(\" 姓名:\"); gets(p1->name); printf(\" 工资月份:\"); scanf(\"%d\ printf(\" 岗位工资,技能工资,职务津贴,职龄津贴,交通补贴,业绩津贴:\\n\"); scanf(\"%f,%f,%f,%f,%f,%f\->yj); printf(\" 房租扣款,公积金,水电费,其它扣款:\\n\"); scanf(\"%f,%f,%f,%f\ 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; //edit by Yan-Xingyu Class Network-021 printf(\"职工信息已输入,请按任意键返回,并存盘……\"); getch(); return head; } /*输出模块*/ void output() { short sel,flag,month; float min,max; do { do { printf(\"\\n\\n请选择您的列表方式:\\n\"); printf(\"\\1.全部清单\\n\"); printf(\"\\2.按月输出\\n\"); printf(\"\\3.按工资段输出\\n\"); printf(\"\\0.返回\\n\"); scanf(\"%d\ }while(sel!=1&&sel!=2&&sel!=3&&sel!=0); head=open(); if(head==NULL) return; else switch(sel) { case 1: printf(\"\\n\\\ printf(TITLE); p1=head; do ******全部清单******\\n\"); { printf(DATA); p1=p1->next; }while(p1!=NULL); break; case 2: flag=0; printf(\"输入要查的月份:\"); scanf(\"%d\ printf(\"\\n\\\******第%d月工资清单******\\n\ 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; case 3: flag=0; printf(\"输入最低工资:\"); scanf(\"%f\ printf(\"输入最高工资:\"); scanf(\"%f\ printf(\"\\n\\ ******%5.1f到%5.1f工资的名单******\\n\ 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; case 0: break; } }while(sel!=0); } /*保存文件*/ void save(PAY *head) { short write; fp=fopen(\"pay.txt\ 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() { short n=1,read; fp=fopen(\"pay.txt\ 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) { 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); p2->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\ getchar(); printf(\" 姓名:\"); gets(p3->name); printf(\" 工资月份:\"); scanf(\"%d\ printf(\" 岗位工资,技能工资,职务津贴,职龄津贴,交通补贴,业绩津贴:\\n\"); scanf(\"%f,%f,%f,%f,%f,%f\->yj); printf(\" 房租扣款,公积金,水电费,其它扣款:\\n\"); scanf(\"%f,%f,%f,%f\ 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(); return head; } /*查找模块*/ void search() { short sel; long num; char name[20],choose; head=open(); if(head==NULL) return; else do { do { printf(\"\\n选择查找方式:\\n\"); printf(\"\\1.按工号查找\\n\"); printf(\"\\2.按姓名查找\\n\"); scanf(\"%d\ getchar(); }while(sel!=1&&sel!=2); switch(sel) { case 1: printf(\"输入要查的工号:\"); scanf(\"%ld\ 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); } else printf(\"没有该信息!\\n\"); printf(\"是否继续?是(Y) 否(N)\\n\"); choose=getch(); }while(choose=='Y'||choose=='y'); printf(\"任意键返回\"); getch(); } /*删除模块*/ PAY *del() { short sel; long num; char name[20],choose; head=open(); if(head==NULL) return NULL; else do { do { printf(\"\\n选择删除方式:\\n\"); printf(\"\\1.按工号删除\\n\"); printf(\"\\2.按姓名删除\\n\"); scanf(\"%d\ getchar(); }while(sel!=1&&sel!=2); switch(sel) { case 1: printf(\"输入要删除的工号:\"); scanf(\"%ld\ break; case 2: 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(); return head; } /*修改模块*/ PAY *revise() { short sel; long num; char name[20],choose; head=open(); if(head==NULL) return NULL; else do { do { printf(\"\\n查找要修改的对象:\\n\"); printf(\"\\1.按工号查找\\n\"); printf(\"\\2.按姓名查找\\n\"); scanf(\"%d\ getchar(); }while(sel!=1&&sel!=2); switch(sel) { case 1: printf(\"输入要查的工号:\"); scanf(\"%ld\ 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将上述信息改为如下信息:\\n\"); printf(\" 工号:\"); scanf(\"%d\ getchar(); printf(\" 姓名:\"); gets(p1->name); printf(\" 工资月份:\"); scanf(\"%d\ printf(\" 岗位工资,技能工资,职务津贴,职龄津贴,交通补贴,业绩津贴:\\n\"); scanf(\"%f,%f,%f,%f,%f,%f\->yj); printf(\" 房租扣款,公积金,水电费,其它扣款:\\n\"); scanf(\"%f,%f,%f,%f\ 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 © 2019- ovod.cn 版权所有 湘ICP备2023023988号-4
违法及侵权请联系:TEL:199 1889 7713 E-MAIL:2724546146@qq.com
本站由北京市万商天勤律师事务所王兴未律师提供法律服务