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.