Skip to main content
edited title
Link

Database for storing examsexam results

edited title
Link

Database for storing exams results

added 187 characters in body
Source Link
   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.
   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)
       ELSE
           DISPLAY "NUMBER OF EXAMS CAN'T EXCEED 5!!"
           SUBTRACT 1 FROM WK-MAX-SUBJECTS
           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".

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

   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.
Tweeted twitter.com/StackCodeReview/status/994161410262396928
deleted 4 characters in body; edited title
Source Link
Jamal
  • 34.9k
  • 13
  • 133
  • 237
Loading
Source Link
Loading