当前位置: 首页 > 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溶血的概率是什么…...

Python|GIF 解析与构建(5):手搓截屏和帧率控制

目录 Python&#xff5c;GIF 解析与构建&#xff08;5&#xff09;&#xff1a;手搓截屏和帧率控制 一、引言 二、技术实现&#xff1a;手搓截屏模块 2.1 核心原理 2.2 代码解析&#xff1a;ScreenshotData类 2.2.1 截图函数&#xff1a;capture_screen 三、技术实现&…...

K8S认证|CKS题库+答案| 11. AppArmor

目录 11. AppArmor 免费获取并激活 CKA_v1.31_模拟系统 题目 开始操作&#xff1a; 1&#xff09;、切换集群 2&#xff09;、切换节点 3&#xff09;、切换到 apparmor 的目录 4&#xff09;、执行 apparmor 策略模块 5&#xff09;、修改 pod 文件 6&#xff09;、…...

渗透实战PortSwigger靶场-XSS Lab 14:大多数标签和属性被阻止

<script>标签被拦截 我们需要把全部可用的 tag 和 event 进行暴力破解 XSS cheat sheet&#xff1a; https://portswigger.net/web-security/cross-site-scripting/cheat-sheet 通过爆破发现body可以用 再把全部 events 放进去爆破 这些 event 全部可用 <body onres…...

【快手拥抱开源】通过快手团队开源的 KwaiCoder-AutoThink-preview 解锁大语言模型的潜力

引言&#xff1a; 在人工智能快速发展的浪潮中&#xff0c;快手Kwaipilot团队推出的 KwaiCoder-AutoThink-preview 具有里程碑意义——这是首个公开的AutoThink大语言模型&#xff08;LLM&#xff09;。该模型代表着该领域的重大突破&#xff0c;通过独特方式融合思考与非思考…...

什么是EULA和DPA

文章目录 EULA&#xff08;End User License Agreement&#xff09;DPA&#xff08;Data Protection Agreement&#xff09;一、定义与背景二、核心内容三、法律效力与责任四、实际应用与意义 EULA&#xff08;End User License Agreement&#xff09; 定义&#xff1a; EULA即…...

鱼香ros docker配置镜像报错:https://registry-1.docker.io/v2/

使用鱼香ros一件安装docker时的https://registry-1.docker.io/v2/问题 一键安装指令 wget http://fishros.com/install -O fishros && . fishros出现问题&#xff1a;docker pull 失败 网络不同&#xff0c;需要使用镜像源 按照如下步骤操作 sudo vi /etc/docker/dae…...

深入解析C++中的extern关键字:跨文件共享变量与函数的终极指南

&#x1f680; C extern 关键字深度解析&#xff1a;跨文件编程的终极指南 &#x1f4c5; 更新时间&#xff1a;2025年6月5日 &#x1f3f7;️ 标签&#xff1a;C | extern关键字 | 多文件编程 | 链接与声明 | 现代C 文章目录 前言&#x1f525;一、extern 是什么&#xff1f;&…...

企业如何增强终端安全?

在数字化转型加速的今天&#xff0c;企业的业务运行越来越依赖于终端设备。从员工的笔记本电脑、智能手机&#xff0c;到工厂里的物联网设备、智能传感器&#xff0c;这些终端构成了企业与外部世界连接的 “神经末梢”。然而&#xff0c;随着远程办公的常态化和设备接入的爆炸式…...

HDFS分布式存储 zookeeper

hadoop介绍 狭义上hadoop是指apache的一款开源软件 用java语言实现开源框架&#xff0c;允许使用简单的变成模型跨计算机对大型集群进行分布式处理&#xff08;1.海量的数据存储 2.海量数据的计算&#xff09;Hadoop核心组件 hdfs&#xff08;分布式文件存储系统&#xff09;&a…...

基于PHP的连锁酒店管理系统

有需要请加文章底部Q哦 可远程调试 基于PHP的连锁酒店管理系统 一 介绍 连锁酒店管理系统基于原生PHP开发&#xff0c;数据库mysql&#xff0c;前端bootstrap。系统角色分为用户和管理员。 技术栈 phpmysqlbootstrapphpstudyvscode 二 功能 用户 1 注册/登录/注销 2 个人中…...