从零开始的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面向对象开发42:第03个代码模型综合案例:数据表与简单Java类(多对多)