【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 = "学生信息如下:\n姓名:" + this.getStudentName() + "\n学号:" + this.getStudentNo() + "\n性别:"
                + this.getStudentSex() + "\n年龄:" + this.getStudentAge()+ "\n所报专业名称:" + this.getStudentSubject().getSubjectName() + "\n学制年限:"
                        + this.getStudentSubject().getSubjectLife();
        return str;
    }

    /**
     * 关联方法一:除以上的参数外,再添加两个参数,由schooltest传入
     * 学生自我介绍的方法
     * @param subjectName 所学专业名称
     * @param subjectLife 学制年限
     * @return 自我介绍的信息,包括姓名、学号、性别、年龄、所学专业名称、学制年限
     */
    public String introduction(String subjectName, int subjectLife) {
        String str = "学生信息如下:\n姓名:" + this.getStudentName() + "\n学号:" + this.getStudentNo() + "\n性别:"
                + this.getStudentSex() + "\n年龄:" + this.getStudentAge() + "\n所报专业名称:" + subjectName + "\n学制年限:"
                + subjectLife;
        return str;
    }

    /**
     * 关联方法二:传入对象,可以获取到对象所有的信息
     * 学生自我介绍的方法
     * @param mySubject 所选专业的对象
     * @return自我介绍的信息,包括姓名、学号、性别、年龄、所学专业名称、学制年限
     */
    public String introduction(Subject mySubject){
        String str = "学生信息如下:\n姓名:" + this.getStudentName() + "\n学号:" + this.getStudentNo() + "\n性别:"
                + this.getStudentSex() + "\n年龄:" + this.getStudentAge() + "\n所报专业名称:" + mySubject.getSubjectName() + "\n学制年限:"
                + mySubject.getSubjectLife()+"\n专业编号:"+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 = "专业信息如下:\n专业名称:" + this.getSubjectName() + "\n专业编号:" + this.getSubjectNo() + "\n学制年限:"
                + 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

 

posted @ 2020-04-20 16:16  柠檬不萌!  阅读(288)  评论(0编辑  收藏  举报
浏览器标题切换
浏览器标题切换end