喝可乐的喵 2022-06-23 16:41 采纳率: 33.3%
浏览 106
已结题

《有偿》求个C语言代码 要求如下

img


设计并实现一个成绩管理系统,该系统用于教师管理一门课程的成绩。~
系统功能:成绩录入、打印成绩单、修改成绩、统计分数段、统计平均分、统计不及格学生
1) 系统要有主菜单界面,让教师了解系统的功能,以及如何选择系统功能。
2) 系统应该能够让教师自由选择并完成成绩录入、打印成绩单、修改成绩、统
计分数段、统计平均分、统计不及格学生等项目中的任何一项或多项工作。

  • 写回答

3条回答 默认 最新

  • it_hao528 2022-06-23 20:28
    关注

    使用数组存储的简单实现如下:

    #include <stdio.h>
    #include <string.h>
    #include <stdlib.h>
    
    typedef struct Student {
        
        int stuId;     // 学号
        char name[20]; // 姓名
        float score;   // 成绩
    }STU;
    
    int n;  // 学生数
    STU stus[1000]; // 数组存储学生
    
    int main(int argc, const char * argv[]) {
        
        n = 0;
        int flag = 1;
        while (flag) {
            
            menu();
            int o;
            scanf("%d", &o);
            switch (o) {
                case 1:
                {
                    insertData();
                }
                    break;
                case 2:
                {
                    printScores();
                }
                    break;
                case 3:
                {
                    updateData();
                }
                    break;
                case 4:
                {
                    printScoreRange();
                }
                    break;
                case 5:
                {
                    printScoreAvg();
                }
                    break;
                case 6:
                {
                    printScoreLower();
                }
                    break;
                case 0:
                {
                    flag = 0;
                }
                    break;
                default:
                {
                    printf("请正确输入选项~\n");
                }
                    break;
            }
        }
    }
    // 菜单
    void menu(void) {
        
        printf("========== 成绩管理系统 ==========\n");
        printf(" 成绩录入: 1                \n");
        printf(" 打印成绩单: 2                \n");
        printf(" 修改成绩: 3                \n");
        printf(" 统计分数段: 4                \n");
        printf(" 统计平均分: 5                \n");
        printf(" 统计不及格: 6                \n");
        printf(" 退出程序: 0                \n");
        printf("---------------------------------\n");
        printf("请输入操作选项:");
    }
    
    void insertData(void) {
        
        printf("========== 成绩录入 ==========\n");
        printf("请输入学生信息(学号 姓名 成绩)\n");
        STU st;
        scanf("%d %s %f", &st.stuId, st.name, &st.score);
        stus[n] = st;
        n++;
    }
    
    void updateData(void) {
        
        int f = 1;
        while (f) {
            
            printf("========== 修改成绩 ==========\n");
            printf("通过学号查找修改: 1            \n");
            printf("通过姓名查找修改: 2            \n");
            printf("-----------------------------\n");
            printf("请输入操作选项:");
            int op;
            scanf("%d", &op);
            switch (op) {
                case 1:
                {
                    printf("请输入学号:");
                    int stuId;
                    scanf("%d", &stuId);
                    STU s = selectById(stuId);
                    if (s.stuId == -1) {
    
                        printf("未找到该学生,继续查找请输入:1\n");
                        int o;
                        scanf("%d", &o);
                        if (o != 1) {
                            
                            f = 0;
                        }
                    } else {
                        
                        printf("请输入新的成绩:");
                        float score;
                        scanf("%f", &score);
                        s.score = score;
                        printf("成绩修改成功~\n");
                        f = 0;
                    }
                }
                    break;;
                case 2:
                {
                    printf("请输入姓名:");
                    char name[20];
                    scanf("%s", name);
                    STU s = selectByName(name);
                    if (s.stuId == -1) {
    
                        printf("未找到该学生,继续查找请输入:1\n");
                        int o;
                        scanf("%d", &o);
                        if (o != 1) {
                            
                            f = 0;
                        }
                    } else {
                        
                        printf("请输入新的成绩:");
                        float score;
                        scanf("%f", &score);
                        s.score = score;
                        printf("成绩修改成功~\n");
                        f = 0;
                    }
                }
                    break;
                default:
                {
                    printf("请正确输入选项~\n");
                }
                    break;
            }
        }
    }
    
    STU selectById(int stuId) {
        
        for (int i = 0; i < n; i++) {
            
            STU s = stus[i];
            if (s.stuId == stuId) {
                
                return s;
            }
        }
        STU st;
        st.stuId = -1;
        return st;
    }
    
    STU selectByName(char name[20]) {
        
        for (int i = 0; i < n; i++) {
            
            STU s = stus[i];
            if (strcmp(s.name, name) == 0) {
                
                return s;
            }
        }
        STU st;
        st.stuId = -1;
        return st;
    }
    
    void printScores(void) {
        
        printf("========== 成绩单 ==========\n");
        printf("学号  姓名  成绩\n");
        for (int i = 0; i < n; i++) {
            
            STU s = stus[i];
            printf("%d  %s  %.2f\n", s.stuId, s.name, s.score);
        }
    }
    
    void printScoreRange(void) {
        
        printf("========== 成绩分数段 ==========\n");
        if (n < 1) {
            
            printf("还没有录入学生信息\n");
            return;
        }
        float min = stus[0].score;
        float max = stus[0].score;
        for (int i = 1; i < n; i++) {
            
            STU s = stus[i];
            if (min > s.score) {
                
                min = s.score;
            }
            if (max < s.score) {
                
                max = s.score;
            }
        }
        printf("最低分:%.2f\n最高分:%.2f\n", min, max);
    }
    
    void printScoreAvg(void) {
        
        printf("========== 成绩平均分 ==========\n");
        if (n < 1) {
            
            printf("还没有录入学生信息\n");
            return;
        }
        float sum = 0;
        for (int i = 0; i < n; i++) {
            
            STU s = stus[i];
            sum += s.score;
        }
        printf("平均分:%.2f\n", sum / n);
    }
    
    void printScoreLower(void) {
        
        printf("========== 不及格名单 ==========\n");
        printf("学号  姓名  成绩\n");
        for (int i = 0; i < n; i++) {
            
            STU s = stus[i];
            if (s.score < 60) {
                
                printf("%d  %s  %.2f\n", s.stuId, s.name, s.score);
            }
        }
    }
    

    希望能帮到你

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(2条)

报告相同问题?

问题事件

  • 系统已结题 7月1日
  • 已采纳回答 6月23日
  • 创建了问题 6月23日

悬赏问题

  • ¥40 如果update 一个列名为参数的value
  • ¥15 基于51单片机的水位检测系统设计中LCD1602一直不显示
  • ¥15 OCS2安装出现问题,请大家给点意见
  • ¥15 有没有大能能帮我出个适应度函数图,T_T
  • ¥15 ros小车启动launch文件报错
  • ¥15 vs2015到期想登陆但是登陆不上
  • ¥15 IPQ5018制作烧录固件,boot运行失败(操作系统-linux)(相关搜索:操作系统)(相关搜索:操作系统)
  • ¥20 icefall在librispeech基础上加入个人数据集
  • ¥30 keepalive高可用故障运维配置询问
  • ¥15 求帮助!国家电网内网u盘突然识别不出来了。