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