1.创建Person父类
public abstract class Person {
// 成员变量
private int id;// 编号
private String name;// 姓名
private String sex;// 性别
private String birthday;// 生日
private int age;// 年龄
// 构造方法
public Person() {}
public Person(int id, String name, String sex, String birthday, int age) {
this.id = id;
this.name = name;
this.sex = sex;
this.birthday = birthday;
this.age = age;
}
// set/get方法
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getSex() {
return sex;
}
public void setSex(String sex) {
this.sex = sex;
}
public String getBirthday() {
return birthday;
}
public void setBirthday(String birthday) {
this.birthday = birthday;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
// 成员方法
public abstract String getType();// 返回身份类型
public abstract String getWork();// 返回工作
public String show(){
return "我是一名"+getType()+",我的工作是"+getWork();
}
}
2.创建学生子类
public class Student extends Person{
// 构造代码块
{
++Utils.sid;
}
public Student() {
}
public Student(int id, String name, String sex, String birthday, int age) {
super(id, name, sex, birthday, age);
}
@Override
public String getType() {
return "学生";
}
@Override
public String getWork() {
return "学Java...";
}
}
3.创建教师子类
教师类与学生类基本相同
4.创建一个工具类
package com.donglan.utils;
import com.donglan.entity.Person;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.Date;
public class Utils {
// 定义学生id 静态变量
public static int sid;
static{
// 给sid赋值
sid = 0;
}
// 根据生日计算年龄
public static int birthdayToAge(String birthday_Str){
// 首先确认参数是否为null
if(birthday_Str == null){
return -1;
}
// 1.把字符串类型的生日转换为 Date 类型的生日
// 1.1 创建日期格式化对象,指定日期格式
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
// 1.2 解析日期
Date birthday_date = null;
// Ctrl + Alt + T :选择try...catch...
try {
birthday_date = sdf.parse(birthday_Str);
} catch (ParseException e) {
e.printStackTrace();
}
// 1.3 如果生日时间 在 当前时间 之后 返回 -1
if(birthday_date.after(new Date())){
return -1;
}
// 2.获取当前时间的日历对象
Calendar calendar = Calendar.getInstance();
// 3.获取当前时间的年,月,日
int nowYear = calendar.get(Calendar.YEAR);
int nowMonth = calendar.get(Calendar.MONTH);
int nowDay = calendar.get(Calendar.DAY_OF_MONTH);
// 4.把Date类型的生日 转换成 日历对象
calendar.setTime(birthday_date);
// 5.获取生日的年,月,日
int birthdayYear = calendar.get(Calendar.YEAR);
int birthdayMonth = calendar.get(Calendar.MONTH);
int birthdayDay = calendar.get(Calendar.DAY_OF_MONTH);
// 6.计算初步年龄: 当前年 减去 出生年
int age = nowYear - birthdayYear;
// 7.判断是否已经过了生日
// 如果生日月份大于当前月份,那么初步年龄 - 1
if(birthdayMonth > nowMonth){
age--;
}
// 如果生日月份等于当前月份,并且生日的日期大于当前的日期,那么初步年龄 -1
if(birthdayMonth == nowMonth){
if(birthdayDay > nowDay){
age--;
}
}
// 8.返回年龄
return age;
}
// 按照指定格式打印Person对象
public static void printPerson(Person person){
System.out.println("****************************************************************************");
System.out.println("编号\t\t\t姓名\t\t\t性别\t\t\t生日\t\t\t年龄\t\t\t描述");
System.out.println(person.getId()+"\t\t\t"+person.getName()+"\t\t\t"+
person.getSex()+"\t\t\t"+person.getBirthday()+"\t\t\t"+person.getAge()+"\t\t\t"+person.show());
System.out.println("****************************************************************************");
}
// 根据指定格式打印ArrayList集合元素的方法
public static void printArrayList(ArrayList list){
System.out.println("****************************************************************************");
System.out.println("编号\t\t\t姓名\t\t\t性别\t\t\t生日\t\t\t\t\t年龄\t\t\t\t\t描述");
// 循环遍历集合
for(int i = 0; i < list.size();i++){
// 获取元素(可能是student对象,可能是teacher对象)
//Object o = list.get(i);
Person person = (Person) list.get(i);
System.out.println(person.getId()+"\t\t\t"+person.getName()+"\t\t\t"+
person.getSex()+"\t\t\t"+person.getBirthday()+"\t\t\t"+person.getAge()+"\t\t\t"+person.show());
}
System.out.println("****************************************************************************");
}
}
5.创建一个测试类(教师部分没写)
public class Tests {
public static void main(String[] args) {
// 创建Scanner对象
Scanner scanner = new Scanner(System.in);
// 创建一个存储Student类型的集合
ArrayList<Student> studentList = new ArrayList<>();
// 循环生成主菜单
while(true){
System.out.println("======================== 校园信息管理系统 ===============================");
System.out.println("1.学生信息管理系统 2.教师信息管理系统 3.系统退出");
System.out.println();// 留个空行
System.out.println("请输入功能序号");
int num = scanner.nextInt();
// 判断用户输入的序号
switch (num){
case 1:
// 进入学生信息管理系统
studentManage(studentList,scanner);
break;
case 2:
// 进入教师信息管理系统
//teacherManage(studentList,scanner);
break;
case 3:
System.out.println("谢谢,欢迎下次使用");
System.exit(0);
default:
System.out.println("您输入有误,请重新输入");
break;
}
}
}
// 学生信息管理系统
private static void studentManage(ArrayList<Student> studentList, Scanner scanner) {
// 需要生成二级菜单
while(true){
System.out.println("-------------------------- 【学生信息管理】 --------------------------");
System.out.println("1.添加学生 2.查询学生 3.修改学生 4.删除学生 5.返回");
System.out.println();// 留白
System.out.println("请输入功能序号:");
int num = scanner.nextInt();
switch (num){
case 1:
// 添加学生
addStudent(studentList,scanner);
break;
case 2:
// 查询学生
selectStudent(studentList,scanner);
break;
case 3:
// 修改学生
updateStudent(studentList,scanner);
break;
case 4:
// 删除学生
deleteStudent(studentList,scanner);
break;
case 5:
// 返回一级菜单
return;
default:
System.out.println("您输入的数据有误,请重新输入");
break;
}
}
}
// 删除学生
private static void deleteStudent(ArrayList<Student> studentList, Scanner scanner) {
// 1.输入要删除学生的编号
System.out.println("请输入要删除的学生编号");
int sid = scanner.nextInt();
// 2.遍历循环集合中的每一个元素对象
for(int i = 0; i < studentList.size(); i++){
// 2.1 获取每一个元素对象
Student student = studentList.get(i);
// 2.2 判断遍历出来的学生对象的id和要删除的sid是否相同
if(student.getId() == sid){
// 3. 如果相同,就删除
System.out.println("您要删除的学生信息是:");
Utils.printPerson(student);
// 4. 确认删除?
System.out.println("【确认】删除学生信息吗?(y/n)");
String is = scanner.next();
// 5.判断用户是否删除
if(is.equalsIgnoreCase("n")){
// 5.1如果输入的n,就取消删除
System.out.println("【删除操作已被取消】");
} else if(is.equalsIgnoreCase("y")){
// 5.2如果输入的是y,就删除
studentList.remove(i);// 删除i索引位置的元素
System.out.println("【删除操作成功】");
}// 判断是否删除
// 6. 删除结束之后,结束方法
return;
}// 判断删除的学生id是否相同
}// 遍历循环学生对象
// 7.如果走到这一步,说明循环里没有匹配到输入的sid,就提示信息
System.out.println("【错误信息】:您要删除的学生编号"+sid+"不存在");
}
// 修改学生
private static void updateStudent(ArrayList<Student> studentList, Scanner scanner) {
// 1.输入要修改的学生编号
System.out.println("请输入要修改的学生编号");
int sid = scanner.nextInt();
// 2.判断要修改的学生编号是否存在
for(int i = 0; i < studentList.size(); i++){
// 2.1 获取遍历出来的学生对象
Student student = studentList.get(i);
// 2.2 判断遍历出来的学生对象的id和输入的sid是否相同
if(student.getId() == sid){
// 3. 如果相同,就修改学生信息
System.out.println("您要修改的学生信息是:");
Utils.printPerson(student);
System.out.println("请输入新的姓名(保留原来的信息请输入0)");
String name = scanner.next();
System.out.println("请输入新的性别(保留原来的信息请输入0)");
String sex = scanner.next();
System.out.println("请输入新的生日,格式为yyyy-MM-dd(保留原来的信息请输入0)");
String birthday = scanner.next();
// 判断输入的信息
if(!"0".equals(name)){
student.setName(name);
}
if(!"0".equals(sex)){
student.setSex(sex);
}
if(!"0".equals(birthday)){
student.setBirthday(birthday);
// 年龄修改以下
student.setAge(Utils.birthdayToAge(birthday));
}
// 修改完成之后,就需要结束方法
System.out.println("学生信息 【修改成功】");
return;
}// 判断学生id相同
}// 循环遍历学生集合结束
// 如果程序能够走到这里的话,说明遍历里面的学生id没有一个与sid相同,就要提示信息
System.out.println("【错误信息】:您要修改的学生编号"+sid+"不存在");
}
// 查询学生
private static void selectStudent(ArrayList<Student> studentList, Scanner scanner) {
// 1.判断集合中有没有学生对象
// 2.如果没有学生对象,提示相关信息,
if(studentList.size() == 0){
System.out.println("【没有数据 O】");
return;
}
// 3.有的话,就展示
Utils.printArrayList(studentList);
}
// 添加学生
private static void addStudent(ArrayList<Student> studentList, Scanner scanner) {
// 1.输入学生信息
System.out.println("请输入姓名:");
String name = scanner.next();
System.out.println("请输入性别:");
String sex = scanner.next();
System.out.println("请输入生日(格式要求:yyyy-MM-dd):");
String birthday = scanner.next();
// 2.创建学生对象
Student student = new Student();
// 3.把输入的信息封装到学生对象中
student.setId(Utils.sid);
student.setName(name);
student.setSex(sex);
student.setBirthday(birthday);
student.setAge(Utils.birthdayToAge(birthday));
// 4.把学生对象添加到集合中
studentList.add(student);
System.out.println("【添加成功 √】");
}
}