求改正错误 ' ' : is not a member of 'student_info'

#include<stdio.h>
#include<stdlib.h>
#define N 100

//函数声明
void init();
char welcome();
void InputInfo();
void xiugai();
void view();
void DeLeteInfo();
void paiming(struct student_info student[]);
void ViewAll();
void PaimingView();
void exit();
struct student_info input();
void Sortinfo(struct student_info student[]);
void ViewInfo(struct student_info *sp);
void SaveStruct(struct student_info *sp,int SIZE,int n,char filename[20]);
void LoadStruct(struct student_info *sp,int SIZE,int n,char filename[20]);
void SaveInt(int*p,int size,int n,char filename[20]);
void LoadInt(int*p,int size,int n,char filename[20]);
int NumExist(struct student_info student[],int num);

//定义学生信息结构体
struct student_info 
{
    int num;
    char name[6];
    int writetest, classtest ,teatest;
    double ave ,zongping;
};

//定义全局结构体数据
struct student_info student[N];
int counter,PM;

//主函数
void main()
{
    char select;
    init();
    while(1)
    {
        select=welcome();
        switch(select)
        {
            case'1':system("cls"); InputInfo(); break;//选项1:录入学生信息
            case'2':system("cls"); view();break;//选项2:添加学生信息
            case'3':system("cls"); paiming(student);PM=1;
                getchar(); system("cls"); break;//选项3:学生排名
            case'4':system("cls"); PaimingView();break;//选项4:查询学生信息 
            case'5':system("cls"); xiugai();break;//选项5:修改学生信息
            case'6':system("cls"); DeLeteInfo();break;//选项6:删除学生信息
            case'7':system("cls"); ViewAll();break;//选项7:浏览学生信息
            case'0':system("cls"); exit();break;//选项0:退出
        }
    }
}

//函数初始化
void init()
{
    FILE *fp;
    fp=fopen("counter.dat","rb");
    if(fp!=NULL)
    {
        fclose(fp);
        LoadInt(&counter,sizeof(counter),1,"counter.dat");
    }
    else
    {
        fp=fopen("counter.dat","wb");
        fclose(fp);
        counter=0;
    }
    if(counter!=0)
        LoadStruct(student,sizeof(struct student_info),counter,"student_info.dat");
}

//欢迎函数
char welcome()
{
    char select;
    while(1)
    {
        system("cls");
        printf("\n\n\n\n\t\t☆☆☆☆☆学生数据处理系统☆☆☆☆☆\n\n");
        printf("\n");
        printf("\t\t\t●1.录入成绩数据\n");

        printf("\t\t\t●2.添加学生数据\n");

        printf("\t\t\t●3.综合成绩排名\n");

        printf("\t\t\t●4.查询学生成绩\n");

        printf("\t\t\t●5.修改学生数据\n");

        printf("\t\t\t●6.删除学生数据\n");

        printf("\t\t\t●7.浏览学生数据\n");

        printf("\t\t\t●0.退出\n\n");

        select=getchar();

       if(select=='1'||select=='2'||select=='3'||select=='4'||select=='5'
||select=='6'||select=='7'||select=='9')
            return select;
       system("cls");
       continue;
        }    
}

//录入学生信息

void InputInfo()
{
    int i,n;
    printf("需要录入多少位学生信息:");
    scanf("%d",&n);
    system("cls");
    for(i=1;i<=n;i++)
    {
        student[counter]=input();
        counter++;
    }
    PM=0;
    Sortinfo(student);
    SaveStruct(student,sizeof(struct student_info),counter,"student_info.dat");
    SaveInt(&counter,sizeof(counter),1,"counter.dat");
}

//修改学生信息
void xiugai()
{
    int i,num;
    char YN,select;
    printf("请输入需要修改的学生信息的学号:");
    scanf("%d",&num);
    getchar();
    if((i=NumExist(student,num))==-1)
    {
        printf("不存在该学号,按返回键返回。。。");
        getchar();
        system("cls");
        return;
    }
   ViewInfo(&student[i]);
   printf("是否要修改?(Y/N):");
   scanf("%c",&YN);
   getchar();
   if(YN!='Y'&& YN !='y')
   {
       printf("修改取消...");
       getchar();
       system("cls");
       return;
   }

       system("cls");
        

        printf("1.学号\n");

        printf("2.姓名\n");
         
        printf("3.考试平均成绩\n");

        printf("4.同学互评分\n");

        printf("5.任课老师评分\n");

        scanf("%c",&select);
    switch(select)
    {
            case'1':printf("修改学号"); scanf("%d",&student[i].num);break;
            case'2':printf("修改姓名"); scanf("%d",&student[i].name);break;    
            case'3':printf("考试平均成绩"); scanf("%d",&student[i].writetest);break;
            case'4':printf("修改同学互评分"); scanf("%d",&student[i].classtest);break;
            case'5':printf("修改任课老师评分"); scanf("%d",&student[i].teatest);break;
    }
    Sortinfo(student);
    SaveStruct(student,sizeof(struct student_info),counter,"student_info.dat");
    PM=0;
    printf("修改完成。。。");
    getchar();
    system("cls");
}

//删除学生信息
void DeLeteInfo()
{
    int i,j,num;
    char YN;
    printf("请输入需要删除的学生信息的学号:");
    scanf("%d",&num);
    getchar();
    if((i=NumExist(student,num))==-1)
    {
        printf("不存在该学号,按返回键返回。。。");
        getchar();
        system("cls");
        return;
    }
   ViewInfo(&student[i]);
   printf("\n确认删除(Y/N):");
   scanf("%c",&YN);
   getchar();
   if(YN!='Y'&& YN !='y')
   {
       printf("修改取消...");
   }
   else
   {
       for(j=i;j<counter-1;j++)
           student[j]=student[j+1];
       counter--;
       PM=0;
       SaveStruct(student,sizeof(struct student_info),counter,"student_info.dat");
       SaveInt(&counter,sizeof(counter),counter,"counter.dat");
       printf("删除完成。。。");
   }

    getchar();
    system("cls");
}

// 综合测评分排名
void paiming(struct student_info student[])
{
    
    struct student_info *p[N],*temp;
    int i,j;
    for(i=0;i<counter;i++)
        p[i]=&student[i];
    for(i=0;i<counter-1;i++)
       for(j=i+1;j<counter;j++)
    {
        if(p[i]->zongping < p[j] ->zongping)
        {
            temp=p[i];
            p[i]=p[j];
            p[j]=temp;
        }
    }
    for(i=0;i<counter;i++)
        p[i]->paiming=i+1;
    printf("综合测评分排名完成。。。\n");
}

//浏览所有学生信息
void viewAll()
{
    int i;
    for(i=0;i<counter;i++)
    {
        ViewInfo(&student[i]);
        printf("\n");
    }
    getchar();
    printf("按回车键返回。。。");
    getchar();
    system("cls");
}

//查询排名
void paimingView()
{
    int i,num;
    printf("请输入需要查询的学生的学号:");
    scanf("%d",&num);
    getchar();
    i=NumExist(student,num);
    if(i==-1)
    {
        printf("不存在该学号。。。");
        getchar();
         return;
    }
    if(PM==0)
    {
        printf("请先进行成绩排名。。。");
        getchar();
         return;
    }
    printf("%s的综合测评分排名%d\n",student[i].name,student[i].paiming);
    printf("按回车键返回。。。");
    getchar();
    return;
}

//退出
void exit()
{
    printf("谢谢使用!\n");
    exit(0);
}

// 输入信息函数
struct student_info input()
{
   struct student_info stu,*sp;
   char YN;
   sp=&stu;
   while(1)
   {
      while(1)
      {
         printf("录入学号:");
         scanf("%d",&sp->num);
         getchar();
        if(NumExist(student,sp->num)!=-1)
        {
           printf("该学号已存在,请重新输入。。。");
           getchar();
           system("cls");
           continue;
        }
        break;
      }
      printf("录入姓名:");
      gets(sp->name);
      printf("录入考试平均成绩:");
      scanf("%d",&sp->writetest);
      printf("录入同学互评分:");
      scanf("%d",&sp->classtest);
      printf("录入任课老师评分:");
      scanf("%d",&sp->teatest);
      getchar();

sp->zongping=(sp->writetest*0.6+sp->classtest*0.2+sp->teatest*0.2);
      printf("录入完毕,确认信息是否正确(Y/N)");
      YN=getchar();
      getchar();
      if(YN=='Y'||YN=='y')
          break;
      else
      {
          printf("按回车键重新录入信息。。");
          getchar();
          system("cls");
          continue;
      }
   }
   system("cls");
   return stu;
}

//排序函数
void Sortinfo(struct student_info student[])
{
    int i,j;
    struct student_info temp;
    for(i=0;i<counter-1;i++)
        for(j=i+1;j<=counter-1;j++)
        {
            if(student[i].num<student[j].num)
            {
                temp=student[i];
                student[i]=student[j];
                student[i]=temp;
            }
        }
}

//显示学生信息
void ViewInfo(struct student_info *sp)
{
    printf("学号\t姓名\n");
    printf("%d\t%s\n",sp->num,sp->name);
    printf("考试平均成绩\t同学互评分\t任课老师评分\n");
    printf("%d\t%d\t%d\n",sp->writetest,sp->classtest,sp->teatest\n);
    printf("综合分\n");
    printf("%.2f\n",sp->zongping);
    if(PM==1)
    {
        printf("综合测评分排名\n");
        printf("%d\n",sp->zongping);
    }
}

//信息存盘(结构体)
void SaveStruct(struct student_info *sp,int SIZE,int n,char filename[20])
{
    FILE *fp;
    fp=fopen(filename,"wb");
    fwrite(sp,SIZE,n,fp);
    fclose(fp);
}

//读取信息(结构体)
void LoadStruct(struct student_info *sp,int SIZE,int n,char filename[20])
{
    FILE *fp;
    fp=fopen(filename,"rb");
    fread(sp,SIZE,n,fp);
    fclose(fp);
}

//信息存盘(整型)
void SaveInt(int*p,int size,int n,char filename[20])
{
    FILE *fp;
    fp=fopen(filename,"wb");
    fwrite(p,size,n,fp);
    fclose(fp);
}

//读取信息(整型)
void LoadInt(int*p,int size,int n,char filename[20])
{
    FILE *fp;
    fp=fopen(filename,"rb");
    fread(p,size,n,fp);
    fclose(fp);
}

//检索学号
int NumExist(struct student_info student[],int num)
{
    int i;
    for(i=0;i<counter;i++)
    {
        if(student[i].num==num)
            return i;
    }
    return -1;
}

//浏览学生信息
void view()
{
    int i,num;
    printf("请输入需要浏览的学生信息的学号:");
    scanf("%d",&num);
    getchar();
    if((i=NumExist(student,num))==-1)
    {
        printf("不存在该学号,按回车键返回。。。");
        getchar();
        system("cls");
        return;
    }
        
    ViewInfo(&student[i]);
    printf("\n按回车键返回。。。");
    getchar();
    system("cls");
    return;
}

#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<stdlib.h>
#define N 100
//函数声明
void init();
char welcome();
void InputInfo();
void xiugai();
void view();
void DeLeteInfo();
void paiming(struct student_info student[]);
void ViewAll();
void PaimingView();
void exit();
struct student_info input();
void Sortinfo(struct student_info student[]);
void ViewInfo(struct student_info *sp);
void SaveStruct(struct student_info *sp, int SIZE, int n, char filename[20]);
void LoadStruct(struct student_info *sp, int SIZE, int n, char filename[20]);
void SaveInt(int*p, int size, int n, char filename[20]);
void LoadInt(int*p, int size, int n, char filename[20]);
int NumExist(struct student_info student[], int num);
//定义学生信息结构体
struct student_info
{
    int num;
    char name[6];
    int writetest, classtest, teatest, paiming;
    double ave, zongping;
};
//定义全局结构体数据
struct student_info student[N];
int counter, PM;
//主函数
void main()
{
    char select;
    init();
    while (1)
    {
        select = welcome();
        switch (select)
        {
        case'1':system("cls"); InputInfo(); break;//选项1:录入学生信息
        case'2':system("cls"); view(); break;//选项2:添加学生信息
        case'3':system("cls"); paiming(student); PM = 1;
            getchar(); system("cls"); break;//选项3:学生排名
        case'4':system("cls"); PaimingView(); break;//选项4:查询学生信息 
        case'5':system("cls"); xiugai(); break;//选项5:修改学生信息
        case'6':system("cls"); DeLeteInfo(); break;//选项6:删除学生信息
        case'7':system("cls"); ViewAll(); break;//选项7:浏览学生信息
        case'0':system("cls"); exit(); break;//选项0:退出
        }
    }
}
void ViewAll() {

}
void PaimingView() {

}
//函数初始化
void init()
{
    FILE *fp;
    fp = fopen("counter.dat", "rb");
    if (fp != NULL)
    {
        fclose(fp);
        LoadInt(&counter, sizeof(counter), 1, "counter.dat");
    }
    else
    {
        fp = fopen("counter.dat", "wb");
        fclose(fp);
        counter = 0;
    }
    if (counter != 0)
        LoadStruct(student, sizeof(struct student_info), counter, "student_info.dat");
}
//欢迎函数
char welcome()
{
    char select;
    while (1)
    {
        system("cls");
        printf("\n\n\n\n\t\t☆☆☆☆☆学生数据处理系统☆☆☆☆☆\n\n");
        printf("\n");
        printf("\t\t\t●1.录入成绩数据\n");
        printf("\t\t\t●2.添加学生数据\n");
        printf("\t\t\t●3.综合成绩排名\n");
        printf("\t\t\t●4.查询学生成绩\n");
        printf("\t\t\t●5.修改学生数据\n");
        printf("\t\t\t●6.删除学生数据\n");
        printf("\t\t\t●7.浏览学生数据\n");
        printf("\t\t\t●0.退出\n\n");
        select = getchar();
        if (select == '1' || select == '2' || select == '3' || select == '4' || select == '5'
            || select == '6' || select == '7' || select == '9')
            return select;
        system("cls");
        continue;
    }
}
//录入学生信息
void InputInfo()
{
    int i, n;
    printf("需要录入多少位学生信息:");
    scanf("%d", &n);
    system("cls");
    for (i = 1; i <= n; i++)
    {
        student[counter] = input();
        counter++;
    }
    PM = 0;
    Sortinfo(student);
    SaveStruct(student, sizeof(struct student_info), counter, "student_info.dat");
    SaveInt(&counter, sizeof(counter), 1, "counter.dat");
}
//修改学生信息
void xiugai()
{
    int i, num;
    char YN, select;
    printf("请输入需要修改的学生信息的学号:");
    scanf("%d", &num);
    getchar();
    if ((i = NumExist(student, num)) == -1)
    {
        printf("不存在该学号,按返回键返回。。。");
        getchar();
        system("cls");
        return;
    }
    ViewInfo(&student[i]);
    printf("是否要修改?(Y/N):");
    scanf("%c", &YN);
    getchar();
    if (YN != 'Y'&& YN != 'y')
    {
        printf("修改取消...");
        getchar();
        system("cls");
        return;
    }
    system("cls");

    printf("1.学号\n");
    printf("2.姓名\n");
    printf("3.考试平均成绩\n");
    printf("4.同学互评分\n");
    printf("5.任课老师评分\n");
    scanf("%c", &select);
    switch (select)
    {
    case'1':printf("修改学号"); scanf("%d", &student[i].num); break;
    case'2':printf("修改姓名"); scanf("%s", &student[i].name); break;
    case'3':printf("考试平均成绩"); scanf("%d", &student[i].writetest); break;
    case'4':printf("修改同学互评分"); scanf("%d", &student[i].classtest); break;
    case'5':printf("修改任课老师评分"); scanf("%d", &student[i].teatest); break;
    }
    Sortinfo(student);
    SaveStruct(student, sizeof(struct student_info), counter, "student_info.dat");
    PM = 0;
    printf("修改完成。。。");
    getchar();
    system("cls");
}
//删除学生信息
void DeLeteInfo()
{
    int i, j, num;
    char YN;
    printf("请输入需要删除的学生信息的学号:");
    scanf("%d", &num);
    getchar();
    if ((i = NumExist(student, num)) == -1)
    {
        printf("不存在该学号,按返回键返回。。。");
        getchar();
        system("cls");
        return;
    }
    ViewInfo(&student[i]);
    printf("\n确认删除(Y/N):");
    scanf("%c", &YN);
    getchar();
    if (YN != 'Y'&& YN != 'y')
    {
        printf("修改取消...");
    }
    else
    {
        for (j = i; j<counter - 1; j++)
            student[j] = student[j + 1];
        counter--;
        PM = 0;
        SaveStruct(student, sizeof(struct student_info), counter, "student_info.dat");
        SaveInt(&counter, sizeof(counter), counter, "counter.dat");
        printf("删除完成。。。");
    }
    getchar();
    system("cls");
}
// 综合测评分排名
void paiming(struct student_info student[])
{
    struct student_info *p[N], *temp;
    int i, j;
    for (i = 0; i<counter; i++)
        p[i] = &student[i];
    for (i = 0; i<counter - 1; i++)
        for (j = i + 1; j<counter; j++)
        {
            if (p[i]->zongping < p[j]->zongping)
            {
                temp = p[i];
                p[i] = p[j];
                p[j] = temp;
            }
        }
    for (i = 0; i<counter; i++)
        p[i]->paiming = i + 1;
    printf("综合测评分排名完成。。。\n");
}
//浏览所有学生信息
void viewAll()
{
    int i;
    for (i = 0; i<counter; i++)
    {
        ViewInfo(&student[i]);
        printf("\n");
    }
    getchar();
    printf("按回车键返回。。。");
    getchar();
    system("cls");
}
//查询排名
void paimingView()
{
    int i, num;
    printf("请输入需要查询的学生的学号:");
    scanf("%d", &num);
    getchar();
    i = NumExist(student, num);
    if (i == -1)
    {
        printf("不存在该学号。。。");
        getchar();
        return;
    }
    if (PM == 0)
    {
        printf("请先进行成绩排名。。。");
        getchar();
        return;
    }
    printf("%s的综合测评分排名%d\n", student[i].name, student[i].paiming);
    printf("按回车键返回。。。");
    getchar();
    return;
}
//退出
void exit()
{
    printf("谢谢使用!\n");
    exit(0);
}
// 输入信息函数
struct student_info input()
{
    struct student_info stu, *sp;
    char YN;
    sp = &stu;
    while (1)
    {
        while (1)
        {
            printf("录入学号:");
            scanf("%d", &sp->num);
            getchar();
            if (NumExist(student, sp->num) != -1)
            {
                printf("该学号已存在,请重新输入。。。");
                getchar();
                system("cls");
                continue;
            }
            break;
        }
        printf("录入姓名:");
        // gets(sp->name);
        printf("录入考试平均成绩:");
        scanf("%d", &sp->writetest);
        printf("录入同学互评分:");
        scanf("%d", &sp->classtest);
        printf("录入任课老师评分:");
        scanf("%d", &sp->teatest);
        getchar();
        sp->zongping = (sp->writetest*0.6 + sp->classtest*0.2 + sp->teatest*0.2);
        printf("录入完毕,确认信息是否正确(Y/N)");
        YN = getchar();
        getchar();
        if (YN == 'Y' || YN == 'y')
            break;
        else
        {
            printf("按回车键重新录入信息。。");
            getchar();
            system("cls");
            continue;
        }
    }
    system("cls");
    return stu;
}
//排序函数
void Sortinfo(struct student_info student[])
{
    int i, j;
    struct student_info temp;
    for (i = 0; i<counter - 1; i++)
        for (j = i + 1; j <= counter - 1; j++)
        {
            if (student[i].num<student[j].num)
            {
                temp = student[i];
                student[i] = student[j];
                student[i] = temp;
            }
        }
}
//显示学生信息
void ViewInfo(struct student_info *sp)
{
    printf("学号\t姓名\n");
    printf("%d\t%s\n", sp->num, sp->name);
    printf("考试平均成绩\t同学互评分\t任课老师评分\n");
    printf("%d\t%d\t%d\n", sp->writetest, sp->classtest, sp->teatest);
    printf("综合分\n");
    printf("%.2f\n", sp->zongping);
    if (PM == 1)
    {
        printf("综合测评分排名\n");
        printf("%f\n", sp->zongping);
    }
}
//信息存盘(结构体)
void SaveStruct(struct student_info *sp, int SIZE, int n, char filename[20])
{
    FILE *fp;
    fp = fopen(filename, "wb");
    fwrite(sp, SIZE, n, fp);
    fclose(fp);
}
//读取信息(结构体)
void LoadStruct(struct student_info *sp, int SIZE, int n, char filename[20])
{
    FILE *fp;
    fp = fopen(filename, "rb");
    fread(sp, SIZE, n, fp);
    fclose(fp);
}
//信息存盘(整型)
void SaveInt(int*p, int size, int n, char filename[20])
{
    FILE *fp;
    fp = fopen(filename, "wb");
    fwrite(p, size, n, fp);
    fclose(fp);
}
//读取信息(整型)
void LoadInt(int*p, int size, int n, char filename[20])
{
    FILE *fp;
    fp = fopen(filename, "rb");
    fread(p, size, n, fp);
    fclose(fp);
}
//检索学号
int NumExist(struct student_info student[], int num)
{
    int i;
    for (i = 0; i<counter; i++)
    {
        if (student[i].num == num)
            return i;
    }
    return -1;
}
//浏览学生信息
void view()
{
    int i, num;
    printf("请输入需要浏览的学生信息的学号:");
    scanf("%d", &num);
    getchar();
    if ((i = NumExist(student, num)) == -1)
    {
        printf("不存在该学号,按回车键返回。。。");
        getchar();
        system("cls");
        return;
    }
    ViewInfo(&student[i]);
    printf("\n按回车键返回。。。");
    getchar();
    system("cls");
    return;
}

img

编码不易,望采纳哦!