IDENTIFICATION DIVISION.
       PROGRAM-ID. CLASS-REPORT.
       AUTHOR. JONAS WIK.
       DATE-WRITTEN. 04/11/2000.
       DATE-COMPILED.
      ***************************************************************
      **
      **   DESCRIPTION:
      **       THIS PROGRAM PRINTS A REPORT OF GRADE POINT AVERAGES
      **       FOR THE 4 DIFFERENT CLASSES OF THE DIFFERENT SCHOOLS
      **       IF THE CLASS CHANGES, THE PROGRAM THEN CALCULATES
      **       THE GPA AND PRINTS IT ON A LINE TOGETHER WITH THE CLASS
      **       IF THE SCHOOL CHANGES, THE PROGRAM ADVANCES PAGE AND
      **       STARTS ALL OVER WITH THE PRINTING OF GPAS FOR THE NEXT
      **       SCHOOL.
      **   
      **   INPUT: STUDREC-FILE
      **       REC-SSNO                    9 DIGITS NO DEC
      **       REC-NAME                   21 CHARACTERS
      **       REC-CLASS                   1 DIGIT NO DEC
      **       REC-SCHOOL                  1 DIGIT NO DEC
      **       REC-GPA                     3 DIGITS 2 DEC
      **       REC-CREDITS                 3 DIGITS 0 DEC
      **      
      **   OUTPUT: SCHOOLRPT
      **       DATA                        STARTS IN COL.
      **       GPA                             30
      **
      ***************************************************************
       ENVIRONMENT DIVISION.
       INPUT-OUTPUT SECTION.
      **
       FILE-CONTROL.
           SELECT STUDREC-FILE ASSIGN TO 'J:/COBOL/CLASS.DAT'
           ORGANIZATION IS LINE SEQUENTIAL.
           SELECT SCHOOLRPT ASSIGN TO 'J:/COBOL/PRINTER.TXT'.
      **
       DATA DIVISION.
      **
       FILE SECTION.
      **
       FD  STUDREC-FILE
           LABEL RECORD ARE STANDARD
           RECORDING IS F
           RECORD CONTAINS 38 CHARACTERS.
       01  STUDREC-FILE-REC.
           05 REC-SSNO                 PIC 9(9).
           05 REC-NAME                 PIC X(21).
           05 REC-CLASS                PIC 9.
           05 REC-SCHOOL               PIC 9.
           05 REC-GPA                  PIC 9V99.
           05 REC-CREDITS              PIC 999.	
      **
       FD  SCHOOLRPT
           LABEL RECORDS ARE OMITTED
           RECORD CONTAINS 40 CHARACTERS.
       01  SCHOOLRPT-REC               PIC X(40).
      **
       WORKING-STORAGE SECTION.
      **
       01  WV-VARIABLES.
           05 CLASSGPA                 PIC  9V99   VALUE 0.
           05 TOTGPA                   PIC 99V99   VALUE 0.
      **
       01  WV-HOLDS.
           05 CLASS-HOLD               PIC 9.
           05 SCHOOL-HOLD              PIC 9.


       01  WS-COUNTS.
      **
           05 WC-PAGECOUNT             PIC 999
                               VALUE 1.
           05 WC-COUNT                 PIC 99
                               VALUE 0.
      **
       01  WS-DATE.
      **
           05 WD-YEAR                  PIC 9999.
           05 WD-MONTH                 PIC 99.
           05 WD-DAY                   PIC 99.
           05                          PIC X(13).
       01  WS-SCHOOL.
           05 BUS                      PIC X(12) VALUE 'BUSINESS    '.
           05 LIB                      PIC X(12) VALUE 'LIBERAL ARTS'.
           05 ENG                      PIC X(12) VALUE 'ENGINEERING '.
      **
       01  WS-SWITCH.
           05 WS-EOF-SWITCH            PIC XXX     VALUE 'NO '.
               88 WS-NOT-EOF                       VALUE 'NO '.
               88 WS-EOF-YES                       VALUE 'YES'.
      **
       01  SCHOOL-HEAD1.
           05 FILLER                   PIC X(5)
                               VALUE SPACES.
           05                          PIC X(21)
                               VALUE 'PASS-EM STATE COLLEGE'.
           05 FILLER                   PIC X(6)
                               VALUE SPACES.
           05                          PIC X(5)
                               VALUE 'PAGE '.
           05 HEAD-PAGE                PIC ZZ9.
       01  SCHOOL-HEAD2.
           05                          PIC X(9)
                               VALUE 'JONAS WIK'.
           05 FILLER                   PIC X(16)
                               VALUE SPACES.
           05                          PIC X(5)
                               VALUE 'DATE'.
           05 HEADING-MONTH            PIC Z9.
           05                          PIC X
                               VALUE '/'.
           05 HEADING-DAY              PIC Z9.
           05                          PIC X
                               VALUE '/'.
           05 HEADING-YEAR             PIC 9999.
      **
       01 SCHOOL-HEAD3.
           05                          PIC X(8)
                               VALUE 'SCHOOL: '.
           05 SCHOOL                   PIC X(12).
           05 FILLER                   PIC X(20)
                               VALUE SPACES.

       01 SCHOOL-HEAD4.
           05                          PIC X(7)
                               VALUE '  CLASS'.
           05 FILLER                   PIC X(22)
                               VALUE SPACES.
           05                          PIC X(11)
                               VALUE 'AVERAGE GPA'.


       01  SCHOOL-DET-FRESH.
           05                          PIC X(8)
                               VALUE 'FRESHMAN'.
           05 FILLER                   PIC X(21)
                               VALUE SPACES.
           05 FRESHGPA                 PIC 9.99.
           05 FILLER                   PIC X(7)
                               VALUE SPACES.
       01  SCHOOL-DET-SOPH.
           05                          PIC X(9)
                               VALUE 'SOPHOMORE'.
           05 FILLER                   PIC X(20)
                               VALUE SPACES.
           05 SOPHGPA                  PIC 9.99.
           05 FILLER                   PIC X(7)
                               VALUE SPACES.
       01  SCHOOL-DET-JUN.
           05                          PIC X(6)
                               VALUE 'JUNIOR'.
           05 FILLER                   PIC X(23)
                               VALUE SPACES.
           05 JUNGPA                   PIC 9.99.
           05 FILLER                   PIC X(7)
                               VALUE SPACES.
       01  SCHOOL-DET-SEN.
           05                          PIC X(6)
                               VALUE 'SENIOR'.
           05 FILLER                   PIC X(23)
                               VALUE SPACES.
           05 SENGPA                   PIC 9.99.
           05 FILLER                   PIC X(7)
                               VALUE SPACES.

      **
       PROCEDURE DIVISION.

      ***************************************************************
      **
      **   THIS IS THE MAIN MODULE WHICH EXECUTES 110-INITIALIZE
      **   PARAGRAPH, THE 200-COMPUTE PARAGRAPH UNTIL END OF FILE
      **   AND A FINAL CONTROL BREAK
      **
      ***************************************************************

       100-MAIN.
      **
           PERFORM 110-INITIALIZE THRU 110-EXIT.
           PERFORM 200-PROCESS-FILE THRU 200-EXIT
                           UNTIL WS-EOF-YES.
           PERFORM 500-SCHOOL-CTRL-BREAK THRU 500-EXIT.
           CLOSE STUDREC-FILE
                 SCHOOLRPT.
           STOP RUN.
      **
      ***************************************************************
      **
      **   110-INITIALIZE OPENS FILES AND
      **   INITIALIZES TOTCRED AND CRDPTS TO 0
      **   AND CALLS
      **   PARAGRAPHS 800-READ-FILE, 300-DATE-MOVE
      **   MOVES REC-CLASS TO CLASS-HOLD AND REC-SCHOOL TO SCHOOL-HOLD
      **   AND IT ALSO CALLS THE 900-WRITE-HEAD PARAGRAPH.
      **
      ***************************************************************

       110-INITIALIZE.
      **
           OPEN INPUT  STUDREC-FILE.
           OPEN OUTPUT SCHOOLRPT.
           INITIALIZE TOTGPA
                      WC-COUNT.
           PERFORM 800-READ-FILE THRU 800-EXIT.
           PERFORM 300-DATE-MOVE THRU 300-EXIT.
           MOVE REC-CLASS TO CLASS-HOLD.
           MOVE REC-SCHOOL TO SCHOOL-HOLD.
           PERFORM 900-WRITE-HEAD THRU 900-EXIT.
      **
       110-EXIT.
           EXIT.

      ***************************************************************
      **
      **   IF SCHOOL-HOLD IS NOT THE SAME AS REC-SCHOOL
      **   500-SCHOOL-CTRL-BREAK IS EXECUTED AND REC-SCHOOL IS MOVED
      **   TO SCHOOL HOLD AND REC-CLASS IS MOVED TO CLASS-HOLD
      **   THE NUMBER OF GRADE POINTS AND CREDITS ARE ALSO ADDED TO
      **   THE TOTAL OF EACH.
      **
      **   IF CLASS-HOLD IS NOT THE SAME AS REC-CLASS
      **   550-CLASS-CTRL-BREAK IS EXECUTED
      **   AND REC-CLASS IS MOVED TO CLASS-HOLD
      **   THE NUMBER OF GRADE POINTS AND CREDITS ARE ALSO ADDED TO
      **   THE TOTAL OF EACH.
      **
      **   IF NONE OF THE PREVIOS CONDITIONS ARE TRUE THE
      **   NUMBER OF GRADE POINTS AND CREDITS ARE ADDED TO THE TOTAL
      **   OF EACH.
      **
      **   AT THE END OF THE PARAGRAPH A NEW RECORD IS READ.
      **
      ***************************************************************
       200-PROCESS-FILE.
      **
           IF SCHOOL-HOLD NOT = REC-SCHOOL
              PERFORM 500-SCHOOL-CTRL-BREAK THRU 500-EXIT
              MOVE REC-SCHOOL TO SCHOOL-HOLD
              MOVE REC-CLASS TO CLASS-HOLD
           END-IF.
           IF CLASS-HOLD NOT = REC-CLASS
              PERFORM 550-CLASS-CTRL-BREAK THRU 550-EXIT
              MOVE REC-CLASS TO CLASS-HOLD
           END-IF.
           ADD REC-GPA TO TOTGPA.
           ADD 1 TO WC-COUNT.
           PERFORM 800-READ-FILE THRU 800-EXIT.
      **
       200-EXIT.
           EXIT.
      **
      ***************************************************************
      **
      **   THIS PARAGRAPH MOVES THE DATE GIVEN BY THE COMPUTER TO THE
      **   HEADING.
      **
      ***************************************************************

       300-DATE-MOVE.
      **
           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.
      **
       300-EXIT.
           EXIT.
      ***************************************************************
      **
      **   THIS CONTROL BREAK PERFORMS A 550-CLASS-CTRL-BREAK AND IF
      **   ITS NOT THE END OF PAGE THE TOTAL NUMBER OF CREDITS AND
      **   GRADEPOINTS ARE BOTH SET BACK TO 0.
      **   AFTER THAT, 900-WRITE-HEAD IS EXECUTED.
      **
      ***************************************************************
       500-SCHOOL-CTRL-BREAK.
      **
           PERFORM 550-CLASS-CTRL-BREAK THRU 550-EXIT.
           IF WS-NOT-EOF
               MOVE 0 TO TOTGPA
               MOVE 0 TO WC-COUNT
               PERFORM 900-WRITE-HEAD THRU 900-EXIT
           END-IF.
      **
       500-EXIT. EXIT.
      ***************************************************************
      **
      **   THE GPA IS COMPUTED BY DIVIDING THE GRDPTS BY TOTCRED
      **   AND IF CLASS-HOLD = 1
      **       SCHOOL-DET-FRESH IS PRINTED
      **   IF CLASS-HOLD = 2
      **       SCHOOL-DET-SOPH IS PRINTED
      **   IF CLASS-HOLD = 3
      **       SCHOOL-DET-JUN IS PRINTED
      **   IF CLASS-HOLD = 4
      **       SCHOOL-DET-SEN IS PRINTED
      **   AFTER THAT THE GRDPTS AND TOTAL CREDITS ARE SET BACK TO 0.
      **
      ***************************************************************
       550-CLASS-CTRL-BREAK.
      **
           EVALUATE CLASS-HOLD
               WHEN 1
                   COMPUTE CLASSGPA ROUNDED = TOTGPA / WC-COUNT
                   MOVE CLASSGPA TO FRESHGPA
                   WRITE SCHOOLRPT-REC FROM SCHOOL-DET-FRESH
                       AFTER ADVANCING 2 LINES
               WHEN 2
                   COMPUTE CLASSGPA ROUNDED = TOTGPA / WC-COUNT
                   MOVE CLASSGPA TO SOPHGPA
                   WRITE SCHOOLRPT-REC FROM SCHOOL-DET-SOPH
                       AFTER ADVANCING 2 LINES
               WHEN 3
                   COMPUTE CLASSGPA ROUNDED = TOTGPA / WC-COUNT
                   MOVE CLASSGPA TO JUNGPA
                   WRITE SCHOOLRPT-REC FROM SCHOOL-DET-JUN
                       AFTER ADVANCING 2 LINES
               WHEN 4
                   COMPUTE CLASSGPA ROUNDED = TOTGPA / WC-COUNT
                   MOVE CLASSGPA TO SENGPA
                   WRITE SCHOOLRPT-REC FROM SCHOOL-DET-SEN
                       AFTER ADVANCING 2 LINES

           END-EVALUATE.
           INITIALIZE WC-COUNT.
           INITIALIZE TOTGPA.
      **
       550-EXIT. EXIT.

      **
      ***************************************************************
      **
      **   THIS PARAGRAPH READS THE INPUT FILE.
      **
      ***************************************************************
       800-READ-FILE.
      **
           READ STUDREC-FILE
               AT END MOVE 'YES' TO WS-EOF-SWITCH.
      **
       800-EXIT.
           EXIT.
      **
      ***************************************************************
      **
      **   THIS PARAGRAPH ADDS 1 TO PAGENUMBER
      **   IF SCHOOL = 1
      **       VARIABLE BUS IS MOVED TO HEADING
      **   IF SCHOOL = 2
      **       VARIABLE LIB IS MOVED TO HEADING
      **   IF SCHOOL = 3
      **       VARIABLE ENG IS MOVED TO HEADING
      **   IT THEN WRITES OUT THE HEADINGS
      **
      ***************************************************************
       900-WRITE-HEAD.
      **
           MOVE WC-PAGECOUNT TO HEAD-PAGE.
           MOVE REC-SCHOOL TO SCHOOL.
           ADD 1 TO WC-PAGECOUNT.
           EVALUATE SCHOOL
               WHEN 1
                   MOVE BUS TO SCHOOL
               WHEN 2
                   MOVE LIB TO SCHOOL
               WHEN 3
                   MOVE ENG TO SCHOOL
           END-EVALUATE.
           WRITE SCHOOLRPT-REC FROM SCHOOL-HEAD1
               AFTER ADVANCING PAGE.
           WRITE SCHOOLRPT-REC FROM SCHOOL-HEAD2
               AFTER ADVANCING 1 LINE.
           WRITE SCHOOLRPT-REC FROM SCHOOL-HEAD3
               AFTER ADVANCING 2 LINES.
           WRITE SCHOOLRPT-REC FROM SCHOOL-HEAD4
               AFTER ADVANCING 2 LINES.
      **
       900-EXIT.
           EXIT.