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.