从零开始的Java开发1-3-3 综合案例:学生信息管理

Posted karshey

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了从零开始的Java开发1-3-3 综合案例:学生信息管理相关的知识,希望对你有一定的参考价值。

文章目录


编写并测试Subject类

新建一个schoolProj工程,在src里建两个包package,我们的代码就要在这里写。
学科类在model中。

Subject类代码:

package com.model;

public class Subject 

	// 成员属性:学科名称、学科编号、学制年限
	private String subjectName;
	private String subjectNo;
	private int subjectlife;

	// 封装:对应getter和setter方法
	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;
	

	// 无参构造方法
	public Subject() 

	

	// 带参构造方法
	public Subject(String subjectName, String subjectNo, int subjectlife) 
		this.setSubjectName(subjectName);
		this.setSubjectNo(subjectNo);
		this.setSubjectlife(subjectlife);
	

	/**
	 * 专业介绍的方法
	 * 
	 * @return专业介绍的相关信息:名称、编号、年限
	 */
	public String info() 
		String str = "专业信息如下:\\n专业名称:" + this.getSubjectName() + "\\n专业名称:" + this.getSubjectNo() + "\\n专业年限:"
				+ this.getSubjectlife();
		return str;
	

	public static void main(String[] args) 
		// TODO Auto-generated method stub

	



测试类代码:

package com.test;
import com.model.Subject;
public class SchoolTest 

	public static void main(String[] args) 
		// TODO Auto-generated method stub
		//测试Subject
		
		Subject sub1=new Subject("计算机科学与技术","J0001",4);
		System.out.println(sub1.info());	
	


输出:

专业名称:计算机科学与技术
专业名称:J0001
专业年限:4

编写并测试Student类

Student类:

package com.model;

public class Student 
	// 成员属性:学号、姓名、性别、年龄
	private String studentNo;
	private String studentName;
	private String studentSex;
	private int studentAge;

	// 封装:getter和setter函数
	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;
	

	/**
	 * 限制性别为男或女,反之强制为男
	 * 
	 * @param 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;
	

	// 无参构造方法
	public Student() 

	

	// 带参构造方法
	public Student(String studentNo, String studentName, String studentSex, int studentAge) 
		this.setStudentNo(studentNo);
		this.setStudentName(studentName);
		this.setStudentSex(studentSex);
		this.setStudentAge(studentAge);
	

	/**
	 * 学生自我介绍的方法
	 * 
	 * @return 自我介绍的信息,包括姓名,学号,性别,年龄
	 */
	public String introduction() 
		String str = "学生信息如下:\\n姓名:" + this.getStudentName() + "\\n学号:" + this.getStudentNo() + "\\n性别:"
				+ this.getStudentSex() + "\\n年龄:" + this.getStudentAge();
		return str;
	



测试类语句:

Student stu1=new Student("S01","张三","男",19);
System.out.println(stu1.introduction());

输出:

学生信息如下:
姓名:张三
学号:S01
性别:男
年龄:19

测试类语句:

Student stu1=new Student("S01","张三","A",200);

输出:

学生信息如下:
姓名:张三
学号:S01
性别:男
年龄:18

说明setter中的限制有效。

通过方法实现学生与专业关联

方法一

在方法中添加两个参数,分别表示专业名称和学制年限。

/**
	 * 学生自我介绍的方法
	 * 
	 * @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;
	

测试类语句:

Student stu1=new Student("S01","张三","A",200);
System.out.println(stu1.introduction("计算机科学与技术",4));

输出:

学生信息如下:
姓名:张三
学号:S01
性别:男
年龄:18
所报专业名称:计算机科学与技术
学制年限:4

方案二

传入一个学科对象。
注意,这里传入的是对象的引用

//传入一个对象
	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();
		return str;
	

测试类语句:

Subject sub1=new Subject("计算机科学与技术","J0001",4);		
Student stu1=new Student("S01","张三","男",18);
System.out.println(stu1.introduction(sub1));

输出:

学生信息如下:
姓名:张三
学号:S01
性别:男
年龄:18
所报专业名称:计算机科学与技术
学制年限:4

方案三

前两个方案都是把专业信息当作参数传入的,这里我们把专业信息当作学生的成员属性

代码:

public class Student 
	// 成员属性:学号、姓名、性别、年龄、专业
	private String studentNo;
	private String studentName;
	private String studentSex;
	private int studentAge;
	private Subject studentSubject;
	
	// 封装:getter和setter函数
	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;
	
	
	
	/**
	 * 限制性别为男或女,反之强制为男
	 * 
	 * @param 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;
	

	// 无参构造方法
	public Student() 

	

	// 带参构造方法
	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 String introduction() 
		String str = "学生信息如下:\\n姓名:" + this.getStudentName() + "\\n学号:" + this.getStudentNo() + "\\n性别:"
				+ this.getStudentSex() + "\\n年龄:" + this.getStudentAge()+ "\\n所报专业名称:" + this.getStudentSubject().getSubjectName() + "\\n学制年限:"
						+ this.getStudentSubject().getSubjectlife();
		//这里要注意调用学科信息的调用方法:先调用学科对象,再调用学科对象get方法
		return str;
	

测试类语句:

Subject sub1=new Subject("计算机科学与技术","J0001",4);		
Student stu1=new Student("S01","张三","男",18,sub1);
System.out.println(stu1.introduction());

输出:

学生信息如下:
姓名:张三
学号:S01
性别:男
年龄:18
所报专业名称:计算机科学与技术
学制年限:4

方案分析

方案一:传入需要的参数
方案二:传入对象
方案三:在学生类中加入成员属性:学科类属性,通过学生类的成员对象的get方法得到需要的参数

分析:
方案一——容易理解,但参数列表长
方案二——更加简单,获取参数方便
方案三——关联性更强

数据类型

新增需求

想知道 计算机科学与技术 这个学科有多少人报名。

完成学生信息存储

成员属性代码:

// 成员属性:学科名称、学科编号、学制年限、报名选修的学生信息、保存报名选修的学生个数
	private String subjectName;
	private String subjectNo;
	private int subjectlife;
	private Student[] myStudents;
	private int studentNum;

新增的getter和setter代码:

/**
	 * 获取选修专业的学生信息,如果数组未被初始化,则先给它初始化200,再返回
	 * @return 保存学生信息的数组
	 */
	public Student[] getMyStudent() 
		if(this.myStudents==null)
			this.myStudents=new Student[200];
		return myStudents;
	
	
	public void setMyStudent(Student[] myStudents) 
		this.myStudents=myStudents;
	
	

	public int getStudentNum() 
		return studentNum;
	

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

新增的构造方法:

// 带参构造方法:实现对学科名称、编号、学制年限、报名选修的学生数组的赋值
		public Subject(String subjectName, String subjectNo, int subjectlife,Student[] myStudents) 
			this.setSubjectName(subjectName);
			this.setSubjectNo(subjectNo);
			this.setSubjectlife(subjectlife);
			this.setMyStudent(myStudents);
		

编写方法完成学生统计功能

方法如下:

public void addStudent(Student stu) 
		/*
		 * 1、将学生保存到数组中
		 * 2、将学生个数保存在StudentNum中
		 */
			
		for(int i=0;i<this.getMyStudent().length;i++) 
			if(this.getMyStudent()[i]==null) 
				stu.setStudentSubject(this);
				this.getMyStudent()[i]=stu;
				this.studentNum=i+1;
				return;
			
			
	

测试类内容如下:

Subject sub1=new Subject("计算机科学与技术","J0001",4);		
Student stu1=new Student("S01","张三","男",18,sub1);
Student stu2=new Student("S02","李四","女",18,sub1);
Student stu3=new Student("S03","王五","男",19,sub1);
sub1.addStudent(stu1);
sub1.addStudent(stu2);
sub1.addStudent(stu3);
System.out.println(sub1.getStudentNum());

输出:3

一些声明与实例化

两种都可以,但第一种效率更高——用的时候再开空间。

总体代码

Subject 类

package com.model;

public class Subject 

	// 成员属性:学科名称、学科编号、学制年限、报名选修的学生信息、保存报名选修的学生个数
	private String subjectName;
	private Strin

以上是关于从零开始的Java开发1-3-3 综合案例:学生信息管理的主要内容,如果未能解决你的问题,请参考以下文章

从零开始的Java开发1-6-5 集合综合案例:播放器管理

阿里云名师课堂Java面向对象开发42:第03个代码模型综合案例:数据表与简单Java类(多对多)

从零开始的Java开发1-5-4 ArrayListHashSetHashMap 概述与案例

从零开始的Java开发2-9-3 油画商城静态网页案例

Java 微信公众号消息推送(从零开始)

从零开始的Java开发2-9-2 案例:仿Windows计算器