Java之综合案例《校园管理系统》

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("【添加成功  √】");

    }
}

  • 1
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值