The Hamburger Examples


Version 1

       IDENTIFICATION DIVISION.
       PROGRAM-ID.     HAVE-IT-YOUR-WAY.
       AUTHOR.         BILL ROGERS.
       ENVIRONMENT DIVISION.
       INPUT-OUTPUT SECTION.
       FILE-CONTROL.
            SELECT ORDER-FILE
                   ASSIGN TO 'ORDERS.DAT'
                   ORGANIZATION IS LINE SEQUENTIAL.
            SELECT KITCHEN-FILE
                   ASSIGN TO 'KITCHEN.TXT'
                   ORGANIZATION IS LINE SEQUENTIAL.
       DATA DIVISION.
       FILE SECTION.
       FD ORDER-FILE
          DATA RECORD IS ORDER-RECORD.
       01 ORDER-RECORD.
          02 SANDWICH               PIC X(15).
          02 CONDIMENTS.
             03 CATSUP              PIC X.
             03 MUSTARD             PIC X.
             03 PICKLE              PIC X.
             03 ONION               PIC X.
             03 LETTUCE             PIC X.
             03 TOMATO              PIC X.
             03 CHEESE              PIC X.
             03 TOBASCO             PIC X.

       FD KITCHEN-FILE
          DATA RECORD IS KITCHEN-RECORD.
       01 KITCHEN-RECORD            PIC X(80).

       WORKING-STORAGE SECTION.

       01 SANDWICH-LINE.
          02                        PIC X(6)         VALUE 'COOK: '.
          02 SL-SANDWICH            PIC X(15).

       01 CONDIMENT-LINE.
          02                        PIC X(8)         VALUE SPACES.
          02 CL-INSTRUCTION         PIC X(5).
          02 CL-CONDIMENT           PIC X(10).

       01 SEPARATOR-LINE            PIC X(40)        VALUE ALL '*'.

       01 CONDIMENT-COUNT           PIC 9            VALUE ZERO.

       01 EOF-SWITCH                PIC X            VALUE 'N'.
          88 END-OF-INPUT-FILE                       VALUE 'Y'.

       PROCEDURE DIVISION.
       MAIN-LINE.
           PERFORM SETUP-ROUTINE.
           PERFORM BURGER-LOOP
                   UNTIL END-OF-INPUT-FILE.
           PERFORM CLEANUP-ROUTINE.
           STOP RUN.

       SETUP-ROUTINE.
           OPEN INPUT ORDER-FILE.
           OPEN OUTPUT KITCHEN-FILE.
           READ ORDER-FILE
                AT END MOVE 'Y' TO EOF-SWITCH.

       BURGER-LOOP.
           MOVE SANDWICH TO SL-SANDWICH.
           WRITE KITCHEN-RECORD FROM SANDWICH-LINE.
           MOVE ZERO TO CONDIMENT-COUNT.
           MOVE 'ADD: ' TO CL-INSTRUCTION.
           IF CATSUP = 'Y'
              MOVE 'CATSUP' TO CL-CONDIMENT
              WRITE KITCHEN-RECORD FROM CONDIMENT-LINE
              ADD 1 TO CONDIMENT-COUNT.

           IF MUSTARD = 'Y'
              MOVE 'MUSTARD' TO CL-CONDIMENT
              WRITE KITCHEN-RECORD FROM CONDIMENT-LINE
              ADD 1 TO CONDIMENT-COUNT.

           IF PICKLE = 'Y'
              MOVE 'PICKLE' TO CL-CONDIMENT
              WRITE KITCHEN-RECORD FROM CONDIMENT-LINE
              ADD 1 TO CONDIMENT-COUNT.

           IF ONION = 'Y'
              MOVE 'ONION' TO CL-CONDIMENT
              WRITE KITCHEN-RECORD FROM CONDIMENT-LINE
              ADD 1 TO CONDIMENT-COUNT.

           IF LETTUCE = 'Y'
              MOVE 'LETTUCE' TO CL-CONDIMENT
              WRITE KITCHEN-RECORD FROM CONDIMENT-LINE
              ADD 1 TO CONDIMENT-COUNT.

           IF TOMATO = 'Y'
              MOVE 'TOMATO' TO CL-CONDIMENT
              WRITE KITCHEN-RECORD FROM CONDIMENT-LINE
              ADD 1 TO CONDIMENT-COUNT.

           IF CHEESE = 'Y'
              MOVE 'CHEESE' TO CL-CONDIMENT
              WRITE KITCHEN-RECORD FROM CONDIMENT-LINE
              ADD 1 TO CONDIMENT-COUNT.

           IF TOBASCO = 'Y'
              MOVE 'TOBASCO' TO CL-CONDIMENT
              WRITE KITCHEN-RECORD FROM CONDIMENT-LINE
              ADD 1 TO CONDIMENT-COUNT.

           IF CONDIMENT-COUNT = ZERO
              MOVE 'PLAIN' TO CL-INSTRUCTION
              MOVE SPACES TO CL-CONDIMENT
              WRITE KITCHEN-RECORD FROM CONDIMENT-LINE.

           WRITE KITCHEN-RECORD FROM SEPARATOR-LINE.

           READ ORDER-FILE
                AT END MOVE 'Y' TO EOF-SWITCH.

       CLEANUP-ROUTINE.
           CLOSE ORDER-FILE.
           CLOSE KITCHEN-FILE.

Given the following input:

BIG MAC        NYYYYNYN
WHOPPER        YYYYYYYY
QUARTER POUNDERYYYYYNYN
HAMBURGER      NNNNNNNN
SLIDER         NNYYNNNN
VEGGIE BURGER  YNNNNNNN

Here is the output:

COOK: BIG MAC
        ADD: MUSTARD
        ADD: PICKLE
        ADD: ONION
        ADD: LETTUCE
        ADD: CHEESE
****************************************
COOK: WHOPPER
        ADD: CATSUP
        ADD: MUSTARD
        ADD: PICKLE
        ADD: ONION
        ADD: LETTUCE
        ADD: TOMATO
        ADD: CHEESE
        ADD: TOBASCO
****************************************
COOK: QUARTER POUNDER
        ADD: CATSUP
        ADD: MUSTARD
        ADD: PICKLE
        ADD: ONION
        ADD: LETTUCE
        ADD: CHEESE
****************************************
COOK: HAMBURGER
        PLAIN
****************************************
COOK: SLIDER
        ADD: PICKLE
        ADD: ONION
****************************************
COOK: VEGGIE BURGER
        ADD: CATSUP
****************************************

Version 2

       IDENTIFICATION DIVISION.
       PROGRAM-ID.     YOU-WANT-FRIES-WITH-THAT.
       AUTHOR.         BILL ROGERS.
       ENVIRONMENT DIVISION.
       INPUT-OUTPUT SECTION.
       FILE-CONTROL.
            SELECT ORDER-FILE
                   ASSIGN TO 'ORDERS.DAT'
                   ORGANIZATION IS LINE SEQUENTIAL.
            SELECT KITCHEN-FILE
                   ASSIGN TO 'KITCHEN.TXT'
                   ORGANIZATION IS LINE SEQUENTIAL.
       DATA DIVISION.
       FILE SECTION.
       FD ORDER-FILE
          DATA RECORD IS ORDER-RECORD.
       01 ORDER-RECORD.
          02 SANDWICH               PIC X(15).
          02 CONDIMENTS.
             03 CATSUP              PIC X.
             03 MUSTARD             PIC X.
             03 PICKLE              PIC X.
             03 ONION               PIC X.
             03 LETTUCE             PIC X.
             03 TOMATO              PIC X.
             03 CHEESE              PIC X.
             03 TOBASCO             PIC X.

       FD KITCHEN-FILE
          DATA RECORD IS KITCHEN-RECORD.
       01 KITCHEN-RECORD            PIC X(80).

       WORKING-STORAGE SECTION.

       01 SANDWICH-LINE.
          02                        PIC X(6)         VALUE 'COOK: '.
          02 SL-SANDWICH            PIC X(15).

       01 CONDIMENT-LINE.
          02                        PIC X(8)         VALUE SPACES.
          02 CL-MESSAGE.
             03 CL-INSTRUCTION      PIC X(5).
             03 CL-CONDIMENT        PIC X(10).

       01 SEPARATOR-LINE            PIC X(40)        VALUE ALL '*'.

       01 CONDIMENT-COUNT           PIC 9            VALUE ZERO.

       01 EOF-SWITCH                PIC X            VALUE 'N'.
          88 END-OF-INPUT-FILE                       VALUE 'Y'.

       PROCEDURE DIVISION.
       MAIN-LINE.
           PERFORM SETUP-ROUTINE.
           PERFORM BURGER-LOOP
                   UNTIL END-OF-INPUT-FILE.
           PERFORM CLEANUP-ROUTINE.
           STOP RUN.

       SETUP-ROUTINE.
           OPEN INPUT ORDER-FILE.
           OPEN OUTPUT KITCHEN-FILE.
           READ ORDER-FILE
                AT END MOVE 'Y' TO EOF-SWITCH.

       BURGER-LOOP.
           MOVE SANDWICH TO SL-SANDWICH.
           WRITE KITCHEN-RECORD FROM SANDWICH-LINE.

           MOVE ZERO TO CONDIMENT-COUNT.
           INSPECT CONDIMENTS
                   TALLYING CONDIMENT-COUNT FOR ALL 'Y'.
           IF CONDIMENT-COUNT = ZERO
              MOVE 'PLAIN' TO CL-MESSAGE
              WRITE KITCHEN-RECORD FROM CONDIMENT-LINE
           ELSE IF CONDIMENT-COUNT = 8
                   MOVE 'EVERYTHING' TO CL-MESSAGE
                   WRITE KITCHEN-RECORD FROM CONDIMENT-LINE
                ELSE
                   MOVE 'ADD: ' TO CL-INSTRUCTION
                   PERFORM ADD-CONDIMENTS-TO-SANDWICH
                END-IF
           END-IF.

           WRITE KITCHEN-RECORD FROM SEPARATOR-LINE.
           READ ORDER-FILE
                AT END MOVE 'Y' TO EOF-SWITCH.


       CLEANUP-ROUTINE.
           CLOSE ORDER-FILE.
           CLOSE KITCHEN-FILE.


       ADD-CONDIMENTS-TO-SANDWICH.
           IF CATSUP = 'Y'
              MOVE 'CATSUP' TO CL-CONDIMENT
              WRITE KITCHEN-RECORD FROM CONDIMENT-LINE.

           IF MUSTARD = 'Y'
              MOVE 'MUSTARD' TO CL-CONDIMENT
              WRITE KITCHEN-RECORD FROM CONDIMENT-LINE.

           IF PICKLE = 'Y'
              MOVE 'PICKLE' TO CL-CONDIMENT
              WRITE KITCHEN-RECORD FROM CONDIMENT-LINE.

           IF ONION = 'Y'
              MOVE 'ONION' TO CL-CONDIMENT
              WRITE KITCHEN-RECORD FROM CONDIMENT-LINE.

           IF LETTUCE = 'Y'
              MOVE 'LETTUCE' TO CL-CONDIMENT
              WRITE KITCHEN-RECORD FROM CONDIMENT-LINE.

           IF TOMATO = 'Y'
              MOVE 'TOMATO' TO CL-CONDIMENT
              WRITE KITCHEN-RECORD FROM CONDIMENT-LINE.

           IF CHEESE = 'Y'
              MOVE 'CHEESE' TO CL-CONDIMENT
              WRITE KITCHEN-RECORD FROM CONDIMENT-LINE.

           IF TOBASCO = 'Y'
              MOVE 'TOBASCO' TO CL-CONDIMENT
              WRITE KITCHEN-RECORD FROM CONDIMENT-LINE.

Here is the output of the second version of the program. The only difference is for the "Whopper" where the instruction is now "Everything" instead of a listing of all 8 condiments.

COOK: BIG MAC
        ADD: MUSTARD
        ADD: PICKLE
        ADD: ONION
        ADD: LETTUCE
        ADD: CHEESE
****************************************
COOK: WHOPPER
        EVERYTHING
****************************************
COOK: QUARTER POUNDER
        ADD: CATSUP
        ADD: MUSTARD
        ADD: PICKLE
        ADD: ONION
        ADD: LETTUCE
        ADD: CHEESE
****************************************
COOK: HAMBURGER
        PLAIN
****************************************
COOK: SLIDER
        ADD: PICKLE
        ADD: ONION
****************************************
COOK: VEGGIE BURGER
        ADD: CATSUP
****************************************

Cobol Home