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;}
    //数据源的扩容@Overridepublic 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. 提供高级查询功能(可选)

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

    以下为查询功能的代码:

    	@Overridepublic 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;}@Overridepublic 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;}@Overridepublic 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;}@Overridepublic 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;}
    

    在这里插入图片描述

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

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

相关文章

17.WEB渗透测试--Kali Linux(五)

免责声明&#xff1a;内容仅供学习参考&#xff0c;请合法利用知识&#xff0c;禁止进行违法犯罪活动&#xff01; 内容参考于&#xff1a; 易锦网校会员专享课 上一个内容&#xff1a;16.WEB渗透测试--Kali Linux&#xff08;四&#xff09;-CSDN博客 1.ettercap简介与使用…

【技术类-04】python实现docx表格文字和段落文字的“手动换行符(软回车)”变成“段落标记(硬回车)”

作品展示&#xff1a; 背景需求&#xff1a; 把python实现docx表格文字和段落文字的“手动换行符&#xff08;软回车&#xff09;”变成“段落标记&#xff08;硬回车&#xff09;合并在一起统计数量 【技术类-02】python实现docx段落文字的“手动换行符&#xff08;软回车&a…

一起玩儿3D打印机——03 Marlin固件的获取和安装环境的配置

摘要&#xff1a;本文介绍Marlin固件的获取和安装环境的配置 Marlin是一款开源软件&#xff0c;其主页为&#xff1a;https://marlinfw.org/&#xff0c;首页正中就是下载连接&#xff0c;如下图所示&#xff1a; 单击下面的“Download Marlin 2.1.2.2”按钮就会进入下载页面&a…

彻底学会系列:一、机器学习之梯度下降(1)

1 梯度下降概念 1.1 概念 梯度下降是一种优化算法&#xff0c;用于最小化一个函数的值&#xff0c;特别是用于训练机器学习模型中的参数&#xff0c;其基本思想是通过不断迭代调整参数的值&#xff0c;使得函数值沿着梯度的反方向逐渐减小&#xff0c;直至达到局部或全局最小…

AntV L7深圳智慧城市

本案例使用L7库和Mapbox GL JS构建深圳智慧城市。 文章目录 1. 引入 CDN 链接2. 引入组件3. 创建地图4. 创建场景5. 获取数据6. 创建面图层7. 演示效果8. 代码实现 1. 引入 CDN 链接 <!-- 1.引入CDN链接 --> <script src"https://unpkg.com/antv/l7"><…

Centos yum报错‘Connection timed out after 30002 milliseconds‘) 正在尝试其它镜像。解决办法

修改源后更新报错 我有两个Centos 一个7 一个8&#xff0c;疏忽在7上面配置了8的源后报错&#xff0c;通过下面的报错发现提示的是Centos7的源找不到&#xff0c;才意识到是不是配置错了源。 报错信息&#xff1a; http://mirrors.aliyun.com/centos/7/AppStream/x86_64/os/r…

Java 面向对象(类与对象 成员方法 方法重载 可变参数 构造方法 / 构造器 this关键字 包 访问修饰符)

目录 一、类与对象1. 类与对象的定义2. 类和对象的内存分配机制 二、成员方法1. 成员方法的定义2. 方法的调用机制3. 成员方法传参机制 三、方法重载四、可变参数1. 基本概念2. 基本语法3. 应用 五、 构造方法 / 构造器1. 特点2. 使用案例3. 对象创建的流程 六、this关键字1. 运…

【Linux】信号保存{sigset_t/sigpending/sigprocmask/bash脚本/代码演示}

文章目录 1.信号相关常见概念2.管理信号的数据结构3.初识sigset_t4.信号集操作函数4.1sigpending4.2sigprocmask4.2代码测试1.测试12.测试23.测试3 4.3bash 脚本文件 1.信号相关常见概念 信号相关动作&#xff1a;产生 发送 接收 阻塞 递达(处理) 实际执行信号的处理动作称为信…

0基础 三个月掌握C语言(11)

字符函数和字符串函数 为了方便操作字符和字符串 C语言标准库中提供了一系列库函数 接下来我们学习一下这些函数 字符分类函数 C语言提供了一系列用于字符分类的函数&#xff0c;这些函数定义在ctype.h头文件中。这些函数通常用于检查字符是否属于特定的类别&#xff0c;例如…

html--宠物

文章目录 htmljscss html <!DOCTYPE html> <html lang"en" > <head><meta charset"UTF-8"><title>CodePen - Spaceworm</title><script> window.requestAnimFrame (function() {return (window.requestAnimat…

粤嵌6818开发板触摸屏应用

一、触摸屏应用 1.触摸屏设备的名字 在Linux下&#xff0c;一切皆文件&#xff0c;触摸屏也是一个文件。 触摸屏设备的名字&#xff1a;/dev/input/event0 2.触摸屏的两个专业术语 事件 ->event0 当一些外接控制设备(鼠标、键盘&#xff0c;wifi&#xff0c;触摸屏&am…

4.1_7 文件共享

文章目录 4.1_7 文件共享&#xff08;一&#xff09;基于索引结点的共享方式&#xff08;硬链接&#xff09;&#xff08;二&#xff09;基于符号链的共享方式&#xff08;软链接&#xff09; 总结 4.1_7 文件共享 注意&#xff1a;多个用户共享同一个文件&#xff0c;意味着系…

单片机第四季-第二课:uCos2源码-BSP

1&#xff0c;初始uCos2 文件中uC开头的为uCos相关的。 2&#xff0c;uCos2源码工程建立 建立Source Insight工程 寻找main函数 (1)RTOS其实就是一个大的裸机程序&#xff0c;也是从main开始运行的 (2)main之前也是有一个汇编的启动文件的 (3)main中调用了很多初始化函数 bsp部…

《你就是孩子最好的玩具·升级版》笔记(一)尊重孩子的感受

目录 简介 经典摘录 简介 作者是&#xff08;美&#xff09;金伯莉布雷恩。奠定父母与孩子一生亲密关系的情感引导书。 什么是情感引导&#xff1f; 情感引导式教育的核心&#xff0c;就是教我们的孩子如何去合理地认知以及表达自己的感受&#xff0c;书中更侧重于在这方面为…

【NBUOJ刷题笔记】递推_递归+分治策略2

0. 前言 PS&#xff1a;本人并不是集训队的成员&#xff0c;因此代码写的烂轻点喷。。。本专题一方面是巩固自己的算法知识&#xff0c;另一方面是给NBU学弟学妹们参考解题思路&#xff08;切勿直接搬运抄袭提交作业&#xff01;&#xff01;&#xff01;&#xff09;最后&…

【matlab】如何批量修改图片命名

【matlab】如何批量修改图片命名 (●’◡’●)先赞后看养成习惯😊 假如我的图片如下,分别是1、2、3、4、5的命名 需求一:假如现在我需要在其后面统一加上_behind字符串,并且保留原命名,同时替换掉原先的图片,也就是不copy新的一份,直接在原文件夹中处理,我们可以进行…

软件杯 深度学习 python opencv 动物识别与检测

文章目录 0 前言1 深度学习实现动物识别与检测2 卷积神经网络2.1卷积层2.2 池化层2.3 激活函数2.4 全连接层2.5 使用tensorflow中keras模块实现卷积神经网络 3 YOLOV53.1 网络架构图3.2 输入端3.3 基准网络3.4 Neck网络3.5 Head输出层 4 数据集准备4.1 数据标注简介4.2 数据保存…

openEuler学习总结1(仅供学习参考)

华为的openEuler内核是源于Linux。 openEuler操作系统安装流程 第一步&#xff1a;开启虚拟化 第二步&#xff1a;安装一个虚拟化软件virtualbox 第三步&#xff1a;镜像 第四步&#xff1a;配置 设置虚拟机所在的目录 把网卡类型选择成桥接网卡 挂载镜像 设置完成&#xff0…

YOLOv9详解

1.概述 在逐层进行特征提取和空间转换的过程中&#xff0c;会损失大量信息&#xff0c;例如图中的马在建模过程中逐渐变得模糊&#xff0c;从而影响到最终的性能。YOLOv9尝试使用可编程梯度信息PGI解决这一问题。 具体来说&#xff0c; PGI包含三个部分&#xff0c;&#xff0…

【你也能从零基础学会网站开发】Web建站之jQuery进阶篇 jQuery常见属性和方法概述与使用

&#x1f680; 个人主页 极客小俊 ✍&#x1f3fb; 作者简介&#xff1a;程序猿、设计师、技术分享 &#x1f40b; 希望大家多多支持, 我们一起学习和进步&#xff01; &#x1f3c5; 欢迎评论 ❤️点赞&#x1f4ac;评论 &#x1f4c2;收藏 &#x1f4c2;加关注 jQuery创建新的…