【JAVA】Day15:Java实现学生管理系统

本专栏将从基础开始,循序渐进,由浅入深讲解Java的基本使用,希望大家都能够从中有所收获,也请大家多多支持。
专栏地址:26天高效学习Java编程
相关软件地址:软件地址
所有代码地址:代码地址
如果文章知识点有错误的地方,请指正!大家一起学习,一起进步。
如果感觉博主的文章还不错的话,还请关注、点赞、收藏三连支持一下博主哦

第一章 案例演示

目标:

今天我们要来做一个综合案例,就是学生信息管理系统,接下来我们来演示一下有哪些功能

讲解:

1.1 程序启动

运行MainApp类,启动程序:

1.2 测试学员信息管理模块

1.3 测试【1.查询学员】

1.4 测试【2.添加学员】

1.5 测试【3.修改学员】

  • 输入不存在的编号:

  • 输入存在的编号:

1.6 测试【4.删除学员】

  • 输入不存在的编号:

  • 输入存在的编号,但取消操作:

  • 输入存在的编号,执行删除:

业务逻辑分析:

image-20200614090047729

小结:

第二章 类设计

image-20200614091524213

2.1 父类Person(抽象)

目标:

  • 有学生信息管理和教师信息管理 系统,所以可以使用模板设计模式,定义一个父类,把共有的部分放在Person类中

讲解:

  • 成员属性:

    • id(编号)
    • name(姓名)
    • sex(性别)
    • birthday(生日)
    • age(年龄-由生日计算得出)
  • 构造方法:

    • 无参构造
    • 全参构造
  • 成员方法:

    • toString()
  • 抽象方法:

    • getType():由各子类实现,返回各自的"类型"字符串。
    • getWork():由各子类实现,返回各自的"工作"字符串。

2.2 子类Student

目标:

  • 分析子类Student

讲解:

  • 构造方法
    • 无参构造
    • 全参构造(super调用父类全参构造)
  • 重写抽象方法
    • 重写getType()
    • 重写getWork()

2.3 子类Teacher

目标:

  • 分析子类Teacher

讲解:

  • 构造方法
    • 无参构造
    • 全参构造(super调用父类全参构造)
  • 重写抽象方法
    • 重写getType()
    • 重写getWork()

2.4 工具类Utils类

目标:

  • 添加学员或者教师信息时,ID值+1,还有查询的时候需要打印集合信息以及计算年龄的功能,这些都是通用的,所以可以把这些定义在工具类中

讲解:

  • 全局变量
    • 学员ID值(添加学员信息时,编号由此ID加1生成)
    • 教师ID值(添加教师信息时,编号由此ID加1生成)
  • 全局方法
    • 根据生日计算年龄的方法
    • 打印一个Person对象的方法;
    • 打印一个ArrayList集合的方法;

2.5 启动类

目标:

  • 创建启动类,定义main方法

步骤:

  • 创建启动类,定义main方法

第三章 类制作

目标:

  • 根据之前的分析,分别制作Person,Student,Teacher,Utils类

步骤:

  • 制作父类Person(抽象)
  • 制作子类Student
  • 制作子类Teacher
  • 制作工具类Utils类

讲解:

3.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;
    }

    // 成员方法
    /**
     * @return  返回类型
     */
    public abstract String getType();

    /**
     * @return 返回工作
     */
    public abstract String getWork();

    /**
     * 按照指定格式,返回数据信息
     * @return
     */
    public String show(){
    
    
        return "我是一名:"+getType()+",我的工作是:"+getWork();
    }
}

3.2 子类Student

public class Student extends Person {
    
    

    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.3 子类Teacher

public class Teacher extends Person {
    
    

    public Teacher() {
    
    
    }

    public Teacher(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 工具类Utils类

public class Utils {
    
    

    // 定义一个静态的id变量,用来给学生对象的id赋值
    public static int id ;// 100个对象 id=100 程序停止再启动

    static {
    
    
        id = 0;// 以后可以读取文件中记录的id值,赋为初始值
    }


    // 根据生日计算年龄的方法
    public static int birthdayToAge(String birthday){
    
    
        // 思路:
        // 1. 获取当前日期对象
        Date nowDate = new Date();

        // 2. 创建日期格式化对象,指定日期格式
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");

        // 3. 调用parse()解析方法对字符串生日解析为Date类型的生日
        Date birthdayDate = null;
        try {
    
    
            birthdayDate = sdf.parse(birthday);
        } catch (ParseException e) {
    
    
            e.printStackTrace();
        }

        // 4.比较出生日期是否在当前日期之后,如果是,直接返回 -1;
        if (birthdayDate.after(nowDate)) {
    
    
            return -1;
        }
        // 5.获取当前时间的日历对象
        Calendar cal = Calendar.getInstance();

        // 6.获取当前时间的年,月,日
        int nowYear = cal.get(Calendar.YEAR);
        int nowMonth = cal.get(Calendar.MONTH);
        int nowDay = cal.get(Calendar.DAY_OF_MONTH);

        // 7.通过日历对象调用setTime(Date date)方法,设置日历对象的时间为出生日期的时间
        cal.setTime(birthdayDate);

        // 8.通过设置之后的日历对象获取生日的年,月,日
        int birthdayYear = cal.get(Calendar.YEAR);
        int birthdayMonth = cal.get(Calendar.MONTH);
        int birthdayDay = cal.get(Calendar.DAY_OF_MONTH);

        // 9.使用当前时间的年 - 生日的年 得到一个初步的年龄
        int age = nowYear - birthdayYear;

        // 10.如果当前时间的月 小于 生日的月份,那么初步年龄-1
        if (nowMonth < birthdayMonth){
    
    
            age--;
        }

        // 11.如果当前时间的月 等于生日的月份,但当前时间的日 小于 生日的日,那么初步年龄-1
        if (nowMonth == birthdayMonth){
    
    
            if (nowDay < birthdayDay){
    
    
                age--;
            }
        }
        // 10.直接返回年龄
        return age;
    }

    // 打印Person对象
    public static void printPerson(Person p){
    
    
        System.out.println(p.getId()+"\t\t"+p.getName()+
                "\t\t"+p.getSex()+"\t\t"+p.getBirthday()+
                "\t\t"+p.getAge()+"\t\t"+p.show());
    }

    // 打印集合所有元素
    public static void printArrayList(ArrayList list){
    
    
        System.out.println("**************************************************************************");
        System.out.println("编号\t\t姓名\t\t性别\t\t生日\t\t\t\t年龄\t\t描述");
        // 循环遍历集合
        for (int i = 0; i < list.size(); i++) {
    
    
            // 获取集合元素
            Person p = (Person) list.get(i);
            // 打印对象
            printPerson(p);
        }
        System.out.println("**************************************************************************");
    }
}

第四章 启动类实现

目标:

  • 启动类实现

步骤:

  • 主菜单(一级菜单)
  • 学员信息管理二级菜单
  • 实现学员信息管理二级菜单—查询所有学员
  • 实现学员信息管理二级菜单—添加学员
  • 实现学员信息管理二级菜单—修改学员
  • 实现学员信息管理二级菜单—删除学员

讲解:

4.1 主菜单

public class MainApp {
    
    
    public static void main(String[] args) {
    
    
        Scanner sc = new Scanner(System.in);
        //学生集合
        ArrayList<Student> stuList = new ArrayList<>();
        //教师集合
        ArrayList<Teacher> teaList = new ArrayList<>();
        //主菜单
        while (true) {
    
    
            System.out.println("1.学员信息管理   2.教师信息管理   3.退出");
            int op = sc.nextInt();
            switch (op) {
    
    
                case 1:
                    studentManage(stuList,sc);
                    break;
                case 2:
                    teacherManage(teaList,sc);
                    break;
                case 3:
                    System.out.println("谢谢使用,拜拜!!");
                    System.exit(0);
                default:
                    System.out.println("你的输入有误,请重新输入!");
                    break;
            }
        }
    }
    //教师信息管理
    private static void teacherManage(ArrayList<Teacher> teaList,Scanner sc) {
    
    

    }

    //学员信息管理
    private static void studentManage(ArrayList<Student> stuList,Scanner sc) {
    
    

    }
}

4.2 学员信息管理二级菜单

public class MainApp {
    
    
    public static void main(String[] args) {
    
    

        // 创建Scanner对象,用于键盘录入数据
        Scanner sc = new Scanner(System.in);

        // 创建ArrayList集合,用来存储学生对象
        ArrayList<Student> stuList = new ArrayList<>();

        // 创建ArrayList集合,用来存储老师对象
        ArrayList<Teacher> teaList = new ArrayList<>();

        // 循环生成一级菜单
        while (true) {
    
    
            System.out.println("1 学员信息管理  2 教师信息管理  3 系统退出");
            int num = sc.nextInt();
            switch (num) {
    
    
                case 1:
                    // 进入学员信息管理系统 二级菜单
                    studentManage(stuList, sc);
                    break;
                case 2:
                    // 进入教师信息管理系统 二级菜单
                    teacherManage(teaList, sc);
                    break;
                case 3:
                    // 系统退出
                    System.exit(0);// 程序终止,退出
                    break;
                default:
                    System.out.println("您输入的有误,请重新输入!");
                    break;
            }
        }
    }
    //教师信息管理
    private static void teacherManage(ArrayList<Teacher> teaList,Scanner sc) {
    
    

    }

    //学员信息管理
    private static void studentManage(ArrayList<Student> stuList, Scanner sc) {
    
    
        while (true) {
    
    
            System.out.println("---------------------------------------------");
            System.out.println("【学员信息管理】");
            System.out.println("1.添加学员   2.查询学员  3.修改学员   4.删除学员      5.返回");
            System.out.println();
            System.out.println("请输入功能序号:");

            int num = sc.nextInt();

            // 根据用户输入的序号,进行对应的操作
            switch (num) {
    
    
                case 1:
                    // 添加学员
                    addStudent(stuList, sc);
                    break;
                case 2:
                    // 查询学员
                    selectStudent(stuList, sc);
                    break;
                case 3:
                    // 修改学员
                    updateStudent(stuList, sc);
                    break;
                case 4:
                    // 删除学员
                    deleteStudent(stuList, sc);
                    break;
                case 5:
                    // 返回
                    return;// 结束方法
                default:
                    System.out.println("您输入的功能序号有误,请重新输入!");
                    break;
            }
        }
    }
    //添加学员
    private static void v(ArrayList<Student> stuList, Scanner sc) {
    
    
        
    }
    //修改学员
    private static void updateStudent(ArrayList<Student> stuList, Scanner sc) {
    
    
        
    }
    //删除学员
    private static void deleteStudent(ArrayList<Student> stuList, Scanner sc) {
    
    
        
    }
    //查询所有学员
    private static void selectStudent(ArrayList<Student> stuList, Scanner sc) {
    
    
        
    }
}

4.3 查询所有学员

//查询所有学员
private static void selectStudent(ArrayList<Student> stuList, Scanner sc) {
    
    
        System.out.println("【查询结果:】");
        // 如果集合中没有数据,就显示没有数据,结束方法
        if (stuList.size() == 0) {
    
    
            System.out.println("没有数据...");
            return;
        }

        Utils.printList(stuList);
    }

4.4 添加学员

//添加学员
 private static void addStudent(ArrayList<Student> stuList, Scanner sc) {
    
    
        // next()方法不会获取回车或者空格,或者tab键 ,而nextLine会获取
        System.out.println("请输入学员姓名:");
        String name = sc.next();

        System.out.println("请输入学员性别:");
        String sex = sc.next();

        System.out.println("请输入出生日期,格式为yyyy-MM-dd:");
        String birthday = sc.next();

        // 创建一个Student对象
        Student stu = new Student();

        // 给Student对象赋值
        stu.setId(++Utils.sid);
        stu.setName(name);
        stu.setSex(sex);
        stu.setBirthday(birthday);
        // 调用工具类方法根据出生日期计算年龄
        int age = Utils.birthdayToAge(birthday);
        stu.setAge(age);

        // 把该Student对象,添加到stuList集合中
        stuList.add(stu);

        System.out.println("添加元素成功...");
    }

4.5 修改学员

//修改学员
  private static void updateStudent(ArrayList<Student> stuList, Scanner sc) {
    
    
        System.out.println("请输入要修改学员的编号:");
        // 获取用户输入的学生编号
        int num = sc.nextInt();

        // 判断stuList集合中是否存在该学员编号
        // 循环遍历stuList集合,获取集合中的元素
        for (int i = 0; i < stuList.size(); i++) {
    
    
            Student stu = stuList.get(i);
            // 如果存在该学员编号,就进行修改,修改完了之后保存信息,结束方法
            if (stu.getId() == num) {
    
    
                //获取用户输入的修改信息
                System.out.println("请输入学员姓名(保留原值输入0):");
                String name = sc.next();

                System.out.println("请输入学员性别(保留原值输入0):");
                String sex = sc.next();

                System.out.println("请输入学员出生日期,格式为yyyy-MM-dd :");
                String birthday = sc.next();

                // 判断修改
                if (!"0".equals(name)) {
    
    
                    // 输入的一定不是0
                    stu.setName(name);
                }

                if (!"0".equals(sex)) {
    
    
                    stu.setSex(sex);
                }

                if (!"0".equals(birthday)) {
    
    
                    stu.setBirthday(birthday);
                    stu.setAge(Utils.birthdayToAge(birthday));
                }

                System.out.println("修改成功");
                // 结束方法
                return;
            }

        }
        // 如果不存在该学员编号,输出错误信息,结束方法
        System.out.println("【错误】学员ID:" + num + " 未找到!");

    }

4.6 删除学员

//删除学员
private static void deleteStudent(ArrayList<Student> stuList, Scanner sc) {
    
    
        System.out.println("请输入要删除学员的编号:");
        // 1.获取用户输入的学员编号
        int num = sc.nextInt();

        // 2.判断stuList集合中是否存在该学员编号
        for (int i = 0; i < stuList.size(); i++) {
    
    
            // 获取集合中的元素
            Student stu = stuList.get(i);

            if (stu.getId() == num) {
    
    
                // 2.1 如果存在该学员编号,就输出该学员信息,并提示是否删除
                System.out.println("【查询结果】要删除的学员信息:");
                Utils.printPerson(stu);
                System.out.println("【确认】您确定要删除这条信息吗(y/n),y代表删除,n代表取消删除:");
                // 获取用户输入
                String str = sc.next();

                // 2.1.1 如果用户输入的是y,就直接删除,提示删除成功,结束方法
                if("y".equals(str)){
    
    
                    stuList.remove(i);// 根据索引删除元素
                    System.out.println("删除成功!");
                }
                // 2.1.2 如果用户输入的是n,就不删除,提示取消删除,结束方法
                if("n".equals(str)){
    
    
                    System.out.println("【取消】删除操作被取消!");
                }
                return;
            }

        }

        // 2.2 如果不存在该学员编号,就提示错误信息,结束方法
        System.out.println("【错误】学员ID:" + num + " 未找到!");
    }

猜你喜欢

转载自blog.csdn.net/Learning_xzj/article/details/124767114
今日推荐