黑马程序员全套Java教程_Java基础教程_学生管理系统(十六)
1.1 学生管理系统实现思路
- (1)定义学生类。
(2)主界面的代码编写。
(3)添加学生的代码编写。
(4)查看学生的代码编写。
(5)修改学生的代码编写。
(6)修改学生的代码编写。
1.2 定义学生类
- 学生类:Student
- 成员变量:
(1)学号:sid
(2)姓名:name
(3)年龄:age
(4)居住地:address - 构造方法:无参构造、带四个参数的构造
- 成员方法:每个成员变量对应给出get/set方法
Student.java
public class Student {
private String sid;
private String name;
private String age;
private String address;
public Student() {
}
public Student(String sid, String name, String age, String address) {
this.sid = sid;
this.name = name;
this.age = age;
this.address = address;
}
略get/set方法
1.3 主界面的代码编写
- 编写思路:
(1)用输出语句完成主界面的编写
(2)用Scanner实现键盘录入数据
(3)用switch语句完成操作的选择
(4)用循环完成在次回到主界面
- StudentManager类内main方法
public static void main(String[] args) {
ArrayList<Student> arrayList = new ArrayList<>();
for (;;){
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 line = sc.nextLine();
switch (line){
case "1":
addStudent(arrayList);
break;
case "2":
deleteStudent(arrayList);
break;
case "3":
updateStudent(arrayList);
break;
case "4":
findAllStudent(arrayList);
break;
case "5":
System.out.println("感谢使用!");
System.exit(0);
default:break;
}
}
}
1.4 添加学生的代码编写
- 编写思路:
(1)用键盘录入选择添加学生。
(2)定义一个方法,用于添加学生:首先,显示提示信息,提示要输入何种信息;其次,键盘录入学生对象所需要的数据;再次,创建学生对象,把键盘录入的数据赋值给学生对象的成员变量;然后,将学生对象添加到集合中(保存);最后,给出添加成功的提示。
(3)调用方法。
public static void addStudent(ArrayList<Student> array){
Scanner scanner = new Scanner(System.in);
Student student = new Student();
System.out.println("请输入学生的学号:");
student.setSid(scanner.nextLine());
System.out.println("请输入学生的姓名:");
student.setName(scanner.nextLine());
System.out.println("请输入学生的年龄:");
student.setAge(scanner.nextLine());
System.out.println("请输入学生的家庭住址:");
student.setAddress(scanner.nextLine());
array.add(student);
System.out.println("添加学生成功!");
}
1.5 查看学生的代码编写
- 编写思路:
(1)用键盘录入选择查看所有学生信息。
(2)定义一个方法,用于查看学生对象:首先显示表头信息;然后将集合中数据取出按照对应格式显示学生信息,年龄显示补充“岁”。
(3)调用方法。
public static void findAllStudent(ArrayList<Student> array){
System.out.println("学号\t姓名\t年龄\t\t家庭住址");
for (int i=0; i<array.size(); i++){
Student s = array.get(i);
System.out.println(s.getSid() + "\t" + s.getName() + "\t" + s.getAge() + "岁\t" + s.getAddress());
}
}
1.6 查看学生的代码编写升级版
- 编写思路:
(1)用键盘录入选择查看所有学生信息。
(2)定义一个方法,用于查看学生对象:首先判定集合中是否有数据,如果没有显示提示信息;然后显示表头信息;最后将集合中数据取出按照对应格式显示学生信息,年龄显示补充“岁”。
(3)调用方法。
public static void findAllStudent(ArrayList<Student> array){
if (array.size() == 0){
System.out.println("没有找到任何学生信息,请先添加学生信息!");
return;
}
System.out.println("学号\t姓名\t年龄\t\t家庭住址");
for (int i=0; i<array.size(); i++){
Student s = array.get(i);
System.out.println(s.getSid() + "\t" + s.getName() + "\t" + s.getAge() + "岁\t" + s.getAddress());
}
}
1.7 删除学生的代码编写
- 编写思路:
(1)用键盘录入选择删除学生信息。
(2)定义一个方法,用于删除学生信息:首先,显示提示信息;其次,键盘录入要删除的学生学号;然后,遍历集合将对应学生对象从集合中删除。
(3)调用方法。
public static void deleteStudent(ArrayList<Student> array){
Scanner scanner = new Scanner(System.in);
System.out.println("请输入要你所要删除学生信息对应的学号:");
String sid = scanner.nextLine();
for (int i=0; i<array.size(); i++){
//字符串的值比较使用equals
if (array.get(i).getSid().equals(sid)){
array.remove(i);
System.out.println("删除成功!");
return;
}
}
System.out.println("没有找到您输入学号对应的学生,请检查学号是否正确!");
}
1.8 修改学生信息的代码编写
- 编写思路:
(1)用键盘录入选择修改学生信息。
(2)定义一个方法,用于修改学生信息:首先,显示提示信息;其次,键盘录入要修改的学生学号;再次,键盘录入要修改学生的学生信息;然后,遍历集合修改对应的学生信息;最后,给出修改成功的提示。
(3)调用方法。
public static void updateStudent(ArrayList<Student> array){
Scanner scanner = new Scanner(System.in);
System.out.println("请输入您所要修改学生信息对应的学号:");
String sid = scanner.nextLine();
for (int i=0; i<array.size();i++){
if (array.get(i).getSid().equals(sid)) {
System.out.println("请输入修改后学生的姓名:");
array.get(i).setName(scanner.nextLine());
System.out.println("请输入修改后学生的年龄:");
array.get(i).setAge(scanner.nextLine());
System.out.println("请输入修改后学生的家庭住址:");
array.get(i).setAddress(scanner.nextLine());
return;
}
}
System.out.println("您输入的学号有误!");
}
1.9 解决添加学生学号重复问题
public static void addStudent(ArrayList<Student> array){
Scanner scanner = new Scanner(System.in);
Student student = new Student();
System.out.println("请输入学生的学号:");
boolean sidIsUse;
do{
sidIsUse = false;
student.setSid(scanner.nextLine());
for (int i=0; i<array.size(); i++){
if (array.get(i).getSid().equals(student.getSid())){
System.out.println("您输入学号的学生已经存在,请重新输入:");
sidIsUse = true;
break;
}
}
}while (sidIsUse);
System.out.println("请输入学生的姓名:");
student.setName(scanner.nextLine());
System.out.println("请输入学生的年龄:");
student.setAge(scanner.nextLine());
System.out.println("请输入学生的家庭住址:");
student.setAddress(scanner.nextLine());
array.add(student);
System.out.println("添加学生成功!");
}
判断学号是否重复的方法中,sidIsUse这个变量有什么作用呢?我们假设没有这个变量,很显然就可以知道跳不出do{}while()这个死循环,而有了sidIsUse,就可以根据我们的需求,随时将其设定为可跳出循环的值。