一、学生类(Student 类)的设计
java
public class Student {
private String id;
private String name;
private int age;
private String address;
public Student() {
}
public Student(String address, int age, String id, String name) {
this.address = address;
this.age = age;
this.id = id;
this.name = name;
}
public String getAddress() {
return address;
}
public void setAddress(String address) {
this.address = address;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
Student 类是整个系统的基础,它通过私有化成员变量id
(学生 ID)、name
(学生姓名)、age
(学生年龄)和address
(学生家庭住址),并提供对应的getter
和setter
方法,实现了对学生信息的封装。同时,它包含了无参构造方法和一个带参数的构造方法,方便在创建学生对象时进行不同方式的初始化。无参构造方法为后续动态设置学生信息提供了可能,而带参数的构造方法则在已知学生信息时能快速创建对象 。
二、学生信息管理系统类(StudentSystem 类)的实现
java
import java.util.ArrayList;
import java.util.Scanner;
public class StudentSystem {
public static void main(String[] args) {
ArrayList<Student> list = new ArrayList<>();
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.println("请输入您的选择:");
Scanner sc = new Scanner(System.in);
String choose = sc.next();
switch (choose) {
case "1" -> addStudent(list);
case "2" -> deleteStudent(list);
case "3" -> updateStudent(list);
case "4" -> queryStudent(list);
case "5" -> {
System.out.println("退出");
break loop;
}
default -> System.out.println("没有这个选择");
}
}
}
// 添加学生
public static void addStudent(ArrayList<Student> list) {
Student s = new Student();
Scanner sc = new Scanner(System.in);
String id = null;
while (true) {
System.out.println("请输入学生的ID");
id = sc.next();
boolean flag = contains(list, id);
if (flag) {
System.out.println("ID已经存在,请重新输入:");
} else {
s.setId(id);
break;
}
}
System.out.println("请输入学生的姓名");
String name = sc.next();
s.setName(name);
System.out.println("请输入学生的年龄");
int age = sc.nextInt();
s.setAge(age);
System.out.println("请输入学生的家庭住址");
String address = sc.next();
s.setAddress(address);
list.add(s);
System.out.println("学生信息添加成功");
}
// 删除学生
public static void deleteStudent(ArrayList<Student> list) {
Scanner sc = new Scanner(System.in);
System.out.println("请输入要删除的ID");
String id = sc.next();
int index = getIndex(list, id);
if (index >= 0) {
list.remove(index);
System.out.println("ID为:" + id + "的学生删除成功");
} else {
System.out.println("ID不存在,删除失败");
}
}
// 修改学生
public static void updateStudent(ArrayList<Student> list) {
Scanner sc = new Scanner(System.in);
System.out.println("请输入要修改学生的ID");
String id = sc.next();
int index = getIndex(list, id);
if (index == -1) {
System.out.println("要修改的ID" + id + "不存在,请重新输入");
return;
}
Student stu = list.get(index);
System.out.println("请输入要修改的学生姓名:");
String newName = sc.next();
stu.setName(newName);
System.out.println("请输入要修改的学生年龄;");
int newAge = sc.nextInt();
stu.setAge(newAge);
System.out.println("请输入要修改的学生家庭住址:");
String newAddress = sc.next();
stu.setAddress(newAddress);
System.out.println("学生信息修改成功");
}
// 查询学生
public static void queryStudent(ArrayList<Student> list) {
if (list.size() == 0) {
System.out.println("当前无学生信息,请添加后再查询");
return;
}
System.out.println("id\t\t姓名\t年龄\t家庭住址");
for (int i = 0; i < list.size(); i++) {
Student stu = list.get(i);
System.out.println(stu.getId() + "\t\t" + stu.getName() + "\t" + stu.getAge() + "\t" + stu.getAddress());
}
}
public static boolean contains(ArrayList<Student> list, String id) {
return getIndex(list, id) >= 0;
}
public static int getIndex(ArrayList<Student> list, String id) {
for (int i = 0; i < list.size(); i++) {
Student stu = list.get(i);
String sid = stu.getId();
if (sid.equals(id)) {
return i;
}
}
return -1;
}
}
1. 主方法与系统菜单循环
在StudentSystem
类的main
方法中,首先创建了一个ArrayList
集合用于存储学生对象。然后通过一个while
循环结合switch
语句,构建了系统的菜单交互逻辑。用户可以输入1
到5
之间的数字来选择相应功能,当输入5
时,使用break loop
语句跳出循环,从而退出系统。
2. 添加学生功能
addStudent
方法实现了添加学生的功能。在添加过程中,先创建一个新的Student
对象,接着通过Scanner
从控制台获取学生的各项信息。对于学生 ID,会调用contains
方法检查该 ID 是否已存在于集合中,如果存在则提示重新输入,确保学生 ID 的唯一性 ,这一操作保证了数据的准确性和完整性。获取完所有信息后,将学生对象添加到集合中,并提示添加成功。
3. 删除学生功能
deleteStudent
方法用于删除学生信息。它首先获取用户输入的要删除学生的 ID,然后通过getIndex
方法查找该 ID 在集合中的索引。如果索引大于等于 0,说明 ID 存在,使用list.remove(index)
方法将对应的学生对象从集合中删除,并提示删除成功;否则,提示 ID 不存在,删除失败。
4. 修改学生功能
updateStudent
方法实现了修改学生信息的操作。同样先获取要修改学生的 ID,通过getIndex
方法判断 ID 是否存在。若存在,则获取该学生对象,然后依次根据用户输入的新姓名、新年龄和新家庭住址,使用setter
方法更新学生对象的信息,最后提示修改成功。
5. 查询学生功能
queryStudent
方法用于查询学生信息。首先判断集合中是否有学生信息,如果没有则提示用户添加后再查询。若有学生信息,则通过遍历集合,按照固定格式输出每个学生的 ID、姓名、年龄和家庭住址。
6. 辅助方法
contains
方法和getIndex
方法是两个辅助方法。getIndex
方法通过遍历集合,查找指定 ID 的学生对象在集合中的索引,若找到则返回索引,否则返回 - 1。contains
方法则基于getIndex
方法的结果,判断集合中是否包含指定 ID 的学生对象,返回true
或false
,这两个方法在多个功能方法中被调用,提高了代码的复用性。