第8章实验1:学生成绩管理系统V1.0

简介: 第8章实验1:学生成绩管理系统V1.0

第8章实验1:学生成绩管理系统V1.0


某班有最多不超过30人(具体人数由键盘输入)参加某门课程的考试,用一维数组作函数参数编程实现如下学生成绩管理:


(1)录入每个学生的学号和考试成绩;

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

(3)按成绩由高到低排出名次表;

(4)按学号由小到大排出成绩表;

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

(6)按优秀(90100)、良好(8089)、中等(7079)、及格(6069)、不及格(0~59)5个类别,统计每个类别的人数以及所占的百分比;

(7)输出每个学生的学号、考试成绩。


#include<stdio.h>
#include<stdlib.h>
#define N 30
main()
{
    int n, i, j, temp1, temp2, choice, p, mark;
    long ids;
    float sum;
    printf("Input student number(n<30):\n");
    while (scanf("%d", &n))
    {
        if (n < 30 && n > 0)
            break;
        else
        {
            printf("Invalid Input!");
            continue;
        }
    }
    long id[N];
    float score[N];
Choice:
    printf("Management for Students' scores\n");
    printf("1.Input record\n");
    printf("2.Caculate total and average score of course\n");
    printf("3.Sort in descending order by score\n");
    printf("4.Sort in ascending order by number\n");
    printf("5.Search by number\n");
    printf("6.Statistic analysis\n");
    printf("7.List record\n");
    printf("0.Exit\n");
    printf("Please Input your choice:\n");
    scanf("%d", &choice);
    getchar();
    switch (choice)
    {
    case 1:
        goto a;
    case 2:
        goto b;
    case 3:
        goto c;
    case 4:
        goto d;
    case 5:
        goto e;
    case 6:
        goto f;
    case 7:
        goto g;
    case 0:
        goto end;
    default:
        printf("Input error!\n");
        goto Choice;
    }
a:
    printf("Input student's ID, name and score:\n");
    for (i = 1; i <= n; i++)
    {
        scanf("%ld %f", &id[i], &score[i]);
        getchar();
    }
    goto Choice;
b:
    sum = 0;
    for (i = 1; i <= n; i++)
        sum = sum + score[i];
    printf("sum=%.0f,aver=%.2f\n", sum, sum / n);
    goto Choice;
c:
    printf("Sort in descending order by score:\n");
    for (i = 1; i < n; i++)
        for (j = i + 1; j <= n; j++)
            if (score[j] > score[i])
            {
                temp1 = score[i], temp2 = id[i];
                score[i] = score[j], id[i] = id[j];
                score[j] = temp1, id[j] = temp2;
            }
    for (i = 1; i <= n; i++)
        printf("%ld\t%.0f\n", id[i], score[i]);
    goto Choice;
d:
    printf("Sort in ascending order by number:\n");
    for (i = 1; i < n; i++)
        for (j = i + 1; j <= n; j++)
            if (id[i] > id[j])
            {
                temp1 = score[i], temp2 = id[i];
                score[i] = score[j], id[i] = id[j];
                score[j] = temp1, id[j] = temp2;
            }
    for (i = 1; i <= n; i++)
        printf("%ld\t%.0f\n", id[i], score[i]);
    goto Choice;
e:
    printf("Input the number you want to search:\n");
    scanf("%ld", &ids);
    getchar();
    for (i = 1; i <= n; i++)
    {
        if (ids == id[i])
        {
            printf("%ld\t%.0f\n", id[i], score[i]);
            goto Choice;
        }
        else
            continue;
    }
    printf("Not found!\n");
    goto Choice;
f:
    for (i = 5; i <= 10; i++)
    {
        p = 0;
        for (j = 1; j <= n; j++)
        {
            mark = score[j] < 60 ? 5 : (int)score[j] / 10;
            if (mark == i)
                p++;
        }
        if (i == 5)
        {
            printf("<60\t%d\t%.2f%%\n", p, (float)p / n * 100);
            continue;
        }
        else if (i >= 6 && i <= 9)
        {
            printf("%d-%d\t%d\t%.2f%%\n", i * 10, i * 10 + 9, p, (float)p / n * 100);
            continue;
        }
        else
            printf("%d\t%d\t%.2f%%\n", i * 10, p, (float)p / n * 100);
    }
    goto Choice;
g:
    for (i = 1; i <= n; i++)
        printf("%ld\t%.0f\n", id[i], score[i]);
    goto Choice;
end:
    printf("End of program!\n");
    return 0;
}
相关文章
|
SQL 存储 数据可视化
Ganos矢量快显功能上手系列2:增强的MVT能力
本文主要介绍Ganos新增的2D矢量动态切片函数及其使用方法。新增的矢量动态切片函数能够大幅提升可视化效率,有效解决小比例尺MVT显示耗时久的问题。和PostGIS相比,小比例尺MVT的可视化效率提升可达60%以上。
|
负载均衡 监控 NoSQL
Redis的集群方案有哪些?
Redis集群包括主从复制(基础,手动故障恢复)、哨兵模式(自动高可用)和Redis Cluster(官方分布式解决方案,自动分片和容错)。此外,还有如Codis、Redisson和Twemproxy等第三方工具用于代理和负载均衡。选择方案需考虑应用场景、数据规模和并发需求。
563 2
|
算法 数据处理 开发者
FFmpeg库的使用与深度解析:解码音频流流程
FFmpeg库的使用与深度解析:解码音频流流程
247 0
|
SQL Oracle 关系型数据库
Oracle之regexp系列函数详解
Oracle之regexp系列函数详解
770 1
|
数据采集 JavaScript 前端开发
从网页中提取结构化数据:Puppeteer和Cheerio的高级技巧
在本文中,我们将介绍两个常用的网页数据抓取工具:Puppeteer和Cheerio。Puppeteer是一个基于Node.js的无头浏览器库,它可以模拟浏览器的行为,如打开网页、点击元素、填写表单等。Cheerio是一个基于jQuery的HTML解析库,它可以方便地从HTML文档中提取数据,如选择器、属性、文本等。我们将结合这两个工具,展示如何从网页中提取结构化数据,并给出一些高级技巧,如使用代理IP、处理动态内容、优化性能等。
480 1
从网页中提取结构化数据:Puppeteer和Cheerio的高级技巧
|
前端开发 API Android开发
Flutter-自定义尺子
Flutter-自定义尺子
202 0
在Linux中,如何查看磁盘详细使用情况?
在Linux中,如何查看磁盘详细使用情况?
|
数据采集 搜索推荐 API
京东商品评论数据采集接口python
京东商品评论数据采集接口python
mybatis-plus使用代码配置configuration
mybatis-plus使用代码配置configuration
428 0
|
编解码 数据处理
av_image_copy函数原型的深入探秘
av_image_copy函数原型的深入探秘
253 0