云计算百科
云计算领域专业知识百科平台

学生管理系统的Java(基于集合)实现分析

引言

在Java开发中,集合框架是实现动态数据管理的核心工具。本文将以学生管理系统为例,深入解析如何通过Student(JavaBean类)与StudentSystem(集合管理类)的协作,构建一个基于集合框架的学生信息管理系统。通过对比传统数组管理方式,我们将揭示集合框架在代码健壮性、可扩展性和开发效率方面的优势。

一、JavaBean类设计:Student类的实现

1.1 JavaBean规范概述

JavaBean是一种符合特定规范的Java类,其核心特性包括:

  • 私有字段(Private Fields)
  • 公共getter/setter方法(Public Getters/Setters)
  • 无参构造方法(Default Constructor)
  • 可序列化(实现Serializable接口)

在学生管理系统中,Student类作为JavaBean,负责封装学生的基本信息,如ID、姓名、年龄和地址。

1.2 Student类代码实现

import java.io.Serializable;

public class Student implements Serializable {
private static final long serialVersionUID = 1L;
private String id; // 学生唯一标识
private String name; // 姓名
private int age; // 年龄
private String address; // 家庭住址

// 无参构造方法(JavaBean规范要求)
public Student() {}

// 全参构造方法(用于初始化完整数据)
public Student(String id, String name, int age, String address) {
this.id = id;
this.name = name;
this.age = age;
this.address = address;
}

// Getter和Setter方法
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; }
}

1.3 设计特点分析

  • 封装性:通过私有字段和公共方法控制数据访问,防止外部直接修改对象状态。
  • 可序列化:实现Serializable接口后,对象可通过文件或网络传输,为后续数据持久化打下基础。
  • 构造方法多样性:无参构造满足JavaBean规范要求,全参构造简化对象初始化。
  • 二、集合框架应用:StudentSystem类的实现

    2.1 集合框架的选择与优势

    在学生管理系统中,传统数组存在以下局限:

    • 容量固定:需手动扩容,代码复杂度高。
    • 线性查找:删除/修改操作需要遍历数组,时间复杂度O(n)。
    • 内存泄漏风险:删除元素后未置null,可能导致无效引用残留。

    而ArrayList<Student>作为动态数组,解决了上述问题:

    • 自动扩容:内部维护一个Object数组,当容量不足时自动扩展为1.5倍。
    • 高效操作:提供add(), remove(), get()等方法,简化集合操作。
    • 线程安全:非线程安全设计提升性能,适用于单线程环境。

    2.2 StudentSystem类核心功能实现

    2.2.1 添加学生功能

    public static void addStudent(ArrayList<Student> list) {
    Scanner sc = new Scanner(System.in);
    String id;
    while (true) {
    System.out.print("请输入学生ID:");
    id = sc.next();
    if (!isExist(list, id)) break;
    System.out.println("ID已存在,请重新输入!");
    }
    System.out.print("请输入姓名:");
    String name = sc.next();
    System.out.print("请输入年龄:");
    int age = sc.nextInt();
    System.out.print("请输入地址:");
    String address = sc.next();
    Student student = new Student(id, name, age, address);
    list.add(student); // 利用ArrayList的自动扩容特性
    System.out.println("添加成功!");
    }

    2.2.2 删除学生功能

    public static void deleteStudent(ArrayList<Student> list) {
    Scanner sc = new Scanner(System.in);
    System.out.print("请输入要删除的ID:");
    String id = sc.next();
    int index = getIndexById(list, id);
    if (index != -1) {
    list.remove(index); // 直接移除元素,ArrayList自动处理后续元素前移
    System.out.println("删除成功!");
    } else {
    System.out.println("未找到该学生!");
    }
    }

    2.2.3 修改学生信息功能

    public static void updateStudent(ArrayList<Student> list) {
    Scanner sc = new Scanner(System.in);
    System.out.print("请输入要修改的ID:");
    String id = sc.next();
    int index = getIndexById(list, id);
    if (index != -1) {
    Student student = list.get(index);
    System.out.print("请输入新姓名:");
    student.setName(sc.next());
    System.out.print("请输入新年龄:");
    student.setAge(sc.nextInt());
    System.out.print("请输入新地址:");
    student.setAddress(sc.next());
    System.out.println("修改成功!");
    } else {
    System.out.println("未找到该学生!");
    }
    }

    2.2.4 查询学生信息功能

    public static void queryStudent(ArrayList<Student> list) {
    if (list.isEmpty()) {
    System.out.println("暂无学生数据!");
    return;
    }
    System.out.println("ID\\t姓名\\t年龄\\t地址");
    for (Student student : list) {
    System.out.printf("%s\\t%s\\t%d\\t%s\\n",
    student.getId(),
    student.getName(),
    student.getAge(),
    student.getAddress());
    }
    }

    2.3 辅助方法实现

    // 检查ID是否存在
    public static boolean isExist(ArrayList<Student> list, String id) {
    return getIndexById(list, id) != -1;
    }

    // 根据ID查找索引
    public static int getIndexById(ArrayList<Student> list, String id) {
    for (int i = 0; i < list.size(); i++) {
    if (list.get(i).getId().equals(id)) {
    return i;
    }
    }
    return -1;
    }

    三、集合框架的性能分析

    操作类型数组实现(StudentManagement)ArrayList实现(StudentSystem)
    容量管理 手动扩容,代码复杂 自动扩容,底层实现透明
    添加操作 O(n)(扩容时) 平均O(1),最坏O(n)
    删除操作 O(n)(需要移动元素) O(n)(直接remove(index))
    查询操作 O(n)(线性查找) O(n)(遍历集合)
    内存占用 固定容量,可能浪费 动态调整,内存利用率高

    四、总结

    通过Student(JavaBean类)与StudentSystem(集合管理类)的协作,我们构建了一个基于集合框架的学生管理系统。该系统通过以下优势实现了高效的数据管理:

  • 封装性:Student类遵循JavaBean规范,确保数据安全性。
  • 动态扩容:ArrayList自动管理容量,降低开发复杂度。
  • 高效操作:集合框架提供的API简化了增删改查逻辑。
  • 扩展性强:可通过集成其他集合类型或数据库实现功能升级。
  • 对于开发者而言,理解集合框架的内部机制(如ArrayList的扩容策略、HashMap的哈希冲突处理)将有助于编写更高效的代码。在实际开发中,建议根据业务需求选择合适的集合类型,并结合异常处理、数据持久化等技术构建健壮的系统。

    五、附录

    Student类:

    public class Student {
    private String name;
    private int age;
    private String id;
    private String address;

    public Student() {
    }

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

    /**
    * 获取
    * @return name
    */
    public String getName() {
    return name;
    }

    /**
    * 设置
    * @param name
    */
    public void setName(String name) {
    this.name = name;
    }

    /**
    * 获取
    * @return age
    */
    public int getAge() {
    return age;
    }

    /**
    * 设置
    * @param age
    */
    public void setAge(int age) {
    this.age = age;
    }

    /**
    * 获取
    * @return id
    */
    public String getId() {
    return id;
    }

    /**
    * 设置
    * @param id
    */
    public void setId(String id) {
    this.id = id;
    }

    /**
    * 获取
    * @return address
    */
    public String getAddress() {
    return address;
    }

    /**
    * 设置
    * @param address
    */
    public void setAddress(String address) {
    this.address = address;
    }
    }

    StudentSystem类:

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

    public class StudentSystem {
    static Scanner sc = new Scanner(System.in);
    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();
    //利用lambda表达式
    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;
    }
    default -> System.out.println("输入有误,请重新输入");
    }

    /*switch (choose) {
    case "1":
    System.out.println("添加学生");
    break;
    case "2":
    System.out.println("删除学生");
    break;
    case "3":
    System.out.println("修改学生");
    break;
    case "4":
    System.out.println("查询学生");
    break;
    case "5":
    System.out.println("退出");
    break loop;
    *//*System.exit(0);*//*
    default:
    System.out.println("输入有误,请重新输入");
    break;
    }*/
    }
    }

    //添加学生
    public static void addStudent(ArrayList<Student> list) {
    String id;
    while (true) {
    System.out.println("请输入学生id:");
    id = sc.next();
    if (isExist(list, id)) {
    System.out.println("id已存在,请重新输入");
    } else {
    break;
    }
    }
    System.out.println("请输入学生姓名:");
    String name = sc.next();
    System.out.println("请输入学生年龄:");
    int age = sc.nextInt();
    System.out.println("请输入学生家庭住址:");
    String address = sc.next();
    Student s = new Student(name, age, id, address);
    list.add(s);
    System.out.println("添加学生成功");
    }

    //删除学生
    public static void deleteStudent(ArrayList<Student> list) {
    System.out.println("请输入要删除的学生id:");
    String id = sc.next();
    //获取索引
    int index = getIndexById(list, id);
    if (index != -1) {
    list.remove(index);//删除
    System.out.println("删除id为:" + id + "的学生成功");
    } else {
    System.out.println("id不存在,删除失败");
    }
    }

    //修改学生
    public static void updateStudent(ArrayList<Student> list) {
    System.out.println("请输入要修改的学生id:");
    String id = sc.next();

    int index = getIndexById(list, id);
    if (index == -1) {
    System.out.println("要修改的id" + id + "不存在,请重新输入");
    return;
    }
    System.out.println("请输入新的姓名:");
    String name = sc.next();
    System.out.println("请输入新的年龄:");
    int age = sc.nextInt();
    System.out.println("请输入新的家庭住址:");
    String address = sc.next();
    list.get(index).setName(name);
    list.get(index).setAge(age);
    list.get(index).setAddress(address);
    System.out.println("修改学生信息成功");
    /*Student s = new Student(name,age,id,address);
    list.set(index,s);*/
    }

    //查询学生
    public static void queryStudent(ArrayList<Student> list) {
    if (list.size() == 0) {
    System.out.println("当前无学生信息,请添加后在查询");
    return;//退出方法
    }
    //打印表头信息
    System.out.println("id\\t姓名\\t年龄\\t家庭住址");
    //遍历集合,获取每一个学生对象
    for (int i = 0; i < list.size(); i++) {
    Student s = list.get(i);
    System.out.println(s.getId() + "\\t" + s.getName() + "\\t" + s.getAge() + "\\t" + s.getAddress());
    }
    }

    //判断id是否重复
    public static boolean isExist(ArrayList<Student> list, String id) {
    /*for (int i = 0; i < list.size(); i++) {
    Student s = list.get(i);
    if (s.getId().equals(id)){
    return true;
    }
    }
    return false;*/
    int index = getIndexById(list, id);
    return index != -1;
    }

    //通过id获取索引
    public static int getIndexById(ArrayList<Student> list, String id) {
    for (int i = 0; i < list.size(); i++) {
    Student s = list.get(i);
    if (s.getId().equals(id)) {
    return i;//返回索引
    }
    }
    return -1;//没有找到
    }
    }

    赞(0)
    未经允许不得转载:网硕互联帮助中心 » 学生管理系统的Java(基于集合)实现分析
    分享到: 更多 (0)

    评论 抢沙发

    评论前必须登录!