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

【java阶段练习】----- 学生管理系统



学生管理系统

需求:

​ 采取控制台的方式去书写学生管理系统。

分析:

初始菜单:
"-------------欢迎来到黑马学生管理系统----------------"
"1:添加学生"
"2:删除学生"
"3:修改学生"
"4:查询学生"
"5:退出"
"请输入您的选择:"
学生类:

​ 属性:id、姓名、年龄、家庭住址

添加功能:

​ 键盘录入每一个学生信息并添加,需要满足以下要求:

  • id唯一
删除功能:

​ 键盘录入要删除的学生id,需要满足以下要求:

  • id存在删除
  • id不存在,需要提示不存在,并回到初始菜单
修改功能:

​ 键盘录入要修改的学生id,需要满足以下要求

  • id存在,继续录入其他信息
  • id不存在,需要提示不存在,并回到初始菜单
查询功能:

​ 打印所有的学生信息,需要满足以下要求

  • 如果没有学生信息,提示:当前无学生信息,请添加后再查询
  • 如果有学生信息,需要按照以下格式输出。(不用过于纠结对齐的问题)
id			姓名		年龄		家庭住址
heima001	张三		23		 南京
heima002	李四		24		 北京
heima003	王五		25		 广州
heima004	赵六	 	26		 深圳


完整代码实现:

在这里插入图片描述

Student类的定义(含注释)

package com.itdemo;/*** 学生类(Student)* 用于封装学生的基本信息,包括学号、姓名、年龄和家庭住址。* 提供无参构造方法和全参构造方法,以及所有字段的 getter 和 setter 方法。*/
public class Student {/** 学生的唯一标识(学号) */private String id;/** 学生的姓名 */private String name;/** 学生的年龄 */private int age;/** 学生的家庭住址 */private String homeAddress;/*** 无参构造方法* 用于创建一个默认的学生对象(所有字段初始化为默认值)。*/public Student() {// 默认构造,字段由Java自动初始化(String为null,int为0)}/*** 全参数构造方法* 用于创建一个具有完整信息的学生对象。** @param id           学生的学号(唯一标识)* @param name         学生的姓名* @param age          学生的年龄* @param homeAddress  学生的家庭住址*/public Student(String id, String name, int age, String homeAddress) {this.id = id;this.name = name;this.age = age;this.homeAddress = homeAddress;}/*** 获取学生的学号** @return 学生的学号(String 类型)*/public String getId() {return id;}/*** 设置学生的学号** @param id 要设置的学号*/public void setId(String id) {this.id = id;}/*** 获取学生的姓名** @return 学生的姓名*/public String getName() {return name;}/*** 设置学生的姓名** @param name 要设置的姓名*/public void setName(String name) {this.name = name;}/*** 获取学生的年龄** @return 学生的年龄(整数)*/public int getAge() {return age;}/*** 设置学生的年龄** @param age 要设置的年龄(应为非负整数)*/public void setAge(int age) {this.age = age;}/*** 获取学生的家庭住址** @return 学生的家庭住址*/public String getHomeAddress() {return homeAddress;}/*** 设置学生的家庭住址** @param homeAddress 要设置的家庭住址*/public void setHomeAddress(String homeAddress) {this.homeAddress = homeAddress;}
}

学生管理系统的主类实现(含注释)

package com.itdemo;import java.util.ArrayList;
import java.util.Scanner;/*** 学生管理系统主类* 提供添加、删除、修改、查询学生信息的功能*/
public class StudentSystem {/*** 程序入口方法* 初始化学生列表和Scanner对象,进入主菜单循环*/public static void main(String[] args) {// 创建用于存储学生对象的动态数组ArrayList<Student> list = new ArrayList<>();// 创建Scanner对象,用于接收用户输入Scanner sc = new Scanner(System.in);// 使用标签 loop 实现无限循环,方便在 switch 中直接退出loop: while (true) {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.print("请输入您的选择:");// 读取用户输入的操作编号(字符串形式)String userOperation = sc.next();// 根据用户选择执行对应功能switch (userOperation) {case "1" -> addStudent(list, sc);      // 添加学生case "2" -> deleteStudent(list, sc);   // 删除学生case "3" -> updateStudent(list, sc);   // 修改学生case "4" -> queryStudent(list);        // 查询所有学生case "5" -> {System.out.println("即将退出学生管理系统");break loop; // 跳出带 loop 标签的 while 循环,结束程序}default -> System.out.println("没有此功能,请重新输入!");}}}/*** 根据学生ID查找其在列表中的索引位置** @param targetId 要查找的学生ID* @param list     存储学生对象的列表* @return 如果找到,返回对应索引;否则返回 -1*/public static int getIndex(String targetId, ArrayList<Student> list) {for (int i = 0; i < list.size(); i++) {String id = list.get(i).getId();if (id.equals(targetId)) {return i; // 找到匹配ID,返回索引}}return -1; // 未找到,返回-1}/*** 判断指定ID的学生是否已存在于系统中** @param targetId 要检查的学生ID* @param list     学生列表* @return 存在返回 true,不存在返回 false*/public static boolean searchId(String targetId, ArrayList<Student> list) {return getIndex(targetId, list) >= 0;}/*** 添加学生信息功能* 步骤:* 1. 输入ID,若已存在则提示失败并返回* 2. 输入姓名、年龄、家庭住址* 3. 创建Student对象并加入列表** @param list 学生列表* @param sc   Scanner输入对象*/public static void addStudent(ArrayList<Student> list, Scanner sc) {System.out.print("请输入学生Id:");String targetId = sc.next();// 检查ID是否重复if (searchId(targetId, list)) {System.out.println("该学生信息已存在,学生信息添加失败");return;}System.out.print("请输入学生姓名:");String targetName = sc.next();System.out.print("请输入学生年龄:");int targetAge = sc.nextInt();sc.nextLine(); // 清除nextInt()后残留的换行符,防止后续输入异常System.out.print("请输入学生家庭住址:");String targetHomeAddress = sc.next(); // 注意:不支持含空格的地址// 创建新学生对象并添加到列表Student newStudent = new Student(targetId, targetName, targetAge, targetHomeAddress);list.add(newStudent);System.out.println("学生信息添加成功!");}/*** 删除指定ID的学生信息* 步骤:* 1. 输入要删除的学生ID* 2. 查找该ID是否存在* 3. 存在则从列表中移除,否则提示失败** @param list 学生列表* @param sc   Scanner输入对象*/public static void deleteStudent(ArrayList<Student> list, Scanner sc) {System.out.println("请输入要删除学生信息的学生id:");String targetId = sc.next();// 获取目标ID的索引int showId = getIndex(targetId, list);if (showId == -1) {System.out.println("没有此id,删除失败");return;}// 根据索引删除学生对象list.remove(showId);System.out.println("学生信息删除成功");}/*** 修改指定ID的学生信息* 步骤:* 1. 输入要修改的学生ID* 2. 若ID不存在,提示失败* 3. 否则依次输入新的姓名、年龄、地址,并更新对象** @param list 学生列表* @param sc   Scanner输入对象*/public static void updateStudent(ArrayList<Student> list, Scanner sc) {System.out.println("请输入要修改学生信息学生的id:");String targetId = sc.next();//获取索引int index = getIndex(targetId, list);// 判断ID是否存在if (index==-1) {System.out.println("没有此id,修改失败");return;}System.out.println("请输入学生信息:");System.out.print("姓名:");String targetName = sc.next();System.out.print("年龄:");int targetAge = sc.nextInt();sc.nextLine(); // 清除换行符System.out.print("家庭住址:");String targetHomeAddress = sc.next();// 创建新学生对象并替换原位置数据Student newStudent = new Student(targetId, targetName, targetAge, targetHomeAddress);list.set(index, newStudent);System.out.println("学生信息修改成功");}/*** 查询并打印所有学生信息* 若列表为空,则提示用户*/public static void queryStudent(ArrayList<Student> list) {// 检查列表是否为空if (list.isEmpty()) {System.out.println("当前系统无学生信息,请添加后再查询");return;}// 打印表头System.out.println("学号\t\t姓名\t\t年龄\t\t家庭住址");// 遍历列表,逐行输出学生信息for (Student student : list) {System.out.println(student.getId() + "\t\t" +student.getName() + "\t\t" +student.getAge() + "\t\t" +student.getHomeAddress());}}
}

2.学生管理系统升级版

。。。后续更新

http://www.dtcms.com/a/597177.html

相关文章:

  • 高校网站如何建设论文外国网站怎么做
  • portfolio做网站台州做网站需要多少钱
  • 网站名称 规则装修设计培训机构
  • Dify工作流如何用“拖拉拽”重构我们的自动化测试体系?
  • 【Docker】基础
  • AI应用开发的架构哲学:框架、平台与定制的协同(ComfyUI+cnb+云存储)
  • MySQL快速入门——索引
  • 舆情处置的技术实现:Infoseek 如何用 AI 重构 “识别 - 研判 - 处置” 全链路
  • gRPC vs RPC 高频面试题
  • 淘宝联盟推广网站怎么做什么是搜索引擎
  • 扬州住房城乡建设局网站设计画册
  • 在线视频网站a做免费下载中山精品网站建设价位
  • LangFlow 节点(Node)
  • Linux设置系统同步时间
  • 花垣网站建设一台主机做两个网站
  • 生成模型技术宇宙:从VAE到世界模型,揭示AIGC核心引擎
  • 网站建设中魔板免费扑克网站代码
  • 股指期货的收益和风险大吗?
  • 第12章 测试编写
  • 性能测试之使用 adb 查看设备CPU占用与数据分析
  • 【AUTOSAR SOMEIP】SD状态机
  • 海尔网站建设情况wordpress 没有保存
  • CSS 对齐
  • 从流批一体到湖仓一体架构演进的思考
  • 如何查看网站是否降权九江市住房和城乡建设厅网站
  • 从基本用法到迭代器实现—list重难点突破
  • 智能建站软件宁波房产网二手房出售
  • 如何从iPhone向Android 发送视频?8 种方法
  • LLM 相关内容
  • 研发管理知识库(4)华为研发管理流程简介