⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 新建 文本文档.txt

📁 这是一个C语言版的工资管理系统
💻 TXT
字号:
#include <stdio.h> 
#include <stdlib.h> 
#include <malloc.h> 
#include <string.h> 
#include <conio.h> 

#define TITLE "\n 月份 工号 姓名  应发工资 各种折扣 实发工资\n" 
#define DATA " %2d %4ld %6s %6.1f %6.1f %6.1f\n",p1->month,p1->num,p1->sex,p1->should_pay,p1->rebate,p1->actual_pay 

typedef struct pay 
{ 
long num; 
short month; 
char name[10]; 
char sex[10];
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",&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() 
{ 
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() 
{ 
short n=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); 
return 0; 
} 
getchar(); 
printf(" 姓名:");
gets(p1->sex);
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->sex); 
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; 
printf("职工信息已输入,请按任意键返回,并存盘……"); 
getch(); 
return head; 
} 

/*输出模块*/ 
void output() 
{ 
short sel,flag,month; 
float min,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) 
{ 
case 1: 
printf("\n\t\t\t ******全部清单******\n"); 
printf(TITLE); 
p1=head; 
do 
{ 
printf(DATA); 
p1=p1->next; 
}while(p1!=NULL); 
break; 
case 2: 
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; 
case 3: 
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<max) 
{ 
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","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() 
{ 
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) 
{ 
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",&p3->num); 
getchar(); 
printf(" 姓名:"); 
gets(p3->sex); 
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(); 
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("\t\t1.按工号查找\n"); 
printf("\t\t2.按姓名查找\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)&&(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("\t\t1.按工号删除\n"); 
printf("\t\t2.按姓名删除\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==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("\t\t1.按工号查找\n"); 
printf("\t\t2.按姓名查找\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)&&(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(" 性别:");
gets(p1->sex); 
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; 
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -