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

📄 modnum.cpp

📁 内有说明
💻 CPP
字号:
//modnum  修改学生信息
#include "modnum.h"

void ModifyByNumber()
{
  int i;
  long modnum;

  //输入各项修改后信息
  long Number;
  char Name[20];
  float chinesescore;
  float mathscore;
  float heji;
  Student Tmps;
  Student s[SIZE];
  int recNumber;
  char DataFile[40] = "", next;

  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);
  }

begin:
  //以二进制读的方式发开文件
  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("please input the employee'seatnum which you will modify:");
  scanf("%ld", &modnum);
  printf("the Student you will modify is:%ld\n", modnum);

  //输入要修改记录的各项内容值
  Number = modnum;
  printf("name=");
  scanf("%s", Name);

  printf("chinesescore:");
  scanf("%f", &chinesescore);

  printf("mathscore:");
  scanf("%f", &mathscore);

  //用公式自动计算学生总分
  heji = chinesescore + mathscore;

  //将文件中要修改的信息存入结构体数组
  //与要修改的学生学号相匹配的项不写入数组,否则就根据教师输入的各项修改内容重新赋值,即修改,并写入数组
  recNumber = 0;
  while ((fread(&Tmps, sizeof(Student), 1, fp)))
  {
    if (Tmps.Number != modnum)
    {
      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++;
    }

    else
    {
      s[recNumber].Number = Number;
      strcpy(s[recNumber].Name, Name);
      s[recNumber].chinesescore = chinesescore;
      s[recNumber].mathscore = mathscore;
      s[recNumber].heji = heji;
      recNumber++;
    }
  }
  fclose(fp);

  //===将修改后的剩余结构体记录写入文件=====
  fp = fopen(DataFile, "wb+");
  if (fp == NULL)
  {
    printf("\nset up file %s fail ! end with any key.\n", DataFile);
    perror("set up fail");
    getch();
    exit(1);
  }

  for (i = 0;i < recNumber;i++)
  {
    if (fwrite(&s[i], sizeof(Student), 1, fp) != 1)
    {
      printf("\nwrite file %s fail! end any key", DataFile);
      perror("write file fail");
      getch();
      exit(1);
    }
  }
  fclose(fp);

  //显示删除后的文件
  fp = fopen(DataFile, "rb");
  if (fp == NULL)
  {
    printf("\nopen file %s fail! end any key", DataFile);
    perror("open file fail");
    getch();
    exit(1);
  }

  printf("\nthe file after delete is:\n");
  printf("\nNumber\tName\tchinesescore\tmathscore\tzongfen\n");
  while (fread(&Tmps, sizeof(Student), 1, fp))
  {
    if (Tmps.Number != 0)
      printf("\n%ld\t%s\t%4.1f\t%4.1f\t%4.1f\t\n", Tmps.Number, Tmps.Name, Tmps.chinesescore, Tmps.mathscore, Tmps.heji);
  }
  fclose(fp);

  printf("\ngo on ?(y/n)");
  next = getche();
  putchar('\n');
  if (next == 'y' || next == 'Y')
    goto begin;
}

⌨️ 快捷键说明

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