IDENTIFICATION DIVISION.
PROGRAM-ID. INFLATION-REPORT.
AUTHOR. JONAS WIK.
DATE-WRITTEN. 03/27/2000.
DATE-COMPILED.
***************************************************************
**
** DESCRIPTION:
**
** THIS PROGRAM READS A RECORD AND PRINTS A LIST WITH THE
** ACCUMULATED INFLATION FOR 10 YEARS.
**
** INPUT:
** INFLAT-FILE INPUT FILE
** INFLAT-ITEMNO 5 CHARACTERS
** INFLAT-DESCR 20 CHARACTERS
** INFLAT-ITEM-COST 5 DIGITS 999V99
**
** OUTPUT:
** INFLAT-LIST OUTPUT FILE
** FIELD PRINTS IN COLS.
** YEARCOUNT 38-39
** INFLATION 53-54
** COST-W-INFL 74-80
**
** PROGRAM DUE: MARCH 3 2000
**
***************************************************************
ENVIRONMENT DIVISION.
INPUT-OUTPUT SECTION.
**
FILE-CONTROL.
SELECT INFLAT-FILE ASSIGN TO 'J:/COBOL/INFLAT.DAT'
ORGANIZATION IS LINE SEQUENTIAL.
SELECT INFLAT-LIST ASSIGN TO PRINTER.
**
DATA DIVISION.
**
FILE SECTION.
**
FD INFLAT-FILE
LABEL RECORD ARE STANDARD
RECORDING IS F
RECORD CONTAINS 30 CHARACTERS.
01 INFLAT-FILE-REC.
05 INFLAT-ITEMNO PIC X(5).
05 INFLAT-DESCR PIC X(20).
05 INFLAT-ITEM-COST PIC 999V99.
**
FD INFLAT-LIST
LABEL RECORDS ARE OMITTED
RECORD CONTAINS 130 CHARACTERS.
01 INFLAT-LIST-REC PIC X(130).
**
WORKING-STORAGE SECTION.
**
01 WV-VARIABLES.
05 WV-COST-W-INFL PIC 9999V99 VALUE 0.
05 PERCENT PIC 9V99 VALUE 1.
**
01 WS-COUNTS.
**
05 WC-YEARCOUNT PIC 99
VALUE 1.
05 WC-PAGECOUNT PIC 9999
VALUE 1.
05 WC-LINECOUNT PIC 99
VALUE ZERO.
88 WC-EOP VALUE 10.
**
01 WS-DATE.
**
05 WD-YEAR PIC 9999.
05 WD-MONTH PIC 99.
05 WD-DAY PIC 99.
05 PIC X(13).
**
01 WS-SWITCH.
**
08 WS-EOF PIC XXX VALUE 'NO '.
88 WS-EOF-YES VALUE 'YES'.
**
01 INFLAT-LIST-HEADING-1.
05 PIC X(17)
VALUE 'AUTHOR: JONAS WIK'.
05 FILLER PIC X(30)
VALUE SPACES.
05 PIC X(31)
VALUE 'I N F L A T I O N R E P O R T'.
05 FILLER PIC X(18)
VALUE SPACES.
05 HEADING-MONTH PIC Z9.
05 PIC X
VALUE '/'.
05 HEADING-DAY PIC Z9.
05 PIC X
VALUE '/'.
05 HEADING-YEAR PIC 9999.
05 FILLER PIC X(15)
VALUE SPACES.
05 PIC X(5)
VALUE 'PAGE '.
05 HEADING-PAGE PIC ZZ99.
**
01 INFLAT-LIST-HEADING-2.
05 FILLER PIC XXX VALUE SPACES.
05 PIC X(13)
VALUE 'ITEM NUMBER: '.
05 ITEMNO PIC X(5).
05 FILLER PIC X(108) VALUE SPACES.
01 INFLAT-LIST-HEADING-3.
05 FILLER PIC XXX VALUE SPACES.
05 PIC X(19)
VALUE 'ITEM DESCRIPTION: '.
05 DESCR PIC X(20).
05 FILLER PIC X(97) VALUE SPACES.
01 INFLAT-LIST-HEADING-4.
05 FILLER PIC XXX VALUE SPACES.
05 PIC X(12)
VALUE 'ITEM COST: '.
05 ITEM-COST PIC $$$$.99.
05 FILLER PIC X(108) VALUE SPACE.
01 INFLAT-LIST-HEADING-5.
05 FILLER PIC X(36) VALUE SPACES.
05 PIC X(4)
VALUE 'YEAR'.
05 FILLER PIC X(5) VALUE SPACES.
05 PIC X(14)
VALUE 'INFLATION RATE'.
05 FILLER PIC X(5) VALUE SPACES.
05 PIC X(24)
VALUE 'PRICE WITH INFLATION'.
05 FILLER PIC X(42) VALUE SPACES.
01 PRICE-LIST-DETAIL.
05 FILLER PIC X(37) VALUE SPACES.
05 YEARCOUNT PIC Z9.
05 FILLER PIC X(11) VALUE SPACES.
05 RATE PIC 99.
05 PIC X VALUE '%'.
05 FILLER PIC X(19) VALUE SPACES.
05 COST-W-INFL PIC $$$$$.99.
05 FILLER PIC X(50) VALUE SPACES.
**
PROCEDURE DIVISION.
***************************************************************
**
** THIS IS THE MAIN MODULE WHICH EXECUTES 110-INITIALIZE
** PARAGRAPH AND THE 200-COMPUTE PARAGRAPH
**
***************************************************************
100-MAIN.
**
PERFORM 110-INITIALIZE THRU 110-EXIT.
PERFORM 200-COMPUTE THRU 200-EXIT
UNTIL WS-EOF-YES.
STOP RUN.
**
***************************************************************
**
** 110-INITIALIZE OPENS FILES AND CALLS
** PARAGRAPHS 800-READ-INFLAT-FILE, 300-DATE-MOVE
** 900-WRITE-HEAD
**
***************************************************************
110-INITIALIZE.
**
OPEN INPUT INFLAT-FILE.
OPEN OUTPUT INFLAT-LIST.
PERFORM 800-READ-INFLAT-FILE THRU 800-EXIT.
PERFORM 300-DATE-MOVE THRU 300-EXIT.
PERFORM 900-WRITE-HEAD THRU 900-EXIT.
**
110-EXIT.
EXIT.
***************************************************************
**
** THIS PARAGRAFH COMPUTES THE INFLATION BY MULTIPLYING THE
** INFLAT-ITEM-COST BY 1.08 UNTIL THE YEARCOUNT = 5
** AND BY 1.06 WHEN THE YEARCOUNT IS 5-10.
** IF END OF PAGE IS REACHED, THE PARAGRAPH READS A NEW RECORD
** AND IF EOF NOT OCCURS 900-WRITE-HEAD IS CALLED AND THE
** DETAIL IS PRINTED.
** 1 IS ADDED TO LINECOUNT
** 1 IS ADDED TO YEARCOUNT
** THE ITEM-COST IS ALSO MOVED FROM THE INPUT FILE TO THE
** VARIABLE WV-COST-W-INFL
**
***************************************************************
200-COMPUTE.
**
IF WC-EOP
PERFORM 800-READ-INFLAT-FILE THRU 800-EXIT
IF NOT WS-EOF-YES
PERFORM 900-WRITE-HEAD
END-IF
END-IF.
IF WC-YEARCOUNT < 6
MOVE 08 TO PERCENT
COMPUTE WV-COST-W-INFL ROUNDED =
1.08**WC-YEARCOUNT * INFLAT-ITEM-COST
ELSE
IF WC-YEARCOUNT < 11
MOVE 06 TO PERCENT
COMPUTE WV-COST-W-INFL ROUNDED =
(1.06 * WV-COST-W-INFL)
ELSE
MOVE 1 TO WC-YEARCOUNT
MOVE 08 TO PERCENT
MOVE INFLAT-ITEM-COST TO WV-COST-W-INFL
END-IF.
IF NOT WS-EOF-YES
PERFORM 910-WRITE-DETAIL THRU 910-EXIT
ADD 1 TO WC-LINECOUNT
ADD 1 TO WC-YEARCOUNT
END-IF.
**
200-EXIT.
EXIT.
**
***************************************************************
**
** THIS PARAGRAPH MOVES THE DATE GIVEN BY THE COMPUTER TO THE
** HEADING.
**
***************************************************************
300-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.
**
300-EXIT.
EXIT.
**
***************************************************************
**
** THIS PARAGRAPH READS THE INPUT FILE.
**
***************************************************************
800-READ-INFLAT-FILE.
**
READ INFLAT-FILE
AT END MOVE 'YES' TO WS-EOF.
**
800-EXIT.
EXIT.
**
***************************************************************
**
** THIS PARAGRAPH ADDS 1 TO PAGENUMBER AND WRITES OUT THE
** HEADINGS, AND INITIALIZES THE LINECOUNT TO 0 AGAIN.
** IT ALSO MOVES THE INFLAT-ITEM-COST, INFLAT-ITEMNO AND
** INFLAT-DESCR TO THE HEADERS.
**
***************************************************************
900-WRITE-HEAD.
**
MOVE WC-PAGECOUNT TO HEADING-PAGE.
MOVE INFLAT-ITEM-COST TO ITEM-COST.
MOVE INFLAT-ITEMNO TO ITEMNO.
MOVE INFLAT-DESCR TO DESCR.
ADD 1 TO WC-PAGECOUNT.
MOVE SPACES TO INFLAT-LIST-REC.
WRITE INFLAT-LIST-REC
AFTER ADVANCING PAGE.
WRITE INFLAT-LIST-REC FROM INFLAT-LIST-HEADING-1
AFTER ADVANCING 5 LINES.
WRITE INFLAT-LIST-REC FROM INFLAT-LIST-HEADING-2
AFTER ADVANCING 2 LINES.
WRITE INFLAT-LIST-REC FROM INFLAT-LIST-HEADING-3
AFTER ADVANCING 1 LINE.
WRITE INFLAT-LIST-REC FROM INFLAT-LIST-HEADING-4
AFTER ADVANCING 1 LINE.
WRITE INFLAT-LIST-REC FROM INFLAT-LIST-HEADING-5
AFTER ADVANCING 2 LINES.
INITIALIZE WC-LINECOUNT.
**
900-EXIT.
EXIT.
**
***************************************************************
**
** THIS PARAGRAPH CALLS 940-MOVE-DETAIL AND THEN
** WRITES IT OUT SINGLESPACED.
**
***************************************************************
910-WRITE-DETAIL.
**
PERFORM 940-MOVE-DETAIL THRU 940-EXIT.
WRITE INFLAT-LIST-REC FROM PRICE-LIST-DETAIL
AFTER ADVANCING 1 LINES.
**
910-EXIT.
EXIT.
**
***************************************************************
**
** THIS PARAGRAPH MOVES THE DETAIL FROM THE FILE AND
** CALCULATIONS TO THE DETAIL LINE.
** IF THE YEARCOUNT IS 1 IT COMPUTES THE WV-COST-W-INFL
** AND MOVES IT TO THE DETAIL LINE.
**
***************************************************************
940-MOVE-DETAIL.
**
MOVE WC-YEARCOUNT TO YEARCOUNT.
MOVE PERCENT TO RATE.
IF WC-YEARCOUNT = 1
COMPUTE WV-COST-W-INFL ROUNDED =
(WV-COST-W-INFL * 1.08)
MOVE WV-COST-W-INFL TO COST-W-INFL
ELSE
MOVE WV-COST-W-INFL TO COST-W-INFL
END-IF.
**
940-EXIT.
EXIT.