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