1、实验要求
本实验要求:以毕业生在人才市场找工作为背景,体验接口与实现类的应用特性。
1-1. 业务说明:
1-1.1. 本实验以大学毕业生找工作为业务背景。
1-1.2. 大学生有不同的专业背景,但通常都需要找工作。
1-1.3. 人才市场根据不同的专业和雇主要求为求职者提供工作机会。
1-1.4. 人才市场需要每类专业的毕业生提供专业平均分和姓名。
1-2. 创建工程并配置环境:
1-2.1. 限制1. 创建实验工程,命名为:SE_JAVA_EXP_E034;
1-2.2. 限制2. 创建包,命名为:cn.campsg.java.experiment;
1-2.3. 限制3. 创建包,命名为:cn.campsg.java.experiment.impl。
1-3. 创建找工作接口类及分数常量:
1-3.1. 限制1. 在cn.campsg.java.experiment 包中创建找工作接口类:SeekJob。
1-3.2. 在SeekJob接口中创建专业课平均分常量:
1)限制1. 常量命名为:SEEKER_AVERAGE_SCORE;
2)常量类型为:浮点类型;
3)常量的值为:85.0f。
1-3.3. 为SeekJob接口创建功能函数(一):
1)限制1. 方法名为:getName。
2)限制2. getName方法设定为0参的公共方法;
3)getName方法的返回值为字符串类型。
4)getName方法的作用是获取求职者的姓名。
1-3.4. 为SeekJob接口创建功能函数(二):
1)限制1. 方法名为:getSeekerAverage
2)限制2. 方法设定为0参的公共方法;
3)getSeekerAverage的返回值为浮点类型;
4)getSeekerAverage方法的作用:获取求职者的专业课平均分数。
1-4. 创建实体类,用于描述软件专业:
1-4.1. 限制1. 在cn.campsg.java.experiment.impl包中创建实体类:
1)类名:SoftwareSeeker。
2)SoftwareSeeker类需实现SeekJob接口。
1-4.2. 为SoftwareSeeker类创建如下属性:
1)求职者姓名:字符串类型(String name);
2)多门专业课分数:浮点数组类型(float[] scores);
3)为属性添加setter/getter方法。
1-4.3. 为SoftwareSeeker创建0参构造函数。
1-4.4. 为SoftwareSeeker创建2参构造函数:
1)第一个参数为:求职者姓名(String name);
2)第二个参数为:多门专业课分数(float[] scores);
3)在此构造器内实现该类对应属性的初始化。
1-4.5. 在SoftwareSeeker类中实现SeekJob接口方法getSeekerAverage:
1)此方法需要返回求职者专业课平均分,平均分计算规则如下:
第1门专业课成绩 * 0.6 + 第2门专业课成绩 * 0.4。
说明:第1门专业课,scores数组第0位成员。
说明:第2门专业课,scores数组第1位成员。
2)本方法作用:模拟计算软件工程专业课平均分。
1-5. 创建实体类,用于描述大数据专业:
1-5.1. 限制1 .在cn.campsg.java.experiment.impl包中创建实体类:
1)类名:BigDataSeeker。
2)BigDataSeeker类需实现SeekJob接口。
1-5.2. 为BigDataSeeker类创建如下属性:
1)求职者姓名:字符串类型(String name);
2)多门专业课分数:浮点数组类型(float[] scores);
3)为属性添加setter/getter方法。
1-5.3. 为BigDataSeeker创建0参构造函数。
1-5.4. 为BigDataSeeker创建2参构造函数:
1)第一个参数为:求职者姓名(String name);
2)第二个参数为:多门专业课分数(float[] scores);
3)在此构造器内实现该类对应属性的初始化。
1-5.5. 在BigDataSeeker类中实现SeekJob接口方法getSeekerAverage:
1)此方法需要返回求职者专业课平均分,平均分计算规则如下:
(第1门专业课成绩 + 第2门专业课成绩) / 2。
说明:第1门专业课,scores数组第0位成员。
说明:第2门专业课,scores数组第1位成员。
2)本方法作用:模拟计算大数据专业课平均分。
1-6. 创建实体类,用于描述人才市场:
1-6.1. 限制1.在cn.campsg.java.experiment包中创建人才市场类:HrMarketer。
1-6.2. 为HrMarketer类创建找工作方法
1)限制1. 方法名为:seekJob;
2)限制2. 方法带有1个SeekJob类型参数,代表求职者;
3)限制3. SeekJob的返回值是字符串且为公共方法。
1-6.3. seekJob方法的业务逻辑实现规则如下:
1)获取求职者的专业平均分数(任意专业);
2)当平均分高于SEEKER_AVERAGE_SCORE时,返回:求职者姓名 +“被本公司录用”。
3)当平均分低于SEEKER_AVERAGE_SCORE时,返回:求职者姓名 +“成绩未达标,不予录用”。
4)seekJob方法作用:根据求职者的专业平均分数判定是否可被录用。
1-7. 显示人才市场为求职者找工作的结果:
1-7.1. 限制1. 在cn.campsg.java.experiment包中创建主类:MainClass;
1-7.2. 为MainClass创建公共静态入口主方法:main;
1-7.3. 在main方法中,创建一个人才市场类服务对象;
1-7.4. 在main方法中,创建2个软件专业求职者和2个大数据专业求职者。
1-7.5. 在main方法中,输出人才市场服务对象为4个不同求职者找工作的结果。
2、实现思路
2-1. 创建工程并配置环境。
2-2. 创建找工作接口类及分数常量:
2-2.1. 在cn.campsg.java.experiment 包中创建找工作接口:SeekJob;
2-2.2. 为SeekJob定义专业课平均分常量:
1)定义公共静态常量:float SEEKER_AVERAGE_SCORE=85.0f;
2-2.3. 为SeekJob类创建接口方法:getName,其形式如下:
+ 提示 public String getName() ; |
2-2.4. 为SeekJob类创建接口方法:getSeekerAverage,其形式如下:
+ 提示 public float getSeekerAverage(); |
2-3. 创建实体类,用于描述软件专业
2-3.1. 在cn.campsg.java.experiment.impl包中创建软件专业实体类:
1)类名:SoftwareSeeker;
2)SoftwareSeeker类需实现SeekJob接口;
2-3.2. 为SoftwareSeeker类定义私有属性:
1)求职者姓名:String name;
2)多门专业课分数:float[] scores = null ;
3)实现属性的setter/getter方法。
+ 提示 1)由于本类是SeekJob的实现类,故需要实现接口的getName方法; 2)name的getter方法正好与接口方法getName一致,一举两得。 |
2-3.3. 为SoftwareSeeker创建0参默认构造器。
2-3.4. 为SoftwareSeeker类创建2参构造器,其形式如下:
+ 提示 public float getSeekerAverage() { } |
1)在2参构造器内完成对该类两个属性的赋值:
求职者姓名(name)= 参数name;
多门专业课分数(scores)= 参数scores。
2-3.5. 在类SoftwareSeeker中实现接口方法:getSeekerAverage,其形式如下:
+ 提示 public float getSeekerAverage() { } |
2-3.6. getSeekerAverage平均分计算规则如下:
1)定义浮点数变量:float average;
2)average = scores[0] * 0.6f + scores[1] * 0.4f;
3)返回专业课平均分数:average。
4)本方法用于模拟计算软件工程专业课平均分。
2-4. 创建实体类,用于描述大数据专业:
2-4.1. 在cn.campsg.java.experiment.impl包中创建大数据专业实体类:
1)类名:BigDataSeeker;
2)BigDataSeeker类需实现SeekJob接口;
2-4.2. 为BigDataSeeker类定义私有属性:
1)求职者姓名:String name;
2)多门专业课分数:float[] scores = null ;
3)实现属性的setter/getter方法。
+ 提示 1)由于本类是SeekJob的实现类,故需要实现接口的getName方法; 2)name的getter方法正好与接口方法getName一致,一箭双雕。 |
2-4.3. 为BigDataSeeker类创建0参构造器。
2-4.4. 为BigDataSeeker类创建2参构造器,并实现:
+ 提示 public BigDataSeeker(String name, float[] scores) { } |
1)在2参构造器内完成对该类两个对应属性的赋值:
求职者姓名(name) = 参数name。
多门专业课分数(scores) = 参数scores。
2-4.5. 在类BigDataSeeker中实现接口方法:getSeekerAverage,其形式如下:
+ 提示 public float getSeekerAverage() { } |
2-4.6. getSeekerAverage平均分计算规则如下:
1)定义浮点数变量:float average ;
2)为变量进行赋值计算:average = (scores[0] + scores[1]) / 2;
3)返回专业课平均分数。
4)本方法用于模拟计算大数据专业课平均分。
2-5. 创建实体类,用于描述人才市场:
2-5.1. 在cn.campsg.java.experiment包中创建类:HrMarketer。
2-5.2. 为类HrMarketer创建默认构造器。
2-5.3. 为HrMarketer类创建找工作方法seekJob,其形式如下:
+ 提示 public String seekJob(SeekJob seeker) { } |
2-5.4. seekJob方法实现的业务逻辑为:
1)调用参数seeker对象的getSeekerAverage函数获取求职者平均分。
2)当求职者平均分大于常量SEEKER_AVERAGE_SCORE时,返回结果如下:
求职者姓名 +“被本公司录用”
3)当求职者平均分小于常量SEEKER_AVERAGE_SCORE时,返回结果如下:
求职者姓名+“成绩未达标,不予录用”
2-6. 显示人才市场为求职者找工作的结果:
2-6.1. 在包cn.campsg.java.experiment中创建业务主类:MainClass;
2-6.2. 在MainClass中定义主函数main;
2-6.3. 在main方法中,创建一个HrMarketer服务对象:hrm;
2-6.4. 在main方法中创建2个软件专业求职者和2个大数据专业求职者:
+ 提示 HrMarketer hrm = new HrMarketer(); SoftwareSeeker soft1 = new SoftwareSeeker("张小 龙",new float[]{10.0f,100.0f}); SoftwareSeeker soft2 = new SoftwareSeeker("李小 龙",new float[]{80.0f,100.0f}); BigDataSeeker bdata1 = new BigDataSeeker("张彦 宏",new float[]{10.0f,100.0f}); BigDataSeeker bdata2 = new BigDataSeeker("李彦 宏",new float[]{80.0f,100.0f}); |
2-6.5. 模拟HrMarketer服务对象为4个求职者找工作:
1)调用HrMarketer对象的seekJob方法依次为四个求职者找工作;
2)通过控制台API,依次输出所有求职者找工作的结果。
3、验证与测试
3-1. 在工程中定位主类MainClass。
3-2. 右键点击MainClass类,依次选择:Run As->Java Application。
3-3. 运行程序,查看输出结果是否符合预期。
// 在cn.campsg.java.experiment.impl包中创建实体类:BigDataSeeker
package cn.campsg.java.experiment.impl;
import cn.campsg.java.experiment.SeekJob;
public class BigDataSeeker implements SeekJob {
private String name;
private float[] scores;
public BigDataSeeker() {
// 0参构造函数
}
public BigDataSeeker(String name, float[] scores) {
this.name = name;
this.scores = scores;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public float[] getScores() {
return scores;
}
public void setScores(float[] scores) {
this.scores = scores;
}
public float getSeekerAverage() {
// 求职者专业课平均分计算规则:(第1门专业课成绩 + 第2门专业课成绩) / 2
return (scores[0] + scores[1]) / 2;
}
}
// 在cn.campsg.java.experiment.impl包中创建实体类:SoftwareSeeker
package cn.campsg.java.experiment.impl;
import cn.campsg.java.experiment.SeekJob;
public class SoftwareSeeker implements SeekJob {
private String name;
private float[] scores;
public SoftwareSeeker() {
// 0参构造函数
}
public SoftwareSeeker(String name, float[] scores) {
this.name = name;
this.scores = scores;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public float[] getScores() {
return scores;
}
public void setScores(float[] scores) {
this.scores = scores;
}
public float getSeekerAverage() {
// 求职者专业课平均分计算规则:第1门专业课成绩 * 0.6 + 第2门专业课成绩 * 0.4
return scores[0] * 0.6f + scores[1] * 0.4f;
}
}
// 在cn.campsg.java.experiment包中创建人才市场类:HrMarketer
package cn.campsg.java.experiment;
public class HrMarketer {
public String seekJob(SeekJob seeker) {
float averageScore = seeker.getSeekerAverage();
if (averageScore > SeekJob.SEEKER_AVERAGE_SCORE) {
return seeker.getName() + "被本公司录用";
} else {
return seeker.getName() + "成绩未达标,不予录用";
}
}
}
// 在cn.campsg.java.experiment包中创建主类:MainClass
package cn.campsg.java.experiment;
import cn.campsg.java.experiment.impl.BigDataSeeker;
import cn.campsg.java.experiment.impl.SoftwareSeeker;
public class MainClass {
public static void main(String[] args) {
HrMarketer hr = new HrMarketer();
SoftwareSeeker softwareSeeker1 = new SoftwareSeeker("SoftwareSeeker1", new float[]{90f, 85f});
SoftwareSeeker softwareSeeker2 = new SoftwareSeeker("SoftwareSeeker2", new float[]{75f, 80f});
BigDataSeeker bigDataSeeker1 = new BigDataSeeker("BigDataSeeker1", new float[]{90f, 90f});
BigDataSeeker bigDataSeeker2 = new BigDataSeeker("BigDataSeeker2", new float[]{80f, 82f});
System.out.println(hr.seekJob(softwareSeeker1));
System.out.println(hr.seekJob(softwareSeeker2));
System.out.println(hr.seekJob(bigDataSeeker1));
System.out.println(hr.seekJob(bigDataSeeker2));
}
}
// 在cn.campsg.java.experiment包中创建找工作接口类:SeekJob
package cn.campsg.java.experiment;
public interface SeekJob {
float SEEKER_AVERAGE_SCORE = 85.0f;
String getName();
float getSeekerAverage();
}