IDENTIFICATION DIVISION.
PROGRAM-ID. SUBJECTS-DATA-BASE.
DATA DIVISION.
WORKING-STORAGE SECTION.
77 WK-MAX-SUBJECTS PIC 9(03) VALUE 0.
77 WK-LAST-SUBJECT-ADDED PIC 9(03) VALUE 0.
77 WK-ID-COUNTER PIC 9(03) VALUE 0.
77 WK-SEARCH-ID PIC 9(03) VALUE 0.
77 WK-END-PROGRAM PIC 9(01) VALUE 0.
77 WK-AVERAGE-GRADE PIC 9(03)V99 VALUE 0.
77 WK-NUMBER-OF-SUBJECTS PIC 9(09) VALUE 0.
77 WK-FORMAT-INDEX PIC ZZZZ9.
77 WK-FORMAT-GRADE PIC ZZ9.99.
01 WK-IF-FOUND PIC 9(01) VALUE 0.
88 WK-FOUND VALUE 1.
88 WK-NOT-FOUND VALUE 0.
01 WK-YES-OR-NO PIC X(01) VALUE' '.
88 WK-YES VALUE'Y'.
88 WK-NO VALUE'N'.
01 WK-MAIN-MENU-OPTIONS PIC X(01) VALUE' '.
88 WK-NEW-SUBJECT VALUE'N'.
88 WK-ALL-SUBJECTS VALUE'A'.
88 WK-SEARCH-SUBJECT VALUE'S'.
88 WK-RETIRE-SUBJECT VALUE'R'.
88 WK-QUIT VALUE'Q'.
01 WK-SUBJECTS OCCURS 1 TO 100 TIMES DEPENDI
- NG ON WK-MAX-SUBJECTS INDEXED BY WK-SUBJECT-INDEX.
02 WK-SUBJECT-NAME PIC X(30).
02 WK-SUBJECT-ID PIC 9(03).
02 WK-SUBJECT-GRADE PIC 9(03)V9(02) VALUE 0.
02 WK-NUMBER-OF-EXAMS PIC 9(01) VALUE 0.
02 WK-EXAMS OCCURS 5 TIMES INDEXED BY WK-
- EXAM-INDEX.
03 WK-EXAM-NAME PIC X(30).
03 WK-EXAM-GRADE PIC 9(03)V9(02) VALUE 0.
PROCEDURE DIVISION.
MAIN-PROCEDURES SECTION.
0001-SYSTEM-ENTRY-POINT.
DISPLAY "SUBJECTS DATA BASE".
PERFORM 0002-MENU UNTIL WK-END-PROGRAM > ZERO.
DISPLAY "GOODBYE!".
STOP RUN.
0002-MENU.
MOVE WK-AVERAGE-GRADE TO WK-FORMAT-GRADE.
DISPLAY "OPTIONS: (N)EW SUBJECT, SEE (A)LL SUBJECTS"
" OR (S)EARCH SUBJECT, (R)ETIRE SUBJECT, (Q)UIT",
DISPLAY "AVERAGE GRADE = " WK-FORMAT-GRADE.
ACCEPT WK-MAIN-MENU-OPTIONS.
IF WK-NEW-SUBJECT
ADD 1 TO WK-LAST-SUBJECT-ADDED
PERFORM 0001-ENTER-SUBJECT UNTIL WK-MAX-SUBJECTS
>= WK-LAST-SUBJECT-ADDED
PERFORM 0005-GENERAL-AVERAGE
ELSE IF WK-ALL-SUBJECTS
PERFORM 0002-SHOW-SUBJECT VARYING WK-SUBJECT-INDEX FROM 1
BY 1 UNTIL WK-SUBJECT-INDEX > WK-MAX-SUBJECTS
ELSE IF WK-SEARCH-SUBJECT
DISPLAY "INTRODUCE THE EXAM'S ID:"
ACCEPT WK-SEARCH-ID
PERFORM 0003-SUBJECT-SEARCH
ELSE IF WK-RETIRE-SUBJECT
PERFORM 0004-RETIRE-SUBJECT
PERFORM 0005-GENERAL-AVERAGE
ELSE IF WK-QUIT
MOVE 1 TO WK-END-PROGRAM
ELSE
DISPLAY "INVALID SELECTION"
PERFORM 0002-MENU.
SUBJECT-PROCEDURES SECTION.
0001-ENTER-SUBJECT.
MOVE 0 TO WK-SEARCH-ID.
PERFORM 0003-SUBJECT-SEARCH.
IF WK-NOT-FOUND AND WK-MAX-SUBJECTS >= 100
DISPLAY "LIMIT OF 100 SUBJECTS REACHED!!"
SUBTRACT 1 FROM WK-LAST-SUBJECT-ADDED
PERFORM 0001-SYSTEM-ENTRY-POINT.
IF WK-FOUND AND WK-SUBJECT-INDEX > WK-MAX-SUBJECTS
ADD 1 TO WK-MAX-SUBJECTS
ELSE IF WK-FOUND
SUBTRACT 1 FROM WK-LAST-SUBJECT-ADDED
ELSE IF WK-NOT-FOUND
ADD 1 TO WK-MAX-SUBJECTS
SET WK-SUBJECT-INDEX TO WK-LAST-SUBJECT-ADDED.
DISPLAY "SUBJECT NAME: "
ACCEPT WK-SUBJECT-NAME(WK-SUBJECT-INDEX).
DISPLAY "NUMBER OF EXAMS: "
ACCEPT WK-NUMBER-OF-EXAMS(WK-SUBJECT-INDEX).
IF WK-NUMBER-OF-EXAMS(WK-SUBJECT-INDEX) <= 5 AND > 0
PERFORM 0001-ENTER-EXAM VARYING WK-EXAM-INDEX FROM 1 BY 1
UNTIL WK-EXAM-INDEX > WK-NUMBER-OF-EXAMS(WK-SUBJECT-INDEX
)
PERFORM 0003-EXAM-AVERAGE
ADD 1 TO WK-ID-COUNTER
MOVE WK-ID-COUNTER TO WK-SUBJECT-ID(WK-SUBJECT-INDEX)
ADD 1 TO WK-NUMBER-OF-SUBJECTS
ELSE
DISPLAY "NUMBER OF EXAMS CAN'T EXCEED 5!!"
IF WK-SUBJECT-INDEX = WK-MAX-SUBJECTS
SUBTRACT 1 FROM WK-MAX-SUBJECTS
END-IF
PERFORM 0001-ENTER-SUBJECT.
ADD 1 TO WK-NUMBER-OF-SUBJECTS.
0002-SHOW-SUBJECT.
IF WK-SUBJECT-ID(WK-SUBJECT-INDEX) NOT = 0
DISPLAY "SUBJECT NAME:", WK-SUBJECT-NAME(WK-SUBJECT-INDEX
)
MOVE WK-SUBJECT-GRADE(WK-SUBJECT-INDEX)TO WK-FORMAT-GRADE
DISPLAY "SUBJECT GRADE:", WK-FORMAT-GRADE
DISPLAY "ID:", WK-SUBJECT-ID(WK-SUBJECT-INDEX)
DISPLAY "EXAMS:"
PERFORM 0002-SHOW-EXAM VARYING WK-EXAM-INDEX FROM 1 BY 1
UNTIL WK-EXAM-INDEX > WK-NUMBER-OF-EXAMS
- (WK-SUBJECT-INDEX).
0003-SUBJECT-SEARCH.
SET WK-SUBJECT-INDEX TO 1.
SEARCH WK-SUBJECTS
AT END
IF WK-SEARCH-ID NOT = 0
DISPLAY "SUBJECT " WK-SEARCH-ID " NOT FOUND"
END-IF
MOVE 0 TO WK-IF-FOUND
WHEN WK-SUBJECT-ID(WK-SUBJECT-INDEX) = WK-SEARCH-ID
MOVE 1 TO WK-IF-FOUND
PERFORM 0002-SHOW-SUBJECT.
0004-RETIRE-SUBJECT.
DISPLAY "INTRODUCE THE SUBJECT'S ID:".
ACCEPT WK-SEARCH-ID.
PERFORM 0003-SUBJECT-SEARCH.
IF WK-FOUND
DISPLAY "ARE YOU SURE YOU WANT TO RETIRE THIS SUBJECT?",
" (Y)ES, (N)O"
ACCEPT WK-YES-OR-NO.
IF WK-YES
IF WK-MAX-SUBJECTS > 0
MOVE LOW-VALUES TO WK-SUBJECTS(WK-SUBJECT-INDEX)
MOVE 0 TO WK-SUBJECT-GRADE(WK-SUBJECT-INDEX)
MOVE 0 TO WK-SUBJECT-ID(WK-SUBJECT-INDEX)
IF WK-LAST-SUBJECT-ADDED = WK-SUBJECT-INDEX
SUBTRACT 1 FROM WK-LAST-SUBJECT-ADDED, WK-MAX
- -SUBJECTS
END-IF
SUBTRACT 1 FROM WK-NUMBER-OF-SUBJECTS
END-IF
ELSE IF WK-NO
NEXT SENTENCE
ELSE
DISPLAY "INVALID SELECTION"
END-IF
ELSE IF WK-NOT-FOUND
DISPLAY "RETURNING TO MAIN MENU".
0005-GENERAL-AVERAGE.
MOVE 0 TO WK-AVERAGE-GRADE
IF WK-NUMBER-OF-SUBJECTS > 0
PERFORM VARYING WK-SUBJECT-INDEX FROM 1 BY 1 UNTIL WK-SUB
- JECT-INDEX > WK-MAX-SUBJECTS
IF WK-SUBJECT-ID(WK-SUBJECT-INDEX) NOT = 0
ADD WK-SUBJECT-GRADE(WK-SUBJECT-INDEX) TO WK-AVERA
- GE-GRADE
END-IF
END-PERFORM
DIVIDE WK-NUMBER-OF-SUBJECTS INTO WK-AVERAGE-GRADE.
EVALUACIONES-PROCEDURE SECTION.
0001-ENTER-EXAM.
MOVE WK-EXAM-INDEX TO WK-FORMAT-INDEX.
DISPLAY "NAME OF EXAM #", WK-FORMAT-INDEX,":".
ACCEPT WK-EXAM-NAME(WK-SUBJECT-INDEX, WK-EXAM-INDEX).
DISPLAY "EXAM GRADE:".
ACCEPT WK-EXAM-GRADE(WK-SUBJECT-INDEX, WK-EXAM-INDEX).
0002-SHOW-EXAM.
MOVE WK-EXAM-GRADE(WK-SUBJECT-INDEX, WK-EXAM-INDEX) TO WK-FOR
- MAT-GRADE.
DISPLAY " ", WK-EXAM-NAME(WK-SUBJECT-INDEX, WK-EXAM-INDEX),
" = ", WK-FORMAT-GRADE.
0003-EXAM-AVERAGE.
IF WK-NUMBER-OF-EXAMS(WK-SUBJECT-INDEX) > 0
PERFORM VARYING WK-EXAM-INDEX FROM 1 BY 1 UNTIL
WK-EXAM-INDEX > WK-NUMBER-OF-EXAMS(WK-SUBJECT-INDEX)
ADD WK-EXAM-GRADE(WK-SUBJECT-INDEX, WK-EXAM-INDEX)
TO WK-SUBJECT-GRADE(WK-SUBJECT-INDEX)
END-PERFORM
DIVIDE WK-NUMBER-OF-EXAMS(WK-SUBJECT-INDEX) INTO WK-SUBJE
- CT-GRADE(WK-SUBJECT-INDEX).
END PROGRAM SUBJECTS-DATA-BASE.