诗岑 2022-06-18 14:19 采纳率: 93%
浏览 483
已结题

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

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

1条回答 默认 最新

  • qzjhjxj 2022-06-19 00:53
    关注

    修改完善如下,供参考:

    #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;
            }
        }
    }
    
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

问题事件

  • 系统已结题 7月3日
  • 已采纳回答 6月25日
  • 创建了问题 6月18日

悬赏问题

  • ¥15 安卓adb backup备份应用数据失败
  • ¥15 eclipse运行项目时遇到的问题
  • ¥15 关于#c##的问题:最近需要用CAT工具Trados进行一些开发
  • ¥15 南大pa1 小游戏没有界面,并且报了如下错误,尝试过换显卡驱动,但是好像不行
  • ¥15 没有证书,nginx怎么反向代理到只能接受https的公网网站
  • ¥50 成都蓉城足球俱乐部小程序抢票
  • ¥15 yolov7训练自己的数据集
  • ¥15 esp8266与51单片机连接问题(标签-单片机|关键词-串口)(相关搜索:51单片机|单片机|测试代码)
  • ¥15 电力市场出清matlab yalmip kkt 双层优化问题
  • ¥30 ros小车路径规划实现不了,如何解决?(操作系统-ubuntu)