如何修复不起作用的程序旁路?

How do I fix a program bypass that is not working?

我有一个运行良好的程序,除了在读取 SEQ 文件时,它假设 skip/bypass 整个记录然后移动到文件中的下一个。如果学生已经毕业,则假设绕过输入文件(如果等于 'Y',则跳过毕业状态)。如果 Class 声望不是“1”或“2”,则绕过。最后,如果 Major 不是 'DIG'、'NES' 或 'PGM',则绕过。我在 120-CHECK-BYPASS 下的程序中有一个旁路。但它不是 sorting/stopping 任何来自处理的记录。我该如何解决这个问题?

节目:

       ENVIRONMENT DIVISION.
       INPUT-OUTPUT SECTION.
       FILE-CONTROL.
     
           SELECT STUDENTS-FILE-IN
               ASSIGN TO 'STUDENTS.SEQ'
               ORGANIZATION IS LINE SEQUENTIAL.
     
           SELECT STUDENTS-FILE-OUT
               ASSIGN TO 'STUDENTS.RPT'
               ORGANIZATION IS LINE SEQUENTIAL.
     
       DATA DIVISION.
       FILE SECTION.
       FD  STUDENTS-FILE-IN.
       01  STUDENTS-RECORD-IN.
           05  SOCIAL-SECURITY-NUMBER-FIRST-IN           PIC X(3).
           05  SOCIAL-SECURITY-NUMBER-MIDDLE-IN          PIC X(2).
           05  SOCIAL-SECURITY-NUMBER-LAST-IN            PIC X(4).
           05  STUDENT-NAME-FIRST-IN                     PIC X.
           05  STUDENT-NAME-MIDDLE-IN                    PIC X.
           05  STUDENT-NAME-LAST-IN                      PIC X(9).
           05                                            PIC X(5).
           05  GRADUATION-STATUS-IN                      PIC X.
           05  CLASS-STANDING-IN                         PIC X.
           05  MAJOR-IN                                  PIC X(3).
           05  CREDIT-HOURS-EARNED-IN                    PIC 9(3).
           05  CREDIT-POINTS-EARNED-IN                   PIC 9(3).
       
       
       FD  STUDENTS-FILE-OUT.
       01  STUDENTS-RECORD-OUT         PIC X(80).
          
       WORKING-STORAGE SECTION.
       01  ARE-THERE-MORE-RECORDS       PIC X(3)       VALUE 'YES'.
       01  LINES-PRINTED                PIC 99         VALUE 99.
       01  PAGE-NUMBER                  PIC 99         VALUE ZERO.
       01  WS-FIRST-TIME-THRU           PIC X(3)       VALUE 'YES'.
       01  WS-GPA                       PIC Z.ZZ       VALUE ZERO.
       01  WS-GRAND-HOURS               PIC 9(7)       VALUE ZERO.
       01  WS-GRAND-POINTS              PIC 9(7)       VALUE ZERO.
       01  WS-GRAND-GPA                 PIC Z.ZZ       VALUE ZERO.
       01  WS-PRO-STUDENT               PIC 9(2)       VALUE ZERO.
       01  WS-GRAND-PRO-STUDENT         PIC 99V9       VALUE ZERO.
       01  WS-PRO-GPA-NUM               PIC 99         VALUE ZERO.
       01  WS-DIG-STUDENT               PIC 99         VALUE ZERO.
       01  WS-DIG-GPA-NUM               PIC 99         VALUE ZERO.
       01  WS-GRAND-DIG-STUDENT         PIC 99V9       VALUE ZERO.
       01  WS-GRAND-NES-STUDENT         PIC 99V9       VALUE ZERO.
       01  WS-NES-STUDENT               PIC 99         VALUE ZERO.
       01  WS-NES-GPA-NUM               PIC 99         VALUE ZERO.
       01  WS-OTHER                     PIC 99         VALUE ZERO.

       01  WS-CURRENT-DATE-DATA.
           05  WS-CURRENT-DATE.
               10  RUN-YEAR                 PIC XX.
               10  RUN-MONTH                PIC XX.
               10  RUN-DAY                  PIC XX.
    
       01  HEADING-LINE-1.
           05                           PIC X(22)   VALUE SPACES.
           05                           PIC X(33)   VALUE '------ ----- ------- ----- ------'.
           05                           PIC X(6)    VALUE SPACES.
           05  HL-1-DATE.
               10  MONTH-2              PIC XX.
               10                       PIC X       VALUE'/'.
               10  DAY-2                PIC XX.
               10                       PIC X       VALUE'/'.
               10  YEAR-2               PIC XX.
           05                           PIC X(4)    VALUE SPACES.
           05                           PIC X(4)    VALUE 'PAGE'.
           05  HL-1-PAGE-NUMBER         PIC Z9.
    
       01  HEADING-LINE-2.
           05                           PIC X        VALUE SPACE.
           05                           PIC X(10)    VALUE 'SOC SEC NO'.
           05                           PIC X(4)     VALUE SPACES.
           05                           PIC X(12)    VALUE 'STUDENT NAME'.
           05                           PIC X(3)     VALUE SPACES.
           05                           PIC X(8)     VALUE 'STANDING'.
           05                           PIC X(4)     VALUE SPACES.
           05                           PIC X(5)     VALUE 'MAJOR'.
           05                           PIC X(10)    VALUE  SPACES.
           05                           PIC X(5)     VALUE 'HOURS'.
           05                           PIC X(2)     VALUE  SPACES.
           05                           PIC X(6)     VALUE  'POINTS'.
           05                           PIC X(5)     VALUE  SPACES.
           05                           PIC X(3)     VALUE  'GPA'.
           
       01  DETAIL-LINE.
           05                                        PIC X        VALUE SPACE.
           05  SOCIAL-SECURITY-NUMBER-FIRST-OUT      PIC X(3).
           05  SSN-FDASH                             PIC X        VALUE "-".
           05  SOCIAL-SECURITY-NUMBER-MIDDLE-OUT     PIC X(2).
           05  SSN-MDASH                             PIC X        VALUE "-".
           05  SOCIAL-SECURITY-NUMBER-LAST-OUT       PIC X(4).
           05                                        PIC X(3)     VALUE SPACES.
           05  STUDENT-NAME-FIRST-OUT                PIC X.
           05                                        PIC X        VALUE SPACE.
           05  STUDENT-NAME-MIDDLE-OUT               PIC X.
           05                                        PIC X        VALUE SPACE.
           05  STUDENT-NAME-LAST-OUT                 PIC X(9).
           05                                        PIC X(2)     VALUE SPACES.
           05  CLASS-STANDING-OUT                    PIC X(9).
           05                                        PIC X(3)     VALUE SPACES.
           05  MAJOR-OUT                             PIC X(13).
           05                                        PIC X(4)     VALUE SPACES.
           05  HOURS-OUT                             PIC ZZZ.
           05                                        PIC X(5)     VALUE SPACES.
           05  POINTS-OUT                            PIC ZZZ.
           05                                        PIC X(4)     VALUE SPACES.
           05  STUDENT-GPA-OUT                       PIC 9.99.
           
       01  TOTALS-LINE.
           05                      PIC X          VALUE SPACE.
           05                      PIC X(6)       VALUE 'Totals'.
           05                      PIC X(50)      VALUE SPACES.
           05  TL-GRAND-HOURS      PIC Z,ZZZ.
           05                      PIC X(2)      VALUE SPACES.
           05  TL-GRAND-POINTS     PIC ZZ,ZZZ.
           05                      PIC X(4)       VALUE SPACES.
           05  TL-GRAND-GPA        PIC 9.99.
           
       01  TOTALS-LINE-2A.
           05                      PIC X          VALUE SPACE.
           05                      PIC X(19)      VALUE 'Programming Majors:'.
           
       01  TOTALS-LINE-2B.
           05                          PIC X(5)       VALUE SPACES.
           05                          PIC X(18)      VALUE 'Number of students'.
           05                          PIC X(9)       VALUE SPACES.
           05  TL-GRAND-PRO-STUDENT    PIC X(2).    
           
       01  TOTALS-LINE-2C.
           05                          PIC X(5)       VALUE SPACES.
           05                          PIC X(21)      VALUE 'Number with GPA > 3.0'.
           05                          PIC X(6)       VALUE SPACES.
           05  TL-GRAND-PRO-NUM-GPA    PIC X(2).
           
       01  TOTALS-LINE-2D.
           05                          PIC X(5)       VALUE SPACES.
           05                          PIC X(22)      VALUE 'Percent with GPA > 3.0'.
           05                          PIC X(5)       VALUE SPACES.
           05  TL-GRAND-PRO-GPA-PER    PIC 99.9.
           05                          PIC X          VALUE '%'.
       
       01  TOTALS-LINE-3A.
           05                      PIC X          VALUE SPACE.
           05                      PIC X(21)      VALUE 'Digital Media Major:'.
           
       01  TOTALS-LINE-3B.
           05                          PIC X(5)       VALUE SPACES.
           05                          PIC X(18)      VALUE 'Number of students'.
           05                          PIC X(9)       VALUE SPACES.
           05  TL-GRAND-DIG-STUDENT    PIC X(2).    
           
       01  TOTALS-LINE-3C.
           05                          PIC X(5)       VALUE SPACES.
           05                          PIC X(21)      VALUE 'Number with GPA > 3.0'.
           05                          PIC X(6)       VALUE SPACES.
           05  TL-GRAND-DIG-NUM-GPA    PIC XX.
           
       01  TOTALS-LINE-3D.
           05                          PIC X(5)       VALUE SPACES.
           05                          PIC X(22)      VALUE 'Percent with GPA > 3.0'.
           05                          PIC X(5)       VALUE SPACES.
           05  TL-GRAND-DIG-GPA-PER    PIC 99.9.
           05                          PIC X          VALUE '%'.
           
       01  TOTALS-LINE-4A.
           05                      PIC X          VALUE SPACE.
           05                      PIC X(24)      VALUE 'Network Security Major:'.
           
       01  TOTALS-LINE-4B.
           05                          PIC X(5)       VALUE SPACES.
           05                          PIC X(18)      VALUE 'Number of students'.
           05                          PIC X(9)       VALUE SPACES.
           05  TL-GRAND-NET-STUDENT    PIC X(2).    
           
       01  TOTALS-LINE-4C.
           05                          PIC X(5)       VALUE SPACES.
           05                          PIC X(21)      VALUE 'Number with GPA > 3.0'.
           05                          PIC X(6)       VALUE SPACES.
           05  TL-GRAND-NET-NUM-GPA    PIC XX.
           
       01  TOTALS-LINE-4D.
           05                          PIC X(5)       VALUE SPACES.
           05                          PIC X(22)      VALUE 'Percent with GPA > 3.0'.
           05                          PIC X(5)       VALUE SPACES.
           05  TL-GRAND-NET-GPA-PER    PIC ZZ.9.
           05                          PIC X          VALUE '%'.
       
       PROCEDURE DIVISION.
       100-MAIN.
           OPEN INPUT STUDENTS-FILE-IN
           OPEN OUTPUT STUDENTS-FILE-OUT
           
           ACCEPT WS-CURRENT-DATE FROM DATE
           MOVE RUN-MONTH TO MONTH-2
           MOVE RUN-DAY TO DAY-2
           MOVE RUN-YEAR TO YEAR-2
           PERFORM 300-WRITE-HEADINGS
           
           PERFORM UNTIL ARE-THERE-MORE-RECORDS = 'NO'
               READ STUDENTS-FILE-IN
                   AT END
                       PERFORM 400-TOTALS-ROUTINE
                       PERFORM 700-GRAND-TOTALS-PROGRAMMING
                       PERFORM 800-PRO-GPA
                       MOVE 'NO ' TO ARE-THERE-MORE-RECORDS
                   NOT AT END
                       PERFORM 120-CHECK-BYPASS
               END-READ
           END-PERFORM
     
           CLOSE STUDENTS-FILE-IN
           CLOSE STUDENTS-FILE-OUT
           STOP RUN.
       
       120-CHECK-BYPASS.
           IF GRADUATION-STATUS-IN NOT EQUAL TO 'Y'
           AND CLASS-STANDING-IN EQUAL TO '1' OR '2'
           AND MAJOR-IN IS EQUAL TO 'DIG' OR 'NES' OR 'PGM'
               PERFORM 200-PROCESS-ONE-RECORD
           ELSE CONTINUE
           END-IF.
       
       200-PROCESS-ONE-RECORD.
           IF LINES-PRINTED > 57
               PERFORM 300-WRITE-HEADINGS
           END-IF
           PERFORM 725-PRO-STUDENT-NUM
           COMPUTE WS-GPA ROUNDED = CREDIT-POINTS-EARNED-IN / CREDIT-HOURS-EARNED-IN
           MOVE SOCIAL-SECURITY-NUMBER-FIRST-IN TO SOCIAL-SECURITY-NUMBER-FIRST-OUT
           MOVE SOCIAL-SECURITY-NUMBER-MIDDLE-IN TO SOCIAL-SECURITY-NUMBER-MIDDLE-OUT
           MOVE SOCIAL-SECURITY-NUMBER-LAST-IN TO SOCIAL-SECURITY-NUMBER-LAST-OUT
           MOVE STUDENT-NAME-FIRST-IN TO STUDENT-NAME-FIRST-OUT
           MOVE STUDENT-NAME-MIDDLE-IN TO STUDENT-NAME-MIDDLE-OUT
           MOVE STUDENT-NAME-LAST-IN TO STUDENT-NAME-LAST-OUT
           MOVE CLASS-STANDING-IN TO CLASS-STANDING-OUT
           PERFORM 600-YEAR-PRINT
           MOVE MAJOR-IN TO MAJOR-OUT
           PERFORM 500-MAJOR-PRINT
           MOVE CREDIT-HOURS-EARNED-IN TO HOURS-OUT
           MOVE CREDIT-POINTS-EARNED-IN TO POINTS-OUT
           MOVE WS-GPA TO STUDENT-GPA-OUT
           MOVE DETAIL-LINE TO STUDENTS-RECORD-OUT
           WRITE STUDENTS-RECORD-OUT
               AFTER ADVANCING 1 LINES
           ADD 2 TO LINES-PRINTED
           COMPUTE WS-GRAND-HOURS = WS-GRAND-HOURS + CREDIT-HOURS-EARNED-IN
           COMPUTE WS-GRAND-POINTS = WS-GRAND-POINTS + CREDIT-POINTS-EARNED-IN
           COMPUTE WS-GRAND-GPA ROUNDED = WS-GRAND-POINTS / WS-GRAND-HOURS
           PERFORM 800-PRO-GPA.
           
       300-WRITE-HEADINGS.
           ADD 1 TO PAGE-NUMBER
           MOVE PAGE-NUMBER TO HL-1-PAGE-NUMBER
           MOVE HEADING-LINE-1 TO STUDENTS-RECORD-OUT
           
           IF WS-FIRST-TIME-THRU = 'YES'
               WRITE STUDENTS-RECORD-OUT
               MOVE 'NO' TO WS-FIRST-TIME-THRU
           ELSE
               WRITE STUDENTS-RECORD-OUT AFTER ADVANCING PAGE
           END-IF
               
           MOVE HEADING-LINE-2 TO STUDENTS-RECORD-OUT
           WRITE STUDENTS-RECORD-OUT
               AFTER ADVANCING 2
           MOVE 3 TO LINES-PRINTED.
           
       400-TOTALS-ROUTINE.
           IF LINES-PRINTED > 57
               PERFORM 300-WRITE-HEADINGS
           END-IF
           MOVE WS-GRAND-HOURS TO TL-GRAND-HOURS
           MOVE WS-GRAND-POINTS TO TL-GRAND-POINTS
           MOVE WS-GRAND-GPA TO TL-GRAND-GPA
           MOVE TOTALS-LINE TO STUDENTS-RECORD-OUT
           WRITE STUDENTS-RECORD-OUT AFTER ADVANCING 2 LINES
           ADD 2 TO LINES-PRINTED.
           
       500-MAJOR-PRINT.
           
           EVALUATE MAJOR-OUT
           WHEN = 'NES'
               MOVE 'Net Security' TO MAJOR-OUT
           WHEN = 'PGM'
               MOVE 'Programming' TO MAJOR-OUT
           WHEN = 'DIG'
               MOVE 'Digital Media' TO MAJOR-OUT
           WHEN OTHER
               MOVE '------' TO MAJOR-OUT
           END-EVALUATE.
       
       600-YEAR-PRINT.

           EVALUATE CLASS-STANDING-OUT
           WHEN = '1'
               MOVE 'First Yr' TO CLASS-STANDING-OUT
           WHEN = '2'
               MOVE 'Second Yr' TO CLASS-STANDING-OUT
           WHEN OTHER
               MOVE '------' TO CLASS-STANDING-OUT
           END-EVALUATE.

       700-GRAND-TOTALS-PROGRAMMING.
           MOVE TOTALS-LINE-2A TO STUDENTS-RECORD-OUT
           WRITE STUDENTS-RECORD-OUT
               AFTER ADVANCING 4 LINES
           MOVE WS-PRO-STUDENT TO TL-GRAND-PRO-STUDENT
           MOVE TOTALS-LINE-2B TO STUDENTS-RECORD-OUT
           WRITE STUDENTS-RECORD-OUT
               AFTER ADVANCING 1 LINE
           MOVE WS-PRO-GPA-NUM TO TL-GRAND-PRO-NUM-GPA
           MOVE TOTALS-LINE-2C TO STUDENTS-RECORD-OUT
           WRITE STUDENTS-RECORD-OUT
               AFTER ADVANCING 1 LINE
           COMPUTE WS-GRAND-PRO-STUDENT = (WS-PRO-GPA-NUM / WS-PRO-STUDENT) * 100
           MOVE WS-GRAND-PRO-STUDENT TO TL-GRAND-PRO-GPA-PER
           MOVE TOTALS-LINE-2D TO STUDENTS-RECORD-OUT
           WRITE STUDENTS-RECORD-OUT
               AFTER ADVANCING 1 LINE
           MOVE TOTALS-LINE-3A TO STUDENTS-RECORD-OUT
           WRITE STUDENTS-RECORD-OUT
               AFTER ADVANCING 2 LINES
           MOVE WS-DIG-STUDENT TO TL-GRAND-DIG-STUDENT
           MOVE TOTALS-LINE-3B TO STUDENTS-RECORD-OUT
           WRITE STUDENTS-RECORD-OUT
               AFTER ADVANCING 1 LINE
           MOVE WS-DIG-GPA-NUM TO TL-GRAND-DIG-NUM-GPA
           MOVE TOTALS-LINE-3C TO STUDENTS-RECORD-OUT
           WRITE STUDENTS-RECORD-OUT
               AFTER ADVANCING 1 LINE
           COMPUTE WS-GRAND-DIG-STUDENT = (WS-DIG-GPA-NUM / WS-DIG-STUDENT) * 100
           MOVE WS-GRAND-DIG-STUDENT TO TL-GRAND-DIG-GPA-PER
           MOVE TOTALS-LINE-3D TO STUDENTS-RECORD-OUT
           WRITE STUDENTS-RECORD-OUT
               AFTER ADVANCING 1 LINE
           MOVE TOTALS-LINE-4A TO STUDENTS-RECORD-OUT
           WRITE STUDENTS-RECORD-OUT
               AFTER ADVANCING 2 LINES
           MOVE WS-NES-STUDENT TO TL-GRAND-NET-STUDENT
           MOVE TOTALS-LINE-4B TO STUDENTS-RECORD-OUT
           WRITE STUDENTS-RECORD-OUT
               AFTER ADVANCING 1 LINE
           MOVE WS-NES-GPA-NUM TO TL-GRAND-NET-NUM-GPA
           MOVE TOTALS-LINE-4C TO STUDENTS-RECORD-OUT
           WRITE STUDENTS-RECORD-OUT
               AFTER ADVANCING 1 LINE
           COMPUTE WS-GRAND-NES-STUDENT = (WS-NES-GPA-NUM / WS-NES-STUDENT) * 100
           MOVE WS-GRAND-NES-STUDENT TO TL-GRAND-NET-GPA-PER
           MOVE TOTALS-LINE-4D TO STUDENTS-RECORD-OUT
           WRITE STUDENTS-RECORD-OUT
               AFTER ADVANCING 1 LINE.
           
           
       725-PRO-STUDENT-NUM.
           EVALUATE MAJOR-IN
           WHEN = 'NES'
               ADD 1 TO WS-NES-STUDENT
           WHEN = 'PGM'
               ADD 1 TO WS-PRO-STUDENT
           WHEN = 'DIG'
               ADD 1 TO WS-DIG-STUDENT
           WHEN OTHER
               MOVE 0 TO WS-OTHER
           END-EVALUATE.
       
       800-PRO-GPA.
           EVALUATE MAJOR-IN ALSO STUDENT-GPA-OUT
           WHEN = 'NES' ALSO > '3.0'
               ADD 1 TO WS-NES-GPA-NUM
           WHEN = 'PGM' ALSO > '3.0'
               ADD 1 TO WS-PRO-GPA-NUM
           WHEN = 'DIG' ALSO > '3.0'
               ADD 1 TO WS-DIG-GPA-NUM
           WHEN OTHER
               MOVE 0 TO WS-OTHER
           END-EVALUATE.

您正在对您的条件进行 AND 运算。看来您想对它们进行 OR。另外你的逻辑好像反了。

我会这样做...

[...]
   FD  STUDENTS-FILE-IN.
   01  STUDENTS-RECORD-IN.
       05  SOCIAL-SECURITY-NUMBER-FIRST-IN           PIC X(3).
       05  SOCIAL-SECURITY-NUMBER-MIDDLE-IN          PIC X(2).
       05  SOCIAL-SECURITY-NUMBER-LAST-IN            PIC X(4).
       05  STUDENT-NAME-FIRST-IN                     PIC X.
       05  STUDENT-NAME-MIDDLE-IN                    PIC X.
       05  STUDENT-NAME-LAST-IN                      PIC X(9).
       05                                            PIC X(5).
       05  GRADUATION-STATUS-IN                      PIC X.
           88  STUDENT-HAS-GRADUATED                 VALUE 'Y'
       05  CLASS-STANDING-IN                         PIC X.
           88  CLASS-STANDING-TO-SKIP                VALUES '1' '2'.
       05  MAJOR-IN                                  PIC X(3).
           88  MAJOR-TO-SKIP                         VALUES
                                                     'DIG' 'NES' 'PGM'.
       05  CREDIT-HOURS-EARNED-IN                    PIC 9(3).
       05  CREDIT-POINTS-EARNED-IN                   PIC 9(3).

[...]
   120-CHECK-BYPASS.
       IF STUDENT-HAS-GRADUATED
       OR CLASS-STANDING-TO-SKIP
       OR MAJOR-TO-SKIP
           CONTINUE
       ELSE
           PERFORM 200-PROCESS-ONE-RECORD
       END-IF.

这只是写意,我没试过编译。