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.
*****************************************************************