某班有最多不超过30人(具体人数由实际输入决定)参加期末考试,最多不超过6门(具体门数由实际输入决定)。

这篇具有很好参考价值的文章主要介绍了某班有最多不超过30人(具体人数由实际输入决定)参加期末考试,最多不超过6门(具体门数由实际输入决定)。。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

某班有最多不超过30人(具体人数由实际输入决定)参加期末考试,最多不超过6门(具体门数由实际输入决定)。学生成绩管理系统是一个非常实用的程序,如果能够提前学习字符文件读写操作,把用户输入的数据存盘为字符文件,下次运行时读出,就更有用了。即编程实现如下菜单驱动的学生成绩管理系统:

(1)录入学生的学号、姓名和各科考试成绩;

(2)计算每门课程的总分和平均分;

(3)计算每个学生的总分和平均分;

(4)按每个学生的总分由高到低排出名次表;

(5)按每个学生的总分由低到高排出名次表;

(6)按学号由小到大输出成绩表;

(7)按姓名的字典顺序输出成绩表;

(8)按学号查询学生排名及其考试成绩;

(9)按姓名查询学生排名及其考试成绩;

(10)按优秀(90~100)、良好(80~89)、中等(70~79)、及格(60~69)、不及格(0~59)5个类别,对每门课程分别统计每个类别的人数以及所占的百分比;

(11)输出每个学生的学号、姓名、各科考试成绩,以及每门课程的总分和平均分;

(12)将每个学生的记录信息写入文件(可选实现);

(13)从文件中读出每个学生的记录信息并显示(可选实现)。

要求程序在输入课程门数以及所有课程名称后,先显示如下菜单,并提示用户输入选项:

1.Input record

2.Calculate total and average score of every course

3.Calculate total and average score of every student

4.Sort in descending order by total score of every student

5.Sort in ascending order by total score of every student

6.Sort in ascending order by number

7.Sort in dictionary order by name

8.Search by number

9.Search by name

10.Statistic analysis for every course

11.List record

12.Write to a file

13.Read from a file

0.Exit

Please enter your choice:

然后,根据用户输入的选项执行相应的操作。

注意:12. 13.两项不要求必须实现的。 

提示:由于数据输入量较大,而文件操作在同学们完成此次实验(大作业)阶段尚未系统学习,故在不实现12.13.两个菜单项的情况下,为方便程序调试,建议在源程序中采用数组元素初始化的形式提供6-10名学生的数据,以保证程序可以运行调试:

  1. m门课程名称采用字符串数组(字符指针数组)元素初始化;
  2. 采用数组元素初始化方式在源程序中提供6-10位学生的全部信息,每位学生的信息包括姓名、学号以及m门课程成绩(比如:数组长度30,定义数组时初始化前10个元素值);
  3. 程序运行时,选择第1个菜单项录入一个学生的成绩后,相当于学生人数增加1人; 
  4. 若选择采用链表实现学生信息的存储,则程序首先将已初始化的数组元素复制到链表实现链式存储后,再启动菜单。
    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
    #define MAX_LEN 10  //* 字符串最大长度 //
    #define STU_NUM 30  //最多的学生人数 //
    #define COURSE_NUM 6 // 最多的考试科目数 *//
    int Menu(void);
    void ReadScore(long num[], char name[][MAX_LEN],
                   float score[][COURSE_NUM], int n, int m);
    void AverSumofEveryStudent(float score[][COURSE_NUM], int n, int m,
                               float sum[STU_NUM], float aver[STU_NUM]);
    void AverSumofEveryCourse(float score[][COURSE_NUM], int n, int m);
    void SortbyScore(long num[], char name[][MAX_LEN],
                     float score[][COURSE_NUM], float sum[], float aver[],
                     int n, int m, int (*compare)(float a, float b));
    int Ascending(float a, float b);
    int Descending(float a, float b);
    void SwapFloat(float *x, float *y);
    void SwapLong(long *x, long *y);
    void SwapChar(char x[], char y[]);
    void AsSortbyNum(long num[], char name[][MAX_LEN],
                     float score[][COURSE_NUM], float sum[], float aver[],
                     int n, int m);
    void SortbyName(long num[], char name[][MAX_LEN],
                    float score[][COURSE_NUM], float sum[], float aver[],
                    int n, int m);
    void SearchbyNum(long num[], char name[][MAX_LEN],
                     float score[][COURSE_NUM], float sum[], float aver[],
                     int n, int m);
    void SearchbyName(long num[], char name[][MAX_LEN],
                      float score[][COURSE_NUM], float sum[], float aver[],
                      int n, int m);
    void StatisticAnalysis(float score[][COURSE_NUM], int n, int m);
    void PrintScore(long num[], char name[][MAX_LEN],
                    float score[][COURSE_NUM], float sum[], float aver[],
                    int n, int m) ;
    int main()
    {
        char ch;
        int n = 0, m = 0;
        float score[STU_NUM][COURSE_NUM], sum[STU_NUM], aver[STU_NUM];
        long num[STU_NUM];
        char name[STU_NUM][MAX_LEN];
        printf("Input student number(n<30):\n", STU_NUM);
        scanf("%d", &n);
        while (1)
        {
            ch = Menu(); // 显示菜单,并读取用户输入 //
            switch (ch)
            {
            case 1:
                printf("Input course number(m<=%d):\n", COURSE_NUM);
                scanf("%d", &m);
                ReadScore(num, name, score, n, m);
                break;
            case 2:
                AverSumofEveryCourse(score, n, m);
                break;
            case 3:
                AverSumofEveryStudent(score, n, m, sum, aver);
                break;
            case 4:
                SortbyScore(num, name, score, sum, aver, n, m, Descending);
                printf("Sort in descending order by score:\n");
                PrintScore(num, name, score, sum, aver, n, m);
                break;
            case 5:
                SortbyScore(num, name, score, sum, aver, n, m, Ascending);
                printf("Sort in ascending order by score:\n");
                PrintScore(num, name, score, sum, aver, n, m);
                break;
            case 6:
                AsSortbyNum(num, name, score, sum, aver, n, m);
                printf("Sort in ascending order by number:\n");
                PrintScore(num, name, score, sum, aver, n, m);
                break;
            case 7:
                SortbyName(num, name, score, sum, aver, n, m);
                printf("Sort in dictionary order by name:\n");
                PrintScore(num, name, score, sum, aver, n, m);
                break;
            case 8:
                SearchbyNum(num, name, score, sum, aver, n, m);
                break;
            case 9:
                SearchbyName(num, name, score, sum, aver, n, m);
                break;
            case 10:
                StatisticAnalysis(score, n, m);
                break;
            case 11:
                PrintScore(num, name, score, sum, aver, n, m);
                break;
            case 0:
                printf("End of program!");
                exit(0);
            default:
                printf("Input error!\n");
            }
        }
        return 0;
    }
    // 函数功能:显示菜单并获得用户键盘输入的选项 //
    int Menu(void)
    {
        int itemSelected;
        printf("Management for Students’ scores\n");
        printf("1.Input record\n");
        printf("2.Caculate total and average score of every course\n");
        printf("3.Caculate total and average score of every student\n");
        printf("4.Sort in descending order by score\n");
        printf("5.Sort in ascending order by score\n");
        printf("6.Sort in ascending order by number\n");
        printf("7.Sort in dictionary order by name\n");
        printf("8.Search by number\n");
        printf("9.Search by name\n");
        printf("10.Statistic analysis\n");
        printf("11.List record\n");
        printf("0.Exit\n");
        printf("Please Input your choice:\n");
        scanf("%d", &itemSelected); // 读入用户输入 //
        return itemSelected;
    }
    // 函数功能:输入n个学生的m门课成绩 //
    void ReadScore(long num[], char name[][MAX_LEN],
                   float score[][COURSE_NUM], int n, int m)
    {
        int i, j;
        printf("Input student’s ID, name and score:\n");
        for (i = 0; i < n; i++)
        {
            scanf("%ld%s", &num[i], name[i]);
            for (j = 0; j < m; j++)
            {
                scanf("%f", &score[i][j]);
            }
        }
    }
    // 函数功能:计算每个学生各门课程的总分和平均分 //
    void AverSumofEveryStudent(float score[][COURSE_NUM], int n, int m,
                               float sum[STU_NUM], float aver[STU_NUM])
    {
        int i, j;
        for (i = 0; i < n; i++)
        {
            sum[i] = 0;
            for (j = 0; j < m; j++)
            {
                sum[i] = sum[i] + score[i][j];
            }
            aver[i] = m > 0 ? sum[i] / m : -1;
            printf("student %d:sum=%.0f,aver=%.0f\n", i + 1, sum[i], aver[i]);
        }
    }
    // 函数功能:计算每门课程的总分和平均分 //
    void AverSumofEveryCourse(float score[][COURSE_NUM], int n, int m)
    {
        int i, j;
        float sum[COURSE_NUM], aver[COURSE_NUM];
        for (j = 0; j < m; j++)
        {
            sum[j] = 0;
            for (i = 0; i < n; i++)
            {
                sum[j] = sum[j] + score[i][j];
            }
            aver[j] = n > 0 ? sum[j] / n : -1;
            printf("course %d:sum=%.0f,aver=%.0f\n", j + 1, sum[j], aver[j]);
        }
    }
    //函数功能:按选择法将数组sum的元素值排序 *//
    void SortbyScore(long num[], char name[][MAX_LEN],
                     float score[][COURSE_NUM], float sum[], float aver[],
                     int n, int m, int (*compare)(float a, float b))
    {
        int i, j, k, t;
        for (i = 0; i < n - 1; i++)
        {
            k = i;
            for (j = i + 1; j < n; j++)
            {
                if ((compare)(sum[j], sum[k])) k = j;
            }
            if (k != i)
            {
                for (t = 0; t < m; t++) //交换m门课程的成绩 //
                {
                    SwapFloat(&score[k][t], &score[i][t]);
                }
                SwapFloat(&sum[k], &sum[i]); // 交换总分 //
                SwapFloat(&aver[k], &aver[i]); // 交换平均分 //
                SwapLong(&num[k], &num[i]); // 交换学号 //
                SwapChar(name[k], name[i]); // 交换姓名 //
            }
        }
    }
    //使数据按升序排序 //
    int Ascending(float a, float b)
    {
        return a < b; // 这样比较决定了按升序排序,如果a<b,则交换 //
    }
    // 使数据按降序排序 //
    int Descending(float a, float b)
    {
        return a > b; // 这样比较决定了按降序排序,如果a>b,则交换 //
    }
    // 交换两个单精度浮点型数据 *//
    void SwapFloat(float *x, float *y)
    {
        float temp;
        temp = *x;
        *x = *y;
        *y = temp;
    }
    // 交换两个长整型数据 *//
    void SwapLong(long *x, long *y)
    {
        long temp;
        temp = *x;
        *x = *y;
        *y = temp;
    }
    //交换两个字符串 //
    void SwapChar(char x[], char y[])
    {
        char temp[MAX_LEN];
        strcpy(temp, x);
        strcpy(x, y);
        strcpy(y, temp);
    }
    // 函数功能:按选择法将数组num的元素值按从低到高排序 //
    void AsSortbyNum(long num[], char name[][MAX_LEN],
                     float score[][COURSE_NUM], float sum[], float aver[],
                     int n, int m)
    {
        int i, j, k, t;
        for (i = 0; i < n - 1; i++)
        {
            k = i;
            for (j = i + 1; j < n; j++)
            {
                if (num[j] < num[k]) k = j;
            }
            if (k != i)
            {
                for (t = 0; t < m; t++) // 交换m门课程的成绩 //
                {
                    SwapFloat(&score[k][t], &score[i][t]);
                }
                SwapFloat(&sum[k], &sum[i]); // 交换总分 //
                SwapFloat(&aver[k], &aver[i]); // 交换平均分 //
                SwapLong(&num[k], &num[i]); // 交换学号 //
                SwapChar(name[k], name[i]); // 交换姓名 //
            }
        }
    }
    // 函数功能:交换法实现字符串按字典顺序排序 //
    void SortbyName(long num[], char name[][MAX_LEN], float score[][COURSE_NUM],
                    float sum[], float aver[], int n, int m)
    {
        int i, j, t;
        for (i = 0; i < n - 1; i++)
        {
            for (j = i + 1; j < n; j++)
            {
                if (strcmp(name[j], name[i]) < 0)
                {
                    for (t = 0; t < m; t++) // 交换m门课程的成绩 //
                    {
                        SwapFloat(&score[i][t], &score[j][t]);
                    }
                    SwapFloat(&sum[i], &sum[j]); // 交换总分 //
                    SwapFloat(&aver[i], &aver[j]); // 交换平均分 //
                    SwapLong(&num[i], &num[j]); // 交换学号 //
                    SwapChar(name[i], name[j]); // 交换姓名 //
                }
            }
        }
    }
    // 函数功能:按学号查找学生成绩并显示查找结果 //
    void SearchbyNum(long num[], char name[][MAX_LEN],
                     float score[][COURSE_NUM], float sum[], float aver[],
                     int n, int m)
    {
        long number;
        int i, j;
        printf("Input the number you want to search:\n");
        scanf("%ld", &number);
        for (i = 0; i < n; i++)
        {
            if (num[i] == number)
            {
                printf("%ld\t%s\t", num[i], name[i]);
                for (j = 0; j < m; j++)
                {
                    printf("%.0f\t", score[i][j]);
                }
                printf("%.0f\t%.0f\n", sum[i], aver[i]);
                return;
            }
        }
        printf("Not found!\n");
    }
    // 函数功能:按姓名的字典顺序排出成绩表 //
    void SearchbyName(long num[], char name[][MAX_LEN],
                      float score[][COURSE_NUM], float sum[], float aver[],
                      int n, int m)
    {
        char x[MAX_LEN];
        int i, j;
        printf("Input the name you want to search:\n");
        scanf("%s", x);
        for (i = 0; i < n; i++)
        {
            if (strcmp(name[i], x) == 0)
            {
                printf("%ld\t%s\t", num[i], name[i]);
                for (j = 0; j < m; j++)
                {
                    printf("%.0f\t", score[i][j]);
                }
                printf("%.0f\t%.0f\n", sum[i], aver[i]);
                return;
            }
        }
        printf("Not found!\n");
    }
    // 函数功能:统计各分数段的学生人数及所占的百分比 //
    void StatisticAnalysis(float score[][COURSE_NUM], int n, int m)
    {
        int i, j, total, t[6];
        for (j = 0; j < m; j++)
        {
            printf("For course %d:\n", j + 1);
            memset(t, 0, sizeof(t)); // 将数组t的全部元素初始化为0 //
            for (i = 0; i < n; i++)
            {
                if (score[i][j] >= 0 && score[i][j] < 60) t[0]++;
                else if (score[i][j] < 70) t[1]++;
                else if (score[i][j] < 80) t[2]++;
                else if (score[i][j] < 90) t[3]++;
                else if (score[i][j] < 100) t[4]++;
                else if (score[i][j] == 100) t[5]++;
            }
            for (total = 0, i = 0; i <= 5; i++)
            {
                total = total + t[i];
            }
            for (i = 0; i <= 5; i++)
            {
                if (i == 0) printf("<60\t%d\t%.2f%%\n", t[i], (float)t[i] / n * 100);
                else if (i == 5) printf("%d\t%d\t%.2f%%\n", (i + 5) * 10, t[i], (float)t[i] / n * 100);
                else printf("%d-%d\t%d\t%.2f%%\n", (i + 5) * 10, (i + 5) * 10 + 9, t[i], (float)t[i] / n * 100);
            }
        }
    }
    // 函数功能: 打印学生成绩 *//
    void PrintScore(long num[], char name[][MAX_LEN],
                    float score[][COURSE_NUM], float sum[],
                    float aver[], int n, int m)
    {
        int i, j;
        for (i = 0; i < n; i++)
        {
            printf("%ld\t%s\t", num[i], name[i]);
            for (j = 0; j < m; j++)
            {
                printf("%.0f\t", score[i][j]);
            }
            printf("%.0f\t%.0f\n", sum[i], aver[i]);
        }
    }

     文章来源地址https://www.toymoban.com/news/detail-481455.html

 

到了这里,关于某班有最多不超过30人(具体人数由实际输入决定)参加期末考试,最多不超过6门(具体门数由实际输入决定)。的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • leetcode原题: 生存人数

    题目: 给定 N 个人的出生年份和死亡年份,第 i 个人的出生年份为 birth[i] ,死亡年份为 death[i] ,实现一个方法以计算生存人数最多的年份。 你可以假设所有人都出生于 1900 年至 2000 年(含 1900 和 2000 )之间。如果一个人在某一年的任意时期处于生存状态,那么他应该被纳入

    2024年02月10日
    浏览(38)
  • MySQL 在线人数 场景分析

    一般在直播或者游戏中经常会统计用户在线人数,主要分为求每个时刻的在线人数和求某个时刻的在线人数两种。 【场景】: 某个时刻的在线人数 、 每个时刻的在线人数 【知识点】: 窗口函数 、 时间函数 、sum(tag) over (order by dt,tag desc rows between unbounded preceding and current

    2023年04月12日
    浏览(33)
  • 视频监控业务平台羚通视频智能分析平台无人机统计人数算法在人数统计中的应用策略

    随着科技的飞速发展,视频监控业务平台在各个领域的应用越来越广泛。其中,羚通视频智能分析平台凭借其先进的人工智能技术,为监控视频的智能化分析和处理提供了强大的支持。在众多应用中,无人机统计人数算法在人数统计方面的表现尤为突出。本文将深入探讨视频

    2024年02月03日
    浏览(41)
  • SQL计算出每年在校人数

    以下是一个录取学生人数表的示例,记录了每年录取学生的人数和入学学制。  id year num stu_len 1 2018 101 3 2 2019 121 4 3 2020 91 2 4 2021 151 3 5 2021 141 2 6 2022 161 3 字段解释: id:记录的唯一标识符 year:学生入学年度 num:对应年度录取的学生人数 stu_len:录取学生的学制 举例说明:例

    2024年02月16日
    浏览(52)
  • SQL分类练习(一):同时在线人数

    SQL 163 每篇文章同一时刻最大在看人数 SQL 179 各城市最大同时等车人数 SQL189 牛客直播各科目同时在线人数 1. 每篇文章同一时刻最大在看人数 题目描述 用户行为日志表tb_user_log id uid artical_id in_time out_time sign_cin 1 101 9001 2021-11-01 10:00:00 2021-11-01 10:00:11 0 2 102 9001 2021-11-01 10:00:0

    2024年02月16日
    浏览(37)
  • ChatGPT统计“一到点就下班”的人数

    1、到点下班 Chatgpt统计各部门F-D级员工到点下班人数占比,是在批评公司内部存在到点下班现象。 根据图片,该占比的计算方法是:最后一次下班卡在17:30-17:40之间,且1-5月合计有40天以上的人员人数/5月末在职人数。售后、国际合作、工程院到点下班人数占比位列前三。 打

    2024年02月16日
    浏览(33)
  • 2023五一数学建模竞赛选题人数公布

    数据来源自,各个平台人数投票统计,仅供参考。 具体数值比例为: 题号 人数 A 504 B 1174 C 1905 目前,五一数模竞赛C题半成品论文基本完成制作(累计35页,10000字+),注:蓝色字体为说明备注解释字体,不能出现在大家的论文里。黑色字体为论文部分,大家可以根据红色字

    2024年02月02日
    浏览(41)
  • 「SQL面试题库」 No_90 求团队人数

    「SQL面试题库」是由 不是西红柿 发起,全员免费参与的SQL学习活动。我每天发布1道SQL面试真题,从简单到困难,涵盖所有SQL知识点,我敢保证只要做完这100道题,不仅能轻松搞定面试,代码能力和工作效率也会有明显提升。 1.1 活动流程 整理题目 :西红柿每天无论刮风下雨

    2024年02月08日
    浏览(33)
  • SpringBoot整合Echarts实现用户人数和性别展示

    一、背景 在Web应用开发中,经常需要使用图表来展示数据,而Echarts是一个非常优秀的图表库。SpringBoot是一个非常流行的Java Web框架,它可以快速搭建Web应用。本文将介绍如何使用SpringBoot集成Echarts,实现展示用户人数和性别的功能。 二、功能实现流程 1. 创建数据库表 首先,

    2024年02月03日
    浏览(64)
  • Listener监听器,实现一个显示在线用户人数

    目录 Listener监听器,实现一个显示在线用户人数 每博一文案 1. Listener 监听器的概述 2. Listener 监听器在 Servlet 的体系结构 3. 编写一个 Listener 监听器的过程 3.1 ServletContextListener 4. 其他Listener 监听器的使用: 4.1 ServletRequestListener 4.2 HttpSessionListener 4.3 HttpSessionAttributeListener 4.4 H

    2024年02月03日
    浏览(32)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包