IDENTIFICATION DIVISION.
PROGRAM-ID. TRAVEL.
AUTHOR. MARTIN O SULLIVAN
INSTALLATION. MOYLISH.
DATE-WRITTEN. APRIL 1997.
ENVIRONMENT DIVISION.
CONFIGURATION SECTION.
SOURCE-COMPUTER. IBMAS400.
OBJECT-COMPUTER. IBMAS400.
INPUT-OUTPUT SECTION.
FILE-CONTROL.
SELECT UNSORTED-FILE
ASSIGN TO DISK-TRAVEL
ORGANIZATION IS SEQUENTIAL
ACCESS MODE IS SEQUENTIAL
FILE STATUS IS I-O-STATUS.
SELECT WORK-FILE
ASSIGN TO DISK-WORKF.
SELECT SORTED-FILE
ASSIGN TO DISK-SORTTRAVEL
ORGANIZATION IS SEQUENTIAL
ACCESS MODE IS SEQUENTIAL
FILE STATUS IS I-O-STATUS.
SELECT REPORT-FILE
ASSIGN TO PRINTER-QSYSPRT
ORGANIZATION IS SEQUENTIAL
FILE STATUS IS I-O-STATUS.
DATA DIVISION.
FILE SECTION.
FD UNSORTED-FILE
LABEL RECORDS ARE STANDARD
DATA RECORD IS FA-UNSORTED-REC.
01 FA-UNSORTED-REC.
03 FA-REP-CODE PIC 9.
03 FA-DESTINATION PIC X(14).
03 FA-DEPARTURE-DATE.
05 FA-DEPARTURE-YEAR PIC 9(2).
05 FA-DEPARTURE-MONTH PIC 9(2).
05 FA-DEPARTURE-DAY PIC 9(2).
03 FA-RETURN-DATE.
05 FA-RETURN-YEAR PIC 9(2).
05 FA-RETURN-MONTH PIC 9(2).
05 FA-RETURN-DAY PIC 9(2).
03 FA-HOURS PIC 9(2).
03 FA-DISTANCE PIC 9(3).
SD WORK-FILE
DATA RECORD IS SA-WORK-REC.
01 SA-WORK-REC.
03 SA-REP-CODE PIC 9.
03 SA-DESTINATION PIC X(14).
03 SA-DEPARTURE-DATE.
05 SA-DEPARTURE-YEAR PIC 9(2).
05 SA-DEPARTURE-MONTH PIC 9(2).
05 SA-DEPARTURE-DAY PIC 9(2).
03 SA-RETURN-DATE.
05 SA-RETURN-YEAR PIC 9(2).
05 SA-RETURN-MONTH PIC 9(2).
05 SA-RETURN-DAY PIC 9(2).
03 SA-HOURS PIC 9(2).
03 SA-DISTANCE PIC 9(3).
FD SORTED-FILE
LABEL RECORDS ARE STANDARD
DATA RECORD IS FB-SORTED-REC.
01 FB-SORTED-REC.
03 FB-REP-CODE PIC 9.
03 FB-DESTINATION PIC X(14).
03 FB-DEPARTURE-DATE.
05 FB-DEPARTURE-YEAR PIC 9(2).
05 FB-DEPARTURE-MONTH PIC 9(2).
05 FB-DEPARTURE-DAY PIC 9(2).
03 FB-RETURN-DATE.
05 FB-RETURN-YEAR PIC 9(2).
05 FB-RETURN-MONTH PIC 9(2).
05 FB-RETURN-DAY PIC 9(2).
03 FB-HOURS PIC 9(2).
03 FB-DISTANCE PIC 9(3).
FD REPORT-FILE
LABEL RECORD IS OMITTED
DATA RECORD IS FB-REP-REC.
01 FB-REP-REC PIC X(132).
WORKING-STORAGE SECTION.
01 SALES-REP-NAMES.
03 REP-NAMES.
05 FILLER PIC X(12) VALUE "M O'CONNOR".
05 FILLER PIC X(12) VALUE "S FITZGERALD".
05 FILLER PIC X(12) VALUE "M O'SULLIVAN".
05 FILLER PIC X(12) VALUE " P RYAN".
05 FILLER PIC X(12) VALUE "R BARRY".
03 SALES-REP-TABLE REDEFINES REP-NAMES
OCCURS 5 TIMES PIC X(12).
01 STATUS-CODE-ETC.
03 I-O-STATUS PIC XX.
03 INPUT-ERR-MSG PIC X(13) VALUE "ERROR IN READ".
03 OUTPUT-ERR-MSG PIC X(14) VALUE "ERROR IN WRITE".
01 SALESPERSON-COST PIC 9(6)V99.
01 FINAL-TOTAL PIC 9(6)V99.
01 OVERALL-TOTAL PIC 9(6)V99.
01 LAST-USED-REP-CODE PIC 9.
01 WA-FILE-STAT PIC X(2).
01 WB-REP-STAT PIC X(2).
01 END-OF-FILE-FLAG PIC X.
88 END-OF-FILE VALUE "Y".
88 NOT-END-OF-FILE VALUE "N".
01 THE-DATE.
03 THE-YEAR PIC 9(2).
03 THE-MONTH PIC 9(2).
03 THE-DAY PIC 9(2).
01 REPORT-HEADING.
03 FILLER PIC X(5) VALUE SPACES.
03 FILLER PIC X(7) VALUE "DATE : ".
03 THE-DAY-OUT PIC 9(2).
03 FILLER PIC X VALUE "/".
03 THE-MONTH-OUT PIC 9(2).
03 FILLER PIC X VALUE "/".
03 THE-YEAR-OUT PIC 9(2).
03 FILLER PIC X(21) VALUE SPACES.
03 FILLER PIC X(34) VALUE
"FOXHALL DISTRIBUTION ".
01 SALESPERSON-HEADING.
03 FILLER PIC X(10) VALUE SPACES.
03 FILLER PIC X(19) VALUE
"SALESPERSON NAME : ".
03 SALESPERSON-NAME-OUT PIC X(12).
01 DETAIL-HEADING.
03 FILLER PIC X(20) VALUE SPACES.
03 FILLER PIC X(19) VALUE "DESTINATION".
03 FILLER PIC X(17) VALUE "DEPARTURE DATE".
03 FILLER PIC X(14) VALUE "RETURN DATE".
03 FILLER PIC X(15) VALUE "NO. OF HOURS".
03 FILLER PIC X(11) VALUE "DISTANCE".
03 FILLER PIC X(10) VALUE "TOTAL COST".
01 DETAIL-LINE.
03 FILLER PIC X(20) VALUE SPACES.
03 DESTINATION-OUT PIC X(14).
03 FILLER PIC X(8) VALUE SPACES.
03 DEPARTURE-DAY-OUT PIC 9(2).
03 FILLER PIC X VALUE "/".
03 DEPARTURE-MONTH-OUT PIC 9(2).
03 FILLER PIC X VALUE "/".
03 DEPARTURE-YEAR-OUT PIC 9(2).
03 FILLER PIC X(8) VALUE SPACES.
03 RETURN-DAY-OUT PIC 9(2).
03 FILLER PIC X VALUE "/".
03 RETURN-MONTH-OUT PIC 9(2).
03 FILLER PIC X VALUE "/".
03 RETURN-YEAR-OUT PIC 9(2).
03 FILLER PIC X(8) VALUE SPACES.
03 HOURS-OUT PIC 99.
03 FILLER PIC X(10) VALUE SPACES.
03 DISTANCE-OUT PIC 999.
03 FILLER PIC X(7) VALUE SPACES.
03 SALESPERSON-COST-OUT PIC œœœ,œœœ,œœœ.99.
01 SALESPERSON-TOTAL-LINE.
03 FILLER PIC X(56) VALUE SPACES.
03 FILLER PIC X(32) VALUE
"TOTAL EXPENSES FOR SALESPERSON ".
03 SALESPERSON-CODE2-OUT PIC 9.
03 FILLER PIC X(8) VALUE " IS ".
03 SALESPERSON-TOTAL-OUT PIC 9(6).
01 OVERALL-TOTAL-LINE.
03 FILLER PIC X(45) VALUE SPACES.
03 FILLER PIC X(32) VALUE
"TOTAL EXPENSES FOR SALESPERSON IS".
03 OVERALL-TOTAL-OUT PIC œœœ,œœœ.99.
01 FINAL-TOTAL-LINE.
03 FILLER PIC X(45) VALUE SPACES.
03 FILLER PIC X(24) VALUE "TOTAL EXPENSES FOR MONTH".
03 FILLER PIC X(24) VALUE SPACES.
03 FINAL-TOTAL-OUT PIC œœœ,œœœ.99.
01 FOOTING-LINE.
03 FILLER PIC X(40) VALUE SPACES.
03 FILLER PIC X(25) VALUE "*** END OF REPORT ***".
PROCEDURE DIVISION.
DECLARATIVES.
INPUT-FAIL SECTION.
USE AFTER STANDARD EXCEPTION PROCEDURE ON INPUT.
INPUT-PARA.
DISPLAY INPUT-ERR-MSG, I-O-STATUS.
OUTPUT-FAIL SECTION.
USE AFTER STANDARD EXCEPTION PROCEDURE ON OUTPUT.
OUTPUT-PARA.
DISPLAY OUTPUT-ERR-MSG, I-O-STATUS.
END DECLARATIVES.
MAIN-PROCESSING SECTION.
TOP-LEVEL-PARA.
PERFORM GET-DATE.
PERFORM SORT-PARA.
PERFORM START-UP.
PERFORM GET-RECORD.
PERFORM DO-SALES-REP UNTIL END-OF-FILE.
PERFORM FINAL-TOTAL-PARA.
PERFORM CLOSE-DOWN.
STOP RUN.
DO-SALES-REP.
PERFORM WRITE-SALESPERSON-HEADINGS.
PERFORM EACH-SALES-REP
UNTIL LAST-USED-REP-CODE
NOT EQUAL FB-REP-CODE OR END-OF-FILE.
PERFORM TOTAL-LINE-PARA.
PERFORM LAST-USED-SALES-REP-PARA.
PERFORM RESET-PARA.
SORT-PARA.
SORT WORK-FILE
ON ASCENDING KEY SA-REP-CODE
USING UNSORTED-FILE
GIVING SORTED-FILE.
GET-DATE.
ACCEPT THE-DATE FROM DATE.
MOVE THE-YEAR TO THE-YEAR-OUT.
MOVE THE-MONTH TO THE-MONTH-OUT.
MOVE THE-DAY TO THE-DAY-OUT.
START-UP.
PERFORM OPEN-FILES.
PERFORM INIT-VARS.
PERFORM WRITE-HEADINGS-PARA.
INIT-VARS.
MOVE ZEROS TO SALESPERSON-COST.
MOVE ZEROS TO OVERALL-TOTAL.
SET NOT-END-OF-FILE TO TRUE.
OPEN-FILES.
OPEN INPUT SORTED-FILE.
OPEN OUTPUT REPORT-FILE.
WRITE-HEADINGS-PARA.
WRITE FB-REP-REC FROM REPORT-HEADING AFTER
ADVANCING 1 LINE.
LOW-TRAVEL.
MULTIPLY FB-DISTANCE BY 0.30 GIVING SALESPERSON-COST.
HIGH-TRAVEL.
COMPUTE SALESPERSON-COST = 3 + (FB-DISTANCE - 10) * 0.20.
WRITE-SALESPERSON-HEADINGS.
MOVE SALES-REP-TABLE(FB-REP-CODE) TO SALESPERSON-NAME-OUT.
WRITE FB-REP-REC FROM SALESPERSON-HEADING AFTER
ADVANCING 3 LINES.
WRITE FB-REP-REC FROM DETAIL-HEADING AFTER
ADVANCING 3 LINES.
PERFORM LAST-USED-SALES-REP-PARA.
PERFORM RESET-PARA.
DETAIL-LINE-PARA.
MOVE FB-DESTINATION TO DESTINATION-OUT.
MOVE FB-DEPARTURE-DAY TO DEPARTURE-DAY-OUT.
MOVE FB-DEPARTURE-MONTH TO DEPARTURE-MONTH-OUT.
MOVE FB-DEPARTURE-YEAR TO DEPARTURE-YEAR-OUT.
MOVE FB-RETURN-DAY TO RETURN-DAY-OUT.
MOVE FB-RETURN-MONTH TO RETURN-MONTH-OUT.
MOVE FB-RETURN-YEAR TO RETURN-YEAR-OUT.
MOVE FB-HOURS TO HOURS-OUT.
MOVE FB-DISTANCE TO DISTANCE-OUT.
MOVE SALESPERSON-COST TO SALESPERSON-COST-OUT.
WRITE FB-REP-REC FROM DETAIL-LINE AFTER ADVANCING
2 LINES.
PERFORM GET-RECORD.
TOTAL-LINE-PARA.
MOVE OVERALL-TOTAL TO OVERALL-TOTAL-OUT.
WRITE FB-REP-REC FROM OVERALL-TOTAL-LINE AFTER ADVANCING
1 LINES.
FINAL-TOTAL-PARA.
MOVE FINAL-TOTAL TO FINAL-TOTAL-OUT.
WRITE FB-REP-REC FROM FINAL-TOTAL-LINE AFTER ADVANCING
1 LINES.
LAST-USED-SALES-REP-PARA.
MOVE FB-REP-CODE TO LAST-USED-REP-CODE.
GET-RECORD.
READ SORTED-FILE AT END SET END-OF-FILE TO TRUE.
EACH-SALES-REP.
PERFORM EXPENCES-PARA.
PERFORM CALCULATE-TOTALS.
PERFORM DETAIL-LINE-PARA.
CALCULATE-TOTALS.
ADD SALESPERSON-COST TO OVERALL-TOTAL GIVING OVERALL-TOTAL.
EXPENCES-PARA.
IF FB-DISTANCE < 10 THEN PERFORM LOW-TRAVEL
ELSE PERFORM HIGH-TRAVEL.
IF FB-DEPARTURE-DAY IS NOT EQUAL TO FB-RETURN-DAY
THEN
ADD 43 TO SALESPERSON-COST
ELSE IF FB-HOURS < 5 THEN ADD 6 TO SALESPERSON-COST
ELSE IF FB-HOURS < 10 THEN ADD 15 TO
SALESPERSON-COST
ELSE ADD 20 TO SALESPERSON-COST.
RESET-PARA.
MOVE ZERO TO SALESPERSON-COST.
ADD OVERALL-TOTAL TO FINAL-TOTAL.
MOVE ZERO TO OVERALL-TOTAL.
CLOSE-DOWN.
WRITE FB-REP-REC FROM FOOTING-LINE AFTER ADVANCING 3 LINE.
CLOSE SORTED-FILE.
CLOSE REPORT-FILE.
DISPLAY "END OF PROGRAM - GOOD BY".
Link back to cobol page