Master Mainframe Technologies - COBOL, JCL, DB2, VSAM, CICS & More
ABEND Codes SQLCODEs File Status Interview Prep Contact
← Back to Real-World Scenarios
Real-World Scenarios | Advanced | COBOL

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.