ฉันมีโปรแกรมที่ทำงานได้อย่างสมบูรณ์ ยกเว้นเมื่ออ่านในไฟล์ 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.