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.