【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.学生管理系统升级版
。。。后续更新
