基于顺序表的学生成绩管理系统

🌈 个人主页:白子寰
🔥 分类专栏:python从入门到精通,魔法指针,进阶C++,C语言,C语言题集,C语言实现游戏👈 希望得到您的订阅和支持~
💡 坚持创作博文(平均质量分81+),分享更多关于深度学习、C/C++,python领域的优质内容!(希望得到您的关注~) 

 

注:
学生成绩管理系统(语法)简单实现icon-default.png?t=N7T8http://t.csdnimg.cn/DDppq该篇是基于数据结构顺序表的学生管理系统👇

gitee链接:基于数据结构顺序表的学生管理系统icon-default.png?t=N7T8https://gitee.com/mei-tianbu/stay-up-late-coding

目录

目的

 效果呈现

①学生数据添加

②查看学生数据 

​编辑

③删除及查看

代码的具体实现

一.在测试文件(StuScoreTest.c)框架构建

学生管理系统框架代码实现

二.在头文件(StuScore.h)定义学生管理系统的相关函数

三.在文件(StuScore.c)具体实现学生数据的增删查改

学生管理系统的初始化和销毁代码具体实现

学生增删查找的具体实现 

学生数据添加代码具体实现

利用学生姓名寻找学生相关数据代码具体实现

 学生数据删除具体实现

修改学生数据的具体实现

学生数据的完整查看具体实现

一个学生相关数据的查看具体实现


 

目的

针对学生信息(学号,姓名,性别,英语、数学、数据结构成绩、简介)进行

操作(添加、删除、修改、查找个人、查找全部)信息


 

 效果呈现

①学生数据添加

②查看学生数据 

③修改和查看

 

③删除及查看


 

代码的具体实现

一.在测试文件(StuScoreTest.c)框架构建

1.先基于顺序表的初始化学生管理系统

2.主函数学生管理系统利用在do...while...语句中包含switch...case..语句实现学生数据的增删查改操作的框架

3.再基于顺序表的销毁学生管理系统

学生管理系统框架代码实现

int main()
{int op = -1;Stu con;//初始化学生管理系统STUCS(&con);do {menu();printf("请选择你的操作:");scanf("%d", &op);switch (op){case 1://添加学生数据stuscoreadd(&con);break;case 2://删除学生数据stuscoredel(&con);break; case 3://修改学生数据stuscoremodify(&con);break;case 4://查找学生数据stuscorefind(&con);break;case 5://查看完整学生数据stuscoreshow(&con);break;case 0:printf("成功退出系统\n");break;default:printf("选择错误,请重新选择\n");}} while (op != 0);//销毁学生管理系统STUdestroy(&con);return 0;
}

 


二.在头文件(StuScore.h)定义学生管理系统的相关函数

1.创建(学生相关数据类型)结构体和顺序表的前置声明

#pragma once#define MAX_NAME 100//(学生相关数据类型)结构体
typedef struct stuscore
{int id;//学号char name[MAX_NAME];//姓名char sex[5];//性别float EngScore;//英语float MathScore;//数学float DatastrScore;//数据结构char StudentProfile[1000];
}Stu;//顺序表的前置声明
struct shunxu;typedef struct shunxu stu;

2.定义学生管理系统的初始化和销毁,增添查改函数

//学生管理系统的初始化和销毁
void STUCS(stu* pcon);
void STUdestroy(stu* pcon);//添加,删除,修改,查找,查找全部
void stuscoreadd(stu* pcon);
void stuscoredel(stu* pcon); 
void stuscoremodify(stu* pcon);
void stuscorefind(stu* pcon);
void stuscoreshow(stu* pcon);

 

三.在文件(StuScore.c)具体实现学生数据的增删查改

1.学生管理系统的初始化和销毁(调用顺序表中的初始化和销毁)

调用代码

//初始化
void CS(SX* ps)
{//具体arr,size,nowsize具体的值不知道是多少,所以初始化为NULL,0ps->arr = NULL;ps->size = ps->nowsize = 0;
}//销毁
void SXdestroy(SX* ps)
{//保证指针有效assert(ps);if (ps->arr){free(ps->arr);}ps->arr = NULL;ps->size = ps->nowsize = 0;
}

学生管理系统的初始化和销毁代码具体实现

//学生管理系统的初始化和销毁
void STUCS(stu* pcon)
{CS(pcon);
}void STUdestroy(stu* pcon)
{SXdestroy(pcon);
}

 

学生增删查找的具体实现 

2.学生数据的添加

①输入学生数据保存在结构体变量

②使用.访问结构体成员输入学生的数据(学号,姓名,性别,英语、数学、数据结构成绩、简介)

③基于顺序表的尾插将学生数据保存在学生管理系统里去

调用顺序表的尾部插入数据

//顺序表的尾插
void CHARUback(SX* ps, datatype x)
{//方式一:断言 -- 暴力方式 --会报错且知道具体错误位置assert(ps);//方式二:断言 -- 温柔方式--会报错,不知道具体错误位置/*if (ps == NULL){return;}*///空间不够,扩容publicKUOR(ps);//空间足够,直接插入/*第一种写法*///ps->arr[ps->size] = x;//ps->size++;/*第二种写法*/ps->arr[ps->size++] = x;}
学生数据添加代码具体实现
//添加学生数据
void stuscoreadd(stu* pcon)
{Stu stu;printf("请输入学生学号:\n");scanf("%d", &stu.id);	printf("请输入学生姓名:\n");scanf("%s", stu.name);printf("请输入学生性别:\n");scanf("%s", stu.sex);printf("请输入学生英语成绩:\n");scanf("%f", &stu.EngScore);printf("请输入学生数学成绩:\n");scanf("%f", &stu.MathScore);printf("请输入学生数据结构成绩:\n");scanf("%f", &stu.DatastrScore);printf("请输入学生个人简介:\n");scanf("%s", stu.StudentProfile);//保存到学生管理系统:尾插CHARUback(pcon, stu);
}

3.利用学生姓名寻找学生相关数据,若找到返回下标,找不到,返回-1

使用strcmp进行字符串之间的比较进而实现学生姓名的查找

利用学生姓名寻找学生相关数据代码具体实现
//寻找学生名字,找到返回下标,没找到,返回-1
int findname(stu* pcon, char name[])
{for (int i = 0; i < pcon->size; i++){if (strcmp(pcon->arr[i].name, name) == 0) {return i;//找到了}}return -1;
}

4.学生数据删除

①利用寻找学生姓名删除该生的相关数据

若找到该生姓名,调用顺序表的删除进而删除该生的相关数据

若找不到该生姓名,直接返回

②调用顺序表的删除进而删除学生的相关数据

调用代码

//删除指定位置数据
void SXpointdestroy(SX* ps, int pos)
{//判断ps是否为有效指针assert(ps);//断言,保证下标pos>=0且pos小于顺序表空间大小sizeassert(pos >= 0 && pos < ps->size);for (int i = pos; i < ps->size - 1; i++){ps->arr[i] = ps->arr[i + 1];}ps->size--;
}
 学生数据删除具体实现
//学生数据删除
void stuscoredel(stu* pcon)
{printf("请输入要删除的学生姓名:");char name [MAX_NAME];scanf("%s", name);int findIndex = findname(pcon, name);if (findIndex < 0){printf("要删除的学生不存在!\n");return;}SXpointdestroy(pcon, findIndex);printf("该生相关数据删除成功!!!\n");
}

5.修改学生数据

利用寻找学生姓名修改该生的相关数据

若找到该生姓名,利用指针修改该生的相关数据

若找不到该生姓名,直接返回

修改学生数据的具体实现
//学生数据的修改
void stuscoremodify(stu* pcon)
{char name[MAX_NAME];printf("请输入要修改的学生姓名:");scanf("%s", name);int findIndex = findname(pcon, name);if (findIndex < 0){printf("要找的该生相关数据不存在!\n");return;}printf("请输入要修改的学生学号:\n");scanf("%d", &pcon->arr[findIndex].id);printf("请输入要修改的学生姓名:\n");scanf("%s", pcon->arr[findIndex].name);printf("请输入要修改的学生性别:\n");scanf("%s", pcon->arr[findIndex].sex);printf("请输入要修改的学生英语成绩:\n");scanf("%f", &pcon->arr[findIndex].EngScore);printf("请输入要修改的学生数学成绩:\n");scanf("%f", &pcon->arr[findIndex].MathScore);printf("请输入要修改的学生数据结构成绩:\n");scanf("%f", &pcon->arr[findIndex].DatastrScore);printf("请输入要修改的学生个人简介:\n");scanf("%s", pcon->arr[findIndex].StudentProfile);printf("修改学生相关数据成功!!!\n");
}

6.学生数据的完整查看

使用for循环指针访问结构体成员输出全部学生的相关数据

学生数据的完整查看具体实现
//学生完整数据查看
void stuscoreshow(stu* pcon)
{for (int i = 0; i < pcon->size; i++){printf("学生学号:%d\n",pcon->arr[i].id);printf("学生姓名:%s\n", pcon->arr[i].name);printf("学生性别:%s\n", pcon->arr[i].sex);printf("学生英语成绩:%.2f\n", pcon->arr[i].EngScore);printf("学生数学成绩:%.2f\n", pcon->arr[i].MathScore);printf("学生数据结构成绩:%.2f\n", pcon->arr[i].DatastrScore);printf("学生个人简介:%s\n", pcon->arr[i].StudentProfile);}
}

7.一个学生相关数据的查看

利用寻找学生姓名打印该生的相关数据

若找到该生姓名,利用指针打印该生的相关数据

若找不到该生姓名,直接返回

一个学生相关数据的查看具体实现
//学生相关数据查看
void stuscorefind(stu* pcon)
{char name[MAX_NAME];printf("请输入要查找的学生姓名:\n");scanf("%s", name);int findIndex = findname(pcon, name);if (findIndex < 0){printf("查找到学生相关数据不存在!!!\n");return;}//找到了,打印学生相关数据printf("学生学号:%d\n", pcon->arr[findIndex].id);printf("学生姓名:%s\n", pcon->arr[findIndex].name);printf("学生性别:%s\n", pcon->arr[findIndex].sex);printf("学生英语成绩:%.2f\n", pcon->arr[findIndex].EngScore);printf("学生数学成绩:%.2f\n", pcon->arr[findIndex].MathScore);printf("学生数据结构成绩:%.2f\n", pcon->arr[findIndex].DatastrScore);printf("学生个人简介:%s\n", pcon->arr[findIndex].StudentProfile);
}

 


 ***********************************************************分割线*****************************************************************************
完结!!!

感谢浏览和阅读。
等等等等一下,分享最近喜欢的一句话:

“道阻且长,行则将至”。

我是白子寰,如果你喜欢我的作品,不妨你留个点赞+关注让我知道你曾来过。
你的点赞和关注是我持续写作的动力!!! 
好了划走吧。 

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Android 自定义View 测量控件宽高、自定义viewgroup测量

1、View生命周期以及View层级 1.1、View生命周期 View的主要生命周期如下所示&#xff0c; 包括创建、测量&#xff08;onMeasure&#xff09;、布局&#xff08;onLayout&#xff09;、绘制&#xff08;onDraw&#xff09;以及销毁等流程。 自定义View主要涉及到onMeasure、…

设置asp.net core WebApi函数请求参数可空的两种方式

以下面定义的asp.net core WebApi函数为例&#xff0c;客户端发送申请时&#xff0c;默认三个参数均为必填项&#xff0c;不填会报错&#xff0c;如下图所示&#xff1a; [HttpGet] public string GetSpecifyValue(string param1,string param2,string param3) {return $"…

LeetCode-108. 将有序数组转换为二叉搜索树【树 二叉搜索树 数组 分治 二叉树】

LeetCode-108. 将有序数组转换为二叉搜索树【树 二叉搜索树 数组 分治 二叉树】 题目描述&#xff1a;解题思路一&#xff1a;中序遍历&#xff0c;总是选择中间位置左边的数字作为根节点解题思路二&#xff1a;0解题思路三&#xff1a;0 题目描述&#xff1a; 给你一个整数数…

【软件工程】概要设计

1. 导言 1.1 目的 该文档的目的是描述学生成绩管理系统的概要设计&#xff0c;其主要内容包括&#xff1a; 系统功能简介 系统结构简介 系统接口设计 数据设计 模块设计 界面设计 本文的预期读者是&#xff1a; 项目开发人员 项目管理人员 项目评测人员&#xff08;…

利用开源AI引擎:打造安全生产作业人员穿戴检测应用平台

在电力行业中&#xff0c;作业人员的安全是至关重要的。为了确保工作人员在进行电力设施操作时的个人安全&#xff0c;需要对作业人员的安全穿戴情况进行严格监控。随着计算视觉技术的发展&#xff0c;特别是图像处理和目标检测技术的进步&#xff0c;我们可以通过自动化的方式…

扫雷(蓝桥杯)

题目描述 小明最近迷上了一款名为《扫雷》的游戏。其中有一个关卡的任务如下&#xff0c; 在一个二维平面上放置着 n 个炸雷&#xff0c;第 i 个炸雷 (xi , yi ,ri) 表示在坐标 (xi , yi) 处存在一个炸雷&#xff0c;它的爆炸范围是以半径为 ri 的一个圆。 为了顺利通过这片土…

链路追踪原理

分布式系统为什么需要链路追踪&#xff1f; 随着互联网业务快速扩展&#xff0c;软件架构也日益变得复杂&#xff0c;为了适应海量用户高并发请求&#xff0c;系统中越来越多的组件开始走向分布式化&#xff0c;如单体架构拆分为微服务、服务内缓存变为分布式缓存、服务组件通…

网络原理 - HTTP / HTTPS(3)——http响应

目录 一、认识 “状态码”&#xff08;status code&#xff09; 常见的状态码 &#xff08;1&#xff09;200 OK &#xff08;2&#xff09;404 Not Found &#xff08;3&#xff09;403 ForBidden &#xff08;4&#xff09;405 Method Not Allowed &#xff08;5&…

Linux系统Docker搭建Wiki.Js应用程序并结合cpolar实现公网访问内网知识库

文章目录 1. 安装Docker2. 获取Wiki.js镜像3. 本地服务器打开Wiki.js并添加知识库内容4. 实现公网访问Wiki.js5. 固定Wiki.js公网地址 不管是在企业中还是在自己的个人知识整理上&#xff0c;我们都需要通过某种方式来有条理的组织相应的知识架构&#xff0c;那么一个好的知识整…

Matlab梁单元有限元编程:铁木辛柯梁VS欧拉梁

专栏导读 作者简介&#xff1a;工学博士&#xff0c;高级工程师&#xff0c;专注于工业软件算法研究本文已收录于专栏&#xff1a;《有限元编程从入门到精通》本专栏旨在提供 1.以案例的形式讲解各类有限元问题的程序实现&#xff0c;并提供所有案例完整源码&#xff1b;2.单元…

我与C++的爱恋:内联函数,auto

​ ​ &#x1f525;个人主页&#xff1a;guoguoqiang. &#x1f525;专栏&#xff1a;我与C的爱恋 ​ 一、内联函数 1.内联函数的概念 内联函数目的是减少函数调用的开销&#xff0c;通过将每个调用点将函数展开来实现。这种方法仅适用于那些函数体小、调用频繁的函数。 …

【JavaWeb】百度地图API SDK导入

百度地图开放平台 | 百度地图API SDK | 地图开发 (baidu.com) 登录注册&#xff0c;创建应用&#xff0c;获取AK 地理编码 | 百度地图API SDK (baidu.com) 需要的接口一&#xff1a;获取店铺/用户 所在地址的经纬度坐标 轻量级路线规划 | 百度地图API SDK (baidu.com) 需要的…

java-ssm-jsp-旅游景点数据库管理系统

java-ssm-jsp-旅游景点数据库管理系统 获取源码——》哔站搜&#xff1a;计算机专业毕设大全 获取源码——》哔站搜&#xff1a;计算机专业毕设大全

自定义树形筛选选择组件

先上效果图 思路&#xff1a;刚开始最上面我用了el-input&#xff0c;选择框里面内容用了el-inputel-tree使用&#xff0c;但后面发现最上面那个可以输入&#xff0c;那岂不是可以不需要下拉就可以使用&#xff0c;岂不是违背了写这个组件的初衷&#xff0c;所以后面改成div自定…

5.vector容器的使用

文章目录 vector容器1.构造函数代码工程运行结果 2.赋值代码工程运行结果 3.容量和大小代码工程运行结果 4.插入和删除代码工程运行结果 5.数据存取工程代码运行结果 6.互换容器代码工程运行结果 7.预留空间代码工程运行结果 vector容器 1.构造函数 /*1.默认构造-无参构造*/ …

StarRocks实战——携程火车票指标平台建设

目录 前言 一、早期OLAP架构与痛点 二、指标平台重构整体设计 2.1 指标查询过程 2.1.1 明细类子查询 2.1.2 汇总类子查询 2.1.3 “缓存” 2.2 数据同步 三、Starrocks使用经验分享 3.1 建表经验 3.2 数据查询 3.3 函数问题 四、查询性能大幅提升 五、 后续优化方…

C++实现二叉搜索树的增删查改(非递归玩法)

文章目录 一、二叉搜索树的概念结构和时间复杂度二、二叉搜索树的插入三、二叉搜索树的查找四、二叉搜索树的删除&#xff08;最麻烦&#xff0c;情况最多&#xff0c;一一分析&#xff09;3.1首先我们按照一般情况下写&#xff0c;不考虑特殊情况下4.1.1左为空的情况&#xff…

多线程--深入探究多线程的重点,难点以及常考点线程安全问题

˃͈꒵˂͈꒱ write in front ꒰˃͈꒵˂͈꒱ ʕ̯•͡˔•̯᷅ʔ大家好&#xff0c;我是xiaoxie.希望你看完之后,有不足之处请多多谅解&#xff0c;让我们一起共同进步૮₍❀ᴗ͈ . ᴗ͈ აxiaoxieʕ̯•͡˔•̯᷅ʔ—CSDN博客 本文由xiaoxieʕ̯•͡˔•̯᷅ʔ 原创 CSDN 如…

C语言交换二进制位的奇数偶数位

基本思路 我们要先把想要交换的数的二进制位给写出来假如交换13的二进制位&#xff0c;13的二进制位是 0000 0000 0000 0000 0000 0000 0000 1101然后写出偶数位的二进制数&#xff08;偶数位是1的&#xff09; 1010 1010 1010 1010 1010 1010 1010 1010然后写出奇数位的二进…

2012年认证杯SPSSPRO杯数学建模C题(第一阶段)碎片化趋势下的奥运会商业模式全过程文档及程序

2012年认证杯SPSSPRO杯数学建模 C题 碎片化趋势下的奥运会商业模式 原题再现&#xff1a; 从 1984 年的美国洛杉矶奥运会开始&#xff0c;奥运会就不在成为一个“非卖品”&#xff0c;它在向观众诠释更高更快更强的体育精神的同时&#xff0c;也在攫取着巨大的商业价值&#…