IDENTIFICATION DIVISION. PROGRAM-ID. VEHICLE-REPORT. AUTHOR. JONAS WIK. DATE-WRITTEN. 04/27/2000. DATE-COMPILED. *************************************************************** ** ** DESCRIPTION: ** THIS PROGRAM FIRST READS IN THE CLASSIFICATIONS AND ** RATES AND STORES THEM IN A TABLE 90 ENTRIES LONG AND ** THEN GOES THRU A FILE COMPUTING THE REGULATION FEE BASED ** ON THE WEIGHT OF THE VEHICLE AND THE RATE FOR ITS CLASS. ** A REPORT IS THEN PRINTED. ** ** INPUT: CLASS-FILE ** VCLASS 2 CHARS ** VRATE 3 DIGITS 2 DEC ** ** INPUT: TRANS-FILE ** VEH-CLASS 2 CHARS ** VNAME 20 CHARS ** VWEIGHT 5 DIGITS NO DEC ** VYEAR 4 DIGITS ** VDESCR 9 CHARS ** ** OUTPUT: CLASS-RPT ** DATA STARTS IN COL. ** DET-CLASS 8 ** DET-NAME 17 ** DET-WEIGHT ** DET-FEE ** *************************************************************** ENVIRONMENT DIVISION. INPUT-OUTPUT SECTION. ** FILE-CONTROL. SELECT CLASS-FILE ASSIGN TO 'J:/COBOL/VCLASS.DAT' ORGANIZATION IS LINE SEQUENTIAL. SELECT TRANS-FILE ASSIGN TO 'J:/COBOL/VTRANS.DAT' ORGANIZATION IS LINE SEQUENTIAL. SELECT CLASS-RPT ASSIGN TO 'J:/COBOL/VEHICLE.TXT'. ** DATA DIVISION. ** FILE SECTION. ** FD CLASS-FILE LABEL RECORD ARE STANDARD RECORD CONTAINS 5 CHARACTERS. 01 CLASS-FILE-REC. 05 VCLASS PIC XX. 05 VRATE PIC 9V99. ** FD TRANS-FILE LABEL RECORDS ARE STANDARD RECORD CONTAINS 40 CHARACTERS. 01 TRANS-FILE-REC. 05 VEH-CLASS PIC XX. 05 VNAME PIC X(20). 05 VWEIGHT PIC 9(5). 05 VYEAR PIC 9999. 05 VDESCR PIC X(9). ** FD CLASS-RPT LABEL RECORDS ARE OMITTED RECORD CONTAINS 60 CHARACTERS. 01 CLASS-REC PIC X(60). ** WORKING-STORAGE SECTION. ** 01 WV-VARIABLES. 05 REGFEE PIC 9(5)V99 VALUE 0. 05 GRANDTOT PIC 9(9)V99 VALUE 0. 05 X1 PIC 99 VALUE 1. 05 X2 PIC 99. ** 01 WV-YEARS-TOTS. 05 YEAR-TOT OCCURS 3 TIMES PIC 9(7)V99 VALUE 0. ** 01 WV-RATE-TABLE. 05 RATE-TABLE OCCURS 90 TIMES. 10 VEHICLE-CLASS PIC XX. 10 VEH-RATE PIC 9V99. 01 WS-COUNTS. ** 05 WC-PAGECOUNT PIC 999 VALUE 1. 05 WC-LINECOUNT PIC 99 VALUE 0. 88 WC-EOP VALUE 60. 05 WC-COUNT PIC 99 VALUE 0. ** 01 WS-DATE. ** 05 PIC XX. 05 WD-YEAR PIC 99. 05 WD-MONTH PIC 99. 05 WD-DAY PIC 99. 05 PIC X(13). ** 01 WS-SWITCH. 05 EOF-TABLE PIC XXX. 88 EOF-CLASS-FILE VALUE 'YES'. 05 WS-FOUND PIC XXX. 05 EOF-MAIN-FILE PIC XXX. 88 EOF-MAIN VALUE 'YES'. ** 01 HEAD1. 05 FILLER PIC X(20) VALUE SPACES. 05 PIC X(21) VALUE 'REGISTRATION REPORT '. 05 HEADING-MONTH PIC Z9. 05 PIC X VALUE '/'. 05 HEADING-DAY PIC Z9. 05 PIC X VALUE '/'. 05 HEADING-YEAR PIC 99. 05 PIC X(6) VALUE ' PAGE '. 05 HEAD-PAGE PIC 99. 05 FILLER PIC XXX VALUE SPACES. ** 01 HEAD2. 05 PIC X(11) VALUE ' JONAS WIK'. 05 FILLER PIC X(49) VALUE SPACES. ** 01 HEAD3. 05 PIC X(15) VALUE ' VEHICLE CLASS'. 05 PIC X(6) VALUE ' NAME'. 05 FILLER PIC X(19) VALUE SPACES. 05 PIC X(6) VALUE 'WEIGHT'. 05 FILLER PIC X(5) VALUE SPACE. 05 PIC XXX VALUE 'FEE'. 05 FILLER PIC X(6) VALUE SPACES. ** 01 VEH-DETAIL. 05 FILLER PIC X(7) VALUE SPACES. 05 DET-CLASS PIC XX. 05 FILLER PIC X(7). 05 DET-NAME PIC X(20). 05 FILLER PIC XXXX VALUE SPACES. 05 DET-WEIGHT PIC 9(5). 05 FILLER PIC X(5) VALUE SPACES. 05 DET-FEE PIC $$$,$$Z.99. ** 01 FOOT1. 05 FILLER PIC XX VALUE SPACE. 05 PIC X(16) VALUE 'TOTAL FOR 1988: '. 05 FOOT-TOT-88 PIC $$,$$$,$$$.99. 05 FILLER PIC X(29) VALUE SPACE. 01 FOOT2. 05 FILLER PIC XX VALUE SPACE. 05 PIC X(16) VALUE 'TOTAL FOR 1989: '. 05 FOOT-TOT-89 PIC $$,$$$,$$$.99. 05 FILLER PIC X(29) VALUE SPACES. 01 FOOT3. 05 FILLER PIC XX VALUE SPACES. 05 PIC X(16) VALUE 'TOTAL FOR 1990: '. 05 FOOT-TOT-90 PIC $$,$$$,$$$.99. 05 FILLER PIC X(29) VALUE SPACES. 01 FOOT4. 05 FILLER PIC XX VALUE SPACES. 05 PIC X(15) VALUE 'GRAND TOTAL: '. 05 GRAND PIC $$$,$$$,$$$.99. 05 FILLER PIC X(33) VALUE SPACES. ** PROCEDURE DIVISION. *************************************************************** ** ** THIS IS THE MAIN MODULE WHICH EXECUTES 800-LOAD TABLE, ** 110-INITIALIZE PARAGRAPH, THE 200-COMPUTE PARAGRAPH UNTIL END ** OF FILE, AND THEN WRITES OUT THE FOOTER. ** *************************************************************** 100-MAIN. ** PERFORM 800-LOAD-TABLE THRU 800-EXIT. PERFORM 110-INITIALIZE THRU 110-EXIT. PERFORM 200-CALC THRU 200-EXIT UNTIL EOF-MAIN. PERFORM 950-FOOT THRU 950-EXIT. CLOSE TRANS-FILE CLASS-RPT. STOP RUN. ** *************************************************************** ** ** 110-INITIALIZE OPENS FILES AND CALLS 700-READ-TRANS, ** 500-DATE-MOVE AND 900-HEAD. ** *************************************************************** 110-INITIALIZE. ** OPEN INPUT TRANS-FILE. OPEN OUTPUT CLASS-RPT. MOVE 'NO' TO EOF-MAIN-FILE. PERFORM 700-READ-TRANS THRU 700-EXIT. PERFORM 500-DATE-MOVE THRU 500-EXIT. PERFORM 900-HEAD THRU 900-EXIT. ** 110-EXIT.EXIT. *************************************************************** ** ** THIS PARAGRAPH EXECUTES A SEARCH FOR CLASSIFICATION CODE ** UNTIL IT IS FOUND OR NOT IN THE TABLE, IT THEN COMPUTES THE ** REGULATION FEE BY: RATE * WEIGHT ** IF END OF PAGE IS REACHED, A NEW SET OF HEADERS IS PRINTED ** ON THE NEXT PAGE. THE DETAIL LINE IS THEN PRINTED THRU ** 910-DETAIL, AND THE TOTAL IS ADDED TO THE TOTAL FOR THE ** YEAR. AT THE END A NEW TRANSACTION RECORD IS READ. ** *************************************************************** 200-CALC. MOVE 'NO' TO WS-FOUND. PERFORM 300-SEARCH THRU 300-EXIT VARYING X1 FROM 1 BY 1 UNTIL WS-FOUND = 'YES' OR X1 >90. IF WS-FOUND = 'NO' INITIALIZE REGFEE ELSE COMPUTE REGFEE ROUNDED = VEH-RATE(X2) * VWEIGHT IF WC-EOP PERFORM 900-HEAD THRU 900-EXIT END-IF PERFORM 910-DETAIL THRU 910-EXIT PERFORM 250-YEAR-TOT THRU 250-EXIT END-IF. PERFORM 700-READ-TRANS THRU 700-EXIT. 200-EXIT.EXIT. *************************************************************** ** ** THIS PARAGRAPH ADDS THE REGULATION FEE TO THE APPROPRIATE ** YEAR TOTAL. ** *************************************************************** 250-YEAR-TOT. EVALUATE VYEAR WHEN 1988 ADD REGFEE TO YEAR-TOT(1) WHEN 1989 ADD REGFEE TO YEAR-TOT(2) WHEN 1990 ADD REGFEE TO YEAR-TOT(3) END-EVALUATE. 250-EXIT.EXIT. ** *************************************************************** ** ** THIS PARAGRAPH SEARCHES FOR A MATCH OF CLASSIFICATIONS ** BETWEEN THE TABLE AND THE TRANSACTION FILE. ** *************************************************************** 300-SEARCH. IF VEHICLE-CLASS(X1) = VEH-CLASS MOVE 'YES' TO WS-FOUND MOVE X1 TO X2 END-IF. 300-EXIT.EXIT. *************************************************************** ** ** THIS PARAGRAPH MOVES THE CURRENT DATE TO THE HEADING ** *************************************************************** 500-DATE-MOVE. ** MOVE FUNCTION CURRENT-DATE TO WS-DATE. MOVE WD-MONTH TO HEADING-MONTH. MOVE WD-DAY TO HEADING-DAY. MOVE WD-YEAR TO HEADING-YEAR. ** 500-EXIT.EXIT. ** *************************************************************** ** ** THIS PARAGRAPH READS THE TRANSACTION INPUT FILE. ** *************************************************************** 700-READ-TRANS. ** READ TRANS-FILE AT END MOVE 'YES' TO EOF-MAIN-FILE. ** 700-EXIT.EXIT. *************************************************************** ** ** THIS PARAGRAPH OPENS INPUT CLASS-FILE CALLS 810-READ AND ** 820-FILL, AND THEN CLOSES THE FILE. ** *************************************************************** 800-LOAD-TABLE. OPEN INPUT CLASS-FILE. PERFORM 810-READ THRU 810-EXIT. PERFORM 820-FILL THRU 820-EXIT UNTIL EOF-CLASS-FILE. CLOSE CLASS-FILE. 800-EXIT.EXIT. ************************************************************** ** ** THIS PARAGRAPH READS THE CLASS-FILE ** ************************************************************** 810-READ. READ CLASS-FILE AT END MOVE 'YES' TO EOF-TABLE. 810-EXIT. EXIT. ************************************************************** ** ** THIS PARAGRAPH FILLS THE TABLE WITH CLASSIFICATION AND RATE ** ************************************************************** 820-FILL. MOVE VCLASS TO VEHICLE-CLASS(X1). MOVE VRATE TO VEH-RATE(X1). ADD 1 TO X1. IF X1 > 90 MOVE 'YES' TO EOF-TABLE ELSE PERFORM 810-READ THRU 810-EXIT END-IF. 820-EXIT. EXIT. ** *************************************************************** ** ** THIS PARAGRAPH WRITES HEADINGS AND INCREMENTS PAGENUMBER ** *************************************************************** 900-HEAD. ** MOVE SPACES TO CLASS-REC. WRITE CLASS-REC AFTER ADVANCING PAGE. MOVE WC-PAGECOUNT TO HEAD-PAGE. ADD 1 TO WC-PAGECOUNT. WRITE CLASS-REC FROM HEAD1 AFTER ADVANCING 5 LINES. WRITE CLASS-REC FROM HEAD2 AFTER ADVANCING 1 LINE. WRITE CLASS-REC FROM HEAD3 AFTER ADVANCING 2 LINES. ** 900-EXIT. EXIT. *************************************************************** ** ** THIS PARAGRAPH MOVES & WRITES THE DETAIL AND INCREMENTS THE ** LINECOUNT. ** *************************************************************** 910-DETAIL. MOVE REGFEE TO DET-FEE. MOVE VWEIGHT TO DET-WEIGHT. MOVE VNAME TO DET-NAME. MOVE VEH-CLASS TO DET-CLASS WRITE CLASS-REC FROM VEH-DETAIL AFTER ADVANCING 2 LINES. ADD 2 TO WC-LINECOUNT. 910-EXIT. EXIT. *************************************************************** ** ** THIS PARAGRAPH MOVES THE YEAR-TOTS TO THE FOOTERS, ** COMPUTES THE GRANGTOT BY ADDING THE THREE YEARS UP ** MOVES THE GRANDTOT TO THE FOOTER AND PRINTS THE ** FOOTERS. ** *************************************************************** 950-FOOT. MOVE YEAR-TOT(1) TO FOOT-TOT-88. WRITE CLASS-REC FROM FOOT1 AFTER ADVANCING 3 LINES. MOVE YEAR-TOT(2) TO FOOT-TOT-89. WRITE CLASS-REC FROM FOOT2 AFTER ADVANCING 1 LINE. MOVE YEAR-TOT(3) TO FOOT-TOT-90. WRITE CLASS-REC FROM FOOT3 AFTER ADVANCING 1 LINE. COMPUTE GRANDTOT = YEAR-TOT(1) + YEAR-TOT(2) + YEAR-TOT(3). MOVE GRANDTOT TO GRAND. WRITE CLASS-REC FROM FOOT4 AFTER ADVANCING 1 LINE. 950-EXIT. EXIT.