• Java实训:学生信息管理系统


    文章目录

    一、程序功能

    功能概述

    • 利用Java完成一个学生信息程序的简单改动。
    • 添加学生信息
    • 修改学生信息
    • 查询学生信息
    • 删除学生信息

    二、程序包括的学生信息

    1.学号
    2.姓名
    3.班级
    4.专业
    5.电话号码

    • 当然,这只是简单的包括几个信息,其他的信息,如果也想要可以自己加入

    三、编程实现

    1.建立学生实体类

    在这里插入图片描述

    • 在test包里建立student(学生实体类)

    2.学生实体类代码编写

    (1)无参构造方法

    在这里插入图片描述

    (2)有参构造方法

    在这里插入图片描述

    • 我采用的是有参构造方法

    (3)完整的代码

    /**
     * 功能:学生实体类
     * 作者:孤梦
     * 日期:2022年05月26日
     */
    public class Student {
        private String id;
        private String name;
        private String classes;
        private String major;
        private String telephone;
    
        /**
         * 无参构造方法
         */
    
        public Student() {
        }
    
        /**
         * 有参构造方法
         * @param id
         * @param name
         * @param classes
         * @param major
         * @param telephone
         */
        public Student(String id, String name, String classes, String major, String telephone) {
            this.id = id;
            this.name = name;
            this.classes = classes;
            this.major = major;
            this.telephone = telephone;
        }
    
        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 String getClasses() {
            return classes;
        }
    
        public void setClasses(String classes) {
            this.classes = classes;
        }
    
        public String getMajor() {
            return major;
        }
    
        public void setMajor(String major) {
            this.major = major;
        }
    
        public String getTelephone() {
            return telephone;
        }
    
        public void setTelephone(String telephone) {
            this.telephone = telephone;
        }
    
        @Override
        public String toString() {
            return "Card{" +
                    "id='" + id + '\'' +
                    ", name='" + name + '\'' +
                    ", classes='" + classes + '\'' +
                    ", major='" + major + '\'' +
                    ", telephone='" + telephone + '\'' +
                    '}';
        }
    }
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55
    • 56
    • 57
    • 58
    • 59
    • 60
    • 61
    • 62
    • 63
    • 64
    • 65
    • 66
    • 67
    • 68
    • 69
    • 70
    • 71
    • 72
    • 73
    • 74
    • 75
    • 76
    • 77
    • 78
    • 79
    • 80
    • 81
    • 82
    • 83
    • 84
    • 85
    • 86
    • 87

    2.建立学生信息管理

    • 继续在test包里创建----StudentManagement(学生信息管理)
      在这里插入图片描述

    3.建立学生数组列表对象

    private  static ArrayList<Student> students = new ArrayList<>();
        
        public static void main(String[] args) {
            // 声明部分
            int mc1;
            Scanner sc = new Scanner(System.in);
            boolean isRunning = true; // 循环控制变量
    
            while (isRunning) {
                // 绘制一级菜单
                System.out.println("  学生信息管理系统");
                System.out.println("================");
                System.out.println("   1. 登录");
                System.out.println("   0. 退出");
                System.out.println("================");
                System.out.print("输入菜单编号[1,0]:");
                mc1 = sc.nextInt();
                // 根据用户选择进行相应的操作
                switch (mc1) {
                    case 1:
                        // 调用登录方法
                        login();
                        break;
                    case 0:
                        System.out.println("谢谢使用~再见~");
                        isRunning = false; // 结束循环
                        break;
                    default:
                        System.out.println("输入的菜单编号有误!");
                }
            }
        }
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33

    -创建好了列表,下面就该解决如何登录了

    4.登录方法

     /**
         * 登录方法
         */
        private static void login() {
            String username, password;
            Scanner sc = new Scanner(System.in);
    
            System.out.print("用户名:");
            username = sc.next();
            System.out.print("密  码:");
            password = sc.next();
    
            if (username.equals("gumeng") && password.equals("1314520")) {
                System.out.println("登录成功~");
                // 调用学生信息管理方法
                studentManagement();
            } else {
                System.out.println("用户名或密码有误,登录失败~");
            }
        }
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 这里的登录账号是:gumneg ,登录密码是:1314520
    • 登录账号和密码随自己的喜好设置

    5.学生信息管理方法

    (1)一级菜单

    • 在上面我们已经建立了一级菜单
      在这里插入图片描述

    (2)二级菜单

    • 下面我们绘制二级菜单,二级菜单是我们成功登录进去后的功能面板
    • 总共有七个功能面板
      1、添加学生信息
      2、修改学生信息
      3、查询学生信息
      4、删除学生信息
      5、读取学生信息
      6、保存学生信息
      7、返回上级菜单
      在这里插入图片描述
    • 分别对每个功能面板进行编写

    (3)完整学生管理方法代码

     /**
         * 学生信息管理方法
         */
        private static void studentManagement() {
            int mc2;
            Scanner sc = new Scanner(System.in);
            boolean isRunning = true; // 循环控制变量
    
            while (isRunning) {
                // 绘制二级菜单
                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("  6. 保存学生信息");
                System.out.println("  7. 返回上级");
                System.out.println("=======================");
                System.out.print("输入菜单编号[1,2,3,4,5,6,7]:");
                mc2 = sc.nextInt();
    
                switch (mc2) {
                    case 1:
                        System.out.println("执行添学生信息功能~");
                        break;
                    case 2:
                        System.out.println("执行修改学生信息功能~");
                        break;
                    case 3:
                        System.out.println("执行查询学生信息功能~");
                        break;
                    case 4:
                        System.out.println("执行删除学生信息功能~");
                        break;
                    case 5:
                        System.out.println("读取学生信息文件到学生数组列表~");
                        break;
                    case 6:
                        System.out.println("将学生信息数组列表写入名片文件~");
                        break;
                    case 7:
                        isRunning = false; // 结束二级菜单循环
                        break;
                    default:
                        System.out.println("输入的菜单编号有误!");
                }
            }
        }
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50

    6.添加学生信息方法

    /**
         * 添加学生信息方法
         */
        private static void addStudent() {
            // 声明变量
            String id;
            String name;
            String classes;
            String major;
            String telephone;
            Scanner sc = new Scanner(System.in);
    
            // 输入学生信息
            System.out.print("学号:");
            id = sc.next();
            System.out.print("姓名:");
            name = sc.next();
            System.out.print("班级:");
            classes = sc.next();
            System.out.print("专业:");
            major = sc.next();
            System.out.print("手机号码:");
            telephone = sc.next();
    
            // 创建学生对象
            Student student = new Student(id, name, classes, major,telephone);
    
            // 将学生信息添加到学生数组列表
            students.add(student);
        }
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 将学生添加到学生数组列表
      在这里插入图片描述
    • 添加学生总不能不保存,所以下面我们要将学生信息保存到文件

    7.将学生信息保存到文件

    (1)文件名

    在这里插入图片描述
    这是学生信息将要保存的文件名,当然文件可以随便自己设置

    (2)完整代码

    /**
         * 保存学生信息到文件
         */
        private static void saveStudents() {
            try {
                // 创建文件字符输出流
                FileWriter fw = new FileWriter("students.txt");
                // 创建学生容器字符串缓冲对象
                StringBuffer cardsBuffer = new StringBuffer();
                // 用增强for循坏遍历学生数组列表
                for (Student student : students) {
                    // 输出学生对象
                    System.out.println(student);
                    // 创建学生字符串缓冲对象
                    StringBuffer buffer = new StringBuffer();
                    // 添加学生字段信息(空格作为分隔符)
                    buffer.append(student.getId() + " ");
                    buffer.append(student.getName() + " ");
                    buffer.append(student.getClasses() + " ");
                    buffer.append(student.getMajor() + " ");
                    buffer.append(student.getTelephone());
                    // 将学生信息写入名片容器字符串缓冲对象
                    cardsBuffer.append(buffer.toString() + "\n");
                }
                // 将学生容器字符串缓冲对象的数据写入文件
                fw.write(students.toString());
                // 关闭文件字符输出流
                fw.close();
                // 提示用户写入成功
                System.out.println("恭喜,学生信息数据写入文件成功~");
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35

    (3)调用学生信息保存方法

    • 写好了要在保存学生信息功能面板上调用
      在这里插入图片描述

    8.读取学生信息并保存到学生数组列表

    (1)读取源

    • 你是从哪个文件读取的学生信息,这里读取名和上面的保存名要一致,不然读取不到学生信息
      在这里插入图片描述

    (2)读取学生信息完整代码

    • 在这里还有一个问题,如果文件名没有问题,但是你要读取的学生不存在的话程序要出错,所以我们正在这里要把好关
    /**
         * 读取学生信息文件,保存到学生数组列表
         */
        private static void readStudentFile() {
            // 创建文件字符输入流
            try {
                FileReader fr = new FileReader("students.txt");
                // 创建缓冲字符输入流
                BufferedReader br = new BufferedReader(fr);
                // 定义行变量
                String nextLine = " ";
                // 通过循坏读取名片文件
                while ((nextLine = br.readLine()) != null) {
                    // 拆分行字符串得到字段数值
                    String[] fields = nextLine.split(" ");
                    // 创建学生对象
                    Student student = new Student();
                    // 用字段数值设置对象属性
                    student.setId(fields[0]);
                    student.setName(fields[1]);
                    student.setClasses(fields[2]);
                    student.setMajor(fields[3]);
                    student.setTelephone(fields[4]);
                    // 输出学生对象
                    System.out.println("添加"  + student + "到学生数组列表");
                    // 将学生对象添加到学生数组列表
                    students.add(student);
                }
                // 关闭缓冲字符输入流
                br.close();
                // 关闭文件字符输入流
                fr.close();
            } catch (FileNotFoundException e) {
                System.out.println("温馨提示:学生文件不存在~");
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39

    (3)调用读取学生信息方法

    在这里插入图片描述

    9.查询学生信息

    (1)判断按哪种查询

    • 怎样查询学生信息呢?是按学号查询还是按姓名查询呢?还是一起查询?
    // 判断用户按哪种方式查询学生信息
            if (id.equals("")) {
                if (name.equals("")) { // 查询全部学生
                    // 遍历名片数组列表
                    for (Student student : students) {
                        System.out.println(student.getId() + " "
                                + student.getName() + " " + student.getClasses() + " "
                                + student.getMajor() + " " + student.getTelephone());
                    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9

    (2)按学生姓名查询

    System.out.println("~按姓名查询学生信息~");
                    boolean found = false;
                    // 遍历学生数组列表,按姓名来找
                    for (Student student : students) {
                        if (student.getName().equals(name)) {
                            found = true; // 找到了
                            break;
                        }
                    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 当查询的时候遇到同名情况怎么办,所以我们要解决这个问题
    if (found) {
                        // 针对可能存在的同名情况
                        for (Student student : students) {
                            if (student.getName().equals(name)) {
                                System.out.println(student.getId() + " "
                                        + student.getName() + " " + student.getClasses() + " "
                                        + student.getMajor() + " " + student.getTelephone());
                            }
                        }
                    } else {
                        System.out.println("温馨提示:查无此人~");
                    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12

    (3)按学生学号查询

    • 按学号查询的话就不存在学号相同的情况了
    else {
                if (name.equals("")) { // 按学号查询学生信息
                    System.out.println("~按学号查询学生信息~");
                    boolean found = false;
                    // 遍历学生数组列表,按学号来找
                    for (Student student : students) {
                        if (student.getId().equals(id)) {
                            found = true; // 找到了
                            // 输出学生信息
                            System.out.println(student.getId() + " "
                                    + student.getName() + " " + student.getClasses() + " "
                                    + student.getMajor() + " " + student.getTelephone());
                            break; // 跳出循环
                        }
                    }
                    // 根据found值提示用户
                    if (!found) {
                        System.out.println("温馨提示:查无此人~");
                    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19

    (4)按学生学号和姓名一起查询

    else { // 按学号和姓名查询学生信息
                    System.out.println("~按学号和姓名查询学生学习~");
                    boolean found = false;
                    // 遍历学生数组列表,按学号和姓名来找
                    for (Student student : students) {
                        if (student.getId().equals(id) && student.getName().equals(name)) {
                            found = true; // 找到了
                            // 输出学生信息
                            System.out.println(student.getId() + " "
                                    + student.getName() + " " + student.getClasses() + " "
                                    + student.getMajor() + " " + student.getTelephone());
                            break; // 跳出循环
                        }
                    }
                    // 根据found值提示用户
                    if (!found) {
                        System.out.println("温馨提示:查无此人~");
                    }
                }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19

    (5)三种查询情况的完整代码

     /**
         * 查询学生信息方法
         */
        private static void findStudent() {
            String id, name;
            Scanner sc = new Scanner(System.in);
    
            System.out.print("学号:");
            id = sc.nextLine(); // 单行输入,敲回车确认
            System.out.print("姓名:");
            name = sc.nextLine(); // 单行输入,敲回车确认
    
            // 判断用户按哪种方式查询学生信息
            if (id.equals("")) {
                if (name.equals("")) { // 查询全部学生
                    // 遍历名片数组列表
                    for (Student student : students) {
                        System.out.println(student.getId() + " "
                                + student.getName() + " " + student.getClasses() + " "
                                + student.getMajor() + " " + student.getTelephone());
                    }
                } else { // 按姓名查询学生信息
                    System.out.println("~按姓名查询学生信息~");
                    boolean found = false;
                    // 遍历学生数组列表,按姓名来找
                    for (Student student : students) {
                        if (student.getName().equals(name)) {
                            found = true; // 找到了
                            break;
                        }
                    }
                    // 根据found值提示用户
                    if (found) {
                        // 针对可能存在的同名情况
                        for (Student student : students) {
                            if (student.getName().equals(name)) {
                                System.out.println(student.getId() + " "
                                        + student.getName() + " " + student.getClasses() + " "
                                        + student.getMajor() + " " + student.getTelephone());
                            }
                        }
                    } else {
                        System.out.println("温馨提示:查无此人~");
                    }
                }
            } else {
                if (name.equals("")) { // 按学号查询学生信息
                    System.out.println("~按学号查询学生信息~");
                    boolean found = false;
                    // 遍历学生数组列表,按学号来找
                    for (Student student : students) {
                        if (student.getId().equals(id)) {
                            found = true; // 找到了
                            // 输出学生信息
                            System.out.println(student.getId() + " "
                                    + student.getName() + " " + student.getClasses() + " "
                                    + student.getMajor() + " " + student.getTelephone());
                            break; // 跳出循环
                        }
                    }
                    // 根据found值提示用户
                    if (!found) {
                        System.out.println("温馨提示:查无此人~");
                    }
                } else { // 按学号和姓名查询学生信息
                    System.out.println("~按学号和姓名查询学生学习~");
                    boolean found = false;
                    // 遍历学生数组列表,按学号和姓名来找
                    for (Student student : students) {
                        if (student.getId().equals(id) && student.getName().equals(name)) {
                            found = true; // 找到了
                            // 输出学生信息
                            System.out.println(student.getId() + " "
                                    + student.getName() + " " + student.getClasses() + " "
                                    + student.getMajor() + " " + student.getTelephone());
                            break; // 跳出循环
                        }
                    }
                    // 根据found值提示用户
                    if (!found) {
                        System.out.println("温馨提示:查无此人~");
                    }
                }
            }
        }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55
    • 56
    • 57
    • 58
    • 59
    • 60
    • 61
    • 62
    • 63
    • 64
    • 65
    • 66
    • 67
    • 68
    • 69
    • 70
    • 71
    • 72
    • 73
    • 74
    • 75
    • 76
    • 77
    • 78
    • 79
    • 80
    • 81
    • 82
    • 83
    • 84
    • 85

    (6)调用查询学生信息方法

    在这里插入图片描述

    10.修改学生信息

    (1)判断学生是否找到

    • 我们要修改学生信息,首先要找到我们要修改的学生在不在这个列表里,在并且找到了我们才能进行修改
    // 判断是否找到学生
            if (found) {
                System.out.println("说明:不输入信息,直接敲回车,表明不修改字段值");
                System.out.print("姓名:");
                name = sc.nextLine();
                System.out.print("班级:");
                classes = sc.nextLine();
                System.out.print("专业:");
                major= sc.nextLine();
                System.out.print("手机号码:");
                telephone = sc.nextLine();
    
                // 采用传统for循环遍历学生数组列表
                for (int i = 0; i < students.size(); i++) {
                    // 获取名片对象
                    Student student = students.get(i);
                    if (student.getId().equals(id)) { // 按编号找到学生
                        // 根据用户输入修改学生对象
                        if (!name.equals("")) {
                            student.setName(name);
                        }
                        if (!classes.equals("")) {
                            student.setClasses(classes);
                        }
                        if (!major.equals("")) {
                            student.setMajor(major);
                        }
                        if (!telephone.equals("")) {
                            student.setTelephone(telephone);
                        }
                        // 用修改后的学生对象去更新学生数组列表对应的元素
                        students.set(i, student);
                        // 显示修改的数组列表对应元素
                        System.out.println(students.get(i));
                        break; // 跳出循环
                    }
                }
            } else {
                System.out.println("温馨提示:查无此人~");
            }
        }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41

    (2)修改学习学习的完整代码

    /**
         * 修改学生信息方法
         */
        private static void modifyStudent() {
            String id, name, classes, major, telephone;
            Scanner sc = new Scanner(System.in);
            boolean found = false;
    
            System.out.print("输入要修改的学生学号:");
            id = sc.nextLine();
    
            // 遍历学生列表数组
            for (Student student : students) {
                if (student.getId().equals(id)) {
                    found = true; // 找到了
                    // 输出名片信息
                    System.out.println(student.getId() + " "
                            + student.getName() + " " + student.getClasses() + " "
                            + student.getMajor() + " " + student.getTelephone());
                    break; // 跳出循环
                }
            }
            // 判断是否找到学生
            if (found) {
                System.out.println("说明:不输入信息,直接敲回车,表明不修改字段值");
                System.out.print("姓名:");
                name = sc.nextLine();
                System.out.print("班级:");
                classes = sc.nextLine();
                System.out.print("专业:");
                major= sc.nextLine();
                System.out.print("手机号码:");
                telephone = sc.nextLine();
    
                // 采用传统for循环遍历学生数组列表
                for (int i = 0; i < students.size(); i++) {
                    // 获取名片对象
                    Student student = students.get(i);
                    if (student.getId().equals(id)) { // 按编号找到学生
                        // 根据用户输入修改学生对象
                        if (!name.equals("")) {
                            student.setName(name);
                        }
                        if (!classes.equals("")) {
                            student.setClasses(classes);
                        }
                        if (!major.equals("")) {
                            student.setMajor(major);
                        }
                        if (!telephone.equals("")) {
                            student.setTelephone(telephone);
                        }
                        // 用修改后的学生对象去更新学生数组列表对应的元素
                        students.set(i, student);
                        // 显示修改的数组列表对应元素
                        System.out.println(students.get(i));
                        break; // 跳出循环
                    }
                }
            } else {
                System.out.println("温馨提示:查无此人~");
            }
        }
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55
    • 56
    • 57
    • 58
    • 59
    • 60
    • 61
    • 62
    • 63
    • 64

    (3)调用学生信息修改方法

    在这里插入图片描述

    11.删除学生信息

    (1)删除学生信息的完整代码

    /**
         * 删除学生方法
         */
        private static void deleteStudent() {
            // 键盘录入要删除的学生,显示提示信息
            Scanner sc = new Scanner(System.in);
            System.out.print("请输入你要删除的学生学号:");
            String id = sc.nextLine();
    
            // 在删除学生之前,对学生学号是否存在进行判断
            int index = -1;
    
            for (int i = 0;i < students.size();i++) {
                Student student = students.get(i);
                if (student.getId().equals(id)) {
                    index = i;
                    break;
                }
            }
            // 如果不存在,提示信息
            if (index == -1) {
                System.out.print("该学号不存在,请重新输入!");
            } else {
                students.remove(index);
                // 提示删除成功
                System.out.print("删除学生成功!");
            }
        }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28

    (2)调用删除学生信息方法

    在这里插入图片描述

    四、编程实现完整代码

    package test;
    
    import java.io.*;
    import java.util.ArrayList;
    import java.util.Scanner;
    
    /**
     * 功能:学生信息管理系统
     * 作者:孤梦
     * 日期:2022年05月26日
     */
    public class StudentManagement {
        // 创建学生数组列表对象
        private  static ArrayList<Student> students = new ArrayList<>();
    
        public static void main(String[] args) {
            // 声明部分
            int mc1;
            Scanner sc = new Scanner(System.in);
            boolean isRunning = true; // 循环控制变量
    
            while (isRunning) {
                // 绘制一级菜单
                System.out.println("  学生信息管理系统");
                System.out.println("================");
                System.out.println("   1. 登录");
                System.out.println("   0. 退出");
                System.out.println("================");
                System.out.print("输入菜单编号[1,0]:");
                mc1 = sc.nextInt();
                // 根据用户选择进行相应的操作
                switch (mc1) {
                    case 1:
                        // 调用登录方法
                        login();
                        break;
                    case 0:
                        System.out.println("谢谢使用~再见~");
                        isRunning = false; // 结束循环
                        break;
                    default:
                        System.out.println("输入的菜单编号有误!");
                }
            }
        }
    
        /**
         * 登录方法
         */
        private static void login() {
            String username, password;
            Scanner sc = new Scanner(System.in);
    
            System.out.print("用户名:");
            username = sc.next();
            System.out.print("密  码:");
            password = sc.next();
    
            if (username.equals("gumeng") && password.equals("1314520")) {
                System.out.println("登录成功~");
                // 调用学生信息管理方法
                studentManagement();
            } else {
                System.out.println("用户名或密码有误,登录失败~");
            }
        }
    
        /**
         * 学生信息管理方法
         */
        private static void studentManagement() {
            int mc2;
            Scanner sc = new Scanner(System.in);
            boolean isRunning = true; // 循环控制变量
    
            while (isRunning) {
                // 绘制二级菜单
                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("  6. 保存学生信息");
                System.out.println("  7. 返回上级");
                System.out.println("=======================");
                System.out.print("输入菜单编号[1,2,3,4,5,6,7]:");
                mc2 = sc.nextInt();
    
                switch (mc2) {
                    case 1:
                        System.out.println("执行添学生信息功能~");
                        addStudent(); // 调用添加学生信息方法
                        break;
                    case 2:
                        System.out.println("执行修改学生信息功能~");
                        modifyStudent(); // 调用修改学生信息方法
                        break;
                    case 3:
                        System.out.println("执行查询学生信息功能~");
                        findStudent(); // 调用查询学生信息方法
                        break;
                    case 4:
                        System.out.println("执行删除学生信息功能~");
                        deleteStudent();  // 调用删除学生信息方法
                        break;
                    case 5:
                        System.out.println("读取学生信息文件到学生数组列表~");
                        readStudentFile(); // 调用读取学生信息文件方法
                        break;
                    case 6:
                        System.out.println("将学生信息数组列表写入名片文件~");
                        saveStudents(); // 调用保存学生信息方法
                        break;
                    case 7:
                        isRunning = false; // 结束二级菜单循环
                        break;
                    default:
                        System.out.println("输入的菜单编号有误!");
                }
            }
        }
    
        /**
         * 添加学生信息方法
         */
        private static void addStudent() {
            // 声明变量
            String id;
            String name;
            String classes;
            String major;
            String telephone;
            Scanner sc = new Scanner(System.in);
    
            // 输入学生信息
            System.out.print("学号:");
            id = sc.next();
            System.out.print("姓名:");
            name = sc.next();
            System.out.print("班级:");
            classes = sc.next();
            System.out.print("专业:");
            major = sc.next();
            System.out.print("手机号码:");
            telephone = sc.next();
    
            // 创建学生对象
            Student student = new Student(id, name, classes, major,telephone);
    
            // 将学生信息添加到学生数组列表
            students.add(student);
        }
    
        /**
         * 保存学生信息到文件
         */
        private static void saveStudents() {
            try {
                // 创建文件字符输出流
                FileWriter fw = new FileWriter("students.txt");
                // 创建学生容器字符串缓冲对象
                StringBuffer studentsBuffer = new StringBuffer();
                // 用增强for循坏遍历学生数组列表
                for (Student student : students) {
                    // 输出学生对象
                    System.out.println(student);
                    // 创建学生字符串缓冲对象
                    StringBuffer buffer = new StringBuffer();
                    // 添加学生字段信息(空格作为分隔符)
                    buffer.append(student.getId() + " ");
                    buffer.append(student.getName() + " ");
                    buffer.append(student.getClasses() + " ");
                    buffer.append(student.getMajor() + " ");
                    buffer.append(student.getTelephone());
                    // 将学生信息写入名片容器字符串缓冲对象
                    studentsBuffer.append(buffer.toString() + "\n");
                }
                // 将学生容器字符串缓冲对象的数据写入文件
                fw.write(studentsBuffer.toString());
                // 关闭文件字符输出流
                fw.close();
                // 提示用户写入成功
                System.out.println("恭喜,学生信息数据写入文件成功~");
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    
        /**
         * 读取学生信息文件,保存到学生数组列表
         */
        private static void readStudentFile() {
            // 创建文件字符输入流
            try {
                FileReader fr = new FileReader("students.txt");
                // 创建缓冲字符输入流
                BufferedReader br = new BufferedReader(fr);
                // 定义行变量
                String nextLine = " ";
                // 通过循坏读取名片文件
                while ((nextLine = br.readLine()) != null) {
                    // 拆分行字符串得到字段数值
                    String[] fields = nextLine.split(" ");
                    // 创建学生对象
                    Student student = new Student();
                    // 用字段数值设置对象属性
                    student.setId(fields[0]);
                    student.setName(fields[1]);
                    student.setClasses(fields[2]);
                    student.setMajor(fields[3]);
                    student.setTelephone(fields[4]);
                    // 输出学生对象
                    System.out.println("添加"  + student + "到学生数组列表");
                    // 将学生对象添加到学生数组列表
                    students.add(student);
                }
                // 关闭缓冲字符输入流
                br.close();
                // 关闭文件字符输入流
                fr.close();
            } catch (FileNotFoundException e) {
                System.out.println("温馨提示:学生文件不存在~");
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    
        /**
         * 查询学生信息方法
         */
        private static void findStudent() {
            String id, name;
            Scanner sc = new Scanner(System.in);
    
            System.out.print("学号:");
            id = sc.nextLine(); // 单行输入,敲回车确认
            System.out.print("姓名:");
            name = sc.nextLine(); // 单行输入,敲回车确认
    
            // 判断用户按哪种方式查询学生信息
            if (id.equals("")) {
                if (name.equals("")) { // 查询全部学生
                    // 遍历名片数组列表
                    for (Student student : students) {
                        System.out.println(student.getId() + " "
                                + student.getName() + " " + student.getClasses() + " "
                                + student.getMajor() + " " + student.getTelephone());
                    }
                } else { // 按姓名查询学生信息
                    System.out.println("~按姓名查询学生信息~");
                    boolean found = false;
                    // 遍历学生数组列表,按姓名来找
                    for (Student student : students) {
                        if (student.getName().equals(name)) {
                            found = true; // 找到了
                            break;
                        }
                    }
                    // 根据found值提示用户
                    if (found) {
                        // 针对可能存在的同名情况
                        for (Student student : students) {
                            if (student.getName().equals(name)) {
                                System.out.println(student.getId() + " "
                                        + student.getName() + " " + student.getClasses() + " "
                                        + student.getMajor() + " " + student.getTelephone());
                            }
                        }
                    } else {
                        System.out.println("温馨提示:查无此人~");
                    }
                }
            } else {
                if (name.equals("")) { // 按学号查询学生信息
                    System.out.println("~按学号查询学生信息~");
                    boolean found = false;
                    // 遍历学生数组列表,按学号来找
                    for (Student student : students) {
                        if (student.getId().equals(id)) {
                            found = true; // 找到了
                            // 输出学生信息
                            System.out.println(student.getId() + " "
                                    + student.getName() + " " + student.getClasses() + " "
                                    + student.getMajor() + " " + student.getTelephone());
                            break; // 跳出循环
                        }
                    }
                    // 根据found值提示用户
                    if (!found) {
                        System.out.println("温馨提示:查无此人~");
                    }
                } else { // 按学号和姓名查询学生信息
                    System.out.println("~按学号和姓名查询学生学习~");
                    boolean found = false;
                    // 遍历学生数组列表,按学号和姓名来找
                    for (Student student : students) {
                        if (student.getId().equals(id) && student.getName().equals(name)) {
                            found = true; // 找到了
                            // 输出学生信息
                            System.out.println(student.getId() + " "
                                    + student.getName() + " " + student.getClasses() + " "
                                    + student.getMajor() + " " + student.getTelephone());
                            break; // 跳出循环
                        }
                    }
                    // 根据found值提示用户
                    if (!found) {
                        System.out.println("温馨提示:查无此人~");
                    }
                }
            }
        }
    
        /**
         * 修改学生信息方法
         */
        private static void modifyStudent() {
            String id, name, classes, major, telephone;
            Scanner sc = new Scanner(System.in);
            boolean found = false;
    
            System.out.print("输入要修改的学生学号:");
            id = sc.nextLine();
    
            // 遍历学生列表数组
            for (Student student : students) {
                if (student.getId().equals(id)) {
                    found = true; // 找到了
                    // 输出名片信息
                    System.out.println(student.getId() + " "
                            + student.getName() + " " + student.getClasses() + " "
                            + student.getMajor() + " " + student.getTelephone());
                    break; // 跳出循环
                }
            }
            // 判断是否找到学生
            if (found) {
                System.out.println("说明:不输入信息,直接敲回车,表明不修改字段值");
                System.out.print("姓名:");
                name = sc.nextLine();
                System.out.print("班级:");
                classes = sc.nextLine();
                System.out.print("专业:");
                major= sc.nextLine();
                System.out.print("手机号码:");
                telephone = sc.nextLine();
    
                // 采用传统for循环遍历学生数组列表
                for (int i = 0; i < students.size(); i++) {
                    // 获取名片对象
                    Student student = students.get(i);
                    if (student.getId().equals(id)) { // 按编号找到学生
                        // 根据用户输入修改学生对象
                        if (!name.equals("")) {
                            student.setName(name);
                        }
                        if (!classes.equals("")) {
                            student.setClasses(classes);
                        }
                        if (!major.equals("")) {
                            student.setMajor(major);
                        }
                        if (!telephone.equals("")) {
                            student.setTelephone(telephone);
                        }
                        // 用修改后的学生对象去更新学生数组列表对应的元素
                        students.set(i, student);
                        // 显示修改的数组列表对应元素
                        System.out.println(students.get(i));
                        break; // 跳出循环
                    }
                }
            } else {
                System.out.println("温馨提示:查无此人~");
            }
        }
    
        /**
         * 删除学生方法
         */
        private static void deleteStudent() {
            // 键盘录入要删除的学生,显示提示信息
            Scanner sc = new Scanner(System.in);
            System.out.print("请输入你要删除的学生学号:");
            String id = sc.nextLine();
    
            // 在删除学生之前,对学生学号是否存在进行判断
            int index = -1;
    
            for (int i = 0;i < students.size();i++) {
                Student student = students.get(i);
                if (student.getId().equals(id)) {
                    index = i;
                    break;
                }
            }
            // 如果不存在,提示信息
            if (index == -1) {
                System.out.print("该学号不存在,请重新输入!");
            } else {
                students.remove(index);
                // 提示删除成功
                System.out.print("删除学生成功!");
            }
        }
    }
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55
    • 56
    • 57
    • 58
    • 59
    • 60
    • 61
    • 62
    • 63
    • 64
    • 65
    • 66
    • 67
    • 68
    • 69
    • 70
    • 71
    • 72
    • 73
    • 74
    • 75
    • 76
    • 77
    • 78
    • 79
    • 80
    • 81
    • 82
    • 83
    • 84
    • 85
    • 86
    • 87
    • 88
    • 89
    • 90
    • 91
    • 92
    • 93
    • 94
    • 95
    • 96
    • 97
    • 98
    • 99
    • 100
    • 101
    • 102
    • 103
    • 104
    • 105
    • 106
    • 107
    • 108
    • 109
    • 110
    • 111
    • 112
    • 113
    • 114
    • 115
    • 116
    • 117
    • 118
    • 119
    • 120
    • 121
    • 122
    • 123
    • 124
    • 125
    • 126
    • 127
    • 128
    • 129
    • 130
    • 131
    • 132
    • 133
    • 134
    • 135
    • 136
    • 137
    • 138
    • 139
    • 140
    • 141
    • 142
    • 143
    • 144
    • 145
    • 146
    • 147
    • 148
    • 149
    • 150
    • 151
    • 152
    • 153
    • 154
    • 155
    • 156
    • 157
    • 158
    • 159
    • 160
    • 161
    • 162
    • 163
    • 164
    • 165
    • 166
    • 167
    • 168
    • 169
    • 170
    • 171
    • 172
    • 173
    • 174
    • 175
    • 176
    • 177
    • 178
    • 179
    • 180
    • 181
    • 182
    • 183
    • 184
    • 185
    • 186
    • 187
    • 188
    • 189
    • 190
    • 191
    • 192
    • 193
    • 194
    • 195
    • 196
    • 197
    • 198
    • 199
    • 200
    • 201
    • 202
    • 203
    • 204
    • 205
    • 206
    • 207
    • 208
    • 209
    • 210
    • 211
    • 212
    • 213
    • 214
    • 215
    • 216
    • 217
    • 218
    • 219
    • 220
    • 221
    • 222
    • 223
    • 224
    • 225
    • 226
    • 227
    • 228
    • 229
    • 230
    • 231
    • 232
    • 233
    • 234
    • 235
    • 236
    • 237
    • 238
    • 239
    • 240
    • 241
    • 242
    • 243
    • 244
    • 245
    • 246
    • 247
    • 248
    • 249
    • 250
    • 251
    • 252
    • 253
    • 254
    • 255
    • 256
    • 257
    • 258
    • 259
    • 260
    • 261
    • 262
    • 263
    • 264
    • 265
    • 266
    • 267
    • 268
    • 269
    • 270
    • 271
    • 272
    • 273
    • 274
    • 275
    • 276
    • 277
    • 278
    • 279
    • 280
    • 281
    • 282
    • 283
    • 284
    • 285
    • 286
    • 287
    • 288
    • 289
    • 290
    • 291
    • 292
    • 293
    • 294
    • 295
    • 296
    • 297
    • 298
    • 299
    • 300
    • 301
    • 302
    • 303
    • 304
    • 305
    • 306
    • 307
    • 308
    • 309
    • 310
    • 311
    • 312
    • 313
    • 314
    • 315
    • 316
    • 317
    • 318
    • 319
    • 320
    • 321
    • 322
    • 323
    • 324
    • 325
    • 326
    • 327
    • 328
    • 329
    • 330
    • 331
    • 332
    • 333
    • 334
    • 335
    • 336
    • 337
    • 338
    • 339
    • 340
    • 341
    • 342
    • 343
    • 344
    • 345
    • 346
    • 347
    • 348
    • 349
    • 350
    • 351
    • 352
    • 353
    • 354
    • 355
    • 356
    • 357
    • 358
    • 359
    • 360
    • 361
    • 362
    • 363
    • 364
    • 365
    • 366
    • 367
    • 368
    • 369
    • 370
    • 371
    • 372
    • 373
    • 374
    • 375
    • 376
    • 377
    • 378
    • 379
    • 380
    • 381
    • 382
    • 383
    • 384
    • 385
    • 386
    • 387
    • 388
    • 389
    • 390
    • 391
    • 392
    • 393
    • 394
    • 395
    • 396
    • 397
    • 398
    • 399
    • 400
    • 401
    • 402
    • 403
    • 404
    • 405
    • 406
    • 407
    • 408

    五、测试程序

    1.运行程序,登录系统

    在这里插入图片描述

    2.添加学生信息

    • 将以下五个学生信息添加进去

    202201 楚梦瑶 软件1班 软件技术 15981324667
    202202 林海 大数据2班 大数据技术与应用 15372783998
    202203 王明 人智1班 人工智能 18881588702
    202204 顾瑶 计应4班 计算机技术应用 15891457734
    202205 杨曦蕊 学前3班 学前教育 13891342266

    • 可以根据自己的喜好添加更多或者更少
      在这里插入图片描述
    • 注意:这里每输入一条数据都要保存一次,不然最后才保存的话文件里全是一排

    3.保存学生信息到文件

    (1)保存学生信息

    在这里插入图片描述

    (2)查看文件

    • 运行程序后,会在根目录里自动生成我们命名好的文件
      在这里插入图片描述
    • 点开文件,查看信息
      在这里插入图片描述

    4.查询学生信息

    (1)按学生学号查询

    在这里插入图片描述

    (2)按学生姓名查询

    在这里插入图片描述

    (3)同时按学号和姓名查询

    在这里插入图片描述

    • 注意:这里在查询之前都要读取文件,不然查不到

    5.修改学生信息

    (1)将王明改成张心怡

    在这里插入图片描述

    • 修改完之后要保存,只有保存,文件里的学生信息也才跟着改变
    • 再来看看文件里的学生信息
      在这里插入图片描述

    (2)将楚梦瑶的班级改为学前五班

    在这里插入图片描述

    • 查看文件的学生信息
      在这里插入图片描述

    6.删除学生信息(删除学号为202203)

    在这里插入图片描述

    • 查看文件里的学生信息
      在这里插入图片描述
    • 已经被删除了

    7.读取学生信息

    在这里插入图片描述

    8.退出程序

    在这里插入图片描述

    六.实训总结

    1.实训项目存在不足的地方

    项目内容也就是学生的信息有点少,还可以添加学生其他的信息,如性别、年龄、家庭住址、兴趣爱好等。还有就是没有采用数据库。

    2.实训项目的有点

    内容紧凑,条理清晰,图文并茂,使人一看就明白

    3.实训个人感悟

    1、 经过一学期的学习和实训,明白自己还有许多不足的地方,很多地方需要改进,很多地方需要向同学学习,相比起上学期这学期的干劲足多了,但是还不够,还需要多多努力,正所谓奋斗是创造幸福的源泉
    2、未来这个词听上去就是美好,可是你别忘了呀,每一个我们所期待的美好未来,都必须有一个努力的现在。

  • 相关阅读:
    金蝶云星空表单插件获取控件值
    业务出海,灵感乍现前要先「把手弄脏」
    2023年软考什么时候报名,报名有什么条件?
    手机网络卡顿,试试飞行模式
    Sunlogin RCE漏洞分析和使用
    读书笔记——C++高性能编程(六)
    MySQL配置环境变量和启动登录
    Perfetto分析进阶
    Java错题复盘
    大数据-玩转数据-Flume
  • 原文地址:https://blog.csdn.net/qq_62491692/article/details/125234047