ошибка при добавлении сотрудника. чего не хватает, чтоб заработало?
**Задание: Программа для управления зарплатами сотрудников.
Система оплаты зависит от ранга сотрудника. Есть 4 ранга: Manager: получает на 10% больше своей месячной зарплаты Boss: получает на 50% больше своей месячной зарплаты Employee: получает на 15% меньше своей месячной зарплаты Volunteer: не получает ничего**
package com.jobs.view;
import com.jobs.application.JobsController;
public class Main {
private static JobsController controller=new JobsController();
public static void main(String[] args) throws Exception {
controller.createBossEmployee("Pepe Boss", "Dirección molona", "666666666", 100.0);
controller.createEmployee("Pedro Employee", "Dirección molona 2", "665266666", 40.0);
controller.createEmployee("Laura Employee", "Dirección molona 3", "625266666", 45.0);
controller.createVolunteer("Juan Volunteer", "Dirección molona 4", "614266666", "good volunteer");
controller.createManagerEmployee("Pedro Employee", "Dirección molona 2", "665226666", 80.0);
controller.payAllEmployeers();
String allEmployees=controller.getAllEmployees();
System.out.println("EMPLOYEES: " + allEmployees + " \n");
}
}
package com.jobs.application;
import com.jobs.domain.Employee;
import com.jobs.domain.Volunteer;
import com.jobs.persistence.EmployeeRepository;
public class JobsController {
private EmployeeRepository repository;
public JobsController(){}
public void createBossEmployee(String name, String address, String phone, double salaryPerMonth) throws Exception{
Employee boss = new Employee(name, address, phone, salaryPerMonth, PaymentFactory.createPaymentRateBoss());
repository.addMember(boss);
}
public void createEmployee(String name, String address, String phone, double salaryPerMonth) throws Exception{
Employee employee = new Employee(name, address, phone, salaryPerMonth, PaymentFactory.createPaymentRateEmployee());
repository.addMember(employee);
}
public void createManagerEmployee(String name, String address, String phone, double salaryPerMonth) throws Exception{
Employee managerEmployee = new Employee(name, address, phone, salaryPerMonth, PaymentFactory.createPaymentRateManagerEmployee());
repository.addMember(managerEmployee);
}
public void payAllEmployeers() {
}
public String getAllEmployees() {
return null;
}
public void createVolunteer(String name, String address, String phone, String description) throws Exception {
Volunteer volunteer = new Volunteer(name, address, phone, description);
repository.addMember(volunteer);
}
}
package com.jobs.domain;
public abstract class AbsStaffMember {
protected int id;
protected String name;
protected String address;
protected String phone;
protected double totalPaid=0;
private static int COUNTER_MEMBERS = 1;
public AbsStaffMember(String name, String address, String phone) throws Exception {
if (name.equals(""))
throw new Exception();
if (address.equals(""))
throw new Exception();
if (phone.equals(""))
throw new Exception();
this.name = name;
this.address = address;
this.phone = phone;
id = COUNTER_MEMBERS;
COUNTER_MEMBERS++;
}
public abstract double pay();
}
package com.jobs.domain;
public class Employee extends AbsStaffMember {
protected double salaryPerMonth;
protected IPaymentRate paymentRate;
public Employee(String name, String address, String phone, double salaryPerMonth,IPaymentRate paymentRate) throws Exception {
super(name, address, phone);
if(salaryPerMonth<0) throw new Exception();
if(paymentRate==null) throw new Exception();
this.salaryPerMonth=salaryPerMonth;
this.paymentRate=paymentRate;
}
@Override
public double pay() {
totalPaid=paymentRate.pay(salaryPerMonth);
return totalPaid;
}
}
package com.jobs.domain;
public interface IPaymentRate {
public double pay(double salaryPerMonth);
}
package com.jobs.domain;
public class Volunteer extends AbsStaffMember {
protected double salaryPerMonth;
protected IPaymentRate paymentRate;
public Volunteer(String name, String address, String phone, String description) throws Exception {
super(name, address, phone);
if(salaryPerMonth<0) throw new Exception();
}
@Override
public double pay() {
salaryPerMonth = 0;
return totalPaid=paymentRate.pay(salaryPerMonth);
}
}
package com.jobs.persistence;
import java.util.ArrayList;
import java.util.List;
import com.jobs.domain.AbsStaffMember;
public class EmployeeRepository {
private static List<AbsStaffMember> members=new ArrayList<>();
public EmployeeRepository(){}
public List<AbsStaffMember> getAllMembers(){
return new ArrayList<>(members);
}
public void addMember(AbsStaffMember member) throws Exception{
if(member==null) throw new Exception();
members.add(member);
}
}
Ответы (2 шт):
Автор решения: Olivia
→ Ссылка
package com.jobs.application;
import com.jobs.domain.IPaymentRate;
public class PaymentFactory {
public static IPaymentRate createPaymentRateBoss(){
return new IPaymentRate() {
@Override
public double pay(double salaryPerMonth) {
return salaryPerMonth * 1.5;
}
};
}
public static IPaymentRate createPaymentRateEmployee(){
return new IPaymentRate() {
@Override
public double pay(double salaryPerMonth) {
return salaryPerMonth - (salaryPerMonth * 0.15);
}
};
}
public static IPaymentRate createPaymentRateManagerEmployee(){
return new IPaymentRate() {
@Override
public double pay(double salaryPerMonth) {
return salaryPerMonth * 1.1;
}
};
}
}
Автор решения: Дмитрий
→ Ссылка
Все просто. Ваш контроллер не дописан. Исправьте его таким образом:
public class JobsController {
private EmployeeRepository repository = new EmployeeRepository();
public JobsController() {
}
public void createBossEmployee(String name, String address, String phone, double salaryPerMonth) throws Exception {
Employee boss = new Employee(name, address, phone, salaryPerMonth, PaymentFactory.createPaymentRateBoss());
repository.addMember(boss);
}
public void createEmployee(String name, String address, String phone, double salaryPerMonth) throws Exception {
Employee employee = new Employee(name, address, phone, salaryPerMonth, PaymentFactory.createPaymentRateEmployee());
repository.addMember(employee);
}
public void createManagerEmployee(String name, String address, String phone, double salaryPerMonth) throws Exception {
Employee managerEmployee = new Employee(name, address, phone, salaryPerMonth, PaymentFactory.createPaymentRateManagerEmployee());
repository.addMember(managerEmployee);
}
public void payAllEmployeers() {
for (AbsStaffMember member : repository.getAllMembers()) member.pay();
}
public String getAllEmployees() {
StringBuilder sb = new StringBuilder();
for (AbsStaffMember member : repository.getAllMembers())
sb.append(member.name).append(" : ").append(member.totalPaid).append("\n");
return sb.toString();
}
public void createVolunteer(String name, String address, String phone, String description) throws Exception {
Volunteer volunteer = new Volunteer(name, address, phone, description);
repository.addMember(volunteer);
}
}
Ваш волонтер все равно пытается получить зарплату, хотя по условию не должен. Посему метод волонтера pay перепишите так и все заработает.
@Override
public double pay() {
salaryPerMonth = 0;
return 0;
//return totalPaid = paymentRate.pay(salaryPerMonth);
}
Но еще раз повторю, что это решение очень плохое))