大神求教,这个程序的文件保存是不是有什么问题

include

include

include

include

include

#define N 3
#define M 2
struct goods
{
char num[10];
char name[30];
float money;
} sp;

struct huiyuan
{
char xm[20];
char kh[20];
float jf;
}vip;

struct gk
{

char num[10];
char name[30];
float money;
int amount;
}buy[N];

struct goods *sps;

int n;

char menu()
{
printf("\n************************************************");
printf("\n* ");
printf("\n*1、初始化商品信息 *");
printf("\n*2、初始化会员信息 *");
printf("\n*3、增加商品 *");
printf("\n*4、修改商品信息 *");
printf("\n*5、删除商品 *");
printf("\n*6、添加会员 *");
printf("\n*7、计算顾客所购买的商品价格总额、会员积分 *");
printf("\n*8、退出 *");
printf("\n
");
printf("\n
***********************************************");
printf("\n\n");
printf("请输入要执行的编号:");
return getche();
}

void srsp()
{
FILE*fp;
int i=0;
char a;
printf("\n**************初始化商品信息**************\n");
if((fp=fopen("sp.dat","w"))==NULL)
{
printf("\nCan not open file sp.dat.\n");
exit(1);
}
printf("Continut?Y/N:");
while(toupper(a=getche())=='Y')
{
printf("please input NO.%d name:",i+1);
scanf("%s",&sp.name);
printf("please input No.%d num:",i+1);
scanf("%s",&sp.num);
printf("please input No.%d money:",i+1);
scanf("%f",&sp.money);
//fprintf(fp,"%s,%s,%f\n",shangpin[i].name,shangpin[i].num,shangpin[i].money);
fwrite(&sp,sizeof(struct goods),1,fp);
i++;
printf("Continue?Y/N:");
}
fclose(fp);
}

void vipxx()
{
FILE fp;
int i=0;
char a;
printf("\n
*************初始化会员信息**************\n");
if((fp=fopen("vip.dat","w"))==NULL)

{
printf("\n can not open file vip.dat.\n");
exit(1);
}
printf("Continut?Y/N:");
while(toupper(a=getche())=='Y')
{
printf ("input No.%d xm:",i+1);
scanf ("%s",&vip.xm);
printf ("input No.%d kh:",i+1);
scanf ("%s",&vip.kh);
printf ("input No.%d jf:",i+1);
scanf("%f",&vip.jf);
fwrite(&vip,sizeof(struct huiyuan),1,fp);
i++;
printf("Continue?Y/N:");
}
fclose(fp);

}

void load()
{
FILE*fp;
if((fp=fopen("shangpin.txt","rb"))==NULL)
{
printf("the file is not found!\nplease append new data!\n");
return;
}
while(fread(&sp,sizeof(struct goods),1,fp)!=0)
{
n++;
}
sps=(struct goods *)malloc(sizeof(struct goods)*n);
rewind(fp);
fread(sps,sizeof(struct goods),n,fp);
printf("数据导入成功!\n");
fclose(fp);
}

void save()
{
FILE*fp;
int i=0;
if((fp=fopen("sp.dat","wb"))==NULL)
{
printf("the file is not found!\npleaseappend new data!\n");
return;
}
for(i=0;i<n;i++)
fwrite((sps+i),sizeof(struct goods),1,fp);
fclose(fp);
free(sps);
printf("数据已保存\n");
}

void add()
{
FILE fp;
printf("\n
*************增加商品**************\n");
if((fp=fopen("sp.dat","a"))==NULL)
{
printf("\n不能打开文件!");
exit(1);
}
printf("请输入要添加的商品的编号:\n");
scanf("%s",&sp.num);
printf("请输入要添加的商品的名称:\n");
scanf("%s",&sp.name);
printf("请输入要添加的商品的价格:\n");
scanf("%f",&sp.money);
fwrite(&sp,sizeof(struct goods),1,fp);
fclose(fp);
}

void zjhy()
{
FILE fp;
printf("\n
*************增加会员**************\n");
if ((fp=fopen ("vip.dat ","a"))==NULL)
{
printf ("\n can not open file vip .dat.\n");
exit (1);
}
printf ("please input other vip's xm:");
scanf("%s",&vip.xm);
printf ("please input other vip's kh:");
scanf("%s",&vip.kh);
printf ("please input other vip's jf:");
scanf("%s",&vip.jf);
fwrite(&vip,sizeof(struct huiyuan),1,fp);
fclose (fp);
}

void xg()
{
char num[10];
int i;
printf("\n**************修改商品信息**************\n");
printf("\n请输入要修改的商品编号:");
scanf("%s",&num);
for(i=0;i if(strcmp((sps+i)->num,num)==0)
break;
if(i>=n)
{
printf("\n文件中没有该商品的信息,无法进行修改操作!\n");
return ;
}

else
{
printf("\n确定要修改吗(y\n)?");
if(toupper(getche())=='Y')
{
printf("\n请输入新信息:\n");
printf("编号:");
scanf("%s",(sps+i)->num);
printf("名称:");
scanf("%s",(sps+i)->name);
printf("价格:");
scanf("%f",(sps+i)->money);

}
}
}

void sc()
{
char bh[20];
FILE fp;
int i,j;
printf("\n
*************删除商品**************\n");
printf("the file to delete:");
scanf("%s",bh);
for(i=0;i if(strcmp((sps+i)->num,bh)==0)
break;
if(i>=n)

{
printf("指定商品不存在!");
return;
}

else
{
/* if ((fp=fopen("sp.dat ","w"))==NULL)
{
printf ("\n can not open file vip .dat.\n");
exit (1);
}
for(j=0;j<n;j++)
{
if(j==i)
continue;
fwrite((sps+i),sizeof(struct goods),1,fp);

}
fclose(fp);*/

for(j=i;j<n-1;j++)
   *(sps+i)=*(sps+i+1);
n--;    
printf("商品删除成功!");

}

}

void gkbuy()
{
int i=0,j,k,s,l; FILE fp;
float n,total=0,shifu;
char numb[10];
char bh[20];
printf("\n
*************顾客结账、会员积分**************\n");
printf("请输入累计所购买的商品种类:\n");
scanf("%d",&j);
for(k=1;k<=j;k++)
{
printf("请输入所购买商品的编号:\n");
scanf("%s",&numb);

  if((fp=fopen("sp.dat","r"))==NULL)
  {
    printf("\n不能打开文件!");
    exit(1);
  }
  while(!feof(fp))
  {
      fread(&sp,sizeof(struct goods),1,fp);
      if(strcmp(sp.num,numb)==0)
      {
            strcpy(buy[i].num,sp.num);
            strcpy(buy[i].name,sp.name);
            buy[i].money=sp.money;
            printf("请输入购买该商品的数量:\n");
            scanf("%d",&buy[i].amount);
            printf("商品序号  商品名  商品售价  数量\n");
            printf("%s\t%s\t%f\t%d\n",buy[i].num,buy[i].name,buy[i].money,buy[i].amount);

      }
      else
          printf("没找到指定商品!\n");
  } 
}
printf("\n");
for(s=0;s<j;s++)
{
    n=buy[s].money*buy[s].amount;
    total+=n;
}
   printf("应付金额:%f\n",total);
   printf("实付金额:\n");
   scanf("%f",&shifu);
   printf("找零:%f\n",shifu-total);
   printf("\n");
   printf("请输入会员卡号:\n");
   scanf("%s",&bh);
   if(bh==0)
       printf("该顾客不是会员。\n");
   else
   {
      for (l=0;l<M;l++)
      {
      /*    if(strcmp(vip.kh,bh)==0)
            {
              vip[l].jf+=total;
              printf("该会员目前积分累计有:%f\n",vip[l].jf);
            }
      */
      }
   }

}

void main()
{
char menunum;
while ((menunum=menu())!='8')
switch(menunum)
{
case'1': srsp();break;
case'2': vipxx();break;
case'3': add();break;
case'4': load();xg();save();break;
case'5': load();sc();save();break;
case'6': zjhy();break;

case'7': gkbuy();save();break;
}

}

运行下就知道了。