![](https://knowledgewala.com/wp-content/uploads/2024/05/2024-05-26-19_31_02-Employee-Management-System-Project-In-Java-CopyAssignment.png)
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:
- Add Employee: Add a new employee to the system.
- Update Employee: Update an existing employee’s information.
- Delete Employee: Delete an employee from the system.
- View Employees: Display all employees.
Part 2: Design Discussion
Design Components:
- Employee Class: Represents an employee.
- EmployeeService Class: Manages employees.
- 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
- 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.
- Unit Testing:
- Write unit tests for the
EmployeeService
class to ensure each method works correctly. - Use a testing framework like JUnit for structured testing.
- Write unit tests for the
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());
}
}