【超级详细清晰】Java学生管理系统制作

文章详细介绍了如何使用Java开发一个学生管理系统,包括需求分析、功能模块(如添加、删除、修改、查询学生信息)的设计,以及具体的代码实现。通过一个控制台应用,实现了学生信息的管理,并讨论了在开发过程中遇到的两个bug及其修正方法。
摘要由CSDN通过智能技术生成

系列文章目录

【超级详细清晰】Java学生管理系统制作



前言

学生管理系统是一种应用程序,它可以帮助学校或教育机构管理学生信息及相关数据。该系统可以实现学生信息的添加、查询、修改、删除等功能,同时还可包含其他模块,如课程信息、教师信息、成绩管理等。通过Java技术开发学生管理系统可以有效提高学校、教师及学生的管理效率,减轻繁琐的手动管理工作,让教育工作更加高效便捷。


一、需求

采取控制台的方式去书写学生管理系统

二、内容分析

初始菜单

"-------------欢迎来到学生管理系统----------------"
"1:添加学生"
"2:删除学生"
"3:修改学生"
"4:查询学生"
"5:退出学生"
"请输入您的选择:"

学生类

​ 属性:id、姓名、年龄、家庭住址

添加功能

​ 键盘录入每一个学生信息并添加,需要满足以下要求:

  • id唯一

删除功能

​ 键盘录入要删除的学生id,需要满足以下要求:

  • id存在删除
  • id不存在,需要提示不存在,并回到初始菜单

修改功能

​ 键盘录入要修改的学生id,需要满足以下要求

  • id存在,继续录入其他信息
  • id不存在,需要提示不存在,并回到初始菜单

查询功能

​ 打印所有的学生信息,需要满足以下要求

  • 如果没有学生信息,提示:当前无学生信息,请添加后再查询
  • 如果有学生信息,需要按照以下格式输出。(不用过于纠结对齐的问题)
id			姓名		年龄		家庭住址
001        张三		23		 北京
002	       李四		24		 广东
003        王五		25		 上海
004	       赵六	 	26		 深圳

分析的结构图:
在这里插入图片描述

三、实现步骤

  • 首先先要创建一个学生类,写入关于学生的一些信息
  • 创建一个测试类,在测试类里面实现功能
  • 定义不同的方法,将学生信息进行添加、查询、删除、修改、退出

四、代码实现

学生类代码:

package student;

public class Student {
    
    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;
    }
}

测试类代码:

package cn;

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

public class Test8 {
    public static void main(String[] args) {
//        创建集合将学生类添加到集合中
        ArrayList<Student> list = new ArrayList<>();
//        界面初始化  选择可能不是选一次 有可能想操作多次  例如添加学生想添加多个 所以要加一个while循环
        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:退出!");
//        键盘录入选择
            Scanner sc = new Scanner(System.in);
            System.out.println("请输入你的选择:");
            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;   //此时的break是默认跳出单层循环  所以要加一个指定
                }
                default:
                    System.out.println("没有这个选项");
            }
        }
    }

    //    定义方法用于添加学生
    private static void addStudent(ArrayList<Student> list) {
//        创建学生对象用于添加
        Student s = new Student();
//        键盘录入进行添加学生
        Scanner sc = new Scanner(System.in);


//        判断id的唯一性
        while (true) {
            System.out.println("请输入学生id:");
            String id = sc.next();
            boolean flag = contains(list, id);
            if (flag) {
                System.out.println("该id已存在,不需要进行添加,请重新录入!");
            } else {
                s.setId(id);
                break;
            }
        }

        //s.setId(id);  //为学生对象的id赋值

        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("学生添加完毕!");


    }

    //    定义方法用于删除学生
    private 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不存在,删除失败");
        }
    }

    //    定义方法用于修改学生
    private 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 + "不存在,修改失败!");
            return;
        } else {
//            获取要修改的学生对象
            Student stu = list.get(index);

            Scanner scanner = new Scanner(System.in);
            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("修改学生信息成功!");


        }


    }

    //    定义方法用于查询学生
    private static void queryStudent(ArrayList<Student> list) {
        if (list.size() == 0) {
            System.out.println("当前无学生信息,请添加后再查询");
            return; //结束方法
        } else {
            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" + stu.getName() + "\t" + stu.getAge() + "\t" + stu.getAddress());
            }
        }

    }

    //   定义方法: 判断id在集合中是否存在
    private static boolean contains(ArrayList<Student> list, String id) {
/*        for (int i = 0; i < list.size(); i++) {
            boolean b = list.get(i).getId().equals(id);
            if (b) {
                return true;
            }
        }
        return false;*/
        return getIndex(list, id) >= 0;
    }

    // 定义方法 通过id获取索引
    private static int getIndex(ArrayList<Student> list, String id) {
        for (int i = 0; i < list.size(); i++) {
            boolean b2 = list.get(i).getId().equals(id);
            if (b2) {
                return i;
            }
        }
        return -1;
    }
}

五、实现结果

添加学生

在这里插入图片描述

查询学生

在这里插入图片描述

删除学生

在这里插入图片描述

修改学生

在这里插入图片描述

最终查询:
在这里插入图片描述

退出学生

在这里插入图片描述


六、过程小bug

第一个bug

在使用switch语句中用了":" 而没有用 " -> "导致输入选择时,执行完该选项后程序会直接向下一直执行,并不会跳转结束
如下图:
在这里插入图片描述
在这里插入图片描述
改正过来将":" 替换为" -> "就不会出现这种情况了

出现该情况的原因分析:
":" 是Java中switch语句中的分隔符,它指示了一个case标签和这个标签后面的语句块之间的分隔符。当程序执行到一个匹配的case标签时,会直接跳转到对应的语句块,并从此处开始执行。因此,使用":"分隔符在switch语句中会让程序立即跳转到对应的语句块。
而Lambda表达式中使用的" -> "符号并不是一个分隔符,它只是表示参数和Lambda表达式实现体之间的关系。Lambda表达式不能像switch语句一样控制程序流程,它只能用于表示一个可执行的代码块,并且需要将这个代码块赋值给一个函数式接口变量或用作方法的参数。调用这个函数式接口变量或方法时,才会执行Lambda表达式中的代码块。因此,在Lambda表达式中使用" -> "符号不会像":"一样改变程序流程的控制。

第二个bug

在这里插入图片描述
出错原因:没有添加return结束方法

改正:
在这里插入图片描述

总结

好啦,今天的文章到这里就结束啦,本文章就是对学生管理系统进行了一个简单的跳转制作,感兴趣的小伙伴可以动手练习一下哦!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

@¥文竹¥

你的鼓励是我最大的动力!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值