gnucobol-users
[Top][All Lists]
Advanced

[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/



reply via email to

[Prev in Thread] Current Thread [Next in Thread]