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

Bank Statement Generator

Problem Description

Generate monthly bank statement: opening balance, all transactions, closing balance, interest calculation.

Expected Output

Formatted bank statement with running balance

Hints

Track running balance, format currency, calculate interest.

Solution

IDENTIFICATION DIVISION. PROGRAM-ID. BANKSTMT. DATA DIVISION. WORKING-STORAGE SECTION. 01 WS-ACCOUNT PIC X(10) VALUE "ACC-001234". 01 WS-CUST-NAME PIC X(30) VALUE "JOHN SMITH". 01 WS-OPEN-BAL PIC S9(9)V99 VALUE 50000.00. 01 WS-CLOSE-BAL PIC S9(9)V99. 01 WS-RUN-BAL PIC S9(9)V99. 01 WS-INTEREST PIC 9(7)V99. 01 WS-RATE PIC 9V9(4) VALUE 0.035. 01 WS-TRANS-TABLE. 05 WS-TRANS OCCURS 10 TIMES. 10 WS-TRANS-DATE PIC X(10). 10 WS-TRANS-DESC PIC X(20). 10 WS-TRANS-TYPE PIC X(1). 10 WS-TRANS-AMT PIC 9(7)V99. 01 WS-TRANS-COUNT PIC 9(2) VALUE 0. 01 WS-I PIC 9(2). 01 WS-DISP-AMT PIC Z,ZZ,ZZ9.99-. 01 WS-DISP-BAL PIC Z,ZZ,ZZ,ZZ9.99-. PROCEDURE DIVISION. PERFORM INIT-TRANSACTIONS. DISPLAY "=========================================". DISPLAY " MONTHLY BANK STATEMENT ". DISPLAY "=========================================". DISPLAY "ACCOUNT: " WS-ACCOUNT. DISPLAY "NAME: " WS-CUST-NAME. MOVE WS-OPEN-BAL TO WS-DISP-BAL. DISPLAY "OPENING BALANCE: " WS-DISP-BAL. DISPLAY "-----------------------------------------". DISPLAY "DATE DESCRIPTION AMOUNT BALANCE". MOVE WS-OPEN-BAL TO WS-RUN-BAL. PERFORM VARYING WS-I FROM 1 BY 1 UNTIL WS-I > WS-TRANS-COUNT IF WS-TRANS-TYPE(WS-I) = "C" ADD WS-TRANS-AMT(WS-I) TO WS-RUN-BAL ELSE SUBTRACT WS-TRANS-AMT(WS-I) FROM WS-RUN-BAL END-IF MOVE WS-TRANS-AMT(WS-I) TO WS-DISP-AMT MOVE WS-RUN-BAL TO WS-DISP-BAL DISPLAY WS-TRANS-DATE(WS-I) " " WS-TRANS-DESC(WS-I) " " WS-DISP-AMT " " WS-DISP-BAL END-PERFORM. COMPUTE WS-INTEREST = WS-RUN-BAL * WS-RATE / 12. ADD WS-INTEREST TO WS-RUN-BAL. MOVE WS-RUN-BAL TO WS-CLOSE-BAL. DISPLAY "-----------------------------------------". MOVE WS-INTEREST TO WS-DISP-AMT. DISPLAY "INTEREST EARNED: " WS-DISP-AMT. MOVE WS-CLOSE-BAL TO WS-DISP-BAL. DISPLAY "CLOSING BALANCE: " WS-DISP-BAL. STOP RUN. INIT-TRANSACTIONS. MOVE 5 TO WS-TRANS-COUNT. MOVE "2024-01-05" TO WS-TRANS-DATE(1). MOVE "SALARY CREDIT" TO WS-TRANS-DESC(1). MOVE "C" TO WS-TRANS-TYPE(1). MOVE 75000.00 TO WS-TRANS-AMT(1). MOVE "2024-01-10" TO WS-TRANS-DATE(2). MOVE "RENT PAYMENT" TO WS-TRANS-DESC(2). MOVE "D" TO WS-TRANS-TYPE(2). MOVE 15000.00 TO WS-TRANS-AMT(2). MOVE "2024-01-15" TO WS-TRANS-DATE(3). MOVE "UTILITIES" TO WS-TRANS-DESC(3). MOVE "D" TO WS-TRANS-TYPE(3). MOVE 3500.00 TO WS-TRANS-AMT(3). MOVE "2024-01-20" TO WS-TRANS-DATE(4). MOVE "ATM WITHDRAWAL" TO WS-TRANS-DESC(4). MOVE "D" TO WS-TRANS-TYPE(4). MOVE 5000.00 TO WS-TRANS-AMT(4). MOVE "2024-01-25" TO WS-TRANS-DATE(5). MOVE "DIVIDEND" TO WS-TRANS-DESC(5). MOVE "C" TO WS-TRANS-TYPE(5). MOVE 2500.00 TO WS-TRANS-AMT(5).

Explanation:

Running balance calculation, interest computation, formatted statement.