【案例6-2】 学生管理系统
【案例介绍】
1.任务描述
在一所学校中,对学生人员流动的管理是很麻烦的,本案例要求编写一个学生管理系统,实现对学生信息的添加、删除、修改和查询功能。每个功能的具体要求如下:
- 系统的首页:用于显示系统所有的操作,并根据用户在控制台的输入选择需要使用的功能。
- 查询功能:用户选择该功能后,在控制台打印所有学生的信息。
- 添加功能:用户选择该功能后,要求用户在控制台输入学生学号、姓名、年龄和居住地的基本信息。在输入学号时,判断学号是否被占用,如果被占用则添加失败,并给出相应提示;反之则提示添加成功。
- 删除功能:用户选择该功能后,提示用户在控制台输入需要删除学生的学号,如果用户输入的学号存在则提示删除成功,反之则提示删除失败。
- 修改功能:用户选择该功能后,提示用户在控制台输入需要修改的学生学号、姓名、年龄和居住地学生信息,并使用输入的学生学号判断是否有此人,如果有则修改原有的学生信息,反正则提示需要修改的学生信息不存在。
- 退出功能:用户选择该功能后,程序正常关闭。
本案例要求使用List集合存储自定义的对象,使用List集合的中常用方法实现相关的操作。
2.运行结果
学生管理系统首页运行结果如图6-1所示。
图6-1 学生管理系统首页运行结果图
学生管理系统查看所有学生运行结果如图6-2所示。
图6-2 查看所有学生信息运行结果图
学生管理系统添加学生信息运行结果如图6-3所示:
图6-3 添加学生信息运行结果图
学生管理系统修改学生信息结果如图6-4所示:
图6-4 修改学生信息运行结果图
学生管理系统删除学生结果如图6-5所示。
图6-5 删除学生运行结果图
【案例思路】
(1)定义学生类,自定义对象属性。
(2)学生管理系统的主界面的代码编写,创建集合对象,用于存储学生数据,打印学生管理系统主界面的相关功能,创建键盘输入功能,用switch语句实现选择的功能。最后为了实现多次操作并且手动退出系统。用while(true)循环实现.
(3) 学生管理系统查询所有学生信息的代码编写,首先判断集合中是否有数据,如果没有数据就给出提示,并让该方法不在继续往下执行。如果有数据。遍历集合输出打印数据。
(4) 学生管理系统添加学生信息的代码编写,首先输入学生学号,判断学号有没有被人占用,如果被占用重新输入学号,没有被占用继续录入学生姓名、年龄。家庭住址等信息。创建学生对象,将录入的数据存入对象。最后将学生对象添加入集合,添加学生信息成功。
(5) 学生管理系统删除学生信息的代码编写,键盘录入一个学号,到集合中去查找,看是否有学生使用该学号,如果有就删除该学生信息。如果没有学生使用该学号,返回主界面。
(6)学生管理系统修改学生信息的代码编写。键盘录入一个学号,到集合中去查找,看是否有学生使用该学号,如果过有就修改学生信息。反之返回主界面。
【案例实现】
学生实体类属性如文件6-1所示。
文件6-1 Student.java
- public class Student {
- //学号
- private String id;
- //姓名
- private String name;
- //年龄
- private String age;
- //居住地
- private String address;
- }
以上代码是我们自定义对象实体类所包括的属性,我们在用时需要重写get()、set()以及构造方法。
模拟学生管理系统的代码实现,如文件6-2所示。
文件6-2 example2.java
- package com.itheima;
- import java.util.ArrayList;
- import java.util.Scanner;
- public class example2 {
- public static void main(String[] args) {
- //创建集合对象,用于存储学生数据
- ArrayList<Student> array = new ArrayList<Student>();
- //为了让程序能够回到这里来,我们使用循环
- 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 choiceString = sc.nextLine();
- //用switch语句实现选择
- switch(choiceString) {
- case "1":
- //查看所有学生
- findAllStudent(array);
- break;
- case "2":
- //添加学生
- addStudent(array);
- break;
- case "3":
- //删除学生
- deleteStudent(array);
- break;
- case "4":
- //修改学生
- updateStudent(array);
- break;
- case "5":
- //退出
- //System.out.println("谢谢你的使用");
- //break;
- default:
- System.out.println("谢谢你的使用");
- System.exit(0); //JVM退出
- break;
- }
- }
- }
- //查看所有学生
- public static void findAllStudent(ArrayList<Student> array) {
- //首先来判断集合中是否有数据,如果没有数据,就给出提示,并让该方法不继续往
- 下执行
- if(array.size() == 0) {
- System.out.println("不好意思,目前没有学生信息可供查询,请回去重新选择你
- 的操作");
- return;
- }
- //\t 其实就是一个tab键的位置
- System.out.println("学号\t姓名\t年龄\t居住地");
- for(int x=0; x<array.size(); x++) {
- Student s = array.get(x);
- System.out.println(s.getId()+"\t"+s.getName()+"\t"
- +s.getAge()+"\t"+s.getAddress());
- }
- }
- }
- //添加学生
- public static void addStudent(ArrayList<Student> array) {
- //创建键盘录入对象
- Scanner sc = new Scanner(System.in);
- //为了让id能够被访问到,我们就把id定义在了循环的外面
- String id;
- //为了让代码能够回到这里,用循环
- while(true) {
- System.out.println("请输入学生学号:");
- //String id = sc.nextLine();
- id = sc.nextLine();
- //判断学号有没有被人占用
- //定义标记
- boolean flag = false;
- //遍历集合,得到每一个学生
- for(int x=0; x<array.size(); x++) {
- Student s = array.get(x);
- //获取该学生的学号,和键盘录入的学号进行比较
- if(s.getId().equals(id)) {
- flag = true; //说明学号被占用了
- break;
- }
- }
- if(flag) {
- System.out.println("你输入的学号已经被占用,请重新输入");
- }else {
- break; //结束循环
- }
- }
- System.out.println("请输入学生姓名:");
- String name = sc.nextLine();
- System.out.println("请输入学生年龄:");
- String age = sc.nextLine();
- System.out.println("请输入学生居住地:");
- String address = sc.nextLine();
- //创建学生对象
- Student s = new Student();
- s.setId(id);
- s.setName(name);
- s.setAge(age);
- s.setAddress(address);
- //把学生对象作为元素添加到集合
- array.add(s);
- //给出提示
- System.out.println("添加学生成功");
- }
- //删除学生
- public static void deleteStudent(ArrayList<Student> array) {
- //删除学生的思路:键盘录入一个学号,到集合中去查找,看是否有学生使用的是该
- 学号,如果有就删除该学生
- //创建键盘录入对象
- Scanner sc = new Scanner(System.in);
- System.out.println("请输入你要删除的学生的学号:");
- String id = sc.nextLine();
- //我们必须给出学号不存在的时候的提示
- //定义一个索引
- int index = -1;
- //遍历集合
- for(int x=0; x<array.size(); x++) {
- //获取到每一个学生对象
- Student s = array.get(x);
- //拿这个学生对象的学号和键盘录入的学号进行比较
- if(s.getId().equals(id)) {
- index = x;
- break;
- }
- }
- if(index == -1) {
- System.out.println("不好意思,你要删除的学号对应的学生信息不存在,请回去
- 重新你的选择");
- }else {
- array.remove(index);
- System.out.println("删除学生成功");
- }
- }
- //修改学生
- public static void updateStudent(ArrayList<Student> array) {
- //修改学生的思路:键盘录入一个学号,到集合中去查找,看是否有学生使用的是该
- 学号,如果有就修改该学生
- //创建键盘录入对象
- Scanner sc = new Scanner(System.in);
- System.out.println("请输入你要修改的学生的学号:");
- String id = sc.nextLine();
- //定义一个索引
- int index = -1;
- //遍历集合
- for(int x=0; x<array.size(); x++) {
- //获取每一个学生对象
- Student s = array.get(x);
- //拿学生对象的学号和键盘录入的学号进行比较
- if(s.getId().equals(id)) {
- index = x;
- break;
- }
- }
- if(index == -1) {
- System.out.println("不好意思,你要修改的学号对应的学生信息不存在,请回去
- 重新你的选择");
- }else {
- System.out.println("请输入学生新姓名:");
- String name = sc.nextLine();
- System.out.println("请输入学生新年龄:");
- String age = sc.nextLine();
- System.out.println("请输入学生新居住地:");
- String address = sc.nextLine();
- //创建学生对象
- Student s = new Student();
- s.setId(id);
- s.setName(name);
- s.setAge(age);
- s.setAddress(address);
- //修改集合中的学生对象
- array.set(index, s);
- //给出提示
- System.out.println("修改学生成功");
- }
- }
在文件6-2中,第8行定义一个集合用于存储学生数据。其中该集合的泛型为Student。第10行代码定义一个while(true)循环使程序能够回到学生管理系统的主界面,第12~18行用于显示主界面的菜单信息。第20~21行代码定义键盘录入对象,用于选择我们要实现的功能。第23~48行代码定义switch语句实现选择。case对应相应的功能。调用相应的程序代码 ,其中System.exit(0)表示JVM退出。第52~68行,定义一个实现学生信息查询方法。其中第55~59行,首先用if判断集合中是否有数据,如果没有数据,就给出提示,并让该方法不继续往下执行。如果有数据,执行第62~66行遍历集合。并输出打印结果。第70~114行,定义一个实现添加学生信息的方法,其中第73行,定义一个id表示输入的学生的学号, 为了让id能够被访问到,我们就把id定义在了循环的外面。第76行,用while循环保证多次输入学号,直到输入的学号不重复。第84~85行代码表示循环遍历集合,获取每一个学生。第87行代码用if判断学号是否被占用。第116~142,行,定义一个删除学生信息的方法。第145~186行,定义一个实现修改学生信息的方法。