学生管理系统

B站:【黑马程序员Java零基础视频教程_上部(Java入门,含斯坦福大学练习题+力扣算法题和大厂java面试题)】https://www.bilibili.com/video/BV17F411T7Ao?vd_source=902cae974409091c868112996a85ad70


一. 学生管理系统文档说明


二. 过程分析

1. 整体分析

一步一步按照文档说明来即可:

首先我们要初始化一个菜单,然后创建一个学生类,接着就是系统的四大功能

该系统分四部分内容:添加、删除、修改、查询,可以用一个选择语句来选择需要执行哪一部分,每一部分的具体执行单独用方法来写

然后再看每一部分的具体要求,将每一个方法需要执行的操作完善一下

2. 初始菜单

首先将初始菜单写出来

java 复制代码
package com.studentsystem;

import java.util.Scanner;

public class StudentSystem {
    public static void main(String[] args) {
        //1.菜单
        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) {
                //选择1~4时,分别执行对应的部分
                case "1" -> System.out.println("添加学生");
                case "2" -> System.out.println("删除学生");
                case "3" -> System.out.println("修改学生");
                case "4" -> System.out.println("查询学生");
                //选择5时,需要跳出while循环
                case "5" -> {
                    System.out.println("退出");
                    break loop;
                    //System.exit(0); 该方法也可以让程序停止运行
                }
                default -> System.out.println("没有这个选项");
            }
        }
    }
}

写完后运行一下确保这一部分代码正确

3. Student 类

首先我们先写一个学生类:(可以利用 Alt + Insert 快速完成)

java 复制代码
package com.studentsystem;

public class Student {
    //id name age address
    private String id;
    private String name;
    private int age;
    private String address;

    public Student() {
    }

    public Student(String id, String name, int age, String address) {
        this.id = id;
        this.name = name;
        this.age = age;
        this.address = address;
    }

    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;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }

    public String getAddress() {
        return address;
    }

    public void setAddress(String address) {
        this.address = address;
    }
}

4. 添加功能

先简要的写出添加、删除、修改、查询这四部分的方法(详细的会在后面继续完善)

然后让四个方法与初始菜单界面产生关系:

将原来的 switch 的 case 语句中的内容改为方法调用

java 复制代码
package com.studentsystem;

import java.util.Scanner;

public class StudentSystem {
    public static void main(String[] args) {
        //1.菜单
        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) {
                //选择1~4时,分别执行对应的部分
                case "1" -> addStudent();
                case "2" -> deleteStudent();
                case "3" -> updateStudent();
                case "4" -> queryStudent();
                //选择5时,需要跳出while循环
                case "5" -> {
                    System.out.println("退出");
                    break loop;
                    //System.exit(0); 该方法也可以让程序停止运行
                }
                default -> System.out.println("没有这个选项");
            }
        }
    }

    //2.添加学生
    public static void addStudent() {
        System.out.println("添加学生");
    }

    //3.删除学生
    public static void deleteStudent() {
        System.out.println("删除学生");
    }

    //4.修改学生
    public static void updateStudent() {
        System.out.println("修改学生");
    }

    //5.查询学生
    public static void queryStudent() {
        System.out.println("查询学生");
    }
}

写完后运行一下确保这一部分代码正确

5. 加 删 改 查

5.1 引入集合

在哪里添加、删除、修改、查询学生呢?这时就用到了我们之前学到的集合的知识了:

java 复制代码
package com.studentsystem;

import java.util.ArrayList;
import java.util.Scanner;

public class StudentSystem {
    public static void main(String[] args) {
        //ArrayList<Student> list 是一个存储 Student 对象的集合
        ArrayList<Student> list = new ArrayList<>();
        //1.菜单
        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) {
                //选择1~4时,分别执行对应的部分
                case "1" -> addStudent(list);
                case "2" -> deleteStudent(list);
                case "3" -> updateStudent(list);
                case "4" -> queryStudent(list);
                //选择5时,需要跳出while循环
                case "5" -> {
                    System.out.println("退出");
                    break loop;
                    //System.exit(0); 该方法也可以让程序停止运行
                }
                default -> System.out.println("没有这个选项");
            }
        }
    }

    //2.添加学生
    public static void addStudent(ArrayList<Student> list) {
        System.out.println("添加学生");
    }

    //3.删除学生
    public static void deleteStudent(ArrayList<Student> list) {
        System.out.println("删除学生");
    }

    //4.修改学生
    public static void updateStudent(ArrayList<Student> list) {
        System.out.println("修改学生");
    }

    //5.查询学生
    public static void queryStudent(ArrayList<Student> list) {
        System.out.println("查询学生");
    }
}

然后就可以来写这四大功能的具体方法了,具体写的时候我们可以先看一下哪部分简单,先写哪部分

下面是按顺序写的(具体写的时候我是按照 查询 - 添加 - 删除 - 修改 来编写的,当写完查询和添加、删除、修改后可以分别运行代码看是否能正确运行):

5.2 添加学生

基本添加:

java 复制代码
//2.添加学生
public static void addStudent(ArrayList<Student> list) {
    //利用空参构造创建 Student 对象
    Student s = new Student();

    Scanner sc = new Scanner(System.in);
    System.out.println("请输入学生的id:");
    String id = sc.next();
    s.setId(id);//将用户输入的 id 赋值给 s 对象的 id 属性

    System.out.println("请输入学生的姓名:");
    String name = sc.next();
    s.setName(name);//将用户输入的 name 赋值给 s 对象的 name 属性

    System.out.println("请输入学生的年龄:");
    int age = sc.nextInt();
    s.setAge(age);//将用户输入的 age 赋值给 s 对象的 age 属性

    System.out.println("请输入学生的地址:");
    String address = sc.next();
    s.setAddress(address);//将用户输入的 address 赋值给 s 对象的 address 属性

    //创建 Student 对象
    //Student s = new Student(id,name,age,address); 也可以利用空参构造

    //将新创建的 Student 对象添加到集合中
    list.add(s);

    //提示用户添加成功
    System.out.println("学生信息添加成功");
}

判断 id 是否唯一:

java 复制代码
//2.添加学生
public static void addStudent(ArrayList<Student> list) {
        //利用空参构造创建 Student 对象
        Student s = new Student();

        Scanner sc = new Scanner(System.in);
        String id = null;
        while (true) {
            System.out.println("请输入学生的id:");
            id = sc.next();
            //将新创建的 Student 对象添加到集合中
            boolean isExit = contains(list, id);
            if (isExit) {
                //id已存在。需要重新录入
                System.out.println("该id已存在,请重新录入");
            } else {
                //id不存在,添加到集合中
                s.setId(id);//将用户输入的 id 赋值给 s 对象的 id 属性
                break;
            }
        }

        System.out.println("请输入学生的姓名:");
        String name = sc.next();
        s.setName(name);//将用户输入的 name 赋值给 s 对象的 name 属性

        System.out.println("请输入学生的年龄:");
        int age = sc.nextInt();
        s.setAge(age);//将用户输入的 age 赋值给 s 对象的 age 属性

        System.out.println("请输入学生的地址:");
        String address = sc.next();
        s.setAddress(address);//将用户输入的 address 赋值给 s 对象的 address 属性

        //创建 Student 对象
        //Student s = new Student(id,name,age,address); 也可以利用空参构造

        //将新创建的 Student 对象添加到集合中
        list.add(s);

        //提示用户添加成功
        System.out.println("学生信息添加成功");
    }

    //判断id在集合中是否存在
    public static boolean contains(ArrayList<Student> list, String id) {
        //循环遍历集合得到里面的每一个学生对象
        for (int i = 0; i < list.size(); i++) {
            //拿到学生对象后,获取id并进行判断
            Student stu = list.get(i);//每一个学生对象
            String sid = stu.getId();//每一个学生对象的id
            if (sid.equals(id)) {
                //存在,true
                return true;
            }
        }
        //循环结束后,没有找到对应的id(不存在),返回false
        return false;
    }

写完后运行一下确保这一部分代码正确

5.3 删除学生

先写一个方法来获取 id 在集合中的索引:

java 复制代码
//获取id在集合中的索引
public static int getIndex(ArrayList<Student> list,String id) {
        //循环遍历集合
        for (int i = 0; i < list.size(); i++) {
            //得到每一个学生对象
            Student stu = list.get(i);
            //得到每个学生的id
            String sid = stu.getId();
            //将集合中的学生id跟要查询的id进行比较
            if (sid.equals(id)) {
                //如果一样就返回索引
                return i;
            }
        }
        //如果循环结束后,没有找到对应的id(不存在),返回-1
        return -1;
    }

此时我们发现该方法与查询学生时用到的 "判断id在集合中是否存在" 这个方法有很多相同的地方,为了提高代码复用性,我们可以将 "判断id在集合中是否存在" 这样改:

java 复制代码
//判断id在集合中是否存在
public static boolean contains(ArrayList<Student> list, String id) {
        /*//循环遍历集合得到里面的每一个学生对象
        for (int i = 0; i < list.size(); i++) {
            //拿到学生对象后,获取id并进行判断
            Student stu = list.get(i);//每一个学生对象
            String sid = stu.getId();//每一个学生对象的id
            if (sid.equals(id)) {
                //存在,true
                return true;
            }
        }
        //循环结束后,没有找到对应的id(不存在),返回false
        return false;*/
        return getIndex(list, id) >= 0;
    }

最后将删除学生部分的方法再完善一下即可:

java 复制代码
//3.删除学生
public static void deleteStudent(ArrayList<Student> list) {
        Scanner sc = new Scanner(System.in);
        System.out.println("请输入要删除的学生的id:");
        String id = sc.next();
        //查询id在集合中的索引
        int index = getIndex(list,id);
        //对index进行判断
        //如果大于等于0(对应值即为要删除的索引),表示存在,直接删除
        if(index >= 0) {
            list.remove(index);
            System.out.println("id为:" + id + "的学生信息删除成功");
        }
        //如果为-1,表示不存在,提示用户不存在,结束方法,回到初始菜单
        else {
            System.out.println("id不存在,删除失败");
        }
    }

写完后运行一下确保这一部分代码正确

5.4 修改学生

java 复制代码
//4.修改学生
public static void updateStudent(ArrayList<Student> list) {
        Scanner sc = new Scanner(System.in);

        System.out.println("请输入要修改的学生的id:");
        String id = sc.next();

        //查询id是否在集合中
        int index = getIndex(list,id);

        //小于0,不存在,返回主菜单
        if(index < 0) {
            System.out.println("要修改的id" + id + "不存在,请重新输入");
            return;
        }

        //此时,大于等于0,即为存在,且该值即为要查找的id的所引
        //获取要修改的学生对象
        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("id为:" + id + "的学生信息修改成功");
    }

写完后运行一下确保这一部分代码正确

5.5 查询学生

java 复制代码
//5.查询学生
public static void queryStudent(ArrayList<Student> list) {
        //没有学生信息
        if (list.size() == 0) {
            System.out.println("当前无学生信息");
            return;
        }
        //有学生信息
        System.out.println("id\t\t姓名\t\t年龄\t\t地址");
        for (int i = 0; i < list.size(); i++) {
            Student stu = list.get(i);//list.get(i) 会返回一个已经创建好的 Student 对象,不需要再通过 new 来创建新对象
            System.out.println(stu.getId() + "\t" + stu.getName() + "\t" + stu.getAge() + "\t" + stu.getAddress());
        }
    }

写完后运行一下确保这一部分代码正确


三. 完整代码

现在我们已经完成了所有部分的代码,来展示运行一下吧!

Student.java

java 复制代码
package com.studentsystem;

public class Student {
    //id name age address
    private String id;
    private String name;
    private int age;
    private String address;

    public Student() {
    }

    public Student(String id, String name, int age, String address) {
        this.id = id;
        this.name = name;
        this.age = age;
        this.address = address;
    }

    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;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }

    public String getAddress() {
        return address;
    }

    public void setAddress(String address) {
        this.address = address;
    }
}

StudentSystem.java

java 复制代码
package com.studentsystem;

import java.util.ArrayList;
import java.util.Scanner;

public class StudentSystem {
    public static void main(String[] args) {
        //ArrayList<Student> list 是一个存储 Student 对象的集合
        ArrayList<Student> list = new ArrayList<>();
        //1.菜单
        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) {
                //选择1~4时,分别执行对应的部分
                case "1" -> addStudent(list);
                case "2" -> deleteStudent(list);
                case "3" -> updateStudent(list);
                case "4" -> queryStudent(list);
                //选择5时,需要跳出while循环
                case "5" -> {
                    System.out.println("退出系统");
                    break loop;
                    //System.exit(0); 该方法也可以让程序停止运行
                }
                default -> System.out.println("没有这个选项");
            }
        }
    }

    //2.添加学生
    public static void addStudent(ArrayList<Student> list) {
        //利用空参构造创建 Student 对象
        Student s = new Student();

        Scanner sc = new Scanner(System.in);
        String id = null;
        while (true) {
            System.out.println("请输入学生的id:");
            id = sc.next();
            //将新创建的 Student 对象添加到集合中
            boolean isExit = contains(list, id);
            if (isExit) {
                //id已存在。需要重新录入
                System.out.println("该id已存在,请重新录入");
            } else {
                //id不存在,添加到集合中
                s.setId(id);//将用户输入的 id 赋值给 s 对象的 id 属性
                break;
            }
        }

        System.out.println("请输入学生的姓名:");
        String name = sc.next();
        s.setName(name);//将用户输入的 name 赋值给 s 对象的 name 属性

        System.out.println("请输入学生的年龄:");
        int age = sc.nextInt();
        s.setAge(age);//将用户输入的 age 赋值给 s 对象的 age 属性

        System.out.println("请输入学生的地址:");
        String address = sc.next();
        s.setAddress(address);//将用户输入的 address 赋值给 s 对象的 address 属性

        //创建 Student 对象
        //Student s = new Student(id,name,age,address); 也可以利用空参构造

        //将新创建的 Student 对象添加到集合中
        list.add(s);

        //提示用户添加成功
        System.out.println("学生信息添加成功");
    }

    //3.删除学生
    public static void deleteStudent(ArrayList<Student> list) {
        Scanner sc = new Scanner(System.in);
        System.out.println("请输入要删除的学生的id:");
        String id = sc.next();
        //查询id在集合中的索引
        int index = getIndex(list,id);
        //对index进行判断
        //如果大于等于0(对应值即为要删除的索引),表示存在,直接删除
        if(index >= 0) {
            list.remove(index);
            System.out.println("id为:" + id + "的学生信息删除成功");
        }
        //如果为-1,表示不存在,提示用户不存在,结束方法,回到初始菜单
        else {
            System.out.println("id不存在,删除失败");
        }
    }

    //4.修改学生
    public static void updateStudent(ArrayList<Student> list) {
        Scanner sc = new Scanner(System.in);

        System.out.println("请输入要修改的学生的id:");
        String id = sc.next();

        //查询id是否在集合中
        int index = getIndex(list,id);

        //小于0,不存在,返回主菜单
        if(index < 0) {
            System.out.println("要修改的id" + id + "不存在,请重新输入");
            return;
        }

        //此时,大于等于0,即为存在,且该值即为要查找的id的所引
        //获取要修改的学生对象
        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("id为:" + id + "的学生信息修改成功");
    }

    //5.查询学生
    public static void queryStudent(ArrayList<Student> list) {
        //没有学生信息
        if (list.size() == 0) {
            System.out.println("当前无学生信息");
            return;
        }

        //有学生信息
        System.out.println("id\t\t姓名\t\t年龄\t\t地址");
        for (int i = 0; i < list.size(); i++) {
            Student stu = list.get(i);//list.get(i) 会返回一个已经创建好的 Student 对象,不需要再通过 new 来创建新对象
            System.out.println(stu.getId() + "\t" + stu.getName() + "\t" + stu.getAge() + "\t" + stu.getAddress());
        }
    }

    //判断id在集合中是否存在
    public static boolean contains(ArrayList<Student> list, String id) {
        /*//循环遍历集合得到里面的每一个学生对象
        for (int i = 0; i < list.size(); i++) {
            //拿到学生对象后,获取id并进行判断
            Student stu = list.get(i);//每一个学生对象
            String sid = stu.getId();//每一个学生对象的id
            if (sid.equals(id)) {
                //存在,true
                return true;
            }
        }
        //循环结束后,没有找到对应的id(不存在),返回false
        return false;*/
        return getIndex(list, id) >= 0;
    }

    //获取id在集合中的索引
    public static int getIndex(ArrayList<Student> list, String id) {
        //循环遍历集合
        for (int i = 0; i < list.size(); i++) {
            //得到每一个学生对象
            Student stu = list.get(i);
            //得到每个学生的id
            String sid = stu.getId();
            //将集合中的学生id跟要查询的id进行比较
            if (sid.equals(id)) {
                //如果一样就返回索引
                return i;
            }
        }
        //如果循环结束后,没有找到对应的id(不存在),返回-1
        return -1;
    }

}
相关推荐
m0_748241232 小时前
Java注解与反射实现日志与校验
java·开发语言·python
亚林瓜子3 小时前
给aws xray添加采样规则
aws·1024程序员节·xray·rule
一成码农3 小时前
3w字一文讲透Java IO
java·开发语言
惜.己3 小时前
从零使用vue脚手架开发一个简易的计算器
vue·js·1024程序员节
木易 士心3 小时前
MyBatis 与 Spring Data JPA 核心对比:选型指南与最佳实践
java·spring·1024程序员节
努力写代码的熊大3 小时前
stack、queue与priority_queue的用法解析与模拟实现
java·前端·javascript
小马哥learn3 小时前
基于 Vue3 + WebSocket 实现的平板控制端与大屏展示端联动方案
1024程序员节
运维行者_3 小时前
DDI 与 OpManager 集成对企业 IT 架构的全维度优化
运维·网络·数据库·华为·架构·1024程序员节·snmp监控
元智启4 小时前
AI开发工具实战解析:如何实现企业数据处理流程自动化
1024程序员节