学生信息管理

188 阅读2分钟

ctrl+shift+f 格式化快捷键

ctrl+/ 单行注释(取消)快捷键

构造方法主要实现功能:为对象的初始信息赋值

package com.imooc.model;

public class Student {
	//方案三:在类中添加专业对象作为属性,通过其属性获得相关信息
	//成员属性:学号、姓名、性别、年龄、专业
	private String studentNo;
	private String studentName;
	private String studentSex;
	private int studentAge;
	private Subject studentSubject;//默认值为null

	// 无参构造方法
	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.setStudentSubject(studentSubject);
	}
	/**
	 * 获取专业对象,如果没有实例化,先实例化后再返回
	 * @return 专业对象信息
	 */
	public Subject getStudentSubject() {
		//确认studentSubject对象是否被实例化
		//如未初始化就调用,会产生空指针
		if(this.studentSubject==null)
			this.studentSubject=new Subject();
		return studentSubject;
	}

	public void setStudentSubject(Subject studentSubject) {
		this.studentSubject = 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.equals("男") || studentSex.equals("女")) {
			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 = studentAge;
		} else {
			this.studentAge = 18;
		}
	}

	/**
	 * 学生自我介绍的方法
	 * 
	 * @return 自我介绍的信息,包括姓名、学号、性别、年龄
	 */
	/*public String introduction() {
		String str = "学生信息如下:\n姓名:" + this.getStudentName() + "\n学号:" + this.getStudentNo() + "\n性别:"
				+ this.getStudentSex() + "\n年龄:" + this.getStudentAge();
		return str;
	}*/
/**
 * 学生自我介绍的方法
 * @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;
	}
	// 通过方法实现学生与专业关联
	// 方案二:在方法中添加1个专业对象作为参数,通过其属性获得相关信息
	/**
	 * 学生自我介绍的方法
	 * @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;
	}
	//方案三
	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() +"\n学科编号:"+this.getStudentSubject().getSubjectNo();
		return str;
	}
}


package com.imooc.model;
/**
 * 专业类
 * @author Hurric4ne
 *
 */
public class Subject {
	// 成员属性:学科名称、学科编号、学科年限、报名选修的学生信息、报名选修的学生个数
	private String subjectName;
	private String subjectNo;
	private int subjectLife;
	private Student[] myStudents;
	private int studentNum;
	public int getStudentNum() {
		return studentNum;
	}

	public void setStudentNum(int studentNum) {
		this.studentNum = studentNum;
	}

	/**
	 * 获取选修专业的学生信息,如果保存学生信息的数组未被初始化,则先初始化长度200
	 * @return 保存学生信息的数组
	 */
	//数组初始化后,只是完成数组空间开辟,但是此时数组每个成员为null
	//如果在此时访问对象数组当中的成员属性会产生空指针异常
	public Student[] getMyStudents() {
		if(this.myStudents==null)
			this.myStudents=new Student[200];
		return myStudents;
	}

	public void setMyStudents(Student[] myStudents) {
		this.myStudents = myStudents;
	}
	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;
			}
		}
		
	}
	// 无参构造方法
	public Subject() {

	}

	// 带参构造方法,实现对学科名称、学科编号、学科年限赋值
	public Subject(String subjectName, String subjectNo, int subjectLife) {
		// this.subjectName=subjectName;
		// 推荐使用下面的语句,单纯的赋值会与set/get方法中的业务逻辑语句miss
		this.setSubjectName(subjectName);
		this.setSubjectNo(subjectNo);
		this.setSubjectLife(subjectLife);
	}
	// 带参构造,实现对全部属性的赋值
	public Subject(String subjectName, String subjectNo, int subjectLife,Student[] myStudents) {
		this.setSubjectName(subjectName);
		this.setSubjectNo(subjectNo);
		this.setSubjectLife(subjectLife);
		this.setMyStudents(myStudents);
	}
	public String getSubjectName() {
		return subjectName;
	}

	public void setSubjectName(String subjectName) {
		this.subjectName = 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;
		this.subjectLife = subjectLife;
	}
	/**
	 * 专业介绍的方法
	 * @return 专业介绍的相关信息,包括名称、编号、年限
	 */
	//返回值不要设为void,String这种写法能提高代码的复用性
	public String info() {
		String str = "专业信息如下:\n专业名称:" + this.getSubjectName() + "\n专业编号:" + this.getSubjectNo() + "\n學制年限:"
				+ this.getSubjectLife() + "年";
		return str;
	}
}


package com.imooc.test;

import com.imooc.model.Student;
import com.imooc.model.Subject;

public class SchoolTest {

	public static void main(String[] args) {
		//测试Subject
		Subject sub1=new Subject("计算机科学","J001",4);
		//System.out.println(sub1.info());
		//测试Student
		//单向关联,将专业赋值给学生
		Student stu1=new Student("S01","张三","男",24);
//		System.out.println(stu1.introduction());
//		Student stu2=new Student("S02","李四","女",19);
//		System.out.println(stu2.introduction("软件", 5));
//		Student stu3=new Student("S03","王五","男",23);
//		System.out.println(stu3.introduction(sub1));
		//测试指定专业中到底有多少学生报名
		//单向关联,将学生赋值给专业
		sub1.addStudent(stu1);
//		sub1.addStudent(stu2);
//		sub1.addStudent(stu3);
		System.out.println(sub1.getSubjectName()+"专业有"+sub1.getStudentNum()+"个学生");
	}

}