ArrayList学生管理系统

文章目录

    • 1.ArrayList
      • 集合和数组的优势对比:
      • 1.1 ArrayList类概述
      • 1.2 ArrayList类常用方法
        • 1.2.1 构造方法
        • 1.2.2 成员方法
        • 1.2.3 示例代码
      • 1.3 ArrayList存储字符串并遍历
        • 1.3.1 案例需求
        • 1.3.2 代码实现
      • 1.4 ArrayList存储学生对象并遍历
        • 1.4.1 案例需求
        • 1.4.2 代码实现
      • 1.5 查找用户的索引
      • 1.6 判断用户的是否存在
    • 2.学生管理系统
      • 2.1学生管理系统实现步骤
      • 2.2学生类的定义
      • 2.3测试类的定义

1.ArrayList

集合和数组的优势对比:

  1. 长度可变
  2. 添加数据的时候不需要考虑索引,默认将数据添加到末尾

1.1 ArrayList类概述

  • 什么是集合

    ​ 提供一种存储空间可变的存储模型,存储的数据容量可以发生改变

  • ArrayList集合的特点

    ​ 长度可以变化,只能存储引用数据类型。

  • 泛型的使用

    ​ 用于约束集合中存储元素的数据类型

1.2 ArrayList类常用方法

1.2.1 构造方法
方法名说明
public ArrayList()创建一个空的集合对象
1.2.2 成员方法
方法名说明
public boolean add(要添加的元素)将指定的元素追加到此集合的末尾
public boolean remove(要删除的元素)删除指定元素,返回值表示是否删除成功
public E remove(int index)删除指定索引处的元素,返回被删除的元素
public E set(int index,E element)修改指定索引处的元素,返回被修改的元素
public E get(int index)返回指定索引处的元素
public int size()返回集合中的元素的个数
1.2.3 示例代码
public class ArrayListDemo02 {
    public static void main(String[] args) {
        //创建集合
        ArrayList<String> array = new ArrayList<String>();

        //添加元素
        array.add("hello");
        array.add("world");
        array.add("java");

        //public boolean remove(Object o):删除指定的元素,返回删除是否成功
        //        System.out.println(array.remove("world"));
        //        System.out.println(array.remove("javaee"));

        //public E remove(int index):删除指定索引处的元素,返回被删除的元素
        //        System.out.println(array.remove(1));

        //IndexOutOfBoundsException
        //        System.out.println(array.remove(3));

        //public E set(int index,E element):修改指定索引处的元素,返回被修改的元素
        //        System.out.println(array.set(1,"javaee"));

        //IndexOutOfBoundsException
        //        System.out.println(array.set(3,"javaee"));

        //public E get(int index):返回指定索引处的元素
        //        System.out.println(array.get(0));
        //        System.out.println(array.get(1));
        //        System.out.println(array.get(2));
        //System.out.println(array.get(3)); //?????? 自己测试

        //public int size():返回集合中的元素的个数
        System.out.println(array.size());

        //输出集合
        System.out.println("array:" + array);
    }
}

1.3 ArrayList存储字符串并遍历

1.3.1 案例需求

​ 创建一个存储字符串的集合,存储3个字符串元素,使用程序实现在控制台遍历该集合

1.3.2 代码实现
public class ArrayListDemo3 {
    public static void main(String[] args) {
        //1.创建集合对象
        ArrayList<String> list = new ArrayList<>();

        //2.添加元素
        list.add("aaa");
        list.add("bbb");
        list.add("ccc");
        list.add("ddd");

        //3.遍历
        //快捷键: list.fori 正向遍历
        //list.forr 倒着遍历
        System.out.print("[");
        for (int i = 0; i < list.size(); i++) {
            //i 依次表示集合里面的每一个索引

            if(i == list.size() - 1){
                //最大索引
                System.out.print(list.get(i));
            }else{
                //非最大索引
                System.out.print(list.get(i) + ", ");
            }
        }
        System.out.print("]");
    }
}

1.4 ArrayList存储学生对象并遍历

1.4.1 案例需求

​ 创建一个存储学生对象的集合,存储3个学生对象,使用程序实现在控制台遍历该集合

1.4.2 代码实现
public class ArrayListDemo4 {
    public static void main(String[] args) {
        //1.创建集合对象,用来存储数据
        ArrayList<Student> list = new ArrayList<>();

        //2.创建学生对象
        Student s1 = new Student("zhangsan",16);
        Student s2 = new Student("lisi",15);
        Student s3 = new Student("wangwu",18);

        //3.把学生对象添加到集合中
        list.add(s1);
        list.add(s2);
        list.add(s3);

        //4.遍历
        for (int i = 0; i < list.size(); i++) {
            //i 依次表示集合中的每一个索引
            Student stu = list.get(i);
            System.out.println(stu.getName() + ", " + stu.getAge());
        }



    }
}

1.5 查找用户的索引

需求:

1,main方法中定义一个集合,存入三个用户对象。

用户属性为:id,username,password

2,要求:定义一个方法,根据id查找对应的学生信息。

如果存在,返回索引

如果不存在,返回-1

代码示例:

public class ArrayListDemo6 {
    public static void main(String[] args) {
        /*需求:
        1,main方法中定义一个集合,存入三个用户对象。
        用户属性为:id,username,password
        2,要求:定义一个方法,根据id查找对应的学生信息。
        如果存在,返回索引
        如果不存在,返回-1*/


        //1.创建集合对象
        ArrayList<User> list = new ArrayList<>();

        //2.创建用户对象
        User u1 = new User("heima001", "zhangsan", "123456");
        User u2 = new User("heima002", "lisi", "1234");
        User u3 = new User("heima003", "wangwu", "1234qwer");

        //3.把用户对象添加到集合当中
        list.add(u1);
        list.add(u2);
        list.add(u3);

        //4.调用方法,通过id获取对应的索引
        int index = getIndex(list, "heima001");

        System.out.println(index);

    }


    //1.我要干嘛?  根据id查找对应的学生信息
    //2.我干这件事情需要什么才能完成?   集合 id
    //3.方法的调用处是否需要继续使用方法的结果?
    //要用必须返回,不要用可以返回也可以不返回
    //明确说明需要有返回值 int
    public static int getIndex(ArrayList<User> list, String id) {
        //遍历集合得到每一个元素
        for (int i = 0; i < list.size(); i++) {
            User u = list.get(i);
            String uid = u.getId();
            if(uid.equals(id)){
                return i;
            }
        }
        //因为只有当集合里面所有的元素都比较完了,才能断定id是不存在的。
        return -1;
    }
}

1.6 判断用户的是否存在

public class ArrayListDemo5 {
    public static void main(String[] args) {
       /* 需求:
        1,main方法中定义一个集合,存入三个用户对象。
        用户属性为:id,username,password
        2,要求:定义一个方法,根据id查找对应的学生信息。
        如果存在,返回true
        如果不存在,返回false*/

        //1.定义集合
        ArrayList<User> list = new ArrayList<>();

        //2.创建对象
        User u1 = new User("heima001","zhangsan","123456");
        User u2 = new User("heima002","lisi","12345678");
        User u3 = new User("heima003","wangwu","1234qwer");

        //3.把用户对象添加到集合当中
        list.add(u1);
        list.add(u2);
        list.add(u3);

        //4.调用方法,查询id是否存在
        boolean result = contains(list, "heima001");
        System.out.println(result);

    }

    //定义在测试类中的方法需要加static
    //1.我要干嘛? 我要根据id查询学生是否存在
    //2.我干这件事情,需要什么才能完成? 集合 id
    //3.方法的调用处是否需要使用方法的结果?
    //如果要用,必须返回,如果不用,可以返回也可以不返回
    //但是本题明确说明需要返回
    public static boolean contains(ArrayList<User> list, String id){
        //循环遍历集合,得到集合里面的每一个元素
        //再进行判断

        for (int i = 0; i < list.size(); i++) {
            //i 索引  list.get(i); 元素
            User u = list.get(i);
            //判断id是否存在,我是拿着谁跟谁比较
            //需要把用户对象里面的id拿出来再进行比较。
            String uid = u.getId();
            if(id.equals(uid)){
                return true;//return 关键字:作用就是结束方法。
            }
        }
        //只有当集合里面所有的元素全部比较完毕才能认为是不存在的。
        return false;
    }

}

2.学生管理系统

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集合
      3.2 方法内完成添加学生的功能
      ​ ①键盘录入学生信息
      ​ ②根据录入的信息创建学生对象
      ​ ③将学生对象添加到集合中
      ​ ④提示添加成功信息
      3.3 在添加学生的选项里调用添加学生的方法

    4. 学生管理系统的查看学生功能实现步骤

      4.1 定义一个方法,接收ArrayList集合
      4.2 方法内遍历集合,将学生信息进行输出
      4.3 在查看所有学生选项里调用查看学生方法

    5. 学生管理系统的删除学生功能实现步骤

      5.1 定义一个方法,接收ArrayList集合
      5.2 方法中接收要删除学生的学号
      5.3 遍历集合,获取每个学生对象
      5.4 使用学生对象的学号和录入的要删除的学号进行比较,如果相同,则将当前学生对象从集合中删除
      5.5 在删除学生选项里调用删除学生的方法

    6. 学生管理系统的修改学生功能实现步骤

      6.1 定义一个方法,接收ArrayList集合
      6.2 方法中接收要修改学生的学号
      6.3 通过键盘录入学生对象所需的信息,并创建对象
      6.4 遍历集合,获取每一个学生对象。并和录入的修改学生学号进行比较.如果相同,则使用新学生对象替换当前学生对象
      6.5 在修改学生选项里调用修改学生的方法

    7. 退出系统

      使用System.exit(0);退出JVM

2.2学生类的定义

package com.itheima.studentsystem;

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

**加粗样式**

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/292008.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

福利来袭,.NET Core开发5大案例,30w字PDF文档大放送!!!

千里之行&#xff0c;始于足下&#xff0c;若想提高软件编程能力&#xff0c;最最重要的是实践&#xff0c;所谓纸上得来终觉浅&#xff0c;绝知此事要躬行。根据相关【艾宾浩斯遗忘曲线】研究表明&#xff0c;如果不动手实践&#xff0c;记住的东西会很快忘记。 为了便于大家查…

大数据计算基础真题回忆

转载学长20 21的真题 转载链接 注&#xff1a;每年的课件可能会有更改&#xff0c;内容不一样&#xff0c;所以读者复习的时候以所在年份的课件为准 2020 ​ 2021 笔者2023秋 2023 都是大题&#xff0c;没有选择题。 改进的近似算法中&#xff0c;结合具体的例子说明&am…

算法训练营Day36(贪心-重叠区间)

都算是 重叠区间 问题&#xff0c;大家可以好好感受一下。 都属于那种看起来好复杂&#xff0c;但一看贪心解法&#xff0c;惊呼&#xff1a;这么巧妙&#xff01; 还是属于那种&#xff0c;做过了也就会了&#xff0c;没做过就很难想出来。 不过大家把如下三题做了之后&#…

mac远程ssh免密登录

服务器部署经常会登录到远程服务&#xff0c;为方便操作&#xff0c;提高效率对运维人员来说设置免密登录还是很有必要的。其实也是很简单&#xff0c;安以下操作步骤即可。 1、进入到&#xff5e;/.ssh目录下&#xff0c;确认已经生成有公钥与私钥。如果没有请执行发下命令 …

jdk动态代理与cglib代理区别1

动态代理有jdk动态代理及cglib代理&#xff0c;下面描述jdk动态代理 jdk动态代理 看了 上云 老师的视频&#xff0c;得出此理解 pom文件 <dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-st…

(Linux)虚拟机配置固定IP

Linux操作系统的IP地址是通过DHCP服务获取的&#xff0c;也就是动态获取IP地址&#xff0c;每次重启设备后都会获取一次&#xff0c;会导致IP地址频繁变更&#xff0c;为了不频繁更新映射关系&#xff0c;我们需要IP地址固定下来。 1.在VM中配置IP地址网关和网段 打开虚拟网络…

k_d树, KNN算法学习笔记_1 距离和范数

k_d树, KNN算法学习笔记_1 距离和范数 二维树中最近邻搜索的示例。这里&#xff0c;树已经构建好了&#xff0c;每个节点对应一个矩形&#xff0c;每个矩形被分割成两个相等的子矩形&#xff0c;叶子对应于包含单个点的矩形 From Wikipedia 1&#xff0e; k k k近邻法是基本且简…

【金猿CIO展】现代咨询CIO崔恩博:数字化转型,CIO不仅要懂技术和业务,更要“懂人”...

‍ 崔恩博 本文由现代咨询CIO崔恩博撰写并投递参与“数据猿年度金猿策划活动——2023大数据产业年度优秀CIO榜单及奖项”评选。 大数据产业创新服务媒体 ——聚焦数据 改变商业 最近几年&#xff0c;大数据行业的发展备受关注&#xff0c;尤其是2019年以后&#xff0c;随着企业…

Vue3地图选点组件

Vue3地图选点组件 <template><div style"width: 100%; height: 500px"><div class"search-container"><el-autocompletev-model"suggestionKeyWord"class"search-container__input"clearable:fetch-suggestion…

net8 golang python性能比较

net8正式版出来两个月&#xff0c;现在性能到底如何呢&#xff0c;做个简单的例子和其他语言比较一下&#xff0c;测试内容是查找1000000以内的质数&#xff0c;代码不多&#xff0c;但包含了循环计算和Math库函数调用&#xff0c;直观的看一下语言之间差距是多少&#xff0c;心…

技术学习|CDA level I 多维数据透视分析

对基于多源表的结构数据进行商业智能分析&#xff0c;可以帮助决策者从多个不同业务角度对业务行为结果进行观测&#xff0c;进而帮助决策者全面、精确地定位业务问题&#xff0c;实现商业洞察的相关内容。通过商业智能分析产出的分析成果被统称为商业智能报表&#xff0c;简称…

WinCC中的画面模板应用实例及其组态实现方法

一、 画面模板的意义引文&#xff1a;博途工控人平时在哪里技术交流博途工控人社群 在实际工程应用和WinCC画面组态中&#xff0c;经常会遇到一些功能类似&#xff0c;画面布局基本没差别的情况。比如&#xff0c;电机的启停控制和动态数据监控画面&#xff0c;如图1所示。一个…

智邦国际ERP系统 SQL注入漏洞复现

0x01 产品简介 北京智邦国际软件技术有限公司的ERP系统是一种集成化的企业资源计划&#xff08;Enterprise Resource Planning&#xff0c;简称ERP&#xff09;解决方案&#xff0c;旨在帮助企业实现高效的运营管理和资源优化。 0x02 漏洞概述 智邦国际ERP系统 GetPersonalS…

【Java】异常

1. 异常的产生和分类 在Java等面向对象的编程语言中&#xff0c;异常本身是一个类&#xff0c;产生异常就是创建异常对象并抛出了一个异常对象。Java处理异常的方式是中断处理。 异常机制其实是帮助我们找到程序中的问题&#xff0c;异常的根类是java.lang.Throwable&#xf…

es索引数据过滤查询

1.我们往kibana插入数据,来进行查询 POST /t1/_doc/ {"name":"cat","age":"18","address":"BJ","job":"dev" } POST /t1/_doc/ {"name":"dog","age":"1…

为什么说 $mash 是 Solana 上最正统的铭文通证?

早在 2023 年的 11 月&#xff0c;包括 Solana、Avalanche、Polygon、Arbitrum、zkSync 等生态正在承接比特币铭文生态外溢的价值。

C++_string类

目录 一、string的模拟实现 1、初始化字符串 2、拷贝构造 3、赋值重载 4、迭代器 5、比较字符串 6、尾插字符、字符串 7、resize 8、中间插入数据、删除数据 8.1 插入数据 8.2 删除数据 9、查找数据 10、打印对象&#xff08;流插入、流提取&#xff09; 结语&a…

实时交通标志检测和分类(代码)

交通标志检测和分类技术是一种基于计算机视觉和深度学习的先进技术&#xff0c;能够识别道路上的各种交通标志&#xff0c;并对其进行分类和识别。这项技术在智能交通系统、自动驾驶汽车和交通安全管理领域具有重要的应用前景。下面我将结合实时交通标志检测和分类的重要性、技…

天洑智能设计全系列产品完成银河麒麟操作系统适配!

近日&#xff0c;天洑软件智能设计全系列产品&#xff08;智能热流体仿真软件AICFD、智能结构仿真软件AIFEM、智能优化软件AIPOD、智能数据建模软件DTEmpower&#xff09;已成功完成银河麒麟桌面操作系统V10的适配工作。双方产品完全兼容&#xff0c;运行稳定、安全可靠、性能优…

若依项目(ruoy-vue)多模块依赖情况简要分析

主pom文件关键点分析 properties标签声明变量信息&#xff1a;版本号、编码类型、java版本spring-boot依赖形式&#xff1a;spring-boot-dependencies、pom、importdependencies中添加本项目内部模块&#xff0c;同时在modules中声明模块packaging打包选择pom设置打包maven-co…