SmallCatt 发表于 2020-11-9 17:29:52

想知道为什么第三个分数和总分没办法输出

#include<stdio.h>
#include<stdlib.h>
#define MAX 5000
struct StudentInformation                                                //定义学生结构体
{
        char Student_ID;
        char Name;
        float score1;
        float score2;
        float score3;
        float score4;
        float score5;
        float sumsc;                                                      //学生成绩总和
        float average;                                                   //学生成绩平均分
};


struct StudentInformation students;                              //定义一个学生数组及其最大数量
int num=0;                                                            //定义一个全局变量


float Ave(struct StudentInformation stu)                               //求分数平均值的函数               
{
        return(stu.score1+stu.score2+stu.score3+stu.score4+stu.score5)/5;
}


float sum(struct StudentInformation stu)                               //求分数总和的函数
{
    return(stu.score1+stu.score2+stu.score3+stu.score4+stu.score5);
}




int searchName(char name[])                                             //通过名字搜索的函数
{
        int i;
        for(i=0;i<num;i++)                                                //遍历数组
        {
                if(strcmp(students.Name,name)==0)                            //通过字符串比较函数判断是否有这个人
                {
                        return i;
                                                }
                                                              
       }
       return -1;                                                         //该函数失败
       
}


int searchStudent_ID(char id[])                                       // 通过学号搜索,基本与上一个函数功能一致
{
        int j;
        for(j=0;j<num;j++)
        {
                if(strcmp(students.Student_ID,id)==0)
                {
                        return j;
                }
        }
        return -1;
}




void Mod_message(int p)                                                 //定义该函数便于查看学生的信息
{
        printf("%20s%20s%20s%20s%20s%20s%20s%20s%20s\n","学号","姓名","成绩","成绩","成绩","成绩","成绩","总成绩","平均成绩");
        printf("************************************************************************************************************************\n");
        printf("%20s%20s%20.2f%20.2f%20.2f%20.2f%20.2f%20.2f%20.2f\n",students.Student_ID,students.Name,students.score1,
        students.score2,students.score3,students.score4,students.score5,
        students.sumsc,students.average);
       
}


void Studentsearch_id_score()                           //根据学生学号进行成绩查询的函数
{
        while(1)
        {
          char id;
          int p;
          printf("请输入查询学生的学号");
          scanf("%s",&id);
          getchar();
          p=searchStudent_ID(id);
          if(p==-1)
          {
                  printf("请检查你输入的学号是否有误\n");
                }
                printf("你要查询的学生的全部信息为:\n");
          Mod_message(p);
          printf("是否继续查询新的学生,是请输入y,否请输入n");
                if(getchar()=='n')
                {
                        break;
                }
        }
}



void Studentsearch_name_score()                           //根据学生姓名进行成绩查询的函数
{
        while(1)
        {
          char name;
          int p;
          printf("请输入查询学生的姓名");
          scanf("%s",&name);
          getchar();
          p=searchName(name);
          if(p==-1)
          {
                  printf("请检查你输入的姓名是否有误\n");
                }
                printf("你要查询的学生的全部信息为:\n");
          Mod_message(p);
          printf("是否继续查询新的学生,是请输入y,否请输入n");
                if(getchar()=='n')
                {
                        break;
                }
        }
}




void StudentInformation_Inesrt()                                 //插入一个新学生信息的函数
{
        while(1){
                printf("请输入要插入学生的学号:");
                scanf("%s",&students.Student_ID);
                getchar();
               
                printf("请输入要插入学生的姓名:");
                scanf("%s",&students.Name);
                getchar();
               
                printf("请输入要插入学生的第一科成绩:");
                scanf("%f",&students.score1);
                getchar();
               
                printf("请输入要插入学生的第二科成绩:");
                scanf("%f",&students.score2);
                getchar();
               
                printf("请输入要插入学生的第三科成绩:");
                scanf("%s",&students.score3);
                getchar();
               
                printf("请输入要插入学生的第四科成绩:");
                scanf("%f",&students.score4);
                getchar();
               
                printf("请输入要插入学生的第五科成绩:");
                scanf("%f",&students.score5);
                getchar();
               
                students.average=Ave(students);
                num++;                                                   //插入了一个学生 全局变量加1
               
                printf("是否继续插入新的学生,是请输入y,否请输入n");
                if(getchar()=='n')
                {
                        break;
                }
        }
}








void Student_Mod()                                                    //学生信息修改的函数
{
        while(1)
        {
        char id;
        int p;
        printf("请输入要修改信息的学生的学号:");
        scanf("%s",&id);
        getchar();
        p=searchStudent_ID(id);
        if(p==-1)
        {
                printf("请检查你输入的学号是否有误\n");
        }
        else
        {
        printf("你要修改的学生的全部信息为:\n");
        Mod_message(p);
        printf("请输入你要修改的信息\n");
        printf("请输入要修改学生的学号:");
        scanf("%s",&students.Student_ID);
        getchar();
               
        printf("请输入要修改学生的姓名:");
        scanf("%s",&students.Name);
        getchar();
               
        printf("请输入要修改学生的第一科成绩:");
        scanf("%f",&students.score1);
        getchar();
               
        printf("请输入要修改学生的第二科成绩:");
        scanf("%f",&students.score2);
        getchar();
               
        printf("请输入要修改学生的第三科成绩:");
        scanf("%s",&students.score3);
        getchar();
               
        printf("请输入要修改学生的第四科成绩:");
        scanf("%f",&students.score4);
        getchar();
               
        printf("请输入要修改学生的第五科成绩:");
        scanf("%f",&students.score5);
        getchar();
               
        students.average=Ave(students);
        }

               
        printf("该学生的新信息已保存,是否继续进行修改,是请输入y,否请输入n");
        if(getchar()=='n')
        {
                        break;
                }
       
        }
}



void Studentid_Delete()                                                            //按学生学号查找删除学生信息的函数
{
        while(1)
        {
                char id;
                int p;
                int i;
                printf("请输入要删除信息的学生的学号");
                scanf("%s",&id);
                getchar();
                p=searchStudent_ID(id);
                if(p==-1)
                {
                        printf("请检查你输入的学号是否有误\n");
                }
                printf("你要删除的学生的全部信息为:\n");
                Mod_message(p);
                printf("你真的要删除该学生的信息吗?删除了无法复原的哦,确认删除请输入y,否请输入n");
                if(getchar()=='y')
                {
                        for(i=p;i<num-1;i++)
                        {
                                students=students;                                 //把后面的学生往前移,从而实现删除
                        }
                        num--;                                                         //删除了一个学生,全局变量减一
               }
               getchar();
               printf("是否继续进行删除,是请输入y,否请输入n");
               if(getchar()=='n')
               {
                       break;
                  }
        }
}


void Studentname_Delete()                                                    //按学生姓名查找删除学生信息的函数
{
        while(1)
        {
          char name;
          int i;
          int p;
          printf("请输入要删除信息的学生的姓名");
          scanf("%s",&name);
          getchar();
          p=searchName(name);
          if(p==-1)
                {
                        printf("请检查你输入的姓名是否有误\n");
                }
                printf("你要删除的学生的全部信息为:\n");
                Mod_message(p);
                printf("你真的要删除该学生的信息吗?删除了无法复原的哦,确认删除请输入y,否请输入n");
                if(getchar()=='y')
                {
                        for(i=p;i<num-1;i++)
                        {
                                students=students;                                 //把后面的学生往前移,从而实现删除
                        }
                        num--;                                                         //删除了一个学生,全局变量减一
               }
               getchar();
               printf("是否继续进行删除,是请输入y,否请输入n");
               if(getchar()=='n')
               {
                       break;
                  }
          
       
        }
}



void Student_Massage()                                                //显示所有的保存的成绩数据
{
        int i;
        printf("%20s20%20s%20s%20s%20s%20s%20s%20s%20s\n","学号","姓名","成绩","成绩","成绩","成绩","成绩","总成绩","平均成绩");
        printf("************************************************************************************************************************\n");
        for(i=0;i<num;i++){
                printf("%20s%20s%20.2f%20.2f%20.2f%20.2f%20.2f%20.2f%20.2f\n",students.Student_ID,students.Name,students.score1,
                students.score2,students.score3,students.score4,students.score5,
                students.sumsc,students.average);
        }
}


void Student_sortscore1()                                       //使用冒泡法按学生第一门成绩由高到低排序的函数
{
        int i,j,temp;
        for(i=0;i<num;i++)
        {
                for(j=0;j<num-i;j++)
                {
                        if(students.score1<students.score1)
                        {
                                temp=students.score1;
                                students.score1=students.score1;
                                students.score1=temp;
                        }
                }
        }
}



void Student_sortscore2()                                       //使用冒泡法按学生第二门成绩由高到低排序的函数
{
        int i,j,temp;
        for(i=0;i<num;i++)
        {
                for(j=0;j<num-i;j++)
                {
                        if(students.score2<students.score2)
                        {
                                temp=students.score2;
                                students.score2=students.score2;
                                students.score2=temp;
                        }
                }
        }
}




void Student_sortscore3()                                       //使用冒泡法按学生第三门成绩由高到低排序的函数
{
        int i,j,temp;
        for(i=0;i<num;i++)
        {
                for(j=0;j<num-i;j++)
                {
                        if(students.score3<students.score3)
                        {
                                temp=students.score3;
                                students.score3=students.score3;
                                students.score3=temp;
                        }
                }
        }
}





void Student_sortscore4()                                       //使用冒泡法按学生第四门成绩由高到低排序的函数
{
        int i,j,temp;
        for(i=0;i<num;i++)
        {
                for(j=0;j<num-i;j++)
                {
                        if(students.score4<students.score4)
                        {
                                temp=students.score4;
                                students.score4=students.score4;
                                students.score4=temp;
                        }
                }
        }
}





void Student_sortscore5()                                       //使用冒泡法按学生第五门成绩由高到低排序的函数
{
        int i,j,temp;
        for(i=0;i<num;i++)
        {
                for(j=0;j<num-i;j++)
                {
                        if(students.score5<students.score5)
                        {
                                temp=students.score5;
                                students.score5=students.score5;
                                students.score5=temp;
                        }
                }
        }
}



void Student_sortsumsc()                                       //使用冒泡法按学生总成绩由高到低排序的函数
{
        int i,j,temp;
        for(i=0;i<num;i++)
        {
                for(j=0;j<num-i;j++)
                {
                        if(students.sumsc<students.sumsc)
                        {
                                temp=students.sumsc;
                                students.sumsc=students.sumsc;
                                students.sumsc=temp;
                        }
                }
        }
}

void IO_ReadInfo()

{
   FILE *fp;
   int i;
   if ((fp=fopen("Database.txt","rb"))==NULL)
   {
         printf("不能打开文件!\n");
         return;
   }
   if (fread(&num,sizeof(int),1,fp)!=1)
   {
         num=-1;
   }
   else
   {
         for(i=0;i<num;i++)
         {
            fread(&students,sizeof(struct StudentInformation),1,fp);
         }
   }
   fclose(fp);
}



void IO_WriteInfo()

{
    FILE *fp;
    int i;
    if ((fp=fopen("Database.txt","wb"))==NULL)
    {
   printf("不能打开文件!\n");
   return;
   }
   if (fwrite(&num,sizeof(int),1,fp)!=1)
   {
      printf("写入文件错误!\n");
      }
   for (i=0;i<num;i++)
   {
         if (fwrite(&students,sizeof(struct StudentInformation),1,fp)!=1)
         {
            printf("写入文件错误!\n");
         }
   }   
   fclose(fp);
}





void main()
{
        int dd;
        IO_ReadInfo();
        while(1)
        {
                printf("\n");
      printf("********************************\n");
      printf("|                              |\n");
      printf("|      学生成绩管理系统      |\n");
      printf("*      1.修改学生成绩信息      *\n");
      printf("|      2.增加学生成绩信息      |\n");
      printf("*      3.删除学生成绩信息      *\n");
      printf("|      4.通过学号进行成绩查询|\n");
      printf("*      5.通过姓名进行成绩查询*\n");
      printf("|      6.查看第一科成绩的排名|\n");
      printf("*      7.查看第二科成绩的排名*\n");
      printf("|      8.查看第三科成绩的排名|\n");
      printf("*      9.查看第四科成绩的排名*\n");
      printf("|      10.查看第五科成绩的排名 |\n");
      printf("*      11.查看总成绩的排名   *\n");
      printf("|      12.退出学生管理系统   |\n");
      printf("********************************\n");                     
      printf("请选择1~13的功能                ");
      scanf("%d",&dd);
      getchar();
      switch(dd)
      {
              case 1:
                      Student_Mod();
                      break;
              case 2:
                      StudentInformation_Inesrt();
                      break;
              case 3:
                      Studentid_Delete();
                      break;
              case 4:
                      Studentsearch_id_score();
                      break;
              case 5:
                      Studentsearch_name_score();
                      break;
              case 6:
                      Student_sortscore1();
                      break;
              case 7:
                      Student_sortscore2();
                      break;
                 case 8:
                      Student_sortscore3();
                      break;
              case 9:
                      Student_sortscore4();
                      break;
              case 10:
                      Student_sortscore5();
                      break;
              case 11:
                      Student_sortsumsc();
                      break;
              case 12:
                          exit(0);
                                break;                     
                             
                }
                IO_WriteInfo();
        }
}







jackz007 发表于 2020-11-9 18:39:01

      printf("请输入要修改学生的第三科成绩:");
      scanf("%s",&students.score3);                     // students.score3 难道是字符串?你确定这一行不需要修改?
      getchar();
               
      printf("请输入要修改学生的第四科成绩:");
      scanf("%f",&students.score4);
      getchar();
               
      printf("请输入要修改学生的第五科成绩:");
      scanf("%f",&students.score5);
      getchar();
               
      students.average=Ave(students);

      在这些代码里,总分计算的代码何在?

SmallCatt 发表于 2020-11-10 18:35:13

jackz007 发表于 2020-11-9 18:39
在这些代码里,总分计算的代码何在?

求分数总和的函数呀上面sum

jackz007 发表于 2020-11-10 18:48:13

SmallCatt 发表于 2020-11-10 18:35
求分数总和的函数呀上面sum

         函数是写了,可是,却没有任何地方调用,就是一个摆设。在你的代码中,根本就找不到为总分这个结构成员赋值的任何代码!

SmallCatt 发表于 2020-11-10 19:23:56

jackz007 发表于 2020-11-10 18:48
函数是写了,可是,却没有任何地方调用,就是一个摆设。在你的代码中,根本就找不到为总分这 ...

明白了 忘记加上去了{:5_104:}
页: [1]
查看完整版本: 想知道为什么第三个分数和总分没办法输出