Java面向对象思想实现学生管理系统

Java面向对象思想实现学生管理系统

一、题目介绍:

二、需求分析

  1. 学生和老师之间有一些共同的成员属性和成员方法,可以将他们的共同方法抽象成person父类,定义student子类和teacher子类继承person的成员属性,重写person中的抽象方法。

2.定义工具类,在工具类中实现以下方法,供测试类调用:

          1)id的静态代码块,用于id的自动编码

          2)定义通过出身日期计算年龄的方法,用于根据出生日期自动获取年龄

          3) 打印ArrayList<? extends Person>的方法,用于接受一个集合,然后遍历集合的成员对象

          4)  打印Person的方法,用于接受一个对象,然后打印对象的成员属性等相关信息

      3.定义测试类

       

       根据需求,信息管理系统分为两层结构,第1层用于选择是操作学生管理系统,还是教师管理系统。第2层嵌套在第1层结构里面用于实现用户对学员/教师管理系统的增删查改,在第2层中,通过调用封装的增删查改功能的方法来实现用户对学员/教师管理系统的增删查改。

4.信息管理系统的总体架构

 

三、代码实现:

1.定义person抽象父类

//定义Person父类
public abstract class Demo_Person {
    //成员属性
    private int Id;
    private String name;
    private String sex;
    private String birthday;
    private int age;

    //构造方法
    public Demo_Person() { }
    public Demo_Person(int Id,String name, String sex, String birthday) {
        this.Id=Id;
        this.name = name;
        this.sex = sex;
        this.birthday = birthday;
    }


    //get和set方法
    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;
    }

    //重载tostring
    @Override
    public String toString() {
        return Id +
                "\t\t" + name +
                "\t\t" + sex +
                "\t\t" + birthday +
                "\t\t" + Utils_demo.birthdayToAge(birthday) +
                "\t\t我是一名:" + getType() +
                ",我的工作是:" + getInfo();
    }
//拓展问题:在继承中,toString方法,hashcode()和equal()方法是重写在父类较好,还是写在子类?
//答:这要看具体情况,如果所有子类的行为都一样,就写在父类中,如果子类不同,就写在子类中

    //成员方法
    //1.获取成员类型
    public abstract String getType();
    //2.获取成员描述
    public abstract String getInfo();

}

2.定义学生子类

public class Demo_Students extends Demo_Person {
    //学生类构造方法
    public Demo_Students() {
    }
    public Demo_Students(int Id, String name, String sex, String birthday) {
        super(Id, name, sex, birthday);
    }

    //重写person抽象方法
    @Override
    public String getType() {
        return "学生";
    }
    @Override
    public String getInfo() {
        return "学习java";
    }
}

3.定义教师子类

public class Teacher_Demo extends Demo_Person {
    //构造函数
    public Teacher_Demo() {
    }
    public Teacher_Demo(int Id, String name, String sex, String birthday) {
        super(Id, name, sex, birthday);
    }

    //抽象方法重载
    @Override
    public String getType() {
        return "老师";
    }

    @Override
    public String getInfo() {
        return "教java";
    }
}

4.定义工具类

import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.Date;

public class Utils_demo {
    public static int studentId;
    public static int teacherId;

    static {
        studentId = 0;
        teacherId = 0;
    }

    //定义通过出身日期计算年龄的方法:用字符串的生日,计算出他的年龄
    public static int birthdayToAge(String birthday) {
        //1.判断当前日期是否在生日日期之前,是:错误*********
        Date birthDate = null;
        try {
             birthDate = new SimpleDateFormat("yyyy-MM-dd").parse(birthday);
        } catch (ParseException e) {
            e.printStackTrace();
            return -1;
        }
        //获取当前系统时间
        Calendar cal = Calendar.getInstance();
        //将"生日"的date转换为Calendar
        Calendar birthCalendar = Calendar.getInstance();
        birthCalendar.setTime(birthDate);
        //如果出生日期大于当前日期,则抛出异常
        if (cal.before(birthCalendar)) {
            return -1;
        }
        //取出系统当前时间的年、月、日部分
        int yearNow = cal.get(Calendar.YEAR);
        int monthNow = cal.get(Calendar.MONTH);
        int dayOfMonthNow = cal.get(Calendar.DAY_OF_MONTH);
        //取出出生日期的年、月、日部分
        int yearBirth = birthCalendar.get(Calendar.YEAR);
        int monthBirth = birthCalendar.get(Calendar.MONTH);
        int dayOfMonthBirth = birthCalendar.get(Calendar.DAY_OF_MONTH);
        //当前年龄与出生年份相减,初步计算年龄
        int age = yearNow - yearBirth;
        //当前月份与出身日期的月份相比,如果月份小于出生月份,则年龄上减1,表示不满多少周岁
        if (monthNow <= monthBirth) {
            if (monthNow == monthBirth) {
                //如果月份相等,在比较日期,如果当前日,小于出身日,也减1,表示不满多少周岁
                if (dayOfMonthNow < dayOfMonthBirth) {
                    age--;
                } else {
                    age--;
                }

            }
        }
        return age;
    }

    //打印ArrayList<? extends Person>的方法
    public static void printPerson(ArrayList<? extends Demo_Person> personList) {
        System.out.println("************************************************************************************");
        System.out.println("编号\t\t姓名\t\t性别\t\t生日\t\t\t年龄\t\t描述");
        System.out.println("------------------------------------------------------------------------------------");
        if (personList == null || personList.size() == 0) {
            System.out.println("【无数据】");
        } else {
            for (int i = 0; i < personList.size(); i++) {
                Demo_Person p = personList.get(i);
                System.out.println(p);
            }
        }
        System.out.println("****************************");

    }
    public static  void printPerson(Demo_Person person){
        System.out.println("************************************************************************************");
        System.out.println("编号\t\t姓名\t\t性别\t\t生日\t\t\t年龄\t\t描述");
        System.out.println(person );
        System.out.println("************************************************************************************");

    }
}

5.定义测试类


import com.itheima.students.Demo_Students;
import com.itheima.teacher.Teacher_Demo;
import com.itheima.utils.Utils_demo;

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

public class Main_Demo {
    public static void main(String[] args) {
        //1.一级菜单
        Scanner scanner = new Scanner(System.in);
        //创建学生集合
        ArrayList<Demo_Students> studentList = new ArrayList<>();
        //创建老师集合
        ArrayList<Teacher_Demo> teacherList = new ArrayList<>();
        while (true) {
            System.out.println("**************************************");
            System.out.println("1.学员信息管理     2.教师信息管理    3.退出");
            System.out.println("**************************************");
            String op = scanner.next();
            switch (op) {
                case "1":
                    //1)学生管理系统
                    StudentManagerSystem(scanner, studentList);
                    break;
                //2)老师管理系统
                case "2":
                    TeacherManagerSystem(scanner, teacherList);
                    break;
                //3)退出
                case "3":
                    System.out.println("谢谢使用,拜拜");
                    System.exit(0);
                    break;
                default:
                    System.out.println("你的输入有问题,请重输!");
            }
        }


    }


    private static void StudentManagerSystem(Scanner scanner, ArrayList<Demo_Students> studentList) {
        while (true) {
            System.out.println("********************************************************");
            System.out.println("1.添加学员   2.修改学员   3.删除学员   4.查询学员    5.返回");
            System.out.println("********************************************************");
            String op = scanner.next();
            switch (op) {
                case "1":
                    //1)添加学员
                    StudentAdd(scanner, studentList);
                    break;
                case "2":
                    //2)修改学员
                    StudentAlter(scanner, studentList);
                    break;
                case "3":
                    //3)删除学员
                    StudentDelete(scanner, studentList);
                    break;
                //4)查询学员
                case "4":
                    StudentFind(scanner, studentList);
                    break;
                //5)退出
                case "5":
                    return;
                default:
                    System.out.println("你的输入有问题,请重输!");
                    break;
            }
        }
    }

    private static void TeacherManagerSystem(Scanner scanner, ArrayList<Teacher_Demo> teacherList) {
        while (true) {
            System.out.println("********************************************************");
            System.out.println("1.添加老师   2.修改老师   3.删除老师   4.查询老师    5.返回");
            System.out.println("********************************************************");
            String op = scanner.next();
            switch (op) {
                case "1":
                    //1)添加老师
                    TeacherAdd(scanner, teacherList);
                    break;
                case "2":
                    //2)修改老师
                    TeacherAlter(scanner, teacherList);
                    break;
                case "3":
                    //3)删除老师
                    TeacherDelete(scanner, teacherList);
                    break;
                //4)查询老师
                case "4":
                    TeacherFind(scanner, teacherList);
                    break;
                //5)退出
                case "5":
                    return;
                default:
                    System.out.println("你的输入有问题,请重输!");
                    break;
            }
        }
    }

    //学生系统封装方法
    private static void StudentAdd(Scanner scanner, ArrayList<Demo_Students> studentList) {
        System.out.println("请输入你的姓名:");
        String name = scanner.next();
        System.out.println("请输入你的性别:");
        String sex = scanner.next();
        System.out.println("请输入你的出生年月(yyyy-MM-dd):");
        String birthday = scanner.next();
        //创建一个Student对象
        Demo_Students stu = new Demo_Students();
        stu.setId(++Utils_demo.studentId);
        stu.setName(name);
        stu.setSex(sex);
        stu.setBirthday(birthday);
        //将对象存储到集合
        studentList.add(stu);
        //提示成功
        System.out.println("【成功】数据已被保存!");

    }


    private static void StudentAlter(Scanner scanner, ArrayList<Demo_Students> studentList) {
        System.out.println("请输入要修改的成员ID:");
        int id = scanner.nextInt();
        //遍历集合,查找这个id
        for (int i = 0; i < studentList.size(); i++) {
            Demo_Students stu = studentList.get(i);
            if (stu.getId() == id) {
                //找到
                //1.回显数据
                System.out.println("【查询结果】");
                Utils_demo.printPerson(stu);
                //2.执行修改
                System.out.println("请输入新姓名[保留原值为0]");
                String newName = scanner.next();
                System.out.println("请输入新性别[保留原值为0]");
                String newSex = scanner.next();
                System.out.println("请输入新生日[保留原值为0]");
                String newBirthday = scanner.next();
                //判断,并执行修改
                if (!"0".equals(newName)) {
                    stu.setName(newName);
                }
                if (!"0".equals(newSex)) {
                    stu.setName(newSex);
                }
                if (!"0".equals(newBirthday)) {
                    stu.setName(newBirthday);
                }
                //3.打印成功,结束方法
                System.out.println("【成功】数据已被修改!");
                return;
            }
        }
        //只要执行到这里,就表示循环自然结束,没找到!!
        System.out.println("学员ID:" + id + " 没找到!");
    }

    private static void StudentDelete(Scanner scanner, ArrayList<Demo_Students> studentList) {

        System.out.println("请输入要修改的成员ID:");
        int id = scanner.nextInt();
        //遍历集合,查找这个id
        for (int i = 0; i < studentList.size(); i++) {
            Demo_Students stu = studentList.get(i);
            if (stu.getId() == id) {
                //找到
                //1.回显数据
                System.out.println("【查询结果】");
                Utils_demo.printPerson(stu);
                //2.确认删除
                System.out.println("【确认删除】您确定要删除这条记录吗?(y/n):");
                String op= scanner.next();
                if (!"y".equals(op)){
                    System.out.println("【取消】操作被取消!");
                    return;
                }else {
                    //执行删除
                    studentList.remove(stu);
                    //4.提示成功,返回
                    System.out.println("【成功】数据已被删除!");
                    return;

                }
            }
        }
        //只要执行到这里,就表示循环自然结束,没找到!!
        System.out.println("【错误】学员ID:" + id + " 没找到!");
    }

    private static void StudentFind(Scanner scanner, ArrayList<Demo_Students> studentList) {
        Utils_demo.printPerson(studentList);
    }

    //老师系统封装方法
    private static void TeacherAdd(Scanner scanner, ArrayList<Teacher_Demo> teacherList) {
        System.out.println("请输入你的姓名:");
        String name = scanner.next();
        System.out.println("请输入你的性别:");
        String sex = scanner.next();
        System.out.println("请输入你的出生年月(yyyy-MM-dd):");
        String birthday = scanner.next();
        //创建一个Student对象
        Teacher_Demo tea = new Teacher_Demo();
        tea.setId(++Utils_demo.studentId);
        tea.setName(name);
        tea.setSex(sex);
        tea.setBirthday(birthday);
        //将对象存储到集合
        teacherList.add(tea);
        //提示成功
        System.out.println("【成功】数据已被保存!");
    }


    private static void TeacherAlter(Scanner scanner, ArrayList<Teacher_Demo> teacherList) {
        System.out.println("请输入要修改的成员ID:");
        int id = scanner.nextInt();
        //遍历集合,查找这个id
        for (int i = 0; i < teacherList.size(); i++) {
            Teacher_Demo tea = teacherList.get(i);
            if (tea.getId() == id) {
                //找到
                //1.回显数据
                System.out.println("【查询结果】");
                Utils_demo.printPerson(tea);
                //2.执行修改
                System.out.println("请输入新姓名[保留原值为0]");
                String newName = scanner.next();
                System.out.println("请输入新性别[保留原值为0]");
                String newSex = scanner.next();
                System.out.println("请输入新生日[保留原值为0]");
                String newBirthday = scanner.next();
                //判断,并执行修改
                if (!"0".equals(newName)) {
                    tea.setName(newName);
                }
                if (!"0".equals(newSex)) {
                    tea.setName(newSex);
                }
                if (!"0".equals(newBirthday)) {
                    tea.setName(newBirthday);
                }
                //3.打印成功,结束方法
                System.out.println("【成功】数据已被修改!");
                return;
            }
        }
        //只要执行到这里,就表示循环自然结束,没找到!!
        System.out.println("学员ID:" + id + " 没找到!");

    }

    private static void TeacherDelete(Scanner scanner, ArrayList<Teacher_Demo> teacherList) {
        System.out.println("请输入要修改的成员ID:");
        int id = scanner.nextInt();
        //遍历集合,查找这个id
        for (int i = 0; i < teacherList.size(); i++) {
            Teacher_Demo tea = teacherList.get(i);
            if (tea.getId() == id) {
                //找到
                //1.回显数据
                System.out.println("【查询结果】");
                Utils_demo.printPerson(tea);
                //2.确认删除
                System.out.println("【确认删除】您确定要删除这条记录吗?(y/n):");
                String op= scanner.next();
                if (!"y".equals(op)){
                    System.out.println("【取消】操作被取消!");
                    return;
                }else {
                    //执行删除
                    teacherList.remove(tea);
                    //4.提示成功,返回
                    System.out.println("【成功】数据已被删除!");
                    return;

                }
            }
        }
        //只要执行到这里,就表示循环自然结束,没找到!!
        System.out.println("【错误】学员ID:" + id + " 没找到!");

    }

    private static void TeacherFind(Scanner scanner, ArrayList<Teacher_Demo> teacherList) {
        Utils_demo.printPerson(teacherList);
    }
}

 

评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

成神之路.java

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值