我有一个自己写的工资管理系统,和你要求的很相似,你只要自己把一些功能删除和一些字修改一下!(编译环境 vc6.0)
#include <stdio.h>
#include <windows.h>
/*******************定义结构体***********************/
typedef struct
{
char name[12]; //姓名
int gh; //职工号
char bm[22]; //所属部门
float jb,jl,bt,kk; //基本工资 奖励工资 补贴 扣款
struct pay *next;
}pay;
FILE *fp;
pay *p1=NULL,*p2=NULL,*p3=NULL,*p4=NULL,*p5=NULL,*head=NULL;
/*******************声明函数************************/
void zhuti(); //主题显示
pay *chushihua(); //初始化
void baocun(pay *head); //保存文件
pay *open(); //读取文件
pay *jiaru(); //加入记录
pay *xianshi(); //显示记录
pay *gonghaopaixu(); //工号排序
pay *xingmingpaixu(); //姓名排序
pay *shanchu(); //删除记录
pay *xingmingshanchu(); //姓名删除
pay *gonghaoshanchu(); //工号删除
pay *xiugai(); //修改记录
pay *xingmingxiugai(); //姓名修改
pay *gonghaoxiugai(); //工号修改
pay *zxgai(pay *p1); //执行修改
void chaxun(); //查询模块
/////////////////////////////////////////////////////////////
//////////////////////// 主 函 数 /////////////////////
/////////////////////////////////////////////////////////////
main()
{
short i,j=1;
head=chushihua();
do
{
system("cls");
if(j==0)i=0;
else
{
printf("\n\n\n");zhuti();printf("\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\t0.退 出\n");
printf("\n\n\n\n");
printf("\t*************************************************************");
printf("\t\t\t选择:");
j=1;scanf("%d",&i);
}
system("cls");
switch(i)
{
case 1: head=jiaru(); break; //加入模块
case 2: head=xiugai(); break; //修改模块
case 3: head=shanchu(); break; //删除模块
case 4: head=xianshi(); break; //显示模块
case 5: chaxun(); break; //查询模块
case 6: zhuti();baocun(head);break; //保存模块
case 0:
if(j==1)
{zhuti();printf("\n\n\n\n\n\n");
baocun(head);break; } //退出系统
if(j==0) break; //初始化失败退出
default: break;
}
}
while(i!=0);
}
/*********************主题显示************************/
void zhuti()
{
printf("\t ******************\n");
printf("\t*********************** 工资管理系统 **********************\n");
printf("\t ******************\n\n");
}
/*********************初始化*************************/
pay *chushihua()
{
short i;
zhuti();
printf("\n\n");
printf("\t\t\t\t 初始化>>>>>>\n\n");
head=open();
if(head==0)
{
printf("\n\t\t\t\t1.创建新文件 0.跳过\n\n\t\t\t\t\t");
scanf("%d",&i);
if(i!=0){baocun(head);head=open();}
}
if(head!=0) printf("\n\t\t\t\t 初始化成功!");
if(head==0) printf("\n\t\t\t\t 初始化失败!\n");
Sleep(2000);return head;
}
/********************保存模块***********************/
void baocun(pay *head)
{
short write;
printf("\n\n");
fp=fopen("pay.txt","w");
if(fp==NULL)
{
printf("\t\t\t\t创建文件失败!\n");
Sleep(2000);return;
}
if(head==0){pay a={"\0",0,"\0",0,0,0,0};head=&a;}
p1=head;
while(p1!=NULL)
{
write=fwrite(p1,sizeof(pay),1,fp);
if(!write)
{
printf("\t\t\t\t无法写入文件!\n");
Sleep(2000); return;
}
p1=p1->next;
}
fclose(fp);
printf("\t\t\t\t 信息保存成功!\n");
Sleep(1000);
}
/*********************读取文件模块**********************/
pay *open()
{
short n=1,read;
fp=fopen("pay.txt","r");
if(fp==NULL)
{
printf("\t\t\t\t无法打开档案文件!\n");
return NULL;
}
if((p1=p2=(pay*)malloc(sizeof (pay)))==NULL)
{
printf("\t\t\t\t内存不足!\n");
return NULL;
}
read=fread(p1,sizeof(pay),1,fp);
if(!read)
{
printf("\t\t\t\t文件读取出错1!\n");
return NULL;
}
if(p1->next==NULL)head=p1;
else
{
do
{
if(n==1)head=p1;
else p2->next=p1;
n=2; p2=p1;
if((p1=(pay*)malloc(sizeof(pay)))==NULL)
{
printf("\t\t\t\t内存不足!\n");
return NULL;
}
read=fread(p1,sizeof(pay),1,fp);
if(!read)
{
printf("\t\t\t\t文件读取出错2!\n");
return NULL;
}
}
while(p1->next!=NULL);
p2->next=p1;
}
return head;
fclose(fp);
}
/********************加入记录模块**********************/
pay *jiaru()
{
int n=1,i;
zhuti();
head=open();
if(head==0){printf("\n\n\t\t\t\t 按任意键返回!\n");getch();return head;}
if(head->next==0)
{
system("cls");
p1=(pay*)malloc(sizeof(pay));
if(p1==NULL)
{
zhuti();
printf("\n\n\n\t\t\t\t内存不足,无法创建链表! ");
Sleep(2000);return head;
}
zhuti();
printf("\t\t\t\t第%d位职工信息\n\n\t\t\t请输入职工号(输入0退出!):\n\t\t\t \t\t",n++);
scanf("%d",&p1->gh);
if(p1->gh==0)
{
system("cls");
zhuti();printf("\n\n\n");
head=open();
system("cls");zhuti();
free(p1);
return head;
}
getchar();
printf("\t\t\t\t姓名:\n\t\t\t\t\t");
gets(&p1->name);
printf("\t\t\t\t所属部门:\n\t\t\t\t\t");
gets(&p1->bm);
printf("\t\t\t基本工资 奖励工资 补贴金额 扣款金额:\n\t\t\t\t");
scanf("%f %f %f %f",&p1->jb,&p1->jl,&p1->bt,&p1->kk);
printf("\n\t\t\t\t加入? 1.是 0.否\n\t\t\t\t\t");scanf("%d",&i);
if(!i)return head;
p1->next=NULL;head->next=p1;
baocun(head);
}
p3=head;
while(p3->next!=0)p3=p3->next;
while(1)
{
system("cls");
p1=(pay*)malloc(sizeof(pay));
if(p1==NULL)
{
zhuti();
printf("\n\n\n\n\t\t\t\t内存不足,无法创建链表! ");
Sleep(2000);return head;
}
zhuti();
printf("\t\t\t\t第%d位职工信息\n\n\t\t\t请输入职工号(输入0退出!):\n\t\t\t\t\t",n++);
scanf("%d",&p1->gh);
if(p1->gh==0)
{
system("cls");
zhuti();printf("\n\n\n");
head=open();
system("cls");zhuti();
free(p1);
return head;
}
getchar();
printf("\t\t\t\t姓名:\n\t\t\t\t\t");
gets(&p1->name);
printf("\t\t\t\t所属部门:\n\t\t\t\t\t");
gets(&p1->bm);
printf("\t\t\t基本工资 奖励工资 补贴金额 扣款金额:\n\t\t\t\t");
scanf("%f %f %f %f",&p1->jb,&p1->jl,&p1->bt,&p1->kk);
printf("\n\t\t\t\t加入? 1.是 0.否\n\t\t\t\t\t");scanf("%d",&i);
if(i!=1)jiaru();
p1->next=0;p3->next=p1;p3=p1;
baocun(head);
}
}
/************************显示记录***********************/
pay *xianshi()
{
int i,n=0;zhuti();head=open();p1=head;
if(head==0){printf("\n\n\t\t\t\t 按任意键返回!\n");getch();return head;}
printf("\t\t\t\t所有工资记录\n");
printf(" 姓 名 职工号 所 属 部 门 基本工资 奖励工资 补贴金额 扣款金额\n");
while(p1->next!=0)
{p1=p1->next;n++;
printf("%10s%5d %20s %9.2f %9.2f%9.2f%9.2f\n",p1->name,p1->gh,p1->bm,p1->jb,p1->jl,p1->bt,p1->kk);
}
if(n==1)printf("\n\n\t\t\t\t 0.返回主菜单\n\t\t\t\t\t");
if(n>1)printf("\n\n\t\t\t1.按职工号排序 2.按姓名排序 0.返回主菜单\n\t\t\t\t\t");
if(!n) printf("\n\n\t\t\t\t 无记录!\n\n\t\t\t\t 0.返回主菜单\n\t\t\t\t\t");
scanf("%d",&i);
if(i==1)head=gonghaopaixu();if(i==2)head=xingmingpaixu();
if(head!=0&&n>1)
{
printf("\t\t\t 顺序保存?1.是 0.否\n\t\t\t\t\t");scanf("%d",&i);
if(i==1)
{
system("cls");zhuti();
baocun(head);head=open();
}
}
return head;
}
/************************工号排序**********************/
pay *gonghaopaixu()
{
int j,k;char a[25];float i;
system("cls");
zhuti();
printf("\t\t\t 按职工号排序所有记录\n");
printf(" 姓 名 职工号 所 属 部 门 基本工资 奖励工资 补贴金额 扣款金额\n");
head=open();
for(p1=head->next;p1->next!=0;p1=p1->next)
for(p3=p1->next;;p3=p3->next)
{
if(p1->gh>p3->gh)
{
strcpy(a,p1->name);strcpy(p1->name,p3->name);strcpy(p3->name,a);
strcpy(a,p1->bm);strcpy(p1->bm,p3->bm);strcpy(p3->bm,a);
k=p1->gh;p1->gh=p3->gh;p3->gh=k;
i=p1->bt;p1->bt=p3->bt;p3->bt=i;
i=p1->jb;p1->jb=p3->jb;p3->jb=i;
i=p1->jl;p1->jl=p3->jl;p3->jl=i;
i=p1->kk;p1->kk=p3->kk;p3->kk=i;
}
if(p3->next==0)break;
}
p1=head;
while(p1->next!=0)
{p1=p1->next;
printf("%10s%5d %20s %9.2f %9.2f%9.2f%9.2f\n",p1->name,p1->gh,p1->bm,p1->jb,p1->jl,p1->bt,p1->kk);
}
printf("\n\n\t\t\t1.按姓名排序 0.返回主菜单\n\t\t\t\t\t");
scanf("%d",&j);
if(j==1)head=xingmingpaixu();
return head;
}
/************************姓名排序**********************/
pay *xingmingpaixu()
{
int j,k;char a[25];float i;
system("cls");
zhuti();
printf("\t\t\t 按姓名排序所有记录\n");
printf(" 姓 名 职工号 所 属 部 门 基本工资 奖励工资 补贴金额 扣款金额\n");
head=open();
for(p1=head->next;p1->next!=0;p1=p1->next)
for(p3=p1->next;;p3=p3->next)
{
if(strcmp(p1->name,p3->name)>0)
{
strcpy(a,p1->name);strcpy(p1->name,p3->name);strcpy(p3->name,a);
strcpy(a,p1->bm);strcpy(p1->bm,p3->bm);strcpy(p3->bm,a);
k=p1->gh;p1->gh=p3->gh;p3->gh=k;
i=p1->bt;p1->bt=p3->bt;p3->bt=i;
i=p1->jb;p1->jb=p3->jb;p3->jb=i;
i=p1->jl;p1->jl=p3->jl;p3->jl=i;
i=p1->kk;p1->kk=p3->kk;p3->kk=i;
}
if(p3->next==0)break;
}
p1=head;
while(p1->next!=0)
{p1=p1->next;
printf("%10s%5d %20s %9.2f %9.2f%9.2f%9.2f\n",p1->name,p1->gh,p1->bm,p1->jb,p1->jl,p1->bt,p1->kk);
} printf("\n\n\t\t\t1.按工号排序 0.返回主菜单\n\t\t\t\t\t");
scanf("%d",&j);
if(j==1)head=gonghaopaixu();
return head;
}
/***************************删除模块*******************/
pay *shanchu()
{
int i;
system("cls");zhuti();
printf("\t\t\t\t删除个人记录\n\n\n\n");
printf("\t\t\t1.按姓名删除 2.按职工号删除\n\n");
printf("\t\t\t\t0.返回主菜单\n\n\t\t\t\t\t");
scanf("%d",&i);
switch(i)
{
case 1: head=xingmingshanchu();break;
case 2: head=gonghaoshanchu(); break;
default: break;
}
return head;
}
/************************姓名删除模块*******************/
pay *xingmingshanchu()
{
short i,j,n=0;char a[12];
system("cls");
zhuti();
p2=p1=head=open();
if(head==0){printf("\n\n\t\t\t\t 按任意键返回!\n");getch();return head;}
getchar();
printf("\t\t\t\t请输入姓名:\n\t\t\t\t\t");
gets(a);
printf("\n n 姓 名 职工号 所 属 部 门 基本工资 奖励工资 补贴金额 扣款金额\n");
while(1)
{
if(p1->next==0)break;
p1=p1->next;
if(strcmp(p1->name,a)==0)
printf("%2d%10s%5d %20s %9.2f %9.2f%9.2f%9.2f\n",++n,p1->name,p1->gh,p1->bm,p1->jb,p1->jl,p1->bt,p1->kk);
if(p1->next==0)break;
}
if(!n){printf("\n\n\n\t\t\t\t 无记录!\n");}
else
{
if(n>1){printf("\n\t\t\t\t选择删除 n :\n\t\t\t\t\t");scanf("%d",&n);}
while(1)
{
p1=p2->next;
if(strcmp(p1->name,a)==0)n--;
if(!n)break;
p2=p2->next;
}
printf("\t\t\t\t删除?1.是 0.否\n\t\t\t\t\t");scanf("%d",&j);
if(j==1)
{
p2->next=p1->next;
baocun(head);head=open();
}
}
printf("\n\t\t\t1.按姓名删除 2.按职工号删除\n");
printf("\t\t\t\t0.返回主菜单\n\t\t\t\t\t");
scanf("%d",&i);
if(i==1)head=xingmingshanchu();
if(i==2)head=gonghaoshanchu();
return head;
}
/************************工号删除模块*******************/
pay *gonghaoshanchu()
{
short i,j,n=0;int a;
system("cls");
zhuti();
p2=p1=head=open();
if(head==0){printf("\n\n\t\t\t\t 按任意键返回!\n");getch();return head;}
printf("\t\t\t\t请输入职工号:\n\t\t\t\t\t");
scanf("%d",&a);
printf("\n n 姓 名 职工号 所 属 部 门 基本工资 奖励工资 补贴金额 扣款金额\n");
while(1)
{
if(p1->next==0)break;
p1=p1->next;
if(p1->gh==a)
printf("%2d%10s%5d %20s %9.2f %9.2f%9.2f%9.2f\n",++n,p1->name,p1->gh,p1->bm,p1->jb,p1->jl,p1->bt,p1->kk);
if(p1->next==0)break;
}
if(!n){printf("\n\n\n\t\t\t\t 无记录!\n");}
else
{
if(n>1){printf("\n\t\t\t\t选择删除 n :\n\t\t\t\t\t");scanf("%d",&n);}
while(1)
{
p1=p2->next;
if(p1->gh==a)n--;
if(!n)break;
p2=p2->next;
}
printf("\t\t\t\t删除?1.是 0.否\n\t\t\t\t\t");scanf("%d",&j);
if(j==1)
{
p2->next=p1->next;
baocun(head);head=open();
}
}
printf("\n\t\t\t1.按姓名删除 2.按职工号删除\n");
printf("\t\t\t\t0.返回主菜单\n\t\t\t\t\t");
scanf("%d",&i);
if(i==1)head=gonghaoshanchu();
if(i==2)head=xingmingshanchu();
return head;
}
/***************************修改模块*******************/
pay *xiugai()
{
int i;
system("cls");zhuti();
printf("\t\t\t\t修改个人记录\n\n\n\n");
printf("\t\t\t1.按姓名修改 2.按职工号修改\n\n");
printf("\t\t\t\t0.返回主菜单\n\n\t\t\t\t\t");
scanf("%d",&i);
switch(i)
{
case 1: head=xingmingxiugai();break;
case 2: head=gonghaoxiugai(); break;
default: break;
}
return head;
}
/**************************姓名修改模块*******************/
pay *xingmingxiugai()
{
short i,j,n=0;char a[12];
system("cls");
zhuti();
p2=p1=head=open();
if(head==0){printf("\n\n\t\t\t\t 按任意键返回!\n");getch();return head;}
getchar();
printf("\t\t\t\t请输入姓名:\n\t\t\t\t\t");
gets(a);
printf("\n n 姓 名 职工号 所 属 部 门 基本工资 奖励工资 补贴金额 扣款金额\n");
while(1)
{
if(p1->next==0)break;
p1=p1->next;
if(strcmp(p1->name,a)==0)
printf("%2d%10s%5d %20s %9.2f %9.2f%9.2f%9.2f\n",++n,p1->name,p1->gh,p1->bm,p1->jb,p1->jl,p1->bt,p1->kk);
if(p1->next==0)break;
}
if(!n){printf("\n\n\n\t\t\t\t 无记录!\n");}
else
{
if(n>1){printf("\n\t\t\t\t选择修改 n :\n\t\t\t\t\t");scanf("%d",&n);}
while(1)
{
p1=p2->next;
if(strcmp(p1->name,a)==0)n--;
if(!n)break;
p2=p2->next;
}
printf("\t\t\t\t修改?1.是 0.否\n\t\t\t\t\t");scanf("%d",&j);
if(j==1)
{
p1=zxgai(p1);
baocun(head);head=open();
}
}
printf("\n\t\t\t1.按姓名修改 2.按职工号修改\n");
printf("\t\t\t\t0.返回主菜单\n\t\t\t\t\t");
scanf("%d",&i);
if(i==1)head=xingmingxiugai();
if(i==2)head=gonghaoxiugai();
return head;
}
/***************************工号修改模块******************/
pay *gonghaoxiugai()
{
short i,j,n=0;int a;
system("cls");
zhuti();
p2=p1=head=open();
if(head==0){printf("\n\n\t\t\t\t 按任意键返回!\n");getch();return head;}
printf("\t\t\t\t请输入职工号:\n\t\t\t\t\t");
scanf("%d",&a);
printf("\n n 姓 名 职工号 所 属 部 门 基本工资 奖励工资 补贴金额 扣款金额\n");
while(1)
{
if(p1->next==0)break;
p1=p1->next;
if(p1->gh==a)
printf("%2d%10s%5d %20s %9.2f %9.2f%9.2f%9.2f\n",++n,p1->name,p1->gh,p1->bm,p1->jb,p1->jl,p1->bt,p1->kk);
if(p1->next==0)break;
}
if(!n){printf("\n\n\n\t\t\t\t 无记录!\n");}
else
{
if(n>1){printf("\n\t\t\t\t选择修改 n :\n\t\t\t\t\t");scanf("%d",&n);}
while(1)
{
p1=p2->next;
if(p1->gh==a)n--;
if(!n)break;
p2=p2->next;
}
printf("\t\t\t\t修改?1.是 0.否\n\t\t\t\t\t");scanf("%d",&j);
if(j==1)
{
p1=zxgai(p1);
baocun(head);head=open();
}
}
printf("\n\t\t\t1.按职工号修改 2.按姓名修改\n");
printf("\t\t\t\t0.返回主菜单\n\t\t\t\t\t");
scanf("%d",&i);
if(i==1)head=gonghaoxiugai();
if(i==2)head=xingmingxiugai();
return head;
}
/**************************执行修改模块*********************/
pay *zxgai(pay *p1)
{
char a[12],b[22];
system("cls");
zhuti();
printf("\n 姓 名 职工号 所 属 部 门 基本工资 奖励工资 补贴金额 扣款金额\n");
printf("%10s%5d %20s %9.2f %9.2f%9.2f%9.2f\n",p1->name,p1->gh,p1->bm,p1->jb,p1->jl,p1->bt,p1->kk);
getchar();
printf("\n\t\t\t\t姓名:\n\t\t\t\t\t");
gets(a);
printf("\t\t\t\t职工号:\n\t\t\t\t\t");
scanf("%d",&p1->gh);
getchar();
printf("\t\t\t\t所属部门:\n\t\t\t\t\t");
gets(b);
printf("\t\t\t基本工资 奖励工资 补贴金额 扣款金额:\n\t\t\t\t");
scanf("%f %f %f %f",&p1->jb,&p1->jl,&p1->bt,&p1->kk);
strcpy(&p1->name,a);strcpy(&p1->bm,b);
return p1;
}
/************************查询模块******************************/
void chaxun()
{
float x,y,z;short i,j,n=0;char a;
system("cls");zhuti();
p1=head=open();
if(head==0){printf("\n\n\t\t\t\t 按任意键返回!\n");getch();return;}
printf("\n\n\n\t\t\t\t *工资查询*\n\n\n");
printf("\t\t\t\t 1.基 本工 资\n");
printf("\t\t\t\t 2.奖 励工 资\n");
printf("\t\t\t\t 3.补 贴金 额\n");
printf("\t\t\t\t 4.扣 款金 额\n");
printf("\t\t\t\t 0.返回主菜单\n\n\n\n");
printf("\t\t\t\t 选择:");
scanf("%d",&i);
if(i==1||i==2||i==3||i==4)
{
system("cls");zhuti();
if(i==1) printf("\t\t\t\t基本工资查询:\n");
if(i==2) printf("\t\t\t\t奖励工资查询:\n");
if(i==3) printf("\t\t\t\t补贴公子查询:\n");
if(i==4) printf("\t\t\t\t扣款工资查询:\n");
printf("\t\t\t 输入金额查询范围a/b:\n\t \t\t\t");
scanf("%f%c%f",&x,&a,&y);
if(x>y){z=x;x=y;y=z;}
printf("\n 姓 名 职工号 所 属 部 门 基本工资 奖励工资 补贴金额 扣款金额\n");
while(1)
{
j=0;
p1=p1->next;
if(i==1)if(p1->jb>=x&&p1->jb<=y)j=1;
if(i==2)if(p1->jl>=x&&p1->jl<=y)j=1;
if(i==3)if(p1->bt>=x&&p1->bt<=y)j=1;
if(i==4)if(p1->kk>=x&&p1->kk<=y)j=1;
if(j)
{
n++;
printf("%10s%5d %20s %9.2f %9.2f%9.2f%9.2f\n",p1->name,p1->gh,p1->bm,p1->jb,p1->jl,p1->bt,p1->kk);
}
if(p1->next==0)break;
}
if(!n)printf("\n\n\n\t\t\t\t 无记录!\n\n\n");
printf("\n\t\t\t 1.继续查询 0.返回主菜单\n\t\t\t\t\t");
scanf("%d",&i);
if(i==1)chaxun();
}
}
温馨提示:内容为网友见解,仅供参考