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

C语言——学生信息管理系统(数组)

文章目录

    • 一、前言
    • 二、目的
    • 三、框架
      • 1.菜单
        • 1.1主菜单
        • 1.2子菜单
      • 2.流程图
        • 2.1总流程图
        • 2.2开始流程图
        • 2.3增加学生信息流程图
        • 2.4.删除学生信息流程图
        • 2.5修改学生信息流程图
        • 2.6查询学生信息流程图
        • 2.7对学生信息排序流程图
      • 3.思路
    • 四、代码
    • 五、演示视频

一、前言

因为最近是在赶进度总结,数组和指针的笔记已经更新,但是数组、指针的习题还未总结,数组的题已经开始总结,但是还没总结完,所以还没发出来,目前学习进度已经到了学生管理系统,趁热打铁将学生管理系统的数组篇更新,因为之后还有指针篇,怕到时候代码搞混了,由于代码注释都比较清晰,所以不在一一赘述代码含义,有疑问可以给老王留言~

二、目的

用C语言数组写一个学生信息管理系统,并实现以下功能
1.对学生信息实现增、删、改、查;
2.对于增加学生信息可以判定内存是否已满、是否重复录入(学号唯一性);
3.对于删除学生信息判定是否有该生信息;
4.对于修改学生信息判定是否有该生信息;
5.对于查询学生信息判定是否有该生信息、仅打印查询信息;
6.排序功能——按照学号排序/按照成绩排序
7.以管理员身份打印所有学生信息;
8.退出系统

三、框架

1.菜单

1.1主菜单

****** -学生管理系统******
1.添加学生信息
2.删除学生信息
3.修改学生信息
4.查询学生信息
5.学生信息排序
0.退出管理系统

1.2子菜单

**排序方式
1-按照学号排序
2-按照成绩排序

2.流程图

2.1总流程图

在这里插入图片描述
由于不太清楚,我把详细的各部分列出来如下:

2.2开始流程图

在这里插入图片描述

2.3增加学生信息流程图

在这里插入图片描述

2.4.删除学生信息流程图

在这里插入图片描述

2.5修改学生信息流程图

在这里插入图片描述

2.6查询学生信息流程图

在这里插入图片描述

2.7对学生信息排序流程图

在这里插入图片描述

3.思路

1.构建一个学生结构体,里面包含学生学号、姓名、班级、成绩;
2.该结构体是一个数组型,用来存储学生呢信息;
3.先写主菜单和主菜单选项函数及四个相关函数——增删改查;
4.写方便验证的函数——打印函数;
5.写排序方式的子菜单和获取菜单选项的函数;
6.写排序方式——按照学号排序函数/按照成绩排序函数
7.排序函数用的冒泡排序法(在数组的笔记那篇文章有讲);

四、代码

#include "stdio.h"
#define STUDENT_NUM 30//创建一个学生结构体,包含学号、姓名、班级、成绩
struct Student
{int no;char name[64];int class;float score;
};
//初始化一个学生结构体为数组
struct Student student[STUDENT_NUM] = {0};void Student_Init(void);
int StudentMenu(void); //主菜单函数声明
void Student_ADD();
void Student_Revise();
void Student_Del();
void Student_Find();
void Student_Sort();
int SortMenu();
void SortNo();
void SortScore();
void Student_Printf();//初始化学生信息,将开辟STUDENT_NUM这么大的空间,并全部赋-1表示未录入信息
void Student_Init(void)
{for (int i = 0;i < STUDENT_NUM;i++){student[i].no = -1; //未录入信息标志}
}int main()
{Student_Init();int num1;while (1){num1=StudentMenu();switch (num1){case 1:Student_ADD();break;case 2:Student_Del();break;case 3:Student_Revise();break;case 4:Student_Find();break;case 5:Student_Sort();break;case 111:Student_Printf();break;case 0:goto over;}}
over:printf("感谢使用学生管理系统!\n");
}//主菜单
int StudentMenu(void)
{int num;
p1:printf("****** -学生管理系统******\n");printf("******1.添加学生信息******\n");printf("******2.删除学生信息******\n");printf("******3.修改学生信息******\n");printf("******4.查询学生信息******\n");printf("******5.学生信息排序******\n");printf("******0.退出管理系统******\n");printf("请输入你要执行操作的序号:\n");scanf("%d", &num);if ((num >= 0 && num <= 5) || (num == 111)) //111打印所有数据{return num;}else{printf("您输入的菜单选项不正确,清重新输入!\n");goto p1;}
}
//学生信息排序子菜单
int SortMenu()
{int num1;
p1:printf("*******排序方式*****\n");printf("***1-按照学号排序***\n");printf("***2-按照成绩排序***\n");printf("请输入排序方式:\n");scanf("%d",&num1);if (num1>=1&&num1<=2){return num1;}else{printf("输入错误选项,请重新选择排序方式!\n");goto p1;}}//添加学生信息
void Student_ADD()
{int i;//遍历学号数组,找到放数据的空间printf("正在执行添加学生信息操作……\n");for (i = 0; i < STUDENT_NUM; i++){if (student[i].no==-1)//有空间,跳出循环,输入数据{break;}}  if (i==STUDENT_NUM){printf("空间已满,禁止继续录入!\n");}//输入信息,由于有判定学号唯一,用tem保存从屏幕上获取的数据struct Student temp;printf("请输入学号:\n");scanf("%d",&temp.no);   printf("请输入姓名:\n");getchar();scanf("%s",temp.name);printf("请输入班级:\n");getchar();scanf("%d",&temp.class);printf("请输入成绩:\n");scanf("%f",&temp.score);//因为学号是唯一的,判断不能重复输入for (int j = 0; j < STUDENT_NUM; j++){if (student[j].no==temp.no){printf("该学生已被录入,请不要重复录入!\n");}   }student[i]=temp;}
//修改学生信息
void Student_Revise()
{int num_0=0;//设置查询标志位,没找到0,找到1printf("正在执行修改学生信息操作……\n");
p1:printf("请输入您要修改的学号:\n");int num,i;scanf("%d",&num);for (i = 0; i < STUDENT_NUM; i++)   {if (num!=student[i].no){num_0=0;continue;}else if(student[i].no==num){num_0=1;break;}}if (num_0==0){printf("查无此人,请重新输入要修改的学号!\n");goto p1;}//从屏幕获取新的数据printf("请输入学号:\n");scanf("%d",&student[i].no);printf("请输入姓名:\n");getchar();scanf("%s",student[i].name);getchar();printf("请输入班级:\n");scanf("%d",&student[i].class);printf("请输入成绩:\n");scanf("%f",&student[i].score); }
//删除学生信息
void Student_Del()
{int num,i;int num_0=0;//设置查询标志位,没找到0,找到1printf("正在执行删除学生信息操作……\n");
p1:printf("请输入您要删除的学号:\n");scanf("%d",&num);for (i = 0; i < STUDENT_NUM; i++){if (num!=student[i].no)//没找到{continue;num_0=0;}else if (student[i].no==num){num_0=1;student[i].no=-1;printf("删除成功!\n");}}if (num_0==0){printf("查无此人,请重新输入要删除的学号!\n");goto p1;}
}
//查询学生信息
void Student_Find()
{int i,num;int num_0=0;//设置查询标志位,没找到0,找到1printf("正在执行查询学生信息操作……\n");
p1:printf("请输入您要查询的学号:\n");scanf("%d",&num);for (i = 0; i < STUDENT_NUM; i++){if (num!=student[i].no){num_0=0;continue;}else if (student[i].no==num){num_0=1;break;}}if (num_0==0){printf("查无此人,请重新输入要查询的学号!\n");goto p1;}printf("学号\t姓名\t班级\t成绩\n");printf("%d\t",student[i].no);printf("%s\t",student[i].name);printf("%d\t",student[i].class);printf("%.2f\n",student[i].score);}
//对学生信息排序
void Student_Sort()
{int num2;num2=SortMenu();int num_0;//判断是否有学生信息,有则打印,for (int i = 0; i <STUDENT_NUM; i++){if (student[i].no==-1){num_0=0;continue;}else{num_0=1;break;}}if (num_0==0){printf("没有学生信息,无法排序打印!\n");}//选择排序方式if (num2==1){SortNo();}else if (num2==2){SortScore();}
}
//学生学号排序
void SortNo()
{int i,j;printf("正在按照学号排序\n");struct Student temp;for ( i = 0; i < STUDENT_NUM; i++){for (j = 0; j <STUDENT_NUM-i-1; j++){if (student[j].no>student[j+1].no){temp=student[j];student[j]=student[j+1];student[j+1]=temp;}}}Student_Printf(); 
}
//学生成绩排序
void SortScore()
{int i,j;printf("正在按照成绩排序\n");struct Student temp;for ( i = 0; i < STUDENT_NUM; i++){for (j = 0; j <STUDENT_NUM-i-1; j++){if (student[j].score<student[j+1].score){temp=student[j];student[j]=student[j+1];student[j+1]=temp;}}}Student_Printf(); }
//打印所有学生信息
void Student_Printf()
{printf("学号\t姓名\t班级\t成绩\n");for (int i = 0; i < STUDENT_NUM; i++){if (student[i].no!=-1){printf("%d\t",student[i].no);printf("%s\t",student[i].name);printf("%d\t",student[i].class);printf("%.2f\n",student[i].score);}}}

五、演示视频

由于之前我不知道数字时钟上传后友友们下载是要vip的,所以为了方便友友们,我将实现视频放在文章中如下:

数组学生管理系统

相关文章:

C语言——学生信息管理系统(数组)

文章目录 一、前言二、目的三、框架1.菜单1.1主菜单1.2子菜单 2.流程图2.1总流程图2.2开始流程图2.3增加学生信息流程图2.4.删除学生信息流程图2.5修改学生信息流程图2.6查询学生信息流程图2.7对学生信息排序流程图 3.思路 四、代码五、演示视频 一、前言 因为最近是在赶进度总…...

【C语言】基础语法1:变量和数据类型

下一篇&#xff1a;运算符和表达式 ❤️‍&#x1f525;前情提要❤️‍&#x1f525;   欢迎来到C语言基本语法教程   在本专栏结束后会将所有内容整理成思维导图&#xff08;结束换链接&#xff09;并免费提供给大家学习&#xff0c;希望大家纠错指正。本专栏将以基础出发…...

linux安装和使用jekins

Jenkins详细安装配置部署--超详细_jenkins安装部署_宝贝富贵猪的博客-CSDN博客 1.安装JDK 2.获取安装包 下载页面&#xff1a;https://jenkins.io/zh/download/ 或者Index of /jenkins/redhat/ | 清华大学开源软件镜像站 | Tsinghua Open Source Mirror 3.安装Jenkins sud…...

驼峰式匹配

问题&#xff1a; 如果我们可以将小写字母插入模式串 pattern 得到待查询项 query&#xff0c;那么待查询项与给定模式串匹配。&#xff08;我们可以在任何位置插入每个字符&#xff0c;也可以插入 0 个字符。&#xff09; 给定待查询列表 queries&#xff0c;和模式串 patte…...

第三十七章 立方体贴图总结

立方体贴图:将多个纹理组合起来映射到一张纹理上的一种纹理类型。 一个立方体贴图时包含了6个2D纹理的纹理,每个2D纹理都组成了立方体的一个面,相当于是一个有纹理的立方体。 创建立方体贴图: 首先需要生成一个纹理,将其绑定到纹理目标上,再做其他纹理操作。补充:绑定到…...

哈希(C++)

哈希 unordered系列关联式容器unordered_map介绍 底层结构哈希概念哈希冲突哈希函数哈希冲突解决方式闭散列开散列 模拟实现哈希表的改造 哈希应用位图概念实现 布隆过滤器提出概念 unordered系列关联式容器 在C98中&#xff0c;STL提供了底层为红黑树结构的一系列关联式容器&…...

Spring MVC 的调用(12)

目录 SpringMVC流程 源码分析 第一步:用户发起请求到前端控制器&#xff08;DispatcherServlet&#xff09; 第二步&#xff1a;前端控制器请求处理器映射器&#xff08;HandlerMappering&#xff09;去查找处理器&#xff08;Handle&#xff09;&#xff1a;通过xml配置或者…...

死磕内存篇 --- JAVA进程和linux内存间的大小关系

运行个JAVA 用sleep去hold住 package org.hjb.test; public class TestOnly { public static void main(String[] args) { System.out.println("sleep .."); try { Thread.sleep(10000000); } catch (InterruptedException e) { e.printStackTrace(); } } } java -…...

信号完整性分析:关于传输线的三十个问题解答(三)

21.FR4 中 50 欧姆传输线的单位长度电感是多少&#xff1f;如果阻抗加倍怎么办&#xff1f;&#xff08;What is the inductance per length of a 50-Ohm transmission line in FR4? What if the impedance doubles?&#xff09; FR4 中的所有 50 欧姆传输线的单位长度电感约…...

Java基础:Stream流常用方法

获取Stream流的方式 java.util.stream.Stream 是Java 8新加入的流接口。&#xff08;并不是一个函数式接口&#xff09; 获取一个流非常简单&#xff0c;有以下几种常用的方式&#xff1a; 所有 Collection 集合都可通过 stream 默认方法获取流&#xff08;顺序流&#xff09;…...

ImageNet使用方法(细节)自用!

学习记录&#xff0c;自用。 1. 下载数据集 点击以下链接下载种子文件&#xff0c;然后使用迅雷进行下载&#xff0c;仅下载勾选的文件即可。 https://hyper.ai/datasets/4889/c107755f6de25ba43c190f37dd0168dbd1c0877e 2. 解压 找到下载好的ILSVRC2012_img_train.tar 和…...

C/C++外观模式解析:简化复杂子系统的高效方法

C外观模式揭秘&#xff1a;简化复杂子系统的高效方法 引言设计模式的重要性外观模式简介与应用场景外观模式在现代软件设计中的地位与价值 外观模式基本概念外观模式的定义与核心思想提供简单接口隐藏复杂子系统设计原则与外观模式的关系外观模式实现外观模式的UML图 外观模式的…...

追梦之旅【数据结构篇】——详解小白如何使用C语言实现堆数据结构

详解小白如何使用C语言实现堆数据结构 “痛”撕堆排序~&#x1f60e; 前言&#x1f64c;什么是堆&#xff1f;堆的概念及结构 堆的性质&#xff1a;堆的实现堆向下调整算法画图分析&#xff1a;堆向下调整算法源代码分享&#xff1a;向下调整建小堆向下调整建大堆 堆向上调整算…...

cocoscreator性能优化4-Sprite颜色数据去除

前言 Sprite是游戏内容的一个基本组成元素&#xff0c;包括ui、道具、立绘等各种地方都会用到。大部分情况下美术会帮我们调好图片颜色&#xff0c;我们只要把图片直接放到游戏里就行了。Sprite默认的渲染顶点数据中包含了颜色数据&#xff0c;由于我们并不需要去修改颜色&…...

系统接口幂等性设计探究

前言&#xff1a; 刚开始工作的时候写了一个带UI页面的工具&#xff0c;需要设计登录功能&#xff0c;登录功能也很简单&#xff0c;输入用户名密码点击登录&#xff0c;触发后台查询并比对密码&#xff0c;如果登录成功则返回消息给前端&#xff0c;前端把消息弹出提示一下。…...

C learning_7

目录 1.for循环 1.虽然while循环和for循环本质上都可以实现循环&#xff0c;但是它们在使用方法和场合上还是有一些区别的。 2.while循环中存在循环的三个必须条件&#xff0c;但是由于风格的问题使得三个部分很可能偏离较远&#xff0c;这样 查找修改就不够集中和方便。所以…...

PageRank算法介绍

互联网上有数百亿个网页&#xff0c;可以分为这么几类&#xff1a;不含有用信息的&#xff0c;比如垃圾邮件&#xff1b;少数人比较感兴趣的&#xff0c;但范围不是很广的&#xff0c;比如个人博客、婚礼公告或家庭像册&#xff1b;很多人感兴趣的并且十分有用的&#xff0c;比…...

springboot+vue职称评审管理系统(源码+文档)

风定落花生&#xff0c;歌声逐流水&#xff0c;大家好我是风歌&#xff0c;混迹在java圈的辛苦码农。今天要和大家聊的是一款基于springboot的职称评审管理系统。项目源码请联系风歌&#xff0c;文末附上联系信息 。 目前有各类成品java毕设&#xff0c;需要请看文末联系方式 …...

腾讯云4核8G轻量服务器12M支持多少访客同时在线?并发数怎么算?

腾讯云轻量4核8G12M轻量应用服务器支持多少人同时在线&#xff1f;通用型-4核8G-180G-2000G&#xff0c;2000GB月流量&#xff0c;系统盘为180GB SSD盘&#xff0c;12M公网带宽&#xff0c;下载速度峰值为1536KB/s&#xff0c;即1.5M/秒&#xff0c;假设网站内页平均大小为60KB…...

图片英文翻译成中文转换器-中文翻译英文软件

您正在准备一份重要的英文资料或文件&#xff0c;但是您还不是很熟练地掌握英文&#xff0c;需要翻译才能完成您的任务吗&#xff1f;哪个软件能够免费把英文文档翻译成中文&#xff1f;让我们带您了解如何使用我们的翻译软件来免费翻译英文文档为中文。 我们的翻译软件是一款功…...

解决Ubuntu22.04 VMware失败的问题 ubuntu入门之二十八

现象1 打开VMware失败 Ubuntu升级之后打开VMware上报需要安装vmmon和vmnet&#xff0c;点击确认后如下提示 最终上报fail 解决方法 内核升级导致&#xff0c;需要在新内核下重新下载编译安装 查看版本 $ vmware -v VMware Workstation 17.5.1 build-23298084$ lsb_release…...

2024年赣州旅游投资集团社会招聘笔试真

2024年赣州旅游投资集团社会招聘笔试真 题 ( 满 分 1 0 0 分 时 间 1 2 0 分 钟 ) 一、单选题(每题只有一个正确答案,答错、不答或多答均不得分) 1.纪要的特点不包括()。 A.概括重点 B.指导传达 C. 客观纪实 D.有言必录 【答案】: D 2.1864年,()预言了电磁波的存在,并指出…...

Vue2 第一节_Vue2上手_插值表达式{{}}_访问数据和修改数据_Vue开发者工具

文章目录 1.Vue2上手-如何创建一个Vue实例,进行初始化渲染2. 插值表达式{{}}3. 访问数据和修改数据4. vue响应式5. Vue开发者工具--方便调试 1.Vue2上手-如何创建一个Vue实例,进行初始化渲染 准备容器引包创建Vue实例 new Vue()指定配置项 ->渲染数据 准备一个容器,例如: …...

Keil 中设置 STM32 Flash 和 RAM 地址详解

文章目录 Keil 中设置 STM32 Flash 和 RAM 地址详解一、Flash 和 RAM 配置界面(Target 选项卡)1. IROM1(用于配置 Flash)2. IRAM1(用于配置 RAM)二、链接器设置界面(Linker 选项卡)1. 勾选“Use Memory Layout from Target Dialog”2. 查看链接器参数(如果没有勾选上面…...

WordPress插件:AI多语言写作与智能配图、免费AI模型、SEO文章生成

厌倦手动写WordPress文章&#xff1f;AI自动生成&#xff0c;效率提升10倍&#xff01; 支持多语言、自动配图、定时发布&#xff0c;让内容创作更轻松&#xff01; AI内容生成 → 不想每天写文章&#xff1f;AI一键生成高质量内容&#xff01;多语言支持 → 跨境电商必备&am…...

PL0语法,分析器实现!

简介 PL/0 是一种简单的编程语言,通常用于教学编译原理。它的语法结构清晰,功能包括常量定义、变量声明、过程(子程序)定义以及基本的控制结构(如条件语句和循环语句)。 PL/0 语法规范 PL/0 是一种教学用的小型编程语言,由 Niklaus Wirth 设计,用于展示编译原理的核…...

涂鸦T5AI手搓语音、emoji、otto机器人从入门到实战

“&#x1f916;手搓TuyaAI语音指令 &#x1f60d;秒变表情包大师&#xff0c;让萌系Otto机器人&#x1f525;玩出智能新花样&#xff01;开整&#xff01;” &#x1f916; Otto机器人 → 直接点明主体 手搓TuyaAI语音 → 强调 自主编程/自定义 语音控制&#xff08;TuyaAI…...

CRMEB 框架中 PHP 上传扩展开发:涵盖本地上传及阿里云 OSS、腾讯云 COS、七牛云

目前已有本地上传、阿里云OSS上传、腾讯云COS上传、七牛云上传扩展 扩展入口文件 文件目录 crmeb\services\upload\Upload.php namespace crmeb\services\upload;use crmeb\basic\BaseManager; use think\facade\Config;/*** Class Upload* package crmeb\services\upload* …...

OPenCV CUDA模块图像处理-----对图像执行 均值漂移滤波(Mean Shift Filtering)函数meanShiftFiltering()

操作系统&#xff1a;ubuntu22.04 OpenCV版本&#xff1a;OpenCV4.9 IDE:Visual Studio Code 编程语言&#xff1a;C11 算法描述 在 GPU 上对图像执行 均值漂移滤波&#xff08;Mean Shift Filtering&#xff09;&#xff0c;用于图像分割或平滑处理。 该函数将输入图像中的…...

初探Service服务发现机制

1.Service简介 Service是将运行在一组Pod上的应用程序发布为网络服务的抽象方法。 主要功能&#xff1a;服务发现和负载均衡。 Service类型的包括ClusterIP类型、NodePort类型、LoadBalancer类型、ExternalName类型 2.Endpoints简介 Endpoints是一种Kubernetes资源&#xf…...