学生管理系统
需求:
采取控制台的方式去书写学生管理系统。
分析:
初始菜单:
java
"-------------欢迎来到黑马学生管理系统----------------"
"1:添加学生"
"2:删除学生"
"3:修改学生"
"4:查询学生"
"5:退出"
"请输入您的选择:"
学生类:
属性:id、姓名、年龄、家庭住址
添加功能:
键盘录入每一个学生信息并添加,需要满足以下要求:
- id唯一
删除功能:
键盘录入要删除的学生id,需要满足以下要求:
- id存在删除
- id不存在,需要提示不存在,并回到初始菜单
修改功能:
键盘录入要修改的学生id,需要满足以下要求
- id存在,继续录入其他信息
- id不存在,需要提示不存在,并回到初始菜单
查询功能:
打印所有的学生信息,需要满足以下要求
- 如果没有学生信息,提示:当前无学生信息,请添加后再查询
- 如果有学生信息,需要按照以下格式输出。(不用过于纠结对齐的问题)
java
id 姓名 年龄 家庭住址
heima001 张三 23 南京
heima002 李四 24 北京
heima003 王五 25 广州
heima004 赵六 26 深圳
完整代码实现:

Student类的定义(含注释)
java
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;
}
}
学生管理系统的主类实现(含注释)
java
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.学生管理系统升级版
。。。后续更新