Error] 'Class_NUM' undeclared (first use in this function) 运行结果及报错内容,如何解决?

问题遇到的现象和发生背景
[Error] 'Class_NUM' undeclared (first use in this function)
问题相关代码,请勿粘贴截图
#include<stdio.h> 
#include<stdlib.h>
#define MAX 99999
typedef struct
{
    char Number[20];  //学号
    char Class[20];   //班级
    char Name[20];    //姓名
    char Subject[20]; //科目
    int term;         //学期
    int Score;        //分数
}Node;//链表的定义
typedef struct
{
int count;
    Node Student[MAX];
}List;//线性表的定义
typedef struct
{
    char Class[20];    //班级名字
    int Acount;        //班级优秀的人数
    int Dcount;        //班级不及格的人数
    int count;        //班级总人数
}ClassInfor;
void Insert(List *L, ClassInfor *S)//成绩录入
{
    char Number[20];
    char Class[20];
    char Name[20];
    char Subject[20];
    int Term;
    int Score;
    int i, flag = 0;
    printf("\n\t\t\t\t请输入学号: ");
    scanf("%s", Number);
    getchar();
    if(strcmp(L->Student[L->count - 1].Number, Number) > 0)//录入学号与最后学号进行比较
    {
        printf("\n\n\t\t\t不合法学号,学号应大于%s", L->Student[L->count - 1].Number);
        return;
    }
    printf("\n\t\t\t\t请输入班级: ");
    scanf("%s", Class);
    getchar();
    for(i = 0; i < Class_NUM; i++)
    {
        if(strcmp(S[i].Class, Class) == 0)
        {
            S[i].count++;//该班级人数+1
            flag = 1;
            break;
        }
    }
    if(flag == 0)
    {
        printf("\n\n\t\t\t\t请输入正确的班级\n");
        return;
    }
    printf("\n\t\t\t\t请输入姓名: ");
    scanf("%s", Name);
    printf("\t\t\t");
    getchar();
    printf("\n\t\t\t\t请输入科目: ");
    scanf("%s", Subject);
    printf("\n\t\t\t\t请输入学期:2\n ");
    Term = 2;
    printf("\n\t\t\t\t请输入分数: ");
    scanf("%d", &Score);
    getchar();
    if(Score >= 90)//优秀人数+1
        S[i].Acount++;
    if(Score < 60) //不及格人数+1
        S[i].Dcount++;
    //寻找插入位置。与录入学生班级相同的排一块
    for(i = L->count; i >= 0; i--)
    {
        if(strcmp(L->Student[i].Class, Class) == 0)
        {
                strcpy(L->Student[i + 1].Number, Number);
                strcpy(L->Student[i + 1].Class, Class);
                strcpy(L->Student[i + 1].Name, Name);
                strcpy(L->Student[i + 1].Subject, Subject);
                L->Student[i + 1].term = Term;
                L->Student[i + 1].Score = Score;
                L->count++;//所插入班级人数+1
                return;
        }
        else
            L->Student[i + 1] = L->Student[i];
    }
}
void Change(List *L, ClassInfor *S)//成绩修改
{
    char Number[20];//, Class[20];
    int  i, flag = 0;
    printf("\n\n\t\t\t请输入要修改学生的学号: ");
    scanf("%s", Number);
    getchar();
    for(i = 0; i < MAX; i++)//找到要修改学生
    {
        if(strcmp(L->Student[i].Number, Number) == 0)//通过比较输入的学号和文件当中存储的学号,然后通过链表访问到该学生。
        {
            flag = 1;
            break;
        }
    }
    if(flag == 0)
    {
        printf("\n\n\t\t\t请输入正确的学号!\n");
        return;
    }
    //输出此人信息
    printf("\n\n\t\t\t班级: %s\n", L->Student[i].Class);
    printf("\n\n\t\t\t学号: %s\n", L->Student[i].Number);
    printf("\n\n\t\t\t姓名: %s\n", L->Student[i].Name);
    printf("\n\n\t\t\t学期: %d\n", L->Student[i].term);
    printf("\n\n\t\t\t课程: %d\n", L->Student[i].Subject);
    printf("\n\n\t\t\t分数: %d\n", L->Student[i].Score);
    printf("\n\n\t\t\t请输入修改数据结构后的分数: ");
    scanf("%d", &L->Student[i].Score);
    getchar();
}
void Delect(List *L, ClassInfor *S)//删除学生信息
{
    char Number[20];
    int i, j, flag = 0;
    printf("\n\n\t");
    printf("\t\t\t请输入要删除的学号: ");
    scanf("%s", Number);
    getchar();
    for(i = 0; i < L->count; i++)
    {
        if(strcmp(L->Student[i].Number, Number) == 0)
        {
            flag = 1;
            break;
        }
    }
    if(flag)
    {
        for(j = 0; j < Class_NUM; j++)
        {
            if(strcmp(S[j].Class,L->Student[i].Class) == 0)
            {
                S[i].count--;//该班级人数-1
                break;
            }
        }
        for(j = i; j < L->count - i; j++)
            L->Student[j] = L->Student[j + 1];
        L->count--;
        return;
    }
    printf("\t\t\t没有该学号的学生\n");
}
void Delete(List *L, ClassInfor *S)//删除学生信息
{
    char Number[20];
    int i, j, flag = 0;
    printf("\n\n\t");
    printf("\t\t\t请输入要删除的学号: ");
    scanf("%s", Number);
    getchar();
    for(i = 0; i < L->count; i++)
    {
        if(strcmp(L->Student[i].Number, Number) == 0)
        {
            flag = 1;
            break;
        }
    }
    if(flag)
    {
        for(j = 0; j < Class_NUM; j++)
        {
            if(strcmp(S[j].Class,L->Student[i].Class) == 0)
            {
                S[i].count--;//该班级人数-1
                break;
            }
        }
        for(j = i; j < L->count - i; j++)
            L->Student[j] = L->Student[j + 1];
        L->count--;
        return;
    }
    printf("\t\t\t没有该学号的学生\n");
}
void Search(List *L, ClassInfor *S)//统计函数块
{
    int x;
    printf("\n\n\t\t\t1.统计所有班级\n");
    printf("\n\n\t\t\t2.统计某个班级\n");
    printf("\n\n\t\t\t");
    scanf("%d", &x);
    getchar();
    if(x == 1)
        DisplayAll(L, S);//统计所有班级所有学生
    if(x == 2)
        DisplayClass(L, S);//统计某个班级所有学生
}
void Find(List *L, ClassInfor *S)//成绩查询函数块
{
    int x;
    printf("\n\n\t\t\t1.个人成绩查询\n");
    printf("\n\n\t\t\t2.班级成绩查询\n");
    printf("\n\n\t\t\t请输入操作: ");
    scanf("%d", &x);
    getchar();
    switch(x)
    {
    case 1:
        PersonalFind(L, S);//个人成绩查询
        break;
    case 2:
        ClassFind(L, S);//班级成绩查询
        break;
    }
}
void Display(List *L)//显示输出所有学生信息
{
    int k;
    for(k = 0; k < L->count; k++)
    {
        printf("\n");
        printf("班级: %s ", L->Student[k].Class);
        printf("学号: %s ", L->Student[k].Number);
        printf("姓名: %s ", L->Student[k].Name);
        printf("学期: %d ", L->Student[k].term);
        printf("课程: %s ", L->Student[k].Subject);
        printf("分数: %d ", L->Student[k].Score);
        printf("\n\n");
    }
}
void main(){
    int i;
    int j=0;
    while(j==0){
        printf("请选择功能:\n");
        printf("\t1.成绩录入\t2.成绩修改\t3.学生信息删除\t4.统计\t5.成绩查询\t6.学生成绩显示");
        scanf("%d",&i);
        getchar();
        switch(i) {
            case 1:
                Insert(L,S);
            case 2:
                Change(L,S);
            case 3:
                Delete(L,S);
            case 4:
                Search(L,S);
            case 5:
                Find(L,S);
            case 6:
                Display(L);
        }
        printf("退出请按1,继续请按0。\n");
        scanf("%d",&j);
        getchar();
        if(j==1){
            break;
        }
    }    
} 

运行结果及报错内容
我的解答思路和尝试过的方法
我想要达到的结果

修改完善如下,供参考:

#include<stdio.h>
#include<stdlib.h>
#define MAX 9999
#define C_NUM 100
typedef struct
{
    char Number[20];  //学号
    char Class[20];   //班级
    char Name[20];    //姓名
    char Subject[20]; //科目
    int  term;         //学期
    int  Score;        //分数
}Node;//链表的定义
typedef struct
{
    int  count;
    Node Student[MAX];
}List;//线性表的定义
typedef struct
{
    char Class[20];    //班级名字
    int  Acount;        //班级优秀的人数
    int  Dcount;        //班级不及格的人数
    int  count;        //班级总人数
}ClassInfor;

ClassInfor S[C_NUM] = {0};//修改
int  Class_NUM = 0;   //修改

void Insert(List *L, ClassInfor *S)//成绩录入
{
    char Number[20];
    char Class[20];
    char Name[20];
    char Subject[20];
    int  Term;
    int  Score;
    int  i, flag = 0;
    printf("\n\t\t\t\t请输入学号: ");
    scanf("%s", Number);
    getchar();
    if(L->count !=0 && strcmp(L->Student[L->count - 1].Number, Number) == 0)  //修改
    //if(strcmp(L->Student[L->count - 1].Number, Number) > 0) //录入学号与最后学号进行比较
    {
        printf("\n\n\t\t\t不合法学号,学号%s已注册.\n", L->Student[L->count - 1].Number);
        return;
    }
    printf("\n\t\t\t\t请输入班级: ");
    scanf("%s", Class);
    getchar();
    for(i = 0,flag = 0; i < Class_NUM; i++)
    {
        if(strcmp(S[i].Class, Class) == 0)
        {
            //S[i].count++;//该班级人数+1   修改
            flag = 1;
            break;
        }
    }
    if(flag == 0)
    {
        strcpy(S[i].Class,Class);
        Class_NUM++;
        //printf("\n\n\t\t\t\t请输入正确的班级\n"); 修改
        //return;
    }
    printf("\n\t\t\t\t请输入姓名: ");
    scanf("%s", Name);
    printf("\t\t\t");
    getchar();
    printf("\n\t\t\t\t请输入科目: ");
    scanf("%s", Subject);
    printf("\n\t\t\t\t请输入学期:2\n ");
    Term = 2;
    printf("\n\t\t\t\t请输入分数: ");
    scanf("%d", &Score);
    getchar();
    if(Score >= 90)//优秀人数+1
        S[i].Acount++;
    if(Score < 60) //不及格人数+1
        S[i].Dcount++;
    S[i].count++; //该班级人数+1   修改

    //寻找插入位置。与录入学生班级相同的排一块
    for(i = L->count,flag = 0; i > 0; i--)
    //for(i = L->count; i >= 0; i--) 修改
    {
        L->Student[i] = L->Student[i - 1]; //修改
        if(strcmp(L->Student[i-1].Class, Class) == 0)
        {
                strcpy(L->Student[i - 1].Number, Number);
                strcpy(L->Student[i - 1].Class, Class);
                strcpy(L->Student[i - 1].Name, Name);
                strcpy(L->Student[i - 1].Subject, Subject);
                L->Student[i - 1].term = Term;
                L->Student[i - 1].Score = Score;
                L->count++;//所插入人数+1
                flag = 1;
                return;
        }
        //else
            // L->Student[i + 1] = L->Student[i]; //修改
    }
    if(flag == 0)   //修改
    {
        strcpy(L->Student[i].Number, Number);
        strcpy(L->Student[i].Class, Class);
        strcpy(L->Student[i].Name, Name);
        strcpy(L->Student[i].Subject, Subject);
        L->Student[i].term = Term;
        L->Student[i].Score = Score;
        L->count++;//所插入人数+1
    }
}

void Change(List *L, ClassInfor *S)//成绩修改
{
    char Number[20];//, Class[20];
    int  i, flag = 0;
    printf("\n\n\t\t\t请输入要修改学生的学号: ");
    scanf("%s", Number);
    getchar();
    for(i = 0; i < L->count; i++)//修改
    //for(i = 0; i < MAX; i++)
    {
        if(strcmp(L->Student[i].Number, Number) == 0)
        //通过比较输入的学号和文件当中存储的学号,然后通过链表访问到该学生。
        {
            flag = 1;
            break;
        }
    }
    if(flag == 0)
    {
        printf("\n\n\t\t\t没有该学号的学生!\n");
        //printf("\n\n\t\t\t请输入正确的学号!\n");修改
        return;
    }
    //输出此人信息
    printf("\n\n\t\t\t班级: %s\n", L->Student[i].Class);
    printf("\n\n\t\t\t学号: %s\n", L->Student[i].Number);
    printf("\n\n\t\t\t姓名: %s\n", L->Student[i].Name);
    printf("\n\n\t\t\t学期: %d\n", L->Student[i].term);
    printf("\n\n\t\t\t课程: %d\n", L->Student[i].Subject);
    printf("\n\n\t\t\t分数: %d\n", L->Student[i].Score);
    printf("\n\n\t\t\t请输入修改数据结构后的分数: ");
    scanf("%d", &L->Student[i].Score);
    getchar();
}

void Delete(List *L, ClassInfor *S)//删除学生信息
{
    char Number[20];
    int i, j, flag = 0;
    printf("\n\n\t");
    printf("\t\t\t请输入要删除的学号: ");
    scanf("%s", Number);
    getchar();
    for(i = 0; i < L->count; i++)
    {
        if(strcmp(L->Student[i].Number, Number) == 0)
        {
            flag = 1;
            break;
        }
    }
    if(flag)
    {
        for(j = 0; j < Class_NUM; j++)
        {
            if(strcmp(S[j].Class,L->Student[i].Class) == 0)
            {
                S[i].count--;//该班级人数-1
                break;
            }
        }
        for(j = i; j < L->count - 1; j++) //修改
        //for(j = i; j < L->count - i; j++)
            L->Student[j] = L->Student[j + 1];
        L->count--;
        return;
    }
    else   //修改
        printf("\t\t\t没有该学号的学生\n");
}
void Display(List *L)//显示输出所有学生信息
{
    int k;
    if(L->count == 0)
    {
        printf("无记录!\n");
        return;
    }
    for(k = 0; k < L->count; k++)
    {
        printf("\n");
        printf("班级: %s ", L->Student[k].Class);
        printf("学号: %s ", L->Student[k].Number);
        printf("姓名: %s ", L->Student[k].Name);
        printf("学期: %d ", L->Student[k].term);
        printf("课程: %s ", L->Student[k].Subject);
        printf("分数: %d ", L->Student[k].Score);
        printf("\n\n");
    }
}
void DisplayClass(List *L,ClassInfor *S)  //增加
{
    char Class[20];
    int  i,flag;
    if(L->count == 0)
    {
        printf("无记录!\n");
        return;
    }
    printf("\n\n\t\t\t请输入班级名称: ");
    scanf("%s", Class);
    getchar();
    for(i = 0,flag = 0; i < L->count; i++)
    {
        if(strcmp(L->Student[i].Class , Class) == 0){
            printf("\n");
            printf("班级: %s ", L->Student[i].Class);
            printf("学号: %s ", L->Student[i].Number);
            printf("姓名: %s ", L->Student[i].Name);
            printf("学期: %d ", L->Student[i].term);
            printf("课程: %s ", L->Student[i].Subject);
            printf("分数: %d ", L->Student[i].Score);
            printf("\n\n");
            flag = 1;
        }
    }
    if(flag == 0)
    {
        printf("未找到班级名称!\n");
        return;
    }
    for(i = 0; i < Class_NUM; i++) {
        if(strcmp(S[i].Class,Class) == 0){
            printf("\n");
            printf("%s:  总人数:%d  优秀的人数:%d  不及格人数:%d\n",
                      S[i].Class,S[i].count,S[i].Acount,S[i].Dcount);
        }
    }
}
void Search(List *L, ClassInfor *S)//统计函数块
{
    int x;
    printf("\n\n\t\t\t1.统计所有班级\n");
    printf("\n\n\t\t\t2.统计某个班级\n");
    printf("\n\n\t\t\t");
    scanf("%d", &x);
    getchar();
    if(x == 1)
        Display(L);     //统计所有班级所有学生
    if(x == 2)
        DisplayClass(L, S);//统计某个班级所有学生
}
void PersonalFind(List *L) //个人成绩查询
{
    char Number[20];
    int  i, flag = 0;
    printf("\n\n\t\t\t请输入学生的学号: ");
    scanf("%s", Number);
    getchar();
    for(i = 0; i < L->count; i++)
    {
        if(strcmp(L->Student[i].Number, Number) == 0)
        {
            flag = 1;
            break;
        }
    }
    if(flag == 0)
    {
        printf("\n\n\t\t\t没有该学号的学生!\n");
        return;
    }
    //输出此人信息
    printf("\n\n\t\t\t班级: %s\n", L->Student[i].Class);
    printf("\n\n\t\t\t学号: %s\n", L->Student[i].Number);
    printf("\n\n\t\t\t姓名: %s\n", L->Student[i].Name);
    printf("\n\n\t\t\t学期: %d\n", L->Student[i].term);
    printf("\n\n\t\t\t课程: %d\n", L->Student[i].Subject);
    printf("\n\n\t\t\t分数: %d\n", L->Student[i].Score);
}
void Find(List *L, ClassInfor *S)//成绩查询函数块
{
    int x;
    printf("\n\n\t\t\t1.个人成绩查询\n");
    printf("\n\n\t\t\t2.班级成绩查询\n");
    printf("\n\n\t\t\t请输入操作: ");
    scanf("%d", &x);
    getchar();
    switch(x)
    {
    case 1:
        PersonalFind(L);//个人成绩查询
        break;
    case 2:
        DisplayClass(L,S);//ClassFind(L, S);//班级成绩查询
        break;
    }
}
void main(){
    int i, j=0;
    List L;     //修改
    L.count = 0;//修改
    while(j==0){
        printf("请选择功能:\n");
        printf("\t1.成绩录入\t2.成绩修改\t3.学生信息删除\t4.统计\t5.成绩查询\t6.学生成绩显示\n");
        scanf("%d",&i);
        getchar();
        switch(i) {
            case 1:
                Insert(&L,S);break; //修改
            case 2:
                Change(&L,S);break;
            case 3:
                Delete(&L,S);break;
            case 4:
                Search(&L,S);break;
            case 5:
                Find(&L,S);  break;
            case 6:
                Display(&L); break;
            default:         break;
        }
        printf("退出请按1,继续请按0。\n");
        scanf("%d",&j);
        getchar();
        if(j==1){
            break;
        }
    }
}