【求助】c语言工资管理系统问题
代码如下,保存数据的函数是不是有错,每次关闭程序,再进去 之前输入的工资数据就没有了,求助大神。谢谢#include <stdio.h>
#include <stdlib.h>
void menu();
void menu1();
void input(int *n,struct information *p);
void save(int *n,struct information *p);
void calcu(int *n,struct information *p);
void write(int *n,struct information *p);
void find(int *n,struct information *p);
void load();
void view(int *n,struct information *p);
struct information
{
long num;
float base;
float fact;
float jin;
float gin;
float bin;
float fin;
float jbin;
float save;
float hin;
}a[1000];
main()
{
struct information a[1000];
int amd,n;
menu();
scanf("%d",&amd);
while(amd!=0)
{
if(amd==1)
{
system("cls");
input(&n,a);
system("cls");
menu();
}
if(amd==2)
{
system("cls");
calcu(&n,a);
system("cls");
menu();
}
if(amd==3)
{
system("cls");
write(&n,a);
system("cls");
menu();
}
if(amd==4)
{
system("cls");
find(&n,a);
system("cls");
menu();
}
if(amd==5)
{
system("cls");
view(&n,a);
system("cls");
menu();
}
scanf("%d",&amd);
}
}
void menu()
{
printf("************************************主菜单************************************\n\n\n\n");
printf(" 1.添加职工工资信息\t");
printf(" 2.计算个人所得税\n\n");
printf(" 3.修改工人记录\t");
printf(" 4.查询工资信息\n\n");
printf(" 5.统计工资信息\t");
printf(" 6.删除个人工资信息\n\n\n");
printf("******************************************************************************\n");
printf(" \n\n\n输入序号选择功能\n");
}
void menu1()
{
printf("按任意数字返回主菜单\n");
}
void input(int *n,struct information *p)
{
int i,amd,j,k,l;
l=*n;
printf("输入职工人数");
scanf("%d",n);
for(i=0;i<*n;i++)
{
printf("请按职工工号 基本工资 实发工资 津贴 岗贴 补贴 房帖 交通补贴 储蓄 汇费的顺序输入数据");
scanf("%ld,%f,%f,%f,%f,%f,%f,%f,%f,%f",&p->num,&p->base,&p->fact,&p->jin,&p->gin,&p->bin,&p->fin,&p->jbin,&p->save,&p->hin);
}
for(i=0;i<*n-1;i++)
{
for(j=0;j<*n-1-i;j++)
{
if(p[j].base<p[j+1].base)
{
k=p[j].base;
p[j].base=p[j+1].base;
p[j+1].base=k;
}
}
}
save(&l,a);
menu1();
scanf("%d",&amd);
}
void save(int *n,struct information *p)
{
int i;
FILE*fp;
if ((fp=fopen("gongzi_list","wb"))==NULL)
{
printf ("cannot open file\n");
exit(0);
}
for (i=0;i<*n;i++)
if (fwrite(&a[i],sizeof(struct information),1,fp)!=1)
printf("file write error\n");
fclose(fp);
}
void calcu(int *n,struct information *p)
{
float tax[1000]={0};
int i=0,j,amd;
while(i<*n)
{
if(p->base-1000<0)
{
tax[i]=0;
}
else if(p->base-1000>=0&&p->base-5000<=0)
{
tax[i]=(p->base-1000)/100;
}
else
{
tax[i]=(p->base-5000)/100*3+3000/100;
}
i++;
}
j=0;
while(j<*n)
{
printf("%4ld %f\n",p[j].num,tax[j]);
j++;
}
menu1();
scanf("%d",&amd);
}
void write(int *n,struct information *p)
{
long input;
int i,amd;
printf("请输入工号");
here:
scanf("%ld",&input);
for(i=0;i<*n;i++)
{
if(p->num==input)
{
printf("修改信息,把新信息按职工工号 基本工资 实发工资 津贴 岗贴 补贴 房帖 交通补贴 储蓄 汇费的顺序输入");
scanf("%ld,%f,%f,%f,%f,%f,%f,%f,%f,%f",&p->num,&p->base,&p->fact,&p->jin,&p->gin,&p->bin,&p->fin,&p->jbin,&p->save,&p->hin);
}
else
{
printf("无此工号,请重新输入");
goto here;
}
}
menu1();
scanf("%d",&amd);
}
void find(int *n,struct information *p)
{
long input;
int i,j,amd;
printf("输入要查询的工号");
here:
scanf("%ld",&input);
for(i=0;i<*n;i++)
{
load();
if(input==p->num)
{
printf("工号:%ld\n%基本工资:%f\n实发工资:%f\n津贴:%f\n岗贴:%f\n补贴:%f\n房帖:%f\n交通补贴:%f\n储蓄:%f\n汇费:%f\n",p->num,p->base,p->fact,p->jin,p->gin,p->bin,p->fin,p->jbin,p->save,p->hin);
}
else
{
printf("无此工号,请重新输入");
goto here;
}
}
menu1();
scanf("%d",&amd);
}
void load()
{
int i;
FILE*fp;
if((fp=fopen("gongzi_list","rb"))==NULL)
{
printf ("cannot open file\n");
exit(0);
}
else
{
do
{
i=0;
fread(&a[i],sizeof(struct information),1,fp);
i++;
}
while(feof(fp)==0);
}
fclose(fp);
}
void view(int *n,struct information *p)
{
int i,amd;
load();
printf("工号 基本工资 实发工资 津贴 岗贴 补贴 房帖 交通补贴 储蓄 汇费\n");
for(i=0;i<*n;i++)
{
printf("\n%ld %5f %5f %5f %5f %5f %5f %5f %5f %5f ",p->num,p->base,p->fact,p->jin,p->gin,p->bin,p->fin,p->jbin,p->save,p->hin);
printf("\n");
}
menu1();
scanf("%d",&amd);
}
[此贴子已经被作者于2015-12-13 21:54编辑过]