用JAVA定义写生数组,实现增删改查

Student.java

package C314.TODO;

import java.text.SimpleDateFormat;
import java.util.Date;

/**
 * copyright(c)2021 LJT.ALL rights Reserved
 * <p>
 * 描述:学生类
 *
 * @author ljt
 * @version 1.0
 * @date 2021/3/14
 */
public class Student {
    /**
     * 编号
     */
    private int id;
    /**
     * 姓名
     */
    private String name;
    /**
     * 生日
     */
    private Date birthday;

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

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

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

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

    /**
     * 获取birthday
     *
     * @return
     */
    public Date getBirthday() {
        return birthday;
    }

    /**
     * 设置birthday
     *
     * @param birthday
     */
    public void setBirthday(Date birthday) {
        this.birthday = birthday;
    }

    public String toString() {
        return getId() + "," + getName() + "," + new SimpleDateFormat("yyyy-MM-dd").format(getBirthday()) + ";";
    }
}

IStudentService.java

package C314.TODO;

import java.util.Date;

/**
 * copyright(c)2021 LJT.ALL rights Reserved
 * <p>
 * 描述:接口
 *
 * @author ljt
 * @version 1.0
 * @date 2021/3/14
 */
public interface IStudentService {
    /**
     * 添加
     *
     * @param student 学生对象
     * @return 添加的学生
     */
    boolean add(Student student);

    /**
     * 修改
     *
     * @param student 学生对象
     * @return 修改后的学生
     */
    boolean modify(Student student);

    /**
     * 查找
     *
     * @param id
     * @return 学生生日在指定日期后的学生列表,有可能为空
     */
    Student[] searchById(int id);

    /**
     * 查看生日是某个日期对应的学生
     */
    Student[] searchList(Date date);
}

StudentManager.java

package C314.TODO;

import java.util.Arrays;
import java.util.Scanner;

/**
 * copyright(c)2021 LJT.ALL rights Reserved
 * <p>
 * 描述:
 *
 * @author ljt
 * @version 1.0
 * @date 2021/3/15
 */
public class StudentManager {
    public static void main(String[] args) {
        StudentManager studentManager = new StudentManager();
        StudentService StudentService = new StudentService();
        Scanner scanner = new Scanner(System.in);
        int i = 0;   // 操作编号
        // 交互界面
        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("*       6.退出                         *");
        System.out.println("***************************************");
        // while循环让用户可以循环输入 输入5退出循环
        while (true) {
            System.out.println("        请键盘输入以上操作前面的代号:");
            // 判断用户输入的代号是否合法
            try {
                i = scanner.nextInt();
            } catch (java.util.InputMismatchException e) {
                System.out.println("您的输入有误");
                break;
            }
            // switch循环实现不同功能
            switch (i) {
                case 1:     // 添加
                    StudentService.addStudent();
                    break;
                case 2:     // 修改
                    StudentService.modify(StudentService.students[0]);
                    break;
                case 3:        //输入一个日期,得到这个日期之后出生的学生的信息
                    StudentService.searchList(null);
                    break;
                case 4:      // 打印学生数组
                    if (StudentService.students[0] != null) {
                        try {
                            System.out.println(Arrays.toString(StudentService.students));
                        } catch (java.lang.NullPointerException e) {
                            System.out.println("没有学生");
                        }
                        break;
                    } else {
                        System.out.println("没有学生");
                        break;
                    }
                case 5:
                    try {
                        Student[] a = StudentService.searchById(0);
                        if (a.length == 0) {
                            System.out.println("抱歉,没有找到该学生");
                        } else {
                            System.out.println(Arrays.toString(a));
                        }
                    } catch (NullPointerException e) {
                    }

                    break;
                case 6:
                    System.out.println("感谢使用!");
                    System.exit(0);
                    break;
                default:
                    System.out.println("您的输入有误,请重新输入!");
                    break;
            }
        }
    }
}

StudentService.java

package C314.TODO;

import java.text.SimpleDateFormat;
import java.util.Arrays;
import java.util.Date;
import java.util.Scanner;
import java.util.regex.Pattern;

/**
 * copyright(c)2021 LJT.ALL rights Reserved
 * <p>
 * 描述:实现接口
 *
 * @author ljt
 * @version 1.0
 * @date 2021/3/14
 */

public class StudentService implements IStudentService {
    // 创建学生数组
    public Student[] students;
    // 在数组中查找符合条件的学生
    Student[] students1 = new Student[1];
    Student[] students2 = new Student[0];
    // 索引
    int index = 0;

    // 初始化数组
    public StudentService() {
        this(1);
    }

/**
     * 初始化对象
     *
     * @param capacity 数组初始容量*/


    public StudentService(int capacity) {
        this.students = new Student[capacity];
    }

/**
     * 添加
     *
     * @param student 学生对象
     * @return 结果true*/


    @Override
    public boolean add(Student student) {
        if (index >= students.length) {
            int length = students.length + 1;
            students = Arrays.copyOf(students, length);
            students[index++] = student;
        } else {
            students[index++] = student;
        }
        return true;
    }

    public void addStudent() {
        // 创建类对象
        Scanner scanner = new Scanner(System.in);
        Integer next;
        // 用户循环输入学生信息,并将信息存入学生数组
        while (true) {
            // 输入id 若id=0,退出循环
            Student student1 = new Student();
            System.out.println("请输入学生id 若需要终止输入学习生信息,请输入0");
            next = Integer.parseInt(scanner.next());
            if (next == 0) {
                System.out.println("终止成功!");
                break;
            }
            student1.setId(next);
            // 输入name
            System.out.println("请输入学生姓名");
            student1.setName(scanner.next());
            // 输入birthday
            System.out.println("请输入该学生生日,格式为 年年年年-月月-日日");
            String birth = scanner.next();
            // 正则判断日期格式是否正确
            Pattern p = Pattern.compile("^((\\d{2}(([02468][048])|([13579][26]))[\\-\\/\\s]?((((0?[13578])|(1[02]))[\\-\\/\\s]?((0?[1-9])|([1-2][0-9])|(3[01])))|(((0?[469])|(11))[\\-\\/\\s]?((0?[1-9])|([1-2][0-9])|(30)))|(0?2[\\-\\/\\s]?((0?[1-9])|([1-2][0-9])))))|(\\d{2}(([02468][1235679])|([13579][01345789]))[\\-\\/\\s]?((((0?[13578])|(1[02]))[\\-\\/\\s]?((0?[1-9])|([1-2][0-9])|(3[01])))|(((0?[469])|(11))[\\-\\/\\s]?((0?[1-9])|([1-2][0-9])|(30)))|(0?2[\\-\\/\\s]?((0?[1-9])|(1[0-9])|(2[0-8]))))))?$");
            if (p.matcher(birth).matches()) {    // 正则验证是否为日期
                try {     // 转换成日期
                    student1.setBirthday(new SimpleDateFormat("yyyy-MM-dd").parse(birth));
                    add(student1);
                    System.out.println("添加成功");
                } catch (Exception e) {
                    System.out.println("输入的日期格式错误");
                    students[index] = null;
                }
            } else {
                System.out.println("输入的日期格式错误");
                student1.setId(0);
                student1.setName(null);
            }
        }
    }

/**
     * 修改
     *
     * @param student 学生对象
     * @return 结果true
     */

    @Override
    public boolean modify(Student student) {
        Scanner scanner = new Scanner(System.in);
        if (students[0] != null) {
            System.out.println("请输入需要修改的学生id");
            int id = Integer.parseInt(scanner.next());
            Student student1 = new Student();
            // 查找学生
            for (int p = 0; p < students.length; p++) {
                int newId = 0;
                String newName = null;
                // 匹配条件
                if (id == students[p].getId()) {
                    System.out.println("已为您找到该学生,请重新输入该学生信息");
                    System.out.println("id修改为");
                    newId = scanner.nextInt();
                    System.out.println("name修改为");
                    newName = scanner.next();
                    System.out.println("birthday修改为,格式为 年年年年-月月-日日");
                    String birth = scanner.next();
                    Pattern q = Pattern.compile("^((\\d{2}(([02468][048])|([13579][26]))[\\-\\/\\s]?((((0?[13578])|(1[02]))[\\-\\/\\s]?((0?[1-9])|([1-2][0-9])|(3[01])))|(((0?[469])|(11))[\\-\\/\\s]?((0?[1-9])|([1-2][0-9])|(30)))|(0?2[\\-\\/\\s]?((0?[1-9])|([1-2][0-9])))))|(\\d{2}(([02468][1235679])|([13579][01345789]))[\\-\\/\\s]?((((0?[13578])|(1[02]))[\\-\\/\\s]?((0?[1-9])|([1-2][0-9])|(3[01])))|(((0?[469])|(11))[\\-\\/\\s]?((0?[1-9])|([1-2][0-9])|(30)))|(0?2[\\-\\/\\s]?((0?[1-9])|(1[0-9])|(2[0-8]))))))?$");
                    if (q.matcher(birth).matches()) {    // 正则验证是否为日期
                        try {     // 转换成日期
                            student1.setId(newId);
                            student1.setName(newName);
                            student1.setBirthday(new SimpleDateFormat("yyyy-MM-dd").parse(birth));
                            // 清空该学生信息,在该位置重新输入
                            students[p] = null;
                            int index1 = index;
                            index = p;
                            add(student1);
                            index = index1;
                            System.out.println("修改成功");
                        } catch (Exception e) {
                            System.out.println("输入的日期格式错误");
                        }
                    } else {
                        System.out.println("输入的日期格式错误");
                    }
                    break;
                } else {
                    System.out.println("抱歉,没有为您找到该学生");
                }
            }
        } else {
            System.out.println("您还没有添加学生,请先添加学生再进行修改");
        }
        return false;
    }

/**
     * 查找
     *
     * @param id 学生编号
     * @return 找到并修改成功返回找到的学生,未找到返回null
     */

    @Override
    public Student[] searchById(int id) {
        if (students[0] == null) {
            System.out.println("请先添加学生再进行查找");
            return null;
        } else {
            System.out.println("请输入您想要查找的学生id");
            Scanner scanner = new Scanner(System.in);
            id = scanner.nextInt();
            Student[] student = new Student[0];
            for (int b = 0; b < index; b++) {
                if (id == students[b].getId()) {
                    student = Arrays.copyOf(student, student.length + 1);
                    student[student.length - 1] = students[b];
                }
            }
            return student;
        }
    }

    /**
     * 查看生日是某个日期对应的学生
     *
     * @param date
     */

    @Override
    public Student[] searchList(Date date) {
        // 在数组中查找符合条件的学生
        // students1暂时保存数据
        // students2保存最终结果
        Student[] students1 = new Student[1];
        Student[] students2 = new Student[0];
        if (students[0] != null) {
            System.out.println("输入一个日期,得到这个日期之后出生的学生的信息,格式为 年年年年-月月-日日");
            Scanner scanner1 = new Scanner(System.in);
            String newDate = scanner1.next();    // 用户给定日期(String)
//            Date date1 = null;    // 将用户给的newDate转换为Date类型
            Pattern q = Pattern.compile("^((\\d{2}(([02468][048])|([13579][26]))[\\-\\/\\s]?((((0?[13578])|(1[02]))[\\-\\/\\s]?((0?[1-9])|([1-2][0-9])|(3[01])))|(((0?[469])|(11))[\\-\\/\\s]?((0?[1-9])|([1-2][0-9])|(30)))|(0?2[\\-\\/\\s]?((0?[1-9])|([1-2][0-9])))))|(\\d{2}(([02468][1235679])|([13579][01345789]))[\\-\\/\\s]?((((0?[13578])|(1[02]))[\\-\\/\\s]?((0?[1-9])|([1-2][0-9])|(3[01])))|(((0?[469])|(11))[\\-\\/\\s]?((0?[1-9])|([1-2][0-9])|(30)))|(0?2[\\-\\/\\s]?((0?[1-9])|(1[0-9])|(2[0-8]))))))?$");
            if (q.matcher(newDate).matches()) {    // 正则验证是否为日期
                try {     // 转换成日期
                    date = new SimpleDateFormat("yyyy-MM-dd").parse(newDate);
                } catch (Exception e) {
                    System.out.println("输入的日期格式错误");
                    return null;
                }
            } else {
                System.out.println("输入的日期格式错误");
                return null;
            }
            int newIndex = 0;
            for (int s = 0; s < index; s++) {
                if (date.getTime() < students[s].getBirthday().getTime()) {
                    students2 = Arrays.copyOf(students2, students2.length + 1);
                    students1 = Arrays.copyOfRange(students, s, s + 1);
                    students2[newIndex] = students1[0];
                    newIndex++;
                }
            }
            if (students2.length == 0) {
                System.out.println("所有学生都在该日期前出生");
            } else {
                System.out.println(Arrays.toString(students2));
            }
        } else {
            System.out.println("您还没有添加学生,请先添加学生再进行查询");
        }
        return students2;
    }
}