我的Java学习之路(四)-- 模拟给员工发工资

运用到面向对象的封装、继承、多态,运用到了接口

一、代码实现功能思路

1. 定义员工Employee类。包含属性:姓名,薪资,银行卡余额

Employee.java

package com.feonix;

/**
 * 员工类
 * 
 * @author FeoniX
 *
 */
public class Employee {
	// 姓名
	private String name;
	// 薪资
	private double salary;
	// 银行卡余额
	private double cardBalance;

	/**
	 * 员工类的无参构造器
	 */
	public Employee() {
		super();
	}

	/**
	 * 员工类的有参构造器
	 * 
	 * @param name 姓名
	 * @param salary 薪资
	 * @param cardBalance2 银行卡余额
	 */
	public Employee(String name, double salary, double cardBalance2) {
		this.name = name;
		this.salary = salary;
		this.cardBalance = cardBalance2;
	}

	/**
	 * 计算员工的工资
	 * 
	 * @return
	 */
	public double calcMoney() {
		return salary;
	}

	/**
	 * 获取姓名
	 * 
	 * @return
	 */
	public String getName() {
		return name;
	}

	/**
	 * 设置姓名
	 * 
	 * @param name
	 */
	public void setName(String name) {
		this.name = name;
	}

	/**
	 * 获取薪资
	 * 
	 * @return
	 */
	public double getSalary() {
		return salary;
	}

	/**
	 * 设置薪资
	 * 
	 * @param salary
	 */
	public void setSalary(double salary) {
		this.salary = salary;
	}

	/**
	 * 获取银行卡余额
	 * 
	 * @return
	 */
	public double getCardBalance() {
		return cardBalance;
	}

	/**
	 * 设置银行卡余额
	 * 
	 * @param cardBalance
	 */
	public void setCardBalance(double cardBalance) {
		this.cardBalance = cardBalance;
	}
}

2. 定义经理Manager类继承Employee类,包含属性:奖金

Manager.java

package com.feonix;

/**
 * 经理类 继承 员工类
 * 
 * @author FeoniX
 *
 */
public class Manager extends Employee {
	// 奖金
	private double bonus;

	/**
	 * 经理类的无参构造器
	 */
	public Manager() {
		super();
	}

	/**
	 * 经理类的有参构造器
	 * 
	 * @param name 姓名
	 * @param salary 薪资
	 * @param cardBalance 银行卡余额
	 * @param bonus 奖金
	 */
	public Manager(String name, double salary, double cardBalance, double bonus) {
		super(name, salary, cardBalance);
		this.bonus = bonus;
	}

	/**
	 * 计算工资 
	 * 经理的工资 = 薪资 + 奖金
	 * 
	 * @return
	 */
	@Override
	public double calcMoney() {
		return getSalary() + bonus;
	}

	/**
	 * 获取奖金
	 * 
	 * @return
	 */
	public double getBonus() {
		return bonus;
	}

	/**
	 * 设置奖金
	 * 
	 * @param bonus
	 */
	public void setBonus(double bonus) {
		this.bonus = bonus;
	}
}

3. 定义职员Clerk类继承Employee类

Clerk.java

package com.feonix;

/**
 * 职员类 继承 员工类
 * 
 * @author FeoniX
 *
 */
public class Clerk extends Employee {

	/**
	 * 职员类的无参构造器
	 */
	public Clerk() {
		super();
	}

	/**
	 * 职员类的有参构造器
	 * 
	 * @param name 姓名
	 * @param salary 薪资
	 * @param cardBalance 银行卡余额
	 */
	public Clerk(String name, double salary, double cardBalance) {
		super(name, salary, cardBalance);
	}

}

4. 定义Money接口,提供抽象方法salary

Money.java

package com.feonix;

/**
 * Money接口
 * 
 * @author FeoniX
 *
 */
public interface Money {
	/**
	 * 发工资抽象方法
	 * @parm employee 需要发工资的员工对象
	 */
	void salary(Employee employee);
}

5. 定义公司Company类,实现Money接口

Company.java

package com.feonix;

/**
 * 公司类 实现 Money接口
 * 
 * @author FeoniX
 *
 */
public class Company implements Money {

	/**
	 * 实现发工资方法
	 */
	@Override
	public void salary(Employee employee) {
		employee.setCardBalance(employee.getCardBalance() + employee.calcMoney());
	}

}

6. 定义测试类,创建公司对象,经理对象,职员对象,调用公司salary方法,给经理和职员发工资

Test.java

public class Test {
	public static void main(String[] args) {
		Employee manager = new Manager("小明", 9000, 0, 500);
		Employee clerk = new Clerk("小亮", 5000, 0);

		Company company = new Company();

		int max = 6;
		for (int i = 0; i <= max; i++) {
			System.out.printf("%s的薪资为:%.1f\t\t卡余额是:%.1f\n", manager.getName(), manager.getSalary(),
					manager.getCardBalance());
			System.out.printf("%s的薪资为:%.1f\t\t卡余额是:%.1f\n", clerk.getName(), clerk.getSalary(), clerk.getCardBalance());
			if (i < max) {
				System.out.println("=========================" + (i + 1) + "月=========================");
			}
			company.salary(manager);
			company.salary(clerk);
		}
	}
}

二、实现效果

效果图

猜你喜欢

转载自blog.csdn.net/u012587568/article/details/106292505