IDENTIFICATION DIVISION. PROGRAM-ID. CHARGE-PROGRAM. AUTHOR. JONAS WIK. DATE-WRITTEN. OCTOBER 21ST 2002. DATE-COMPILED. ***************************************************************** ** ** Purpose of the program: ** Input: ** FIELD COLS. TYPE ** ** ** Output: ** ** Date Due: October 14th 2002 ** Date Assigned: September 30th 2002 ** Dataset Name: ** ***************************************************************** ENVIRONMENT DIVISION. INPUT-OUTPUT SECTION. ** FILE-CONTROL. SELECT STUDENT-FILE ASSIGN TO STUD-FILE ORGANIZATION IS LINE SEQUENTIAL. SELECT REPORT-FILE ASSIGN TO STUDENT-REPORT. ** DATA DIVISION. ** FILE SECTION. ** FD STUDENT-FILE LABEL RECORDS ARE OMITTED RECORDING MODE IS F. 01 SR-REC. 05 SR-SNO PIC X(4). 05 SR-INFO OCCURS 4 TIMES INDEXED BY J. 10 EX PIC 99. ** FD REPORT-FILE LABEL RECORDS ARE OMITTED RECORDING MODE IS F. 01 STUDENT-REPORT-REC PIC X(80). ** WORKING-STORAGE SECTION. 01 WS-CALCULATION-FIELDS. 05 WC-STUDENT-TOTAL PIC 999. 05 WC-STUDENT-AVERAGE PIC 99. 01 WS-TOTAL-FIELDS. 05 WT-EX1-TOTAL PIC 999. 05 WT-EX2-TOTAL PIC 999. 05 WT-EX3-TOTAL PIC 999. 05 WT-EX4-TOTAL PIC 999. 05 WT-TOTAL-EXAM PIC 999. 05 WT-COUNT PIC 99. 05 WT-EXAM-COUNT PIC 999. 01 WS-DATE. 05 PIC XX. 05 WD-YEAR PIC 99. 05 WD-MONTH PIC 99. 05 WD-DAY PIC 99. 05 PIC X(13). 01 WS-SWITCHES. 05 WS-DONE-SW PIC X(3) VALUE ' NO'. 88 DONE VALUE 'YES'. 05 WS-FOUND-SW2 PIC X(3) VALUE ' NO'. 88 FOUND VALUE 'YES'. 05 WS-EOF-SW PIC X(3). 05 WS-EOF-SW2 PIC X(3). 01 EXAM-TAB. 05 STUDENTS OCCURS 20 TIMES INDEXED BY S. 10 STUDENT-NUM PIC X(4). 10 TESTS OCCURS 4 TIMES INDEXED BY T. 15 EXAM PIC 99. ** 01 STUD-FILE PIC X(9) VALUE "J:HW4.DAT". 01 STUDENT-REPORT PIC X(12) VALUE "J:STUREP.DAT". ** ** 01 STUDENT-REPORT-HEADER1. 05 FILLER PIC X(9) VALUE "JONAS WIK". 05 FILLER PIC X(26). 05 FILLER PIC X(14) VALUE "STUDENT REPORT". 05 FILLER PIC X(32). 05 FILLER PIC X(6) VALUE "DATE: ". 05 HEADING-MONTH PIC Z9. 05 FILLER PIC X VALUE '/'. 05 HEADING-DAY PIC Z9. 05 FILLER PIC X VALUE '/'. 05 HEADING-YEAR PIC 99. ** 01 STUDENT-REPORT-HEADER2. 05 FILLER PIC X(14) VALUE "STUDENT NUMBER". 05 FILLER PIC XX. 05 FILLER PIC X(6) VALUE "EXAM 1". 05 FILLER PIC XX. 05 FILLER PIC X(6) VALUE "EXAM 2". 05 FILLER PIC XX. 05 FILLER PIC X(6) VALUE "EXAM 3". 05 FILLER PIC XX. 05 FILLER PIC X(6) VALUE "EXAM 4". 05 FILLER PIC XX. 05 FILLER PIC X(10) VALUE "TOTAL EXAM". 05 FILLER PIC XX. 05 FILLER PIC X(12) VALUE "AVERAGE EXAM". ** ** 01 STUDENT-REPORT-DETAIL-LINE. 05 FILLER PIC X(4). 05 SR-STUDNO PIC X(4). 05 FILLER PIC X(10). 05 SR-EX1 PIC 99. 05 FILLER PIC X(10). 05 SR-EX2 PIC 99. 05 FILLER PIC X(6). 05 SR-EX3 PIC 99. 05 FILLER PIC X(7). 05 SR-EX4 PIC 99. 05 FILLER PIC X(5). 05 SR-TOTAL-EXAM PIC 999. 05 FILLER PIC X(5). 05 SR-AVERAGE-EXAM PIC 99. ** 01 END-OF-JOB-LINE. 05 PIC X(35) VALUE SPACES. 05 PIC X(30) VALUE "N O R M A L E N D O F J O B". PROCEDURE DIVISION. ** ************************************************************** ** THIS PARAGRAPH IS THE MAIN MODULE OF THE PROGRAM. ALL ** PARAGRAPHS IN THE PROGRAM ARE EXECUTED UNDER THE CONTROL ** OF THIS MODULE. ************************************************************** ** 0000-MAIN-RTN. PERFORM 0100-INIT-RTN THRU 0100-INIT-RTN-EXIT PERFORM 0800-HDG-RTN THRU 0800-HDG-RTN-EXIT SET S TO 1. PERFORM 0200-SEARCH-RTN THRU 0200-SEARCH-RTN-EXIT UNTIL DONE. MOVE 'NO' TO WS-DONE-SW. PERFORM 1000-ENDOFJOB-RTN THRU 1000-ENDOFJOB-RTN-EXIT CLOSE STUDENT-FILE REPORT-FILE STOP RUN. ** *************************************************************** ** CALLED BY 000-MAIN-LINE-RTN. INITIALIZES VALUES AND OPENS ** THE FILES INVOLVED. *************************************************************** ** 0100-INIT-RTN. OPEN INPUT STUDENT-FILE OUTPUT REPORT-FILE INITIALIZE WS-CALCULATION-FIELDS WS-TOTAL-FIELDS * SET D TO 1 PERFORM 0770-DATE-MOVE-RTN THRU 0770-DATE-MOVE-RTN-EXIT PERFORM 0300-READ UNTIL WS-EOF-SW = 'YES'. 0100-INIT-RTN-EXIT. EXIT. ** ***************************************************************** ***************************************************************** ** 0200-SEARCH-RTN. SEARCH STUDENTS AT END MOVE 'YES' TO WS-DONE-SW WHEN EXAM(S,T) < 60 ADD 1 TO WT-COUNT SET S UP BY 1 END-SEARCH. 0200-SEARCH-RTN-EXIT. EXIT. 0300-READ. READ STUDENT-FILE AT END MOVE 'YES' TO WS-EOF-SW PERFORM 0400-FILL-TABLE THRU 0400-FILL-TABLE-EXIT VARYING S FROM 1 BY 1 UNTIL S > 20 END-READ. 0300-READ-EXIT.EXIT. ** 0400-FILL-TABLE. PERFORM 0500-FILL-TABLE THRU 0500-FILL-TABLE-EXIT VARYING T FROM 1 BY 1 UNTIL T > 4. MOVE SR-SNO TO STUDENT-NUM(S). MOVE SR-SNO TO SR-STUDNO. PERFORM 0600-COMPUTE-TOTALS-RTN THRU 0600-COMPUTE-TOTALS-RTN-EXIT. WRITE STUDENT-REPORT-REC FROM STUDENT-REPORT-DETAIL-LINE AFTER ADVANCING 1 LINE. READ STUDENT-FILE AT END MOVE 'YES' TO WS-EOF-SW END-READ. 0400-FILL-TABLE-EXIT.EXIT. 0500-FILL-TABLE. SET J TO T. MOVE EX(J) TO EXAM(S,T) ADD 1 TO WT-EXAM-COUNT. EVALUATE T WHEN 1 MOVE EXAM(S,T) TO SR-EX1 ADD EXAM(S,T) TO WT-EX1-TOTAL WHEN 2 MOVE EXAM(S,T) TO SR-EX2 ADD EXAM(S,T) TO WT-EX2-TOTAL WHEN 3 MOVE EXAM(S,T) TO SR-EX3 ADD EXAM(S,T) TO WT-EX3-TOTAL WHEN 4 MOVE EXAM(S,T) TO SR-EX4 ADD EXAM(S,T) TO WT-EX4-TOTAL END-EVALUATE. ADD EXAM(S,T) TO WT-TOTAL-EXAM. 0500-FILL-TABLE-EXIT.EXIT. 0600-COMPUTE-TOTALS-RTN. COMPUTE WC-STUDENT-TOTAL = SR-EX1 + SR-EX2 + SR-EX3 + SR-EX4. COMPUTE WC-STUDENT-AVERAGE = WC-STUDENT-TOTAL / 4. MOVE WC-STUDENT-TOTAL TO SR-TOTAL-EXAM. MOVE WC-STUDENT-AVERAGE TO SR-AVERAGE-EXAM. INITIALIZE WS-CALCULATION-FIELDS. 0600-COMPUTE-TOTALS-RTN-EXIT.EXIT. ** ***************************************************************** ** THIS PARAGRAPH MOVES THE DATE TO THE HEADING ***************************************************************** ** 0770-DATE-MOVE-RTN. MOVE FUNCTION CURRENT-DATE TO WS-DATE. MOVE WD-MONTH TO HEADING-MONTH. MOVE WD-DAY TO HEADING-DAY. MOVE WD-YEAR TO HEADING-YEAR. 0770-DATE-MOVE-RTN-EXIT.EXIT. ** ***************************************************************** ** THIS PARAGRAPH PRINTS THE HEADINGS ***************************************************************** ** 0800-HDG-RTN. WRITE STUDENT-REPORT-REC FROM STUDENT-REPORT-HEADER1 AFTER ADVANCING 2 LINES. WRITE STUDENT-REPORT-REC FROM STUDENT-REPORT-HEADER2 AFTER ADVANCING 2 LINES. 0800-HDG-RTN-EXIT. 1000-ENDOFJOB-RTN. WRITE STUDENT-REPORT-REC FROM END-OF-JOB-LINE AFTER ADVANCING 2 LINES. 1000-ENDOFJOB-RTN-EXIT. EXIT. *****************************************************************