9、ArrayList集合完成學生管理系統

小不點_發表於2020-11-13


1. ArrayList類常用方法

1.1 構造方法

在這裡插入圖片描述

1.2 成員方法

在這裡插入圖片描述

2. ArrayList儲存字串並遍歷

案例需求:
建立一個儲存字串的集合,儲存3個字串元素,使用程式實現在控制檯遍歷該集合

程式碼實現:

import java.util.ArrayList;

/*
    思路:
        1:建立集合物件
        2:往集合中新增字串物件
        3:遍歷集合,首先要能夠獲取到集合中的每一個元素,這個通過get(int index)方法實現
        4:遍歷集合,其次要能夠獲取到集合的長度,這個通過size()方法實現
        5:遍歷集合的通用格式
 */
public class ArrayListTest01 {
    public static void main(String[] args) {
        //建立集合物件
        ArrayList<String> array = new ArrayList<String>();

        //往集合中新增字串物件
        array.add("劉正風");
        array.add("左冷禪");
        array.add("風清揚");

        //遍歷集合,首先要能夠獲取到集合中的每一個元素,這個通過get(int index)方法實現
//        System.out.println(array.get(0));
//        System.out.println(array.get(1));
//        System.out.println(array.get(2));

//        for(int i=0; i<3; i++) {
//            System.out.println(array.get(i));
//        }

        //遍歷集合,其次要能夠獲取到集合的長度,這個通過size()方法實現
//        System.out.println(array.size());

        //遍歷集合的通用格式
        for(int i=0; i<array.size(); i++) {
            String s = array.get(i);
            System.out.println(s);
        }
    }
}

3. ArrayList儲存學生物件並遍歷

需求:
建立一個儲存學生物件的集合,儲存3個學生物件,使用程式實現在控制檯遍歷該集合

程式碼實現:

import java.util.ArrayList;

/*
    思路:
        1:定義學生類
        2:建立集合物件
        3:建立學生物件
        4:新增學生物件到集合中
        5:遍歷集合,採用通用遍歷格式實現
 */
public class ArrayListTest02 {
    public static void main(String[] args) {
        //建立集合物件
        ArrayList<Student> array = new ArrayList<Student>();

        //建立學生物件
        Student s1 = new Student("林青霞", 30);
        Student s2 = new Student("風清揚", 33);
        Student s3 = new Student("張曼玉", 18);

        //新增學生物件到集合中
        array.add(s1);
        array.add(s2);
        array.add(s3);

        //遍歷集合,採用通用遍歷格式實現
        for (int i = 0; i < array.size(); i++) {
            Student s = array.get(i);
            System.out.println(s.getName() + "," + s.getAge());
        }
    }
}

4. ArrayList儲存學生物件並遍歷升級版

需求:建立一個儲存學生物件的集合,儲存3個學生物件,使用程式實現在控制檯遍歷該集合
學生的姓名和年齡來自於鍵盤錄入

學生類:


public class Student {
	/*
	    學生類
	
	    為了鍵盤錄入資料方便,把學生類中的成員變數都定義為String型別
	 */
    private String name;
    private String age;

    public Student() {
    }

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

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

測試類:

package com.itheima_03;

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

/*
    思路:
        1:定義學生類,為了鍵盤錄入資料方便,把學生類中的成員變數都定義為String型別
        2:建立集合物件
        3:鍵盤錄入學生物件所需要的資料
        4:建立學生物件,把鍵盤錄入的資料賦值給學生物件的成員變數
        5:往集合中新增學生物件
        6:遍歷集合,採用通用遍歷格式實現
 */
public class ArrayListTest {
    public static void main(String[] args) {
        //建立集合物件
        ArrayList<Student> array = new ArrayList<Student>();

        /*
        //鍵盤錄入學生物件所需要的資料
        Scanner sc = new Scanner(System.in);

        System.out.println("請輸入學生姓名:");
        String name = sc.nextLine();

        System.out.println("請輸入學生年齡:");
        String age = sc.nextLine();

        //建立學生物件,把鍵盤錄入的資料賦值給學生物件的成員變數
        Student s = new Student();
        s.setName(name);
        s.setAge(age);

        //往集合中新增學生物件
        array.add(s);
        */

        //為了提高程式碼的複用性,我們用方法來改程式序
        addStudent(array);
        addStudent(array);
        addStudent(array);

        //遍歷集合,採用通用遍歷格式實現
        for (int i = 0; i < array.size(); i++) {
            Student s = array.get(i);
            System.out.println(s.getName() + "," + s.getAge());
        }
    }

    /*
        兩個明確:
            返回值型別:void
            引數:ArrayList<Student> array
     */
    public static void addStudent(ArrayList<Student> array) {
        //鍵盤錄入學生物件所需要的資料
        Scanner sc = new Scanner(System.in);

        System.out.println("請輸入學生姓名:");
        String name = sc.nextLine();

        System.out.println("請輸入學生年齡:");
        String age = sc.nextLine();

        //建立學生物件,把鍵盤錄入的資料賦值給學生物件的成員變數
        Student s = new Student();
        s.setName(name);
        s.setAge(age);

        //往集合中新增學生物件
        array.add(s);
    }
}

5. 學生管理系統

5.1 案例需求

案例需求 :
針對目前我們的所學內容,完成一個綜合案例:學生管理系統!該系統主要功能如下:
新增學生:通過鍵盤錄入學生資訊,新增到集合中
刪除學生:通過鍵盤錄入要刪除學生的學號,將該學生物件從集合中刪除
修改學生:通過鍵盤錄入要修改學生的學號,將該學生物件其他資訊進行修改
檢視學生:將集合中的學生物件資訊進行展示
退出系統:結束程式

5.2 實現步驟

  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. 學生管理系統的修改學生功能實現步驟 //建立學生物件,把鍵盤錄入的資料賦值給學生物件的成員變數 Student s = new Student(); s.setName(name); s.setAge(age); //往集合中新增學生物件 array.add(s);
    } }
    6.1 定義一個方法,接收ArrayList集合 6.2 方法中接收要修改學生的學號 6.3 通過鍵盤錄入學生物件所需 的資訊,並建立物件 6.4 遍歷集合,獲取每一個學生物件。並和錄入的修改學生學號進行比較.如果相 同,則使用新學生物件替換當前學生物件 6.5 在修改學生選項裡呼叫修改學生的方法
  7. 退出系統 使用System.exit(0);退出JVM

5.3 實現程式碼

學生類:


/*
    學生類
    Alt+Insert  根據自己的需要進行選擇
 */
public class Student {
    //學號
    private String sid;
    //姓名
    private String name;
    //年齡
    private String age;
    //居住地
    private String address;

    public Student() {
    }

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

    public String getSid() {
        return sid;
    }

    public void setSid(String sid) {
        this.sid = sid;
    }

    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 getAddress() {
        return address;
    }

    public void setAddress(String address) {
        this.address = address;
    }
}

測試類:

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

/*
    學生管理系統
 */
public class StudentManager {

    public static void main(String[] args) {
        //建立集合物件,用於儲存學生資料
        ArrayList<Student> array = new ArrayList<Student>();

        //用迴圈完成再次回到主介面
        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實現鍵盤錄入資料
            Scanner sc = new Scanner(System.in);
            String line = sc.nextLine();

            //用switch語句完成操作的選擇
            switch (line) {
                case "1":
                    addStudent(array);
                    break;
                case "2":
                    deleteStudent(array);
                    break;
                case "3":
//                    System.out.println("修改學生");
                    updateStudent(array);
                    break;
                case "4":
                    findAllStudent(array);
                    break;
                case "5":
                    System.out.println("謝謝使用");
                    System.exit(0); //JVM退出
            }
        }
    }

    //定義一個方法,用於新增學生資訊
    /*
    public static void addStudent(ArrayList<Student> array) {
        //鍵盤錄入學生物件所需要的資料,顯示提示資訊,提示要輸入何種資訊
        Scanner sc = new Scanner(System.in);

        System.out.println("請輸入學生學號:");
        String sid = sc.nextLine();
        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.setSid(sid);
        s.setName(name);
        s.setAge(age);
        s.setAddress(address);

        //將學生物件新增到集合中
        array.add(s);

        //給出新增成功提示
        System.out.println("新增學生成功");
    }
    */
    public static void addStudent(ArrayList<Student> array) {
        //鍵盤錄入學生物件所需要的資料,顯示提示資訊,提示要輸入何種資訊
        Scanner sc = new Scanner(System.in);

        //為了讓sid在while迴圈外面被訪問到,我們就把它定義在了迴圈外
        String sid;

        //為了讓程式能夠回到這裡,我們使用迴圈實現
        while (true) {
            System.out.println("請輸入學生學號:");
            sid = sc.nextLine();

            boolean flag = isUsed(array, sid);
            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 s = new Student();
        s.setSid(sid);
        s.setName(name);
        s.setAge(age);
        s.setAddress(address);

        //將學生物件新增到集合中
        array.add(s);

        //給出新增成功提示
        System.out.println("新增學生成功");
    }

    //定義一個方法,判斷學號是否被使用
    public static boolean isUsed(ArrayList<Student> array, String sid) {
        //如果與集合中的某一個學生學號相同,返回true;如果都不相同,返回false
        boolean flag = false;

        for(int i=0; i<array.size(); i++) {
            Student s = array.get(i);
            if(s.getSid().equals(sid)) {
                flag = true;
                break;
            }
        }

        return flag;
    }

    //定義一個方法,用於檢視學生資訊
    /*
    public static void findAllStudent(ArrayList<Student> array) {
        //顯示錶頭資訊
        //\t 其實就是tab鍵的位置
        System.out.println("學號\t\t\t姓名\t\t年齡\t\t居住地");

        //將集合中資料取出按照對應格式顯示學生資訊,年齡顯示補充“歲”
        for (int i = 0; i < array.size(); i++) {
            Student s = array.get(i);
            System.out.println(s.getSid() + "\t" + s.getName() + "\t" + s.getAge() + "歲\t\t" + s.getAddress());
        }
    }
    */
    public static void findAllStudent(ArrayList<Student> array) {
        //判斷集合中是否有資料,如果沒有顯示提示資訊
        if (array.size() == 0) {
            System.out.println("無資訊,請先新增資訊再查詢");
            //為了讓程式不在往下執行,給出return;
            return;
        }


        //顯示錶頭資訊
        //\t 其實就是tab鍵的位置
        System.out.println("學號\t\t\t姓名\t\t年齡\t\t居住地");

        //將集合中資料取出按照對應格式顯示學生資訊,年齡顯示補充“歲”
        for (int i = 0; i < array.size(); i++) {
            Student s = array.get(i);
            System.out.println(s.getSid() + "\t" + s.getName() + "\t" + s.getAge() + "歲\t\t" + s.getAddress());
        }
    }

    //定義一個方法,用於刪除學生資訊
    /*
    public static void deleteStudent(ArrayList<Student> array) {
        //鍵盤錄入要刪除的學生學號,顯示提示資訊
        Scanner sc = new Scanner(System.in);

        System.out.println("請輸入你要刪除的學生的學號:");
        String sid = sc.nextLine();

        //遍歷集合將對應學生物件從集合中刪除
        for(int i=0; i<array.size(); i++) {
            Student s = array.get(i);
            if(s.getSid().equals(sid)) {
                array.remove(i);
                break;
            }
        }

        //給出刪除成功提示
        System.out.println("刪除學生成功");
    }
    */
    public static void deleteStudent(ArrayList<Student> array) {
        //鍵盤錄入要刪除的學生學號,顯示提示資訊
        Scanner sc = new Scanner(System.in);

        System.out.println("請輸入你要刪除的學生的學號:");
        String sid = sc.nextLine();

        //在刪除/修改學生操作前,對學號是否存在進行判斷
        //如果不存在,顯示提示資訊
        //如果存在,執行刪除/修改操作
        int index = -1;

        for (int i = 0; i < array.size(); i++) {
            Student s = array.get(i);
            if (s.getSid().equals(sid)) {
//                int index = i;
                index = i;
                break;
            }
        }

        if (index == -1) {
            System.out.println("該資訊不存在,請重新輸入");
        } else {
            array.remove(index);
            //給出刪除成功提示
            System.out.println("刪除學生成功");
        }
    }

    //定義一個方法,用於修改學生資訊
    public static void updateStudent(ArrayList<Student> array) {
        //鍵盤錄入要修改的學生學號,顯示提示資訊
        Scanner sc = new Scanner(System.in);

        System.out.println("請輸入你要修改的學生的學號:");
        String sid = sc.nextLine();

        //鍵盤錄入要修改的學生資訊
        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.setSid(sid);
        s.setName(name);
        s.setAge(age);
        s.setAddress(address);

        //遍歷集合修改對應的學生資訊
        for (int i = 0; i < array.size(); i++) {
            Student student = array.get(i);
            if (student.getSid().equals(sid)) {
                array.set(i, s);
                break;
            }
        }

        //給出修改成功提示
        System.out.println("修改學生成功");
    }
}

相關文章