一个简单的学生管理系统的实现代码

简介: 一个简单的学生管理系统的实现代码

2.1学生管理系统实现步骤

  • 案例需求
    针对目前我们的所学内容,完成一个综合案例:学生管理系统。该系统主要功能如下:
    添加学生:通过键盘录入学生信息,添加到集合中
    删除学生:通过键盘录入要删除学生的学号,将该学生对象从集合中删除
    修改学生:通过键盘录入要修改学生的学号,将该学生对象其他信息进行修改
    查看学生:将集合中的学生对象信息进行展示
    退出系统:结束程序
  • 实现步骤
  1. 定义学生类,包含以下成员变量
    private String sid // 学生id
    private String name // 学生姓名
    private String age // 学生年龄
    private String address // 学生所在地
  2. 学生管理系统主界面的搭建步骤
    2.1 用输出语句完成主界面的编写                                                                           2.2 用Scanner实现键盘输入                                                                                     2.3 用switch语句完成选择的功能                                                                               2.4 用循环完成功能结束后再次回到主界面
  3. 学生管理系统的添加学生功能实现步骤
    3.1 定义一个方法,接收ArrayList<Student>集合                                                        3.2 方法内完成添加学生的功能                                                                                          ①键盘录入学生信息                                                                                                    ②根据录入的信息创建学生对象                                                                                  ③将学生对象添加到集合中                                                                                        ④提示添加成功信息                                                                                             3.3 在添加学生的选项里调用添加学生的方法
  4. 学生管理系统的查看学生功能实现步骤
    4.1 定义一个方法,接收ArrayList<Student>集合                                                      4.2 方法内遍历集合,将学生信息进行输出                                                                4.3 在查看所有学生选项里调用查看学生方法
  5. 学生管理系统的删除学生功能实现步骤
    5.1 定义一个方法,接收ArrayList<Student>集合                                                    5.2 方法中接收要删除学生的学号                                                                                5.3 遍历集合,获取每个学生对象                                                                           5.4 使用学生对象的学号和录入的要删除的学号进行比较,如果相同,则将当前学生   对象从集合中删除                                                                                                      5.5 在删除学生选项里调用删除学生的方法
  6. 学生管理系统的修改学生功能实现步骤
    6.1 定义一个方法,接收ArrayList<Student>集合                                                    6.2 方法中接收要修改学生的学号                                                                                6.3 通过键盘录入学生对象所需的信息,并创建对象                                              6.4 遍历集合,获取每一个学生对象。并和录入的修改学生学号进行比较.如果相同,则使用新学生对象替换当前学生对象                                                                  6.5 在修改学生选项里调用修改学生的方法
  7. 退出系统
    使用System.exit(0);退出JVM

2.2学生类的定义

public class Student {
    private String id;
    private String name;
    private int age;
    private String address;
    //下面是空参,有参,get和set方法
}

2.3测试类的定义

public class StudentSystem {
    public static void main(String[] args) {
        ArrayList<Student> list = new ArrayList<>();
        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) {
                case "1" -> addStudent(list);
                case "2" -> deleteStudent(list);
                case "3" -> updateStudent(list);
                case "4" -> queryStudent(list);
                case "5" -> {
                    System.out.println("退出");
                    //break loop;
                    System.exit(0);//停止虚拟机运行
                }
                default -> System.out.println("没有这个选项");
            }
        }
    }
    //添加学生
    public static void addStudent(ArrayList<Student> list) {
        //利用空参构造先创建学生对象
        Student s = new Student();
        Scanner sc = new Scanner(System.in);
        String id = null;
        while (true) {
            System.out.println("请输入学生的id");
            id = sc.next();
            boolean flag = contains(list, id);
            if(flag){
                //表示id已经存在,需要重新录入
                System.out.println("id已经存在,请重新录入");
            }else{
                //表示id不存在,表示可以使用
                s.setId(id);
                break;
            }
        }
        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("学生信息添加成功");
    }
    //删除学生
    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进行判断
        //如果-1,就表示不存在,结束方法,回到初始菜单
        if(index >= 0){
            //如果大于等于0的,表示存在,直接删除
            list.remove(index);
            System.out.println("id为:" + id + "的学生删除成功");
        }else{
            System.out.println("id不存在,删除失败");
        }
    }
    //修改学生
    public 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" + id + "不存在,请重新输入");
            return;
        }
        //当代码执行到这里,表示什么?表示当前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("学生信息修改成功");
    }
    //查询学生
    public static void queryStudent(ArrayList<Student> list) {
        if (list.size() == 0) {
            System.out.println("当前无学生信息,请添加后再查询");
            //结束方法
            return;
        }
        //打印表头信息
        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在集合中是否存在
    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();
            if(sid.equals(id)){
                //存在,true
                return true;
            }
        }
        // 不存在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;
            }
        }
        //当循环结束之后还没有找到,就表示不存在,返回-1.
        return -1;
    }
}
相关文章
|
机器学习/深度学习 自然语言处理 TensorFlow
Next Sentence Prediction,NSP
Next Sentence Prediction(NSP) 是一种用于自然语言处理 (NLP) 的预测技术。
628 2
|
缓存 NoSQL 安全
【Redis系列笔记】缓存三剑客
缓存穿透是指请求一个不存在的数据,缓存层和数据库层都没有这个数据,这种请求会穿透缓存直接到数据库进行查询。它通常发生在一些恶意用户可能故意发起不存在的请求,试图让系统陷入这种情况,以耗尽数据库连接资源或者造成性能问题。 缓存击穿发生在访问热点数据,大量请求访问同一个热点数据,当热点数据失效后同时去请求数据库,瞬间耗尽数据库资源,导致数据库无法使用。 缓存雪崩是缓存中大量key失效后当高并发到来时导致大量请求到数据库,瞬间耗尽数据库资源,导致数据库无法使用。
365 2
|
人工智能 JavaScript 前端开发
【Vue2从入门到精通】详解Vue数据双向绑定原理及手动实现双向绑定
Vue是采用数据劫持结合发布者-订阅者模式的方式,通过使用ES5中的Object.defineProperty()方法来劫持各个属性的setter,getter,在数据变动时发布消息给订阅者,触发相应的监听回调来渲染视图。
731 0
【Vue2从入门到精通】详解Vue数据双向绑定原理及手动实现双向绑定
|
监控 NoSQL 数据库
云数据库MongoDB监控指标解读与关注
为方便开发者的使用,云数据库MongoDB提供了许多查看其运行状态指标的命令。如何分析这些繁多的数据指标?又如何使用这些数据指标解决我们业务中出现的问题呢?本文将带大家了解查看这些监控指标的命令并为大家逐一解读其中一些重要的指标。
11199 0
|
存储 SQL 缓存
聊聊性能,如何合理设置索引?
【6月更文挑战第1天】本文介绍了数据库索引过多的索引会使更新表的速度变慢,增大数据库体积和维护成本。索引过多的风险包括降低增删改操作性能、增大数据库体积、增加存储压力和维护开销,以及加大SQL Server优化开销。建议的核心表索引不超过7个,普通表不超过5个,小型表不超过3个。针对索引过多的问题,文章提出需要根据实际需求进行分析并提供解决方案。
514 4
聊聊性能,如何合理设置索引?
|
负载均衡 网络协议 Linux
|
自然语言处理 测试技术 API
探索通义语音团队的创新之作 —— FunAudioLLM模型评测
随着人工智能技术的飞速发展,语音识别和语音合成技术在各个领域得到了广泛应用。阿里云推出的“通义语音大模型FunAudioLLM”作为最新的语音处理技术,备受业界关注。本次评测将深入探讨通义语音大模型的功能、性能及其在实际应用中的表现。
|
存储 算法 NoSQL
(三)漫谈分布式之集群篇:探寻N个9高可用与PB级数据存储的实现原理!
本文来详细聊聊集群的各方面知识,为诸位量身打造出结构化的集群知识体系。
437 0
|
Java 测试技术 API
深入理解单元测试:JUnit框架在Java中的应用
【8月更文挑战第3天】本文将引导读者通过JUnit框架的镜头,探索单元测试的奥秘。我们将一起揭开单元测试的神秘面纱,了解其在软件开发中的关键作用,并具体学习如何在Java项目中应用JUnit进行有效的单元测试。文章不仅会涉及理论概念,还将通过具体的代码示例,展示如何编写和运行单元测试,以确保软件质量。让我们开始吧,一起踏上这段提升代码质量和开发效率的旅程。
133 0
|
算法 PyTorch 算法框架/工具
PyTorch 2.2 中文官方教程(七)(4)
PyTorch 2.2 中文官方教程(七)
253 0
PyTorch 2.2 中文官方教程(七)(4)