学生成绩管理系统

2023-10-27

一个年级,相当链表A,该年级5个班,每个班5个人,相当于链表B1–B5
做一个学生成绩管理系统

#include <stdio.h>
#include <stdlib.h>

struct Student
{
    char name[32];
    int Chinese;
    int math;
    int English;
    int sum;
    struct Student *next;
};

struct Class
{
    struct Student *head;
    struct Class *next;
};

//插入学生节点
struct Student *insertStudentHead(struct Student *head, struct Student *new)
{
    struct Student *point = head;

    if (head == NULL)
    {
        head = new;
        return new;
    }

    while (point->next != NULL)
    {
        point = point->next;
    }

    point->next = new;

    return head;
}

//学生链表
struct Student *createStudnetLink(struct Student *head, int classnum, int stunum)
{
    struct Student *new = NULL;
    int i;

    for (i = 0; i < stunum; i++)
    {
        new = (struct Student *)malloc(sizeof(struct Student));
        new->next = NULL;
        printf("请输入%d班的第%d个学生的学生名\n", classnum + 1, i + 1);
        scanf("%s", new->name);
        printf("请输入%d班的第%d个学生的语文成绩\n", classnum + 1, i + 1);
        scanf("%d", &(new->Chinese));
        printf("请输入%d班的第%d个学生的数学成绩\n", classnum + 1, i + 1);
        scanf("%d", &(new->math));
        printf("请输入%d班的第%d个学生的英语成绩\n", classnum + 1, i + 1);
        scanf("%d", &(new->English));
        new->sum = new->Chinese + new->math + new->English;
        head = insertStudentHead(head, new);
    }

    return head;
}

//插入班级节点
struct Class *insertClassHead(struct Class *head, struct Class *new)
{
    struct Class *point = head;

    if (head == NULL)
    {
        head = new;
        return new;
    }

    while (point->next != NULL)
    {
        point = point->next;
    }

    point->next = new;

    return head;
}

//创建班级节点
struct Class *createClassLink(struct Class *head, int classnum, int stunum)
{
    struct Class *new = NULL;
    struct Student *stuhead = NULL;
    int i;

    for (i = 0; i < classnum; i++)
    {
        new = (struct Class *)malloc(sizeof(struct Class));
        new->next = NULL;
        new->head = createStudnetLink(stuhead, i, stunum);
        head = insertClassHead(head, new);
    }

    return head;
}

//最高分
int getMax(struct Class *head)
{
    struct Class *p1 = head;
    struct Student *p2 = NULL;
    int max = 0;

    while (p1 != NULL)
    {
        p2 = p1->head;
        while (p2 != NULL)
        {
            if (max < p2->sum)
            {
                max = p2->sum;
            }
            p2 = p2->next;
        }

        p1 = p1->next;
    }

    return max;
}

//最低分
int getMin(struct Class *head)
{
    struct Class *p1 = head;
    struct Student *p2 = NULL;
    int min = 10000;

    while (p1 != NULL)
    {
        p2 = p1->head;
        while (p2 != NULL)
        {
            if (min > p2->sum)
            {
                min = p2->sum;
            }

            p2 = p2->next;
        }

        p1 = p1->next;
    }

    return min;
}

//平均分
float averAge(struct Class *head, int classnum, int stunum)
{
    struct Class *p1 = head;
    struct Student *p2 = NULL;
    int sum = 0;

    while (p1 != NULL)
    {
        p2 = p1->head;
        while (p2 != NULL)
        {
            sum += p2->sum;
            p2 = p2->next;
        }

        p1 = p1->next;
    }

    return (float)sum / (classnum * stunum);
}

//打印学生信息
void printClassStudent(struct Class *head)
{
    struct Class *p1 = head;
    struct Student *p2 = NULL;

    while (p1 != NULL)
    {
        p2 = p1->head;
        while (p2 != NULL)
        {
            printf("学生的学生名是%s\n", p2->name);
            printf("学生的语文成绩是:%d\n", p2->Chinese);
            printf("学生的数学成绩是:%d\n", p2->math);
            printf("学生的英语成绩是:%d\n", p2->English);
            printf("学生的总分是%d\n", p2->sum);
            p2 = p2->next;
        }

        p1 = p1->next;
    }
}

int main()
{
    int a;
    int b;
    int max = 0;
    int min=0;
    float aver=0;

    struct Class *head = NULL;

    printf("请输入班级数\n");
    scanf("%d", &a);
    printf("请输入学生数\n");
    scanf("%d", &b);

    head = createClassLink(head, a, b);

    printClassStudent(head);

    max = getMax(head);
    printf("max=%d\n", max);
    
    min=getMin(head);
    printf("min=%d\n",min);

    aver=averAge(head,a,b);
    printf("aver=%.2f\n",aver);

    return 0;
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

学生成绩管理系统 的相关文章

随机推荐

  • Linux配置和使用Git

    本文已收录至 Linux知识与编程 专栏 作者 ARMCSKGT 演示环境 CentOS 7 目录 前言 正文 注册Giett构建仓库 注册giett 构建仓库 Linux配置Git 下载Git 配置Git用户名 配置Git账户邮箱 验证是
  • Qt(c++)调用海康威视监控摄像头

    文章目录 一 海康威视监控摄像头开发SDK介绍 二 海康SDK模块说明 三 Qt项目中海康威视SDK配置 四 实时预览摄像头图像程序 一 海康威视监控摄像头开发SDK介绍 设备网络SDK是基于设备私有网络通信协议开发的 为嵌入式网络硬盘录像
  • 探究软件测试人员的进阶之路

    一谈到进阶 大部分文章 包括前面一些文章也会写到职级如何从初级 中级 高级 一直进阶到专家级 然后写上每个级别所需要的知识技能 然而 我们掌握了这些所谓初 中 高的知识和技能 真的就能成为测试专家了吗 对于这个问题 大部分人应该都带着疑惑或
  • qt导入html css样式表,第45篇 进阶(五)Qt样式表

    第45篇 进阶 五 Qt样式表 导语 一个完善的应用程序不仅应该有实用的功能 还要有一个漂亮的外观 这样才能使应用程序更加友善 更加吸引用户 作为一个跨平台的UI开发框架 Qt提供了强大而灵活的界面外观设计机制 Qt样式表是一个可以自定义部
  • 分数阶导数的意义_导数的意义

    分数阶导数的意义 钙衍生物 CALCULUS DERIVATIVES After derivative theory posts we will start to see some of the applications that make
  • 私人用的红帽linux,红帽宣布为个人开发者提供16个RHEL免费许可 支持在生产环境中使用...

    自从红帽宣布结束CentOS操作系统后就引起很多争议 按红帽计划CentOS 8将是最后的版本并且会在年底停更 这使得很多依赖该操作系统的个人和企业无比愤怒 因为这突如其来的变更将会导致大量生产环境需要更换系统 现在红帽为平息用户愤怒正在扩
  • 双极性SPWM波生成

    本篇文章主要介绍用于逆变电路的双极性SPWM波生成 SPWM波就是脉冲宽度按正弦规律变化和正弦波等效的PWM波形 用于控制逆变电路中开关器件的通断 使其输出的脉冲电压的面积与所希望输出的正弦波在相应区间内的面积相等 经滤波后可以得到正弦波输
  • @Transactional事务中发送MQ消息,事务还未完成但是消息已经发送

    Transactional事务中发送MQ消息 事务还未完成但是消息已经发送 这种情况会导致一些问题 1 事务还未提交 但是消息已经发送 这个时候消息中的一些信息提供给别人调用 但是别人调用并没有在数据库找到该记录 因为事务还未提交 2 事务
  • 多线程面试题

    目录 1 僵尸进程和孤儿进程 1 1 孤儿进程定义 1 2 僵尸进程定义 1 2 怎样来清除僵尸进程 1 kill杀死元凶父进程 一般不用 2 父进程用wait或waitpid去回收资源 方案不好 3 通过信号机制 在处理函数中调用wait
  • 8种方案,保证缓存和数据库的最终一致性

    订阅专栏 前言 我们通常使用缓存机制来提升系统的性能 缓存系统下的读写操作 一般都需要操作数据库与缓存 对于读操作 一般是先查询缓存 查询不到再查询数据库 最后回写进缓存 而对于写操作 究竟是先删除 更新 缓存 再更新数据库 还是先更新数据
  • open build service打包deb,并浅谈一点

    详细打包步骤注意 https zh opensuse org openSUSE Build Service Debian builds 认识 浅谈如何认识open build service的 最近在研究软件打包分发和发布的相关知识 发现了
  • CSS 预处理工具 Less 的介绍及使用 步骤

    文章目录 Less是什么 Less的使用方法 Less 中的注释 Less 中的变量 Less 中的嵌套 Less 中的混合 Mixin Less 中的运算 Less 中的转译 Less 中的作用域 Less 中的导入 Less实用实例 文
  • zipkin接入mysql【windows】

    java jar zipkin jar 这种方式启动数据是保存在内存中的 下面我们配置一下将数据保存到mysql中 创建数据库 CREATE DATABASE zipkin 创建表结构 表结构内容参考以下连接 https github co
  • STM32CubeIDE设置Flash烧录地址和大小(告别Keil魔术棒)

    STM32CubeIDE中设置Flash烧写地址和范围 在由Keil平台转到STM32CubeIDE平台过程中 我们熟悉的点开魔术棒进行相关烧录配置的方式已经不适用了 在STM32CubeIDE平台中我们需要通过修改文件的方式来实现 稍显麻
  • sublime text3 python 代码提示_Sublime Text3+Anaconda插件实现智能提示python IDE

    导读 前言上期给你们介绍装Sublime Text3和Python环境 可以编写简单的python类库sublime text3 python 可是却不能像其它IDE一样智能提醒 这样用这个意义也就不大了 今天就给你们推荐python智能提
  • jeecg boot笔记(一)-使用模糊查询

    1 引入 JInput import JInput from components jeecg JInput vue 2 使用
  • NOIP2004 火星人(全排列)

    题目来源 http acm wust edu cn problem php id 1074 soj 0 题目描述 火星人共有N个手指 每个手指分别代表着1 N共N个数 可以通过改变这个这N个手指的顺序来改变值的大小 但是人类想要和火星人交流
  • docker安装 镜像检索、本地下载上传、重命名

    安装docker wget https mirrors aliyun com docker ce linux centos docker ce repo O etc yum repos d docker ce repo yum y inst
  • 基于GPRS的无线视频监控系统

    1 引言 目前 远程视频监控系统已经广泛应用于工矿企业生产现场监控 电信机房监控 城市交通管理等领域 常见的远程视频监控系统大多是通过架设专用的有线媒介 或者租用电信运营商的通信线路传输视频信号 前者工程工期长 前期投入比较大 传输距离有限
  • 学生成绩管理系统

    一个年级 相当链表A 该年级5个班 每个班5个人 相当于链表B1 B5 做一个学生成绩管理系统 include