COBOL Batch Program Example

COBOL Batch program(example) is a cobol program that runs in a bath mode. Unlike the Online programs, batch programs runs in background. To execute any Batch program a JOB written in JCL(Job Control Language) is required. This JOB is also used to specify any files that are used in that program. Generally Batch programs are developed perform any particular functionality which needs to be run in a specific time frequency say Daily, weekly, monthly etc. To run a program in a specific frequency, there is no specific coding is needed and a JOB scheduling tool takes care of this. There are several scheduling tools available in the market like CA7, Zeke, ESP etc.

Below is the sample Batch COBOL program that reads a flat input file and generates an output file. Input file is a customer file which contains CUSTOMER details like Number, Name and Transaction type etc. Output should contain Number and Name for the Credit type of transactions and also the Counts need to be displayed.

 

----+----1----+----2----+----3----+----4----+----5----+----6----+----7--
000100 IDENTIFICATION DIVISION. 
000200 PROGRAM-ID. CUSTR001. 
000300***************************************************************** 
000400* C R E A T E REPORT FILES * 
000500***************************************************************** 
000600* DATE INITIAL PRJID# DESCRIPTION 
000700*-------- ------- ------ --------------------------------------- 
000800*07/21/19 MAHY PR123 INITIAL VERSION. 
012900*****************************************************************
013000 ENVIRONMENT DIVISION. 
013100 CONFIGURATION SECTION. 
013200 SOURCE-COMPUTER. IBM-3090. 
013300 OBJECT-COMPUTER. IBM-3090. 
013400* 
013500 INPUT-OUTPUT SECTION. 
013600* 
013600* In this section all the input and output files are assigned
013600* with a Physical name. COBOL file name is assigned to a 
013600* JCL DD Name.
013600* 
013700 FILE-CONTROL. 
013800*****************************************************************
013900*** CONTROL AREA FOR INPUT
014000*****************************************************************
014100 SELECT CUST-IN-FILE ASSIGN TO CUSTIN 
014300 ORGANIZATION IS SEQUENTIAL 
014400 ACCESS MODE IS SEQUENTIAL 
014500 FILE STATUS IS WW-STATUS. 
013800*****************************************************************
013900*** CONTROL AREA FOR OUTPUT 
014000*****************************************************************
014100 SELECT CUST-OUT-RPT ASSIGN TO CUSTOUT 
014300 ORGANIZATION IS SEQUENTIAL 
014400 ACCESS MODE IS SEQUENTIAL 
014500 FILE STATUS IS WW-STATUS. 
014500*
019700 DATA DIVISION. 
019701* FILE SECTION GIVES THE RECORD LAYOUT AND OTHER FILE DESCRIPTION
019900 FILE SECTION. 
020000***************************************************************** 
020100*** DESCRIPTION FOR INPUT FILE 
020200***************************************************************** 
020300 FD CUST-IN-FILE 
020400 BLOCK CONTAINS 0 RECORDS 
020500 RECORD CONTAINS 120 CHARACTERS 
020600 LABEL RECORDS ARE OMITTED 
020700 RECORDING MODE F 
020800 DATA RECORD IS WW-CUST-IN-RECORD. 
020900 
021000 01 WW-CUST-IN-RECORD PIC X(120). 
020000***************************************************************** 
020100*** DESCRIPTION FOR OUTPUT
020200***************************************************************** 
020300 FD CUST-OUT-RPT 
020400 BLOCK CONTAINS 0 RECORDS 
020500 RECORD CONTAINS 40 CHARACTERS 
020600 LABEL RECORDS ARE OMITTED 
020700 RECORDING MODE F 
020800 DATA RECORD IS WW-CUST-OUT-RECORD. 
020900 
021000 01 WW-CUST-OUT-RECORD PIC X(40) . 
021100 05 WW-CUSTO-NUM PIC X(10). 
021200 05 WW-CUSTO-NAME PIC X(30). 
045700*
026900* 
027000 WORKING-STORAGE SECTION. 
027100* 
045700 01 WA-IN-REC-CNT PIC 9(06) VALUE ZERO. 
045700 01 WA-CR-REC-CNT PIC 9(06) VALUE ZERO. 
045700 01 WA-DB-REC-CNT PIC 9(06) VALUE ZERO. 
045700 01 WD-DATE-TIME.
021100    05 WD-CURRENT-DATE PIC X(06). 
021100    05 WD-CURRENT-TIME PIC X(08). 
021101 01 WS-STATUS PIC X(02).
021101 88 SUCCESS VALUE '00'.
021101 88 EOF     VALUE '10'.
027100* 
027100*CUSTOMER INPUT RECORD LAYOUT.
027100*
021000 01 WW-CUST-IN-LAYOUT. 
021100    05 WW-CUST-NUM PIC X(10). 
021200    05 WW-CUST-NAME PIC X(30). 
021200    05 WW-CUST-TRAN-DTLS.
021200    05 WW-CUST-TRAN-TYPE PIC X(02).
021200       88 DEBIT-TRANS VALUE 'DB'.
021200       88 CREDIT-TRANS VALUE 'CR'.
021200       07 WW-CUST-OTHR-DTLS PIC X(48). 
021200    05 FILLER PIC X(30). 
027100*
027100*CUSTOMER REPORT LAYOUT.
027100*
021000 01 WW-CUST-OUT-LAYOUT. 
021100    05 WW-CUSTO-NUM PIC X(10). 
021200    05 WW-CUSTO-NAME PIC X(30). 
075900* 
076000 PROCEDURE DIVISION. 
076100******************************************************************
076200 A0100-MAIN-LINE. 
076300******************************************************************
076300******************************************************************
076400 PERFORM B0100-INITIALIZATION 
076500 PERFORM B0200-PROCESS-CUST-INPUT
076900 PERFORM B9000-END-PROCESS 
077000 STOP RUN. 
077100******************************************************************
077200 B0100-INITIALIZATION. 
077300******************************************************************
077400 MOVE SPACES TO WW-CUST-OUT-LAYOUT 
077500 MOVE 'CUSTR001' TO WW-PROG-NAME 
077600 
077700 PERFORM C0100-OPEN-FILES 
077900 ACCEPT WD-CURRENT-DATE FROM DATE 
077900 ACCEPT WD-CURRENT-TIME FROM TIME 
078000 DISPLAY ' PROGRAM PROCESSING HAS STARTED AT '
078000 DISPLAY WD-DATE-TIME.
000100******************************************************************
000200 B0200-PROCESS-CUST-INPUT. 
000300******************************************************************
000301* READ ALL THE INPUT RECORDS AND VALIDATE THE TRANSACTION TYPE. 
000302* IF IT IS CREDIT, THEN ONLY WRITE THE DETAILS TO OUTPUT. 
000303* 
000304 PERFORM UNTIL EOF 
000305    PERFORM C0200-READ-CUST-RECORD 
000306    IF SUCCESS 
000307       ADD +1 TO WA-IN-REC-CNT 
000308       IF CREDIT-TRANS 
000309          ADD +1            TO WA-CR-REC-CNT 
000310          MOVE WW-CUST-NUM  TO WW-CUSTO-NUM 
000320          MOVE WW-CUST-NAME TO WW-CUSTO-NAME 
000330          PERFORM C0300-WRITE-OUT-REPORT 
000340       ELSE 
000350          ADD +1 TO WA-DB-REC-CNT 
000360       END-IF 
000370    END-IF 
000380 END-PERFORM 
000381* 
000390 DISPLAY ' NO. OF INPUT RECORDS-' WA-IN-REC-CNT 
000400 DISPLAY ' NO. OF DEBIT RECORDS-' WA-DB-REC-CNT 
000500 DISPLAY ' NO. OF CREDT RECORDS-' WA-CR-REC-CNT. 
000501* 
000502******************************************************************
000503 C0100-OPEN-FILES. 
000504******************************************************************
000505 OPEN INPUT CUST-IN-FILE 
000506 IF NOT SUCCESS 
000507    DISPLAY 'INPUT FILE OPEN FAILED' 
000508 END-IF 
000509* 
000510 OPEN OUTPUT CUST-OUT-RPT 
000511 IF NOT SUCCESS 
000512    DISPLAY 'OUTPUT FILE OPEN FAILED' 
000513 END-IF. 
000514* 
000515******************************************************************
000516 C0200-READ-CUST-RECORD. 
000517******************************************************************
000518 READ CUST-IN-FILE INTO WW-CUST-IN-LAYOUT 
000519 IF NOT SUCCESS 
000520    DISPLAY 'READ FAILED' 
000521 END-IF. 
000523* 
000524******************************************************************
000525 C0300-WRITE-OUT-REPORT. 
000526******************************************************************
000527 WRITE WW-CUST-OUT-RECORD FROM WW-CUST-OUT-LAYOUT 
000528 IF NOT SUCCESS 
000529    DISPLAY 'WRITE FAILED' 
000530 END-IF. 
000523* 
000524******************************************************************
000525 B9000-END-PROCESS. 
000526******************************************************************
000527 CLOSE CUST-IN-FILE 
000560        CUST-OUT-RPT 
000523* 
000570 ACCEPT WD-CURRENT-DATE FROM DATE 
000570 ACCEPT WD-CURRENT-TIME FROM TIME 
000523* 
000580 DISPLAY ' PROGRAM PROCESSING HAS ENDED AT ' 
000580 DISPLAY WD-DATE-TIME. 
000523* 
000590*END-OF THE PROGRAM

Add a Comment

Your email address will not be published. Required fields are marked *

Close Bitnami banner