IDENTIFICATION DIVISION. PROGRAM-ID. CHAPTER7. ****************************************************** * THIS PROGRAM READS IN STUDENT RECORDS EACH WITH * * FOUR EXAMS AND PRINTS DETAIL LINES WITH * * EACH STUDENT'S AVERAGE * ****************************************************** ENVIRONMENT DIVISION. INPUT-OUTPUT SECTION. FILE-CONTROL. SELECT STUDENT-MASTER ASSIGN TO 'DISK1'. SELECT GRADE-REPORT ASSIGN TO PRINTER. DATA DIVISION. FILE SECTION. FD STUDENT-MASTER LABEL RECORDS ARE STANDARD RECORD CONTAINS 80 CHARACTERS. 01 STUDENT-REC. 05 ID-NO-IN PIC X(5). 05 STUDENT-NAME-IN PIC X(20). 05 EXAM1 PIC 999. 05 EXAM2 PIC 999. 05 EXAM3 PIC 999. 05 EXAM4 PIC 999. 05 PIC X(43). FD GRADE-REPORT LABEL RECORDS ARE OMITTED RECORD CONTAINS 132 CHARACTERS. 01 REPORT-REC PIC X(132). WORKING-STORAGE SECTION. 01 LINE-CT PIC 99 VALUE 0. 01 ARE-THERE-MORE-RECORDS PIC XXX VALUE 'YES'. * years must be 4-digits to be Y2K compliant ** 01 WS-DATE. 05 WS-YEAR PIC XXXX. 05 WS-MONTH PIC XX. 05 WS-DAY PIC XX. 05 WS-TIME PIC 9(13). 01 DETAIL-LINE. 05 PIC X(4) VALUE SPACES. 05 ID-NO-OUT PIC X(5). 05 PIC X(5) VALUE SPACES. 05 STUDENT-NAME-OUT PIC X(20). 05 PIC X(4) VALUE SPACES. 05 AVERAGE PIC 999. 05 PIC X(91) VALUE SPACES. 01 HDR-1. 05 PIC X(15) VALUE SPACES. 05 PIC X(13) VALUE 'CLASS GRADES'. 05 PIC X(22) VALUE SPACES. 05 DATE-OUT. 10 MONTH-OUT PIC XX. 10 PIC X VALUE '/'. 10 DAY-OUT PIC XX. 10 PIC X VALUE '/'. 10 YEAR-OUT PIC XXXX. 05 PIC X(11). 05 PIC X(5) VALUE 'PAGE'. 05 PAGE-NO PIC 99 VALUE ZERO. 05 PIC X(54) VALUE SPACES. 01 HDR-2. 05 PIC X(2) VALUE SPACES. 05 PIC X(20) VALUE 'I. D. NO.'. 05 PIC X(110) VALUE 'NAME AVERAGE'. PROCEDURE DIVISION. ***************************************************** * PROGRAM LOGIC IS CONTROLLED FROM THE * * MAIN MODULE * ***************************************************** 100-MAIN-MODULE. OPEN INPUT STUDENT-MASTER OUTPUT GRADE-REPORT ***************************************************************** **** TO MAKE THIS PROGRAM Y2K COMPLIANT YOU CAN: **** A) HAVE THE USER INPUT A DATE WITH A 4-DIGIT YEAR WHICH **** YOU STORE IN A 4-DIGIT WS-T-YR FIELD. **** B) USE THE CURRENT-DATE FUNCTION: MOVE FUNCTION **** CURRENT-DATE TO CURRENT-DATE-AND-TIME WHICH IS **** A 21-POSITION FIELD AS FOLLOWS: **** 01 WS-T-DATE. **** 05 WS-T-YR PIC 9999. **** 05 WS-T-MONTH PIC 99. **** 05 WS-T-DAY PIC 99. **** 05 WS-T-TIME PIC X(13). **** SEE P. 266 OF THE TEXT. WS-T-YR WILL BE FOUR DIGITS. **** NOTE THAT THIS PROCEDURE IS ONLY AVAILABLE ON **** COMPILERS WHICH ACCEPT INTRINSIC ROUTINES. THE **** MICROFOCUS COMPILER WHICH CAN BE PURCHASED WITH **** THIS TEXT INCLUDES THIS FUNCTION BUT THE RM/COBOL **** COMPILER DOES NOT. **** C) IF YOU KNOW THAT THE DATE HAS A YEAR < 2000 ADD '19' TO **** THE OUTPUT YEAR. IF YOU KNOW THAT THE DATE HAS A **** YEAR > 1999 ADD '20' TO THE OUTPUT YEAR. ***************************************************************** * ACCEPT WS-DATE FROM DATE - NON Y2K COMPLIANT MOVE FUNCTION CURRENT-DATE TO WS-DATE MOVE WS-MONTH TO MONTH-OUT MOVE WS-DAY TO DAY-OUT MOVE WS-YEAR TO YEAR-OUT PERFORM 200-HEADING-RTN PERFORM UNTIL ARE-THERE-MORE-RECORDS = 'NO ' READ STUDENT-MASTER AT END MOVE 'NO ' TO ARE-THERE-MORE-RECORDS NOT AT END PERFORM 300-AVERAGE-RTN END-READ END-PERFORM CLOSE STUDENT-MASTER GRADE-REPORT STOP RUN. ***************************************************** * HEADINGS ARE PRINTED FROM 200-HEADING-RTN * ***************************************************** 200-HEADING-RTN. ADD 1 TO PAGE-NO WRITE REPORT-REC FROM HDR-1 AFTER ADVANCING PAGE WRITE REPORT-REC FROM HDR-2 AFTER ADVANCING 2 LINES MOVE 0 TO LINE-CT. ***************************************************** * EACH STUDENT'S AVERAGE IS CALCULATED AND PRINTED * * AT 300-AVERAGE-RTN * ***************************************************** 300-AVERAGE-RTN. IF LINE-CT >= 25 PERFORM 200-HEADING-RTN END-IF MOVE ID-NO-IN TO ID-NO-OUT MOVE STUDENT-NAME-IN TO STUDENT-NAME-OUT ADD EXAM1 EXAM2 EXAM3 EXAM4 GIVING AVERAGE DIVIDE 4 INTO AVERAGE ROUNDED ON SIZE ERROR STOP RUN END-DIVIDE WRITE REPORT-REC FROM DETAIL-LINE AFTER ADVANCING 2 LINES ADD 1 TO LINE-CT.