Employee Leave Management
Problem Description
Track employee leave: apply leave, approve/reject, show balance, generate leave report.
Expected Output
Complete leave management system
Hints
Track multiple leave types, validate balances.
Solution
IDENTIFICATION DIVISION.
PROGRAM-ID. LEAVEMGMT.
DATA DIVISION.
WORKING-STORAGE SECTION.
01 WS-EMPLOYEES.
05 WS-EMP OCCURS 10 TIMES.
10 WS-EMP-ID PIC 9(5).
10 WS-EMP-NAME PIC X(20).
10 WS-CASUAL-BAL PIC 9(2).
10 WS-SICK-BAL PIC 9(2).
10 WS-EARNED-BAL PIC 9(2).
01 WS-EMP-COUNT PIC 9(2) VALUE 0.
01 WS-CHOICE PIC 9.
01 WS-SEARCH-ID PIC 9(5).
01 WS-LEAVE-TYPE PIC X(1).
01 WS-LEAVE-DAYS PIC 9(2).
01 WS-FOUND PIC 9 VALUE 0.
01 WS-IDX PIC 9(2).
PROCEDURE DIVISION.
PERFORM INIT-EMPLOYEES.
PERFORM UNTIL WS-CHOICE = 5
DISPLAY " "
DISPLAY "=== LEAVE MANAGEMENT ==="
DISPLAY "1. APPLY LEAVE"
DISPLAY "2. VIEW BALANCE"
DISPLAY "3. VIEW ALL EMPLOYEES"
DISPLAY "4. ADD EMPLOYEE"
DISPLAY "5. EXIT"
ACCEPT WS-CHOICE
EVALUATE WS-CHOICE
WHEN 1 PERFORM APPLY-LEAVE
WHEN 2 PERFORM VIEW-BALANCE
WHEN 3 PERFORM VIEW-ALL
END-EVALUATE
END-PERFORM.
STOP RUN.
APPLY-LEAVE.
DISPLAY "ENTER EMPLOYEE ID: ".
ACCEPT WS-SEARCH-ID.
PERFORM FIND-EMPLOYEE.
IF WS-FOUND = 0
DISPLAY "EMPLOYEE NOT FOUND"
ELSE
DISPLAY "LEAVE TYPE: (C)ASUAL, (S)ICK, (E)ARNED: "
ACCEPT WS-LEAVE-TYPE
DISPLAY "NUMBER OF DAYS: "
ACCEPT WS-LEAVE-DAYS
EVALUATE WS-LEAVE-TYPE
WHEN "C"
IF WS-LEAVE-DAYS > WS-CASUAL-BAL(WS-IDX)
DISPLAY "INSUFFICIENT CASUAL LEAVE"
ELSE
SUBTRACT WS-LEAVE-DAYS FROM WS-CASUAL-BAL(WS-IDX)
DISPLAY "LEAVE APPROVED!"
END-IF
WHEN "S"
IF WS-LEAVE-DAYS > WS-SICK-BAL(WS-IDX)
DISPLAY "INSUFFICIENT SICK LEAVE"
ELSE
SUBTRACT WS-LEAVE-DAYS FROM WS-SICK-BAL(WS-IDX)
DISPLAY "LEAVE APPROVED!"
END-IF
WHEN "E"
IF WS-LEAVE-DAYS > WS-EARNED-BAL(WS-IDX)
DISPLAY "INSUFFICIENT EARNED LEAVE"
ELSE
SUBTRACT WS-LEAVE-DAYS FROM WS-EARNED-BAL(WS-IDX)
DISPLAY "LEAVE APPROVED!"
END-IF
END-EVALUATE
END-IF.
VIEW-BALANCE.
DISPLAY "ENTER EMPLOYEE ID: ".
ACCEPT WS-SEARCH-ID.
PERFORM FIND-EMPLOYEE.
IF WS-FOUND = 0
DISPLAY "EMPLOYEE NOT FOUND"
ELSE
DISPLAY "EMPLOYEE: " WS-EMP-NAME(WS-IDX)
DISPLAY "CASUAL: " WS-CASUAL-BAL(WS-IDX)
DISPLAY "SICK: " WS-SICK-BAL(WS-IDX)
DISPLAY "EARNED: " WS-EARNED-BAL(WS-IDX)
END-IF.
VIEW-ALL.
DISPLAY "ID NAME CL SL EL".
PERFORM VARYING WS-IDX FROM 1 BY 1 UNTIL WS-IDX > WS-EMP-COUNT
DISPLAY WS-EMP-ID(WS-IDX) " " WS-EMP-NAME(WS-IDX) " "
WS-CASUAL-BAL(WS-IDX) " " WS-SICK-BAL(WS-IDX)
" " WS-EARNED-BAL(WS-IDX)
END-PERFORM.
FIND-EMPLOYEE.
MOVE 0 TO WS-FOUND.
PERFORM VARYING WS-IDX FROM 1 BY 1 UNTIL WS-IDX > WS-EMP-COUNT
IF WS-EMP-ID(WS-IDX) = WS-SEARCH-ID
MOVE 1 TO WS-FOUND
END-IF
END-PERFORM.
INIT-EMPLOYEES.
MOVE 2 TO WS-EMP-COUNT.
MOVE 10001 TO WS-EMP-ID(1).
MOVE "JOHN DOE" TO WS-EMP-NAME(1).
MOVE 12 TO WS-CASUAL-BAL(1).
MOVE 6 TO WS-SICK-BAL(1).
MOVE 15 TO WS-EARNED-BAL(1).
MOVE 10002 TO WS-EMP-ID(2).
MOVE "JANE SMITH" TO WS-EMP-NAME(2).
MOVE 10 TO WS-CASUAL-BAL(2).
MOVE 6 TO WS-SICK-BAL(2).
MOVE 12 TO WS-EARNED-BAL(2).
Explanation:
Leave management with multiple leave types and balance validation.