什么都不会牙 2022-07-10 19:49 采纳率: 50%
浏览 58
已结题

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

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

  • 写回答

2条回答 默认 最新

  • it_hao528 2022-07-10 21:23
    关注

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

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

报告相同问题?

问题事件

  • 系统已结题 7月19日
  • 已采纳回答 7月11日
  • 修改了问题 7月10日
  • 修改了问题 7月10日
  • 展开全部

悬赏问题

  • ¥15 基于卷积神经网络的声纹识别
  • ¥15 Python中的request,如何使用ssr节点,通过代理requests网页。本人在泰国,需要用大陆ip才能玩网页游戏,合法合规。
  • ¥100 为什么这个恒流源电路不能恒流?
  • ¥15 有偿求跨组件数据流路径图
  • ¥15 写一个方法checkPerson,入参实体类Person,出参布尔值
  • ¥15 我想咨询一下路面纹理三维点云数据处理的一些问题,上传的坐标文件里是怎么对无序点进行编号的,以及xy坐标在处理的时候是进行整体模型分片处理的吗
  • ¥15 CSAPPattacklab
  • ¥15 一直显示正在等待HID—ISP
  • ¥15 Python turtle 画图
  • ¥15 stm32开发clion时遇到的编译问题