⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 heji.cpp

📁 内有说明
💻 CPP
字号:
//heji 按总成绩驯化排序
#include "heji.h"

void SortByheji()
{
  int i, j, k;
  Student Tmps;
  Student s[SIZE];
  int recNumber = 0;
  char DataFile[40] = "";
  FILE *fp;

  //提示用户输入要进行排序的文件名
  printf("\nplease input the name of file where data is stored,end with enter key.\n");
  gets(DataFile);

  //提示用户输入要进行排序的文件名
  while (*DataFile == ('\0'))
  {
    printf("\nplease input the name of file where data is stored,end with enter key.\n");
    gets(DataFile);
  }

  //以读的方式打开文件,如文件不存在,提示错误
  fp = fopen(DataFile, "rb");
  if (fp == NULL)
  {
    printf("\nopen file %s fail !end with any key\n", DataFile);
    perror("open file fail");
    getch();
    exit(1);
  }

  //将文件中要排序的信息存入结构体数组
  while ((fread(&Tmps, sizeof(Student), 1, fp)))
  {
    s[recNumber].Number = Tmps.Number;
    strcpy(s[recNumber].Name, Tmps.Name);
    s[recNumber].chinesescore = Tmps.chinesescore;
    s[recNumber].mathscore = Tmps.mathscore;
    s[recNumber].heji = Tmps.heji;
    recNumber++;
  }
  fclose(fp);

  //如果文件中有记录,则将各条记录按总成绩值排序
  if (recNumber > 1)
  {
    //用选择排序法进行按总成绩排序
    for (i = 0;i < recNumber;i++)
    {
      k = i;
      for (j = i + 1;j < recNumber;j++)
      {
        if (s[k].heji < s[j].heji)
          k = j;
      }
      Tmps.Number = s[k].Number;
      strcpy(Tmps.Name, s[k].Name);
      Tmps.chinesescore = s[k].chinesescore;
      Tmps.mathscore = s[k].mathscore;
      Tmps.heji = s[k].heji;

      s[k].Number = s[i].Number;
      strcpy(s[k].Name, s[i].Name);
      s[k].chinesescore = s[i].chinesescore;
      s[k].mathscore = s[i].mathscore;
      s[k].heji = s[i].heji;

      s[i].Number = Tmps.Number;
      strcpy(s[i].Name, Tmps.Name);
      s[i].chinesescore = Tmps.chinesescore;
      s[i].mathscore = Tmps.mathscore;
      s[i].heji = Tmps.heji;
    }

    //将排序好的结构体记录写入文件
    fp = fopen(DataFile, "wb+");
    if (fp == NULL)
    {
      printf("\nset up file %s fail.end with any key.\n", DataFile);
      perror("open file fail");
      getch();
      exit(1);
    }
    for (i = 0;i < recNumber;i++)
    {
      if (fwrite(&s[i], sizeof(Student), 1, fp) != 1)
      {
        printf("\nwrite file %s !end with any key.\n", DataFile);
        perror("write file fail");
        getch();
        exit(1);
      }
    }
    fclose(fp);
  }

  //显示排序后的文件
  printf("the Student's score in file %s is as flow.\n", DataFile);
  fp = fopen(DataFile, "rb");
  if (fp == NULL)
  {
    printf("\nopen file %s fail !end with any key\n", DataFile);
    perror("open file fail");
    getch();
    exit(1);
  }

  printf("\nnumber\tname\tchinesescore\tmathscore\theji\n");
  while (fread(&Tmps, sizeof(Student), 1, fp))
  {
    printf("\n%ld\t%s\t%4.2f\t%4.2f\t%4.2f\n", Tmps.Number, Tmps.Name, Tmps.chinesescore, Tmps.mathscore, Tmps.heji);
  }
  fclose(fp);
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -