IDENTIFICATION DIVISION.
       PROGRAM-ID.  PROGRAM6.
       AUTHOR.  GROCER.
       ENVIRONMENT DIVISION.
       INPUT-OUTPUT SECTION.
       SELECT VSAM-FILE
           ASSIGN TO "C:\PCOBWIN\VSAMPROJ\VSAMPROJ.DAT"
           ORGANIZATION IS INDEXED
           ACCESS IS DYNAMIC
           RECORD KEY IS VSAM-STUDENT-ID
           ALTERNATE RECORD KEY IS
               VSAM-STUDENT-NAME WITH DUPLICATES.
       SELECT PRINT-FILE ASSIGN TO PRINTER.
      * COMMENTS:
      * This program read the records in an indexed file randomly
      * using the prime key.
      * The key structure described in the program must be the same
      * as the key structure that exists on the file.  So, even though
      * I am not using any of the keys, I must describe them in the
      * SELECT statement.
       DATA DIVISION.
       FILE SECTION.
       FD  VSAM-FILE
           DATA RECORD IS VSAM-REC.
       01  VSAM-REC.
           05  VSAM-STUDENT-ID          PIC XXXX.
           05  VSAM-STUDENT-NAME        PIC X(20).
           05  VSAM-STUDENT-MAJOR       PIC XXX.
           05  VSAM-STUDENT-SEM-ENTER   PIC X.
           05  VSAM-STUDENT-YR-ENTER    PIC 9999.
       FD  PRINT-FILE
           DATA RECORD IS PRINTZ.
       01  PRINTZ.
           05  FILLER                      PIC X.
           05  VSAM-STUDENT-ID-PR          PIC X(4).
           05  FILLER                      PIC X(2).
           05  VSAM-STUDENT-NAME-PR        PIC X(20).
           05  FILLER                      PIC X(2).
           05  VSAM-STUDENT-MAJOR-PR       PIC XXX.
           05  FILLER                      PIC X(2).
           05  VSAM-STUDENT-SEM-ENTER-PR   PIC X.
           05  FILLER                      PIC X(2).
           05  VSAM-STUDENT-YR-ENTER-PR    PIC 9999.
           05  FILLER                      PIC X(2).
           05  PROCESSING-MSG-PR           PIC X(20).
           05  FILLER                      PIC X(18).
       WORKING-STORAGE SECTION.
       01  INDICATORS.
           05  EOF-IND          PIC XXX          VALUE "NO ".
       01  HOLD-AREAS.
           05  MENU-ANS           PIC 9            VALUE 0.
           05  ID-ANS             PIC XXXX         VALUE SPACES.
           05  NAME-ANS           PIC X(20)        VALUE SPACES.
           05  RESPONSE-ID-ANS    PIC X            VALUE SPACES.
           05  RESPONSE-NAME-ANS  PIC X            VALUE SPACES.
           05  ANY-KEY-ANS        PIC X            VALUE SPACES.
           05  ANY-KEY-ERR-ANS    PIC X            VALUE SPACES.
           05  JUNK-ANS           PIC X            VALUE SPACES.
       SCREEN SECTION.
       01  MENU-SCREEN.
           05  VALUE "MENU SCREEN"               BLANK SCREEN
                                                 LINE 02 COL 20.
           05  VALUE "1 - RANDOMLY RETRIEVE A RECORD BY ID NUMBER"
                                                 LINE 06 COL 05.
           05  VALUE "2 - RANDOMLY RETRIEVE A RECORD BY NAME"
                                                 LINE 08 COL 05.
           05  VALUE "3 - RETRIEVE A GROUP OF RECORDS BY ID NUMBER"
                                                 LINE 10 COL 05.
           05  VALUE "4 - RETRIEVE A GROUP OF RECORDS BY NAME"
                                                 LINE 12 COL 05.
           05  VALUE "5 - TO TERMINATE PROCESSING"
                                                 LINE 14 COL 05.
           05  VALUE "ENTER CHOICE:"             LINE 17 COL 10.
           05  MENU-ANS-SCR                      LINE 17 COL 25
                      PIC 9        TO MENU-ANS.

       01  ENTER-ID-RANDOMLY-SCREEN.
           05  VALUE "RETRIEVE A RECORD BY IDENTIFICATION NUMBER"
                                                 BLANK SCREEN
                                                 LINE 02 COL 15.
           05  VALUE "ENTER THE ID TO RETRIEVE:" LINE 05 COL 05.
           05  ENTRY-PT-SCR                      LINE 05 COL 35
                   PIC XXXX   TO ID-ANS.
           05  VALUE "P - TO PROCESS"            LINE 10 COL 20.
           05  VALUE "C - TO CANCEL"             LINE 11 COL 20.
           05  VALUE "Q - TO QUIT"               LINE 12 COL 20.
           05  VALUE "ENTER CHOICE:"             LINE 14 COL 20.
           05  RESPONSE-ANS-SCR                  LINE 14 COL 35
                   PIC X      TO RESPONSE-ID-ANS.
       01  ENTER-NAME-RANDOMLY-SCREEN.
           05  VALUE "RETRIEVE A RECORD BY NAME" BLANK SCREEN
                                                 LINE 02 COL 15.
           05  VALUE "ENTER THE NAME TO RETRIEVE:"
                                                 LINE 05 COL 05.
           05  ENTRY-PT-SCR                      LINE 05 COL 35
                   PIC X(20)   TO NAME-ANS.
           05  VALUE "P - TO PROCESS"            LINE 10 COL 20.
           05  VALUE "C - TO CANCEL"             LINE 11 COL 20.
           05  VALUE "Q - TO QUIT"               LINE 12 COL 20.
           05  VALUE "ENTER CHOICE:"             LINE 14 COL 20.
           05  RESPONSE-ANS-SCR                  LINE 14 COL 35
                   PIC X      TO RESPONSE-NAME-ANS.

       01  INFORMATION-SCREEN.
           05  VALUE "DATA RECORD SCREEN"        BLANK SCREEN
                                                 LINE 02 COL 20.
           05  VALUE "ID #:"                     LINE 05 COL 05.
           05  ID-SCR                            LINE 05 COL 15
                      PIC XXXX  FROM VSAM-STUDENT-ID.
           05  VALUE "NAME:"                     LINE 07 COL 05.
           05  NAME-SCR                          LINE 07 COL 15
                      PIC X(20) FROM VSAM-STUDENT-NAME.
           05  VALUE "MAJOR:"                    LINE 09 COL 05.
           05  MAJOR-SCR                         LINE 09 COL 15
                      PIC XXX   FROM VSAM-STUDENT-MAJOR.
           05  VALUE "ENTRANCE:"                 LINE 11 COL 05.
           05  VALUE "SEMESTER:"                 LINE 12 COL 10.
           05  SEM-SCR                           LINE 12 COL 20
                      PIC X     FROM VSAM-STUDENT-SEM-ENTER.
           05  VALUE "YEAR:"                     LINE 12 COL 23.
           05  YEAR-SCR                          LINE 12 COL 30
                      PIC 9999  FROM VSAM-STUDENT-YR-ENTER.
           05  VALUE "PRESS ANY KEY TO CONTINUE" LINE 15 COL 05.
           05  ANY-KEY-SCR                       LINE 15 COL 40
                      PIC X     TO ANY-KEY-ANS.
       01  ERROR-MESSAGE-SCREEN.
           05  VALUE "RECORD NOT FOUND"          BLANK SCREEN
                                                 LINE 02 COL 20.
           05  VALUE "ID #:"                     LINE 05 COL 05.
           05  ID-ERR-SCR                        LINE 05 COL 15
                      PIC XXXX  FROM ID-ANS.
           05  VALUE "PRESS ANY KEY TO CONTINUE" LINE 10 COL 05.
           05  ANY-KEY-ERR-SCR                   LINE 10 COL 40
                      PIC X     TO ANY-KEY-ERR-ANS.
       PROCEDURE DIVISION.
       MAINLINE.
           PERFORM A-100-INITIALIZE.
           PERFORM B-100-PROCESS.
           PERFORM C-100-TERMINATE.
           STOP RUN.
       A-100-INITIALIZE.
           OPEN INPUT VSAM-FILE
                OUTPUT PRINT-FILE.
       B-100-PROCESS.
           DISPLAY MENU-SCREEN.
           ACCEPT MENU-SCREEN.
           PERFORM B-200-LOOP
               UNTIL MENU-ANS = 5.
       B-200-LOOP.
           IF MENU-ANS = 1
               PERFORM B-300-RANDOM-ID
           ELSE
               IF MENU-ANS = 2
                   PERFORM B-310-RANDOM-NAME
               ELSE
                   IF MENU-ANS = 3
                       PERFORM B-320-ID-GROUP
                   ELSE
                       IF MENU-ANS = 4
                           PERFORM B-330-NAME-GROUP.
           DISPLAY MENU-SCREEN.
           ACCEPT MENU-SCREEN.
       B-300-RANDOM-ID.
           DISPLAY ENTER-ID-RANDOMLY-SCREEN.
           ACCEPT ENTER-ID-RANDOMLY-SCREEN.
           PERFORM B-400-RANDOM-ID-LOOP
               UNTIL RESPONSE-ID-ANS = "Q".
       B-310-RANDOM-NAME.
           DISPLAY "NOT CODED YET".
           ACCEPT JUNK-ANS.
       B-320-ID-GROUP.
           DISPLAY "NOT CODED YET".
           ACCEPT JUNK-ANS.
       B-330-NAME-GROUP.
           DISPLAY "NOT CODED YET"
           ACCEPT JUNK-ANS.
       B-400-RANDOM-ID-LOOP.
           IF RESPONSE-ID-ANS = "P"
               MOVE ID-ANS TO VSAM-STUDENT-ID
               READ VSAM-FILE
                   INVALID KEY
                      DISPLAY ERROR-MESSAGE-SCREEN
                      ACCEPT ERROR-MESSAGE-SCREEN
                   NOT INVALID KEY
                      DISPLAY INFORMATION-SCREEN
                      ACCEPT INFORMATION-SCREEN
                      PERFORM U-000-DETAIL
               END-READ
           END-IF
           DISPLAY ENTER-ID-RANDOMLY-SCREEN
           ACCEPT ENTER-ID-RANDOMLY-SCREEN.
       C-100-TERMINATE.
           CLOSE VSAM-FILE
                 PRINT-FILE.
       U-000-DETAIL.
           MOVE SPACES TO PRINTZ.
           MOVE VSAM-STUDENT-ID TO VSAM-STUDENT-ID-PR.
           MOVE VSAM-STUDENT-NAME TO VSAM-STUDENT-NAME-PR.
           MOVE VSAM-STUDENT-MAJOR TO VSAM-STUDENT-MAJOR-PR.
           MOVE VSAM-STUDENT-SEM-ENTER TO VSAM-STUDENT-SEM-ENTER-PR.
           MOVE VSAM-STUDENT-YR-ENTER TO VSAM-STUDENT-YR-ENTER-PR.
           WRITE PRINTZ
               AFTER ADVANCING 1 LINES.