成绩管理系统

news2024/11/26 10:30:37

系列文章

任务28 成绩管理系统


文章目录

  • 系列文章
  • 一、实践目的与要求
    • 1、目的
    • 2、要求
  • 二、课题任务
  • 三、总体设计
    • 1.存储结构及数据类型定义
    • 2.程序结构
    • 3.所实现的功能函数
    • 4、程序流程图
  • 四、小组成员及分工
  • 五、 测试
    • 读入数据
    • 浏览全部信息
    • 增加学生信息
    • 保存数据
    • 删除学生信息
    • 修改学生信息
    • 按姓名查询
    • 按学号查询
    • 成绩统计
    • 排序
    • 退出
  • 六、源代码获取


一、实践目的与要求

1、目的

通过此次实践环节主要达到以下目的:
(1)进一步理解和运用结构化程序设计的思想和方法,学会根据具体问题选择合理的计算机存储结构实现数据的存储,构造较有效率的算法;
(2)学会算法描述的方法,并编制具有结构清晰、合理和易读性的小型实用程序;
(3)并会设计测试方案,完成程序的测试,能撰写出该程序的技术报告,为文档整理工作打下一个初步的基础;
(4)培养小组成员间互相学习,取长补短,协同工作的能力。

2、要求

(1)模块化程序设计,锯齿型书写格式,代码要有足够的注释;
(2)根据课题中规定的要求实现既定目标;
(3)撰写格式排版规范、结构完整的技术文档。

二、课题任务

(题目、内容及主要功能描述)

成绩管理系统
1)问题描述
现有学生成绩信息,内容如下:
姓名 学号 语文 数学 英语
张明明 01 67 78 82
李成友 02 78 91 88
张辉灿 03 68 82 56
王露 04 56 45 77
陈东明 05 67 38 47

编写一系统,实现学生信息管理。
2) 基本要求
功能要求:
(1)信息维护:
要求:学生信息数据要以文件的形式保存,能实现学生信息数据的维护。此模块包括子模块有:增加学生信息、删除学生信息(按学号)、修改学生信息(按学号)
(2)信息查询:
要求:查询时可实现按姓名查询、按学号查询、浏览全部信息
(3)成绩统计:
要求:A输入任意的一个课程名(如数学)和一个分数段(如60–70),统计出在此分数段的学生情况。
(4)排序:能对用户指定的任意课程名,按成绩升序或降序排列学生数据并显示排序结果(使用表格的形式显示排序后的输出结果)(使用多种方法排序者,加分)

三、总体设计

1.存储结构及数据类型定义

(采用了什么存储结构、被处理数据定义的数据类型,数据类型定义中要有注释说明)

#define MAXLEN 1000 // 名称和学号的最大长度
#define MAXNUM 1000 // 学生人数的最大值
#define MAXCOURSE 3 // 课程数量的最大值

typedef struct {
    char name[MAXLEN];
    char id[MAXLEN];
    double score[MAXCOURSE];
} student; // 学生结构体,包含姓名、学号、成绩等信息

2.程序结构

(程序整体的模块结构图)
在这里插入图片描述

3.所实现的功能函数

(每个功能对应的函数名、函数形参及返回值说明)

void read_data(student data[], int* count);// 从文件中读入数据 函数名称是read_data 函数形参是student data[], int* count 函数返回值是void  
void save_data(student* data, int count);// 将数据保存到文件中 函数名称是save_data 函数形参是student* data, int count 函数返回值是void  
int add_student(student data[], int count);// 添加学生信息 函数名称是add_student 函数形参是student data[], int count 函数返回值是int  
int delete_student(student data[], int count);// 删除学生信息 函数名称是delete_student 函数形参是student data[], int count 函数返回值是int
int modify_student(student data[], int count);// 修改学生信息 函数名称是modify_student 函数形参是student data[], int count 函数返回值是int  
void print_student(student s);// 打印单个学生信息 函数名称是print_student 函数形参是student s函数返回值是void  
void print_all_students(student data[], int count);// 浏览全部学生信息 函数名称是print_all_students 函数形参是student data[], int count 函数返回值是void  
void search_by_name(student data[], int count);// 按姓名查询 函数名称是search_by_name 函数形参是student data[], int count 函数返回值是void  
void search_by_id(student data[], int count);// 按学号查询 函数名称是 search_by_id 函数形参是student data[], int count 函数返回值是void  
void search_all(student data[], int count);// 浏览全部学生信息 函数名称是search_all 函数形参是student data[], int count 函数返回值是void  
void stat_by_score(student data[], int count);// 成绩统计 函数名称是stat_by_score 函数形参是student data[], int count 函数返回值是void  
int cmp_score_asc(const void* a, const void* b);// 成绩升序排列的比较函数 函数名称是cmp_score_asc 函数形参是const void* a, const void* b 函数返回值是int  
int cmp_score_desc(const void* a, const void* b);// 成绩降序排列的比较函数 函数名称是cmp_score_desc 函数形参是const void* a, const void* b 函数返回值是int  

4、程序流程图

在这里插入图片描述

四、小组成员及分工

(组长、组员及每人承担的具体模块任务或其他)
组长:完成显示菜单、读取文件中的学生成绩信息到students数组、把学生信息写入文件
统计学生成绩并排名模块。

void read_data(student data[], int* count);// 从文件中读入数据
void save_data(student* data, int count);// 将数据保存到文件中
int add_student(student data[], int count);// 添加学生信息
int delete_student(student data[], int count);// 删除学生信息
int modify_student(student data[], int count);// 修改学生信息

组员1:完成添加学生信息、删除学生信息、根据学生学号查找学生模块

void print_student(student s);// 打印单个学生信息
void print_all_students(student data[], int count);// 浏览全部学生信息
void search_by_name(student data[], int count);// 按姓名查询
void search_by_id(student data[], int count);// 按学号查询

组员2:完成修改学生补考成绩、修改学生信息(姓名或成绩)、显示所有学生信息模块

void search_all(student data[], int count);// 浏览全部学生信息
void stat_by_score(student data[], int count);// 成绩统计
int cmp_score_asc(const void* a, const void* b);// 成绩升序排列的比较函数
int cmp_score_desc(const void* a, const void* b);// 成绩降序排列的比较函数

五、 测试

(整合各功能模块后的测试结果截图及说明)

读入数据

在这里插入图片描述

浏览全部信息

在这里插入图片描述

增加学生信息

在这里插入图片描述

保存数据

在这里插入图片描述

删除学生信息

在这里插入图片描述

修改学生信息

在这里插入图片描述

按姓名查询

在这里插入图片描述

按学号查询

在这里插入图片描述

成绩统计

在这里插入图片描述

排序

在这里插入图片描述

退出

在这里插入图片描述

六、源代码获取

本次的分享就到这里啦,创作不易,感谢点赞收藏👍
感兴趣的小伙伴可以在评论区留言或者私信我哦💕

提示:代码获取链接: 下载源码

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/551769.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

加密与解密 基础篇/win API/小端序大端序

1.1加密和解密的概念 是侧重于windows 的加密保护和解密技术 首先我们先要了解 软件逆向工程 可执行程序->反编译->源代码这就是逆向工程 接着 逆向分析技术是什么 静态调试 和动态调试 主要分为这俩类1.通过软件的执行 来分析程序 我们可以通过阅读程序的执行 或…

这个Set接口真牛逼

偶然间看到 java.util 包下的 Set 接口,看着好搞笑哈哈哈哈哈哈哈 包括了如下几个方法: 创建包含0个元素的不可修改的Set集合创建包含1个元素的不可修改的Set集合创建包含2个元素的不可修改的Set集合创建包含3个元素的不可修改的Set集合创建包含4个元素…

ROS:laser激光雷达数据格式、发送laser数据、订阅laser数据

一.激光雷达数据格式 图片来源:ROS-订阅与处理激光雷达scan话题_ros激光雷达数据处理_zhhao1326的博客-CSDN博客 # 测量的激光扫描角度,逆时针为正 # 设备坐标帧的0度面向前(沿着X轴方向) Header header # Header也是一…

Java学习路线(8)——面向对象基础(2)

一、static关键字 概念: static是静态的意思,可以修饰成员变量和成员方法。当修饰成员变量时,在内存中只存储一份,可以被共享访问、修改。当修饰成员方法时,可以被共享访问,也被称为公共方法。 静态成员变…

【linux网络】防火墙规则二:SNAT策略与DNAT策略

防火墙规则 一、SNAT策略1.1SANT的原理与应用1.2SNAT实验 二、DNAT策略2.1DNAT的原理与应用2.2DNAT实验 三、Linux的抓包工具tcpdump3.1补充知识 四、防火墙规则的备份和还原 一、SNAT策略 1.1SANT的原理与应用 SNAT 应用环境:局域网主机共享单个公网IP地址接入In…

2023.05.21 学习周报

文章目录 摘要文献阅读1.题目2.背景3.现存问题和解决方法4.方法4.1 Variational mode decomposition (VMD)4.2 Bidirectional LSTM 5.实验5.1 数据标准化5.2 评价指标5.3 实验过程及结果 6.结论和展望 优劣解距离法有限元1.求解一个简单的传热问题2.有限元如何实现 总结 摘要 …

vscode远程到服务器(包括WSL)进行GDB调试

工欲善其事必先利其器,这句话不容小觑,调试工具做的好,对开发工作可起到事半功倍。 本文主要讲vscode远程到服务器进行在线GDB调试手段,包含对WSL的远程调试,可以轻松对照源码进行应用程序调试。 文章目录 一、vscode…

【SpringCloud】一、认识微服务

文章目录 1、学习提纲2、和单体架构的比较3、认识微服务4、微服务技术常用框架5、SprigCloud6、服务拆分7、微服务远程调用 1、学习提纲 相比传统单体架构,微服务的整体架构如下图: 再引入日志、监控、持续集成、持续部署,就成了下面这个图&…

RocketMQ 的介绍和基本使用

介绍 在 RabbitMQ 的基本概念和五种模式使用示例 前半部分介绍了 MQ 的应用场景,以及多个 MQ 产品的对比,那时说到 RocketMQ 的客户端版本只有 Java , 现在 Apache RocketMQ 社区中也增加了 C NodeJS Python Go 的客户端。 RocketMQ 是阿里巴巴开源的一…

iOS正确获取图片参数深入探究及CGImageRef的使用(附源码)

一 图片参数的正确获取 先拿一张图片作为测试使用 图片参数如下: 图片的尺寸为: -宽1236个像素点 -高748个像素点 -色彩空间为RGB -描述文件为彩色LCD -带有Alpha通道 请记住这几个参数,待会儿我们演示如何正确获取。 将这张图片分别放在…

从零开始 Spring Boot 32:AOP II

从零开始 Spring Boot 32:AOP II 图源:简书 (jianshu.com) 之前写过一篇文章从零开始 Spring Boot 26:AOP - 红茶的个人站点 (icexmoon.cn),讨论了AOP的基本用法,但那篇文章相当粗疏,对Spring中的AOP技术讨…

免费快速部署ChatGPT线上聊天网页:ChatGPT API + Github + Railway

1、使用工具 (1)需要自己生成的openai api,获取API的网站:openAI API 获取方式:OpenAI的API key获取方法 (2)本次使用该参考项目进行部署:chatweb 需要将该项目fork到自己的仓库里 …

29 SQL——事务操作

create table account (id int auto_increment primary key comment 主键ID,name varchar(18) comment 姓名,money int comment 余额 )comment 账户表;insert into account(id, name ,money)values(null,张三,2000),(nul…

不定积分题型简单总结

不定积分 考研数学复习笔记,用来复习知识点用,如有不足还请指出,Thanks♪(・ω・)ノ 文章目录 不定积分1 原函数/不定积分 概念和性质2 原函数存在定理3 不定积分的基本公式4 不定积分的基本计算4.1 三角代换型…

中间件-RabbitMQ

文章目录 1.什么是MQ1.1 特点1.2 MQ产品分类 2.RabbitMQ2.1.RabbitMQ介绍2.2.使用Docker安装RabbitMQ 3.SpringBoot中使用RabbitMQ3.1.SpringAMQP3.2使用步骤 1.什么是MQ RabbitMQ官方文档 消息队列(Message Queue,简称MQ):是在消息的传输过程中保存消…

SpringBoot+Vue实现校园二手系统。前后端分离技术【完整功能介绍+实现详情+源码】

前言 文章内容有点长,建议打开右侧目录导航栏查看。 这个系统基本上可以改造为其它类似的系统。后台管理基本上一致。前台进行一些页面样式的改造就可以变成一个新的系统。有时间,做几个变体系统。 闲的无聊,把大学时候做的一个系统进行了重…

git源代码管理

文章目录 git源代码管理git单人本地仓库操作创建远程仓库(github为例)多人开发与冲突分支操作SSH(安全外壳协议) git源代码管理 文档连接:https://git-scm.com/docs git是用于源代码管理,方便多人协同开发…

架构整洁之道上篇(编程范式设计原则)

目录 1.概述 2.编程范式 2.1.结构化编程 2.2.面向对象编程 2.3.函数式编程 3.设计原则 3.1.单一职责原则 3.2.开闭原则 3.3.里氏替换原则 3.4.接口隔离原则 3.5.依赖反转原则 4.小结 1.概述 软件架构的终极目标是,用最小的人力成本来满足构建和维护该系…

2023 操作系统 R 复习大纲( 适用于太理软件 21 级)

目录 01.操作系统的定义 02.操作系统的基本类型及特征 1.批处理操作系统(单、多道) 2.分时操作系统 3.实时操作系统 03.操作系统的功能及特征 04.进程的定义、特征 05.进程基本状态及其转换原因 06.进程互斥、同步 07.进程控制块的内容、作用 …

Java数据类型之整数类型与浮点数

标识符(名字) 作用域 离其最近的大括号 { } !!! 数据类型的分类 赋值时,不可超过数据类型的范围(不可越界) 常量的进制转换 tips:给变量赋值时,值可以为不同…