Employee Management System with core Java


Introduction


The Employee Management System will manage employee records, including features to add, update, delete, and display employees. It will use Java 8 features like Lambda expressions, streams, and the Observer design pattern.


Part 1: Requirement Gathering and Feature Discussion


Requirements:

  1. Add Employee: Add a new employee to the system.
  2. Update Employee: Update an existing employee’s information.
  3. Delete Employee: Delete an employee from the system.
  4. View Employees: Display all employees.


Part 2: Design Discussion


Design Components:

  1. Employee Class: Represents an employee.
  2. EmployeeService Class: Manages employees.
  3. EmployeeApp Class: Main class to interact with the user.


Part 3: Code Implementation


1. Employee Class

import java.util.Objects;

public class Employee {
    private String id;
    private String name;
    private String department;
    private double salary;

    public Employee(String id, String name, String department, double salary) {
        this.id = id;
        this.name = name;
        this.department = department;
        this.salary = salary;
    }

    // Getters and Setters
    public String getId() {
        return id;
    }

    public void setId(String id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getDepartment() {
        return department;
    }

    public void setDepartment(String department) {
        this.department = department;
    }

    public double getSalary() {
        return salary;
    }

    public void setSalary(double salary) {
        this.salary = salary;
    }

    @Override
    public String toString() {
        return "Employee [ID=" + id + ", Name=" + name + ", Department=" + department + ", Salary=" + salary + "]";
    }

    @Override
    public boolean equals(Object o) {
        if (this == o) return true;
        if (o == null || getClass() != o.getClass()) return false;
        Employee employee = (Employee) o;
        return Objects.equals(id, employee.id);
    }

    @Override
    public int hashCode() {
        return Objects.hash(id);
    }
}

2. EmployeeService Class

import java.util.*;
import java.util.stream.Collectors;

public class EmployeeService {
    private List<Employee> employees = new ArrayList<>();

    public void addEmployee(Employee employee) {
        employees.add(employee);
    }

    public void updateEmployee(String id, String name, String department, double salary) {
        employees.stream()
                 .filter(employee -> employee.getId().equals(id))
                 .findFirst()
                 .ifPresent(employee -> {
                     employee.setName(name);
                     employee.setDepartment(department);
                     employee.setSalary(salary);
                 });
    }

    public void deleteEmployee(String id) {
        employees.removeIf(employee -> employee.getId().equals(id));
    }

    public List<Employee> viewEmployees() {
        return employees.stream()
                        .sorted(Comparator.comparing(Employee::getName))
                        .collect(Collectors.toList());
    }
}

3. EmployeeApp Class

import java.util.Scanner;

public class EmployeeApp {
    private static EmployeeService employeeService = new EmployeeService();
    private static Scanner scanner = new Scanner(System.in);

    public static void main(String[] args) {
        while (true) {
            displayMenu();
            handleUserInput();
        }
    }

    private static void displayMenu() {
        System.out.println("\nEmployee Management System");
        System.out.println("1. Add Employee");
        System.out.println("2. Update Employee");
        System.out.println("3. Delete Employee");
        System.out.println("4. View Employees");
        System.out.println("5. Exit");
        System.out.print("Enter your choice: ");
    }

    private static void handleUserInput() {
        int choice = scanner.nextInt();
        scanner.nextLine(); // Consume newline

        switch (choice) {
            case 1:
                addEmployee();
                break;
            case 2:
                updateEmployee();
                break;
            case 3:
                deleteEmployee();
                break;
            case 4:
                viewEmployees();
                break;
            case 5:
                System.exit(0);
                break;
            default:
                System.out.println("Invalid choice. Please try again.");
        }
    }

    private static void addEmployee() {
        System.out.print("Enter Employee ID: ");
        String id = scanner.nextLine();
        System.out.print("Enter Employee Name: ");
        String name = scanner.nextLine();
        System.out.print("Enter Employee Department: ");
        String department = scanner.nextLine();
        System.out.print("Enter Employee Salary: ");
        double salary = scanner.nextDouble();

        employeeService.addEmployee(new Employee(id, name, department, salary));
        System.out.println("Employee added successfully.");
    }

    private static void updateEmployee() {
        System.out.print("Enter Employee ID to Update: ");
        String id = scanner.nextLine();
        System.out.print("Enter New Employee Name: ");
        String name = scanner.nextLine();
        System.out.print("Enter New Employee Department: ");
        String department = scanner.nextLine();
        System.out.print("Enter New Employee Salary: ");
        double salary = scanner.nextDouble();

        employeeService.updateEmployee(id, name, department, salary);
        System.out.println("Employee updated successfully.");
    }

    private static void deleteEmployee() {
        System.out.print("Enter Employee ID to Delete: ");
        String id = scanner.nextLine();

        employeeService.deleteEmployee(id);
        System.out.println("Employee deleted successfully.");
    }

    private static void viewEmployees() {
        System.out.println("Employee List:");
        employeeService.viewEmployees().forEach(System.out::println);
    }
}


Part 4: Testing Plan


  1. Manual Testing:

    • Run the program and manually test adding, updating, deleting, and viewing employees.
    • Verify that the system behaves as expected and handles edge cases.

  2. Unit Testing:

    • Write unit tests for the EmployeeService class to ensure each method works correctly.
    • Use a testing framework like JUnit for structured testing.


Example Unit Test


import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
import static org.junit.jupiter.api.Assertions.*;
import java.util.List;

public class EmployeeServiceTest {
    private EmployeeService employeeService;

    @BeforeEach
    public void setUp() {
        employeeService = new EmployeeService();
    }

    @Test
    public void testAddAndDeleteEmployee() {
        Employee employee = new Employee("1", "John Doe", "Engineering", 60000);
        employeeService.addEmployee(employee);
        employeeService.deleteEmployee("1");

        List<Employee> employees = employeeService.viewEmployees();
        assertEquals(0, employees.size());
    }

    @Test
    public void testUpdateEmployee() {
        Employee employee = new Employee("1", "John Doe", "Engineering", 60000);
        employeeService.addEmployee(employee);
        employeeService.updateEmployee("1", "John Smith", "Marketing", 65000);

        List<Employee> employees = employeeService.viewEmployees();
        assertEquals(1, employees.size());
        assertEquals("John Smith", employees.get(0).getName());
        assertEquals("Marketing", employees.get(0).getDepartment());
        assertEquals(65000, employees.get(0).getSalary());
    }
}


Leave a Reply

Your email address will not be published. Required fields are marked *