Accumulating Running Totals



       IDENTIFICATION DIVISION.
       PROGRAM-ID.    RUNNING-TOTALS.
       AUTHOR.        BILL ROGERS.

       ENVIRONMENT DIVISION.
       INPUT-OUTPUT SECTION.
       FILE-CONTROL.
           SELECT INPUT-DATA
               ASSIGN TO 'A:\METER.TXT'
               ORGANIZATION IS LINE SEQUENTIAL.
           SELECT REPORT-FILE
               ASSIGN TO 'A:\REPORT.TXT'
               ORGANIZATION IS LINE SEQUENTIAL.
 
       DATA DIVISION.
       FILE SECTION.
       FD INPUT-DATA
          DATA RECORD IS INPUT-RECORD.
       01 INPUT-RECORD.
          02 INPUT-CUST-ID-NUMBER   PIC X(5).
          02 INPUT-CUST-NAME        PIC X(25).
          02 INPUT-KILOWATT-HOURS   PIC 9(4).
       FD REPORT-FILE
          DATA RECORD IS REPORT-LINE.
       01 REPORT-LINE PIC X(80).

       WORKING-STORAGE SECTION.
       01 NO-MORE-DATA-SWITCH       PIC X           VALUE SPACE.

       01 ENERGY-RATE               PIC V9(2)       VALUE .08.
       01 WS-ENERGY-CHARGE          PIC 9(4)V99.

       01 TOTAL-NUMBER-OF-RECORDS   PIC 9(4)        VALUE ZERO.
       01 TOTAL-KILOWATT-HOURS      PIC 9(8)        VALUE ZERO.
       01 TOTAL-ENERGY-CHARGE       PIC 9(8)V99     VALUE ZERO.

       01 HEADER-LINE.
          02 FILLER                 PIC X(10)       VALUE 'CUST#'.
          02 FILLER                 PIC X(28)       VALUE
             'CUSTOMER NAME'.
          02 FILLER                 PIC X(6)        VALUE
             'KW HRS'.
          02 FILLER                 PIC X(3)        VALUE SPACES.
          02 FILLER                 PIC X(10)       VALUE
             'AMT BILLED'.

       01 DETAIL-LINE.
          02 DETAIL-CUST-ID-NUMBER  PIC X(5).
          02 FILLER                 PIC X(5)       VALUE SPACES.
          02 DETAIL-CUST-NAME       PIC X(25).
          02 FILLER                 PIC X(5)        VALUE SPACES.
          02 DETAIL-KILOWATT-HOURS  PIC ZZZ9.
          02 FILLER                 PIC X(5)        VALUE SPACES.
          02 DETAIL-ENERGY-CHARGE   PIC Z,ZZ9.99.

       01 TOTAL-LINE.
          02 FILLER                 PIC X(10)       VALUE 'TOTALS->'.
          02 FILLER                 PIC X(11)       VALUE
             'CUSTOMERS: '.
          02 TL-NUMBER-OF-RECORDS   PIC ZZZ9.
          02 FILLER                 PIC X(13)       VALUE
             '   KW HOURS: '.
          02 TL-KILOWATT-HOURS      PIC ZZ,ZZZ,ZZ9.
          02 FILLER                 PIC X(18)       VALUE
             '   AMOUNT BILLED: '.
          02 TL-ENERGY-CHARGE       PIC ZZ,ZZZ,ZZ9.99.

       PROCEDURE DIVISION.
       MAIN-PARAGRAPH.
           PERFORM STARTUP-PARAGRAPH.
           PERFORM PRINT-HEADER.
           PERFORM PROCESS-RECORDS
               UNTIL NO-MORE-DATA-SWITCH = 'Y'.
           PERFORM TOTAL-ROUTINE.
           PERFORM CLEANUP-PARAGRAPH.
           STOP RUN.

       STARTUP-PARAGRAPH.
           OPEN INPUT INPUT-DATA.
           OPEN OUTPUT REPORT-FILE.
           READ INPUT-DATA
                AT END MOVE 'Y' TO NO-MORE-DATA-SWITCH.

       PROCESS-RECORDS.
           MOVE INPUT-CUST-ID-NUMBER TO DETAIL-CUST-ID-NUMBER.
           MOVE INPUT-CUST-NAME      TO DETAIL-CUST-NAME.
           MOVE INPUT-KILOWATT-HOURS TO DETAIL-KILOWATT-HOURS.
           COMPUTE WS-ENERGY-CHARGE ROUNDED =
                   ENERGY-RATE * INPUT-KILOWATT-HOURS.
           MOVE WS-ENERGY-CHARGE TO DETAIL-ENERGY-CHARGE.
           MOVE DETAIL-LINE TO REPORT-LINE.
           WRITE REPORT-LINE.
           ADD 1 TO TOTAL-NUMBER-OF-RECORDS.
           ADD WS-ENERGY-CHARGE TO TOTAL-ENERGY-CHARGE.
           ADD INPUT-KILOWATT-HOURS TO TOTAL-KILOWATT-HOURS.
           READ INPUT-DATA
                AT END MOVE 'Y' TO NO-MORE-DATA-SWITCH.

       PRINT-HEADER.
           MOVE HEADER-LINE TO REPORT-LINE.
           WRITE REPORT-LINE AFTER ADVANCING PAGE.
           MOVE SPACES TO REPORT-LINE.
           WRITE REPORT-LINE.

       TOTAL-ROUTINE.
           MOVE TOTAL-NUMBER-OF-RECORDS TO TL-NUMBER-OF-RECORDS.
           MOVE TOTAL-KILOWATT-HOURS    TO TL-KILOWATT-HOURS.
           MOVE TOTAL-ENERGY-CHARGE     TO TL-ENERGY-CHARGE.
           MOVE TOTAL-LINE TO REPORT-LINE.
           WRITE REPORT-LINE AFTER 2.

       CLEANUP-PARAGRAPH.
           CLOSE INPUT-DATA.
           CLOSE REPORT-FILE.

Click here to see this program with line numbers and explanatory comments.




Cobol Home