IDENTIFICATION DIVISION. PROGRAM-ID. CH12. ENVIRONMENT DIVISION. INPUT-OUTPUT SECTION. FILE-CONTROL. SELECT PERSONNEL-FILE ASSIGN TO DISK 'CH12.DAT'. SELECT DEPT-TABLE-FILE ASSIGN TO DISK 'CH12T1.DAT'. SELECT TITLE-TABLE-FILE ASSIGN TO DISK 'CH12T2.DAT'. SELECT PRINT-FILE ASSIGN TO PRINTER. *** THIS PROGRAM HAS NO DATE ROUTINES - IT IS Y2K COMPLIANT *** DATA DIVISION. FILE SECTION. FD PERSONNEL-FILE LABEL RECORDS ARE STANDARD. 01 PERSONNEL-REC. 05 SSNO-IN PIC 9(9). 05 NAME-IN PIC X(20). 05 SALARY-IN PIC 9(6). 05 CAMPUS-CODE-IN PIC 9. 05 DEPT-CODE-IN PIC 99. 05 TITLE-CODE-IN PIC 999. FD DEPT-TABLE-FILE LABEL RECORDS ARE STANDARD. 01 DEPT-REC. 05 T-DEPT-NO PIC 99. 05 T-DEPT-NAME PIC X(10). FD TITLE-TABLE-FILE LABEL RECORDS ARE STANDARD. 01 TITLE-REC. 05 T-TITLE-CODE PIC 999. 05 T-TITLE-NAME PIC X(10). FD PRINT-FILE LABEL RECORDS ARE OMITTED. 01 PRINT-REC PIC X(132). WORKING-STORAGE SECTION. 01 STORED-AREAS. 05 MORE-RECS PIC X(3) VALUE 'YES'. ****************************************************************** * The Campus Table consists of 5 10-position names and will be * * accessed as a direct-referenced table. EACH-CAMPUS * * subscripted by the CAMPUS-CODE-IN will provide the name. * ****************************************************************** 01 CAMPUS-TABLE. 05 CAMPUS-NAMES PIC X(50) VALUE 'UPSTATE DOWNSTATE CITY MELVILLE HUNTINGTON'. 05 EACH-CAMPUS REDEFINES CAMPUS-NAMES OCCURS 5 TIMES PIC X(10). **************************************************************** * The Dept Table will be accessed by a SEARCH. Even if the * * table is entered in Dept No sequence, there would be no * * real benefit to using a SEARCH ALL since there are only * * 25 entries. * **************************************************************** 01 DEPT-TABLE. 05 DEPT-ENTRIES OCCURS 25 TIMES INDEXED BY X1. 10 DEPT-NO PIC 99. 10 DEPT-NAME PIC X(10). ****************************************************************** * The Title Table will be accessed by a SEARCH ALL. To use a * * binary search the entries must be in sequence by a key * * field and the table should be relatively large. * ****************************************************************** 01 TITLE-TABLE. 05 TITLE-ENTRIES OCCURS 50 TIMES ASCENDING KEY IS TITLE-NO INDEXED BY X2. 10 TITLE-NO PIC 999. 10 TITLE-NAME PIC X(10). 01 DETAIL-REC. 05 PIC X(1) VALUE SPACES. 05 SSNO-OUT PIC 999B99B9999. 05 PIC X(1) VALUE SPACES. 05 NAME-OUT PIC X(20). 05 PIC X(1) VALUE SPACES. 05 SALARY-OUT PIC $ZZZ,ZZZ. 05 PIC X(1) VALUE SPACES. 05 CAMPUS-OUT PIC X(10). 05 PIC X(1) VALUE SPACES. 05 DEPT-OUT PIC X(10). 05 PIC X(1) VALUE SPACES. 05 TITLE-OUT PIC X(10). 05 PIC X(59) VALUE SPACES. PROCEDURE DIVISION. 100-MAIN-MODULE. OPEN INPUT PERSONNEL-FILE DEPT-TABLE-FILE TITLE-TABLE-FILE OUTPUT PRINT-FILE PERFORM 200-LOAD-DEPT-TABLE PERFORM 300-LOAD-TITLE-TABLE PERFORM UNTIL MORE-RECS = 'NO ' READ PERSONNEL-FILE AT END MOVE 'NO ' TO MORE-RECS NOT AT END PERFORM 400-CALC-RTN END-READ END-PERFORM CLOSE PERSONNEL-FILE DEPT-TABLE-FILE TITLE-TABLE-FILE PRINT-FILE STOP RUN. 200-LOAD-DEPT-TABLE. PERFORM VARYING X1 FROM 1 BY 1 UNTIL X1 > 25 READ DEPT-TABLE-FILE AT END DISPLAY 'NOT ENOUGH DEPT TABLE RECORDS' STOP RUN END-READ MOVE DEPT-REC TO DEPT-ENTRIES (X1) END-PERFORM. 300-LOAD-TITLE-TABLE. PERFORM VARYING X2 FROM 1 BY 1 UNTIL X2 > 50 READ TITLE-TABLE-FILE AT END DISPLAY 'NOT ENOUGH TITLE TABLE RECORDS' STOP RUN END-READ MOVE TITLE-REC TO TITLE-ENTRIES (X2) IF X2 > 1 THEN IF TITLE-NO (X2) >= TITLE-NO (X2 - 1) DISPLAY 'TITLE RECORDS ARE NOT IN SEQUENCE' STOP RUN END-IF END-IF END-PERFORM. 400-CALC-RTN. MOVE SPACES TO DETAIL-REC MOVE SSNO-IN TO SSNO-OUT MOVE NAME-IN TO NAME-OUT MOVE SALARY-IN TO SALARY-OUT IF CAMPUS-CODE-IN >= 1 AND >= 5 MOVE EACH-CAMPUS (CAMPUS-CODE-IN) TO CAMPUS-OUT END-IF SET X1 TO 1 SEARCH DEPT-ENTRIES AT END MOVE 'XXXXXXXXXX' TO DEPT-OUT WHEN DEPT-CODE-IN = DEPT-NO (X1) MOVE DEPT-NAME (X1) TO DEPT-OUT END-SEARCH SEARCH ALL TITLE-ENTRIES AT END MOVE 'XXXXXXXXXX' TO TITLE-OUT WHEN TITLE-NO (X2) = TITLE-CODE-IN MOVE TITLE-NAME (X2) TO TITLE-OUT END-SEARCH WRITE PRINT-REC FROM DETAIL-REC AFTER ADVANCING 2 LINES.