Skip to content
Open
10 changes: 10 additions & 0 deletions .idea/material_theme_project_new.xml

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

74 changes: 63 additions & 11 deletions src/employee_management/Department.java
Original file line number Diff line number Diff line change
@@ -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<Employee> employees = new ArrayList<>() ;

public Department(String name, List<Employee> 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();
}
}
39 changes: 39 additions & 0 deletions src/employee_management/Employee.java
Original file line number Diff line number Diff line change
@@ -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;
}


}
16 changes: 9 additions & 7 deletions src/employee_management/FullTimeEmployee.java
Original file line number Diff line number Diff line change
@@ -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;
}
}

29 changes: 21 additions & 8 deletions src/employee_management/PartTimeEmployee.java
Original file line number Diff line number Diff line change
@@ -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;
}
}

9 changes: 0 additions & 9 deletions src/employee_management/TestCases.java
Original file line number Diff line number Diff line change
Expand Up @@ -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);
}
Expand Down