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

阶段二8_集合ArrayList_学生管理系统_详细步骤

一.学生管理系统案例

1.需求:
针对目前我们的所学内容,完成一个综合案例:学生管理系统!
该系统主要功能如下:
1.添加学生:通过键盘录入学生信息,添加到集合中
2.删除学生:通过键盘录入要删除学生的学号,将该学生对象从集合中删除
3.修改学生:通过键盘录入要修改学生的学号,将该学生对象其他信息进行修改
4.查看学生:将集合中的学生对象信息进行展示
5.退出系统:结束程序
2.主界面菜单效果
--------欢迎来到学生管理系统--------
1 添加学生
2 删除学生
3 修改学生
4 查看学生
5 退出
请输入您的选择:

二.具体实现步骤

步骤1:定义学生类,包含以下成员变量
学生类: Student成员变量:
学号:sid
姓名:name
年龄:age
生日:birthday
构造方法:
无参构造
带四个参数的构造成员方法:
每个成员变量对应给出get/set方法

package pro.studentsys.domain;
public class Student {private String sid;private String name;private int age;private String birthday;public Student() {}public Student(String sid, String name, int age, String birthday) {this.sid = sid;this.name = name;this.age = age;this.birthday = birthday;}public String getSid() {return sid;}public void setSid(String sid) {this.sid = sid;}public String getName() {return name;}public void setName(String name) {this.name = name;}public int getAge() {return age;}public void setAge(int age) {this.age = age;}public String getBirthday() {return birthday;}public void setBirthday(String birthday) {this.birthday = birthday;}
}

步骤2:学生管理系统主界面的搭建步骤
1 用输出语句完成主界面的编写
2 用Scanner实现键盘录入数据
3 用switch语句完成操作的选择
4 用循环完成再次回到主界面

import java.util.Scanner;
public class StudentManager {public static void main(String[] args) {Scanner sc = new Scanner(System.in);//4. 用循环完成再次回到主界面out:while (true) {//1. 搭建主界面菜单System.out.println("--------欢迎来到学生管理系统--------");System.out.println("1 添加学生");System.out.println("2 删除学生");System.out.println("3 修改学生");System.out.println("4 查看学生");System.out.println("5 退出");System.out.println("请输入您的选择:");//2. 用Scanner实现键盘录入数据String choice = sc.next();//3. 用switch语句完成操作的选择switch (choice) {case "1":System.out.println("添加学生");break;case "2":System.out.println("删除学生");break;case "3":System.out.println("修改学生");break;case "4":System.out.println("查看学生");break;case "5":System.out.println("感谢您的使用");break out;default:System.out.println("您的输入有误");break;}}}
}

步骤3:添加学生
说明:基于上面代码,创建一个ArrayList集合对象,在创建一个添加学生方法。然后在case "1"下面调用添加学生方法。
添加学生的具体步骤:
1.给出录入的提示信息
2.将键盘录入的信息封装为学生对象
3.将封装好的学生对象, 添加到集合容器当中
4.给出添加成功的提示信息

public static void addStudent(ArrayList<Student> list) {Scanner sc = new Scanner(System.in);// 1. 给出录入的提示信息System.out.println("请输入学号:");String sid = sc.next();System.out.println("请输入姓名:");String name = sc.next();System.out.println("请输入年龄:");int age = sc.nextInt();System.out.println("请输入生日:");String birthday = sc.next();// 2. 将键盘录入的信息封装为学生对象Student stu = new Student(sid,name,age,birthday);// 3. 将封装好的学生对象, 添加到集合容器当中list.add(stu);// 4. 给出添加成功的提示信息System.out.println("添加成功!");
}

步骤4:查看学生
说明:基于上面代码,然后在case "4"下面调用查看学生方法。
查看学生的具体步骤:
1.判断集合中是否存在数据, 如果不存在直接给出提示
2.存在: 展示表头数据
3.遍历集合, 获取每一个学生对象的信息, 打印在控制台

public static void queryStudents(ArrayList<Student> list) {// 1. 判断集合中是否存在数据, 如果不存在直接给出提示if(list.size() == 0){System.out.println("无信息, 请添加后重新查询");return;}// 2. 存在: 展示表头数据System.out.println("学号\t\t姓名\t年龄\t生日");// 3. 遍历集合, 获取每一个学生对象的信息, 打印在控制台for (int i = 0; i < list.size(); i++) {Student stu = list.get(i);System.out.println(stu.getSid() + "\t" + stu.getName() + "\t" + stu.getAge() + "\t\t" + stu.getBirthday());}
}

步骤5:判断学号是否存在的方法定义
1.假设传入的学号, 在集合中不存在
2.遍历集合, 获取每一个学生对象, 准备进行查找
3.获取每一个学生对象的学号
4.使用获取出的学生学号, 和传入的学号(查找的学号)进行比对
5. 存在返回索引位置,不存在返回-1

public static int getIndex(ArrayList<Student> list, String sid){// 1. 假设传入的学号, 在集合中不存在int index = -1;// 2. 遍历集合, 获取每一个学生对象, 准备进行查找for (int i = 0; i < list.size(); i++) {Student stu = list.get(i);// 3. 获取每一个学生对象的学号String id = stu.getSid();// 4. 使用获取出的学生学号, 和传入的学号(查找的学号)进行比对if(id.equals(sid)){// 存在: 让index变量记录正确的索引位置index = i;}}return index;
}

步骤6:删除学生的方法
说明:基于上面代码,然后在case "2"下面调用删除学生方法。
删除学生的具体步骤:
1.给出提示信息 (请输入您要删除的学号)
2.键盘接收要删除的学号
3.调用getIndex方法, 查找该学号在集合中出现的索引位置
4.根据索引判断, 学号在集合中是否存在
不存在: 给出提示
存在:删除

public static void deleteStudent(ArrayList<Student> list) {// 1. 给出提示信息 (请输入您要删除的学号)System.out.println("请输入您要删除的学生学号:");// 2. 键盘接收要删除的学号Scanner sc = new Scanner(System.in);String deleteSid = sc.next();// 3. 调用getIndex方法, 查找该学号在集合中出现的索引位置int index = getIndex(list,deleteSid);// 4. 根据索引判断, 学号在集合中是否存在if(index == -1){// 不存在: 给出提示System.out.println("查无信息, 请重新输入");}else{// 存在:删除list.remove(index);System.out.println("删除成功!");}
}

步骤7:修改学生的方法
说明:基于上面代码,然后在case "3"下面调用删除学生方法。
修改学生的具体步骤:
1.给出提示信息 (请输入您要修改的学生学号)
2.获取键盘输入的学号
3.调用getIndex方法, 查找该学号在集合中出现的索引位置
4.根据索引判断, 学号在集合中是否存在,不存在给出提示
5.存在修改学生信息
键盘获取学生信息,姓名,年龄,生日
封装对象,调用集合的set方法, 完成修改。

public static void updateStudent(ArrayList<Student> list) {System.out.println("请输入您要修改的学生学号:");Scanner sc = new Scanner(System.in);String updateSid = sc.next();// 3. 调用getIndex方法, 查找该学号在集合中出现的索引位置int index = getIndex(list,updateSid);// 4. 根据索引判断, 学号在集合中是否存在if(index == -1){// 不存在: 给出提示System.out.println("查无信息, 请重新输入");}else{// 存在: 接收新的学生信息System.out.println("请输入新的学生姓名:");String name = sc.next();System.out.println("请输入新的学生年龄:");int age = sc.nextInt();System.out.println("请输入新的学生生日:");String birthday = sc.next();// 封装为新的学生对象Student stu = new Student(updateSid, name, age, birthday);// 调用集合的set方法, 完成修改list.set(index, stu);System.out.println("修改成功!");}
}

步骤8:解决添加学生学号的重复问题
具体步骤:
1.在添加学生方法中, 开始添加学生并获取到学号的时候,判断是否存在,存在提示信息
2.不存在,走正常添加流程。

String sid="";
while (true) {System.out.println("请输入学号:");sid = sc.next();if (getIndex(list, sid) != -1) {System.out.println("该学号已存在,请重新添加");}else {break;}
}

三. 更多精彩内容查看下面链接
http://www.gxcode.top/code

相关文章:

阶段二8_集合ArrayList_学生管理系统_详细步骤

一.学生管理系统案例 1.需求&#xff1a; 针对目前我们的所学内容&#xff0c;完成一个综合案例&#xff1a;学生管理系统&#xff01; 该系统主要功能如下&#xff1a; 1.添加学生&#xff1a;通过键盘录入学生信息&#xff0c;添加到集合中 2.删除学生&#xff1a;通过键盘录…...

一篇解决Linux 中的负载高低和 CPU 开销并不完全对应

负载是查看 Linux 服务器运行状态时很常用的一个性能指标。在观察线上服务器运行状况的时候&#xff0c;我们也是经常把负载找出来看一看。在线上请求压力过大的时候&#xff0c;经常是也伴随着负载的飙高。 但是负载的原理你真的理解了吗&#xff1f;我来列举几个问题&#x…...

关于IDM下载器,提示:一个假冒的序列号被用来注册……idea项目文件路径报红

关于IDM下载器&#xff0c;提示&#xff1a;一个假冒的序列号被用来注册……到C:\Windows\System32\drivers\etc 修改目录下面的hosts文件&#xff08;如果没有修改的权限就右键属性hosts文件修改user的权限为完全控制&#xff09;&#xff0c;在hosts里面增加以下内容&#xf…...

JVM - 高效并发

目录 Java内存模型和内存间的交互操作 Java内存模型 内存间的交互操作 内存间交互操作的规则 volatile特性 多线程中的可见性 volatile 指令重排原理和规则 指令重排 指令重排的基本规则 多线程中的有序性 线程安全处理 锁优化 锁优化之自旋锁与自适应自旋 锁优…...

中小学智慧校园电子班牌系统源码 Saas云平台模式

智慧电子班牌区别于传统电子班牌&#xff0c;智慧校园电子班牌系统更加注重老师和学生的沟通交流和及时数据交互。学校为每个教室配置一台智能电子班牌&#xff0c;一般安装于教室门口&#xff0c;用来实时显示学校通知、班级通知&#xff0c;可设置集中分布式管理&#xff0c;…...

记录一次服务器被攻击的经历

突然收到阿里云发过来的异常登陆的信息&#xff1a; 于是&#xff0c;急忙打开电脑查看对应的ECS服务器的记录&#xff1a; 发现服务器的cpu占用率异常飙升&#xff0c;所以可以大概断定服务器已经被非法入侵了。 通过自己的账号登陆后&#xff0c;发现sshd服务有异常的链接存…...

Python解题 - CSDN周赛第29期 - 争抢糖豆

本期问哥是志在必得&#xff0c;这本算法书我已经觊觎许久&#xff0c;而之前两次因为种种原因未能如愿。因此&#xff0c;问哥这几天花了不少时间&#xff0c;把所有之前在每日一练做过的题目重新梳理了一遍。苦心人&#xff0c;天不负&#xff0c;感谢官方大大&#xff01; 第…...

C代码中访问链接脚本中的符号

一、目的在之前的《GNU LD脚本命令语言&#xff08;一&#xff09;》、《GNU LD脚本命令语言&#xff08;二&#xff09;》我们介绍了GNU链接脚本的知识点&#xff0c;基本上对链接脚本中的SECTION、REGION、以及加载地址与执行地址的关系等内容有了一定的了解。本篇主要讲解链…...

MySQL 8:MySQL索引

索引就是通过一定的算法建立数据模型&#xff0c;用于快速查找某一列中具有特定值的行。如果没有索引&#xff0c;MySQL 必须从第一条记录开始读取整个表&#xff0c;直到找到相关的表。表越大&#xff0c;查询数据所花费的时间就越多。如果表中查询的列有索引&#xff0c;MySQ…...

JVM详解

一&#xff0c;JVM 1&#xff0c;JVM区域划分 类装载器&#xff0c;运行时数据区&#xff0c;字节码执行引擎 2&#xff0c;JVM内存模型&#xff08;运行时数据区&#xff09; 由本地方法栈&#xff0c;虚拟机栈&#xff0c;堆&#xff0c;方法区&#xff0c;和程序计数器组成。…...

MySQL数据库调优————索引数据结构

B-TREE B-TREE数据结构 B-TREE特性 根节点的子结点个数2 < X < m&#xff0c;m是树的阶 假设m 3&#xff0c;则根节点可有2-3个孩子 中间节点的子节点个数m/2 < y < m 假设m 3&#xff0c;中间节点至少有2个孩子&#xff0c;最多3个孩子 每个中间节点包含n个关…...

visual studio 改变界面语言

在使用visual studio 2019 时&#xff0c;开始是英文界面&#xff0c;后面变成了中文界面。但是看视频教学时有的是英文界面&#xff0c;我就想回到英文界面&#xff0c;所以有切换界面语言的需要。其实操作很简单&#xff1a;工具-> 选项 打开界面在界面里选择环境&#xf…...

2023.2.16每日一题——1250. 检查「好数组」

每日一题题目描述解题核心解法一&#xff1a;数论题目描述 题目链接&#xff1a;1250. 检查「好数组」 给你一个正整数数组 nums&#xff0c;你需要从中任选一些子集&#xff0c;然后将子集中每一个数乘以一个 任意整数&#xff0c;并求出他们的和。 假如该和结果为 1&#x…...

亿级高并发电商项目-- 实战篇 --万达商城项目 八(安装FastDFS、安装Nginx、文件服务模块、文件上传功能、商品功能与秒杀商品等功能)

专栏&#xff1a;高并发---分布式项目 &#x1f44f;作者简介&#xff1a;大家好&#xff0c;我是小童&#xff0c;Java开发工程师&#xff0c;CSDN博客博主&#xff0c;Java领域新星创作者 &#x1f4d5;系列专栏&#xff1a;前端、Java、Java中间件大全、微信小程序、微信支…...

Viper捐款7000万韩元,合计人民币是多少钱?

Viper捐款7000万韩元&#xff0c;合计人民币是多少钱&#xff1f; #2023LCK春季赛##英雄联盟# #Viper捐款7000万韩元# Viper向大田东区捐款 7000 万&#xff0c;成为大田荣誉协会 105 号会员。Viper选手从 2019 年开始一直向大田东区捐款&#xff0c;但是他不希望这件事被公开…...

前端vue实现系统拦截跳转外链并进入跳转询问界面

跳转询问界面如下图所示&#xff1a; 给自己挖坑的实现方式&#xff0c;最终解决方案请看最底下 思路&#xff1a;正常情况下我们有2种方式跳转外链 第一种非a标签&#xff0c;我们手动添加事件进行跳转 <div class"dingdan public-padding p-item" click&quo…...

【Linux】Shell(Bash)单引号、双引号、不加引号和反引号用法和区别详解

简要总结 不加引号&#xff1a;不会将含有空格的字符串视为一个整体输出, 如果内容中有变量等&#xff0c;会先把变量解析出结果&#xff0c;然后在输出最终内容来&#xff0c;如果字符串中带有空格等特殊字符&#xff0c;则不能完整的输出&#xff0c;需要改加双引号&#xff…...

本人使用的idea插件

文章目录&#x1f68f; 本人使用的idea插件&#x1f6ac; pojo to Json&#x1f6ac; GsonFormatPlus&#x1f6ac; EasyYapi&#x1f6ac; Chinese (Simplified) Language Pack / 中文语言包&#x1f6ac; MyBatis Log Free&#x1f6ac; MyBatisPlusX&#x1f6ac; Statistic…...

站在行业C位,谷医堂打开健康管理服务新思路

对于农村及贫困地区老百姓来说&#xff0c;由于交通因素和家庭经济条件制约&#xff0c;看病难致身体调理情况一直不太乐观&#xff0c;这也导致心理压力很大。然而&#xff0c;随着近年中医药产业崛起与快速发展&#xff0c;这种局面很快就会得到改观&#xff0c;以湖南谷医堂…...

ABO溶血症概率

[简介]ABO溶血是由于母亲和胎儿ABO血型不合引起的新生儿溶血&#xff0c;概率不是很大&#xff0c;一般出现在准妈妈是O血&#xff0c;准爸爸是非O血&#xff0c;这次容易发生血型不合&#xff0c;但新生儿ABO溶血概率不高&#xff0c;大多数症状相对较轻。ABO溶血的概率是什么…...

C++ 基础特性深度解析

目录 引言 一、命名空间&#xff08;namespace&#xff09; C 中的命名空间​ 与 C 语言的对比​ 二、缺省参数​ C 中的缺省参数​ 与 C 语言的对比​ 三、引用&#xff08;reference&#xff09;​ C 中的引用​ 与 C 语言的对比​ 四、inline&#xff08;内联函数…...

RNN避坑指南:从数学推导到LSTM/GRU工业级部署实战流程

本文较长&#xff0c;建议点赞收藏&#xff0c;以免遗失。更多AI大模型应用开发学习视频及资料&#xff0c;尽在聚客AI学院。 本文全面剖析RNN核心原理&#xff0c;深入讲解梯度消失/爆炸问题&#xff0c;并通过LSTM/GRU结构实现解决方案&#xff0c;提供时间序列预测和文本生成…...

Docker 本地安装 mysql 数据库

Docker: Accelerated Container Application Development 下载对应操作系统版本的 docker &#xff1b;并安装。 基础操作不再赘述。 打开 macOS 终端&#xff0c;开始 docker 安装mysql之旅 第一步 docker search mysql 》〉docker search mysql NAME DE…...

无人机侦测与反制技术的进展与应用

国家电网无人机侦测与反制技术的进展与应用 引言 随着无人机&#xff08;无人驾驶飞行器&#xff0c;UAV&#xff09;技术的快速发展&#xff0c;其在商业、娱乐和军事领域的广泛应用带来了新的安全挑战。特别是对于关键基础设施如电力系统&#xff0c;无人机的“黑飞”&…...

vulnyx Blogger writeup

信息收集 arp-scan nmap 获取userFlag 上web看看 一个默认的页面&#xff0c;gobuster扫一下目录 可以看到扫出的目录中得到了一个有价值的目录/wordpress&#xff0c;说明目标所使用的cms是wordpress&#xff0c;访问http://192.168.43.213/wordpress/然后查看源码能看到 这…...

打手机检测算法AI智能分析网关V4守护公共/工业/医疗等多场景安全应用

一、方案背景​ 在现代生产与生活场景中&#xff0c;如工厂高危作业区、医院手术室、公共场景等&#xff0c;人员违规打手机的行为潜藏着巨大风险。传统依靠人工巡查的监管方式&#xff0c;存在效率低、覆盖面不足、判断主观性强等问题&#xff0c;难以满足对人员打手机行为精…...

day36-多路IO复用

一、基本概念 &#xff08;服务器多客户端模型&#xff09; 定义&#xff1a;单线程或单进程同时监测若干个文件描述符是否可以执行IO操作的能力 作用&#xff1a;应用程序通常需要处理来自多条事件流中的事件&#xff0c;比如我现在用的电脑&#xff0c;需要同时处理键盘鼠标…...

【无标题】湖北理元理律师事务所:债务优化中的生活保障与法律平衡之道

文/法律实务观察组 在债务重组领域&#xff0c;专业机构的核心价值不仅在于减轻债务数字&#xff0c;更在于帮助债务人在履行义务的同时维持基本生活尊严。湖北理元理律师事务所的服务实践表明&#xff0c;合法债务优化需同步实现三重平衡&#xff1a; 法律刚性&#xff08;债…...

Linux安全加固:从攻防视角构建系统免疫

Linux安全加固:从攻防视角构建系统免疫 构建坚不可摧的数字堡垒 引言:攻防对抗的新纪元 在日益复杂的网络威胁环境中,Linux系统安全已从被动防御转向主动免疫。2023年全球网络安全报告显示,高级持续性威胁(APT)攻击同比增长65%,平均入侵停留时间缩短至48小时。本章将从…...

TCP/IP 网络编程 | 服务端 客户端的封装

设计模式 文章目录 设计模式一、socket.h 接口&#xff08;interface&#xff09;二、socket.cpp 实现&#xff08;implementation&#xff09;三、server.cpp 使用封装&#xff08;main 函数&#xff09;四、client.cpp 使用封装&#xff08;main 函数&#xff09;五、退出方法…...