[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [open-cobol-list] PLEASE HELP new to coboL PROGRAMMING
From: |
John Culleton |
Subject: |
Re: [open-cobol-list] PLEASE HELP new to coboL PROGRAMMING |
Date: |
Mon, 20 Dec 2010 11:13:40 -0500 |
User-agent: |
KMail/1.11.4 (Linux/2.6.29.6-smp; KDE/4.2.4; i686; ; ) |
On Monday 20 December 2010 07:19:43 rathin wrote:
> IDENTIFICATION DIVISION.
(etc.)
The program is written in the older fixed format. It conforms to COBOL
85 apparently.
Only a few changes are needed.
Put seven spaces before IDENTIFICATION DIVISION.
You need to add a PROGRAM-ID. paragraph.
The LABEL RECORDS ARE STANDARD clause is obsolete and should be
eliminated.
The RECORD CONTAINS 80 CHARACTERS clause is obsolete and should be
eliminated.
Don.t forget to put a period at the end of the FD lines in each case.
With these few changes the program as you submitted it compiles
without error using
cobc -x cobsamp.cbl
The corrected program is listed below. Note that DIVISION, SECTION, FD
and 01 headers begin with seven spaces. Named paragraphs begin with
7 spaces. Other lines in your sample begin with 9 spaces, but should
really begin with 11 spaces to conform to the old fixed format.
--------------------------------------
IDENTIFICATION DIVISION.
PROGRAM-ID. SAMPLE.
ENVIRONMENT DIVISION.
CONFIGURATION SECTION.
INPUT-OUTPUT SECTION.
FILE-CONTROL.
SELECT TAX-TABLE-FILE ASSIGN TO "INPUT-FILE"
ORGANIZATION IS LINE SEQUENTIAL.
SELECT SALARY-FILE ASSIGN TO "INPUT-FILE"
ORGANIZATION IS LINE SEQUENTIAL.
SELECT SALARY-REPORT ASSIGN TO "OUTPUT-FILE"
ORGANIZATION IS LINE SEQUENTIAL.
DATA DIVISION.
FILE SECTION.
*
FD TAX-TABLE-FILE.
01 TAX-TABLE-REC.
05 T-MAX-TAX-INCOME PIC 9(06).
05 T-FED-TAX PIC V9(3).
05 T-STATE-TAX PIC V9(3).
05 PIC X(68).
FD SALARY-FILE.
01 SALARY-FILE-REC.
05 EMPLOYEE-NO PIC 9(05).
05 EMPLOYEE-NAME PIC X(20).
05 PIC X(03).
05 ANNUAL-SALARY PIC 9(05).
05 PIC X(08).
05 NO-DEPENDENTS PIC 9(01).
05 PIC X(38).
FD SALARY-REPORT.
01 SALARY-REPORT-REC PIC X(80).
*
WORKING-STORAGE SECTION.
01 WORKING-ITEMS.
05 MORE-RECS PIC X(01).
05 X1 PIC 9(02).
05 MORE-TABLE-RECS PIC X(01) VALUE 'Y'.
05 FED-TAX-DEDUCTION PIC 9(05).
05 STATE-TAX-DEDUCTION PIC 9(05).
05 MONTHLY-TAKE-HOME-PAY PIC 9(05)V9(02).
05 FOUND-MATCH PIC X(01) VALUE 'N'.
05 TEMP-INCOME PIC 9(06) VALUE ZEROES.
01 WS-DATE.
05 WS-DATE-YEAR PIC 9(02).
05 WS-DATE-MONTH PIC 9(02).
05 WS-DATE-DAY PIC 9(02).
01 WS-REPORT-DATE.
05 RD-MONTH PIC 9(02).
05 PIC X(01) VALUE '/'.
05 RD-DAY PIC 9(02).
05 PIC X(01) VALUE '/'.
05 RD-YEAR PIC 9(02).
01 TAX-TABLE.
05 TABLE-ENTRIES OCCURS 6 TIMES.
10 WS-MAX-TAX-INCOME PIC 9(06).
10 WS-FED-TAX PIC V9(3).
10 WS-STATE-TAX PIC V9(3).
01 HEADER-1.
05 PIC X(12).
05 PIC X(21) VALUE
'MONTHLY SALARY REPORT'.
05 PIC X(03).
05 DATE-OUT PIC 99/99/99.
05 PIC X(02).
* 05 PIC X(04) VALUE
* 'PAGE'.
* 05 PAGE-OUT PIC 9(02).
01 HEADER-2.
05 PIC X(08) VALUE
'EMPLOYEE'.
05 PIC X(19).
05 PIC X(17) VALUE
'MONTHLY TAKE HOME'.
01 HEADER-3.
05 PIC X(02).
05 PIC X(04) VALUE
'NAME'.
05 PIC X(28).
05 PIC X(03) VALUE
'PAY'.
01 LIST-LINE-1.
05 EMPLOYEE-NAME-OUT PIC X(20).
05 PIC X(11).
05 MONTHLY-TAKE-HOME-PAY-OUT PIC $ZZ,ZZZ.99.
01 LIST-LINE-2.
05 PIC X(05).
05 PIC X(35) VALUE
'NO MATCH WAS FOUND IN THE TAX TABLE'.
PROCEDURE DIVISION.
000-MAIN-RTN.
PERFORM 100-INITIALIZE-RTN
PERFORM 200-TABLE-ENTRY
PERFORM 300-PROCESS-RTN
UNTIL MORE-RECS = 'N'
PERFORM 900-CLOSE-FILES-RTN.
100-INITIALIZE-RTN.
OPEN INPUT TAX-TABLE-FILE
SALARY-FILE
OUTPUT SALARY-REPORT
MOVE 'Y' TO MORE-RECS
PERFORM 110-SET-DATE-RTN
PERFORM 120-WRITE-HEADERS-RTN.
110-SET-DATE-RTN.
ACCEPT WS-DATE FROM DATE
MOVE WS-DATE-YEAR TO RD-YEAR
MOVE WS-DATE-MONTH TO RD-MONTH
MOVE WS-DATE-DAY TO RD-DAY
MOVE WS-REPORT-DATE TO DATE-OUT.
120-WRITE-HEADERS-RTN.
WRITE SALARY-REPORT-REC FROM HEADER-1
AFTER ADVANCING 5 LINES
WRITE SALARY-REPORT-REC FROM HEADER-2
AFTER ADVANCING 2 LINES
WRITE SALARY-REPORT-REC FROM HEADER-3
AFTER ADVANCING 1 LINE.
200-TABLE-ENTRY.
PERFORM VARYING X1 FROM 1 BY 1
UNTIL X1 > 7 OR MORE-TABLE-RECS = 'N'
READ TAX-TABLE-FILE
AT END
MOVE 'N' TO MORE-TABLE-RECS
NOT AT END
PERFORM 250-TABLE-LOAD
END-READ
END-PERFORM
IF X1 < 7
DISPLAY 'TOO FEW RECORDS IN THE FILE'
END-IF
IF MORE-TABLE-RECS NOT = 'N'
DISPLAY 'TOO MANY RECORDS IN THE FILE'
END-IF.
250-TABLE-LOAD.
MOVE T-MAX-TAX-INCOME TO WS-MAX-TAX-INCOME (X1)
MOVE T-FED-TAX TO WS-FED-TAX (X1)
MOVE T-STATE-TAX TO WS-STATE-TAX (X1).
300-PROCESS-RTN.
READ SALARY-FILE
AT END
MOVE 'N' TO MORE-RECS
NOT AT END
PERFORM 350-COMPARE-RTN
END-READ.
350-COMPARE-RTN.
MOVE 1 TO X1
PERFORM 353-INCREMENT-SUBSCRIPT-RTN
UNTIL FOUND-MATCH = 'Y' OR X1 > 7
IF X1 > 7 AND FOUND-MATCH = 'N'
THEN WRITE SALARY-REPORT-REC FROM LIST-LINE-2
CONTINUE
END-IF
PERFORM 356-CALCULATE-RTN
PERFORM 359-WRITE-RTN
MOVE 'N' TO FOUND-MATCH
MOVE ZEROES TO TEMP-INCOME.
353-INCREMENT-SUBSCRIPT-RTN.
IF ANNUAL-SALARY > TEMP-INCOME AND <= WS-MAX-TAX-INCOME
(X1)
THEN MOVE 'Y' TO FOUND-MATCH
ELSE
MOVE WS-MAX-TAX-INCOME (X1) TO TEMP-INCOME
ADD 1 TO X1
END-IF.
356-CALCULATE-RTN.
COMPUTE FED-TAX-DEDUCTION =
ANNUAL-SALARY * WS-FED-TAX (X1)
COMPUTE STATE-TAX-DEDUCTION =
ANNUAL-SALARY * WS-STATE-TAX (X1)
COMPUTE MONTHLY-TAKE-HOME-PAY = (ANNUAL-SALARY -
(FED-TAX-DEDUCTION + STATE-TAX-DEDUCTION))/12.
359-WRITE-RTN.
MOVE EMPLOYEE-NAME TO EMPLOYEE-NAME-OUT
MOVE MONTHLY-TAKE-HOME-PAY TO MONTHLY-TAKE-HOME-PAY-OUT
WRITE SALARY-REPORT-REC FROM LIST-LINE-1
AFTER ADVANCING 1 LINE.
900-CLOSE-FILES-RTN.
CLOSE TAX-TABLE-FILE
SALARY-FILE
SALARY-REPORT
STOP RUN.
Of course the program will not run unless the two input files are
available.
To learn COBOL I recommend purchase of a good textbook, (in this case
the older the better) and of course study of the Open Cobol Manual
which is an excellent reference guide.
--
John Culleton,
typesetting and indexing http://wexfordpress.com
book sales http://wexfordpress.net
Free barcode: http://www.tux.org/~milgram/bookland/