首页 > 编程语言 >day11 - 集合+学生管理系统(黑马程序员)

day11 - 集合+学生管理系统(黑马程序员)

时间:2024-06-21 21:58:40浏览次数:14  
标签:管理系统 ArrayList list System 学生 程序员 day11 id out

目录

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 ArrayList存储学生对象并遍历

1.5.1 案例需求

1.5.2 代码实现

1.6 查找用户的索引

1.7 返回多个数据

2.学生管理系统

2.1学生管理系统实现步骤

2.2学生类的定义

2.3测试类的定义

3. 学生管理系统升级版

需求:

分析:

登录界面:

用户类: 

注册功能:

登录功能:

忘记密码:

验证码规则:


1.ArrayList

集合和数组的优势对比:

  1. 长度可变

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

1.1 ArrayList类概述

  • 什么是集合

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

  • ArrayList集合的特点

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

       如果想存储引用数据类型,只能使用他们的包装类:

       byte-->Byte               short-->Short               int-->Integer               long-->Long                               float-->Float              double-->Double          char-->Character       boolean-->Boolean

  • 泛型的使用

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

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()返回集合中的元素的个数

泛型:限定集合中存储数据的类型    ArrayList<数据类型>

ArrayList打印对象不是地址值而是集合中存储的数据内容,在展示时会用[ ]把所有的数据进行包裹

1.2.3 示例代码
public class ArrayListDemo02 {
    public static void main(String[] args) {
        //创建集合
        ArrayList<String> array = new ArrayList<String>();
        //JDK7之后,new后面的<>中的数据类型可以不写,但<>一定要写
​
        //添加元素
        array.add("hello");
        array.add("world");
        array.add("java");
​
        //public boolean remove(Object o):删除指定的元素,返回删除是否成功
        System.out.println(array.remove("world"));//true
        System.out.println(array.remove("javaee"));//false
​
        //public E remove(int index):删除指定索引处的元素,返回被删除的元素
        System.out.println(array.remove(1));//java
​
        //IndexOutOfBoundsException
        System.out.println(array.remove(3));
​
        array.add("java");
        //public E set(int index,E element):修改指定索引处的元素,返回被修改的元素
        System.out.println(array.set(1,"javaee"));//java
​
        //IndexOutOfBoundsException
        System.out.println(array.set(3,"javaee"));
​
        //public E get(int index):返回指定索引处的元素
        System.out.println(array.get(0));//hello
        System.out.println(array.get(1));//javaee
        System.out.println(array.get(2));//IndexOutOfBoundsException
       
        //public int size():返回集合中的元素的个数
        System.out.println(array.size());//2
​
        //输出集合
        System.out.println("array:" + array);//array:[hello, javaee]
    }
}

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.创建集合,用来存储数据
        //此时存储的数据类型不能是int,是包装类Integer
        ArrayList<Integer> list = new ArrayList<>();
​
        //2.添加元素
        list.add(1);
        list.add(2);
        list.add(3);
​
         //3.遍历
        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.5 ArrayList存储学生对象并遍历

1.5.1 案例需求

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

1.5.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());
        }
    }
}

创建一个存储学生对象的集合,存储3个学生对象,用循环输入学生对象的信息 

此时创建对象的语句一定要写在循环里面,不然集合中会存储三个一样的对象。

1.6 查找用户的索引

需求:

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

用户属性为:id,username,password

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

如果存在,返回索引

如果不存在,返回-1

代码示例:

public class ArrayListDemo6 {
    public static void main(String[] args) {
    
        //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.7 返回多个数据

需求:
        定义Javabean类:Phone
        Phone属性:品牌,价格。
        main方法中定义一个集合,存入三个手机对象。
        分别为:小米,1000。苹果,8000。锤子 2999。
        定义一个方法,将价格低于3000的手机信息返回。

代码示例:

package com.itheima.test;


import java.util.ArrayList;

public class Test8 {
    public static void main(String[] args) {

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

        //2.创建手机的对象
        Phone p1 = new Phone("小米",1000);
        Phone p2 = new Phone("苹果",8000);
        Phone p3 = new Phone("锤子",2999);

        //3.添加数据
        list.add(p1);
        list.add(p2);
        list.add(p3);

        //4.调用方法
        ArrayList<Phone> phoneInfoList = getPhoneInfo(list);

        //5.遍历集合
        for (int i = 0; i < phoneInfoList.size(); i++) {
            Phone phone = phoneInfoList.get(i);
            System.out.println(phone.getBrand() + ", " + phone.getPrice());
        }

    }


    //1.我要干嘛? 查询手机信息
    //2.我干这件事情,需要什么才能完成?  集合
    //3.我干完了,方法的调用处是否需要继续使用结果?  返回

    //技巧:
    //如果我们要返回多个数据,可以把这些数据先放到一个容器当中,再把容器返回
    //集合 数组
    public static ArrayList<Phone> getPhoneInfo(ArrayList<Phone> list){
        //定义一个集合用于存储价格低于3000的手机对象
        ArrayList<Phone> resultList = new ArrayList<>();
        //遍历集合
        for (int i = 0; i < list.size(); i++) {
            Phone p = list.get(i);
            int price = p.getPrice();
            //如果当前手机的价格低于3000,那么就把手机对象添加到resultList中
            if(price < 3000){
                resultList.add(p);
            }
        }
        //返回resultList
        return resultList;

    }

​只返回一个数据时可以直接用return。

需要返回多个数据时可以先把这些数据放到一个容器中,再把容器返回。

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<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                                                                                      break只能跳出一层循环,如果想使用break跳出外层循环,需要给外层循环指定一个名字(loop:),此时用break loop;就可以跳出指定循环。

 

2.2学生类的定义

package com.itheima.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;
    }
}

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

3. 学生管理系统升级版

需求:

为学生管理系统书写一个登陆、注册、忘记密码的功能。

只有用户登录成功之后,才能进入到学生管理系统中进行增删改查操作。

分析:

登录界面:
System.out.println("欢迎来到学生管理系统");
System.out.println("请选择操作1登录 2注册 3忘记密码");
用户类: 

属性:用户名、密码、身份证号码、手机号码

 

注册功能:

1,用户名需要满足以下要求:

验证要求:

用户名唯一

用户名长度必须在3~15位之间

只能是字母加数字的组合,但是不能是纯数字

2,密码键盘输入两次,两次一致才可以进行注册。

3,身份证号码需要验证。

验证要求:

长度为18位

不能以0为开头

前17位,必须都是数字

最为一位可以是数字,也可以是大写X或小写x

4,手机号验证。

验证要求:

长度为11位

不能以0为开头

必须都是数字

 

登录功能:

1,键盘录入用户名

2,键盘录入密码

3,键盘录入验证码

验证要求:

用户名如果未注册,直接结束方法,并提示:用户名未注册,请先注册

判断验证码是否正确,如不正确,重新输入

再判断用户名和密码是否正确,有3次机会

 

忘记密码:

1,键盘录入用户名,判断当前用户名是否存在,如不存在,直接结束方法,并提示:未注册

2,键盘录入身份证号码和手机号码

3,判断当前用户的身份证号码和手机号码是否一致,

如果一致,则提示输入密码,进行修改。

如果不一致,则提示:账号信息不匹配,修改失败。

 

验证码规则:

长度为5

由4位大写或者小写字母和1位数字组成,同一个字母可重复

数字可以出现在任意位置

比如:

aQa1K

标签:管理系统,ArrayList,list,System,学生,程序员,day11,id,out
From: https://blog.csdn.net/m0_67703159/article/details/139867976

相关文章

  • 2022年大作业参考报告-使用C++语言开发小学生成绩管理系统、中学生成绩管理系统、大学
    背景:目录第一章需求分析   21.1   问题描述   26.1   功能需求   26.2   开发环境   26.3   开发过程   2第二章概要设计   32.1   总体设计   32.2   类的定义   32.3   接口设计   52.4  ......
  • 阿基米德签证小程序(APP)管理系统源码安装步骤说明
      阿基米德所有系统支持Lunix/windows服务器环境,需要PHP7.1~8.3版本支持(推荐使用8.3),可运行于包括Apache和nginx在内的多种WEB服务器和模式(推荐使用nginx),支持Mysql5.0~8.0数据库(4G以上内存推荐使用8.0,不然就5.7),引擎用InnoDB。框架本身没有什么特别模块要求,具体的应用系统......
  • 基于Java+SSM的和谐小区物业管理系统
    传统办法管理双星小区物业信息首先需要花费的时间比较多,其次数据出错率比较高,而且对错误的数据进行更改也比较困难,最后,检索数据费事费力。因此,在计算机上安装双星小区物业管理系统软件来发挥其高效地信息处理的作用,可以规范双星小区物业信息管理流程,让管理工作可以......
  • 大龄程序员的另一个春天是什么?
    前言35+大龄程序员在求职和工作中可能会面临一些特定的挑战和尴尬。比如竞争压力、技术更新、薪资期望、裁员风波等等,有一些朋友能够很好的度过,有些朋友还在愁眉不展。在三十五岁这个年龄段,因为我自己淋过雨,所以我希望能给有需要的朋友撑把伞,分享一下我的个人看法。所以说,......
  • 基于springboot地方废物回收机构管理系统
    收藏关注不迷路||项目不适合可以浏览博主其他项目文章项目源码||毕设定制||远程支持||可联系博主---------------同类型文章链接--------------------------java项目设计专栏1项目基于springboot地方废物回收机构管理系统本系统的核心价值观在于为用户打造一个便......
  • C语言学生管理系统
    C语言学生管理系统主要功能模块主界面其中教师注册和学生注册使用id(学号注册),由管理员录入id信息,若未查询到id被录入,则无法注册支持修改密码,若已经设置过密码,则验证原来密码后,可以修改密码注册函数代码voidregisterUser(constchar*role){UsernewUser;......
  • 基于web网吧座位预约管理系统设计与实现
      博主介绍:黄菊华老师《Vue.js入门与商城开发实战》《微信小程序商城开发》图书作者,CSDN博客专家,在线教育专家,CSDN钻石讲师;专注大学生毕业设计教育和辅导。所有项目都配有从入门到精通的基础知识视频课程,学习后应对毕业设计答辩。项目配有对应开发文档、开题报告、任务书......
  • 开源项目推荐-vue2+element+axios 个人财务管理系统
    文章目录financialmanagement项目简介项目特色项目预览卫星的实现方式:首次进入卫星效果的实现方式:卫星跟随鼠标滑动的随机效果实现方式:环境准备项目启动项目部署项目地址financialmanagement项目简介vue2+element+axios个人财务管理系统是基于vue2+element+ax......
  • 027java jsp ssm洗衣店管理系统(源码+数据库+文档)
     项目技术:SSM+Maven等等组成,B/S模式+Maven管理等等。环境需要1.运行环境:最好是javajdk1.8,我们在这个平台上运行的。其他版本理论上也可以。2.IDE环境:IDEA,Eclipse,Myeclipse都可以。推荐IDEA;3.tomcat环境:Tomcat7.x,8.x,9.x版本均可4.硬件环境:windows7/8/101G......
  • 023java jsp ssm学校园教室管理系统(源码+数据库+文档)
     项目技术:SSM+Maven等等组成,B/S模式+Maven管理等等。环境需要1.运行环境:最好是javajdk1.8,我们在这个平台上运行的。其他版本理论上也可以。2.IDE环境:IDEA,Eclipse,Myeclipse都可以。推荐IDEA;3.tomcat环境:Tomcat7.x,8.x,9.x版本均可4.硬件环境:windows7/8/101G......