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

家庭/个人应用

开发平台:

C/C++

  1. /* modnum.c :修改家庭成员收支信息记录        */
  2. #include "stdio.h"
  3. void ModifyByNumber()
  4.  {
  5.     int i,j,k;
  6.     long modnum;/*存储家长输入的要修改的家庭成员序号*/
  7.     /*输入各项修改后信息*/
  8.     long Number;
  9.     char Name[20];
  10.     float in;
  11.     float out;
  12.     float sum;
  13.     money TmpS;   /*定义进行操作时的临时结构体变量*/
  14.     money s[SIZE];/*SIZE,在shead.h头文件中定义的常量,值为100  */
  15.     int recNumber;
  16.     char DataFile[40] = "",next;
  17.     /*DataFile存储家庭成员收支信息信息的文件名,next为是否进行下一次删除操作的选项*/
  18.     FILE *fp;/*====fp指针指向存储数据的文件名====*/
  19.     /*提示家长输入要进行修改记录的文件名*/
  20.     printf("nplease input the name of file where data is stored,end with enter key.n");
  21.     gets(DataFile);
  22.     /*提示家长输入要进行修改记录的文件名*/
  23.     while(*DataFile == (''))
  24.     {
  25.         printf("nplease input the name of file where data is stored,end with enter key.n");
  26.         gets(DataFile);
  27.     }
  28. begin:
  29.     /*以读的方式打开文件,如文件不存在,提示错误*/
  30.     fp=fopen(DataFile,"rb");
  31.     if (fp == NULL)
  32.     {
  33.         printf("nOpen file %s fail!End with any keyn",DataFile);
  34.         perror("Open file fail");
  35.         getch();
  36.         exit(1);
  37.     }
  38.     printf("please input the Employee'seatnum which you will modify:");
  39.     scanf("%ld",&modnum);
  40.     printf("the money you will delete is:%ldn",modnum);
  41.     /*输入要修改记录的各项内容值*/
  42.     Number=modnum;
  43.     printf("name=");
  44.     scanf("%s",Name);
  45.     printf("in=");
  46.     scanf("%f",&in);
  47.     printf("out=");
  48.     scanf("%f",&out);
  49.     /*用公式自动计算家庭成员财务合计*/
  50.     sum=in-out;
  51.    /*将文件中要修改的信息存入结构体数组*/
  52.    recNumber=0;
  53.    /*循环将文件数据读入结构体数组,
  54.    如文件中的数据家庭成员号和要修改的家庭成员号不符,则原样写入数组,
  55.    如文件中数据的家庭成员号和要修改家庭成员号匹配,
  56.    则根据家长输入的各项修改内容重新赋值,即修改,并写入数组*/
  57.     while((fread(&TmpS,sizeof(money),1,fp)) != (int)NULL)
  58.     {
  59.         if(TmpS.Number!=modnum)
  60.             {
  61.             s[recNumber].Number = TmpS.Number;
  62.             strcpy(s[recNumber].Name, TmpS.Name);
  63.             s[recNumber].in = TmpS.in;
  64.             s[recNumber].out = TmpS.out;
  65.             s[recNumber].sum = TmpS.sum;
  66.             recNumber++;
  67.             }
  68.         else
  69.             {
  70.             s[recNumber].Number = Number;
  71.             strcpy(s[recNumber].Name, Name);
  72.             s[recNumber].in = in;
  73.             s[recNumber].out = out;
  74.             s[recNumber].sum = sum;
  75.             recNumber++;
  76.             }
  77.     }
  78.     fclose(fp);
  79.    /*将修改后的结构体数组记录写入文件*/
  80.         fp=fopen(DataFile,"wb+");
  81.         if (fp == NULL)
  82.         {
  83.             printf("nSet up file %sfail !end with anykey.n",DataFile);
  84.             perror("Set up fail");
  85.             getch();
  86.             exit(1);
  87.         }
  88.         for(i=0; i<recNumber; i++)
  89.         {
  90.             if(fwrite(&s[i],sizeof(money),1,fp)!=1)
  91.             {
  92.                 printf("nWrite file %s fail!end with anykey.n",DataFile);
  93.                 perror("Write file fail!");
  94.                     getch();
  95.                     exit(1);
  96.             }
  97.         }
  98.         fclose(fp);
  99.      /*显示修改后的文件*/
  100.     fp=fopen(DataFile,"rb");
  101.     if (fp == NULL)
  102.     {
  103.         printf("nOpen file%sfail!End with any key n",DataFile);
  104.         perror("Open file fail");
  105.         getch();
  106.         exit(1);
  107.     }
  108.     printf("the file after modify is:n");
  109.     printf("nNumber tNametintouttsumn");
  110.     while(fread(&TmpS,sizeof(money),1,fp) != (int)NULL)
  111.     {
  112.         if(TmpS.Number!=0)
  113.         printf("n%ldt%st%4.1ft%4.1ft%4.1fn",TmpS.Number,TmpS.Name,TmpS.in,TmpS.out,TmpS.sum);
  114.     }
  115.     fclose(fp);
  116. /*提示是否进行下一次修改*/
  117.     printf("nGo on ?(y/n)");
  118.     next=getche();
  119.     putchar('n');
  120.     if ( next =='y' || next =='Y') goto begin;
  121.  }