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

Library Book Management

Problem Description

Manage library: add books, issue, return, check availability, fine calculation.

Expected Output

Complete library system

Hints

Track book status, issue date, calculate overdue fines.

Solution

IDENTIFICATION DIVISION. PROGRAM-ID. LIBRARY. DATA DIVISION. WORKING-STORAGE SECTION. 01 WS-BOOKS. 05 WS-BOOK OCCURS 20 TIMES. 10 WS-BOOK-ID PIC 9(5). 10 WS-BOOK-TITLE PIC X(30). 10 WS-BOOK-AUTHOR PIC X(20). 10 WS-STATUS PIC X(1). 10 WS-MEMBER-ID PIC 9(5). 10 WS-ISSUE-DATE PIC 9(8). 01 WS-BOOK-COUNT PIC 9(2) VALUE 0. 01 WS-CHOICE PIC 9. 01 WS-IDX PIC 9(2). 01 WS-SEARCH-ID PIC 9(5). 01 WS-FOUND PIC 9. 01 WS-DAYS PIC 9(3). 01 WS-FINE PIC 9(5)V99. 01 WS-FINE-RATE PIC 9(2) VALUE 5. 01 WS-MAX-DAYS PIC 9(2) VALUE 14. 01 WS-DISP PIC ZZ,ZZ9.99. PROCEDURE DIVISION. PERFORM INIT-BOOKS. PERFORM UNTIL WS-CHOICE = 6 DISPLAY " " DISPLAY "=== LIBRARY MANAGEMENT ===" DISPLAY "1. ADD BOOK" DISPLAY "2. ISSUE BOOK" DISPLAY "3. RETURN BOOK" DISPLAY "4. SEARCH BOOK" DISPLAY "5. LIST AVAILABLE" DISPLAY "6. EXIT" ACCEPT WS-CHOICE EVALUATE WS-CHOICE WHEN 1 PERFORM ADD-BOOK WHEN 2 PERFORM ISSUE-BOOK WHEN 3 PERFORM RETURN-BOOK WHEN 4 PERFORM SEARCH-BOOK WHEN 5 PERFORM LIST-AVAILABLE END-EVALUATE END-PERFORM. STOP RUN. ADD-BOOK. ADD 1 TO WS-BOOK-COUNT. MOVE WS-BOOK-COUNT TO WS-BOOK-ID(WS-BOOK-COUNT). DISPLAY "TITLE: ". ACCEPT WS-BOOK-TITLE(WS-BOOK-COUNT). DISPLAY "AUTHOR: ". ACCEPT WS-BOOK-AUTHOR(WS-BOOK-COUNT). MOVE "A" TO WS-STATUS(WS-BOOK-COUNT). DISPLAY "BOOK ADDED. ID: " WS-BOOK-ID(WS-BOOK-COUNT). ISSUE-BOOK. DISPLAY "BOOK ID: ". ACCEPT WS-SEARCH-ID. PERFORM FIND-BOOK. IF WS-FOUND = 1 IF WS-STATUS(WS-IDX) = "A" DISPLAY "MEMBER ID: " ACCEPT WS-MEMBER-ID(WS-IDX) MOVE 20240115 TO WS-ISSUE-DATE(WS-IDX) MOVE "I" TO WS-STATUS(WS-IDX) DISPLAY "BOOK ISSUED. DUE IN 14 DAYS." ELSE DISPLAY "BOOK NOT AVAILABLE" END-IF ELSE DISPLAY "BOOK NOT FOUND" END-IF. RETURN-BOOK. DISPLAY "BOOK ID: ". ACCEPT WS-SEARCH-ID. PERFORM FIND-BOOK. IF WS-FOUND = 1 IF WS-STATUS(WS-IDX) = "I" DISPLAY "DAYS KEPT: ". ACCEPT WS-DAYS IF WS-DAYS > WS-MAX-DAYS COMPUTE WS-FINE = (WS-DAYS - WS-MAX-DAYS) * WS-FINE-RATE MOVE WS-FINE TO WS-DISP DISPLAY "OVERDUE FINE: Rs." WS-DISP ELSE DISPLAY "NO FINE. RETURNED ON TIME." END-IF MOVE "A" TO WS-STATUS(WS-IDX) MOVE 0 TO WS-MEMBER-ID(WS-IDX) ELSE DISPLAY "BOOK WAS NOT ISSUED" END-IF ELSE DISPLAY "BOOK NOT FOUND" END-IF. SEARCH-BOOK. DISPLAY "BOOK ID: ". ACCEPT WS-SEARCH-ID. PERFORM FIND-BOOK. IF WS-FOUND = 1 DISPLAY "TITLE: " WS-BOOK-TITLE(WS-IDX) DISPLAY "AUTHOR: " WS-BOOK-AUTHOR(WS-IDX) IF WS-STATUS(WS-IDX) = "A" DISPLAY "STATUS: AVAILABLE" ELSE DISPLAY "STATUS: ISSUED TO " WS-MEMBER-ID(WS-IDX) END-IF ELSE DISPLAY "BOOK NOT FOUND" END-IF. LIST-AVAILABLE. DISPLAY "AVAILABLE BOOKS:". DISPLAY "ID TITLE AUTHOR". PERFORM VARYING WS-IDX FROM 1 BY 1 UNTIL WS-IDX > WS-BOOK-COUNT IF WS-STATUS(WS-IDX) = "A" DISPLAY WS-BOOK-ID(WS-IDX) " " WS-BOOK-TITLE(WS-IDX) " " WS-BOOK-AUTHOR(WS-IDX) END-IF END-PERFORM. FIND-BOOK. MOVE 0 TO WS-FOUND. PERFORM VARYING WS-IDX FROM 1 BY 1 UNTIL WS-IDX > WS-BOOK-COUNT IF WS-BOOK-ID(WS-IDX) = WS-SEARCH-ID MOVE 1 TO WS-FOUND END-IF END-PERFORM. INIT-BOOKS. MOVE 3 TO WS-BOOK-COUNT. MOVE 1 TO WS-BOOK-ID(1). MOVE "COBOL PROGRAMMING" TO WS-BOOK-TITLE(1). MOVE "STERN" TO WS-BOOK-AUTHOR(1). MOVE "A" TO WS-STATUS(1). MOVE 2 TO WS-BOOK-ID(2). MOVE "MAINFRAME BASICS" TO WS-BOOK-TITLE(2). MOVE "IBM" TO WS-BOOK-AUTHOR(2). MOVE "A" TO WS-STATUS(2). MOVE 3 TO WS-BOOK-ID(3). MOVE "JCL REFERENCE" TO WS-BOOK-TITLE(3). MOVE "BROWN" TO WS-BOOK-AUTHOR(3). MOVE "A" TO WS-STATUS(3).

Explanation:

Library with issue/return tracking, availability check, fine calculation.