运用C语言增删查改学生列表

运用C语言班级成绩该系统实现对班级成绩的录入、显示、修改、
排序、保存等操作的管理。

修改及完善之后代码(已测试)参考如下:

#include<stdio.h>
#include <stdlib.h>
#include <string.h>
#define N 5 // 方便以后修改班级人数
#pragma warning(disable:4996)
typedef struct score {
    int math;//
    int English;//
}SCO;
typedef struct student {
    int sid;//学号
    char sName[10];//姓名
    SCO score;//成绩
}STU;
typedef struct Class {
    STU num[N];    //定义一个班级学生结构体数组
    int count;     //记录学生个数
}CLASS;
 
void Menu();//起始菜单
void menu1();//输入学生信息与退出菜单
void ADD(CLASS* p);//录入函数
void SEE(CLASS* p);//全部显示函数
void SELID(CLASS* p);//根据学号查询函数
void SELNAME(CLASS* p);//根据姓名查询函数
void MOD(CLASS* p);//根据学号修改信息函数
 
void Menu() {
    printf("-----------------------------------------\n");
    printf("| *************学生管理系统************* |\n");
    printf("| 1. 学生成绩录入 2. 显示所有学生信息    |\n");
    printf("| 3. 学生成绩查询 4.学生成绩降序排列     |\n");
    printf("| 5. 学生成绩修改 6. 统计各种学生信息    |\n");
    printf("| ***************7.退出***************** |\n");
    printf("-----------------------------------------\n");
}
 
 
void menu1() {
    printf("-------------1.输入学生信息--------------\n");
    printf("-------------2.返回上一级----------------\n");
}
 
void menu2() {
    printf("-------------1.输入学号查询--------------\n");
    printf("-------------2.输入姓名查询--------------\n");
    printf("-------------3.返回上一级----------------\n");
}
 
void menu3() {
    printf("-------------1.输入密码------------------\n");
    printf("-------------2.返回上一级----------------\n");
 
}
void menu4() {
    printf("-------------1.数学成绩降序排序-----------\n");
    printf("-------------2.英语成绩降序排序-----------\n");
    printf("-------------3.返回上一级----------------\n");
 
}
void ADD(CLASS* p) {
    if (p->count == N) {
        printf("班级已满,无法插入\n");
        return;
    }
    STU temp;
    printf("学号  姓名 数学成绩  英语成绩\n");
    rewind(stdin);
    scanf("%d %s %d %d", &temp.sid, temp.sName,
                        &temp.score.math, &temp.score.English);
    p->num[p->count] = temp;
    printf("插入成功\n");
    getchar();
    p->count++;
     
}
 
 
void SEE(CLASS* p) {
    int i = 0;
    printf("当前班级学生信息如下:\n");
    printf("学号  姓名  数学成绩  英语成绩\n");
    for (i = 0; i < p->count; i++) {
        printf("%d   %s      %d     %d\n", p->num[i].sid, p->num[i].sName,
                            p->num[i].score.math, p->num[i].score.English);
    }
    return;
}
 
void SELID(CLASS* p) {
    int i;
    STU temp;
    rewind(stdin);
    scanf("%d", &temp.sid);
    printf("该学生信息如下:\n");
    printf("学号  姓名  数学成绩  英语成绩\n");
    for (i = 0; i < p->count; i++) {
        if (p->num[i].sid == temp.sid) {
            printf("  %d   %s   %d   %d\n", p->num[i].sid, p->num[i].sName,
                                p->num[i].score.math, p->num[i].score.English);
 
        }
    }
    if (i == p->count) {
        printf("该学生不存在。\n");
    }
    return;
 
}
void SELNAME(CLASS* p) {
    int i;
    STU temp;
    rewind(stdin);
    scanf("%s", temp.sName);
    printf("该学生信息如下:\n");
    printf("学号  姓名  数学成绩  英语成绩\n");
    for (i = 0; i < p->count; i++) {
        if (strcmp(p->num[i].sName,temp.sName)==0) {
            printf("  %d   %s   %d   %d\n", p->num[i].sid, p->num[i].sName,
                p->num[i].score.math, p->num[i].score.English);
 
        }
    }
    if (i == p->count) {
        printf("该学生不存在。\n");
    }
    return;
}
 
void MOD(CLASS* p) {
    printf("请输入你想修改的学生学号\n");
    int temp;
    scanf("%d", &temp);
    int i, flag = 0;
    for (i = 0; i < p->count; i++) {
        if (temp == p->num[i].sid) {
            flag = 1;
            printf("学生当前信息如下:\n");
            printf("学号  姓名  数学成绩  英语成绩\n");
            printf("%d   %s   %d   %d\n", p->num[i].sid, p->num[i].sName,
                p->num[i].score.math, p->num[i].score.English);
            printf("请修改\n");
            scanf("%d %s %d %d", &p->num[i].sid, p->num[i].sName,
                &p->num[i].score.math, &p->num[i].score.English);
            printf("修改成功!\n");
            return;
        }
    }
    if (flag == 0) {
        printf("学号输入有误,该学生不存在\n");
        return;
    }
}
// 排序
void SORT(CLASS *p, int type) {
    for (int i = 0; i < p->count - 1; i++) {
        for (int j = i + 1; j < p->count; j++) {
            if (type == 1) {
                if (p->num[i].score.math < p->num[j].score.math) {
                    STU temp = p->num[i];
                    p->num[i] = p->num[j];
                    p->num[j] = temp;
                }
            } else if (type == 2) {
                if (p->num[i].score.English < p->num[j].score.English) {
                    STU temp = p->num[i];
                    p->num[i] = p->num[j];
                    p->num[j] = temp;
                }
            }
        }
    }
    printf("完成按学号降序排序\n");
    return;
}
// 统计
// 1)显示每门课程成绩最高的学生的基本信息
// 2)显示每门课程的平均成绩
// 3)显示超过某门课程平均成绩的学生人数
void STAT(CLASS *p) {
    if (p->count == 0) {
        printf("暂无学生\n");
        return;
    }
    STU mMax = p->num[0]; // 数学成绩最高学生
    STU eMax = p->num[0]; // 英语成绩最高学生
    int mSum = 0; // 数学总成绩
    int eSum = 0; // 英语总成绩
    for (int i = 1; i < p->count; i++) {
        if (p->num[i].score.math > eMax.score.math) {
            mMax = p->num[i];
        }
        if (p->num[i].score.English > eMax.score.English) {
            eMax = p->num[i];
        }
        mSum += p->num[i].score.math;
        eSum += p->num[i].score.English;
    }
    float mAvg = 1.0 * mSum / p->count;
    float eAvg = 1.0 * mSum / p->count;
    int mUpAvgCount = 0; // 高于数学平均成绩人数
    int eUpAvgCount = 0; // 高于英语平均成绩人数
    for (int i = 0; i < p->count; i++) {
        if (p->num[i].score.math > mAvg) {
            mUpAvgCount++;
        }
        if (p->num[i].score.English > eAvg) {
            eUpAvgCount++;
        }
    }
    // 数学成绩统计
    printf("数学成绩统计如下:\n");
    printf("数学成绩最高学生信息如下:\n");
    printf("学号  姓名  数学成绩  英语成绩\n");
    printf("%d   %s   %d   %d\n", mMax.sid, mMax.sName,
           mMax.score.math, mMax.score.English);
    printf("数学成绩平均分:%.2f\n", mAvg);
    printf("数学成绩平均分以上学生人数:%.d个\n", mUpAvgCount);
    // 英语成绩统计
    printf("英语成绩统计如下:\n");
    printf("英语成绩最高学生信息如下:\n");
    printf("学号  姓名  数学成绩  英语成绩\n");
    printf("%d   %s   %d   %d\n", eMax.sid, eMax.sName,
           eMax.score.math, eMax.score.English);
    printf("英语成绩平均分:%.2f\n", eAvg);
    printf("英语成绩平均分以上学生人数:%.d个\n", eUpAvgCount);
    return;
}
 
int main(int argc, const char* argv[])
{
    CLASS hq51;//用结构体申请变量空间,系统分配相应内存
    hq51.count = 0;//初始化学生个数
    int choose, choose1;
    int code;//密码为123456
    while (1) {
        Menu();
        rewind(stdin);
        scanf("%d", &choose);
        switch (choose) {
        case 1:
            while (1) {
                menu1();
                rewind(stdin);
                scanf(" %d", &choose1);
                if (choose1 == 2) {
                    break;
                }
                switch (choose1) {
                case 1:
                    ADD(&hq51);
                    break;
                default:
                    printf("输入错误,请重新输入\n");
                    break;
                }
            }
            break;
 
        case 2:
            SEE(&hq51);
            break;
 
        case 3:
            while (1) {
                menu2();
                rewind(stdin);
                scanf(" %d", &choose1);
                if (choose1 == 3) {
                    printf("choose1 == 3");
                    break;
                }
                switch (choose1) {
                case 1:
                    SELID(&hq51);
                    break;
                case 2:
                    SELNAME(&hq51);
                    break;
                default:
                    printf("输入错误,请重新输入\n");
                    break;
                }
            }
            break;
        case 4:
            while (1) {
                menu4();
                rewind(stdin);
                scanf(" %d", &choose1);
                if (choose1 == 3) {
                    printf("choose1 == 3");
                    break;
                }
                switch (choose1) {
                case 1:
                    SORT(&hq51, 1);
                    break;
                case 2:
                    SORT(&hq51, 2);
                    break;
                default:
                    printf("输入错误,请重新输入\n");
                    break;
                }
            }
            break;
        case 5:
            while (1) {
                menu3();
                rewind(stdin);
                scanf(" %d", &choose1);
                if (choose1 == 2) {
                    break;
                }
                switch (choose1) {
                case 1:
                    rewind(stdin);
                    scanf("%d", &code);
                    if (code == 123456) {
                        printf("密码输入正确\n");
                        MOD(&hq51);
                    }
                    else {
                        printf("密码输入错误\n");
                    }
                    break;
                default:
                    printf("输入错误,请重新输入\n");
                    break;
                }
            }
            break;
        case 6:
            STAT(&hq51);
            break;
        case 7:
            exit(0);
            break;
 
        default:
            printf("输入有误,程序退出\n");
            exit(-1);
 
        }
        system("cls");
    }
    return 0;
}

完整程序

麻烦查收一下

#include<stdio.h>
#include <stdlib.h>
#include <string.h>
#define N 2 //方便以后修改班级人数
#define M 2 //方便以后修改班级人数
#pragma warning(disable:4996)
typedef struct score {
    int math;//
    int English;//
}SCO;
typedef struct student {
    int sid;//学号
    char sName[10];//姓名
    SCO score[M];//成绩
}STU;
typedef struct Class {
    STU num[N];    //定义一个班级学生结构体数组
    int count;    //记录学生个数
}CLASS;
 
void Menu();//起始菜单
void menu1();//输入学生信息与退出菜单
void ADD(CLASS* p);//录入函数
void SEE(CLASS* p);//全部显示函数
void SELID(CLASS* p);//根据学号查询函数
void SELNAME(CLASS* p);//根据姓名查询函数
void MOD(CLASS* p);//根据学号修改信息函数
 
void Menu() {
    printf("-----------------------------------------\n");
    printf("| *************学生管理系统************* |\n");
    printf("| 1. 学生成绩录入 2. 显示所有学生信息    |\n");
    printf("| 3. 学生成绩查询 4.学生成绩降序排列     |\n");
    printf("| 5. 学生成绩修改 6. 统计各种学生信息    |\n");
    printf("| ***************7.退出***************** |\n");
    printf("-----------------------------------------\n");
}
 
 
void menu1() {
    printf("-------------1.输入学生信息--------------\n");
    printf("-------------2.返回上一级----------------\n");
}
 
void menu2() {
    printf("-------------1.输入学号查询--------------\n");
    printf("-------------2.输入姓名查询--------------\n");
    printf("-------------3.返回上一级----------------\n");
}
 
void menu3() {
    printf("-------------1.输入密码------------------\n");
    printf("-------------2.返回上一级----------------\n");
 
}

void menu4() {
    printf("-------------1.显示每门课程最高的学生基本信息------------------\n");
    printf("-------------2.显示每门课程的平均成绩----------------\n");
    printf("-------------3.显示超过数学课程平均成绩的学生人数----------------\n");
    printf("-------------4.显示超过英语课程平均成绩的学生人数----------------\n");
    printf("-------------5.返回上一级----------------\n");
}

void ADD(CLASS* p) {
 
    
    if (p->count == N) {
        printf("班级已满,无法插入\n");
        return;
    }
        STU temp;
    printf("学号  姓名 数学成绩 英语成绩\n");
    rewind(stdin);
    scanf("%d %s %d %d", &p->num[p->count].sid, &p->num[p->count].sName,
                        &p->num[p->count].score->math, &p->num[p->count].score->English);
    printf("插入成功\n");
    getchar();
    p->count++;
     
}

void BubbleSortMath(CLASS* cl){
    STU * num  = cl->num;
    int count = cl->count;
    STU temp = {0};
    
    //  以math成绩排序
    for(int i=0;i<count-1;i++){
        for(int j=1;j<count-i;j++){
            if((num+i)->score->math < (num+j)->score->math ){ // 交换 
                temp = *(num+i);
                *(num+i)= *(num+j);
                *(num+j)= temp;
            }
        }
    } 
}

void BubbleSortEnglish(CLASS* cl){
    STU * num  = cl->num;
    int count = cl->count;
    STU temp = {0};
    
    //  以English成绩排序
    for(int i=0;i<count-1;i++){
        for(int j=1;j<count-i;j++){
            if((num+i)->score->English < (num+j)->score->English ){ // 交换 
                temp = *(num+i);
                *(num+i)= *(num+j);
                *(num+j)= temp;
            }
        }
    } 
}

float GetMathAver(CLASS* cl) {
    STU * num  = cl->num;
    int count = cl->count;
    float sum = 0;
    
    // 计算数学平均成绩 
    for(int i=0;i<count;i++){
        sum += (num+i)->score->math;
    } 
    
    return sum /count;
}

float GetEnglishAver(CLASS* cl) {
    STU * num  = cl->num;
    int count = cl->count;
    float sum = 0;
    
    // 计算数学平均成绩 
    for(int i=0;i<count;i++){
        sum += (num+i)->score->English;
    } 
    return sum /count;
}
 
 
void SEE(CLASS* p) {
    int i = 0;
    printf("当前班级学生信息如下:\n");
    printf("学号  姓名 数学成绩 英语成绩\n");
    for (i = 0; i < p->count; i++) {
        printf("  %d   %s      %d     %d\n", p->num[i].sid, p->num[i].sName,
                            p->num[i].score->math, p->num[i].score->English);
    }
    return;
}
 
void SELID(CLASS* p) {
    int i;
    STU temp;
    rewind(stdin);
    scanf("%d", &temp.sid);
    getchar();
    printf("该学生信息如下:\n");
    printf("学号  姓名 数学成绩 英语成绩\n");
    for (i = 0; i < p->count; i++) {
        if (p->num[i].sid == temp.sid) {
            printf("  %d   %s      %d     %d\n", p->num[i].sid, p->num[i].sName,
                                p->num[i].score->math, p->num[i].score->English);
            break;
 
        }
    }
    if( i== p->count){
        printf("该学生不存在。\r\n");
    }
    return;
 
}
void SELNAME(CLASS* p) {
    int i;
    STU temp;
    rewind(stdin);
    scanf("%s", temp.sName);
    getchar();
    printf("该学生信息如下:\n");
    printf("学号  姓名 数学成绩 英语成绩\n");
    for (i = 0; i < p->count; i++) {
        if (strcmp(p->num[i].sName,temp.sName)==0) {
            printf("  %d   %s      %d     %d\n", p->num[i].sid, p->num[i].sName,
                p->num[i].score->math, p->num[i].score->English);
            break;
 
        }
    }
    if( i== p->count){
        printf("该学生不存在。\r\n");
    }
    return;
 
}
 
void MOD(CLASS* p) {
    printf("请输入你想修改的学生学号\n");
    int temp;
    scanf("%d", &temp);
    int i, flag = 0;
    for (i = 0; i < p->count; i++) {
        if (temp == p->num[i].sid) {
            flag = 1;
            printf("学生当前信息如下:\n");
            printf("学号  姓名 数学成绩 英语成绩\n");
            printf("  %d   %s      %d     %d\n", p->num[i].sid, p->num[i].sName,
                p->num[i].score->math, p->num[i].score->English);
            printf("请修改\n");
            scanf("%d %s %d %d", &p->num[i].sid, p->num[i].sName,
                &p->num[i].score->math, &p->num[i].score->English);
            printf("修改成功!\n");
            break;
        }
    }
    if (flag == 0) {
        printf("学号输入有误,该学生不存在\n");
        return;
    }
}
 
int main(int argc, const char* argv[])
{
    CLASS hq51;//用结构体申请变量空间,系统分配相应内存
    hq51.count = 0;//初始化学生个数
    int choose, choose1,choose2;
    int code;//密码为123456
    float aver = 0;
    STU * num = NULL;
    int count = 0;
    int Num = 0;
    while (1) {
        Menu();
        rewind(stdin);
        scanf("%d", &choose);
        getchar();
        switch (choose) {
 
        case 1:
            while (1) {
                menu1();
                rewind(stdin);
                scanf(" %d", &choose1);
                getchar();
                if (choose1 == 2) {
                    break;
                }
                switch (choose1) {
                case 1:
                    ADD(&hq51);
                    break;
                default:
                    printf("输入错误,请重新输入\n");
                    break;
                }
            }
            break;
 
        case 2:
            SEE(&hq51);
            getchar();
            break;
 
        case 3:
            while (1) {
                menu2();
                rewind(stdin);
                scanf("%d", &choose1);
                getchar();
                if (choose1 == 3) {
                    printf("choose1 == 3");
                    break;
                }
                switch (choose1) {
                case 1:
                    SELID(&hq51);
                    break;
                case 2:
                    SELNAME(&hq51);
                    break;
                default:
                    printf("输入错误,请重新输入\n");
                    break;
                }
            }
            break;
        case 4:
            printf("**--按数学成绩降序--**\r\n");
            BubbleSortMath(&hq51);
            SEE(&hq51);
            printf("*******************************\r\n");
            printf("**--按英语成绩降序--**\r\n");
            BubbleSortEnglish(&hq51);
            SEE(&hq51);
            getchar();
            break;
 
        case 5:
            while (1) {
                menu3();
                rewind(stdin);
                scanf(" %d", &choose1);
                getchar();
                if (choose1 == 2) {
                    break;
                }
                switch (choose1) {
                case 1:
                    rewind(stdin);
                    scanf(" %d", &code);
                    getchar();
                    if (code == 123456) {
                        printf("密码1输入正确\n");
                        MOD(&hq51);
                    }
                    else {
                        printf("密码输入错误\n");
                    }
                    break;
                default:
                    printf("输入错误,请重新输入\n");
                    break;
                }
            }
            break;
        case 6:
             while (1) {
                menu4();
                rewind(stdin);
                scanf(" %d", &choose1);
                getchar();
                if (choose1 == 5) {
                    break;
                }
                switch (choose1) {
                case 1:
                    STU stuinfo;
                    printf("课程最高成绩信息统计:\r\n");
                    printf("**--数学成绩最高学生信息--**\r\n");
                    BubbleSortMath(&hq51);
                    stuinfo = hq51.num[0];
                    printf("  %d   %s      %d     %d\n", stuinfo.sid, stuinfo.sName,
                    &stuinfo.score->math,&stuinfo.score->English);
                    printf("*******************************\r\n");
                    printf("**--英语成绩最高学生信息--**\r\n");
                    BubbleSortEnglish(&hq51);
                    stuinfo = hq51.num[0];
                    printf("  %d   %s      %d     %d\n", stuinfo.sid, stuinfo.sName,
                    &stuinfo.score->math,&stuinfo.score->English);
                    getchar();
                    break;
                case 2:
                    
                    printf("课程平均成绩统计:\r\n");
                    aver = GetMathAver(&hq51);
                    printf("数学课程平均成绩:\t %.2f\r\n",aver);
                    printf("*******************************\r\n");
                    aver = GetEnglishAver(&hq51);
                    printf("英语课程平均成绩:\t %.2f\r\n",aver);
                    getchar(); 
                    break;
                case 3:
                    aver = GetMathAver(&hq51);
                    num  = (&hq51)->num;
                    count = (&hq51)->count;
                    Num = 0;
                    
                    // 计算超过数学平均成绩 的人数 
                    for(int i=0;i<count;i++){
                        if( (num+i)->score->math >aver)  Num++;
                    } 
                    printf("超过数学平均成绩的人数:\t%d\r\n",Num);
                    getchar();
                    break;
                case 4:
                    aver = GetEnglishAver(&hq51);
                    num  = (&hq51)->num;
                    count = (&hq51)->count;
                    Num = 0;
                    
                    // 计算超过英语平均成绩 的人数 
                    for(int i=0;i<count;i++){
                        if( (num+i)->score->English >aver)  Num++;
                    } 
                    printf("超过英语平均成绩的人数:\t%d\r\n",Num);
                    getchar();
                    break;
                default:
                    printf("输入错误,请重新输入\n");
                    break;
                }
            }
            break;
        case 7:
            exit(0);
            break;
 
        default:
            printf("输入有误,程序退出\n");
            exit(-1);
 
        }
        system("cls");
    }
    return 0;
 
}