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

Hospital Patient Management

Problem Description

Manage patient records: admit, discharge, view details, bill calculation.

Expected Output

Complete patient management system

Hints

Track admission date, treatments, calculate bill.

Solution

IDENTIFICATION DIVISION. PROGRAM-ID. HOSPITAL. DATA DIVISION. WORKING-STORAGE SECTION. 01 WS-PATIENTS. 05 WS-PAT OCCURS 20 TIMES. 10 WS-PAT-ID PIC 9(6). 10 WS-PAT-NAME PIC X(25). 10 WS-PAT-AGE PIC 9(3). 10 WS-ADMIT-DATE PIC 9(8). 10 WS-ROOM-TYPE PIC X(1). 10 WS-DAYS PIC 9(3). 10 WS-STATUS PIC X(1). 01 WS-PAT-COUNT PIC 9(2) VALUE 0. 01 WS-CHOICE PIC 9. 01 WS-IDX PIC 9(2). 01 WS-SEARCH-ID PIC 9(6). 01 WS-FOUND PIC 9. 01 WS-ROOM-RATE PIC 9(5). 01 WS-BILL PIC 9(7)V99. 01 WS-DISP PIC Z,ZZ,ZZ9.99. PROCEDURE DIVISION. PERFORM UNTIL WS-CHOICE = 5 DISPLAY " " DISPLAY "=== HOSPITAL MANAGEMENT ===" DISPLAY "1. ADMIT PATIENT" DISPLAY "2. VIEW PATIENT" DISPLAY "3. DISCHARGE & BILL" DISPLAY "4. LIST ALL PATIENTS" DISPLAY "5. EXIT" ACCEPT WS-CHOICE EVALUATE WS-CHOICE WHEN 1 PERFORM ADMIT-PATIENT WHEN 2 PERFORM VIEW-PATIENT WHEN 3 PERFORM DISCHARGE-PATIENT WHEN 4 PERFORM LIST-PATIENTS END-EVALUATE END-PERFORM. STOP RUN. ADMIT-PATIENT. ADD 1 TO WS-PAT-COUNT. MOVE WS-PAT-COUNT TO WS-PAT-ID(WS-PAT-COUNT). DISPLAY "PATIENT NAME: ". ACCEPT WS-PAT-NAME(WS-PAT-COUNT). DISPLAY "AGE: ". ACCEPT WS-PAT-AGE(WS-PAT-COUNT). DISPLAY "ROOM TYPE (G)ENERAL/(S)EMI/(P)RIVATE: ". ACCEPT WS-ROOM-TYPE(WS-PAT-COUNT). MOVE 20240101 TO WS-ADMIT-DATE(WS-PAT-COUNT). MOVE 0 TO WS-DAYS(WS-PAT-COUNT). MOVE "A" TO WS-STATUS(WS-PAT-COUNT). DISPLAY "PATIENT ADMITTED. ID: " WS-PAT-ID(WS-PAT-COUNT). VIEW-PATIENT. DISPLAY "ENTER PATIENT ID: ". ACCEPT WS-SEARCH-ID. PERFORM FIND-PATIENT. IF WS-FOUND = 1 DISPLAY "NAME: " WS-PAT-NAME(WS-IDX) DISPLAY "AGE: " WS-PAT-AGE(WS-IDX) DISPLAY "ROOM: " WS-ROOM-TYPE(WS-IDX) DISPLAY "STATUS: " WS-STATUS(WS-IDX) ELSE DISPLAY "PATIENT NOT FOUND" END-IF. DISCHARGE-PATIENT. DISPLAY "ENTER PATIENT ID: ". ACCEPT WS-SEARCH-ID. PERFORM FIND-PATIENT. IF WS-FOUND = 1 DISPLAY "DAYS STAYED: ". ACCEPT WS-DAYS(WS-IDX) EVALUATE WS-ROOM-TYPE(WS-IDX) WHEN "G" MOVE 1000 TO WS-ROOM-RATE WHEN "S" MOVE 2500 TO WS-ROOM-RATE WHEN "P" MOVE 5000 TO WS-ROOM-RATE END-EVALUATE COMPUTE WS-BILL = WS-DAYS(WS-IDX) * WS-ROOM-RATE MOVE "D" TO WS-STATUS(WS-IDX) MOVE WS-BILL TO WS-DISP DISPLAY "TOTAL BILL: " WS-DISP ELSE DISPLAY "PATIENT NOT FOUND" END-IF. LIST-PATIENTS. DISPLAY "ID NAME STATUS". PERFORM VARYING WS-IDX FROM 1 BY 1 UNTIL WS-IDX > WS-PAT-COUNT DISPLAY WS-PAT-ID(WS-IDX) " " WS-PAT-NAME(WS-IDX) " " WS-STATUS(WS-IDX) END-PERFORM. FIND-PATIENT. MOVE 0 TO WS-FOUND. PERFORM VARYING WS-IDX FROM 1 BY 1 UNTIL WS-IDX > WS-PAT-COUNT IF WS-PAT-ID(WS-IDX) = WS-SEARCH-ID MOVE 1 TO WS-FOUND END-IF END-PERFORM.

Explanation:

Hospital system with admission, room types, billing based on stay.