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);
}