题目:16版.雇员的工作职责(一)
1、实验要求
本实验要求:以雇员的日常工作为背景,体验“继承”与“属性复用技术”的运用场景。
1-1. 业务说明:
1-1.1. 本实验以公司雇员的日常工作模式为业务背景。
1-1.2. 公司每个雇员每天都需要进行日常的常规工作。
1-1.3. 人事人员既是公司雇员,同时也具有特定的工作职责。
1-1.4. 人事除了日常的常规工作外,还具有为员工发放薪水的工作职责。
1-2. 创建工程并配置环境:
1-2.1. 限制1. 创建实验工程,命名为:SE_JAVA_EXP_E032;
1-2.2. 限制2. 创建包,命名为:cn.campsg.java.experiment;
1-2.3. 限制3. 创建包,命名为:cn.campsg.java.experiment.entity。
1-3. 创建雇员实体类及其相关属性:
1-3.1. 限制1. 在cn.campsg.java.experiment.entity 包中创建雇员类:Employe。
1-3.2. 为Employe类创建如下属性:
1)雇员姓名:字符类型;
2)雇员职级:整数类型;
3)雇员薪水:整数类型。
1-3.3. 为Employe类的属性创建getter/setter方法。
1-3.4. 为Employe类创建0参构造函数。
1-3.5. 为Employe类创建3参构造函数。
1)在3参构造器中,对雇员类的三个属性进行初始化。
1-3.6. 为Employe类创建日常的常规工作方法:
1)限制1. 方法名为:work。
2)限制2. work方法可设定为0参,无返回公共函数。
3)work方法的作用是,模拟雇员的常规工作。
4)work方法需在控制台输出信息:雇员名称 +“ 做好了本职工作! ”
1-4. 创建人事实体类及其相关属性:
1-4.1. 限制1.在cn.campsg.java.experiment.entity包中创建人事类:Hrstaff;
1)Hrstaff类需继承Employe类,以此获取雇员类的所有属性和特征。
1-4.2. 为Hrstaff创建0参构造函数。
1-4.3. 为Hrstaff创建1参构造函数:
1)参数为:人事姓名(字符串类型)。
2)Hrstaff利用继承技术特有的属性共用特性,实现初始化。
3)Hrstaff调用父类Employe的3参构造函数,参数如下:
Employe类的雇员姓名属性 = Hrstaff类的雇员姓名属性。
Employe类的雇员职级属性 = 5(人事雇员等级默认为5)。
Employe类的雇员薪水属性 = 5000(人事雇员薪水默认为5000)。
1-5. 实现人事为雇员发放薪水的操作:
1-5.1. 为Hrstaff类创建发放薪水方法:
1)限制1. 方法名为:paySalary;
2)限制2. paySalary方法带有1个Employe类型参数,用于表述为哪位员工发放工资。
3)限制3. paySalary方法可设定为无返回公共函数。
4)paySalary根据Employe的雇员等级实现薪水发放,发放规则如下:
职级在[1-5]之间,雇员薪水 = 雇员薪水 + 500;
职级在[6-9]之间,雇员薪水 = 雇员薪水 + 800;
职级在[10-15]之间,雇员薪水 = 雇员薪水 + 1000;
超出职级范围,提示:“不存在对应的职级,无法发放额外浮动薪水”
1-6. 显示雇员工作内容和薪水:
1-6.1. 限制1. 在cn.campsg.java.experiment包中创建主类:MainClass;
1-6.2. 为MainClass创建入口主方法:main;
1-6.3. 在main方法中,创建3个不同雇员对象和1个人事对象。
1-6.4. 在main方法中,显示所有雇员和人事的常规工作情况(调用work)。
1-6.5. 在main方法中,实现人事对所有雇员(包括自己)发放薪水的操作。
1-6.6. 工资发放后,在main方法中输出雇员的发薪信息(包括人事):
1)输出信息格式为:员工姓名 +“ 的薪水: ”+ 员工类的雇员薪水
2、实现思路
2-1. 创建工程并配置环境。
2-2. 创建雇员实体类及其相关属性:
2-2.1. 在cn.campsg.java.experiment.entity 包中创建雇员类:Employe;
2-2.2. 为Employe定义如下私有属性成员变量
1)雇员姓名:String name;
2)雇员职级:int level;
3)雇员薪水:int salary。
2-2.3. 为Employe类的属性创建对应的getter/setter方法。
2-2.4. 为Employ类创建默认构造器。
2-2.5. 为Employe类创建3参构造器,创建规则如下:
1)构造器的参数分别对应Employe的三个属性变量;
2)在3参构造器内完成对Employe类三个属性的赋值。
2-2.6. 为Employe创建常规工作方法:work,其形式如下:
- 提示
public void work() {
}
1)在方法体内向控制台输出信息,格式:雇员姓名 +“ 做好了本职工作! ”;
2-3. 创建人事实体类及相关属性:
2-3.1. 在cn.campsg.java.experiment.entity包中创建人事类:Hrstaff。
1)人事类Hrstaff继承自雇员类Employe。
2-3.2. 为人事类Hrstaff创建默认构造器。
2-3.3. 为人事类Hrstaff创建1参构造器,参数为人事的姓名:
1)在1参构造器内调用Employe的3参构造器,实现人事的属性初始化。
2)Hrstaff类属性的初始化可按如下规则设置:
Employe的name属性 = Hrstaff的name属性;
Employe的level属性 = 5;
Employe的salary属性 = 5000。
2-4. 实现人事为雇员发放薪水的操作:
2-4.1. 为Hrstaff类创建特有的发薪方法paySalary,其形式如下:
- 提示
public void paySalary(Employe em) {
}
2-4.2. 实现薪水发放的业务逻辑:
1)在方法内,首先获取通过参数传入的雇员对象职级:
int level = em.getLevel();
2)按实验要求,根据雇员的职级在原有薪水基础上增加额外的补贴金额。
3)超出职级时提示信息为:“不存在对应的职级,无法发放额外浮动薪水”。
2-5. 显示雇员工作内容和薪水:
2-5.1. 在包cn.campsg.java.experiment中创建业务主类:MainClass;
2-5.2. 在MainClass中定义主函数main。
2-5.3. 在main方法中创建3个不同的雇员对象和1个人事对象。
2-5.4. 调用4个对象的work函数,输出所有雇员(包括人事)的工作内容。
2-5.5. 模拟实现人事为雇员(包括自己)发放薪水的操作:
1)调用Hrstaff对象的paySalary方法,并分别传入三个雇员对象。
2)调用Hrstaff对象的paySalary方法,并传入人事对象自己。
3)依次向控制台输出所有雇员的发薪信息,信息格式如下:
雇员对象.getName() +“的薪水:”+ 雇员对象.getSalary()。
3、验证与测试
3-1. 在工程中定位主类MainClass。
3-2. 右键点击MainClass类,依次选择:Run As->Java Application。
3-3. 运行程序,查看输出结果是否符合预期。
package cn.campsg.java.experiment.entity;
public class Employe {
String name ;
int level;
int salary;
public void setLevel(int level) {
this.level = level;
}
public int getLevel() {
return level;
}
public void setName(String name) {
this.name = name;
}
public String getName() {
return name;
}
public void setSalary(int salary) {
this.salary = salary;
}
public int getSalary() {
return salary;
}
public Employe() {//创建默认构造器
super();
}
public Employe(String name,int level,int salary)//创建三参构造器
{
super();
this.name = name;
this.level = level;
this.salary = salary;
}
public void work()//函数
{
System.out.println(name+"做好了本职工作!");
}
}
package cn.campsg.java.experiment.entity;
public class Hrstaff extends Employe{//继承
public Hrstaff()
{
super();
}
public Hrstaff(String name)
{
super(name,5,5000);//初始化
}
public void paySalary(Employe em)
{
int level = em.getLevel();
if (level>=1&&level<=5) em.setSalary(em.getSalary() + 500);
else if (level>=6&&level<=9) em.setSalary(em.getSalary() + 800);
else if (level>=10&&level<=15) em.setSalary(em.getSalary() + 1000);
else {
System.out.println("不存在对应的职级,无法发放额外浮动薪水");
}
System.out.println("员工" + em.getName() + "的薪水:" + em.getSalary());
}
}
package cn.campsg.java.experiment;
import cn.campsg.java.experiment.entity.Employe;
import cn.campsg.java.experiment.entity.Hrstaff;
public class MainClassMainClass {
public static void main(String[] args) {
// TODO Auto-generated method stub
Employe employe1 = new Employe("洪吉江",1,1000);
Employe employe2 = new Employe("李俊生",6,2000);
Employe employe3 = new Employe("赵子万",11,3000);
Hrstaff hr=new Hrstaff("HR");
employe1.work();
employe2.work();
employe3.work();
hr.work();
System.out.println(hr.getName()+"开始发放工资:");
hr.paySalary(employe1);
hr.paySalary(employe2);
hr.paySalary(employe3);
hr.paySalary(hr);
}
}