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

Bill Generation

Problem Description

Generate itemized bill: multiple items with quantity and price, apply discount if total > 1000, add GST 18%, print formatted bill.

Expected Output

Formatted bill with subtotal, discount, tax, grand total

Hints

Accumulate totals, apply conditional discount.

Solution

IDENTIFICATION DIVISION. PROGRAM-ID. BILLING. DATA DIVISION. WORKING-STORAGE SECTION. 01 WS-ITEMS. 05 WS-ITEM OCCURS 20 TIMES. 10 WS-ITEM-NAME PIC X(20). 10 WS-ITEM-QTY PIC 9(3). 10 WS-ITEM-PRICE PIC 9(5)V99. 10 WS-ITEM-TOTAL PIC 9(7)V99. 01 WS-ITEM-COUNT PIC 9(2) VALUE 0. 01 WS-SUBTOTAL PIC 9(9)V99 VALUE 0. 01 WS-DISCOUNT PIC 9(7)V99 VALUE 0. 01 WS-DISC-PCT PIC 9(2) VALUE 0. 01 WS-GST PIC 9(7)V99. 01 WS-GRAND-TOTAL PIC 9(9)V99. 01 WS-CONTINUE PIC X VALUE "Y". 01 WS-I PIC 9(2). 01 WS-DISP PIC Z,ZZ,ZZ9.99. PROCEDURE DIVISION. PERFORM UNTIL WS-CONTINUE NOT = "Y" ADD 1 TO WS-ITEM-COUNT DISPLAY "ITEM NAME: " ACCEPT WS-ITEM-NAME(WS-ITEM-COUNT) DISPLAY "QUANTITY: " ACCEPT WS-ITEM-QTY(WS-ITEM-COUNT) DISPLAY "UNIT PRICE: " ACCEPT WS-ITEM-PRICE(WS-ITEM-COUNT) COMPUTE WS-ITEM-TOTAL(WS-ITEM-COUNT) = WS-ITEM-QTY(WS-ITEM-COUNT) * WS-ITEM-PRICE(WS-ITEM-COUNT) ADD WS-ITEM-TOTAL(WS-ITEM-COUNT) TO WS-SUBTOTAL DISPLAY "ADD MORE? (Y/N): " ACCEPT WS-CONTINUE END-PERFORM. IF WS-SUBTOTAL > 5000 MOVE 15 TO WS-DISC-PCT ELSE IF WS-SUBTOTAL > 1000 MOVE 10 TO WS-DISC-PCT ELSE MOVE 0 TO WS-DISC-PCT END-IF. COMPUTE WS-DISCOUNT = WS-SUBTOTAL * WS-DISC-PCT / 100. COMPUTE WS-GST = (WS-SUBTOTAL - WS-DISCOUNT) * 0.18. COMPUTE WS-GRAND-TOTAL = WS-SUBTOTAL - WS-DISCOUNT + WS-GST. DISPLAY "============================================". DISPLAY " BILL ". DISPLAY "============================================". PERFORM VARYING WS-I FROM 1 BY 1 UNTIL WS-I > WS-ITEM-COUNT MOVE WS-ITEM-TOTAL(WS-I) TO WS-DISP DISPLAY WS-ITEM-NAME(WS-I) " " WS-ITEM-QTY(WS-I) " " WS-DISP END-PERFORM. DISPLAY "--------------------------------------------". MOVE WS-SUBTOTAL TO WS-DISP. DISPLAY "SUBTOTAL: " WS-DISP. MOVE WS-DISCOUNT TO WS-DISP. DISPLAY "DISCOUNT: " WS-DISP. MOVE WS-GST TO WS-DISP. DISPLAY "GST (18%): " WS-DISP. MOVE WS-GRAND-TOTAL TO WS-DISP. DISPLAY "TOTAL: " WS-DISP. STOP RUN.

Explanation:

Complete billing system with tiered discounts, tax calculation.