• 【3】综合案例:学生信息管理


    1、新建学生类

    package com.fiona.model;
    
    public class Student {
        // 成员属性:学号、姓名、性别、年龄、专业
        private String studentNo;
        private String studentName;
        private String studentSex;
        private int studentAge;
        private Subject studentSubject;//当前学生的专业信息(关联方法三)
        
        // 无参构造方法
        public Student() {
    
        }
    
        //多参构造方法,实现对学号、姓名、性别、年龄的赋值
        public Student(String studentNo, String studentName, String studentSex, int studentAge) {
            this.setStudentNo(studentNo);
            this.setStudentName(studentName);
            this.setStudentSex(studentSex);
            this.setStudentAge(studentAge);
        }
        // 多参构造方法,实现对全部属性的赋值
        public Student(String studentNo, String studentName, String studentSex, int studentAge,Subject studentSubject) {
            this.setStudentNo(studentNo);
            this.setStudentName(studentName);
            this.setStudentSex(studentSex);
            this.setStudentAge(studentAge);
            // this.studentAge=studentAge;
            this.setStudentSubject(studentSubject);
        }
    
        public String getStudentNo() {
            return studentNo;
        }
    
        public void setStudentNo(String studentNo) {
            this.studentNo = studentNo;
        }
    
        public String getStudentName() {
            return studentName;
        }
    
        public void setStudentName(String studentName) {
            this.studentName = studentName;
        }
    
        public String getStudentSex() {
            return studentSex;
        }
    
        public void setStudentSex(String studentSex) {
            // 限制性别只能是“男”或者“女”,反之,强制赋值为“男”
            if(studentSex=="男"||studentSex=="女")
                this.studentSex = studentSex;
            else
                this.studentSex="男";
    
        }
    
        public int getStudentAge() {
            return studentAge;
        }
    
        /**
         * 给年龄赋值,限定必须在10--100之间,反之赋值为18
         * @param studentAge 传入的年龄
         */
        public void setStudentAge(int studentAge) {
            if (studentAge < 10 || studentAge > 100)
                this.studentAge = 18;
            else
                this.studentAge = studentAge;
        }
    
        /**
         * 获取专业对象,如果没有实例化,先实例化后再返回
         * @return 专业对象信息
         */
        public Subject getStudentSubject() {
            if(this.studentSubject==null)
                this.studentSubject=new Subject();
            return studentSubject;
        }
    
        public void setStudentSubject(Subject studentSubject) {
            this.studentSubject = studentSubject;
        }
    
        /**
         *
         * 关联方法三:专业作为成员属性传入,两次调用(属性、构造方法、get、set方法,return语句做判断是否实例化需要修改)
         *学生自我介绍的方法
         * @return 自我介绍的信息,包括姓名、学号、性别、年龄
         */
        public String introduction() {
            String str = "学生信息如下:
    姓名:" + this.getStudentName() + "
    学号:" + this.getStudentNo() + "
    性别:"
                    + this.getStudentSex() + "
    年龄:" + this.getStudentAge()+ "
    所报专业名称:" + this.getStudentSubject().getSubjectName() + "
    学制年限:"
                            + this.getStudentSubject().getSubjectLife();
            return str;
        }
    
        /**
         * 关联方法一:除以上的参数外,再添加两个参数,由schooltest传入
         * 学生自我介绍的方法
         * @param subjectName 所学专业名称
         * @param subjectLife 学制年限
         * @return 自我介绍的信息,包括姓名、学号、性别、年龄、所学专业名称、学制年限
         */
        public String introduction(String subjectName, int subjectLife) {
            String str = "学生信息如下:
    姓名:" + this.getStudentName() + "
    学号:" + this.getStudentNo() + "
    性别:"
                    + this.getStudentSex() + "
    年龄:" + this.getStudentAge() + "
    所报专业名称:" + subjectName + "
    学制年限:"
                    + subjectLife;
            return str;
        }
    
        /**
         * 关联方法二:传入对象,可以获取到对象所有的信息
         * 学生自我介绍的方法
         * @param mySubject 所选专业的对象
         * @return自我介绍的信息,包括姓名、学号、性别、年龄、所学专业名称、学制年限
         */
        public String introduction(Subject mySubject){
            String str = "学生信息如下:
    姓名:" + this.getStudentName() + "
    学号:" + this.getStudentNo() + "
    性别:"
                    + this.getStudentSex() + "
    年龄:" + this.getStudentAge() + "
    所报专业名称:" + mySubject.getSubjectName() + "
    学制年限:"
                    + mySubject.getSubjectLife()+"
    专业编号:"+mySubject.getSubjectNo();
            return str;
        }
    }
    Student

    2、新建专业类

    package com.fiona.model;
    /**
     * 专业类(学科类)
     */
    public class Subject {
        // 成员属性:学科名称、学科编号、学制年限、报名选修的学生信息、报名选修的学生个数
        private String subjectName;
        private String subjectNo;
        private int subjectLife;
        private Student[] myStudents;
        private int studentNum;
        
        // 无参构造方法
        public Subject() {
    
        }
    
        // 带参构造,实现对全部属性的赋值
        public Subject(String subjectName, String subjectNo, int subjectLife) {
            // this.subjectName=subjectName;//属性赋值
            this.setSubjectName(subjectName);//方法赋值,安全性高,推荐
            this.setSubjectNo(subjectNo);
            this.setSubjectLife(subjectLife);
        }
        
        public void setSubjectName(String subjectName) {
            this.subjectName = subjectName;
        }
    
        public String getSubjectName() {
            return this.subjectName;
        }
    
        public String getSubjectNo() {
            return subjectNo;
        }
    
        public void setSubjectNo(String subjectNo) {
            this.subjectNo = subjectNo;
        }
    
        public int getSubjectLife() {
            return subjectLife;
        }
    
        // 设置学制年限,限制必须>0
        public void setSubjectLife(int subjectLife) {
            if (subjectLife <= 0)
                return;//如小于等于0,直接结束,返回整型的默认值0
            this.subjectLife = subjectLife;
        }
    
        /**
         * 获取选修专业的学生信息 如果保存学生信息的数组未被初始化,则,先初始化长度200
         * @return 保存学生信息的数组
         */
        public Student[] getMyStudents() {
            if(this.myStudents==null)
                this.myStudents=new Student[200];
            return myStudents;
        }
    
        public void setMyStudents(Student[] myStudents) {
            this.myStudents = myStudents;
        }
    
        public int getStudentNum() {
            return studentNum;
        }
    
        public void setStudentNum(int studentNum) {
            this.studentNum = studentNum;
        }
    
        /**
         * 专业介绍的方法
         * @return 专业介绍的相关信息,包括名称、编号、年限
         */
        public String info() {
            String str = "专业信息如下:
    专业名称:" + this.getSubjectName() + "
    专业编号:" + this.getSubjectNo() + "
    学制年限:"
                    + this.getSubjectLife() + "年";
            return str;
        }
        
        public void addStudent(Student stu){
            /*
             * 1、将学生保存到数组中
             * 2、将学生个数保存到studentNum
             * */
            //1、将学生保存到数组中
            for(int i=0;i<this.getMyStudents().length;i++){
                if(this.getMyStudents()[i]==null){
                    stu.setStudentSubject(this);
                    this.getMyStudents()[i]=stu;
                    //2、将学生个数保存到studentNum
                    this.studentNum=i+1;
                    return;
                }
            }
        }
    }
    Subject

    3、新建测试类,和上面的两个类不在一个包内

    package com.fiona.test;
    import com.fiona.model.Student;
    import com.fiona.model.Subject;
    
    
    public class SchoolTest {
    
        public static void main(String[] args) {
            //测试Subject
            Subject sub1=new Subject("计算机科学与应用","J0001",4);
            System.out.println(sub1.info());
            System.out.println("================================");
    //        测试Student
            //不做关联
    //        Student stu1=new Student("S01","张三","男",200);
    //        System.out.println(stu1.introduction());
            //关联方法三:在student类中增加成员属性
            //专业成为了学生的特征,是个学生就要有专业,关联性更强
            Student stu1=new Student("S01","张三","男",200,sub1);
            System.out.println(stu1.introduction());
    
            System.out.println("================================");
            //关联方案一:传入参数
            Student stu2=new Student("S02","李四","女",17);
            System.out.println(stu2.introduction("计算机科学与应用", 4));
            System.out.println("================================");
            //关联方案二:传入对象
            Student stu3=new Student("S03","王五","男",18);
            System.out.println(stu3.introduction(sub1));//把上面传的sub1放这里
            System.out.println("================================");
            //测试指定专业中到底有多少学生报名
             sub1.addStudent(stu1);
             sub1.addStudent(stu2);
             sub1.addStudent(stu3);
             System.out.println(sub1.getSubjectName()+"的专业中已有"+sub1.getStudentNum()+"学生进行了报名");
        }
    
    }
    SchoolTest
  • 相关阅读:
    ORA-12560:TNS:协议适配器错误
    oracledbconsole db启动问题
    安装tomcat出现failed to install tomcat6 service错误及解决方法(转载)
    关于Eclipse配置tomcat
    js indexof用法indexOf()定义和用法
    手机被没收事件。。。
    一维数组,求最大子数组!!!
    用n(0)次求一个数组里面最大子数组的和(数组可以输入负数)
    jwt认证
    序列化组件
  • 原文地址:https://www.cnblogs.com/haifeima/p/12738484.html
Copyright © 2020-2023  润新知