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.