delete.c
上传用户:tamljx
上传日期:2021-06-04
资源大小:60k
文件大小:3k
源码类别:

家庭/个人应用

开发平台:

C/C++

  1. /*delete.c:删除家庭成员财务信息记录*/
  2. #include "stdio.h"
  3. void DelRecord()
  4.  {
  5.     int i,j,k;
  6.     long delnum;      /*存放家长输入的要删除家庭成员序号*/
  7.     money TmpS;    /*定义进行操作时的临时结构体变量*/
  8.     money s[SIZE];/*SIZE,在shead.h头文件中定义的常量,值为100  */
  9.     int recNumber;    /*原文件中的记录数*/
  10.     char DataFile[40] = "",next;
  11.     /*DataFile存储家庭成员财务收支信息的文件名,next为是否进行下一次删除操作的选项*/
  12.     FILE *fp;/*fp指针指向存储数据的文件名*/
  13.     printf("nplease input the name of file where data is stored,end with enter key.n");
  14.     gets(DataFile);
  15.     /*提示家长输入要进行删除的文件名*/
  16.     while(*DataFile == (''))
  17.     {
  18.         printf("nplease input the name of file where data is stored,end with enter key.n");
  19.         gets(DataFile);
  20.     }
  21. begin:
  22.     /*以二进制读的方式打开文件*/
  23.     fp=fopen(DataFile,"rb");
  24.     if (fp == NULL)
  25.     {
  26.         printf("nOpen file %s fail!End with any keyn",DataFile);
  27.         perror("Open file fail");
  28.         getch();
  29.         exit(1);
  30.     }
  31.     /*输入要删除的家庭成员序号*/
  32.     printf("please input the record's seatnum which you will delete:");
  33.     scanf("%ld",&delnum);
  34.     printf("the record you will delete is:%ldn",delnum);
  35.    /*将文件中信息存入结构体数组*/
  36.    /*与要删除的家庭成员序号相匹配的项不写入数组,
  37.    循环后数组中即为去掉了要删除记录后的剩余记录*/
  38.    recNumber=0;
  39.     while((fread(&TmpS,sizeof(money),1,fp)) != (int)NULL)
  40.     {
  41.         if(TmpS.Number!=delnum)
  42.             {
  43.             s[recNumber].Number = TmpS.Number;
  44.             strcpy(s[recNumber].Name, TmpS.Name);
  45.             s[recNumber].in = TmpS.in;
  46.             s[recNumber].out = TmpS.out;
  47.             s[recNumber].sum = TmpS.sum;
  48.             recNumber++;
  49.             }
  50.     }
  51.     fclose(fp);
  52.         /*====将删除后的剩余结构体记录写入文件====*/
  53.         fp=fopen(DataFile,"wb+");
  54.         if (fp == NULL)
  55.         {
  56.             printf("nSet up file %sfail !end with anykey.n",DataFile);
  57.             perror("Set up fail");
  58.             getch();
  59.             exit(1);
  60.         }
  61.         for(i=0; i<recNumber; i++)
  62.         {
  63.             if(fwrite(&s[i],sizeof(money),1,fp)!=1)
  64.             {
  65.                 printf("nWrite file %s fail!end with anykey.n",DataFile);
  66.                 perror("Write file fail!");
  67.                     getch();
  68.                     exit(1);
  69.             }
  70.         }
  71.         fclose(fp);
  72. /*====显示删除财务信息记录后的文件====*/
  73.     fp=fopen(DataFile,"rb");
  74.     if (fp == NULL)
  75.     {
  76.         printf("nOpen file%sfail!End with any key n",DataFile);
  77.         perror("Open file fail");
  78.         getch();
  79.         exit(1);
  80.     }
  81.     printf("the file after delete is:n");
  82.     printf("nNumber tNametintouttsumn");
  83.     while(fread(&TmpS,sizeof(money),1,fp) != (int)NULL)
  84.     {
  85.         if(TmpS.Number!=0)
  86.         printf("n%ldt%st%4.1ft%4.1ft%4.1fn",TmpS.Number,TmpS.Name,TmpS.in,TmpS.out,TmpS.sum);
  87.     }
  88.     fclose(fp);
  89.     /*询问是否继续删除*/
  90.     printf("nGo on ?(y/n)");
  91.     next=getche();
  92.     putchar('n');
  93.     if ( next =='y' || next =='Y') goto begin;
  94. }