Question:

Can I get help with COBOL arrays

by Guest14299314  |  2 years, 5 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. Guest14381940
    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

Question Stats

Latest activity: 2 years, 5 month(s) ago.
This question has been viewed 580 times and has 1 answers.

2 People are following this question

erikdalessioBGett

BECOME A GUIDE

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