Day18 Java学生管理系统

Day18 Java学生管理系统

一、需求分析

考虑的方面:

用户需求、功能需求、非功能性需求、约束条件、优先级和权衡、可追踪性、需求验证。

二、项目搭建

搭建学生管理系统

1、创建项目的main ;pojo ; sms ; utils包。

2、编写系统的 增(涉及到扩容–oldcopycity>>1—旧数组长度带符号右移)、

​ 删(根据班级号+学号去删除)、改(修改学生对象里的所有数据)、

​ 查( 根据姓名查询 – 学生数组 根据性别查询 – 学生数组 根据年龄段查询 – 学生数组 根据班级号查询 – 学生数组 根据班级号+学号查询 – 学生对象在容器中的下标 )功能

注意:删除功能的 判断学生合法性 步骤很重要,不能省略。

三、添加功能步骤:

  1. 创建学生类(Student Class)

    • 定义包含学生信息的属性,如姓名、学号等。
    • 编写构造函数和访问方法(getter和setter)。
  2. 创建学生管理系统类(StudentManagementSystem Class)

    • 使用一个集合(如ArrayList)来存储学生对象。
    • 编写方法用于添加学生到系统中。
  3. 实现添加学生功能

    • 在用户界面中接收学生的信息(如姓名、学号等)。
    • 创建一个新的学生对象。
    • 调用学生管理系统类的方法将新学生对象添加到系统中。
    • 提供适当的反馈,确认学生已成功添加。

    注意:添加学生时,需要对数据源进行扩容

    以下为添加功能(含数据源扩容)的代码:

    public int add(Student stu) {
    
    		//1.判断学生信息合法性
    		if(!StuInfoUtil.isStu(stu)){
    			return -1;
    		}
    
    		//2.判断是否有重复学生
    		if(query(stu) != -1){
    			return -2;
    		}
    
    		//3.判断是否扩容
    		if(stus.length == size){
    			expansion();
    		}
    		//4.添加学生
    		stus[size++] = stu;
    		return 1;
    	}
    //数据源的扩容
    	@Override
    	public void expansion() {
    		int oldCapacity = stus.length;
    		int newCapacity = oldCapacity + (oldCapacity>>1);
    		stus = Arrays.copyOf(stus, newCapacity);
    	}
    

四、删除功能步骤:

  1. 扩展学生管理系统类

    • 编写方法用于根据学生ID删除学生。
  2. 实现删除学生功能

    • 在用户界面中接收要删除的学生ID。
    • 调用学生管理系统类的方法,根据提供的学生ID删除学生。
    • 如果找到并成功删除学生,提供相应的反馈。
    • 如果未找到学生或删除失败,也提供相应的反馈。
  3. 更新学生列表

    • 在删除学生后,及时更新学生列表的显示,以反映最新的学生信息

    以下为删除功能的代码

    public int delete(String classId, String id) {
    		//1.判断学生信息合法性
    		if(!StuInfoUtil.isClassId(classId) || !StuInfoUtil.isId(id)){
    			return -1;
    		}
    
    		//2.判断是否有该学生
    		int index = query(classId, id);
    		if(index == -1){
    			return -2;
    		}
    
    		//3.删除学生
    		for (int i = index; i < size-1; i++) {
    			stus[i] = stus[i+1];
    		}
    		size--;
    		return 1;
    	}
    

五、修改功能步骤:

  1. 扩展学生管理系统类

    • 编写方法用于根据学生ID修改学生信息。
  2. 实现修改学生功能

    • 在用户界面中接收要修改的学生ID。
    • 根据提供的学生ID查找学生对象。
    • 提示用户输入要修改的学生信息(如姓名、学号等)。
    • 更新学生对象的信息。
    • 提供适当的反馈,确认学生信息已成功修改。

    以下为修改功能的代码:

    public int update(String classId, String id, int type, Object val) {
    
    		//1.判断学生信息的合法性
    		if(!StuInfoUtil.isClassId(classId) || !StuInfoUtil.isId(id)){
    			return -1;
    		}
    
    		//2.判断是否有该学生
    		int index = query(classId, id);
    		if(index == -1){
    			return -2;
    		}
    
    		//3.判断修改类型
    		switch (type) {
    		case NAME:
    			String nameVal = (String) val;
    			//判断修改数据的合法性
    			if(!StuInfoUtil.isName(nameVal)){
    				return -3;
    			}
    			//修改数据
    			stus[index].setName(nameVal);
    			break;
    		case SEX:
    			char sexVal = (Character) val;
    			//判断修改数据的合法性
    			if(!StuInfoUtil.isSex(sexVal)){
    				return -3;
    			}
    			//修改数据
    			stus[index].setSex(sexVal);
    			break;
    		case AGE:
    			int ageVal = (Integer) val;
    			//判断修改数据的合法性
    			if(!StuInfoUtil.isAge(ageVal)){
    				return -3;
    			}
    			//修改数据
    			stus[index].setAge(ageVal);
    			break;
    		case CLASS_ID:
    			
    			String classIdVal = (String) val;
    			
    			//判断目标班级上是否有重复学生
    			if(query(classIdVal, id) != -1){
    				return -4;
    			}
    			
    			//判断修改数据的合法性
    			if(!StuInfoUtil.isClassId(classIdVal)){
    				return -3;
    			}
    			//修改数据
    			stus[index].setClassId(classIdVal);
    			break;
    		case ID:
    
    			String idVal = (String) val;
    			
    			//判断目标学号上是否有重复学生
    			if(query(classId, idVal) != -1){
    				return -5;
    			}
    			
    			//判断修改数据的合法性
    			if(!StuInfoUtil.isId(idVal)){
    				return -3;
    			}
    			//修改数据
    			stus[index].setId(idVal);
    			break;
    		}
    
    		return 1;
    	}
    

六、查询功能步骤:

  1. 扩展学生管理系统类

    • 编写方法用于根据学生ID或其他条件查询学生信息。
  2. 实现查询学生功能

    • 在用户界面中接收查询条件(如学生ID)。
    • 调用学生管理系统类的方法,根据提供的条件查询学生信息。
    • 如果找到符合条件的学生,显示学生信息。
    • 如果未找到符合条件的学生,提供相应的反馈。
  3. 提供高级查询功能(可选)

    • 实现根据不同条件进行查询,如姓名、年龄、成绩等。
    • 支持模糊查询或范围查询等高级查询功能。

    以下为查询功能的代码:

    	@Override
    	public Student[] getStusByName(String name) {
    		//1.验证学生信息合法性
    		if(!StuInfoUtil.isName(name)){
    			return null;
    		}
    
    		//2.获取符合条件的学生人数
    		int count = 0;
    		for (int i = 0; i < size; i++) {
    			if(stus[i].getName().equals(name)){
    				count++;
    			}
    		}
    		if(count == 0){
    			return null;
    		}
    
    		//3.创建新数组
    		Student[] newStus = new Student[count];
    
    		//4.遍历数据源,把符合条件的学生对象存入新数组中
    		int index = 0;
    		for (int i = 0; i < size; i++) {
    			if(stus[i].getName().equals(name)){
    				newStus[index++] = stus[i];
    			}
    		}
    
    		return newStus;
    	}
    
    	@Override
    	public Student[] getStusBySex(char sex) {
    		//1.验证学生信息合法性
    		if(!StuInfoUtil.isSex(sex)){
    			return null;
    		}
    
    		//2.获取符合条件的学生人数
    		int count = 0;
    		for (int i = 0; i < size; i++) {
    			if(stus[i].getSex() == sex){
    				count++;
    			}
    		}
    		if(count == 0){
    			return null;
    		}
    
    		//3.创建新数组
    		Student[] newStus = new Student[count];
    
    		//4.遍历数据源,把符合条件的学生对象存入新数组中
    		int index = 0;
    		for (int i = 0; i < size; i++) {
    			if(stus[i].getSex() == sex){
    				newStus[index++] = stus[i];
    			}
    		}
    
    		return newStus;
    	}
    
    	@Override
    	public Student[] getStusByAge(int start, int end) {
    		//1.验证学生信息合法性
    		if(!StuInfoUtil.isAge(start) || !StuInfoUtil.isAge(end)){
    			return null;
    		}
    
    		//2.获取符合条件的学生人数
    		int count = 0;
    		for (int i = 0; i < size; i++) {
    			int age = stus[i].getAge();
    			if(age>=start && age<end){
    				count++;
    			}
    		}
    		if(count == 0){
    			return null;
    		}
    
    		//3.创建新数组
    		Student[] newStus = new Student[count];
    
    		//4.遍历数据源,把符合条件的学生对象存入新数组中
    		int index = 0;
    		for (int i = 0; i < size; i++) {
    			int age = stus[i].getAge();
    			if(age>=start && age<end){
    				newStus[index++] = stus[i];
    			}
    		}
    
    		return newStus;
    	}
    
    	@Override
    	public Student[] getStusByClassId(String classId) {
    		//1.验证学生信息合法性
    		if(!StuInfoUtil.isClassId(classId)){
    			return null;
    		}
    
    		//2.获取符合条件的学生人数
    		int count = 0;
    		for (int i = 0; i < size; i++) {
    			if(stus[i].getClassId().equals(classId)){
    				count++;
    			}
    		}
    		if(count == 0){
    			return null;
    		}
    
    		//3.创建新数组
    		Student[] newStus = new Student[count];
    
    		//4.遍历数据源,把符合条件的学生对象存入新数组中
    		int index = 0;
    		for (int i = 0; i < size; i++) {
    			if(stus[i].getClassId().equals(classId)){
    				newStus[index++] = stus[i];
    			}
    		}
    
    		return newStus;
    	}
    

    在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

一. 并行处理与GPU体系架构-GPU并行处理

目录 前言0. 简述1. 这个小节会涉及到的关键字2. CPU与GPU在并行处理的优化方向3. Summary总结参考 前言 自动驾驶之心推出的 《CUDA与TensorRT部署实战课程》&#xff0c;链接。记录下个人学习笔记&#xff0c;仅供自己参考 本次课程我们来学习下课程第一章——并行处理与GPU体…

4.1_5 文件存储空间管理

文章目录 4.1_5 文件存储空间管理&#xff08;一&#xff09;存储空间的划分与初始化&#xff08;二&#xff09;存储空间管理——空闲表法&#xff08;三&#xff09;存储空间管理——空闲链表法&#xff08;1&#xff09;空闲盘块链&#xff08;2&#xff09;空闲盘区链 &…

腾讯云企业用户可以申请免费服务器试用吗?

腾讯云企业用户可以申请免费服务器试用吗&#xff1f;可以的&#xff0c;腾讯云免费服务器申请入口 https://curl.qcloud.com/FJhqoVDP 免费服务器可选轻量应用服务器和云服务器CVM&#xff0c;轻量配置可选2核2G3M、2核8G7M和4核8G12M&#xff0c;CVM云服务器可选2核2G3M和2核…

拌合楼内部管理系统开发(三) 继续功能模块及数据表设计-收发管理模块(无人值守功能)

前言:继续闭门造车 继续发挥,上一篇写到了生产管理,今天开始做无人值守的功能模块的设计了.核心就是收发管理的模块了. 一、发货的工作流程&#xff1a; 我设想的发货流程如下&#xff1a; 1. 发货的源头指令来源于生产计划&#xff1a; 生产计划要素是需要生产的产品&#xff…

解决google Chorme 隐私设置错误

问题&#xff1a; 我们在使用浏览器的时候&#xff0c;出现隐私设置错误“您的链接不是私密连接”&#xff0c;如下图所示&#xff1a; 第一步开始来解决隐私设置错误&#xff0c;打开浏览器之后&#xff0c;点击右上方的三点图标&#xff0c;选择设置&#xff0c;如下图所示&…

基于支持向量机SVM的沉降预测,SVM详细原理,Libsvm详解

目录 支持向量机SVM的详细原理 SVM的定义 SVM理论 Libsvm工具箱详解 简介 参数说明 易错及常见问题 完整代码和数据下载链接:基于支持向量机SVM的沉降预测资源-CSDN文库 https://download.csdn.net/download/abc991835105/88947544 SVM应用实例,基于支持向量机SVM的沉降预测…

MYSQL报 - Lock wait timeout exceeded; try restarting transaction

前言 今天在使用数据库编辑数据时&#xff0c;页面突然卡主&#xff0c;退出程序后重新编辑&#xff0c;发现报错&#xff0c;1205 - Lock wait timeout exceeded&#xff1b; try restarting transaction&#xff08;如下图&#xff09;&#xff0c;正巧在和同事开会&#xf…

基于Springboot和Redis实现的在线选课系统

1.项目简介 1.1 介绍 毕业设计真的就是demo吗&#xff1f;作为工作前的最后一个校园项目&#xff0c;毕业设计应当尽可能的贴近企业实战&#xff0c;业务不必很复杂&#xff0c;但要做到麻雀虽小五脏俱全。本期学长跟大家一起分享如何开发一个在线选课系统&#xff0c;需求也…

如何实现队列和栈的转化(c语言)

文章目录 一.什么是栈二.什么是队列三.怎么把栈变成队列&#xff08;力扣&#xff09;四.怎么把队列变成栈&#xff08;力扣&#xff09;总结 一.什么是栈 栈&#xff08;stack&#xff09;又名堆栈&#xff0c;它是一种运算受限的线性表。限定权在表尾进行插入和删除操作的线性…

从政府工作报告中的IT热词统计探计算机行业发展(二)人工智能+:3次

政府工作报告作为政府工作的全面总结和未来规划&#xff0c;不仅反映了国家整体的发展态势&#xff0c;也为各行各业提供了发展的指引和参考。随着信息技术的快速发展&#xff0c;计算机行业已经成为推动经济社会发展的重要引擎之一。因此&#xff0c;从政府工作报告中探寻计算…

嵌入式学习39-程序创建数据库及查找

1.sqlite3_open int sqlite3_open( const char *filename, /* Database filename (UTF-8) */ sqlite3 **ppDb /* OUT: SQLite db handle */ ); 功能: 打开 数据库文件(创建一个数据库连接) 参数: filename: …

顺序表操作

归纳编程学习的感悟&#xff0c; 记录奋斗路上的点滴&#xff0c; 希望能帮到一样刻苦的你&#xff01; 如有不足欢迎指正&#xff01; 共同学习交流&#xff01; &#x1f30e;欢迎各位→点赞 &#x1f44d; 收藏⭐ 留言​&#x1f4dd;既然选择了远方&#xff0c;当不负青春…

腾讯云免费服务器配置大全和个人企业申请流程,2024年新版教程

腾讯云免费服务器申请入口 https://curl.qcloud.com/FJhqoVDP 免费服务器可选轻量应用服务器和云服务器CVM&#xff0c;轻量配置可选2核2G3M、2核8G7M和4核8G12M&#xff0c;CVM云服务器可选2核2G3M和2核4G3M配置&#xff0c;腾讯云服务器网txyfwq.com分享2024年最新腾讯云免费…

力扣爆刷第98天之hot100五连刷76-80

力扣爆刷第98天之hot100五连刷76-80 文章目录 力扣爆刷第98天之hot100五连刷76-80一、295. 数据流的中位数二、121. 买卖股票的最佳时机三、55. 跳跃游戏四、45. 跳跃游戏 II五、763. 划分字母区间 一、295. 数据流的中位数 题目链接&#xff1a;https://leetcode.cn/problems…

最后的挣扎 - Qt For Android on HuaWei Mate 60Pro (v4.0.0)

简介 为什么叫最后的挣扎, 其实都知道即将到来的 HarmonyOS NEXT 将抛弃Android支持&#xff0c;纯血HarmonyOS 将上线&#xff0c; 此时再说Qt for android支持Huawei HarmonyOS的设备其实并没有多少意思&#xff0c; 但恐怕在大多数基础软件完成兼容前&#xff0c; 很多人还是…

avue-crud顶部操作按钮插槽;avue-crud列数据插槽;avue-crud行操作按钮插槽

1.avue-crud顶部操作按钮插槽&#xff1b; <template slot"menuLeft" slot-scope"{ size }"><div class"left"><div class"btn"><el-button type"primary" size"small" click"onBatchR…

[Python初阶]2255.统计是给定字符串前缀的字符串数目

目录 2255.统计是给定字符串前缀的字符串数目 ①.题目 ②.问题分析 ③.startswith()方法理解 与 说明 Ⅰ.定义和用法 Ⅱ.语法 ④.问题解决 ⑤总结 2255.统计是给定字符串前缀的字符串数目 ①.题目 ②.问题分析 需求:统计列表words中,是字符串s的前缀的字符串的数目. 解…

无人机自动返航算法实现与优化

一、引言 随着无人机技术的快速发展&#xff0c;其在航拍、农业、救援等领域的应用越来越广泛。在这些应用中&#xff0c;无人机的自动返航功能显得尤为重要。一旦无人机失去控制或与遥控器失去连接&#xff0c;自动返航算法能够确保无人机安全返回起飞点&#xff0c;避免损失和…

echarts实践总结(常用二):折线图(特点:渐变、面积区域)

目录 第一章 echarts基本使用 第二章 echarts实践——折线图 效果展示 第一章 echarts基本使用 Echarts常用配置项(详细入门)_echarts配置项手册-CSDN博客 柱状图案例&#xff1a; echarts实践总结(常用一)&#xff1a;柱状图&#xff08;特点&#xff1a;渐变色、点击缩放、…

[嵌入式系统-42]:内存管理MMU与TLB-1-内存管理全方位概览

目录 一、内存管理的概述 1.1 内存管理的类比 1.2 内存管理的目标 1.3 计算机有哪些基本的资源 1.4 什么是内存管理 1.5 内存管理的主要目标&#xff1a;内存复用 二、内存管理的主要目标详解 2.1 提高内存利用率 2.2 合理的内存分配和释放机制 2.2.1 概述 2.2 定期…