48 lines
		
	
	
	
		
			1.9 KiB
		
	
	
	
		
			Java
		
	
	
	
	
	
			
		
		
	
	
			48 lines
		
	
	
	
		
			1.9 KiB
		
	
	
	
		
			Java
		
	
	
	
	
	
| import java.util.*;
 | |
| 
 | |
| class Employee {
 | |
|     String empName, empCode;
 | |
|     int leaveBalance[] = {13, 12, 10};
 | |
|     Employee(String name, String code) { empName = name; empCode = code; }
 | |
| }
 | |
| 
 | |
| class EmployeeNotFound extends Exception { EmployeeNotFound(String s) { super(s); } }
 | |
| class NoLeaves extends Exception { NoLeaves(String s) { super(s); } }
 | |
| 
 | |
| public class LeaveManagement {
 | |
|     static List<Employee> employees = Collections.synchronizedList(new ArrayList<>());
 | |
|     public static void main(String[] args) {
 | |
|         Thread t1 = new Thread(() -> {
 | |
|             employees.add(new Employee("Alice", "E1"));
 | |
|             employees.add(new Employee("Bob", "E2"));
 | |
|             employees.add(new Employee("Charlie", "E3"));
 | |
|             employees.add(new Employee("David", "E4"));
 | |
|             employees.add(new Employee("Eve", "E5"));
 | |
|         });
 | |
| 
 | |
|         Thread t2 = new Thread(() -> {
 | |
|             try {
 | |
|                 Scanner sc = new Scanner(System.in);
 | |
|                 String code = sc.next(), type = sc.next();
 | |
|                 int days = sc.nextInt(), idx = type.equals("Comp") ? 0 : type.equals("Casual") ? 1 : 2;
 | |
|                 boolean found = false;
 | |
|                 for (Employee e : employees) {
 | |
|                     if (e.empCode.equals(code)) {
 | |
|                         found = true;
 | |
|                         if (e.leaveBalance[idx] >= days) e.leaveBalance[idx] -= days;
 | |
|                         else throw new NoLeaves("Not enough leaves");
 | |
|                     }
 | |
|                 }
 | |
|                 if (!found) throw new EmployeeNotFound("Employee not found");
 | |
|             } catch (Exception ex) { System.out.println(ex.getMessage()); }
 | |
|         });
 | |
| 
 | |
|         try { t1.start(); t1.join(); t2.start(); t2.join(); } catch (InterruptedException e) { e.printStackTrace(); }
 | |
| 
 | |
|         synchronized (employees) {
 | |
|             for (Employee e : employees) {
 | |
|                 System.out.println(e.empName + " - Casual Leaves: " + e.leaveBalance[1]);
 | |
|             }
 | |
|         }
 | |
|     }
 | |
| }
 | 
