学生管理系统(初学者--只包含封装)

案例分析

1.其中的相关类信息

1.专业类
属性:专业编号、专业名称、学限年限
方法:介绍(介绍专业相关信息)
2.学生类
属性:专业编号、专业名称、学限年限
方法:自我介绍(介绍学生相关信息)

实现专业与学生关联

方案1:在学生类的自我介绍方法中,添加两个参数:专业名称、学制年限

方案2:在学生类的自我介绍方法中,添加一个专业对象作为参数,从中获取专业名称、学制年限

方案3:在学生类中,添加一个专业对象作为属性,从中获取专业名称、学制年限

实现方案

在专业类中添加属性:学生数组、学生总人数添加方法:新增学生(功能:将新增学生插入数组,并获取学生总人数)

学生类代码

package com.list.model;

/**
 * 学生类
 * 
 * @author List
 *
 */
public class Student {
	private String studentName;
	private String studentNo;
	private String studentSex;
	private int studentAge;
	private Subject studentSubject;//建立Subject类的对象
	


	// 无参构造
	public Student() {

	}

	// 带参构造对学生的全部属性进行赋值
		public Student(String studentName, String studentNo, String studentSex, int studentAge,Subject studentSubject) {
			this.setStudentName(studentName);
			this.setStudentNo(studentNo);
			this.setStudentSex(studentSex);
			this.setStudentAge(studentAge);
			this.setStudentSubject(studentSubject);
		}

	
	// 带参构造对学生的姓名,学号,性别,年龄属性进行赋值
	public Student(String studentName, String studentNo, String studentSex, int studentAge) {
		this.setStudentName(studentName);
		this.setStudentNo(studentNo);
		this.setStudentSex(studentSex);
		this.setStudentAge(studentAge);
	}

	// 以下是封装接口
	
	/**
	 * 选修专业学生信息,如为初始化将自动初始化
	 * @return 选修专业学生信息
	 */
	
	public String getStudentName() {
		return studentName;
	}

	public void setStudentName(String studentName) {
		this.studentName = studentName;
	}

	public String getStudentNo() {
		return studentNo;
	}

	public void setStudentNo(String studentNo) {
		this.studentNo = studentNo;
	}

	public String getStudentSex() {
		return studentSex;
	}

	public void setStudentSex(String studentSex) {
		if (studentSex == "男" || studentSex == "女")
			this.studentSex = studentSex;
		else
			this.studentSex = "男";
	}

	public int getStudentAge() {
		return studentAge;
	}

	/**
	 * 对年龄进行限制
	 * 
	 * @param studentAge
	 */
	public void setStudentAge(int studentAge) {
		if (studentAge > 10 && studentAge < 100)
			this.studentAge = studentAge;
		else
			this.studentAge = 18;
	}
/**
 * 限制如果专业信息为空则实例化进行赋值
 * @return 专业信息
 */
	//方法三的应用
	public Subject getStudentSubject() {
		if(this.studentSubject==null)
			this.studentSubject=new Subject();
		return studentSubject;
	}

	public void setStudentSubject(Subject studentSubject) {
		this.studentSubject = studentSubject;
	}

	/**
	 * 学生信息
	 * 
	 * @return 学生信息如下:姓名,学号,性别,年龄
	 */
	public String infoStu() {
		String info = "学生信息:\n姓名:" + getStudentName() + "\n学号:" + getStudentNo() + "\n性别:" + getStudentSex() + "\n年龄:"
				+ getStudentAge()+"\n专业名称:"
				//这是方法三中利用对象作为属性,先this调用studentSubject的get方法再调用Subject中的getSubjectName
				+this.getStudentSubject().getSubjectName()+"\n专业编号:"
				+this.getStudentSubject().getSubjectNo()+"\n专业年限:"
				+this.getStudentSubject().getSubjectLife();
		return info;
	}
	/**
	 * 学生信息
	 * @param subjectName 专业名称
	 * @param subjectLife 学年年限
	 * @return 学生信息如下:姓名,学号,性别,年龄,专业名称,年限
	 */
	//方法的重载方法一
	public String infoStu(String subjectName,int subjectLife) {
		String info = "学生信息:\n姓名:" + getStudentName() + "\n学号:" + getStudentNo() + "\n性别:" + getStudentSex() + "\n年龄:"
				+ getStudentAge()+"\n专业名称:"+subjectName+"\n专业年限:"+subjectLife;
		return info;
	}
	/**
	 * 学生信息
	 * @param mySubject 专业信息对象
	 * @return 学生信息如下:姓名,学号,性别,年龄,专业名称,专业编号,年限
	 */
	//方法的重载方法二:;利用对象
	public String infoStu(Subject mySubject) {
		String info = "学生信息:\n姓名:" + getStudentName() + "\n学号:" + getStudentNo() + "\n性别:" + getStudentSex() + "\n年龄:"
				+ getStudentAge()+"\n专业名称:"+mySubject.getSubjectName()+"\n专业编号:"+mySubject.getSubjectNo()+"\n专业年限:"+mySubject.getSubjectLife();
		return info;
	}
	
	
}

专业类代码

package com.list.model;
/**
 * 专业类
 * @author List
 *
 */
public class Subject {
	private String subjectName;
	private String subjectNo;
	private int subjectLife;
	private Student[] myStudents;//建立Student类的数组对象
	private int studentNumber;
	
	//这是无参构造
	public Subject() {
		
	}
	//这是用于属性赋值的带参构造
	public Subject(String subjectName,String subjectNo,int subjectLife) {
//		this.subjectName=subjectName;
//		this.subjectNO=subjectNo;
//		this.subjectLife=subjectLife;
		//方法赋值安全系数高一些
		this.setSubjectLife(subjectLife);
		this.setSubjectName(subjectName);
		this.setSubjectNo(subjectNo);
	}
	
	public Student[] getMyStudents() {
		if(this.myStudents==null)
			this.myStudents=new Student[10];
		return myStudents;
	}
	public void setMyStudents(Student[] myStudents) {
		this.myStudents = myStudents;
	}
	public int getStudentNumber() {
		return studentNumber;
	}
	public void setSutdentNumber(int studentNumber) {
		this.studentNumber = studentNumber;
	}
	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;
	}
	public void setSubjectLife(int subjectLife) {
		if(subjectLife<=0)
			return ;
		this.subjectLife = subjectLife;
	}
	
/**
 * 专业信息
 * @return 返回的专业信息如下:专业名称,专业编号,专业年限
 */
	public String infoSub() {
		String info="专业信息如下:\n专业名称:"+getSubjectName()+"\n专业编号:"+getSubjectNo()+"\n专业年限"+getSubjectLife();
		return info;
	}
	/**
	 * 添加学生信息到本专业中
	 * @param stu 对象参数
	 */
	public void addStudent(Student stu) {
		for(int n=0;n<this.getMyStudents().length;n++) {
			if(this.getMyStudents()[n]==null) {
				//这句也是建立学生信息与专业信息的关联,也是程序的优化!
				stu.setStudentSubject(this);//通过此方法建立的Student对象调用studentSubject对象的set,这里的this是谁(对象)调用addStudent方法就是this.谁(对象)
				//这句只是专业学生信息和学生建立了关联,并没有建立学生信息与专业信息的关联
				this.getMyStudents()[n]=stu;//调用myStudents的get,因为返回值是一个Student的数组,所以要加下标,赋值是对象参数
				this.studentNumber=n+1;//此处是对专业进行计数
				return ;//直接结束addStudent方法
			}
		}
		
	}
	/**
	 * 显示全部此专业学生信息
	 */
	public void showStudent() {
		int list;
		for(int n=0;n<this.getMyStudents().length;n++) {
			if(this.getMyStudents()[n]!=null) {
				list=n+1;
				System.out.println("序号:"+list);
				System.out.print("姓名:"+this.getMyStudents()[n].getStudentName()+" ");
				System.out.print("学号:"+this.getMyStudents()[n].getStudentNo()+" ");
				System.out.print("性别:"+this.getMyStudents()[n].getStudentSex()+" ");
				System.out.println("年龄:"+this.getMyStudents()[n].getStudentAge()+" ");
			}
		    else {
		        list=n+1;
		    	System.out.println("当前序号"+list+"无学生信息");
		    	break;
		    }
		}
		    	
			
	}

}

测试类代码

package com.list.test;
import com.list.model.Subject;
import com.list.model.Student;
/**
 * 测试类
 * 对于学生与专业信息关联,方法三的关联性最好
 * @author List
 *
 */
public class SchoolTest {
	public static void main(String[] args) {
		Subject sub=new Subject("计算机软件工程","J0001",4);
		Student stu1=new Student("张三","s01","男",18);
		Student stu2=new Student("李四","s02","女",17);
		Student stu3=new Student("王五","s03","男",18);
		Student stu4=new Student("刘六","s04","女",17,sub); //这是方法三中带参赋值全部属性,需要传递对象
		//一次一次实现查看信息
		/*System.out.println(test.getSubjectName());
		System.out.println(test.getSubjectNo());
		System.out.println(test.getSubjectLife());*/
		//利用方法查看信息
		/*System.out.println(sub.infoSub());
		System.out.println("_____***_____");
		System.out.println(stu1.infoStu());
		System.out.println("_____***_____");
		System.out.println(stu2.infoStu("计算机软件工程",4));//方法一
		System.out.println("_____***_____");
		//方法重载2中是参数是对象,传送值也应该传入对象
		System.out.println(stu3.infoStu(sub));//方法二
		System.out.println("_____***_____");
		System.out.println(stu4.infoStu());*///方法三
		
		//添加学生信息
		sub.addStudent(stu1);
		sub.addStudent(stu2);
		sub.addStudent(stu3);
		sub.addStudent(stu4);
		sub.showStudent();
	}

}

总结

1.案例中是在同Project下,但使用的是不同包下进行测试的
项目名:SchoolProj
包名:com.list.model 中类 Student 与Subject
com.list.test中类 SchoolTest
2.由于现阶段只运用了封装的知识 并没有继承,所以在学生类和专业类中展示信息并没有重写Object中的toString方法

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Code.Knight

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值