java动态数组实现增删改查

问题遇到的现象和发生背景

添加课程信息会覆盖之前的内容

问题相关代码,请勿粘贴截图

package teacher;

import java.io.*;
import java.util.ArrayList;
import java.util.Scanner;

class kcxx {

private String bianh;
private String name;
private String time;
private String cla;
public static kcxx s = new kcxx();


public void kcxx(String bianh, String name, String time, String cla) {

    this.bianh = bianh;

    this.name = name;

    this.time = time;

    this.cla = cla;

}

public void setBianh(String bianh) {

    this.bianh = bianh;

}

public String getBianh() {

    return bianh;

}

public void setName(String name) {

    this.name = name;

}

public String getName() {

    return name;

}

public void setTime(String time) {

    this.time = time;

}

public String getTime() {

    return time;

}

public void setCla(String cla) {
    this.cla = cla;
}

public String getCla() {
    return cla;
}

public void dowork(){

}

public void add (ArrayList < kcxx> array) {

    Scanner sc = new Scanner(System.in);
    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 bianh = sc.next();

    System.out.println("请输入课程名: ");

    String name = sc.next();

    System.out.println("请输入课程时间:  ");

    String time = sc.next();

    System.out.println("请输入授课数目:  ");

    String cla = sc.next();
    
    s.setBianh(bianh);

    s.setName(name);

    s.setTime(time);

    s.setCla(cla);

    array.add(s);

    System.out.println("添加学生成功");
}

public boolean isUsed (ArrayList < kcxx > array, String sid){


    boolean flag = false;


    for (int i = 0; i < array.size(); i++) {

        kcxx s = array.get(i);

        if (s.getBianh().equals(sid)) {

            flag = true;

            break;

        }

    }

    return flag;

}

public void findit(ArrayList < kcxx > array) {

// 判断集合中是否有数据,如果没有显示提示信息

    if (array.size() == 0) {

        System.out.println("无信息,请先添加信息后查询");

// 为了不让程序往下执行,给出return;
return;

    }

    System.out.println("[课程编号  \t|课程名   \t|课时   \t|课程数]");

    for (int i = 0; i < array.size(); i++) {
        kcxx s=new kcxx();
        s = array.get(i);

        System.out.println("[" + s.getBianh() + "\t|" + s.getName() + "\t|" + s.getTime() + "\t|" + s.getCla()+"]");


    }

}

public void delete(ArrayList < kcxx > array) {


    Scanner sc = new Scanner(System.in);

    System.out.println("请输入你要删除的课程的编号: ");

    String sid = sc.next();

    int index = -1;

    for (int i = 0; i < array.size(); i++) {
        kcxx s=new kcxx();
        s = array.get(i);

        if (s.getBianh().equals(sid)) {
            index = i;
            break;
        }
    }

    if (index == -1) {

        System.out.println("该课程不存在,请重新输入: ");

    } else {

        array.remove(index);

        System.out.println("删除课程成功");

    }

}

public  void chang(ArrayList < kcxx > array) {

    Scanner sc = new Scanner(System.in);

    System.out.println("请输入需要修改的课程编号: ");

    String bianh = sc.nextLine();

    System.out.print("请输入课程名: ");

    String name= sc.next();

    System.out.print("请输入课时:  ");

    String time = sc.next();

    System.out.print("请输入课程数:  ");

    String cla = sc.next();


    kcxx s = new kcxx();

    s.setBianh(bianh);

    s.setName(name);

    s.setTime(time);

    s.setCla(cla);

// 遍历集合修改对应的学生信息

    for (int i = 0; i < array.size(); i++) {

        kcxx ss = array.get(i);

        if (ss.getBianh().equals(bianh)) {

            array.set(i, s);

            break;

        }

    }

    System.out.println("修改课程信息成功");

}

}

class menu {
public int menu() {
System.out.println("--------课程信息管理-------");

    System.out.println("\t\t1-新增课程(课程编号)");

    System.out.println("\t\t2-修改课程");

    System.out.println("\t\t3-删除课程");

    System.out.println("\t\t4-查找课程");

    System.out.println("\t\t5-退出");

    System.out.println("\t\t请输入你的选择: ");
    Scanner in = new Scanner(System.in);
    int choice = in.nextInt();
    while (choice < 0 || choice > 5) {
        System.out.println("输入的编号无效,请重新输入操作编号:");
        choice = in.nextInt();
    }
    return choice;

}


public void selectOperat(ArrayList<kcxx> array) {
    int choice;
    choice = menu();
    kcxx ke=new kcxx();
    //ArrayList<kechengxinxi> array=new ArrayList<>();
    switch (choice) {
        case 1:
            System.out.println("\t*****新增课程*****");
            ke.add(array);
            for (int i=0;i<array.size();i++){
                System.out.println("array["+i+"]:"+array.get(i).getBianh()+"\t"+array.get(i).getName()+"\t"+array.get(i).getTime()+"\t"+array.get(i).getCla());
            }
            break;

        case 2:
            System.out.println("\t*****修改课程*****");
            ke.chang(array);
            break;

        case 3:
            System.out.println("\t*****删除课程*****");
            ke.delete(array);
            break;

        case 4:
            System.out.println("\t*****查找课程*****");
            ke.findit(array);
            break;

        case 5:
            System.out.println("\t*****^_^感谢使用^_^*****");
            System.exit(0);
            break;
    }

}

}

public class teacherMessage {
public static void main(String[] args) {
int ff=1;
ArrayList kcxx_array_list = new ArrayList<>();
while(ff==1) {

        menu m = new menu();
        m.selectOperat(kcxx_array_list);

        WriteDThread wd=new WriteDThread();
        new Thread(wd).start();

    }
    kcData kcd=new kcData();
    kcxx s=new kcxx();
    kcd.writeData(kcxx_array_list);
    kcd.readData(s);


}

}

运行结果及报错内容

添加两个不同信息,后面的信息会覆盖之前的信息

我的解答思路和尝试过的方法
我想要达到的结果

添加的时候,要在最后面添加,不要每次都向同一个位置添加。