当前位置: 首页 > news >正文

C基础练习(学生管理系统)

1.系统运行,打开如下界面。列出系统帮助菜单(即命令菜单),提示输入命令

2.开始时还没有录入成绩,所以输入命令 L 也无法列出成绩。应提示“成绩表为空!请先使用命令 T 录入学生成绩。”

同理,当输入其他的成绩处理命令时也作相应的处理。

3.输入命令 T,调用Type子函数录入成绩。界面提示输入学生人数

输入3 后提示输入3名学生的3门课成绩,列出成绩单的表头“学号 语文 数学 英语”,提示学号:1

输入1号学生的3门课成绩,用空格间隔,回车结束。提示学号:2

以此类推,直到输入结束

4.输入命令 L ,调用List子函数输出成绩表。List子函数调用结束,返回。提示输入命令

5.输入命令 A ,调用Average子函数计算平均分,提示“平均分已计算。请使用命令L查看。” Average子函数调用结束,返回。提示输入命令

输入命令 L ,调用List子函数输出成绩表。List子函数调用结束,返回。提示输入命令

6.输入命令 P ,调用Sort子函数将各学生记录按平均分由高到低排序,提示“完成排序。请使用命令L查看。” Sort子函数调用结束,返回。提示输入命令

输入命令 L ,调用List子函数输出成绩表。List子函数调用结束,返回。提示输入命令

7.输入命令 S ,调用Search子函数查询学生成绩,提示“输入要查询的学生学号”。

输入3 ,找到3号学生的成绩并输出。Search子函数调用结束,返回。提示输入命令

8.输入命令C , 执行清屏函数语句system("clear");

清除屏幕的所有内容。提示输入命令

9.输入命令H , 调用Help子函数显示帮助菜单。Help子函数调用结束,返回。提示输入命令

10.输入命令Q , 则退出系统。

11.构造思想:

1)输出数组元素时,要将学号单独处理,输出为整数(即保留0位小数)。同理,在计算成绩时也要将第1列的学号撇开,只计算第2列之后的。成绩保留2位小数。

2)学生人数n贯穿始终,通过n的值判断当前命令的子函数是否能够调用执行。例如:当n=0时,说明还没有录入成绩。而一旦输入命令T,也即调用Type子函数录入了成绩,则n的值就不再是0。当n!=0时,就可以进行其他的成绩操作。

代码展示

#include <stdio.h>
#include <string.h>
#include <stdlib.h>
struct student // 定义结构体数组,用来存放学生信息
{int num;float Chinese;float math;float English;float average;
} stu[32];
void Help(); // 声明函数
int Type(struct student *p, int n);
void List(int n);
void Average(int n);
void paixu(int n);
void Search(int n);
int main(int argc, char const *argv[])
{Help(); // 调用帮助菜单函数char ml;int n = 0;while (1) // 重复输入命令{printf("请输入命令=");scanf(" %c", &ml);if (ml == 'C')system("clear"); // 输入C时,触发清屏函数else if (ml == 'Q')break; // 输入Q时退出程序else if (ml == 'T')n = Type(stu, n); // 输入T时调用Type函数录入信息else if (n == 0)      // 当学生人数为0时无法使用其它命令,需要先录入信息printf("成绩表为空!请先使用命令T录入学生成绩\n");else if (n != 0){if (ml == 'H')Help(); // 当输入H时调用Help函数打开帮助菜单else if (ml == 'L')List(n); // 输入L时调用List函数列出学生信息else if (ml == 'A')Average(n); // 输入A时调用Average函数计算平均分else if (ml == 'P')paixu(n); // 输入P时调用paixu函数进行排序else if (ml == 'S')Search(n); // 输入S时调用Search函数进行查询}getchar(); // 回收垃圾字符}return 0;
}
int Type(struct student *p, int n) // 录入信息函数
{int num;printf("请输入学生人数:");scanf("%d", &num);printf("请输入%d个学生的成绩\n", num);printf("学号  语文  数学  外语\n");for (int a = n; a < n + num; a++) // for循环遍历录入信息{printf("%d  ", a + 1);stu[a].num = a + 1;scanf("%f %f %f", &stu[a].Chinese, &stu[a].math, &stu[a].English);}n = num + n;return n; // 返回学生人数
}
void Help() // 帮助菜单
{printf("**************************************\n");printf("*  学生成绩管理系统————帮助菜单      *\n");printf("**************************************\n");printf("*        H=显示帮助菜单              *\n");printf("*        T=成绩录入                  *\n");printf("*        A=计算学生平均分            *\n");printf("*        L=列出成绩表                *\n");printf("*        P=按平均成绩由高到低排序    *\n");printf("*        S=按学号查询学生成绩        *\n");printf("*        C=清屏                      *\n");printf("*        Q=退出系统                  *\n");printf("**************************************\n");printf(" Copyright <c>  2024.08.06 By zhr\n");
}
void List(int n) // 列出学生信息函数
{printf("学生成绩如下:\n");printf("学号 语文 数学 外语  平均分\n");for (int a = 0; a < n; a++) // for循环遍历结构体数组{printf("%d   %.2f  %.2f %.2f   %.2f", stu[a].num, stu[a].Chinese, stu[a].math, stu[a].English, stu[a].average);printf("\n");}
}
void Average(int n) // 计算平均分函数
{for (int a = 0; a < n; a++)stu[a].average = (stu[a].Chinese + stu[a].English + stu[a].math) / 3;printf("平均分已计算,请使用命令L查看\n");
}
void paixu(int n) // 排序函数
{struct student stu1[32];if (stu[0].average == 0) // 平均分未计算时无法排序printf("无法排序,请先使用命令A计算平均分\n");else{for (int a = 0; a < n - 1; a++){for (int b = 0; b < n - 1 - a; b++){if (stu[b].average < stu[b + 1].average){stu1[b] = stu[b]; // 通过交换结构体数组进行排序stu[b] = stu[b + 1];stu[b + 1] = stu1[b];}}}printf("已完成排序,请使用命令L查看\n");}
}
void Search(int n)
{int num;printf("请输入要查询的学生的学号:");scanf("%d", &num);printf("学号 语文 数学 外语  平均分\n");for (int a = 0; a < n; a++)if (stu[a].num == num) // 通过学号打印学生信息printf("%d   %.2f  %.2f %.2f   %.2f\n", stu[a].num, stu[a].Chinese, stu[a].math, stu[a].English, stu[a].average);
}

相关文章:

C基础练习(学生管理系统)

1.系统运行&#xff0c;打开如下界面。列出系统帮助菜单&#xff08;即命令菜单&#xff09;&#xff0c;提示输入命令 2.开始时还没有录入成绩&#xff0c;所以输入命令 L 也无法列出成绩。应提示“成绩表为空&#xff01;请先使用命令 T 录入学生成绩。” 同理&#xff0c;当…...

网络安全抓包封包WEB

目录 1.抓包 1. 网络故障排除 应用 意义 2. 网络安全监控 应用 意义 3. 性能优化 应用 意义 4. 协议分析与开发 应用 意义 5. 数据分析与合规性审计 应用 意义 抓包工具 总结 2.抓包的应用对象 1. 网络设备 路由器和交换机 防火墙和入侵检测系统&#xff…...

Spring Boot - 在Spring Boot中实现灵活的API版本控制(上)

文章目录 为什么需要多版本管理&#xff1f;在Spring Boot中实现多版本API的常用方法1. URL路径中包含版本号2. 请求头中包含版本号3. 自定义注解和拦截器 注意事项 为什么需要多版本管理&#xff1f; API接口的多版本管理在我们日常的开发中很重要&#xff0c;特别是当API需要…...

普中51单片机:DS18B20温度传感器操作指南(十三)

文章目录 引言电路图引脚讲解初始化时序写时序读时序温度变换温度读取完整代码 引言 DS18B20是一款单总线接口的数字温度传感器&#xff0c;仅需一个IO口即可实现数据通信。这里只对如何简单操作开发板的DS1802进行讲解&#xff0c;关于DS18B20温度传感器的详细操作原理&#…...

【网络】网络的发展历程及其相关概念

1.什么是网络 计算机网络是指将一群具有独立功能的计算机通过通信设备以及传输媒体被互联起来的&#xff0c;在通信软件的支持下&#xff0c;实现计算机间资源共享、信息交换或协同工作的系统。计算机网络是计算机技术与通信技术紧密结合的产物&#xff0c;两者的迅速发展渗透形…...

鸿蒙HarmonyOS开发:如何使用第三方库,加速应用开发

文章目录 一、如何安装 ohpm-cli二、如何安装三方库1、在 oh-package.json5 文件中声明三方库&#xff0c;以 ohos/crypto-js 为例&#xff1a;2、安装指定名称 pacakge_name 的三方库&#xff0c;执行以下命令&#xff0c;将自动在当前目录下的 oh-package.json5 文件中自动添…...

C++的标准模板库简单介绍

C的标准模板库&#xff08;STL, Standard Template Library&#xff09;是一个强大的工具&#xff0c;旨在提供高效和灵活的数据结构和算法。STL的设计目的是使C程序更加通用和可重用。以下是对STL的详细介绍&#xff1a; 1. STL的组成部分 STL主要由以下几部分组成&#xff…...

安卓常用控件ListView

文章目录 ListView的常用属性ListView的常用APIListView的简单使用 ListView是一个列表样式的 ViewGroup&#xff0c;将若干 item 按行排列。它是一个很基本的控件也是 Android 中最重要的控件之一。它可以实现多个 View 的垂直排列并支持滚动显示效果。 ListView的常用属性 常…...

优秀的行为验证码的应用场景与行业案例

应用场景 登录注册 &#xff1a; 验证码适用于App、Web及小程序等用户注册场景&#xff0c;可以抵御自动机恶意注册&#xff0c;垃圾注册、抵御撞库登录、暴力破解、验证账号敏感信息的修改&#xff0c;同时可以有效阻止撞库攻击&#xff0c;从源头进行防护&#xff0c;保障正…...

《程序猿入职必会(10) · SpringBoot3 整合 MyBatis-Plus》

&#x1f4e2; 大家好&#xff0c;我是 【战神刘玉栋】&#xff0c;有10多年的研发经验&#xff0c;致力于前后端技术栈的知识沉淀和传播。 &#x1f497; &#x1f33b; CSDN入驻不久&#xff0c;希望大家多多支持&#xff0c;后续会继续提升文章质量&#xff0c;绝不滥竽充数…...

计算机网络408考研 2018

1 计算机网络408考研2018年真题解析_哔哩哔哩_bilibili...

(亲测有效)SpringBoot+Vue项目云服务器部署(宝塔)

目录 一、准备工作 1、购买云服务器 2、获取面板地址 二、jdk和数据库 1、安装环境 2、安装Java环境jdk 3、添加数据库 三、前端部署 1、修改后台服务所在源 2、vue build 2、创建站点 四、后端部署 1、修改application.yml 2、idea打包 3、运行jar包 方式一&a…...

健康管理系统

目录 第1章 系统概述 第2章 可行性研究 2.1 项目背景及意义 2.2 可行性研究 第3章 需求分析 3.1 功能性需求 3.2 非功能性需求 3.2.1 性能需求 第4章 总体设计 4.1 技术架构 4.2功能模块设计 第5章 详细设计 5.1 主页 5.2 写剧本杀 5.3 剧本杀分类管理 5.4 个人…...

【计算机网络】网络基础概念

计算机网络发展 独立模式&#xff1a;最开始计算机之间相互独立&#xff0c;每个终端各自持有数据。 网络互联&#xff1a;多台计算机连接在一起&#xff0c;完成数据共享。 局域网 LAN&#xff1a;计算机数量增多&#xff0c;通过交换机和路由器连接在一起。 广域网 WAN: 将远…...

深入理解Spring的三级缓存机制

个人名片 &#x1f393;作者简介&#xff1a;java领域优质创作者 &#x1f310;个人主页&#xff1a;码农阿豪 &#x1f4de;工作室&#xff1a;新空间代码工作室&#xff08;提供各种软件服务&#xff09; &#x1f48c;个人邮箱&#xff1a;[2435024119qq.com] &#x1f4f1…...

LSTM长短时记忆网络【数学+图解】

文章目录 1、简介2、门控机制3、LSTM3.1、概念3.2、公式⭐3.3、特点 4、图解LSTM⭐4.1、RNN4.2、时间链条4.3、记忆单元&#x1f53a;4.4、LSTM 5、LSTM与GRU的对比6、应用7、训练技巧 &#x1f343;作者介绍&#xff1a;双非本科大三网络工程专业在读&#xff0c;阿里云专家博…...

Linux-入门-02

上节我们讲了如何安装虚拟机,本节课讲一些linux的常用命令,首先我们需要做一些配置,我们的centos的镜像是最小版安装,里面什么也没有,所以我们的linux是不能进行联网的,接下来我们就来一步一步联网 1、配置网络 首先我们需要先使用命令查看ip地址,linux中一切皆文件,只能使用命…...

Animate软件基本概念:基本形状、绘制对象及位图

这一篇讲Animate软件中的基本形状、绘制对象及位图三个概念。 FlashASer&#xff1a;AdobeAnimate2021软件零基础入门教程https://zhuanlan.zhihu.com/p/633230084 FlashASer&#xff1a;实用的各种Adobe Animate软件教程https://zhuanlan.zhihu.com/p/675680471 FlashASer&…...

Shell定时上传日志到HDFS

Shell定时上传日志到HDFS 一、任务需求二、实现思路三、具体实现流程3.1 规划文件上传目录3.2 开发 shell 脚本3.3 授予 shell 可执行权限3.4 手动执行查看3.4 定时执行 shell 脚本 一、任务需求 公司在线服务器每天都会产生网站运行日志&#xff0c;为了避免志文件过大&#…...

前端day3-表格

<!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>day3-表格</title> </head> <body&g…...

Python|GIF 解析与构建(5):手搓截屏和帧率控制

目录 Python&#xff5c;GIF 解析与构建&#xff08;5&#xff09;&#xff1a;手搓截屏和帧率控制 一、引言 二、技术实现&#xff1a;手搓截屏模块 2.1 核心原理 2.2 代码解析&#xff1a;ScreenshotData类 2.2.1 截图函数&#xff1a;capture_screen 三、技术实现&…...

conda相比python好处

Conda 作为 Python 的环境和包管理工具&#xff0c;相比原生 Python 生态&#xff08;如 pip 虚拟环境&#xff09;有许多独特优势&#xff0c;尤其在多项目管理、依赖处理和跨平台兼容性等方面表现更优。以下是 Conda 的核心好处&#xff1a; 一、一站式环境管理&#xff1a…...

Cursor实现用excel数据填充word模版的方法

cursor主页&#xff1a;https://www.cursor.com/ 任务目标&#xff1a;把excel格式的数据里的单元格&#xff0c;按照某一个固定模版填充到word中 文章目录 注意事项逐步生成程序1. 确定格式2. 调试程序 注意事项 直接给一个excel文件和最终呈现的word文件的示例&#xff0c;…...

docker详细操作--未完待续

docker介绍 docker官网: Docker&#xff1a;加速容器应用程序开发 harbor官网&#xff1a;Harbor - Harbor 中文 使用docker加速器: Docker镜像极速下载服务 - 毫秒镜像 是什么 Docker 是一种开源的容器化平台&#xff0c;用于将应用程序及其依赖项&#xff08;如库、运行时环…...

DeepSeek 赋能智慧能源:微电网优化调度的智能革新路径

目录 一、智慧能源微电网优化调度概述1.1 智慧能源微电网概念1.2 优化调度的重要性1.3 目前面临的挑战 二、DeepSeek 技术探秘2.1 DeepSeek 技术原理2.2 DeepSeek 独特优势2.3 DeepSeek 在 AI 领域地位 三、DeepSeek 在微电网优化调度中的应用剖析3.1 数据处理与分析3.2 预测与…...

K8S认证|CKS题库+答案| 11. AppArmor

目录 11. AppArmor 免费获取并激活 CKA_v1.31_模拟系统 题目 开始操作&#xff1a; 1&#xff09;、切换集群 2&#xff09;、切换节点 3&#xff09;、切换到 apparmor 的目录 4&#xff09;、执行 apparmor 策略模块 5&#xff09;、修改 pod 文件 6&#xff09;、…...

Unity3D中Gfx.WaitForPresent优化方案

前言 在Unity中&#xff0c;Gfx.WaitForPresent占用CPU过高通常表示主线程在等待GPU完成渲染&#xff08;即CPU被阻塞&#xff09;&#xff0c;这表明存在GPU瓶颈或垂直同步/帧率设置问题。以下是系统的优化方案&#xff1a; 对惹&#xff0c;这里有一个游戏开发交流小组&…...

前端倒计时误差!

提示:记录工作中遇到的需求及解决办法 文章目录 前言一、误差从何而来?二、五大解决方案1. 动态校准法(基础版)2. Web Worker 计时3. 服务器时间同步4. Performance API 高精度计时5. 页面可见性API优化三、生产环境最佳实践四、终极解决方案架构前言 前几天听说公司某个项…...

《从零掌握MIPI CSI-2: 协议精解与FPGA摄像头开发实战》-- CSI-2 协议详细解析 (一)

CSI-2 协议详细解析 (一&#xff09; 1. CSI-2层定义&#xff08;CSI-2 Layer Definitions&#xff09; 分层结构 &#xff1a;CSI-2协议分为6层&#xff1a; 物理层&#xff08;PHY Layer&#xff09; &#xff1a; 定义电气特性、时钟机制和传输介质&#xff08;导线&#…...

无法与IP建立连接,未能下载VSCode服务器

如题&#xff0c;在远程连接服务器的时候突然遇到了这个提示。 查阅了一圈&#xff0c;发现是VSCode版本自动更新惹的祸&#xff01;&#xff01;&#xff01; 在VSCode的帮助->关于这里发现前几天VSCode自动更新了&#xff0c;我的版本号变成了1.100.3 才导致了远程连接出…...