IDENTIFICATION DIVISION. PROGRAM-ID. PROJ4. ****************************************************** * PROGRAM CALCULATES AMOUNT OWED FOR EACH * * CUSTOMER. * * TYPE 1 = TOYOTA, $26 PER DAY, 18 CENT PER MILE * * TYPE 2 = OLDSMOBILE, $32 PER DAY, * * 22 CENTS PER MILE * * TYPE 3 = CADILLAC, $43 PER DAY, * * 28 CENS PER MILE * ****************************************************** ENVIRONMENT DIVISION. INPUT-OUTPUT SECTION. FILE-CONTROL. SELECT CUSTOMER-FILE ASSIGN TO 'PROJ4.DAT'. SELECT CUST-REPORT-FILE ASSIGN TO 'PROJ4.RPT'. DATA DIVISION. FILE SECTION. FD CUSTOMER-FILE LABEL RECORDS ARE STANDARD. 01 CUSTOMER-REC. 05 CUST-LAST-NAME PIC X(20). 05 CUST-FIRST-INT PIC X. 05 CUST-CAR-TYPE PIC X. 05 CUST-MILES-DRIVEN PIC 9(5). 05 CUST-DAYS-RENTED PIC 9(3). FD CUST-REPORT-FILE LABEL RECORDS ARE STANDARD. 01 PRINT-REC PIC X(90). WORKING-STORAGE SECTION. 01 WORK-AREA. 05 ARE-THERE-MORE-RECORDS PIC XXX VALUE 'YES'. 05 WS-MILES-DRIVEN PIC 9(5). 05 WS-TOTAL-OWED PIC 9(5)V99 VALUE 0. 05 WS-AMT-OWED PIC 9(5)V99 VALUE 0. 05 WS-MILAGE-AMT PIC 9(5)V99 VALUE 0. 01 REPORT-HEADING. 05 PIC X(32). 05 PIC X(14) VALUE 'ABC RENTAL CAR'. 01 DETAIL-HEADING. 05 PIC X(13) VALUE 'CUSTOMER NAME'. 05 PIC X(10). 05 PIC X(11) VALUE 'TYPE OF CAR'. 05 PIC X(6). 05 PIC X(12) VALUE 'MILES DRIVEN'. 05 PIC X(4). 05 PIC X(16) VALUE '# OF DAYS RENTED'. 05 PIC X(4). 05 PIC X(11) VALUE 'AMOUNT OWED'. 01 DETAIL-LINE. 05 CUST-LAST-NAME-OUT PIC X(15). 05 PIC X(1). 05 CUST-FIRST-INT-OUT PIC X(1). 05 PIC X(6). 05 CUST-CAR-TYPE-OUT PIC X(10). 05 PIC X(13). 05 CUST-MILES-DRIVEN-OUT PIC ZZ,ZZ9. 05 PIC X(18). 05 CUST-DAYS-RENTED-OUT PIC Z9. 05 PIC X(6). 05 CUST-AMT-OWED-OUT PIC $$,$$9.99. 01 REPORT-FOOTER. 05 PIC X(17) VALUE 'TOTAL AMOUNT OWED'. 05 PIC X(59). 05 TOTAL-AMT-OWED-OUT PIC $$$$,$$$.99. PROCEDURE DIVISION. **************************************************** * MAIN MODULE CONTROLS OVERALL PROGRAM LOGIC * **************************************************** 100-MAIN-MODULE. OPEN INPUT CUSTOMER-FILE OUTPUT CUST-REPORT-FILE MOVE SPACES TO PRINT-REC PERFORM 200-WRITE-HEADING PERFORM UNTIL ARE-THERE-MORE-RECORDS = 'NO ' READ CUSTOMER-FILE AT END MOVE 'NO ' TO ARE-THERE-MORE-RECORDS NOT AT END PERFORM 300-CALC-AMT-OWED END-READ END-PERFORM PERFORM 500-WRITE-GRAND-TOTAL CLOSE CUSTOMER-FILE CUST-REPORT-FILE STOP RUN. **************************************************** * PERFORMED FROM 100-MAIN-MODULE, THIS ROUTINE * * WRITES REPROT TITLE AND HEADING. * **************************************************** 200-WRITE-HEADING. WRITE PRINT-REC FROM REPORT-HEADING AFTER ADVANCING 2 LINES WRITE PRINT-REC FROM DETAIL-HEADING AFTER ADVANCING 2 LINES MOVE SPACES TO PRINT-REC WRITE PRINT-REC. **************************************************** * PERFORMED FROM 100-MAIN-MODULE, THIS ROUTINE * * CALCULATES AMOUNT OWED BASED ON TYPE OF CAR, * * MILES DRIVEN AND NUMBER OF DAYS RENTED. * Hints: perform different routint based on the * * value in the CUST-CAR-TYPE * **************************************************** 300-CALC-AMT-OWED. EVALUATE CUST-CAR-TYPE WHEN '1' PERFORM 310-PROCESS-TOYOTA WHEN '2' PERFORM 320-PROCESS-OLDSMOBILE WHEN '3' PERFORM 330-PROCESS-CADILLAC END-EVALUATE. **************************************************** * PROCESS-TOYOTA * **************************************************** 310-PROCESS-TOYOTA. MOVE CUST-MILES-DRIVEN TO WS-MILES-DRIVEN IF CUST-MILES-DRIVEN > 100 COMPUTE WS-MILAGE-AMT = (CUST-MILES-DRIVEN - 100) * .18 COMPUTE WS-AMT-OWED = 26 * CUST-DAYS-RENTED + WS-MILAGE-AMT ELSE COMPUTE WS-AMT-OWED = 26 * CUST-DAYS-RENTED END-IF PERFORM 400-DETAIL-PRINT. **************************************************** * PROCESS-OLDSMOBILE * **************************************************** 320-PROCESS-OLDSMOBILE. MOVE CUST-MILES-DRIVEN TO WS-MILES-DRIVEN IF CUST-MILES-DRIVEN > 100 COMPUTE WS-MILAGE-AMT = (CUST-MILES-DRIVEN - 100) * .22 COMPUTE WS-AMT-OWED = 32 * CUST-DAYS-RENTED + WS-MILAGE-AMT ELSE COMPUTE WS-AMT-OWED = 32 * CUST-DAYS-RENTED END-IF PERFORM 400-DETAIL-PRINT. **************************************************** * PROCESS-CADILLAC * **************************************************** 330-PROCESS-CADILLAC. MOVE CUST-MILES-DRIVEN TO WS-MILES-DRIVEN IF CUST-MILES-DRIVEN > 100 COMPUTE WS-MILAGE-AMT = (CUST-MILES-DRIVEN - 100) * .28 COMPUTE WS-AMT-OWED = 43 * CUST-DAYS-RENTED + WS-MILAGE-AMT ELSE COMPUTE WS-AMT-OWED = 43 * CUST-DAYS-RENTED END-IF PERFORM 400-DETAIL-PRINT. **************************************************** * WRITE THE DETAIL LINE OF REPORT * **************************************************** 400-DETAIL-PRINT. ADD WS-AMT-OWED TO WS-TOTAL-OWED MOVE CUST-LAST-NAME TO CUST-LAST-NAME-OUT MOVE CUST-FIRST-INT TO CUST-FIRST-INT-OUT EVALUATE CUST-CAR-TYPE WHEN '1' MOVE 'TOYOTA' TO CUST-CAR-TYPE-OUT WHEN '2' MOVE 'OLDSMOBILE' TO CUST-CAR-TYPE-OUT WHEN '3' MOVE 'CADILLAC' TO CUST-CAR-TYPE-OUT END-EVALUATE MOVE WS-MILES-DRIVEN TO CUST-MILES-DRIVEN-OUT MOVE CUST-DAYS-RENTED TO CUST-DAYS-RENTED-OUT MOVE WS-AMT-OWED TO CUST-AMT-OWED-OUT WRITE PRINT-REC FROM DETAIL-LINE. **************************************************** * WRITE THE GRAND TOTAL LINE * **************************************************** 500-WRITE-GRAND-TOTAL. MOVE SPACES TO PRINT-REC WRITE PRINT-REC MOVE WS-TOTAL-OWED TO TOTAL-AMT-OWED-OUT WRITE PRINT-REC FROM REPORT-FOOTER.