IDENTIFICATION DIVISION. PROGRAM-ID. ONLINE1. ENVIRONMENT DIVISION. INPUT-OUTPUT SECTION. FILE-CONTROL. SELECT STUDENT-FILE ASSIGN TO STUDFILE ORGANIZATION IS SEQUENTIAL ACCESS MODE IS SEQUENTIAL. SELECT SUBJECT-FILE ASSIGN TO SUBFILE ORGANIZATION IS SEQUENTIAL ACCESS MODE IS SEQUENTIAL. DATA DIVISION. FILE SECTION. FD STUDENT-FILE. 01 STUDENT-RECORD PIC X(80). FD SUBJECT-FILE. 01 SUBJECT-RECORD PIC X(80). WORKING-STORAGE SECTION. 77 END-OF-PROCESS-FLAG PIC X VALUE "N". 88 END-OF-FILE VALUE "Y". 88 END-OF-PROCESS VALUE "Z". 77 ERROR-FLAG PIC X VALUE SPACE. 88 ERROR-FOUND VALUE SPACE. 88 NO-ERROR VALUE "N". 88 NON-NUMERIC-DATA VALUE "X". 01 WS-STUDENT-RECORD. 05 T-STUD-ID. 10 T-YEAR-ENTERED PIC 9(4). 88 VALID-YEAR VALUE 1989 THRU 1999. 10 T-SERIAL-NUM PIC 9(5). 88 INVALID-SERIAL VALUE 0. 05 T-SUBJECT-CODE PIC XXX. 05 T-RESULT PIC 999. 05 FILLER PIC X(65). 01 WS-SUBJECT-RECORD. 05 M-SUBJECT-CODE PIC XXX. 05 M-SUBJECT-NAME PIC X(30). 05 FILLER PIC X(47). 01 FILLER. 05 SUBJECT-TABLE OCCURS 10 TIMES INDEXED BY RESULT-INDEX. 10 WS-SUB-CODE PIC XXX. 10 WS-SUB-NAME PIC X(30). 01 FILLER. 05 WS-DISPLAY-LINE-1 PIC X(11) VALUE "ABC COLLEGE". 05 WS-DISPLAY-LINE-2 PIC X(20) VALUE "STUDENT RESULT ENTRY". 05 WS-DISPLAY-LINE-3 PIC X(11) VALUE "STUDENT ID:". 05 WS-DISPLAY-LINE-4 PIC X(17) VALUE "1. YEAR ENTERED:". 05 WS-DISPLAY-LINE-5 PIC X(18) VALUE "2. SERIAL NUMBER:". 05 WS-DISPLAY-LINE-6 PIC X(17) VALUE "3. SUBJECT CODE:". 05 WS-DISPLAY-LINE-7 PIC X(5) VALUE "NAME:". 05 WS-DISPLAY-LINE-8 PIC X(11) VALUE "4. RESULT:". 05 WS-DISPLAY-LINE-9 PIC X(21) VALUE "CONFIRM (Y/N/1 TO 4):". 01 WS-DISPLAY-DATE. 05 WS-DISPLAY-MM PIC 99. 05 FILLER PIC X VALUE "/". 05 WS-DISPLAY-DD PIC 99. 05 FILLER PIC X VALUE "/". 05 WS-DISPLAY-YY PIC 99. 01 WS-DISPLAY-MESSAGE PIC X(60) VALUE SPACES. 01 WS-IN-DATE. 05 WS-IN-DD PIC 99. 05 WS-IN-MM PIC 99. 05 WS-IN-YY PIC 99. 01 WS-CONFIRM PIC X VALUE SPACE. 88 VALID-CONFIRM VALUE "Y", "N", "1", "2", "3", "4". 88 ADD-CONFIRM VALUE "Y". 88 NOT-CONFIRM VALUE "N". 88 CHANGE-INPUT VALUE "1", "2", "3", "4". 88 CHANGE-YEAR VALUE "1". 88 CHANGE-SERIAL VALUE "2". 88 CHANGE-SUB-CODE VALUE "3". 88 CHANGE-RESULT VALUE "4". PROCEDURE DIVISION. A000-HOUSEKEEPING. ACCEPT WS-IN-DATE FROM DATE. MOVE WS-IN-MM TO WS-DISPLAY-MM. MOVE WS-IN-DD TO WS-DISPLAY-DD. MOVE WS-IN-YY TO WS-DISPLAY-YY. OPEN INPUT SUBJECT-FILE OUTPUT STUDENT-FILE. SET RESULT-INDEX TO 1. READ SUBJECT-FILE INTO WS-SUBJECT-RECORD AT END MOVE "Y" TO END-OF-PROCESS-FLAG END-READ. PERFORM UNTIL END-OF-FILE MOVE M-SUBJECT-CODE TO WS-SUB-CODE(RESULT-INDEX) MOVE M-SUBJECT-NAME TO WS-SUB-NAME(RESULT-INDEX) SET RESULT-INDEX UP BY 1 READ SUBJECT-FILE INTO WS-SUBJECT-RECORD AT END MOVE "Y" TO END-OF-PROCESS-FLAG END-READ END-PERFORM. PERFORM UNTIL RESULT-INDEX > 10 MOVE HIGH-VALUES TO WS-SUB-CODE(RESULT-INDEX) MOVE "NAME NOT FOUND" TO WS-SUB-NAME(RESULT-INDEX) SET RESULT-INDEX UP BY 1 END-PERFORM. PERFORM B000-PROCESS UNTIL END-OF-PROCESS. CLOSE SUBJECT-FILE STUDENT-FILE. STOP RUN. B000-PROCESS. PERFORM C000-DISPLAY-SCREEN. MOVE SPACES TO WS-STUDENT-RECORD. MOVE SPACE TO ERROR-FLAG. PERFORM D001-ACCEPT-YEAR UNTIL NO-ERROR. IF NOT END-OF-PROCESS MOVE SPACES TO ERROR-FLAG PERFORM D002-ACCEPT-SERIAL UNTIL NO-ERROR MOVE SPACES TO ERROR-FLAG PERFORM D003-ACCEPT-SUB-CODE UNTIL NO-ERROR MOVE SPACES TO ERROR-FLAG PERFORM D004-ACCEPT-RESULT UNTIL NO-ERROR MOVE SPACES TO WS-CONFIRM PERFORM UNTIL ADD-CONFIRM OR NOT-CONFIRM OR END-OF-PROCESS MOVE SPACES TO WS-CONFIRM PERFORM D005-ACCEPT-CONFIRM UNTIL VALID-CONFIRM IF CHANGE-INPUT PERFORM C001-CHANGE END-IF END-PERFORM IF ADD-CONFIRM AND NOT END-OF-PROCESS WRITE STUDENT-RECORD FROM WS-STUDENT-RECORD END-IF END-IF. C000-DISPLAY-SCREEN. DISPLAY " " AT LINE 1 AT COLUMN 1 ERASE TO END OF SCREEN WITH NO ADVANCING. DISPLAY WS-DISPLAY-LINE-1 AT LINE 2 AT COLUMN 34. DISPLAY WS-DISPLAY-DATE AT LINE 2 AT COLUMN 70. DISPLAY WS-DISPLAY-LINE-2 AT LINE 4 AT COLUMN 30. DISPLAY WS-DISPLAY-LINE-3 AT LINE 7 AT COLUMN 10. DISPLAY WS-DISPLAY-LINE-4 AT LINE 8 AT COLUMN 10. DISPLAY WS-DISPLAY-LINE-5 AT LINE 9 AT COLUMN 10. DISPLAY WS-DISPLAY-LINE-6 AT LINE 11 AT COLUMN 10. DISPLAY WS-DISPLAY-LINE-7 AT LINE 12 AT COLUMN 14. DISPLAY WS-DISPLAY-LINE-8 AT LINE 14 AT COLUMN 10. DISPLAY WS-DISPLAY-LINE-9 AT LINE 17 AT COLUMN 30. C001-CHANGE. IF CHANGE-YEAR MOVE SPACE TO ERROR-FLAG PERFORM D001-ACCEPT-YEAR UNTIL NO-ERROR ELSE IF CHANGE-SERIAL MOVE SPACES TO ERROR-FLAG PERFORM D002-ACCEPT-SERIAL UNTIL NO-ERROR ELSE IF CHANGE-SUB-CODE MOVE SPACES TO ERROR-FLAG PERFORM D003-ACCEPT-SUB-CODE UNTIL NO-ERROR ELSE MOVE SPACES TO ERROR-FLAG PERFORM D004-ACCEPT-RESULT UNTIL NO-ERROR END-IF END-IF END-IF. D001-ACCEPT-YEAR. MOVE 0 TO T-YEAR-ENTERED. ACCEPT T-YEAR-ENTERED FROM LINE 8 FROM COLUMN 28 PROTECTED WITH EDITING WITH CONVERSION ON EXCEPTION MOVE "NON-NUMERIC YEAR" TO WS-DISPLAY-MESSAGE PERFORM E000-DISPLAY-MESSAGE MOVE "X" TO ERROR-FLAG END-ACCEPT. IF NON-NUMERIC-DATA MOVE SPACE TO ERROR-FLAG ELSE PERFORM E001-ERASE-MESSAGE MOVE "N" TO ERROR-FLAG IF T-YEAR-ENTERED = 9999 MOVE "Z" TO END-OF-PROCESS-FLAG ELSE IF NOT VALID-YEAR MOVE "INVALID YEAR" TO WS-DISPLAY-MESSAGE PERFORM E000-DISPLAY-MESSAGE MOVE SPACE TO ERROR-FLAG END-IF END-IF END-IF. D002-ACCEPT-SERIAL. MOVE 0 TO T-SERIAL-NUM. ACCEPT T-SERIAL-NUM FROM LINE 9 FROM COLUMN 28 PROTECTED WITH EDITING WITH CONVERSION ON EXCEPTION MOVE "NON NUMERIC SERIAL NUMBER" TO WS-DISPLAY-MESSAGE PERFORM E000-DISPLAY-MESSAGE MOVE "X" TO ERROR-FLAG END-ACCEPT. IF NON-NUMERIC-DATA MOVE SPACE TO ERROR-FLAG ELSE PERFORM E001-ERASE-MESSAGE MOVE "N" TO ERROR-FLAG IF INVALID-SERIAL MOVE "SERIAL NUMBER MUST NOT BE 0" TO WS-DISPLAY-MESSAGE PERFORM E000-DISPLAY-MESSAGE MOVE SPACE TO ERROR-FLAG END-IF END-IF. D003-ACCEPT-SUB-CODE. MOVE SPACES TO T-SUBJECT-CODE. ACCEPT T-SUBJECT-CODE FROM LINE 11 FROM COLUMN 28 PROTECTED WITH EDITING END-ACCEPT. PERFORM E001-ERASE-MESSAGE SET RESULT-INDEX TO 1 SEARCH SUBJECT-TABLE WHEN WS-SUB-CODE(RESULT-INDEX) = T-SUBJECT-CODE MOVE "N" TO ERROR-FLAG END-SEARCH. IF ERROR-FOUND MOVE "SUBJECT NOT FOUND" TO WS-DISPLAY-MESSAGE PERFORM E000-DISPLAY-MESSAGE ELSE DISPLAY WS-SUB-NAME(RESULT-INDEX) AT LINE 12 AT COLUMN 28 END-IF. D004-ACCEPT-RESULT. MOVE 0 TO T-RESULT. ACCEPT T-RESULT FROM LINE 14 FROM COLUMN 28 PROTECTED WITH EDITING WITH CONVERSION ON EXCEPTION MOVE "NON NUMERIC RESULT" TO WS-DISPLAY-MESSAGE PERFORM E000-DISPLAY-MESSAGE MOVE "X" TO ERROR-FLAG END-ACCEPT. IF NON-NUMERIC-DATA MOVE SPACE TO ERROR-FLAG ELSE MOVE "N" TO ERROR-FLAG PERFORM E001-ERASE-MESSAGE END-IF. D005-ACCEPT-CONFIRM. ACCEPT WS-CONFIRM FROM LINE 17 FROM COLUMN 52 PROTECTED END-ACCEPT. PERFORM E001-ERASE-MESSAGE IF NOT VALID-CONFIRM MOVE "INVALID CONFIRM CODE" TO WS-DISPLAY-MESSAGE PERFORM E000-DISPLAY-MESSAGE END-IF. E000-DISPLAY-MESSAGE. DISPLAY WS-DISPLAY-MESSAGE AT LINE 21 AT COLUMN 5 WITH BELL REVERSED. E001-ERASE-MESSAGE. DISPLAY " " AT LINE 21 AT COLUMN 5 ERASE TO END OF LINE WITH NO ADVANCING.