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

家庭/个人应用

开发平台:

C/C++

  1.  /* ssum.c:按财务合计项排序浏览*/
  2. #include "stdio.h"
  3. void SortBySum()
  4.  {
  5.     int i,j,k;
  6.     money TmpS;   /*定义进行操作时的临时结构体变量*/
  7.     money s[SIZE];/*SIZE,在common.h头文件中定义的常量,值为100  */
  8.     int recNumber = 0;
  9.     char DataFile[40] = ""; /*DataFile存储财务收支信息的文件名*/
  10.     FILE *fp;/*====fp指针指向存储数据的文件名====*/
  11.     /*提示用户输入要进行排序浏览的文件名*/
  12.     printf("nplease input the name of file where data is stored,end with enter key.n");
  13.     gets(DataFile);
  14.     /*提示用户输入要进行排序的文件名*/
  15.     while(*DataFile == (''))
  16.     {
  17.         printf("nplease input the name of file where data is stored,end with enter key.n");
  18.         gets(DataFile);
  19.     }
  20.     /*以读的方式打开文件,如文件不存在,提示错误*/
  21.     fp=fopen(DataFile,"rb");
  22.     if (fp == NULL)
  23.     {
  24.         printf("nOpen file %s fail!End with any keyn",DataFile);
  25.         perror("Open file fail");
  26.         getch();
  27.         exit(1);
  28.     }
  29.    /*将文件中要排序的信息存入结构体数组*/
  30.     while((fread(&TmpS,sizeof(money),1,fp)) != (int)NULL)
  31.     {
  32.         s[recNumber].Number = TmpS.Number;
  33.         strcpy(s[recNumber].Name, TmpS.Name);
  34.         s[recNumber].in = TmpS.in;
  35.         s[recNumber].out = TmpS.out;
  36.         s[recNumber].sum=TmpS.sum;
  37.         recNumber++;
  38.     }
  39.     fclose(fp);
  40.     /*====如果文件中有记录,则将各条记录按合计值排序===*/
  41.     if(recNumber>1)
  42.     {
  43.         /*====用选择排序法进行按合计的排序====*/
  44.         for(i=0;i<recNumber-1;i++)
  45.         {
  46.             k = i;
  47.             for(j=i+1;j<recNumber;j++)
  48.             {
  49.                 if(s[k].sum<s[j].sum) k = j;
  50.             }
  51.             TmpS.Number = s[k].Number;
  52.             strcpy(TmpS.Name,s[k].Name);
  53.             TmpS.in = s[k].in;
  54.             TmpS.out = s[k].out;
  55.             TmpS.sum = s[k].sum;
  56.             s[k].Number = s[i].Number;
  57.             strcpy(s[k].Name,s[i].Name);
  58.             s[k].in = s[i].in;
  59.             s[k].out = s[i].out;
  60.             s[k].sum = s[i].sum;
  61.             s[i].Number = TmpS.Number;
  62.             strcpy(s[i].Name,TmpS.Name);
  63.             s[i].in = TmpS.in;
  64.             s[i].out = TmpS.out;
  65.             s[i].sum = TmpS.sum;
  66.         }
  67.         /*====将排序好的结构体记录写入文件====*/
  68.         fp=fopen(DataFile,"wb+");
  69.         if (fp == NULL)
  70.         {
  71.             printf("nSet up file %sfail !end with anykey.n",DataFile);
  72.             perror("Set up fail");
  73.             getch();
  74.             exit(1);
  75.         }
  76.         for(i=0; i<recNumber; i++)
  77.         {
  78.             if(fwrite(&s[i],sizeof(money),1,fp)!=1)
  79.             {
  80.                 printf("nWrite file %s fail!end with anykey.n",DataFile);
  81.                 perror("Write file fail!");
  82.                     getch();
  83.                     exit(1);
  84.             }
  85.         }
  86.         fclose(fp);
  87.     }
  88.      /*====显示排序后的文件====*/
  89.     printf("the finacial info in file %s is as flow:.n",DataFile);
  90.     fp=fopen(DataFile,"rb");
  91.     if (fp == NULL)
  92.     {
  93.         printf("nOpen file%sfail!End with any key n",DataFile);
  94.         perror("Open file fail");
  95.         getch();
  96.         exit(1);
  97.     }
  98.     printf("nNumbertNametintoutttsumn");
  99.     while(fread(&TmpS,sizeof(money),1,fp) != (int)NULL)
  100.     {
  101.         printf("n%ldt%st%4.1ft%4.1ft%4.1fn",TmpS.Number,TmpS.Name,TmpS.in,TmpS.out,TmpS.sum);
  102.     }
  103.     fclose(fp);
  104. }