COBOL is the most common and widely used in payroll and inventory system. It is a business oriented programming. COBOL stands for- Common Object Business oriented Language.COBOL Runs in IBM as/400 mid range, RS/6000, DEC Alpha or even personal computer can be used. COBOL used in Net express mainframe also used in micro focus, net express for micro computer.
COBOL OVERVIEW
COBOL Programming divided in to several division, these are:
Identification Division
Identification division using for Identify the Program Name, Author Name and Date written and compiled. Example of Identification division:
IDENTIFICATION DIVISION.
PROGRAM-ID. PROBLEM1B.
*AUTHOR.
Environment Division
Environment division is for configuration of input and output file. Assign to .DAT(data file) file for the process
and select a .doc file as an output file. .dat file is a file with Raw Data and machine readable without process we can't read the file and .doc file is after processing the program created an output and generated report .Doc file. Example of Environment Division:
ENVIRONMENT DIVISION.
INPUT-OUTPUT SECTION.
FILE-CONTROL.
SELECT INVENTORY-INPUT-FILE
ASSIGN TO 'INVENTORY2.DAT'
ORGANIZATION IS LINE SEQUENTIAL.
SELECT INVENTORY-OUTPUT-FILE
ASSIGN TO 'PROBLEM1B.DOC'
ORGANIZATION IS LINE SEQUENTIAL.
This is a sample of .dat file I used in this program. we can open a .dat file with Notepad:
Data Division
Data division is most the important part of COBOL Programming. Because, in Data division determined File Division(FD) and Working
Storage which is all the variables created where all the record read from the data file and store in these variables. Also, It determined how to print detail line in output file. Here is an example of data division:
DATA DIVISION.
FILE SECTION.
FD INVENTORY-INPUT-FILE.
01 PIC X(80).
FD INVENTORY-OUTPUT-FILE.
01 PRINT-LINE PIC X(133).
WORKING-STORAGE SECTION.
01 WORKING-VARIABLES.
05 EOF-INVENTORY-DATA-WS PIC X(3) VALUE 'NO'.
05 ACCUMULATE-GRAND-DOLLARS-WS PIC S9(8)V99 VALUE ZERO.
05 ACCUMULATE-GRAND-COUNT-WS PIC 999 VALUE ZERO.
05 LINE-COUNT-PER-PAGE-WS PIC 99 VALUE ZERO.
****************************************************************
05 HOLD-DATE-WS.
10 HOLD-YR-WS PIC XXXX.
10 HOLD-MO-WS PIC XX.
10 HOLD-DY-WS PIC XX.
****************************************************************
*THE INPUT FIELDS ARE SPECIFIED BELOW
*NOTE THAT THE DOL-AMOUNT-IN FIELD IS NOT EDITED
****************************************************************
01 INVENTORY-INPUT-RECORD.
05 RECORD-TYPE-IN PIC X.
05 BATCH-NUMBER-IN PIC XX.
05 SUPPLIER-NUMBER-IN PIC X(5).
05 VOUCHER-NUMBER-IN PIC XXXXXX.
05 INVOICE-NUMBER-IN PIC X(8).
05 ACCOUNT-NUMBER-IN PIC X(4).
05 STORE-NUMBER-IN PIC X(3).
05 AMOUNT-IN PIC S9(6)V99.
05 FILLER PIC X(12).
05 DATE-IN PIC X(8).
05 SUPPLIER-NAME-IN PIC X(23).
****************************************************************
*THE INDIVIDUAL FIELDS TO BE PRINTED ON EACH LINE ARE SPECIFIED
*BELOW. NOTE THAT THE DOL-AMOUNT-OUT FIELD IS EDITED.
****************************************************************
01 DETAIL-LINE.
05 FILLER PIC X(2) VALUE SPACE.
05 RECORD-TYPE-OUT PIC X.
05 FILLER PIC X(7) VALUE SPACE.
05 BATCH-NUMBER-OUT PIC XX.
05 PIC X(8) VALUE SPACE.
05 SUPPLIER-NUMBER-OUT PIC X(5).
05 FILLER PIC X(6) VALUE SPACE.
05 VOUCHER-NUMBER-OUT PIC X(6).
05 PIC X(6) VALUE SPACE.
05 INVOICE-NUMBER-OUT PIC X(8).
05 FILLER PIC X(6) VALUE SPACE.
05 STORE-NUMBER-OUT PIC X(3).
05 PIC X(4) VALUE SPACE.
05 AMOUNT-OUT PIC $$,$$$,$$9.99BCR.
05 PIC X(5) VALUE SPACE.
05 ACCOUNT-NUMBER-OUT PIC X(4).
05 FILLER PIC X(6) VALUE SPACE.
05 DATE-OUT PIC XX/XX/XXXX.
05 PIC X(6) VALUE SPACE.
05 SUPPLIER-NAME-OUT PIC X(23).
01 REPORT-HEADER.
05 PIC X VALUE SPACES.
05 PIC X(10) VALUE 'RUN DATE: '.
05 REPORT-HEADER-DATE-OUT.
10 HEADER-MO-OUT PIC 99.
10 PIC X VALUE '/'.
10 HEADER-DY-OUT PIC 99.
10 PIC X VALUE '/'.
10 HEADER-YR-OUT PIC 9999.
**************************************************************
05 PIC X(4) VALUE SPACES.
05 PIC X(45) VALUE
'INVENTORY REPORT FOR KAMRUN NAHAR.'.
*********************************************************
01 COLUMN-HEADER1.
05 PIC X(6) VALUE 'RECORD'.
05 PIC X(4) VALUE SPACE.
05 PIC X(5) VALUE 'BATCH'.
05 PIC X(4) VALUE SPACE.
05 PIC X(8) VALUE 'SUPPLIER'.
05 PIC X(3) VALUE SPACE.
05 PIC X(7) VALUE 'VOUCHER'.
05 PIC X(5) VALUE SPACE.
05 PIC X(7) VALUE 'INVOICE'.
05 PIC X(6) VALUE SPACE.
05 PIC X(5) VALUE 'STORE'.
05 PIC X(10) VALUE SPACE.
05 PIC X(6) VALUE 'DOLLAR'.
05 PIC X(8) VALUE SPACE.
05 PIC X(7) VALUE 'ACCOUNT'.
05 PIC X(6) VALUE SPACE.
05 PIC X(11) VALUE 'TRANSACTION'.
05 PIC X(10) VALUE SPACE.
05 PIC X(8) VALUE 'SUPPLIER'.
01 COLUMN-HEADER2.
05 PIC X(4) VALUE 'TYPE'.
05 PIC X(5) VALUE SPACES.
05 PIC X(6) VALUE 'NUMBER'.
05 PIC X(4) VALUE SPACES.
05 PIC X(6) VALUE 'NUMBER'.
05 PIC X(5) VALUE SPACES.
05 PIC X(6) VALUE 'NUMBER'.
05 PIC X(6) VALUE SPACES.
05 PIC X(6) VALUE 'NUMBER'.
05 PIC X(7) VALUE SPACES.
05 PIC X(6) VALUE 'NUMBER'.
05 PIC X(9) VALUE SPACES.
05 PIC X(6) VALUE 'AMOUNT'.
05 PIC X(9) VALUE SPACES.
05 PIC X(6) VALUE 'NUMBER'.
05 PIC X(8) VALUE SPACES.
05 PIC X(4) VALUE 'DATE'.
05 PIC X(18) VALUE SPACES.
05 PIC X(4) VALUE 'NAME'.
01 TOTAL-LINE-1.
05 FILLER PIC X.
05 PIC X(5) VALUE SPACE.
05 PIC X(30) VALUE
'TOTAL COUNT OF ALL RECORDS IS:'.
05 PIC XX VALUE SPACE.
05 GRAND-RECORD-COUNT-OUT PIC ZZZ9.
01 TOTAL-LINE-2.
05 FILLER PIC X.
05 PIC X(5) VALUE SPACE.
05 PIC X(33) VALUE
'TOTAL DOLLARS FOR ALL RECORDS IS:'.
05 PIC X(5) VALUE SPACE.
05 GRAND-TOT-DOL-AMT-OUT PIC $$$$,$$$,$$9.99BCR.
05 PIC X(50) VALUE SPACE.
Procedure Division
Procedure Division is a set of direction to access the source file and give the output accordingly. This division
has different block of code and Modules. Each modules have different unique Number. Module start with a numeric
Prefix and begin with a verb statement Such as: Open, Read, Write, Perform, Close and Stop etc. Here is an example
of procedure division of this Program(PROBLEM1B):
PROCEDURE DIVISION.
****************************************************************
*THE 100-MAINLINE SETS THE SEQUENCE OF THE PROCESSING
****************************************************************
100-MAINLINE.
PERFORM 200-OPEN
****************************************************************
*THE 'PERFORM 300-PROCESS UNTIL' COMMAND SETS UP A REPEATING LOOP
****************************************************************
PERFORM 300-PROCESS UNTIL EOF-INVENTORY-DATA-WS = 'YES'
PERFORM 900-CLOSE
STOP RUN.
****************************************************************
*THE 200-OPEN OPENS THE FILES FOR PROCESSING
*AND READS THE FIRST RECORD [ONLY THE FIRST RECORD OF THE FILE]
****************************************************************
200-OPEN.
OPEN INPUT INVENTORY-INPUT-FILE OUTPUT INVENTORY-OUTPUT-FILE
PERFORM 250-READ-RECORD.
****************************************************************
MOVE FUNCTION CURRENT-DATE TO HOLD-DATE-WS
MOVE HOLD-MO-WS TO HEADER-MO-OUT
MOVE HOLD-DY-WS TO HEADER-DY-OUT
MOVE HOLD-YR-WS TO HEADER-YR-OUT
****************************************************************
*THE READ MODULE IS USED WHENEVER A RECORD IS NEEDED FOR
*PROCESSING FROM THE INPUT FILE. ONE RECORD IS RETURNED FOR
*PROCESSING AFTER EACH READ. ONCE ALL RECORDS HAVE BE RETURNED
*(READ) THE SYSTEM SETS THE 'AT END' CONDITION WHICH RESULTS IN
*'YES' BEING MOVED TO THE EOF-VENDOR-DATA-WS SWITCH OR FLAG.
****************************************************************
PERFORM 500-HEADER.
250-READ-RECORD.
READ INVENTORY-INPUT-FILE INTO INVENTORY-INPUT-RECORD
AT END MOVE 'YES' TO EOF-INVENTORY-DATA-WS
END-READ.
****************************************************************
*300-PROCESS IS THE SECTION THAT IS PERFORMED REPEATEDLY
*FROM THE 100-MAINLINE. IT PERFORMS A BLOCK OF CODE MOVING DATA
*TO THE DETAIL LINE FOR PRINTING. IT THEN PERFORMS THE CODE
*THAT READS THE NEXT RECORD FOR PROCESSING. IT CONTINUES TO DO
*THIS UNTIL AN END OF FILE STATUS (NO MORE DATA) IS RETURNED.
*AT THIS POINT THE END OF DATA FLAG IS SET WHICH CAUSES THE
*300-PROCESS SECTION TO END.
****************************************************************
300-PROCESS.
MOVE DATE-IN TO DATE-OUT
MOVE RECORD-TYPE-IN TO RECORD-TYPE-OUT
MOVE AMOUNT-IN TO AMOUNT-OUT
MOVE BATCH-NUMBER-IN TO BATCH-NUMBER-OUT
MOVE SUPPLIER-NUMBER-IN TO SUPPLIER-NUMBER-OUT
MOVE SUPPLIER-NAME-IN TO SUPPLIER-Name-OUT
MOVE VOUCHER-NUMBER-IN TO VOUCHER-NUMBER-OUT
MOVE INVOICE-NUMBER-IN TO INVOICE-NUMBER-OUT
MOVE ACCOUNT-NUMBER-IN TO ACCOUNT-NUMBER-OUT
MOVE STORE-NUMBER-IN TO STORE-NUMBER-OUT
ADD 1 TO ACCUMULATE-GRAND-COUNT-WS
ADD AMOUNT-IN TO ACCUMULATE-GRAND-DOLLARS-WS
WRITE PRINT-LINE FROM DETAIL-LINE AFTER 1
MOVE SPACES TO PRINT-LINE
WRITE PRINT-LINE AFTER 1 LINE.
**************************************************************
ADD 1 TO LINE-COUNT-PER-PAGE-WS
IF LINE-COUNT-PER-PAGE-WS >= 15
THEN PERFORM 500-HEADER
END-IF
****************************************************************
PERFORM 250-READ-RECORD.
****************************************************************
500-HEADER.
WRITE PRINT-LINE FROM REPORT-HEADER AFTER PAGE
WRITE PRINT-LINE FROM COLUMN-HEADER1 AFTER 2 LINES
WRITE PRINT-LINE FROM COLUMN-HEADER2 AFTER 1 LINE
MOVE SPACES TO PRINT-LINE
WRITE PRINT-LINE AFTER 3 LINES
MOVE 0 TO LINE-COUNT-PER-PAGE-WS.
****************************************************************
*900-CLOSE PRINTS THE 2 TOTALS
*AND CLOSES THE INPUT AND OUTPUT FILES
****************************************************************
900-CLOSE.
WRITE PRINT-LINE FROM REPORT-HEADER AFTER PAGE
MOVE ACCUMULATE-GRAND-COUNT-WS TO GRAND-RECORD-COUNT-OUT
WRITE PRINT-LINE FROM TOTAL-LINE-1 AFTER 3 LINES
MOVE ACCUMULATE-GRAND-DOLLARS-WS TO GRAND-TOT-DOL-AMT-OUT
WRITE PRINT-LINE FROM TOTAL-LINE-2 AFTER 1 LINE
CLOSE INVENTORY-INPUT-FILE INVENTORY-OUTPUT-FILE.
Please Click Here to see How to compile and run the program
Generating Report in IBM Mainframe Express is little difference than the Net express Please
Click Here to see How I follow the steps to generate reports in Mainframe Express 3.0