添加功能:需要知道對于某個學(xué)科鉴象,有多少人選修(即將每個學(xué)生對象添加到學(xué)科類的屬性何鸡,并用一個屬性統(tǒng)計人數(shù))
//Major.java
package com.imooc.student;
public class Major {
private String name;
private String id;
private int year;
private Student[] studentArr;//用于存儲學(xué)生對象
private int studentNum;//統(tǒng)計學(xué)生人數(shù)
/**
* 有參構(gòu)造方法
* @param name
* @param id
* @param year
*/
public Major(String name,String id,int year) {
setName(name);
setId(id);
setYear(year);
}
/**
* 無參構(gòu)造方法
*/
public Major() {
}
public String infoPrint() {
String str = "專業(yè)名稱:"+this.getName()+"\n專業(yè)編號:"+this.getId()+"\n學(xué)制年限:"+this.getYear();
return str;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public int getYear() {
return year;
}
public void setYear(int year) {
this.year = year;
}
/**
* 獲取選修專業(yè)的學(xué)生信息 如果保存學(xué)生信息的數(shù)組未被初始化音比,則,先初始化長度200
* @return 保存學(xué)生信息的數(shù)組
*/
public Student[] getStudentArr() {
if(this.studentArr == null) {
this.studentArr = new Student[200];//***如果數(shù)組沒有實例化洞翩,那么必須要為數(shù)組分配空間
}
return studentArr;
}
public void setStudentArr(Student[] studentArr) {
this.studentArr = studentArr;
}
public int getStudentNum() {
return studentNum;
}
public void setStudentNum(int studentNum) {
this.studentNum = studentNum;
}
/**
* 將每一個學(xué)生對象都添加到studentArr,并計算出人數(shù)已亥,更新到studentNum
* @param stu 需要添加的學(xué)生對象
*/
public void addStudent(Student stu){
for(int i=0;i<this.getStudentArr().length;i++) {
if(this.getStudentArr()[i] == null) {
//this指針妙用
stu.setMajor(this);// major.addStudent 調(diào)用 this 代表學(xué)科這個對象来屠,這里將學(xué)科對象加入到學(xué)生信息中,建立了關(guān)聯(lián)
this.getStudentArr()[i] =stu;
this.setStudentNum(i+1);
return;
}
}
}
}
//Student.java
package com.imooc.student;
public class Student {
private String name;
private String id;
private String gender;
private int age;
private Major major;
/**
* 有參構(gòu)造函數(shù)
* @param name
* @param id
* @param gender
* @param age
*/
public Student(String name,String id,String gender,int age) {
setName(name);
setId(id);
setGender(gender);
setAge(age);
}
/**
* 有參構(gòu)造函數(shù)
* @param name
* @param id
* @param gender
* @param age
*/
public Student(String name,String id,String gender,int age ,Major major) {
setName(name);
setId(id);
setGender(gender);
setAge(age);
setMajor(major);
}
/**
* 無參構(gòu)造函數(shù)捆姜,一般加上
*/
public Student() {
}
/**
* Student信息與Major信息關(guān)聯(lián)的方案一
* @param subjectName 學(xué)科名
* @param subjectYear 學(xué)科年限
* @return
*/
public String infoPrint(String subjectName, int subjectYear) {
String str = "姓名:" + this.getName() + "\n學(xué)號:" + this.getId() + "\n性別:" + this.getGender() + "\n年齡:"
+ this.getAge() + "\n學(xué)科名稱:" + subjectName + "\n學(xué)制年限:" + subjectYear;
return str;
}
/**
* Student信息與Major信息關(guān)聯(lián)的方案二
* @param mySubject 專業(yè)類對象
* @return
*/
public String infoPrint(Major mySubject) {
String str = "姓名:" + this.getName() + "\n學(xué)號:" + this.getId() + "\n性別:" + this.getGender() + "\n年齡:"
+ this.getAge() + "\n學(xué)科名稱:" + mySubject.getName() + "\n學(xué)制年限:" + mySubject.getYear();
return str;
}
/**
* Student信息與Major信息關(guān)聯(lián)的方案三 將Major對象作為自己的屬性
* @return
*/
public String infoPrint() {
String str = "姓名:" + this.getName() + "\n學(xué)號:" + this.getId() + "\n性別:" + this.getGender() + "\n年齡:"
+ this.getAge() + "\n學(xué)科名稱:" + this.major.getName() + "\n學(xué)制年限:" + this.major.getYear();
return str;
}
public Major getMajor() {
return major;
}
public void setMajor(Major major) {
this.major = major;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getGender() {
return gender;
}
public void setGender(String gender) {
this.gender = gender;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
}
//Test.java
package com.imooc.student;
public class Test {
public static void main(String[] args) {
// TODO Auto-generated method stub
Major majorOne = new Major("計算機科學(xué)與技術(shù)","J0001",4);
// System.out.println("============================");
// //方案一
// Student one = new Student("張三","S01","男",18);
// System.out.println(one.infoPrint(majorOne.getName(), majorOne.getYear()));
// System.out.println("============================");
// //方案二
// Student two = new Student("李四","S02","女",17);
// System.out.println(two.infoPrint(majorOne));
// System.out.println("============================");
// //方案三
// Student three = new Student("王五","S03","女",18,majorOne);
// System.out.println(three.infoPrint(majorOne));;
// System.out.println("============================");
//
// majorOne.addStudent(one);
// majorOne.addStudent(two);
// majorOne.addStudent(three);
// System.out.println("該專業(yè)報名人數(shù)為"+majorOne.getStudentNum());
/**
* 如何直接通過一步將學(xué)生和學(xué)科進行關(guān)聯(lián),原來是分成兩步磕仅,
* 1.將學(xué)科對象加入到學(xué)生信息中簸呈。
* 2.將學(xué)生信息對象加入到學(xué)科中店茶。
* 3.現(xiàn)在同this指針,一步搞定
*/
//方案四
Student four = new Student("李六","S04","男",20);
majorOne.addStudent(four);
System.out.println("該專業(yè)報名人數(shù)為"+majorOne.getStudentNum());
}
}