Question:

Can I get help with COBOL arrays

by Guest4903  |  12 years, 8 month(s) ago

0 LIKES UnLike

I am writing a COBOL program that loads a tax table array and calculates a monthly take-home pay... I am getting a read error upon loading... the code looks like this.

       200-LOAD-TAX-TABLE.
           PERFORM VARYING X1 FROM 1 BY 1
               UNTIL X1 > 20
           READ TAX-TABLE-FILE <--------------- ERROR
           MOVE TAX-TABLE-REC TO TAX-ENTERIES (X1)
           END-PERFORM.

here is my entire code...

       IDENTIFICATION DIVISION.
       PROGRAM-ID. CHAPTER12.
       ENVIRONMENT DIVISION.
       FILE-CONTROL.
       SELECT TAX-TABLE-FILE
           ASSIGN TO 'CH1202.TAB'
               ORGANIZATION IS LINE SEQUENTIAL.
       SELECT SALARY-FILE
           ASSIGN TO 'Ch1202.DAT'
               ORGANIZATION IS LINE SEQUENTIAL.
       SELECT SALARY-REPORT
           ASSIGN TO 'SALARY.OUT'
               ORGANIZATION IS LINE SEQUENTIAL.
       DATA DIVISION.
       FILE SECTION.
       FD TAX-TABLE-FILE.
       01 TAX-TABLE-REC.
           05 I-MAX-TAX-INCOME             PIC 9(6).
           05 I-FEDERAL-TAX                PIC V999.
           05 I-STATE-TAX                  PIC V999.
       FD SALARY-FILE.
       01 SALARY-FILE-REC.
           05 EMPLOYEE-NO                  PIC X(5).
           05 EMPLOYEE-NAME                PIC X(20).
           05                              PIC X(4).
           05 ANNUAL-SALARY                PIC 9(3)V99.
           05                              PIC X(9).
           05 NO-OF-DEPENDENTS             PIC 99.
           05                              PIC X(34).
       FD SALARY-REPORT.
       01 SALARY-REPORT-REC                PIC X(80).
       WORKING-STORAGE SECTION.
       01 ARE-THERE-MORE-RECORDS           PIC X(3) VALUE 'YES'.
       01 TAX-TABLE.
           05 TAX-ENTERIES OCCURS 20 TIMES INDEXED BY X1.
               10 MAX-TAX-INCOME           PIC 9(6).
               10 FEDERAL-TAX              PIC V999.
               10 STATE-TAX                PIC V999.
       01 WS-DATE.
           05 WS-YEAR                      PIC 9999.
           05 WS-MONTH                     PIC 99.
           05 WS-DAY                       PIC 99.
      *01 WS-PAGE-CTR                      PIC 99 VALUE SPACES.
       01 STANDARD-DEDUCTION               PIC 99999V99.
       01 DEPENDENT-DEDUCTION              PIC 99999V99.
       01 FICA                             PIC 99999V99.
       01 TAXABLE-INCOME                   PIC 99999V99.
       01 ANNUAL-TAKE-HOME-PAY             PIC 99999V99.
       01 MAIN-HEADER.
           05                              PIC X(12) VALUE SPACES.
           05                              PIC X(21)
               VALUE 'MONTHLY SALARY REPORT'.
           05                              PIC X(3) VALUE SPACES.
           05 OUT-MONTH                    PIC 99.
           05                              PIC X VALUE '/'.
           05 OUT-DAY                      PIC 99.
           05                              PIC X VALUE '/'.
           05 OUT-YEAR                     PIC 9999.
           05                              PIC X(3) VALUE SPACES.
           05                              PIC X(4) VALUE 'PAGE'.
           05                              PIC X VALUE SPACES.
           05 PAGE-OUT                     PIC 99.
       01 HEADER-2.
           05                              PIC X(4) VALUE SPACES.
           05                              PIC X(8) VALUE
               'EMPLOYEE'.
           05                              PIC X(19) VALUE SPACES.
           05                              PIC X(17) VALUE
               'MONTHLY TAKE-HOME'.
       01 HEADER-3.
           05                              PIC X(6) VALUE SPACES.
           05                              PIC X(4) VALUE 'NAME'.
           05                              PIC X(28) VALUE SPACES.
           05                              PIC X(3) VALUE 'PAY'.
       01 DETAIL-LINE.
           05 EMPLOYEE-NAME-OUT            PIC X(20).
           05                              PIC X(11) VALUE SPACES.
           05 MONTHLY-TAKE-HOME-PAY        PIC $ZZ,ZZZ.99.
       PROCEDURE DIVISION.
       100-MAIN-MODULE.
           OPEN INPUT TAX-TABLE-FILE
                      SALARY-FILE
                OUTPUT SALARY-REPORT
           MOVE FUNCTION CURRENT-DATE TO WS-DATE
               MOVE WS-YEAR TO OUT-YEAR
               MOVE WS-MONTH TO OUT-MONTH
               MOVE WS-DAY TO OUT-DAY
           PERFORM 200-LOAD-TAX-TABLE
           PERFORM UNTIL ARE-THERE-MORE-RECORDS = 'NO '
               READ SALARY-FILE
                   AT END
                       MOVE 'NO ' TO ARE-THERE-MORE-RECORDS
                   NOT AT END
                       PERFORM 300-CALC-RTN
               END-READ
           END-PERFORM
           CLOSE TAX-TABLE-FILE
                 SALARY-FILE
                 SALARY-REPORT
           STOP RUN.
       200-LOAD-TAX-TABLE.
           PERFORM VARYING X1 FROM 1 BY 1
               UNTIL X1 > 20
           READ TAX-TABLE-FILE
           MOVE TAX-TABLE-REC TO TAX-ENTERIES (X1)
           END-PERFORM.
       300-CALC-RTN.
           IF ANNUAL-SALARY < 10000
               COMPUTE STANDARD-DEDUCTION = ANNUAL-SALARY * 1.1
           END-IF
           COMPUTE DEPENDENT-DEDUCTION = 2000 * NO-OF-DEPENDENTS
           IF ANNUAL-SALARY < 84900
               COMPUTE FICA = 1.62 * ANNUAL-SALARY
           END-IF
           COMPUTE FICA = 1.145 * ANNUAL-SALARY
           COMPUTE TAXABLE-INCOME = ANNUAL-SALARY - STANDARD-DEDUCTION -
           DEPENDENT-DEDUCTION
           SET X1 TO 1
           SEARCH TAX-ENTERIES
               WHEN TAXABLE-INCOME = MAX-TAX-INCOME(X1)
                   COMPUTE ANNUAL-TAKE-HOME-PAY = ANNUAL-SALARY -
                  (STATE-TAX (X1)
                  * TAXABLE-INCOME) - (FEDERAL-TAX (X1) * TAXABLE-
      -            INCOME) - FICA
           END-SEARCH
           COMPUTE MONTHLY-TAKE-HOME-PAY = ANNUAL-TAKE-HOME-PAY / 12
           WRITE SALARY-REPORT-REC FROM MAIN-HEADER
           WRITE SALARY-REPORT-REC FROM HEADER-2
           WRITE SALARY-REPORT-REC FROM HEADER-3
           MOVE EMPLOYEE-NAME TO EMPLOYEE-NAME-OUT
           WRITE SALARY-REPORT-REC FROM DETAIL-LINE.

 Tags: arrays, cobol, Help

   Report

1 ANSWERS

  1. Guest6630
    There are some very obvious errors in this program.  Are you an experienced COBOL programmer?

    In the following code the second perform should not be there.

    PERFORM 200-LOAD-TAX-TABLE
    PERFORM UNTIL ARE-THERE-MORE-RECORDS = 'NO '

    In the 200 routine, the setting of the index needs to be done outside of the routine, else it will take place withoout the check for end of records.  In other words, use the varying code in the perform that performs 200.

    PERFORM VARYING X1 FROM 1 BY 1
    UNTIL X1 > 20

Sign In or Sign Up now to answser this question!

Question Stats

Latest activity: 14 years, 4 month(s) ago.
This question has 1 answers.

BECOME A GUIDE

Share your knowledge and help people by answering questions.
Unanswered Questions