EDIT ASSIGNMENT: Analyze the program and then answer the questions below.

       IDENTIFICATION DIVISION.
       PROGRAM-ID. EDITINCL.
       ENVIRONMENT DIVISION.
       INPUT-OUTPUT SECTION.
       FILE-CONTROL.
	   SELECT FILE-EDIT
                ASSIGN TO "C:\PCOBWIN\CIS12FST\EDITINCL.DAT".
           SELECT VALID-EDIT
                ASSIGN TO "C:\PCOBWIN\CIS12FST\EDITGOOD.DAT".
           SELECT PRINT-FILE
                ASSIGN TO "C:\PCOBWIN\CIS12FST\EDITERR.DAT".
       DATA DIVISION.
       FILE SECTION.
       FD  FILE-EDIT
           DATA RECORD IS REC-EDIT.
       01  REC-EDIT                  PIC X(57).
       FD  VALID-EDIT
           DATA RECORD IS VALID-REC.
       01  VALID-REC                 PIC X(57).
       FD  PRINT-FILE
	     DATA RECORD IS PRINTZ.
       01  PRINTZ                    PIC X(81).
       WORKING-STORAGE SECTION.
       01  INDICATORS.
	   05  MORE-RECS	   PIC XXX     VALUE "YES".
           05  VALID-REC-IND     PIC XXX     VALUE "YES".
               88  GOOD-REC                  VALUE "YES".
               88  INVALID-REC               VALUE "NO ".
       01  EDIT-AREA.
           05  ITEM-NO           PIC 9(6).
           05  RDF-ITEM-NO REDEFINES ITEM-NO PIC X(6).
	   05  ITEM-NAME	   PIC X(20).
	   05  DEPT		   PIC XXXXX.
               88  VALID-DEPT    VALUE "MEN  " "WOMEN" "GIRLS" "BOYS ".
	   05  ON-HAND		   PIC 9(5).
           05  RDF-ON-HAND REDEFINES ON-HAND PIC X(5).
	   05  ON-ORDER 	   PIC 9(5).
           05  RDF-ON-ORDER REDEFINES ON-ORDER PIC X(5).
	   05  RE-ORDER-PT	   PIC 9(5).
           05  RDF-RE-ORDER-PT REDEFINES RE-ORDER-PT PIC X(5).
	   05  COST	         PIC 999V99.
           05  RDF-COST REDEFINES COST PIC X(5).
	   05  PRICE		   PIC 9999V99.
           05  RDF-PRICE REDEFINES PRICE PIC X(6).
       01  EDIT-LINE.
	   05  FILLER		   PIC X(1)     VALUE SPACES.
           05  ITEM-NO-PR        PIC X(6)     VALUE SPACES.
	   05  FILLER		   PIC X(5)     VALUE SPACES.
           05  DATA-IN-ERROR     PIC X(20)    VALUE SPACES.
	   05  FILLER		   PIC X(5)     VALUE SPACES.
           05  MSG-PR            PIC X(30)    VALUE SPACES.
	   05  FILLER		   PIC X(14)    VALUE SPACES.
       PROCEDURE DIVISION.
       MAINLINE.
           PERFORM A-100-STARTUP.
           PERFORM B-100-PROCESS.
           PERFORM C-100-WRAPUP.
           STOP RUN.
       A-100-STARTUP.
           OPEN INPUT FILE-EDIT
                OUTPUT VALID-EDIT
                       PRINT-FILE.
       B-100-PROCESS.
           READ FILE-EDIT INTO EDIT-AREA
               AT END
                   MOVE "NO " TO MORE-RECS.
           PERFORM B-200-LOOP
               UNTIL MORE-RECS = "NO ".
       B-200-LOOP.
           MOVE "YES" TO VALID-REC-IND.
           PERFORM B-300-EDIT-RECORD.
           IF GOOD-REC
               MOVE EDIT-AREA TO VALID-REC
               WRITE VALID-REC.
           READ FILE-EDIT INTO EDIT-AREA
               AT END
                   MOVE "NO " TO MORE-RECS.
       B-300-EDIT-RECORD.
           MOVE SPACES TO EDIT-LINE.
           IF ITEM-NO IS NOT NUMERIC
               MOVE RDF-ITEM-NO TO DATA-IN-ERROR
               MOVE "ITEM NUMBER NOT NUMERIC" TO MSG-PR
               PERFORM U-100-WRITE-ERROR
           END-IF
           IF ITEM-NAME = SPACES
               MOVE "ITEM NAME IS BLANK" TO MSG-Pr
               PERFORM U-100-WRITE-ERROR
           END-IF
           IF NOT VALID-DEPT
               MOVE DEPT TO DATA-IN-ERROR
               MOVE "INVALID DEPT NAME" TO MSG-PR
               PERFORM U-100-WRITE-ERROR
           END-IF
           IF ON-HAND NOT NUMERIC
               MOVE RDF-ON-HAND TO DATA-IN-ERROR
               MOVE "ON HAND NOT NUMERIC" TO MSG-PR
               PERFORM U-100-WRITE-ERROR
           END-IF
           IF ON-ORDER NOT NUMERIC
               MOVE RDF-ON-ORDER TO DATA-IN-ERROR
               MOVE "ON ORDER NOT NUMERIC" TO MSG-PR
               PERFORM U-100-WRITE-ERROR
           END-IF
           IF RE-ORDER-PT NOT NUMERIC
               MOVE RDF-RE-ORDER-PT TO DATA-IN-ERROR
               MOVE "REORDER POINT NOT NUMERIC" TO MSG-PR
               PERFORM U-100-WRITE-ERROR
           ELSE
               IF RE-ORDER-PT = 0
                   MOVE RE-ORDER-PT TO DATA-IN-ERROR
                   MOVE "REORDER POINT ZERO" TO MSG-PR
                   PERFORM U-100-WRITE-ERROR
               END-IF
           END-IF
           IF COST NOT NUMERIC
               MOVE RDF-COST TO DATA-IN-ERROR
               MOVE "COST NOT NUMERIC" TO MSG-PR
               PERFORM U-100-WRITE-ERROR
           END-IF
           IF PRICE NOT NUMERIC
               MOVE RDF-PRICE TO DATA-IN-ERROR
               MOVE "PRICE NOT NUMERIC" TO MSG-PR
               PERFORM U-100-WRITE-ERROR
           END-IF
           IF PRICE NUMERIC AND COST NUMERIC AND PRICE LESS THAN COST
                   MOVE RDF-PRICE TO DATA-IN-ERROR
                   MOVE "PRICE LESS THAN COST" TO MSG-PR
                   PERFORM U-100-WRITE-ERROR
               END-IF
           END-IF.
       C-100-WRAPUP.
           CLOSE FILE-EDIT
                 VALID-EDIT
                 PRINT-FILE.
       U-100-WRITE-ERROR.
           MOVE RDF-ITEM-NO TO ITEM-NO-PR.
           MOVE "NO " TO VALID-REC-IND.
           WRITE PRINTZ FROM EDIT-LINE
               AFTER ADVANCING 1 LINES.




 
Question #1: B-200-LOOP control code can be written several ways - circle all code that would work and explain problems.

Way #1:

B-200-LOOP.
    PERFORM B-300-EDIT-RECORD.
    MOVE "YES" TO VALID-REC-IND.
    IF GOOD-REC
         MOVE EDIT-AREA TO VALID-REC
         WRITE VALID-REC.
         READ FILE-EDIT INTO EDIT-AREA
            AT END
                MOVE "NO " TO MORE-RECS.

Way #2:

B-200-LOOP.
    MOVE "YES" TO VALID-REC-IND.
    PERFORM B-300-EDIT-RECORD.
    IF GOOD-REC
         MOVE EDIT-AREA TO VALID-REC
         WRITE VALID-REC.
         READ FILE-EDIT INTO EDIT-AREA
            AT END
                MOVE "NO " TO MORE-RECS.

Way #3:

B-200-LOOP.
    MOVE "YES" TO VALID-REC-IND.
    PERFORM B-300-EDIT-RECORD.
    IF VALID-REC-IND = "YES"
         MOVE EDIT-AREA TO VALID-REC
         WRITE VALID-REC.
         READ FILE-EDIT INTO EDIT-AREA
            AT END
                MOVE "NO " TO MORE-RECS.

Way #4:

B-200-LOOP.
    MOVE "YES" TO VALID-REC-IND.
    PERFORM B-300-EDIT-RECORD.
    IF INVALID-REC
         NEXT SENTENCE
    ELSE
         MOVE EDIT-AREA TO VALID-REC
         WRITE VALID-REC.
         READ FILE-EDIT INTO EDIT-AREA
            AT END
                MOVE "NO " TO MORE-RECS
         END-READ
    END-IF.

Question #2: Circle all code that is correct - explain problem with any that are wrong.

Way #1:

READ FILE-EDIT
    AT END
        MOVE "NO " TO MORE-RECS.
MOVE REC-EDIT TO EDIT-AREA.

Way #2:

READ FILE-EDIT INTO EDIT-AREA
    AT END
        MOVE "NO " TO MORE-RECS.

Wat #3:

READ FILE-EDIT
    AT END
        MOVE "NO " TO MORE-RECS
END-READ.

Data being read: (EDITINCL.DAT)

121212SKIRT               WOMEN00012000200002502500003795
123456TIE                 MEN  00ABC000340003500900001099
212121JEANS               BOY  0004500023000XX01500001995
234567BLOUSE              WOMEN00012000200002002000002499
345678DRESS               GIRLS00056000000000001500001799
454545SLACKS              MENS XXXXXXXXXXXXXXXXXXXXXXXXXX
567899                                                   
ABCDEFSHIRT               BOYS 00001ABCDE000040003400032 
888888JUMPER              GIRLS00012000140002301500001895

Question #3: Looking at the data above and at the program, which of the following is the correct output (EDITGOOD.DAT).

Output #1:

121212SKIRT               WOMEN00012000200002502500003795
212121JEANS               BOY  0004500023000XX01500001995
234567BLOUSE              WOMEN00012000200002002000002499
888888JUMPER              GIRLS00012000140002301500001895

Output #2:

121212SKIRT               WOMEN00012000200002502500003795
888888JUMPER              GIRLS00012000140002301500001895

Output #3:

121212SKIRT               WOMEN00012000200002502500003795
234567BLOUSE              WOMEN00012000200002002000002499
888888JUMPER              GIRLS00012000140002301500001895

Question #4: Looking at the data above and at the program, which of the following is the correct output (EDITERR.DAT).

Output #1:

 123456     00ABC                    ON HAND NOT NUMERIC                         
 212121     BOY                      INVALID DEPT NAME
 345678     00000                    REORDER POINT ZERO                          
 454545     MENS                     INVALID DEPT NAME
 567899                              PRICE NOT NUMERIC                           
 ABCDEF     ABCDEF                   ITEM NUMBER NOT NUMERIC

Output #2:

 123456     00ABC                    ON HAND NOT NUMERIC                         
 212121     BOY                      INVALID DEPT NAME                           
 212121     000XX                    REORDER POINT NOT NUMERIC                   
 345678     00000                    REORDER POINT ZERO                          
 454545     MENS                     INVALID DEPT NAME                           
 454545     XXXXX                    ON HAND NOT NUMERIC                         
 454545     XXXXX                    ON ORDER NOT NUMERIC                        
 454545     XXXXX                    REORDER POINT NOT NUMERIC                   
 454545     XXXXX                    COST NOT NUMERIC                            
 454545     XXXXXX                   PRICE NOT NUMERIC                           
 567899                              ITEM NAME IS BLANK                          
 567899                              INVALID DEPT NAME                           
 567899                              ON HAND NOT NUMERIC                         
 567899                              ON ORDER NOT NUMERIC                        
 567899                              REORDER POINT NOT NUMERIC                   
 567899                              COST NOT NUMERIC                            
 567899                              PRICE NOT NUMERIC                           
 ABCDEF     ABCDEF                   ITEM NUMBER NOT NUMERIC                     
 ABCDEF     ABCDE                    ON ORDER NOT NUMERIC                        
 ABCDF     00032                    PRICE NOT NUMERIC

Output #3:

 123456     00ABC                    ON HAND NOT NUMERIC                         
 212121     BOY                      INVALID DEPT NAME                           
 212121     000XX                    REORDER POINT NOT NUMERIC                   
 345678     00000                    REORDER POINT ZERO                          
 454545     MENS                     INVALID DEPT NAME                           
 454545     XXXXX                    ON HAND NOT NUMERIC                         
 454545     XXXXX                    ON ORDER NOT NUMERIC                        
 454545     XXXXX                    REORDER POINT NOT NUMERIC                   
 454545     XXXXX                    COST NOT NUMERIC                            
 454545     XXXXXX                   PRICE NOT NUMERIC                           
 567899                              ITEM NAME IS BLANK                          
 567899                              INVALID DEPT NAME                           
 ABCDEF     ABCDEF                   ITEM NUMBER NOT NUMERIC                     
 ABCDEF     ABCDE                    ON ORDER NOT NUMERIC                        
 ABCDEF     00032                    PRICE NOT NUMERIC

Question #5: There are multiple ways to code programs. Circle the correct code and explain the problems with the incorrect code.

Way #1:

IF RE-ORDER-PT NOT NUMERIC
    MOVE RDF-RE-ORDER-PT TO DATA-IN-ERROR
    MOVE "REORDER POINT NOT NUMERIC" TO MSG-PR
    PERFORM U-100-WRITE-ERROR
ELSE
    IF RE-ORDER-PT = 0
        MOVE RE-ORDER-PT TO DATA-IN-ERROR
        MOVE "REORDER POINT ZERO" TO MSG-PR
        PERFORM U-100-WRITE-ERROR
    END-IF
END-IF

Way #2:

IF RE-ORDER-PT NOT NUMERIC
    MOVE RDF-RE-ORDER-PT TO DATA-IN-ERROR
    MOVE "REORDER POINT NOT NUMERIC" TO MSG-PR
    PERFORM U-100-WRITE-ERROR
ELSE
    IF RE-ORDER-PT = 0
        MOVE RE-ORDER-PT TO DATA-IN-ERROR
        MOVE "REORDER POINT ZERO" TO MSG-PR
        PERFORM U-100-WRITE-ERROR.

Way #3:

IF RE-ORDER-PT NOT NUMERIC
    MOVE RE-ORDER-PT TO DATA-IN-ERROR
    MOVE "REORDER POINT NOT NUMERIC" TO MSG-PR
    PERFORM U-100-WRITE-ERROR
ELSE
    IF RE-ORDER-PT = 0
        MOVE RE-ORDER-PT TO DATA-IN-ERROR
        MOVE "REORDER POINT ZERO" TO MSG-PR
        PERFORM U-100-WRITE-ERROR.

Way #4:

IF RE-ORDER-PT NOT NUMERIC OR RE-ORDER-PT = 0
    MOVE RE-ORDER-PT TO DATA-IN-ERROR
    MOVE "INVALID REORDER POINT" TO MSG-PR
    PERFORM U-100-WRITE-ERROR.