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

Docker 离线安装指南

参考文章 1、确认操作系统类型及内核版本 Docker依赖于Linux内核的一些特性&#xff0c;不同版本的Docker对内核版本有不同要求。例如&#xff0c;Docker 17.06及之后的版本通常需要Linux内核3.10及以上版本&#xff0c;Docker17.09及更高版本对应Linux内核4.9.x及更高版本。…...

ES6从入门到精通:前言

ES6简介 ES6&#xff08;ECMAScript 2015&#xff09;是JavaScript语言的重大更新&#xff0c;引入了许多新特性&#xff0c;包括语法糖、新数据类型、模块化支持等&#xff0c;显著提升了开发效率和代码可维护性。 核心知识点概览 变量声明 let 和 const 取代 var&#xf…...

k8s从入门到放弃之Ingress七层负载

k8s从入门到放弃之Ingress七层负载 在Kubernetes&#xff08;简称K8s&#xff09;中&#xff0c;Ingress是一个API对象&#xff0c;它允许你定义如何从集群外部访问集群内部的服务。Ingress可以提供负载均衡、SSL终结和基于名称的虚拟主机等功能。通过Ingress&#xff0c;你可…...

vscode(仍待补充)

写于2025 6.9 主包将加入vscode这个更权威的圈子 vscode的基本使用 侧边栏 vscode还能连接ssh&#xff1f; debug时使用的launch文件 1.task.json {"tasks": [{"type": "cppbuild","label": "C/C: gcc.exe 生成活动文件"…...

关于iview组件中使用 table , 绑定序号分页后序号从1开始的解决方案

问题描述&#xff1a;iview使用table 中type: "index",分页之后 &#xff0c;索引还是从1开始&#xff0c;试过绑定后台返回数据的id, 这种方法可行&#xff0c;就是后台返回数据的每个页面id都不完全是按照从1开始的升序&#xff0c;因此百度了下&#xff0c;找到了…...

华为OD机试-食堂供餐-二分法

import java.util.Arrays; import java.util.Scanner;public class DemoTest3 {public static void main(String[] args) {Scanner in new Scanner(System.in);// 注意 hasNext 和 hasNextLine 的区别while (in.hasNextLine()) { // 注意 while 处理多个 caseint a in.nextIn…...

【碎碎念】宝可梦 Mesh GO : 基于MESH网络的口袋妖怪 宝可梦GO游戏自组网系统

目录 游戏说明《宝可梦 Mesh GO》 —— 局域宝可梦探索Pokmon GO 类游戏核心理念应用场景Mesh 特性 宝可梦玩法融合设计游戏构想要素1. 地图探索&#xff08;基于物理空间 广播范围&#xff09;2. 野生宝可梦生成与广播3. 对战系统4. 道具与通信5. 延伸玩法 安全性设计 技术选…...

蓝桥杯 冶炼金属

原题目链接 &#x1f527; 冶炼金属转换率推测题解 &#x1f4dc; 原题描述 小蓝有一个神奇的炉子用于将普通金属 O O O 冶炼成为一种特殊金属 X X X。这个炉子有一个属性叫转换率 V V V&#xff0c;是一个正整数&#xff0c;表示每 V V V 个普通金属 O O O 可以冶炼出 …...

技术栈RabbitMq的介绍和使用

目录 1. 什么是消息队列&#xff1f;2. 消息队列的优点3. RabbitMQ 消息队列概述4. RabbitMQ 安装5. Exchange 四种类型5.1 direct 精准匹配5.2 fanout 广播5.3 topic 正则匹配 6. RabbitMQ 队列模式6.1 简单队列模式6.2 工作队列模式6.3 发布/订阅模式6.4 路由模式6.5 主题模式…...

使用LangGraph和LangSmith构建多智能体人工智能系统

现在&#xff0c;通过组合几个较小的子智能体来创建一个强大的人工智能智能体正成为一种趋势。但这也带来了一些挑战&#xff0c;比如减少幻觉、管理对话流程、在测试期间留意智能体的工作方式、允许人工介入以及评估其性能。你需要进行大量的反复试验。 在这篇博客〔原作者&a…...