diff --git a/.idea/material_theme_project_new.xml b/.idea/material_theme_project_new.xml new file mode 100644 index 0000000..21fcfac --- /dev/null +++ b/.idea/material_theme_project_new.xml @@ -0,0 +1,10 @@ + + + + + + \ No newline at end of file diff --git a/src/employee_management/Department.java b/src/employee_management/Department.java index 09c2577..81cf742 100644 --- a/src/employee_management/Department.java +++ b/src/employee_management/Department.java @@ -1,15 +1,67 @@ package employee_management; -/** - * TODO : a department is a collection of employees. It has a name and a set of employees in it. - */ +import java.util.ArrayList; +import java.util.List; + public class Department { - /** - * TODO : Employees should never ever be duplicated in a single department. - * Please check if it already exists in the department before inserting if need be. Duplicate - * here means : their employee id and name are the same. - * - * TODO : for our HR officer, give a function to show all details about employees, including - * their pay. - */ + private final String name; + private List employees = new ArrayList<>() ; + + public Department(String name, List employees) { + this.name = name; + this.employees = employees; + } + + public Department(String name) { + this.name = name; + } + + public void addEmployee(Employee employee){ + boolean isExisting = false; + for (Employee e : employees) { + if (e.getEmployeeId() == employee.getEmployeeId() && e.getName().equals(employee.getName())) { + isExisting = true; + break; + } + } + if (!isExisting) { + employees.add(employee); + } + } + + public String getDepartmentDetails(){ + StringBuilder details = new StringBuilder(); + details.append("Department Name : ").append(name).append("\n"); + details.append("-----------------------------------\n"); + for (Employee e : employees) { + details.append(e.toString()).append("\n"); + details.append("-----------------------------------\n"); + } + return details.toString(); + } + + public String getEmployeesFullDetails(){ + StringBuilder details = new StringBuilder(); + details.append("Department Name : ").append(name).append("\n"); + details.append("-----------------------------------\n"); + for (Employee e : employees) { + if (e instanceof FullTimeEmployee) { + details.append(e.toString()) + .append("\nPay : ") + .append(((FullTimeEmployee) e).calculatePay()) + .append("\n-----------------------------------\n"); + } + else if (e instanceof PartTimeEmployee) { + details.append(e.toString()) + .append("\nHourly Rate : ") + .append(((PartTimeEmployee) e).getHourlyRate()) + .append("\nHours Worked : ") + .append(((PartTimeEmployee) e).getHoursWorked()) + .append("\nPay : ") + .append(((PartTimeEmployee) e).calculatePay()) + .append("\n-----------------------------------\n"); + } + } + return details.toString(); + } } diff --git a/src/employee_management/Employee.java b/src/employee_management/Employee.java new file mode 100644 index 0000000..188c2c3 --- /dev/null +++ b/src/employee_management/Employee.java @@ -0,0 +1,39 @@ +package employee_management; + +public abstract class Employee { + public static int lastEmployeeId = 0; + private final int employeeId; + private final String name; + + public Employee(int employeeId, String name) { + if (employeeId <= 0 || employeeId < lastEmployeeId) { + throw new IllegalArgumentException("Invalid Employee Id"); + } + this.employeeId = employeeId; + lastEmployeeId = employeeId; + this.name = name; + } + + public Employee (String name){ + this.employeeId = lastEmployeeId + 1; + lastEmployeeId++; + this.name = name; + } + + public int getEmployeeId() { + return employeeId; + } + + public String getName() { + return name; + } + + public abstract double calculatePay(); + public abstract double calculateTax(); + @Override + public String toString() { + return "EmployeeId : " + employeeId + "\nName : " + name; + } + + +} diff --git a/src/employee_management/FullTimeEmployee.java b/src/employee_management/FullTimeEmployee.java index 1d5b60a..84d1ed3 100644 --- a/src/employee_management/FullTimeEmployee.java +++ b/src/employee_management/FullTimeEmployee.java @@ -1,18 +1,20 @@ package employee_management; -public class FullTimeEmployee { - public int employeeId; - public String name; - public double monthlySalary; +public class FullTimeEmployee extends Employee{ + private double monthlySalary; public FullTimeEmployee(int employeeId, String name, double monthlySalary) { - this.employeeId = employeeId; - this.name = name; + super(employeeId, name); this.monthlySalary = monthlySalary; } - + @Override public double calculatePay() { return monthlySalary; } + + @Override + public double calculateTax() { + return monthlySalary * 0.2; + } } diff --git a/src/employee_management/PartTimeEmployee.java b/src/employee_management/PartTimeEmployee.java index ab234c7..d25d60a 100644 --- a/src/employee_management/PartTimeEmployee.java +++ b/src/employee_management/PartTimeEmployee.java @@ -1,21 +1,34 @@ package employee_management; -public class PartTimeEmployee { - public int employeeId; - public String name; - public double hoursWorked; - public double hourlyRate; - +public class PartTimeEmployee extends Employee{ + private double hoursWorked; + private double hourlyRate; public PartTimeEmployee(int employeeId, String name, double hoursWorked, double hourlyRate) { - this.employeeId = employeeId; - this.name = name; + super(employeeId, name); this.hoursWorked = hoursWorked; this.hourlyRate = hourlyRate; } + public double getHoursWorked() { + return hoursWorked; + } + public double getHourlyRate() { + return hourlyRate; + } + @Override public double calculatePay() { return hoursWorked * hourlyRate; } + + @Override + public double calculateTax() { + return hoursWorked * hourlyRate * 0.15; + } + + @Override + public String toString() { + return super.toString() +"\nHours Worked : " + hoursWorked; + } } diff --git a/src/employee_management/TestCases.java b/src/employee_management/TestCases.java index 4afd0b7..5f3da7d 100644 --- a/src/employee_management/TestCases.java +++ b/src/employee_management/TestCases.java @@ -13,15 +13,6 @@ public static void main(String[] args) { FullTimeEmployee koto = TestCases.fullTimeEmployeeKoto(); PartTimeEmployee lita = TestCases.partTimeEmployeeLita(); - // TODO : prevent the direct access here - koto.monthlySalary = 6_000_000; - lita.hoursWorked = 1_000; - - // TODO : do not allow incoherent changes on salaries (applies to full time employees too) - lita.hourlyRate = -10_000_000; - - // TODO : fix the string format of both full time and part time employees - // NOTE : do not show sensitive data such as hourlyRate or monthlySalary here ! System.out.println("Details about Koto " + koto); System.out.println("Details about Lita " + lita); }