ฉันจะแก้ไขโปรแกรมบายพาสที่ไม่ทำงานได้อย่างไร

ฉันมีโปรแกรมที่ทำงานได้อย่างสมบูรณ์ ยกเว้นเมื่ออ่านในไฟล์ SEQ ควรข้าม/ข้ามบันทึกทั้งหมด จากนั้นไปยังไฟล์ถัดไปในไฟล์ ควรจะข้ามไฟล์อินพุตหากนักเรียนสำเร็จการศึกษาแล้ว (ข้ามสถานะการสำเร็จการศึกษาหากเท่ากับ 'Y') บายพาสหาก Class Standing เป็นอย่างอื่นที่ไม่ใช่ '1' หรือ '2' สุดท้ายนี้ ให้ข้ามไปหาก Major ไม่ใช่ 'DIG', 'NES' หรือ 'PGM' ฉันมีบายพาสในโปรแกรมภายใต้ 120-CHECK-BYPASS แต่ไม่ได้เรียงลำดับ/หยุดการบันทึกใดๆ จากการประมวลผล ฉันจะแก้ไขปัญหานี้ได้อย่างไร?

โปรแกรม:

       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.

person JennySoyer1    schedule 05.03.2021    source แหล่งที่มา
comment
ยินดีต้อนรับสู่ Stack Overflow! โปรดอย่าสร้างงานให้คนอื่นมากขึ้นโดยทำลายโพสต์ของคุณ ด้วยการโพสต์บนเครือข่าย Stack Exchange คุณได้ให้สิทธิ์ที่ไม่สามารถเพิกถอนได้ภายใต้ CC BY- ใบอนุญาต SA 4.0 สำหรับ Stack Exchange เพื่อเผยแพร่เนื้อหานั้น (เช่น ไม่ว่าคุณจะเลือกตัวเลือกใดในอนาคต) ตามนโยบาย Stack Exchange โพสต์เวอร์ชันที่ไม่ถูกทำลายจะเป็นเวอร์ชันที่เผยแพร่ ดังนั้นการก่อกวนใดๆ ก็ตามจะกลับคืนมา หากคุณต้องการทราบข้อมูลเพิ่มเติมเกี่ยวกับการลบโพสต์ โปรดดู: การลบทำงานอย่างไร   -  person Sabito 錆兎    schedule 05.03.2021


คำตอบ (1)


คุณกำลังและเงื่อนไขของคุณ ดูเหมือนว่าคุณต้องการหรือพวกเขา ดูเหมือนว่าคุณจะกลับตรรกะของคุณแล้ว

ฉันจะทำแบบนี้...

[...]
   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.

นี่เป็นเพียงการเขียนด้วยมือเปล่า ฉันไม่ได้พยายามรวบรวมมัน

person cschneid    schedule 05.03.2021