十一、ArrayList集合与学生管理系统

1 ArrayList类

1 概述

该类提供一种存储空间可变的存储模型,存储的数据容量可以发生变化。
我们可以用来做什么呢? 存储长度不定的数组。

  • 格式:ArrayList< E >
  1. 可调整大小的数组实现
  2. < E > 是一种特殊的数据类型,泛型。

在这里插入图片描述

  • 示例
import java.util.ArrayList;

public class test {
    public static void main(String[] args) {
        ArrayList list = new ArrayList();
        //add 添加元素
        list.add("java");
        list.add(123);
        list.add(false);
        //返回此列表的元素数
        System.out.println(list.size());

        //移除元素
        list.remove(2);
        //修改元素,替换指定位置元素
        list.set(0,"Java");
		//返回列表中指定位置的元素
        System.out.println(list.get(0));
        //判断是否有某一指定元素
        System.out.println(list.contains(123));
        //遍历数组
        System.out.println("----------------");
        for(int i = 0 ; i < list.size() ; i++){
            System.out.println(list.get(i));
        }
    }
}

3
Java
true
----------------
Java
123

2 存储字符串并遍历

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

实现:

import java.util.ArrayList;

public class test {
    public static void main(String[] args) {
        //需求:创建一个存储字符串的集合,存储3个字符串元素
        //使用程序实现在控制台遍历该集合
        ArrayList<String>strList = new ArrayList<>();
        //添加元素
        strList.add("java");
        strList.add("HTP");
        strList.add("Spring");
        //遍历
        for(int i = 0 ; i < strList.size() ; i++){
            System.out.println(strList.get(i));
        }
        System.out.println("--------------------");
        //for增强遍历
        for(String str : strList){
            System.out.println(str);
        }
    }
}

运行结果:

java
HTP
Spring
--------------------
java
HTP
Spring

3 存储学生对象并遍历

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

实现(方法1 数组):

//代码1
public class Student{
    //存储学生对象并遍历
    //需求:创建一个存储学生对象的集合,存储3个学生对象,使用程序实现在控制台遍历该集合
    private String id;
    private String name;
    private int age;

    public Student(String name, int age) {
        this.name = name;
        this.age = age;
    }

    public Student(String id, String name, int age) {
        this.id = id;
        this.name = name;
        this.age = age;
    }

    public Student() {

    }

    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 void show(){
        System.out.println(this.getId() + " " + this.getName() + " " + this.getAge());
    }
}
//代码2
public class StudentTest {
    public static void main(String[] args) {
        //创建自定义类型的数组
        Student[] stuArr = new Student[3];
        stuArr[0] = new Student("001","小明",18);

        Student stu = new Student();
        stu.setId("002");
        stu.setName("小红");
        stu.setAge(16);
        stuArr[1] = stu;

        stuArr[2] = new Student("003","小王",19);
        //遍历数组
        for(Student student : stuArr){
            student.show();
        }
    }
}

运行结果:

001 小明 25
002 小黑 26
-----------
001 小明 25
002 小黑 26

实现(方法2 ArrayList):

import java.util.ArrayList;

public class ArrayListStudent {
    public static void main(String[] args) {
        //创建一个容器
        ArrayList<Student>list = new ArrayList<>();
        list.add(new Student("001","小明",25));
        Student student = new Student("002","小黑",26);
        list.add(student);

        for(int i = 0 ; i < list.size() ; i++){
            list.get(i).show();
        }
        System.out.println("-----------");
        for(Student stu : list){
            stu.show();
        }
    }
}

运行结果:

001 小明 25
002 小黑 26
-----------
001 小明 25
002 小黑 26

Process finished with exit code 0

4 存储学生对象并遍历升级版

需求:创建一个存储学生对象的集合,存储3个学生对象,使用程序实现在控制台遍历该集合,学生的姓名和年龄来自于键盘录入
思路:

  1. 定义学生类,为了键盘录入数据方便,把学生类中的成员变量都定义为String类型
  2. 创建集合对象
  3. 键盘录入学生对象所需要的数据
  4. 创建学生对象,把键盘录入的数据赋值给学生对象的成员变量
  5. 往集合中添加学生对象
  6. 遍历集合,采用通用遍历格式实现

实现:

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

public class StudentTest {
    public static void main(String[] args) {
        //创建自定义类型的数组
        /*需求:创建一个存储学生对象的集合,存储3个学生对象,使用程序实现在控制台遍历该集合,学生的姓名和年龄来自于键盘录入
        思路:
        1. 定义学生类,为了键盘录入数据方便,把学生类中的成员变量都定义为String类型
        2. 创建集合对象
        3. 键盘录入学生对象所需要的数据
        4. 创建学生对象,把键盘录入的数据赋值给学生对象的成员变量
        5. 往集合中添加学生对象
        6. 遍历集合,采用通用遍历格式实现*/
        Student[] stuArr = new Student[3];
        ArrayList<Student>list = new ArrayList<>();
        Scanner sc = new Scanner(System.in);
        //输入学生对象
        for(int i = 0 ; i < 3 ; i++){
            Student student = new Student();
            System.out.println("输入学号:");
            student.setId(sc.nextLine());
            System.out.println("输入姓名: ");
            student.setName(sc.nextLine());;
            System.out.println("输入年龄: ");
            student.setAge(sc.nextLine());
            list.add(student);
        }
        for(Student student : list){
            student.show();
        }
    }
}

运行结果:

输入学号:
001
输入姓名: 
小明
输入年龄: 
7
输入学号:
002
输入姓名: 
小红
输入年龄: 
8
输入学号:
003
输入姓名: 
小黑
输入年龄: 
8
001 小明 7
002 小红 8
003 小黑 8

2 学生管理系统

项目需求:
图片描述
针对目前我们的所学内容,完成一个综合案例:学生管理系统!该系统主要功能如下:

  • 添加学生:通过键盘录入学生信息,添加到集合中
  • 删除学生:通过键盘录入要删除学生的学号,将该学生对象从集合中删除
  • 修改学生:通过键盘录入要修改学生的学号,将该学生对象其他信息进行修改
  • 查看学生:将集合中的学生对象信息进行展示
  • 退出系统:结束程序

实现:

public class Student{
    //存储学生对象并遍历
    //需求:创建一个存储学生对象的集合,存储3个学生对象,使用程序实现在控制台遍历该集合
    private String id;
    private String name;
    private String age;
    private String live;

    public Student(){

    }

    public Student(String id, String name, String age, String live) {
        this.id = id;
        this.name = name;
        this.age = age;
        this.live = live;
    }

    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 getAge() {
        return age;
    }

    public void setAge(String age) {
        this.age = age;
    }

    public String getLive() {
        return live;
    }

    public void setLive(String live) {
        this.live = live;
    }

    public void show(){
        System.out.println(this.getId() + " " + this.getName() + " " + this.getAge()  + " " + this.getLive());
    }
}
import java.util.ArrayList;
import java.util.Scanner;

public class StudentTest {
    private static ArrayList<Student>list = new ArrayList<>();
    //private static ArrayList<String> array = new ArrayList<String>();
    public static void main(String[] args) {
        /*针对目前我们的所学内容,完成一个综合案例:学生管理系统!该系统主要功能如下:
        添加学生:通过键盘录入学生信息,添加到集合中
        删除学生:通过键盘录入要删除学生的学号,将该学生对象从集合中删除
        修改学生:通过键盘录入要修改学生的学号,将该学生对象其他信息进行修改
        查看学生:将集合中的学生对象信息进行展示
        退出系统:结束程序*/
        systemUI();

    }
    public static void systemUI(){
        while(true) {
            //直到输入5才结束程序
            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);
            int a = sc.nextInt();
            if (a == 1) {
                addStudent();
            } else if (a == 2) {
                deliteStudent();
            } else if (a == 3) {
                updateStudent();
            } else if (a == 4) {
                seeStudent();
            } else if (a == 5) {
                exitStudent();
            }else{
                System.out.println("输入有误,请重新输入");
            }
        }
    }

    public static void addStudent() {
        Scanner sc = new Scanner(System.in);
        String id;
        Student student = new Student();   //注意位置
        while(true){
            System.out.println("请输入学号:");
            id = sc.nextLine();
            boolean flag = isUser(list,id);
            if(flag){
                System.out.println("输入的学号已被使用,请重新输入");
            }else{
                break;
            }
        }
        System.out.println("请输入学生姓名:");
        String name = sc.nextLine();
        System.out.println("请输入学生年龄:");
        String age = sc.nextLine();
        System.out.println("请输入学生的地址:");
        String address = sc.nextLine();
        Student stu = new Student();
        student.setId(id);
        student.setName(name);
        student.setAge(age);
        student.setLive(address);
        list.add(student);
        System.out.println("添加学生成功");
    }

    //方法:判断学号是否重复
    public static boolean isUser(ArrayList<Student> list,String id){
        boolean flag = false;
        for(int i=0; i < list.size(); i++) {
            Student s = list.get(i);
            if(s.getId().equals(id)) {
                flag = true;
                break;
            }
        }
        return flag;
    }
    public static void deliteStudent(){
        Scanner sc = new Scanner(System.in);
        System.out.println("输入要删除的学生ID:");
        String id = sc.nextLine();
        for(int i=0; i < list.size(); i++) {
            Student s = list.get(i);
            if(s.getId().equals(id)) {
                list.remove(i);
                System.out.println("删除成功");
                break;
            }else{
                System.out.println("学号输入有误,请重新输入");
            }
        }
    }
    public static void updateStudent(){
        Scanner sc = new Scanner(System.in);
        System.out.println("输入要修改学生的ID");
        String id = sc.nextLine();
        int term = -1;
        for(int i = 0;i < list.size() ; i++){
            Student s = list.get(i);
            if(s.getId().equals(id)){
                term = i;
                break;
            }
        }
        if(term == -1){
            System.out.println("输入的学号不存在,请重新输入");
        }else{
            System.out.println("请输入学生新姓名:");
            String name = sc.nextLine();
            System.out.println("请输入学生新年龄:");
            String age = sc.nextLine();
            System.out.println("请输入学生新居住地:");
            String address = sc.nextLine();
            //创建学生对象
            Student s = new Student();
            s.setId(id);
            s.setName(name);
            s.setAge(age);
            s.setLive(address);
            //遍历集合修改对应的学生信息
            for (int i = 0; i < list.size(); i++) {
                Student student = list.get(i);
                if (student.getId().equals(id)) {
                    list.set(i , s);
                }
            }
            //给出修改成功提示
            System.out.println("修改学生信息成功");
        }

    }
    public static void seeStudent(){
        for(Student stu : list){
            stu.show();
        }
    }
    public static void exitStudent(){
        System.exit(0);
    }
}

运行结果:

------欢迎来到学生管理系统------
1 添加学生
2 删除学生
3 修改学生
4 查看所有学生
5 退出
请输入你的选择:
1
请输入学号:
001
请输入学生姓名:
小明
请输入学生年龄:
8
请输入学生的地址:
山西省
添加学生成功
------欢迎来到学生管理系统------
1 添加学生
2 删除学生
3 修改学生
4 查看所有学生
5 退出
请输入你的选择:
1
请输入学号:
003
请输入学生姓名:
小红
请输入学生年龄:
7
请输入学生的地址:
河南省
添加学生成功
------欢迎来到学生管理系统------
1 添加学生
2 删除学生
3 修改学生
4 查看所有学生
5 退出
请输入你的选择:
1
请输入学号:
009
请输入学生姓名:
小黑
请输入学生年龄:
9
请输入学生的地址:
广东省
添加学生成功
------欢迎来到学生管理系统------
1 添加学生
2 删除学生
3 修改学生
4 查看所有学生
5 退出
请输入你的选择:
4
001 小明 8 山西省
003 小红 7 河南省
009 小黑 9 广东省
------欢迎来到学生管理系统------
1 添加学生
2 删除学生
3 修改学生
4 查看所有学生
5 退出
请输入你的选择:
2
输入要删除的学生ID:
001
删除成功
------欢迎来到学生管理系统------
1 添加学生
2 删除学生
3 修改学生
4 查看所有学生
5 退出
请输入你的选择:
4
003 小红 7 河南省
009 小黑 9 广东省
------欢迎来到学生管理系统------
1 添加学生
2 删除学生
3 修改学生
4 查看所有学生
5 退出
请输入你的选择:
3
输入要修改学生的ID
009
请输入学生新姓名:
小北
请输入学生新年龄:
11
请输入学生新居住地:
河北
修改学生信息成功
------欢迎来到学生管理系统------
1 添加学生
2 删除学生
3 修改学生
4 查看所有学生
5 退出
请输入你的选择:
4
003 小红 7 河南省
009 小北 11 河北
------欢迎来到学生管理系统------
1 添加学生
2 删除学生
3 修改学生
4 查看所有学生
5 退出
请输入你的选择:
5

Process finished with exit code 0
  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

BORN(^-^)

你的鼓励将是我创作的最大动力

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

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

打赏作者

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

抵扣说明:

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

余额充值