IDENTIFICATION DIVISION. AUTHOR. JUSTIN KESWICK. DATE-WRITTEN. AUGUST 12, 1996. * This on-line program generates a sales transaction log * for salesmen and products listed in the master files. ENVIRONMENT DIVISION. INPUT-OUTPUT SECTION. FILE-CONTROL. SELECT SALESLOG ASSIGN TO "SALESLOG.DAT" ORGANIZATION IS SEQUENTIAL ACCESS MODE IS SEQUENTIAL. SELECT SAMAST ASSIGN TO "SAMAST.DAT" ORGANIZATION IS SEQUENTIAL ACCESS MODE IS SEQUENTIAL. SELECT PRMAST ASSIGN TO "PRMAST.DAT" ORGANIZATION IS SEQUENTIAL ACCESS MODE IS SEQUENTIAL. DATA DIVISION. FILE SECTION. FD SALESLOG. 01 SALESLOG-RECORD PIC X(80). FD SAMAST. 01 SAMAST-RECORD PIC X(80). FD PRMAST. 01 PRMAST-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-TRANSACTION-RECORD. 05 T-TRANS-DATE PIC 9(8). 05 T-SALESMAN-ID. PIC X(5). 05 T-PRODUCT-ID PIC X(4). 05 T-AMOUNT PIC 9(8)V99. 05 FILLER PIC X(53). 01 WS-SALESMAN-RECORD. 05 SM-SALESMAN-ID. 10 SM-AREA-CODE PIC X(2). 10 SM-SERIAL-NUM PIC 9(3). 05 SM-NAME PIC X(30). 05 SM-COMM-RATE PIC V9999. 05 FILLER PIC X(41). 01 WS-PRODUCT-RECORD. 05 PM-PRODUCT-ID. 10 PM-CATEGORY PIC X(1). 10 PM-SERIAL-NUM PIC 9(3). 05 PM-NAME PIC X(30). 05 PM-MARKUP PIC V9999. 05 FILLER PIC X(42). 01 WS-SALESMAN-TABLE. 05 ST OCCURS 20 TIMES INDEXED BY PRODUCT-INDEX, CURRENT-INDEX. 10 ST-SALESMAN-ID PIC X(5). 10 ST-NAME PIC X(30). 01 WS-PRODUCT-TABLE. 05 PT OCCURS 30 TIMES INDEXED BY PRODUCT-INDEX, CURRENT-INDEX. 10 PT-PRODUCT-ID PIC X(4). 10 PT-NAME PIC X(30). 01 FILLER. 05 WS-DISPLAY-LINE-1. 10 FILLER PIC X(6) VALUE "SAD001". 10 FILLER PIC X(18) VALUE SPACES. 10 FILLER PIC X(23) VALUE "SALES TRANSACTION INPUT". 05 WS-DISPLAY-LINE-2 PIC X(17) VALUE "(1) SALESMAN ID.:". 05 WS-DISPLAY-LINE-3 PIC X(17) VALUE "NAME OF SALESMAN:". 05 WS-DISPLAY-LINE-4 PIC X(16) VALUE "(2) PRODUCT ID.:". 05 WS-DISPLAY-LINE-5 PIC X(13) VALUE "PRODUCT NAME:". 05 WS-DISPLAY-LINE-6 PIC X(23) VALUE "TRANSACTION AMOUNT:". 05 WS-DISPLAY-LINE-7 PIC X(27) VALUE "CONFIRM (Y / N / 1 / 2 / 3):". 05 WS-DISLAY-LINE-8 PIC X(2) VALUE ">>". 01 WS-DISPLAY-DATE. 05 WS-DISPLAY-MONTH PIC 99. 05 FILLER PIC X VALUE "/". 05 WS-DISPLAY-DAY PIC 99. 05 FILLER PIC X VALUE "/". 05 WS-DISPLAY-YEAR PIC 9999. 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". 88 ADD-CONFIRM VALUE "Y". 88 NOT-CONFIRM VALUE "N". 88 CHANGE-INPUT VALUE "1", "2", "3". 88 CHANGE-SALESMAN-ID VALUE "1". 88 CHANGE-PRODUCT-ID VALUE "2". 88 CHANGE-AMOUNT VALUE "3". PROCEDURE DIVISION. A000-HOUSEKEEPING. ACCEPT WS-IN-DATE FROM DATE. MOVE WS-IN-MM TO WS-DISPLAY-MONTH. MOVE WS-IN-DD TO WS-DISPLAY-DAY. MOVE WS-IN-YY TO WS-DISPLAY-YEAR. ADD 1900 TO WS-DISPLAY-YEAR. OPEN INPUT SAMAST PRMAST OUTPUT SALESLOG. 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 SAMAST PRMAST SALESLOG. STOP RUN. B000-PROCESS. PERFORM C000-DISPLAY-SCREEN. MOVE SPACES TO WS-TRANSACTION-RECORD. MOVE SPACE TO ERROR-FLAG. PERFORM D001-ACCEPT-SALESMAN-ID UNTIL NO-ERROR. IF NOT END-OF-PROCESS MOVE SPACES TO ERROR-FLAG PERFORM D002-ACCEPT-PRODUCT-ID UNTIL NO-ERROR MOVE SPACES TO ERROR-FLAG PERFORM D003-ACCEPT-AMOUNT 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 4. DISPLAY WS-DISPLAY-DATE AT LINE 2 AT COLUMN 69. DISPLAY WS-DISPLAY-LINE-2 AT LINE 4 AT COLUMN 10. DISPLAY WS-DISPLAY-LINE-3 AT LINE 6 AT COLUMN 14. DISPLAY WS-DISPLAY-LINE-4 AT LINE 9 AT COLUMN 10. DISPLAY WS-DISPLAY-LINE-5 AT LINE 11 AT COLUMN 14. DISPLAY WS-DISPLAY-LINE-6 AT LINE 14 AT COLUMN 10. DISPLAY WS-DISPLAY-LINE-7 AT LINE 18 AT COLUMN 29. DISPLAY WS-DISPLAY-LINE-8 AT LINE 21 AT COLUMN 5. C001-CHANGE. IF CHANGE-SALESMAN-ID MOVE SPACE TO ERROR-FLAG PERFORM D001-ACCEPT-SALESMAN-ID UNTIL NO-ERROR ELSE IF CHANGE-PRODUCT-ID MOVE SPACES TO ERROR-FLAG PERFORM D002-ACCEPT-PRODUCT-ID UNTIL NO-ERROR ELSE IF CHANGE-AMOUNT MOVE SPACES TO ERROR-FLAG PERFORM D003-ACCEPT-AMOUNT END-IF END-IF END-IF. D001-ACCEPT-SALESMAN-ID. MOVE SPACES TO T-SALESMAN-ID. 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. D002-ACCEPT-PRODUCT-ID. MOVE SPACES TO T-PRODUCT-ID. 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. D003-ACCEPT-AMOUNT. 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. D004-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.