From b555418239d82094ebed883547309b66aeb4453d Mon Sep 17 00:00:00 2001 From: Jonathan Date: Mon, 4 Aug 2025 08:20:36 +0300 Subject: [PATCH 1/9] refactor: convert public attribute to private and add getters to retrieve them --- .idea/material_theme_project_new.xml | 10 ++++++++++ src/employee_management/FullTimeEmployee.java | 6 +++--- 2 files changed, 13 insertions(+), 3 deletions(-) create mode 100644 .idea/material_theme_project_new.xml 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/FullTimeEmployee.java b/src/employee_management/FullTimeEmployee.java index 1d5b60a..67de1b1 100644 --- a/src/employee_management/FullTimeEmployee.java +++ b/src/employee_management/FullTimeEmployee.java @@ -1,9 +1,9 @@ package employee_management; public class FullTimeEmployee { - public int employeeId; - public String name; - public double monthlySalary; + private final int employeeId; + private final String name; + private double monthlySalary; public FullTimeEmployee(int employeeId, String name, double monthlySalary) { this.employeeId = employeeId; From a08694835c5ff46f13ca79eae60354b3bd55d2c9 Mon Sep 17 00:00:00 2001 From: Jonathan Date: Mon, 4 Aug 2025 08:28:16 +0300 Subject: [PATCH 2/9] refactor: Employee base class with base attributes 'employeeId' and 'name' and abstract method 'calculatePay' --- src/employee_management/Employee.java | 19 +++++++++++++++++++ src/employee_management/FullTimeEmployee.java | 7 ++----- src/employee_management/PartTimeEmployee.java | 19 +++++++++++-------- 3 files changed, 32 insertions(+), 13 deletions(-) create mode 100644 src/employee_management/Employee.java diff --git a/src/employee_management/Employee.java b/src/employee_management/Employee.java new file mode 100644 index 0000000..b6ff4c5 --- /dev/null +++ b/src/employee_management/Employee.java @@ -0,0 +1,19 @@ +package employee_management; + +public class Employee { + private final int employeeId; + private final String name; + + public Employee(int employeeId, String name) { + this.employeeId = employeeId; + this.name = name; + } + + public int getEmployeeId() { + return employeeId; + } + + public String getName() { + return name; + } +} diff --git a/src/employee_management/FullTimeEmployee.java b/src/employee_management/FullTimeEmployee.java index 67de1b1..a427585 100644 --- a/src/employee_management/FullTimeEmployee.java +++ b/src/employee_management/FullTimeEmployee.java @@ -1,13 +1,10 @@ package employee_management; -public class FullTimeEmployee { - private final int employeeId; - private final String name; +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; } diff --git a/src/employee_management/PartTimeEmployee.java b/src/employee_management/PartTimeEmployee.java index ab234c7..eae5611 100644 --- a/src/employee_management/PartTimeEmployee.java +++ b/src/employee_management/PartTimeEmployee.java @@ -1,19 +1,22 @@ 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; + } + public double calculatePay() { return hoursWorked * hourlyRate; } From fe7d438025ce0019fcca37ca99362cb154089d3b Mon Sep 17 00:00:00 2001 From: Jonathan Date: Mon, 4 Aug 2025 08:35:42 +0300 Subject: [PATCH 3/9] feat: custom .toString() method, specific for each type of Employee --- src/employee_management/Employee.java | 9 ++++++++- src/employee_management/FullTimeEmployee.java | 7 ++++++- src/employee_management/PartTimeEmployee.java | 7 ++++++- 3 files changed, 20 insertions(+), 3 deletions(-) diff --git a/src/employee_management/Employee.java b/src/employee_management/Employee.java index b6ff4c5..4471f34 100644 --- a/src/employee_management/Employee.java +++ b/src/employee_management/Employee.java @@ -1,6 +1,6 @@ package employee_management; -public class Employee { +public abstract class Employee { private final int employeeId; private final String name; @@ -16,4 +16,11 @@ public int getEmployeeId() { public String getName() { return name; } + + public abstract double calculatePay(); + + @Override + public String toString() { + return "EmployeeId : " + employeeId + "\nName : " + name + "\nPay : " + calculatePay(); + } } diff --git a/src/employee_management/FullTimeEmployee.java b/src/employee_management/FullTimeEmployee.java index a427585..4943356 100644 --- a/src/employee_management/FullTimeEmployee.java +++ b/src/employee_management/FullTimeEmployee.java @@ -7,9 +7,14 @@ public FullTimeEmployee(int employeeId, String name, double monthlySalary) { super(employeeId, name); this.monthlySalary = monthlySalary; } - + @Override public double calculatePay() { return monthlySalary; } + + @Override + public String toString() { + return super.toString() + "\nMonthly Salary : " + monthlySalary; + } } diff --git a/src/employee_management/PartTimeEmployee.java b/src/employee_management/PartTimeEmployee.java index eae5611..901c33d 100644 --- a/src/employee_management/PartTimeEmployee.java +++ b/src/employee_management/PartTimeEmployee.java @@ -16,9 +16,14 @@ public double getHoursWorked() { public double getHourlyRate() { return hourlyRate; } - + @Override public double calculatePay() { return hoursWorked * hourlyRate; } + + @Override + public String toString() { + return super.toString() + "\nHours Worked : " + hoursWorked + "\nHourly Rate : " + hourlyRate; + } } From ecb25a6bc8ce2f8133d0e1462184dd5d37da6ac3 Mon Sep 17 00:00:00 2001 From: Jonathan Date: Mon, 4 Aug 2025 08:47:52 +0300 Subject: [PATCH 4/9] feat: Department class implementation --- src/employee_management/Department.java | 47 +++++++++++++++++++------ 1 file changed, 36 insertions(+), 11 deletions(-) diff --git a/src/employee_management/Department.java b/src/employee_management/Department.java index 09c2577..b834cf8 100644 --- a/src/employee_management/Department.java +++ b/src/employee_management/Department.java @@ -1,15 +1,40 @@ 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"); + for (Employee e : employees) { + details.append(e.toString()).append("\n"); + } + return details.toString(); + } } From e380a78db2f86a13ba82fa3ac088f99f6d4de90b Mon Sep 17 00:00:00 2001 From: Jonathan Date: Mon, 4 Aug 2025 08:54:11 +0300 Subject: [PATCH 5/9] feat: calculateTax() method for all Employee type --- src/employee_management/Employee.java | 1 + src/employee_management/FullTimeEmployee.java | 5 +++++ src/employee_management/PartTimeEmployee.java | 5 +++++ 3 files changed, 11 insertions(+) diff --git a/src/employee_management/Employee.java b/src/employee_management/Employee.java index 4471f34..353e6d9 100644 --- a/src/employee_management/Employee.java +++ b/src/employee_management/Employee.java @@ -19,6 +19,7 @@ public String getName() { public abstract double calculatePay(); + public abstract double calculateTax(); @Override public String toString() { return "EmployeeId : " + employeeId + "\nName : " + name + "\nPay : " + calculatePay(); diff --git a/src/employee_management/FullTimeEmployee.java b/src/employee_management/FullTimeEmployee.java index 4943356..6e843e3 100644 --- a/src/employee_management/FullTimeEmployee.java +++ b/src/employee_management/FullTimeEmployee.java @@ -16,5 +16,10 @@ public double calculatePay() { public String toString() { return super.toString() + "\nMonthly Salary : " + monthlySalary; } + + @Override + public double calculateTax() { + return monthlySalary * 0.2; + } } diff --git a/src/employee_management/PartTimeEmployee.java b/src/employee_management/PartTimeEmployee.java index 901c33d..2267146 100644 --- a/src/employee_management/PartTimeEmployee.java +++ b/src/employee_management/PartTimeEmployee.java @@ -25,5 +25,10 @@ public double calculatePay() { public String toString() { return super.toString() + "\nHours Worked : " + hoursWorked + "\nHourly Rate : " + hourlyRate; } + + @Override + public double calculateTax() { + return hoursWorked * hourlyRate * 0.15; + } } From 9efda555260734fe728dc901fe4daea1c7312ab5 Mon Sep 17 00:00:00 2001 From: Jonathan Date: Mon, 4 Aug 2025 09:13:44 +0300 Subject: [PATCH 6/9] feat: AUTO_INCREMENT id implementation for constructor when not given, while keeping initial constructor with EmployeeId --- src/employee_management/Employee.java | 12 +++++++++++- src/employee_management/FullTimeEmployee.java | 14 ++++++++++---- src/employee_management/PartTimeEmployee.java | 12 ++++++++---- 3 files changed, 29 insertions(+), 9 deletions(-) diff --git a/src/employee_management/Employee.java b/src/employee_management/Employee.java index 353e6d9..2b543c4 100644 --- a/src/employee_management/Employee.java +++ b/src/employee_management/Employee.java @@ -1,11 +1,22 @@ 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; } @@ -18,7 +29,6 @@ public String getName() { } public abstract double calculatePay(); - public abstract double calculateTax(); @Override public String toString() { diff --git a/src/employee_management/FullTimeEmployee.java b/src/employee_management/FullTimeEmployee.java index 6e843e3..3fe4da3 100644 --- a/src/employee_management/FullTimeEmployee.java +++ b/src/employee_management/FullTimeEmployee.java @@ -13,13 +13,19 @@ public double calculatePay() { } @Override - public String toString() { - return super.toString() + "\nMonthly Salary : " + monthlySalary; + public double calculateTax() { + return monthlySalary * 0.2; } @Override - public double calculateTax() { - return monthlySalary * 0.2; + public String toString() { + return super.toString() + "\nMonthly Salary : " + + monthlySalary + + "\nTax:" + calculateTax(); } + + + + } diff --git a/src/employee_management/PartTimeEmployee.java b/src/employee_management/PartTimeEmployee.java index 2267146..a39436a 100644 --- a/src/employee_management/PartTimeEmployee.java +++ b/src/employee_management/PartTimeEmployee.java @@ -22,13 +22,17 @@ public double calculatePay() { } @Override - public String toString() { - return super.toString() + "\nHours Worked : " + hoursWorked + "\nHourly Rate : " + hourlyRate; + public double calculateTax() { + return hoursWorked * hourlyRate * 0.15; } @Override - public double calculateTax() { - return hoursWorked * hourlyRate * 0.15; + public String toString() { + return super.toString() +"\nHours Worked : " + hoursWorked + + "\nHourly Rate : " + hourlyRate + + "\nTax:" + calculateTax(); } + + } From 116a55339bfdc524dce57eb8e4d836a6882127c0 Mon Sep 17 00:00:00 2001 From: Jonathan Date: Mon, 4 Aug 2025 09:21:53 +0300 Subject: [PATCH 7/9] chore: update message format of getDepartmentDetails() --- src/employee_management/Department.java | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/employee_management/Department.java b/src/employee_management/Department.java index b834cf8..0c86523 100644 --- a/src/employee_management/Department.java +++ b/src/employee_management/Department.java @@ -32,8 +32,10 @@ public void addEmployee(Employee 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(); } From ccd239176d428560854edcf77a16d83c0518a60d Mon Sep 17 00:00:00 2001 From: Jonathan Date: Mon, 4 Aug 2025 09:34:44 +0300 Subject: [PATCH 8/9] feat: getEmployeesFullDetails() method which return basic Employees details with additionnal info (pay amount, hourly_rate, ...) --- src/employee_management/Department.java | 25 +++++++++++++++++++ src/employee_management/Employee.java | 4 ++- src/employee_management/FullTimeEmployee.java | 11 -------- src/employee_management/PartTimeEmployee.java | 6 +---- 4 files changed, 29 insertions(+), 17 deletions(-) diff --git a/src/employee_management/Department.java b/src/employee_management/Department.java index 0c86523..81cf742 100644 --- a/src/employee_management/Department.java +++ b/src/employee_management/Department.java @@ -39,4 +39,29 @@ public String getDepartmentDetails(){ } 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 index 2b543c4..188c2c3 100644 --- a/src/employee_management/Employee.java +++ b/src/employee_management/Employee.java @@ -32,6 +32,8 @@ public String getName() { public abstract double calculateTax(); @Override public String toString() { - return "EmployeeId : " + employeeId + "\nName : " + name + "\nPay : " + calculatePay(); + return "EmployeeId : " + employeeId + "\nName : " + name; } + + } diff --git a/src/employee_management/FullTimeEmployee.java b/src/employee_management/FullTimeEmployee.java index 3fe4da3..84d1ed3 100644 --- a/src/employee_management/FullTimeEmployee.java +++ b/src/employee_management/FullTimeEmployee.java @@ -16,16 +16,5 @@ public double calculatePay() { public double calculateTax() { return monthlySalary * 0.2; } - - @Override - public String toString() { - return super.toString() + "\nMonthly Salary : " + - monthlySalary + - "\nTax:" + calculateTax(); - } - - - - } diff --git a/src/employee_management/PartTimeEmployee.java b/src/employee_management/PartTimeEmployee.java index a39436a..d25d60a 100644 --- a/src/employee_management/PartTimeEmployee.java +++ b/src/employee_management/PartTimeEmployee.java @@ -28,11 +28,7 @@ public double calculateTax() { @Override public String toString() { - return super.toString() +"\nHours Worked : " + hoursWorked + - "\nHourly Rate : " + hourlyRate + - "\nTax:" + calculateTax(); + return super.toString() +"\nHours Worked : " + hoursWorked; } - - } From 0311ce52b6bda05e96a1cba087f2d66a6f95941e Mon Sep 17 00:00:00 2001 From: Tsiory Jonathan <167012196+TsioryJonathan@users.noreply.github.com> Date: Mon, 4 Aug 2025 09:49:12 +0300 Subject: [PATCH 9/9] feat: update manual test cases --- src/employee_management/TestCases.java | 9 --------- 1 file changed, 9 deletions(-) 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); }