阶段二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.需求: 针对目前我们的所学内容,完成一个综合案例:学生管理系统! 该系统主要功能如下: 1.添加学生:通过键盘录入学生信息,添加到集合中 2.删除学生:通过键盘录…...

一篇解决Linux 中的负载高低和 CPU 开销并不完全对应
负载是查看 Linux 服务器运行状态时很常用的一个性能指标。在观察线上服务器运行状况的时候,我们也是经常把负载找出来看一看。在线上请求压力过大的时候,经常是也伴随着负载的飙高。 但是负载的原理你真的理解了吗?我来列举几个问题&#x…...

关于IDM下载器,提示:一个假冒的序列号被用来注册……idea项目文件路径报红
关于IDM下载器,提示:一个假冒的序列号被用来注册……到C:\Windows\System32\drivers\etc 修改目录下面的hosts文件(如果没有修改的权限就右键属性hosts文件修改user的权限为完全控制),在hosts里面增加以下内容…...

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

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

记录一次服务器被攻击的经历
突然收到阿里云发过来的异常登陆的信息: 于是,急忙打开电脑查看对应的ECS服务器的记录: 发现服务器的cpu占用率异常飙升,所以可以大概断定服务器已经被非法入侵了。 通过自己的账号登陆后,发现sshd服务有异常的链接存…...
Python解题 - CSDN周赛第29期 - 争抢糖豆
本期问哥是志在必得,这本算法书我已经觊觎许久,而之前两次因为种种原因未能如愿。因此,问哥这几天花了不少时间,把所有之前在每日一练做过的题目重新梳理了一遍。苦心人,天不负,感谢官方大大! 第…...

C代码中访问链接脚本中的符号
一、目的在之前的《GNU LD脚本命令语言(一)》、《GNU LD脚本命令语言(二)》我们介绍了GNU链接脚本的知识点,基本上对链接脚本中的SECTION、REGION、以及加载地址与执行地址的关系等内容有了一定的了解。本篇主要讲解链…...

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

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

MySQL数据库调优————索引数据结构
B-TREE B-TREE数据结构 B-TREE特性 根节点的子结点个数2 < X < m,m是树的阶 假设m 3,则根节点可有2-3个孩子 中间节点的子节点个数m/2 < y < m 假设m 3,中间节点至少有2个孩子,最多3个孩子 每个中间节点包含n个关…...

visual studio 改变界面语言
在使用visual studio 2019 时,开始是英文界面,后面变成了中文界面。但是看视频教学时有的是英文界面,我就想回到英文界面,所以有切换界面语言的需要。其实操作很简单:工具-> 选项 打开界面在界面里选择环境…...
2023.2.16每日一题——1250. 检查「好数组」
每日一题题目描述解题核心解法一:数论题目描述 题目链接:1250. 检查「好数组」 给你一个正整数数组 nums,你需要从中任选一些子集,然后将子集中每一个数乘以一个 任意整数,并求出他们的和。 假如该和结果为 1&#x…...

亿级高并发电商项目-- 实战篇 --万达商城项目 八(安装FastDFS、安装Nginx、文件服务模块、文件上传功能、商品功能与秒杀商品等功能)
专栏:高并发---分布式项目 👏作者简介:大家好,我是小童,Java开发工程师,CSDN博客博主,Java领域新星创作者 📕系列专栏:前端、Java、Java中间件大全、微信小程序、微信支…...

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

前端vue实现系统拦截跳转外链并进入跳转询问界面
跳转询问界面如下图所示: 给自己挖坑的实现方式,最终解决方案请看最底下 思路:正常情况下我们有2种方式跳转外链 第一种非a标签,我们手动添加事件进行跳转 <div class"dingdan public-padding p-item" click&quo…...
【Linux】Shell(Bash)单引号、双引号、不加引号和反引号用法和区别详解
简要总结 不加引号:不会将含有空格的字符串视为一个整体输出, 如果内容中有变量等,会先把变量解析出结果,然后在输出最终内容来,如果字符串中带有空格等特殊字符,则不能完整的输出,需要改加双引号ÿ…...

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

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

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

利用最小二乘法找圆心和半径
#include <iostream> #include <vector> #include <cmath> #include <Eigen/Dense> // 需安装Eigen库用于矩阵运算 // 定义点结构 struct Point { double x, y; Point(double x_, double y_) : x(x_), y(y_) {} }; // 最小二乘法求圆心和半径 …...

聊聊 Pulsar:Producer 源码解析
一、前言 Apache Pulsar 是一个企业级的开源分布式消息传递平台,以其高性能、可扩展性和存储计算分离架构在消息队列和流处理领域独树一帜。在 Pulsar 的核心架构中,Producer(生产者) 是连接客户端应用与消息队列的第一步。生产者…...
C# SqlSugar:依赖注入与仓储模式实践
C# SqlSugar:依赖注入与仓储模式实践 在 C# 的应用开发中,数据库操作是必不可少的环节。为了让数据访问层更加简洁、高效且易于维护,许多开发者会选择成熟的 ORM(对象关系映射)框架,SqlSugar 就是其中备受…...

关键领域软件测试的突围之路:如何破解安全与效率的平衡难题
在数字化浪潮席卷全球的今天,软件系统已成为国家关键领域的核心战斗力。不同于普通商业软件,这些承载着国家安全使命的软件系统面临着前所未有的质量挑战——如何在确保绝对安全的前提下,实现高效测试与快速迭代?这一命题正考验着…...
AGain DB和倍数增益的关系
我在设置一款索尼CMOS芯片时,Again增益0db变化为6DB,画面的变化只有2倍DN的增益,比如10变为20。 这与dB和线性增益的关系以及传感器处理流程有关。以下是具体原因分析: 1. dB与线性增益的换算关系 6dB对应的理论线性增益应为&…...

算法:模拟
1.替换所有的问号 1576. 替换所有的问号 - 力扣(LeetCode) 遍历字符串:通过外层循环逐一检查每个字符。遇到 ? 时处理: 内层循环遍历小写字母(a 到 z)。对每个字母检查是否满足: 与…...

Razor编程中@Html的方法使用大全
文章目录 1. 基础HTML辅助方法1.1 Html.ActionLink()1.2 Html.RouteLink()1.3 Html.Display() / Html.DisplayFor()1.4 Html.Editor() / Html.EditorFor()1.5 Html.Label() / Html.LabelFor()1.6 Html.TextBox() / Html.TextBoxFor() 2. 表单相关辅助方法2.1 Html.BeginForm() …...

Git 3天2K星标:Datawhale 的 Happy-LLM 项目介绍(附教程)
引言 在人工智能飞速发展的今天,大语言模型(Large Language Models, LLMs)已成为技术领域的焦点。从智能写作到代码生成,LLM 的应用场景不断扩展,深刻改变了我们的工作和生活方式。然而,理解这些模型的内部…...
在树莓派上添加音频输入设备的几种方法
在树莓派上添加音频输入设备可以通过以下步骤完成,具体方法取决于设备类型(如USB麦克风、3.5mm接口麦克风或HDMI音频输入)。以下是详细指南: 1. 连接音频输入设备 USB麦克风/声卡:直接插入树莓派的USB接口。3.5mm麦克…...

【LeetCode】算法详解#6 ---除自身以外数组的乘积
1.题目介绍 给定一个整数数组 nums,返回 数组 answer ,其中 answer[i] 等于 nums 中除 nums[i] 之外其余各元素的乘积 。 题目数据 保证 数组 nums之中任意元素的全部前缀元素和后缀的乘积都在 32 位 整数范围内。 请 不要使用除法,且在 O…...