-4

Here is the prompt for my class assignment:

Create an interactive program for ice cream sales you must sell at least four flavors of ice cream and you must us an evaluate statement. The ice cream needs to be available in a dish or a cone users choice. A cone cost $2 a bowl cost $1.50 Each item needs to be taxed at 5%. The customer must be able to enter multiple items per sale. At the end print a receipt. The receipt must have a header with a date the name of your ice-cream shop and your name. It must have detail showing flavor choice of cone or bowl cost and tax and total. At the end it must have totals for all three columns. The program must be structured.

Here is my code thus far:

   IDENTIFICATION DIVISION.
   PROGRAM-ID. ICECREAMSALES.

   ENVIRONMENT DIVISION.
       INPUT-OUTPUT SECTION.
   FILE-CONTROL.
       SELECT RECEIPT-FILE ASSIGN TO "receipt.txt"
           ORGANIZATION IS SEQUENTIAL.

   DATA DIVISION.
   FILE SECTION.
    FD RECEIPT-FILE.
    01 RECEIPT-REC PIC X(132).

   WORKING-STORAGE SECTION.
    77 FLAVOR-CODE        PIC 9.
    77 ITEM-TYPE          PIC X.
    77 QTY                PIC 99.
    77 FLAVOR-NAME        PIC X(15).
    77 ITEM-NAME          PIC X(5).
    77 ITEM-PRICE         PIC 9V99.
    77 SUBTOTAL           PIC 9(5)V99 VALUE 0.
    77 TAX                PIC 9(5)V99 VALUE 0.
    77 TOTAL              PIC 9(5)V99 VALUE 0.
    77 SHOP-NAME          PIC X(25) VALUE "Dan's Icecream".
    77 OWNER-NAME         PIC X(25) VALUE "Daniel Goins".
    77 SALE-DATE          PIC X(20).
    77 MORE-ITEMS         PIC X VALUE 'Y'.
    77 VALID-INPUT        PIC X VALUE 'N'.
    77 ITEM-LINE-TOTAL    PIC 9(5)V99 VALUE 0.
    77 ITEM-LINE-TAX      PIC 9(5)V99 VALUE 0.
    77 IDX                PIC 99 VALUE 1.
    77 ITEM-COUNT         PIC 99 VALUE 0.
    77 EDITED-SUBTOTAL    PIC ZZZZ9.99.
    77 EDITED-TAX         PIC ZZZZ9.99.
    77 EDITED-TOTAL       PIC ZZZZ9.99.

    01 ITEM-LIST.
     05 ITEM-FLAVOR-NAME    OCCURS 20 TIMES PIC X(15).
     05 ITEM-FLAVOR-TYPE    OCCURS 20 TIMES PIC X(5).
     05 ITEM-FLAVOR-PRICE   OCCURS 20 TIMES PIC 9V99.
     05 ITEM-FLAVOR-TAX     OCCURS 20 TIMES PIC 9V99.
     05 ITEM-FLAVOR-TOTAL   OCCURS 20 TIMES PIC 9V99.

   PROCEDURE DIVISION.
   MAIN-PROGRAM.

       ACCEPT SALE-DATE FROM DATE.
       DISPLAY "WELCOME TO " SHOP-NAME
       DISPLAY "SALES RECEIPT - " SALE-DATE
       DISPLAY "SOLD BY: " OWNER-NAME
       DISPLAY "----------------------------------------"

       PERFORM UNTIL MORE-ITEMS = 'N' OR MORE-ITEMS = 'n'
           DISPLAY "Please choose flavor: "
           DISPLAY "1. Vanilla"
           DISPLAY "2. Chocolate"
           DISPLAY "3. Strawberry"
           DISPLAY "4. Mint"
           ACCEPT FLAVOR-CODE

           EVALUATE FLAVOR-CODE
               WHEN 1 MOVE "Vanilla" TO FLAVOR-NAME
               WHEN 2 MOVE "Chocolate" TO FLAVOR-NAME
               WHEN 3 MOVE "Strawberry" TO FLAVOR-NAME
               WHEN 4 MOVE "Mint" TO FLAVOR-NAME
               WHEN OTHER
            DISPLAY "Invalid flavor! Try again."
            NEXT SENTENCE
           END-EVALUATE

           MOVE 'N' TO VALID-INPUT
           PERFORM UNTIL VALID-INPUT = 'Y'
        DISPLAY "Dish or Cone? (D/C):"
        ACCEPT ITEM-TYPE
               IF ITEM-TYPE = 'D' OR ITEM-TYPE = 'd'
                   MOVE "Dish" TO ITEM-NAME
                   MOVE 1.50 TO ITEM-PRICE
                   MOVE 'Y' TO VALID-INPUT
               ELSE IF ITEM-TYPE = 'C' OR ITEM-TYPE = 'c'
                   MOVE "Cone" TO ITEM-NAME
                   MOVE 2.00 TO ITEM-PRICE
                   MOVE 'Y' TO VALID-INPUT
               ELSE
            DISPLAY "Invalid selection! Please enter D/d for Dish or
            C/c for Cone."
          END-IF
       END-PERFORM

        DISPLAY "How many do you want?"
        ACCEPT QTY

        COMPUTE ITEM-LINE-TOTAL = ITEM-PRICE * QTY
        COMPUTE ITEM-LINE-TAX = ITEM-LINE-TOTAL * 0.05

        ADD 1 TO ITEM-COUNT
        MOVE FLAVOR-NAME TO ITEM-FLAVOR-NAME(ITEM-COUNT)
        MOVE ITEM-NAME TO ITEM-FLAVOR-TYPE(ITEM-COUNT)
        MOVE ITEM-LINE-TOTAL TO ITEM-FLAVOR-PRICE(ITEM-COUNT)
        MOVE ITEM-LINE-TAX TO ITEM-FLAVOR-TAX(ITEM-COUNT)
        COMPUTE ITEM-FLAVOR-TOTAL(ITEM-COUNT) = ITEM-LINE-TOTAL + 
        ITEM-LINE-TAX

        ADD ITEM-LINE-TOTAL TO SUBTOTAL
        ADD ITEM-LINE-TAX TO TAX

        MOVE 'N' TO VALID-INPUT
        PERFORM UNTIL VALID-INPUT = 'Y'
            DISPLAY "Add another item? (Y/N):"
            ACCEPT MORE-ITEMS
            IF MORE-ITEMS = 'Y' OR MORE-ITEMS = 'y' OR MORE-ITEMS = 
                'N' OR MORE-ITEMS = 'n'
            MOVE 'Y' TO VALID-INPUT
        ELSE
            DISPLAY "Invalid selection! Please enter Y/y for Yes or
            N/n for No."
          END-IF
        END-PERFORM
       END-PERFORM

        COMPUTE TOTAL = SUBTOTAL + TAX

       MOVE SUBTOTAL TO EDITED-SUBTOTAL
       MOVE TAX      TO EDITED-TAX
       MOVE TOTAL    TO EDITED-TOTAL

        DISPLAY "----------------------------------------"
        DISPLAY "Receipt for " SHOP-NAME
        DISPLAY "Date: " SALE-DATE
        DISPLAY "Sold By: " OWNER-NAME
        DISPLAY "----------------------------------------"
        DISPLAY "Flavor         Type  Price   Tax   Total"
        
       PERFORM VARYING IDX FROM 1 BY 1 UNTIL IDX > ITEM-COUNT
       MOVE ITEM-FLAVOR-NAME(IDX) TO RECEIPT-REC
       WRITE RECEIPT-REC
       MOVE ITEM-FLAVOR-TYPE(IDX) TO RECEIPT-REC
       WRITE RECEIPT-REC
       MOVE ITEM-FLAVOR-PRICE(IDX) TO RECEIPT-REC
       WRITE RECEIPT-REC
       MOVE ITEM-FLAVOR-TAX(IDX) TO RECEIPT-REC
       WRITE RECEIPT-REC
       MOVE ITEM-FLAVOR-TOTAL(IDX) TO RECEIPT-REC
       WRITE RECEIPT-REC
       END-PERFORM
       
       DISPLAY "----------------------------------------"
       DISPLAY "Totals: "
       DISPLAY "Price: " EDITED-SUBTOTAL
       DISPLAY " Tax: " EDITED-TAX
       DISPLAY " Total: " EDITED-TOTAL
       DISPLAY " Thank you for buying at " 
       DISPLAY SHOP-NAME.
       DISPLAY "!"
       
       OPEN OUTPUT RECEIPT-FILE
       MOVE "Receipt for " SHOP-NAME TO RECEIPT-REC
       WRITE RECEIPT-REC
       MOVE "Date: " SALE-DATE TO RECEIPT-REC
       WRITE RECEIPT-REC
       MOVE "Sold By: " OWNER-NAME TO RECEIPT-REC
       WRITE RECEIPT-REC
       MOVE "--------------------------------------" TO RECEIPT-REC
       WRITE RECEIPT-REC
       MOVE "Flavor       Type  Price   Tax   Total" TO RECEIPT-REC
       WRITE RECEIPT-REC

       PERFORM VARYING IDX FROM 1 BY 1 UNTIL IDX > ITEM-COUNT
       MOVE ITEM-FLAVOR-NAME(IDX) TO RECEIPT-REC
       WRITE RECEIPT-REC
       MOVE ITEM-FLAVOR-TYPE(IDX) TO RECEIPT-REC
       WRITE RECEIPT-REC
       MOVE ITEM-FLAVOR-PRICE(IDX) TO RECEIPT-REC
       WRITE RECEIPT-REC
       MOVE ITEM-FLAVOR-TAX(IDX) TO RECEIPT-REC
       WRITE RECEIPT-REC
       MOVE ITEM-FLAVOR-TOTAL(IDX) TO RECEIPT-REC
       WRITE RECEIPT-REC
       END-PERFORM


       MOVE "--------------------------------------" TO RECEIPT-REC
       WRITE RECEIPT-REC
       MOVE "Totals:" TO RECEIPT-REC
       WRITE RECEIPT-REC

       MOVE "Price:" TO RECEIPT-REC
       WRITE RECEIPT-REC

       MOVE EDITED-SUBTOTAL TO RECEIPT-REC
       WRITE RECEIPT-REC

       MOVE "Tax:" TO RECEIPT-REC
       WRITE RECEIPT-REC

       MOVE EDITED-TAX TO RECEIPT-REC
       WRITE RECEIPT-REC

       MOVE "Total:" TO RECEIPT-REC
       WRITE RECEIPT-REC

       MOVE EDITED-TOTAL TO RECEIPT-REC
       WRITE RECEIPT-REC

       MOVE "Thank you for buying at" TO RECEIPT-REC
       WRITE RECEIPT-REC

       MOVE SHOP-NAME TO RECEIPT-REC
       WRITE RECEIPT-REC

       CLOSE RECEIPT-FILE

       STOP RUN.

I am having compile errors with this section:

PERFORM VARYING IDX FROM 1 BY 1 UNTIL IDX > ITEM-COUNT
           MOVE ITEM-FLAVOR-NAME(IDX) TO RECEIPT-REC
           WRITE RECEIPT-REC
           MOVE ITEM-FLAVOR-TYPE(IDX) TO RECEIPT-REC
           WRITE RECEIPT-REC
           MOVE ITEM-FLAVOR-PRICE(IDX) TO RECEIPT-REC
           WRITE RECEIPT-REC
           MOVE ITEM-FLAVOR-TAX(IDX) TO RECEIPT-REC

saying it is an invalid MOVE statement and lastly

 DISPLAY "!"
           
           OPEN OUTPUT RECEIPT-FILE

here it says there is a "syntax error, unexpected Identifier, expecting TO"

2
  • 1
    Please provide enough code so others can better understand or reproduce the problem. Commented Sep 14 at 20:33
  • Is the answer useful to you? If yes, please upvote. Even more important: Does it solve the issue that was asked - then please mark it as accepted answer. Commented Sep 17 at 7:50

1 Answer 1

1

As you've provided the full source we can reproduce this easily:

https://cobol.godbolt.org/z/TeYdhMrn9

and see the right messages from GnuCOBOL and GCC-COBOL at the right places. They point to MOVE statements. a bunch of are invalid because of their type and at least one MOVEs multiple "sources" to one (you may want to use FUNCTION CONCAT or reference-modification or STRING instead).

GCC-COBOL is quite descriptive for the first issue:

error: cannot MOVE 'ITEM-FLAVOR-PRICE' (FldNumericDisplay.2) to 'RECEIPT-REC' (FldAlphanumeric)

You likely want to use a printing-only variable as part of the RECEIPT-REC (or a REDEFINE on it) that uses PIC ZZ9.99.

Sign up to request clarification or add additional context in comments.

Comments

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.