输入学号类封装_封装-小项目练习

10454141bc627796e25383062c272670.png

封装-小项目练习

来自 http:// imooc.com 《Java工程师课程》

1.拟实现项目信息:

2fbd1c059fc62b66bae5327087fed646.png

adc6fbbe708cca97e93bbacd9b658dc6.png

e5c4506881e830a732296c08f2963643.png

2.信息分析

1.专业类:

  • 属性:专业名称,编号,学制年限
  • 方法:介绍专业相关信息

2.学生类:

  • 属性:专业名称,编号,学制年限
  • 方法:介绍学生相关信息

3.两个类的信息关联(实现代码尽可能少)

  • 方案1:学生类介绍方法中,添加专业名称,学制年限两个参数;
  • 方案2:学生类介绍方法中,添加一个专业对象作为参数,从中获取专业名称,学制年限;
  • 方案3:学生类中,添加一个专业对象作为属性,从中获取专业名称,学制年限

3.代码实现

Subject.java

package com.imooc.Subject;
/**
 * @author sbt
 * 写完后才发现这个其实可以都将其作为静态属性的
 */
public class Subject {

    // 成员属性:专业名称,编号,学制年限,以及后面拓展所需要的 学生数组和学生总数
    private String name;
    private String id;
    private int duration;
    private Student[] myStudents;
    private int studentNum;

    //无参构造方法 无论是否用到,先显式把这个写上
    public Subject(){}

    //带有名称,编号,学制年限的有参构造方法
    public Subject(String name,String id,int duration){
        this.setName(name);
        this.setId(id);
        this.setDuration(duration);
    }

    //带参构造,实现对所有属性的初始化
    public Subject(String name,String id,int duration,Student[] myStudents){
        this.setName(name);
        this.setId(id);
        this.setDuration(duration);
        this.setmyStudents(myStudents);
    }

    public Student[] getmyStudents() {
        if(this.myStudents == null)
            this.myStudents=new Student[200];
        return myStudents;
    }

    public void setmyStudents(Student[] myStudents) {
        this.myStudents = myStudents;
    }

    public void setName(String name){
        this.name = name;
    }

    public void setId(String id) {
        this.id = id;
    }

    public void setDuration(int duration) {
        if( duration >0)
            this.duration = duration;
        else
            System.out.println("学制年限设置错误:年限必须要大于0");
    }

    public String getName() {
        return name;
    }

    public String getId() {
        return id;
    }

    public int getDuration() {
        return duration;
    }

    public int getStudentNum() {
        return studentNum;
    }

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

    /**
     * 专业介绍方法
     * @return
     */
    public String info(){
        String str="专业信息如下:n专业名称:" + this.name + "n专业编号:" + this.id
                + "n学制年限:" + this.duration + "年";
        return str;
    }

Student.java

package com.imooc.Subject;

public class Student {
    // 成员属性:学生姓名,学号,性别,年龄,以及方案3的专业对象相关信息
    private String name;
    private String id;
    private String gender;
    private int age;
    private Subject studentSubject; // 方案3:将项目对象作为属性

    public Student(){}
    //将专业与学生相关联,少写代码,有三种方法比较好:直接传参,将对象作为参数,和将对象作为类属性
    public Student(String name,String id,String gender,int age) {
        this.name=name;
        this.id=id;
        this.gender=gender;
        this.age=age;
    }
    //带参构造,实现对所有属性的初始化
    public Student(String name,String id,String gender,int age, Subject studentSubject) {
        this.setName(name);
        this.setId(id);
        this.setGender(gender);
        this.setAge(age);
        this.setStudentSubject(studentSubject);
    }

    public Subject getStudentSubject(){
        if(studentSubject==null){
            Subject studentSubject = new Subject();
        }
        return studentSubject;
    }

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

    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) {
        if(age >18 && age <100)
            this.age = age;
        else
            this.age = 18;
    }

    /**
     * 学生信息展示
     * 方法1 直接传参,
     * @param subjectname 专业名称
     * @param subjectyear 专业年限
     * @return 学生个人信息
     */

    public String info(String subjectname,int subjectyear) {
        String str = "学生信息如下:n姓名:" + this.getName() + "n学号:" + this.getId()
                + "n性别:" + this.getGender() + "n年龄:" + this.getAge() + "n所报专业名称:"
                + subjectname + "n学制年限:" + subjectyear;
        return str;
    }

    /**
     * 学生信息展示的方法
     * 方法2,将对象作为参数
     * @return 姓名,学号,性别,年龄
     */
    public String info(Subject mySubject) {
        String str = "学生信息如下:n姓名:" + this.getName() + "n学号:" + this.getId()
                + "n性别:" + this.getGender() + "n年龄:" + this.getAge() + "n所报专业名称:"
                + mySubject.getName() + "n学制年限:" + mySubject.getDuration();
        return str;
    }

    /**
     * 方法3 将Subject对象作为Student类的一个属性
     * @return
     */
    public String info() {
        String str = "学生信息如下:n姓名:" + this.getName() + "n学号:" + this.getId()
                + "n性别:" + this.getGender() + "n年龄:" + this.getAge() + "n所报专业名称:"
                + this.getStudentSubject().getName() + "n学制年限:" + this.getStudentSubject().getDuration();
        return str;
    }
}

Test.java

package com.imooc.Subject;

public class Test {
    public static void main(String[] args) {
        Subject sub1=new Subject("计算机科学与应用","J0001", 4);
        System.out.println(sub1.info());
        System.out.println("~~~~~~");

        Student stu1=new Student("张三","S01","男",18);
        System.out.println(stu1.info("计算机科学与应用",4));
        System.out.println("~~~~~~");

        Student stu2=new Student("李四","S02","女",17);
        System.out.println(stu2.info(sub1));
        System.out.println("~~~~~~");

        Student stu3=new Student("王五","S03","男",18,sub1);
        System.out.println(stu3.info());

        //测试指定专业中有多少学生报名
        sub1.addStudent(stu1);
        sub1.addStudent(stu1);
        sub1.addStudent(stu1);
        System.out.println(sub1.getName() + "的专业中有" + sub1.getStudentNum() + "个学生在学习。");
    }
}

4.总结

​ 个人觉得这是一个比较好的锻炼自己的面对对象,和封装以及实现两个类之前如何相互关联的练习项目,特别是以对象作为方法参数以及作为另一个类的属性的思想。因此记录一下。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值