0% found this document useful (0 votes)
61 views

Cobol Programm

The document appears to be job control language (JCL) for running two IBM mainframe programs (ACCTPGM1 and ACCTPGM2) that process account records. ACCTPGM1 reads input account records, validates the data, and writes valid records to a file. It then passes the file to ACCTPGM2 which separates the records into new saved and current files.

Uploaded by

srbcobol
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
61 views

Cobol Programm

The document appears to be job control language (JCL) for running two IBM mainframe programs (ACCTPGM1 and ACCTPGM2) that process account records. ACCTPGM1 reads input account records, validates the data, and writes valid records to a file. It then passes the file to ACCTPGM2 which separates the records into new saved and current files.

Uploaded by

srbcobol
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
You are on page 1/ 20

//IBMUSERX JOB NOTIFY=&SYSUID 00010000

//STEP1 EXEC PGM=ACCTPGM1 00020000


//STEPLIB DD DSN=IBMUSER.T5.LOAD,DISP=SHR 00030000
//SYSPRINT DD SYSOUT=* 00040000
//SYSOUT DD SYSOUT=* 00050000
//ACCTDD01 DD DSN=IBMUSER.T5.ACCT.FILE,DISP=(NEW,CATLG,DELETE), 00060000
// UNIT=3390,VOL=SER=JASYS1, 00070000
// SPACE=(TRK,(1,1),RLSE), 00080000
// DSORG=PS,LRECL=30,RECFM=FB,BLKSIZE=0 00090000
//SYSIN DD * 00100000
S1111 00110000
ANIL KUMAR 00120000
10000 00130000
SAVINGS 00140000
Y 00150000
S1111 00151002
ANIL KUMAR 00152000
10000 00153000
SAVINGS 00154002
Y 00155000
C1111 00156000
ANIL KUMAR 00157000
10000 00158000
CURRENT 00159002
Y 00159100
C1111 00159202
ANIL KUMAR 00159300
10000 00159400
CURRENT 00159502
N 00159600
/* 00160000
// 00170000
//IBMUSERX JOB NOTIFY=&SYSUID 00010000
//STEP1 EXEC PGM=ACCTPGM2 00020000
//STEPLIB DD DSN=IBMUSER.T5.LOAD,DISP=SHR 00030000
//SYSPRINT DD SYSOUT=* 00040000
//SYSOUT DD SYSOUT=* 00050000
//ACCTDDIN DD DSN=IBMUSER.T5.ACCT.FILE,DISP=SHR 00060000
//SAVEDDOT DD DSN=IBMUSER.T5.SAVE.FILE,DISP=(NEW,CATLG,DELETE), 00070000
// UNIT=3390,VOL=SER=JASYS1, 00080000
// SPACE=(TRK,(2,2),RLSE), 00090000
// DSORG=PS,LRECL=30,RECFM=FB,BLKSIZE=0 00100000
//CURRDDOT DD DSN=IBMUSER.T5.CURR.FILE,DISP=(NEW,CATLG,DELETE), 00101000
// UNIT=3390,VOL=SER=JASYS1, 00102000
// SPACE=(TRK,(2,2),RLSE), 00103000
// DSORG=PS,LRECL=30,RECFM=FB,BLKSIZE=0 00104000
// 00110000
ID DIVISION. 00010000
PROGRAM-ID. ACCTPGM1. 00020000
AUTHOR. NAME. 00030000
DATE-WRITTEN. TODAY. 00040000
00050000
ENVIRONMENT DIVISION. 00060000
INPUT-OUTPUT SECTION. 00070000
FILE-CONTROL. 00080000
SELECT ACCT-FILE ASSIGN TO ACCTDD01 00090000
ORGANIZATION IS SEQUENTIAL 00100000
ACCESS MODE IS SEQUENTIAL 00110000
FILE STATUS IS WS-OUTF-STATUS. 00120001
00130000
DATA DIVISION. 00140000
FILE SECTION. 00150000
FD ACCT-FILE 00160000
LABEL RECORD ARE STANDARD. 00170000
COPY ACCTCPY1 00180002
REPLACING ACCT-DETAILS BY ACCT-DETAILS-OUT. 00230002
WORKING-STORAGE SECTION. 00240000
01 WS-OUTF-STATUS PIC X(02) VALUE SPACE. 00250001
01 ACCT-DETAILS-IN. 00260001
03 ACCT-NUMBER PIC X(05) VALUE SPACE. 00270000
03 CUST-NAME PIC X(10) VALUE SPACE. 00280000
03 ACCT-BAL PIC S9(03)V9(02) VALUE ZERO. 00290000
03 ACCT-TYPE PIC X(10) VALUE SPACE. 00300000
00310000
01 WS-ANY-MORE-INPUT PIC X(01) VALUE SPACE. 00320000
01 WS-VALID-INPUT PIC X(01) VALUE SPACE. 00330000
01 WS-IN-REC-CNT PIC 9(02) VALUE ZERO. 00340000
01 WS-OT-REC-CNT PIC 9(02) VALUE ZERO. 00350000
01 WS-ABENDPGM PIC X(08) VALUE 'ABENDPGM'. 00360000
00370000
PROCEDURE DIVISION. 00380000
000-MAIN-PARA. 00390000
DISPLAY 'ACCTPGM1 STARTED'. 00400000
00410000
PERFORM 100-INITIAL-PARA THRU 100-EXIT 00420000
PERFORM 200-GET-INPUT-PARA THRU 200-EXIT 00430000
PERFORM 300-PROCESS-PARA THRU 300-EXIT 00440000
UNTIL WS-ANY-MORE-INPUT = 'N'. 00450000
00460000
CLOSE ACCT-FILE. 00470000
DISPLAY 'TOTAL INPUT RECORD COUNT ' WS-IN-REC-CNT. 00480000
DISPLAY 'TOTAL OUTPUT RECORD COUNT ' WS-OT-REC-CNT. 00490000
STOP RUN. 00500000
00510000
100-INITIAL-PARA. 00520000
MOVE 'Y' TO WS-ANY-MORE-INPUT. 00530000
MOVE ZERO TO WS-IN-REC-CNT WS-OT-REC-CNT. 00540000
00550000
OPEN OUTPUT ACCT-FILE. 00560000
IF WS-OUTF-STATUS = '00' 00570000
CONTINUE 00580000
ELSE 00590000
DISPLAY 'ERROR IN 100-PARA' 00600000
DISPLAY 'FILE OPEN ERROR STATUS IS ' WS-OUTF-STATUS 00610000
CALL WS-ABENDPGM 00620000
END-IF. 00630000
INITIALIZE ACCT-DETAILS-IN ACCT-DETAILS-OUT. 00640000
100-EXIT. EXIT. 00650000
00660000
200-GET-INPUT-PARA. 00670000
ACCEPT ACCT-NUMBER OF ACCT-DETAILS-IN 00680000
ACCEPT CUST-NAME OF ACCT-DETAILS-IN 00690000
ACCEPT ACCT-BAL OF ACCT-DETAILS-IN 00700000
ACCEPT ACCT-TYPE OF ACCT-DETAILS-IN. 00710000
ADD +1 TO WS-IN-REC-CNT. 00720000
200-EXIT. EXIT. 00730000
00740000
300-PROCESS-PARA. 00750000
MOVE 'Y' TO WS-VALID-INPUT. 00760000
PERFORM 310-AUDIT-INPUT-PARA THRU 310-EXIT. 00770000
00780000
IF WS-VALID-INPUT = 'Y' 00790000
PERFORM 340-MOVE-WRITE-PARA THRU 340-EXIT 00800000
END-IF. 00810000
00820000
ACCEPT WS-ANY-MORE-INPUT 00830000
IF WS-ANY-MORE-INPUT = 'Y' 00840000
PERFORM 200-GET-INPUT-PARA THRU 200-EXIT 00850000
END-IF. 00860000
300-EXIT. EXIT. 00870000
00880000
310-AUDIT-INPUT-PARA. 00890000
IF ACCT-NUMBER OF ACCT-DETAILS-IN = SPACE 00900000
MOVE 'N' TO WS-VALID-INPUT 00910000
GO TO 310-EXIT 00920000
END-IF. 00930000
00940000
IF CUST-NAME OF ACCT-DETAILS-IN = SPACE 00950000
MOVE 'N' TO WS-VALID-INPUT 00960000
GO TO 310-EXIT 00970000
END-IF. 00980000
00990000
IF ACCT-BAL OF ACCT-DETAILS-IN < 0 01000000
MOVE 'N' TO WS-VALID-INPUT 01010000
GO TO 310-EXIT 01020000
END-IF. 01030000
01040000
IF ACCT-TYPE OF ACCT-DETAILS-IN = SPACE 01050000
MOVE 'N' TO WS-VALID-INPUT 01060000
END-IF. 01080000
310-EXIT. EXIT. 01090000
01100000
340-MOVE-WRITE-PARA. 01110000
MOVE ACCT-NUMBER OF ACCT-DETAILS-IN TO 01120000
ACCT-NUMBER OF ACCT-DETAILS-OUT. 01130000
MOVE CUST-NAME OF ACCT-DETAILS-IN TO 01140000
CUST-NAME OF ACCT-DETAILS-OUT. 01150000
MOVE ACCT-BAL OF ACCT-DETAILS-IN TO 01160000
ACCT-BAL OF ACCT-DETAILS-OUT. 01170000
MOVE ACCT-TYPE OF ACCT-DETAILS-IN TO 01180000
ACCT-TYPE OF ACCT-DETAILS-OUT. 01190000
WRITE ACCT-DETAILS-OUT. 01200000
IF WS-OUTF-STATUS = '00' 01210000
ADD +1 TO WS-OT-REC-CNT 01220000
ELSE 01230000
DISPLAY 'ERORR IN 340-MOVE-WRITE-PARA' 01240000
DISPLAY 'WRITE ERROR STATUS IS ' WS-OUTF-STATUS 01250000
DISPLAY 'RECORD KEY IS' ACCT-NUMBER OF ACCT-DETAILS-IN 01260000
CALL WS-ABENDPGM 01270000
END-IF. 01280000
340-EXIT. EXIT. 01290000
ID DIVISION. 00010000
PROGRAM-ID. ACCTPGM2. 00020002
AUTHOR. NAME. 00030000
DATE-WRITTEN. TODAY. 00040000
00050000
ENVIRONMENT DIVISION. 00060000
INPUT-OUTPUT SECTION. 00070000
FILE-CONTROL. 00080000
SELECT ACCT-INFILE ASSIGN TO ACCTDDIN 00090002
ORGANIZATION IS SEQUENTIAL 00100000
ACCESS MODE IS SEQUENTIAL 00110000
FILE STATUS IS WS-INF-STATUS. 00120002
00130000
SELECT SAVE-OTFILE ASSIGN TO SAVEDDOT 00131002
ORGANIZATION IS SEQUENTIAL 00132002
ACCESS MODE IS SEQUENTIAL 00133002
FILE STATUS IS WS-SAF-STATUS. 00134002
00135002
SELECT CURR-OTFILE ASSIGN TO CURRDDOT 00136002
ORGANIZATION IS SEQUENTIAL 00137002
ACCESS MODE IS SEQUENTIAL 00138002
FILE STATUS IS WS-CUF-STATUS. 00139002
00139102
DATA DIVISION. 00140000
FILE SECTION. 00150000
FD ACCT-INFILE 00160002
LABEL RECORD ARE STANDARD. 00170000
COPY ACCTCPY1 00180008
REPLACING ACCT-DETAILS BY ACCT-DETAILS-IN. 00190008
00230000
FD SAVE-OTFILE 00231002
LABEL RECORD ARE STANDARD. 00232002
COPY ACCTCPY1 00233008
REPLACING ACCT-DETAILS BY SAVE-DETAILS-OT. 00234008
00238002
FD CURR-OTFILE 00239002
LABEL RECORD ARE STANDARD. 00239102
COPY ACCTCPY1 00239208
REPLACING ACCT-DETAILS BY CURR-DETAILS-OT. 00239308
00239707
WORKING-STORAGE SECTION. 00240000
01 WS-INF-STATUS PIC X(02) VALUE SPACE. 00310002
01 WS-SAF-STATUS PIC X(02) VALUE SPACE. 00311002
01 WS-CUF-STATUS PIC X(02) VALUE SPACE. 00312002
01 WS-IN-REC-CNT PIC 9(02) VALUE ZERO. 00360001
01 WS-OT-REC-CNT PIC 9(02) VALUE ZERO. 00370001
01 WS-ABENDPGM PIC X(08) VALUE 'ABENDPGM'. 00400000
00401002
01 WS-END-OF-FILE PIC X(01) VALUE SPACE. 00402002
01 WS-TOT-ACCT-BAL PIC S9(3)V9(02) VALUE ZERO. 00403002
01 WS-TOT-SAVE-BAL PIC S9(3)V9(02) VALUE ZERO. 00404002
01 WS-TOT-CURR-BAL PIC S9(3)V9(02) VALUE ZERO. 00405002
00410000
PROCEDURE DIVISION. 00420000
0000-MAIN-PARA. 00430000
DISPLAY 'ACCTPGM2 STARTED'. 00440002
00450000
PERFORM 100-INITIAL-PARA THRU 100-EXIT 00460000
PERFORM 200-GET-INPUT-PARA THRU 200-EXIT 00470000
PERFORM 300-PROCESS-PARA THRU 300-EXIT 00480000
UNTIL WS-END-OF-FILE = 'Y'. 00490002
00500000
CLOSE ACCT-INFILE SAVE-OTFILE CURR-OTFILE. 00510002
DISPLAY 'TOTAL ACCT BALANCE IS ' WS-TOT-ACCT-BAL. 00520002
DISPLAY 'TOTAL SAVE BALANCE IS ' WS-TOT-SAVE-BAL. 00520102
DISPLAY 'TOTAL CURR BALANCE IS ' WS-TOT-CURR-BAL. 00520202
00520302
DISPLAY 'TOTAL INPUT REC COUNT ' WS-IN-REC-CNT. 00521002
DISPLAY 'TOTAL OUTPUT REC COUNT ' WS-OT-REC-CNT. 00530000
STOP RUN. 00540000
00550000
100-INITIAL-PARA. 00560000
MOVE ZERO TO WS-IN-REC-CNT 00570000
WS-OT-REC-CNT 00580002
WS-TOT-ACCT-BAL 00580102
WS-TOT-SAVE-BAL 00580202
WS-TOT-CURR-BAL. 00581002
00590000
MOVE 'N' TO WS-END-OF-FILE. 00600002
00610000
OPEN INPUT ACCT-INFILE. 00620002
OPEN OUTPUT SAVE-OTFILE CURR-OTFILE. 00621002
IF WS-INF-STATUS = '00' 00630002
CONTINUE 00640000
ELSE 00650000
DISPLAY 'ERROR IN 100-PARA' 00660000
DISPLAY 'OPEN ERROR - ACCT STATUS IS ' WS-INF-STATUS 00670002
CALL WS-ABENDPGM 00680000
END-IF. 00690000
IF WS-SAF-STATUS = '00' 00691002
CONTINUE 00692002
ELSE 00693002
DISPLAY 'ERROR IN 100-PARA' 00694002
DISPLAY 'OPEN ERROR - SAVE STATUS IS ' WS-SAF-STATUS 00695002
CALL WS-ABENDPGM 00696002
END-IF. 00697002
IF WS-CUF-STATUS = '00' 00698002
CONTINUE 00699002
ELSE 00699102
DISPLAY 'ERROR IN 100-PARA' 00699202
DISPLAY 'OPEN ERROR - CURR STATUS IS ' WS-CUF-STATUS 00699302
CALL WS-ABENDPGM 00699402
END-IF. 00699502
INITIALIZE ACCT-DETAILS-IN SAVE-DETAILS-OT. 00700002
INITIALIZE CURR-DETAILS-OT. 00701002
100-EXIT. EXIT. 00710000
00720000
200-GET-INPUT-PARA. 00730000
READ ACCT-INFILE 00740002
AT END 00750002
MOVE 'Y' TO WS-END-OF-FILE 00760002
GO TO 200-EXIT. 00770002
00771002
ADD +1 TO WS-IN-REC-CNT. 00780000
200-EXIT. EXIT. 00790000
00800000
300-PROCESS-PARA. 00810000
COMPUTE WS-TOT-ACCT-BAL = WS-TOT-ACCT-BAL + 00811004
ACCT-BAL OF ACCT-DETAILS-IN. 00812004
00813004
IF ACCT-TYPE OF ACCT-DETAILS-IN = 'SAVINGS' 00820003
COMPUTE WS-TOT-SAVE-BAL = WS-TOT-SAVE-BAL + 00821004
ACCT-BAL OF ACCT-DETAILS-IN 00822004
PERFORM 320-MOVE-WRITE-SAVE-PARA THRU 320-EXIT 00830002
ELSE 00840002
IF ACCT-TYPE OF ACCT-DETAILS-IN = 'CURRENT' 00850002
COMPUTE WS-TOT-CURR-BAL = WS-TOT-CURR-BAL + 00851004
ACCT-BAL OF ACCT-DETAILS-IN 00852004
PERFORM 330-MOVE-WRITE-CURR-PARA THRU 330-EXIT 00860002
ELSE 00870002
CONTINUE 00880002
END-IF 00890002
END-IF. 00900002
00910002
PERFORM 200-GET-INPUT-PARA THRU 200-EXIT. 00920002
300-EXIT. EXIT. 00990000
01000000
320-MOVE-WRITE-SAVE-PARA. 01230002
MOVE ACCT-NUMBER OF ACCT-DETAILS-IN TO 01240000
ACCT-NUMBER OF SAVE-DETAILS-OT. 01250002
MOVE CUST-NAME OF ACCT-DETAILS-IN TO 01260000
CUST-NAME OF SAVE-DETAILS-OT. 01270002
MOVE ACCT-BAL OF ACCT-DETAILS-IN TO 01280000
ACCT-BAL OF SAVE-DETAILS-OT. 01290002
MOVE ACCT-TYPE OF ACCT-DETAILS-IN TO 01300000
ACCT-TYPE OF SAVE-DETAILS-OT. 01310002
WRITE SAVE-DETAILS-OT. 01320002
IF WS-SAF-STATUS = '00' 01330002
ADD +1 TO WS-OT-REC-CNT 01340000
ELSE 01350000
DISPLAY 'ERROR IN 320-PARA' 01360002
DISPLAY 'WRITE ERROR - STATUS IS ' WS-SAF-STATUS 01370002
DISPLAY 'RECORD IS ' ACCT-NUMBER OF ACCT-DETAILS-IN 01380000
CALL WS-ABENDPGM 01390000
END-IF. 01400000
320-EXIT. EXIT. 01410002
01411002
330-MOVE-WRITE-CURR-PARA. 01420002
MOVE ACCT-NUMBER OF ACCT-DETAILS-IN TO 01430002
ACCT-NUMBER OF CURR-DETAILS-OT. 01440002
MOVE CUST-NAME OF ACCT-DETAILS-IN TO 01450002
CUST-NAME OF CURR-DETAILS-OT. 01460002
MOVE ACCT-BAL OF ACCT-DETAILS-IN TO 01470002
ACCT-BAL OF CURR-DETAILS-OT. 01480002
MOVE ACCT-TYPE OF ACCT-DETAILS-IN TO 01490002
ACCT-TYPE OF CURR-DETAILS-OT. 01500002
WRITE CURR-DETAILS-OT. 01510002
IF WS-CUF-STATUS = '00' 01520002
ADD +1 TO WS-OT-REC-CNT 01530002
ELSE 01540002
DISPLAY 'ERROR IN 330-PARA' 01550002
DISPLAY 'WRITE ERROR - STATUS IS ' WS-CUF-STATUS 01560002
DISPLAY 'RECORD IS ' ACCT-NUMBER OF ACCT-DETAILS-IN 01570002
CALL WS-ABENDPGM 01580002
END-IF. 01590002
330-EXIT. EXIT. 01600002
//IBMUSERX JOB NOTIFY=&SYSUID
//STEP1 EXEC PGM=ADDPGM01
//STEPLIB DD DSN=IBMUSER.T5.LOAD,DISP=SHR
//SYSPRINT DD SYSOUT=*
//SYSOUT DD SYSOUT=*
//SYSIN DD *
20
30
/*
//

ID DIVISION.
PROGRAM-ID. ADDPGM01.
AUTHOR. NAME.
DATE-WRITTEN. TODAY.

ENVIRONMENT DIVISION.
INPUT-OUTPUT SECTION.
FILE-CONTROL.

DATA DIVISION.
FILE SECTION.
WORKING-STORAGE SECTION.
01 NUM1 PIC 9(02) VALUE ZERO.
01 NUM2 PIC 9(02) VALUE ZERO.
01 TOTAL PIC 9(02) VALUE ZERO.
01 WS-ABENDPGM PIC X(08) VALUE 'ABENDPGM'.
PROCEDURE DIVISION.
000-MAIN-PARA.
DISPLAY 'ADDPGM01 STARTED'.

ACCEPT NUM1
ACCEPT NUM2.

COMPUTE TOTAL = NUM1 + NUM2


ON SIZE ERROR
DISPLAY 'ERROR IN COMPUTE'
DISPLAY 'INPUT ARE ' NUM1 ' ' NUM2
CALL WS-ABENDPGM.

DISPLAY 'TOTAL IS ' TOTAL


STOP RUN. //IBMUSERX JOB
NOTIFY=&SYSUID 00010000
//STEP1 EXEC PGM=ADDPGM01 00020000
//STEPLIB DD DSN=IBMUSER.T5.LOAD,DISP=SHR 00030000
//SYSPRINT DD SYSOUT=* 00040000
//SYSOUT DD SYSOUT=* 00050000
//SYSIN DD * 00060001
20 00070002
30 00080002
/* 00090001
// 00100001
//IBMUSERX JOB NOTIFY=&SYSUID 00010000
//STEP1 EXEC PGM=CARDPGM1 00020000
//STEPLIB DD DSN=IBMUSER.T5.LOAD,DISP=SHR 00030000
//SYSPRINT DD SYSOUT=* 00040000
//SYSOUT DD SYSOUT=* 00050000
//SYSIN DD * 00060000
C1111 00070000
ANIL 00080000
10000 00090000
04000 00100000
Y 00110000
C1111 00120000
ARUN 00130000
10000 00140000
05000 00150000
Y 00160000
C3333 00170000
00180000
10000 00190000
02000 00200000
N 00210000
/* 00220000
// 00230000
ID DIVISION. 00010000
PROGRAM-ID. CARDPGM1. 00020000
AUTHOR. NAME. 00030000
DATE-WRITTEN. TODAY. 00040000
00050000
ENVIRONMENT DIVISION. 00060000
INPUT-OUTPUT SECTION. 00070000
FILE-CONTROL. 00080000
00090000
DATA DIVISION. 00100000
FILE SECTION. 00110000
WORKING-STORAGE SECTION. 00120000
01 CARD-DETAILS-IN. 00130000
03 CARD-NUMBER PIC X(05). 00140000
03 CUST-NAME PIC X(10). 00150000
03 CARD-LIMIT PIC S9(05). 00160000
03 CARD-DUE-AMT PIC S9(05). 00170000
00180000
01 CARD-DETAILS-OUT. 00190000
03 CARD-NUMBER PIC X(05) VALUE SPACE. 00200000
03 CUST-NAME PIC X(10) VALUE SPACE. 00210000
03 CARD-LIMIT PIC S9(05) VALUE ZERO. 00220000
03 CARD-DUE-AMT PIC S9(05) VALUE ZERO. 00230000
00240000
01 WS-ANY-MORE-INPUT PIC X(01) VALUE SPACE. 00250000
01 WS-VALID-INPUT PIC X(01) VALUE SPACE. 00260000
01 WS-IN-REC-CNT PIC 9(02) VALUE ZERO. 00270000
01 WS-OT-REC-CNT PIC 9(02) VALUE ZERO. 00280000
00290000
PROCEDURE DIVISION. 00300000
000-MAIN-PARA. 00310000
DISPLAY 'CARDPGM1 STARTED'. 00320000
00330000
PERFORM 100-INITIAL-PARA THRU 100-EXIT 00340000
PERFORM 200-GET-INPUT-PARA THRU 200-EXIT 00350000
PERFORM 300-PROCESS-PARA THRU 300-EXIT 00360000
UNTIL WS-ANY-MORE-INPUT = 'N'. 00370000
00380000
DISPLAY 'TOTAL INPUT REC COUNT ' WS-IN-REC-CNT. 00390000
DISPLAY 'TOTAL OUTPUT REC COUNT ' WS-OT-REC-CNT. 00400000
STOP RUN. 00410000
00420000
100-INITIAL-PARA. 00430000
MOVE ZERO TO WS-IN-REC-CNT 00440000
WS-OT-REC-CNT. 00450000
00460000
MOVE 'Y' TO WS-ANY-MORE-INPUT. 00470000
00480000
MOVE SPACE TO CARD-NUMBER OF CARD-DETAILS-IN 00490000
CUST-NAME OF CARD-DETAILS-IN. 00500000
MOVE ZERO TO CARD-LIMIT OF CARD-DETAILS-IN 00510000
CARD-DUE-AMT OF CARD-DETAILS-IN. 00520000
00530000
100-EXIT. EXIT. 00540000
00550000
200-GET-INPUT-PARA. 00560000
ACCEPT CARD-NUMBER OF CARD-DETAILS-IN 00570000
ACCEPT CUST-NAME OF CARD-DETAILS-IN. 00580000
ACCEPT CARD-LIMIT OF CARD-DETAILS-IN 00590000
ACCEPT CARD-DUE-AMT OF CARD-DETAILS-IN. 00600000
ADD +1 TO WS-IN-REC-CNT. 00610000
200-EXIT. EXIT. 00620000
00630000
300-PROCESS-PARA. 00640000
MOVE 'Y' TO WS-VALID-INPUT. 00650000
PERFORM 310-AUDIT-INPUT-PARA THRU 310-EXIT. 00660000
00670000
IF WS-VALID-INPUT = 'Y' 00680000
PERFORM 340-MOVE-DISPLAY-PARA THRU 340-EXIT 00690000
END-IF. 00700000
00710000
ACCEPT WS-ANY-MORE-INPUT. 00720000
IF WS-ANY-MORE-INPUT = 'Y' 00730000
PERFORM 200-GET-INPUT-PARA THRU 200-EXIT 00740000
END-IF. 00750000
300-EXIT. EXIT. 00760000
00770000
310-AUDIT-INPUT-PARA. 00780000
IF CARD-NUMBER OF CARD-DETAILS-IN = SPACE 00790000
MOVE 'N' TO WS-VALID-INPUT 00800000
GO TO 310-EXIT 00810000
END-IF. 00820000
00830000
IF CUST-NAME OF CARD-DETAILS-IN = SPACE 00840000
MOVE 'N' TO WS-VALID-INPUT 00850000
GO TO 310-EXIT 00860000
END-IF. 00870000
00871000
IF CARD-LIMIT OF CARD-DETAILS-IN < 0 00872000
MOVE 'N' TO WS-VALID-INPUT 00873000
GO TO 310-EXIT 00874000
END-IF. 00875000
00876000
IF CARD-DUE-AMT OF CARD-DETAILS-IN < 0 00877000
MOVE 'N' TO WS-VALID-INPUT 00878000
END-IF. 00879000
00880000
310-EXIT. EXIT. 00890000
00900000
340-MOVE-DISPLAY-PARA. 00910000
MOVE CARD-NUMBER OF CARD-DETAILS-IN TO 00920000
CARD-NUMBER OF CARD-DETAILS-OUT. 00921000
MOVE CUST-NAME OF CARD-DETAILS-IN TO 00930000
CUST-NAME OF CARD-DETAILS-OUT. 00931000
MOVE CARD-LIMIT OF CARD-DETAILS-IN TO 00940000
CARD-LIMIT OF CARD-DETAILS-OUT. 00941000
MOVE CARD-DUE-AMT OF CARD-DETAILS-IN TO 00950000
CARD-DUE-AMT OF CARD-DETAILS-OUT. 00960000
00970000
DISPLAY 'VALID CARD DETAILS ARE ' CARD-DETAILS-OUT. 00980000
ADD +1 TO WS-OT-REC-CNT. 00990000
01000000
340-EXIT. EXIT. 01010000
//IBMUSERX JOB NOTIFY=&SYSUID 00010000
//STEP1 EXEC PGM=CBLPGM33 00020000
//STEPLIB DD DSN=IBMUSER.E5.LOAD,DISP=SHR 00030000
//SYSOUT DD SYSOUT=* 00040000
//SYSPRINT DD SYSOUT=* 00050000
//LBDDIN01 DD DSN=IBMUSER.E5.LAB.FILE,DISP=SHR 00060000
//LBDDIN02 DD DSN=IBMUSER.E5.WAG.FILE,DISP=SHR 00070000
//LBDDOT01 DD DSN=IBMUSER.E5.PAY.FIL2,DISP=(NEW,CATLG,DELETE), 00080002
// UNIT=3390,VOL=SER=S7SYS1, 00090000
// SPACE=(TRK,(1,1),RLSE), 00100000
// DCB=(DSORG=PS,LRECL=24,RECFM=FB,BLKSIZE=0) 00110000
// 00120000
ID DIVISION. 00010000
PROGRAM-ID. CBLGPM01. 00020000
AUTHOR. NAME. 00030000
DATE-WRITTEN. TODAY. 00040000
00050000
ENVIRONMENT DIVISION. 00060000
INPUT-OUTPUT SECTION. 00070000
FILE-CONTROL. 00080000
00090000
DATA DIVISION. 00100000
FILE SECTION. 00110000
WORKING-STORAGE SECTION. 00120000
LINKAGE SECTION. 00130000
00140000
PROCEDURE DIVISION. 00150000
000-MAIN-PARA. 00160000
DISPLAY ' HELLO ALL'. 00170000
DISPLAY ' WELCOME ALL '. 00180000
STOP RUN. 00190000
ID DIVISION. 00010000
PROGRAM-ID. CBLPGM02. 00020000
AUTHOR. NAME. 00030000
DATE-WRITTEN. TODAY. 00040000
00050000
PROCEDURE DIVISION. 00060000
000-MAIN-PARA. 00070000
DISPLAY 'SEE U TOMORROW'. 00080000
STOP RUN. 00090000
000100 IDENTIFICATION DIVISION. 00010000
000200 PROGRAM-ID. CBLPGM33. 00020000
000300 AUTHOR. UR NAME. 00030000
000400 DATE-WRITTEN. TODAY. 00040000
000500 00050000
000600 ENVIRONMENT DIVISION. 00060000
000700 INPUT-OUTPUT SECTION. 00070000
000800 FILE-CONTROL. 00080000
000900 SELECT LBDETAIL ASSIGN TO LBDDIN01 00090000
001000 ORGANIZATION IS SEQUENTIAL 00100000
001100 ACCESS MODE IS SEQUENTIAL 00110000
001200 FILE STATUS IS WS-LBIN-STATUS. 00120000
001300 00130000
001400 SELECT WGDETAIL ASSIGN TO LBDDIN02 00140000
001500 ORGANIZATION IS SEQUENTIAL 00150000
001600 ACCESS MODE IS SEQUENTIAL 00160000
001700 FILE STATUS IS WS-WGIN-STATUS. 00170000
001800 00180000
001900 SELECT PYCHKRPT ASSIGN TO LBDDOT01 00190000
002000 ORGANIZATION IS SEQUENTIAL 00200000
002100 ACCESS MODE IS SEQUENTIAL 00210000
002200 FILE STATUS IS WS-LBOUT-STATUS. 00220000
002300 00230000
002400 DATA DIVISION. 00240000
002500 FILE SECTION. 00250000
002600 FD LBDETAIL 00260000
002700 LABEL RECORDS ARE STANDARD 00270000
002800 RECORDING MODE IS F 00280000
002900 RECORD CONTAINS 21 CHARACTERS 00290000
003000 BLOCK CONTAINS 0 RECORDS. 00300000
003100 01 LABOUR-DETAILS. 00310000
003200 03 LABOUR-ID PIC X(05). 00320000
003300 03 LABOUR-NAME PIC X(10). 00330000
003400 03 LABOUR-RG-WORK-HRS PIC 9(02). 00340000
003500 03 LABOUR-OT-WORK-HRS PIC 9(02). 00350000
003600 03 LABOUR-WORK-TYPE PIC X(02). 00360000
003700 00370000
003800 FD WGDETAIL 00380000
003900 LABEL RECORDS ARE STANDARD 00390000
004000 RECORDING MODE IS F 00400000
004100 RECORD CONTAINS 06 CHARACTERS 00410002
004200 BLOCK CONTAINS 0 RECORDS. 00420000
004300 01 WG-DETAILS-IN. 00430000
004400 03 LABOUR-WORK-TYPEG PIC X(02). 00440000
004500 03 RG-HR-PAY-AMTG PIC 9(02). 00450000
004600 03 OT-HR-PAY-AMTG PIC 9(02). 00460000
004700 00470000
004800 FD PYCHKRPT 00480000
004900 LABEL RECORDS ARE STANDARD 00490000
005000 RECORDING MODE IS F 00500000
005100 RECORD CONTAINS 24 CHARACTERS 00510002
005200 BLOCK CONTAINS 0 RECORDS. 00520000
005300 01 LABOUR-DETAILS-OT. 00530000
005400 03 LABOUR-ID PIC X(05). 00540000
005500 03 LABOUR-NAME PIC X(10). 00550000
005600 03 LABOUR-TOTAL-WORK-HRS PIC 9(02). 00560000
005700 03 LABOUR-WORK-TYPE PIC X(02). 00570000
005800 03 LABOUR-TOTAL-SALARY PIC 9(05). 00580000
005900 00590000
006000 WORKING-STORAGE SECTION. 00600000
006100 00610000
006200 01 WS-LBIN-STATUS PIC X(02) VALUE SPACE. 00620000
006300 01 WS-WGIN-STATUS PIC X(02) VALUE SPACE. 00630000
006400 01 WS-LBOUT-STATUS PIC X(02) VALUE SPACE. 00640000
006500 01 WS-END-OF-FILE PIC X(01) VALUE SPACE. 00650000
006600 01 WS-END-WG-FILE PIC X(01) VALUE SPACE. 00660000
006700 01 WS-WORK-TYPE-FOUND PIC X(01) VALUE SPACE. 00670001
006800 00680000
007100 01 WS-RG-WORK-AMT PIC 9(02) VALUE ZERO. 00690000
007200 01 WS-OT-WORK-AMT PIC 9(02) VALUE ZERO. 00700000
007300 01 WS-TOTAL-RG-AMT PIC 9(04) VALUE ZERO. 00710000
007400 01 WS-TOTAL-OT-AMT PIC 9(04) VALUE ZERO. 00720000
01 WS-LABOUR-TOTAL-SALARY PIC 9(05) VALUE ZERO. 00730000
007500 00740000
008100 01 SUB PIC 9(01) VALUE ZERO. 00750000
008200 01 WS-ABENDPGM PIC X(08) VALUE 'ABENDPGM'. 00760000
007600 01 WS-WAGE-DETAILS. 00770000
007700 03 WG-DETAILS OCCURS 2 TIMES INDEXED BY IDX. 00780000
007800 05 WS-LABOUR-WORK-TYPE PIC X(02). 00790000
007900 05 WS-RG-HR-PAY-AMT PIC 9(02). 00800000
008000 05 WS-OT-HR-PAY-AMT PIC 9(02). 00810000
008300 PROCEDURE DIVISION. 00820000
008400 0000-MAIN-PARA. 00830000
008500 PERFORM 1000-INITIAL-PARA THRU 1000-EXIT. 00840000
PERFORM 1700-GET-LB-PARA THRU 1700-EXIT. 00850000
008600 PERFORM 2000-PROCESS-PARA THRU 2000-EXIT 00860000
008700 UNTIL WS-END-OF-FILE = 'Y'. 00870000
008800 CLOSE LBDETAIL WGDETAIL PYCHKRPT. 00880000
008900 STOP RUN. 00890000
009000 00900000
009100 1000-INITIAL-PARA. 00910000
009200 MOVE 'N' TO WS-END-OF-FILE. 00920000
009300 MOVE 'N' TO WS-END-WG-FILE. 00930000
009400 MOVE 'Y' TO WS-WORK-TYPE-FOUND. 00940000
009500 00950000
009600 OPEN INPUT LBDETAIL, WGDETAIL. 00960000
009700 OPEN OUTPUT PYCHKRPT. 00970000
009800 IF WS-LBIN-STATUS NOT = '00' OR 00980000
009900 WS-WGIN-STATUS NOT = '00' OR 00990000
010000 WS-LBOUT-STATUS NOT = '00' 01000000
010100 DISPLAY 'ERROR IN 1000-PARA TO OPEN FILE ' 01010000
010200 DISPLAY 'STATUS CODES ARE ' WS-LBIN-STATUS ' ' 01020000
010300 WS-WGIN-STATUS ' ' WS-LBOUT-STATUS 01030000
CALL WS-ABENDPGM 01040000
010500 END-IF. 01050000
010600 PERFORM 1500-BLD-WAGE-TABLE-PARA THRU 1500-EXIT 01060001
010700 UNTIL WS-END-WG-FILE = 'Y'. 01070000
010800 01080000
010900 1000-EXIT. EXIT. 01090000
011000 01100000
011100 1500-BLD-WAGE-TABLE-PARA. 01110001
011200 READ WGDETAIL 01120000
011300 AT END MOVE 'Y' TO WS-END-WG-FILE 01130000
011400 GO TO 1500-EXIT. 01140000
011500 ADD +1 TO SUB. 01150000
011600 01160000
011700 MOVE LABOUR-WORK-TYPEG TO WS-LABOUR-WORK-TYPE (SUB) 01170000
011800 MOVE RG-HR-PAY-AMTG TO WS-RG-HR-PAY-AMT (SUB) 01180000
011900 MOVE OT-HR-PAY-AMTG TO WS-OT-HR-PAY-AMT (SUB). 01190000
012000 01200000
012100 1500-EXIT. EXIT. 01210000
01220000
012200 1700-GET-LB-PARA. 01230000
012500 READ LBDETAIL 01240000
012600 AT END 01250000
012700 MOVE 'Y' TO WS-END-OF-FILE 01260000
012800 GO TO 2000-EXIT. 01270000
009800 IF WS-LBIN-STATUS NOT = '00' 01280000
010100 DISPLAY 'ERROR IN 2000-PARA TO READ LABOUR FILE ' 01290000
010200 DISPLAY 'STATUS CODE IS ' WS-LBIN-STATUS 01300000
010400 CALL WS-ABENDPGM 01310000
010500 END-IF. 01320000
1700-EXIT. EXIT. 01330000
01340000
012300 2000-PROCESS-PARA. 01350000
012900 MOVE 'Y' TO WS-WORK-TYPE-FOUND. 01360003
013000 PERFORM 2600-GET-WAGE-DETAILS-PARA THRU 2600-EXIT. 01370000
013100 IF WS-WORK-TYPE-FOUND = 'Y' 01380000
013200 01390000
013300 COMPUTE LABOUR-TOTAL-WORK-HRS = 01400000
013300 LABOUR-RG-WORK-HRS + LABOUR-OT-WORK-HRS 01410000
013400 COMPUTE WS-TOTAL-RG-AMT = 01420000
013400 LABOUR-RG-WORK-HRS * WS-RG-WORK-AMT 01430000
013500 COMPUTE WS-TOTAL-OT-AMT = 01440000
013500 LABOUR-OT-WORK-HRS * WS-OT-WORK-AMT 01450000
013600 COMPUTE WS-LABOUR-TOTAL-SALARY = 01460000
013600 WS-TOTAL-RG-AMT + WS-TOTAL-OT-AMT 01470000
013700 PERFORM 2700-WRITE-OUTPUT-PARA THRU 2700-EXIT 01480000
013800 ELSE 01490000
013900 DISPLAY 'ERROR WITH INPUT LABOUR DATA ' 01500000
014000 DISPLAY 'INVALID WORK-TYPE INPUT ' LABOUR-DETAILS 01510000
014100 END-IF. 01520000
014200 PERFORM 1700-GET-LB-PARA THRU 1700-EXIT. 01530000
014300 2000-EXIT. EXIT. 01540000
014310 01550000
014400 2600-GET-WAGE-DETAILS-PARA. 01560000
014500 SET IDX TO 1. 01570000
014600 01580000
014700 SEARCH WG-DETAILS 01590000
014800 AT END 01600000
014900 MOVE 'N' TO WS-WORK-TYPE-FOUND 01610000
015100 WHEN LABOUR-WORK-TYPE OF LABOUR-DETAILS 01620000
015100 = WS-LABOUR-WORK-TYPE (IDX) 01630000
015200 MOVE WS-RG-HR-PAY-AMT (IDX) TO WS-RG-WORK-AMT 01640000
015300 MOVE WS-OT-HR-PAY-AMT (IDX) TO WS-OT-WORK-AMT 01650000
015500 END-SEARCH. 01660000
015600 01670000
015700 2600-EXIT. EXIT. 01680000
015800 01690000
015900 2700-WRITE-OUTPUT-PARA. 01700000
016000 MOVE LABOUR-ID OF LABOUR-DETAILS 01710000
016000 TO LABOUR-ID OF LABOUR-DETAILS-OT. 01720000
016300 MOVE LABOUR-NAME OF LABOUR-DETAILS 01730000
016300 TO LABOUR-NAME OF LABOUR-DETAILS-OT. 01740000
016300 MOVE LABOUR-WORK-TYPE OF LABOUR-DETAILS 01750000
016400 TO LABOUR-WORK-TYPE OF LABOUR-DETAILS-OT. 01760000
016500 MOVE WS-LABOUR-TOTAL-SALARY 01770000
016500 TO LABOUR-TOTAL-SALARY OF LABOUR-DETAILS-OT. 01780000
016600 WRITE LABOUR-DETAILS-OT. 01790000
009800 IF WS-LBOUT-STATUS NOT = '00' 01800000
010100 DISPLAY 'ERROR IN 2700-PARA TO WRITE LB-OUTFILE ' 01810000
010200 DISPLAY 'STATUS CODE IS ' WS-LBOUT-STATUS 01820000
010400 CALL WS-ABENDPGM 01830000
010500 END-IF. 01840000
016700 01850000
016800 2700-EXIT. EXIT. 01860000
//IBMUSERX JOB NOTIFY=&SYSUID 00010000
//STEP1 EXEC PGM=CBLPGM01 00020000
//STEPLIB DD DSN=IBMUSER.T5.LOAD,DISP=SHR 00030000
//SYSPRINT DD SYSOUT=* 00040000
//SYSOUT DD SYSOUT=* 00050000
// 00060000
//IBMUSERX JOB NOTIFY=&SYSUID 00010000
//STEP1 EXEC PGM=CBLPGM02 00020000
//STEPLIB DD DSN=IBMUSER.T5.LOAD,DISP=SHR 00030000
//SYSPRINT DD SYSOUT=* 00040000
//SYSOUT DD SYSOUT=* 00050000
// 00060000

ID DIVISION.
PROGRAM-ID. CUSTPGM1.
AUTHOR. NAME.
DATE-WRITTEN. TODAY.

ENVIRONMENT DIVISION.
INPUT-OUTPUT SECTION.
FILE-CONTROL.

DATA DIVISION.
FILE SECTION.
WORKING-STORAGE SECTION.
01 CUST-DETAILS-IN.
03 CUST-ID PIC X(05).
03 CUST-NAME PIC X(10).
03 CUST-GENDER PIC X(10).

01 CUST-DETAILS-OUT.
03 CUST-ID PIC X(05) VALUE SPACE.
03 CUST-TITLE PIC X(03) VALUE SPACE.
03 CUST-NAME PIC X(10) VALUE SPACE.
03 CUST-GENDER PIC X(10) VALUE SPACE.

PROCEDURE DIVISION.
000-MAIN-PARA.
PROCEDURE DIVISION.
000-MAIN-PARA.
DISPLAY 'CUSTPGM1 STARTED'.

MOVE SPACE TO CUST-ID OF CUST-DETAILS-IN


CUST-NAME OF CUST-DETAILS-IN
CUST-GENDER OF CUST-DETAILS-IN.

ACCEPT CUST-ID OF CUST-DETAILS-IN


ACCEPT CUST-NAME OF CUST-DETAILS-IN
ACCEPT CUST-GENDER OF CUST-DETAILS-IN.

IF CUST-GENDER OF CUST-DETAILS-IN = 'MALE'


MOVE 'MR' TO CUST-TITLE OF CUST-DETAILS-OUT
ELSE
IF CUST-GENDER OF CUST-DETAILS-IN = 'FEMALE'
MOVE 'MRs' TO CUST-TITLE OF CUST-DETAILS-OUT
ELSE
DISPLAY 'INVALID GENDER INPUT ' CUST-DETAILS-IN
CALL WS-ABENDPGM
END-IF
END-IF.

MOVE CUST-ID OF CUST-DETAILS-IN TO


CUST-ID OF CUST-DETAILS-OUT
MOVE CUST-NAME OF CUST-DETAILS-IN TO
CUST-NAME OF CUST-DETAILS-OUT
MOVE CUST-GENDER OF CUST-DETAILS-IN TO
CUST-GENDER OF CUST-DETAILS-OUT.

DISPLAY 'CUSTOMER DETAILS WITH TITLE ' CUST-DETAILS-OUT.


STOP RUN.

//IBMUSERX JOB NOTIFY=&SYSUID


//STEP1 EXEC PGM=CUSTPGM1
//STEPLIB DD DSN=IBMUSER.T5.LOAD,DISP=SHR
//SYSPRINT DD SYSOUT=*
//SYSOUT DD SYSOUT=*
//SYSIN DD *
C1234
ANIL
MALE
/*
//
//IBMUSERX JOB NOTIFY=&SYSUID 00010000
//STEP1 EXEC PGM=MAINPGM1 00020000
//STEPLIB DD DSN=IBMUSER.T5.LOAD,DISP=SHR 00030000
//SYSPRINT DD SYSOUT=* 00040000
//SYSOUT DD SYSOUT=* 00050000
//SYSIN DD * 00060000
BINDU 00070005
/* 00080000
// 00090000
ID DIVISION. 00010000
PROGRAM-ID. MAINPGM1. 00020000
AUTHOR. NAME. 00030000
DATE-WRITTEN. TODAY. 00040000
00050000
ENVIRONMENT DIVISION. 00060000
INPUT-OUTPUT SECTION. 00070000
FILE-CONTROL. 00080000
00090000
DATA DIVISION. 00100000
FILE SECTION. 00110000
WORKING-STORAGE SECTION. 00120000
01 CUST-NAME PIC X(20) VALUE SPACE. 00130000
01 STR-LEN PIC 9(02) VALUE ZERO. 00140000
01 LETTER-FOUND PIC X(01) VALUE SPACE. 00150004
PROCEDURE DIVISION. 00160000
000-MAIN-PARA. 00170000
DISPLAY 'AM IN MAINPGM'. 00180000
00190000
ACCEPT CUST-NAME. 00200000
DISPLAY 'CUSTOMER NAME IS 1 ' CUST-NAME. 00201003
DISPLAY 'TOTAL VARIABLE LEN IS ' LENGTH OF CUST-NAME. 00202000
00203004
MOVE ZERO TO STR-LEN. 00210000
MOVE 'N' TO LETTER-FOUND. 00211004
CALL 'SUBPGM01' USING CUST-NAME STR-LEN LETTER-FOUND. 00220004
00221004
DISPLAY 'TOTAL STRING LEN IS ' STR-LEN. 00230000
IF LETTER-FOUND = 'Y' 00240004
DISPLAY 'CUSTOMER NAME ' CUST-NAME ' CONTAINS LETTER A' 00247004
ELSE 00248004
DISPLAY 'CUSTOMER NAME ' CUST-NAME ' DO NOT HAVE LET A' 00249004
END-IF. 00249104
STOP RUN. 00250000
ID DIVISION. 00010000
PROGRAM-ID. MATCHLP1. 00020003
AUTHOR. ANIL POLSANI. 00030000
DATE-WRITTEN. TODAY. 00040000
00050000
ENVIRONMENT DIVISION. 00060000
INPUT-OUTPUT SECTION. 00070000
FILE-CONTROL. 00080000
SELECT TRAN-INFILE ASSIGN TO TRANSDD1 00090000
ORGANIZATION IS SEQUENTIAL 00100000
ACCESS MODE IS SEQUENTIAL 00110000
FILE STATUS IS WS-TF-STATUS. 00120000
00130000
SELECT MAST-INFILE ASSIGN TO MASTDD01 00140000
ORGANIZATION IS SEQUENTIAL 00150000
ACCESS MODE IS SEQUENTIAL 00160000
FILE STATUS IS WS-MF-STATUS. 00170000
00180000
SELECT BILL-OTFILE ASSIGN TO BILLDD01 00190000
ORGANIZATION IS SEQUENTIAL 00200000
ACCESS MODE IS SEQUENTIAL 00210000
FILE STATUS IS WS-BF-STATUS. 00220000
00230000
DATA DIVISION. 00240000
FILE SECTION. 00250000
FD TRAN-INFILE 00260000
LABEL RECORD ARE STANDARD. 00270000
COPY TRANCPY2. 00280000
00290000
FD MAST-INFILE 00300000
LABEL RECORD ARE STANDARD. 00310000
COPY MASTCPY1. 00320000
00330000
FD BILL-OTFILE 00340000
LABEL RECORD ARE STANDARD. 00350000
COPY BILLCPY1. 00360000
00370000
WORKING-STORAGE SECTION. 00380000
01 WS-TF-STATUS PIC X(02) VALUE SPACE. 00390000
01 WS-MF-STATUS PIC X(02) VALUE SPACE. 00400000
01 WS-BF-STATUS PIC X(02) VALUE SPACE. 00410000
00420000
01 WS-END-OF-TFILE PIC X(01) VALUE SPACE. 00430000
01 WS-END-OF-MFILE PIC X(01) VALUE SPACE. 00440000
00450000
01 WS-IN-REC-CNT PIC 9(02) VALUE ZERO. 00460000
01 WS-OT-REC-CNT PIC 9(02) VALUE ZERO. 00470000
01 WS-ABENDPGM PIC X(08) VALUE 'ABENDPGM'. 00480000
00480101
01 WS-TOTL-DUE-2-PAY PIC S9(05)V9(02) VALUE ZERO. 00481001
01 WS-PREV-DUE-AMT PIC S9(05)V9(02) VALUE ZERO. 00481101
01 WS-DUE-INST PIC S9(05)V9(02) VALUE ZERO. 00481201
01 WS-MIN-DUE-AMT PIC S9(05)V9(02) VALUE ZERO. 00482001
01 WS-CURR-DATE-ALPNUM PIC X(08) VALUE SPACE. 00483001
01 WS-CURR-DATE-NUM PIC 9(08) VALUE ZERO. 00483101
01 WS-DUE-DATE PIC 9(08) VALUE ZERO. 00484001
01 WS-DUE-DATE-ALPNUM PIC X(08) VALUE SPACE. 00484101
01 WS-NUM-OF-DAYS PIC 9(08) VALUE ZERO. 00485001
00490000
PROCEDURE DIVISION. 00500000
000-MAIN-PARA. 00510000
DISPLAY 'MATCHLP1 STARTED'. 00520003
00530000
PERFORM 100-INITIAL-PARA THRU 100-EXIT 00540000
PERFORM 200-GET-INPUT-PARA THRU 200-EXIT 00550000
PERFORM 300-PROCESS-PARA THRU 300-EXIT 00560000
UNTIL WS-END-OF-TFILE = 'Y'. 00570000
00580000
CLOSE TRAN-INFILE MAST-INFILE BILL-OTFILE. 00590000
DISPLAY 'TOTAL INPUT RECORD COUNT ' WS-IN-REC-CNT. 00600000
DISPLAY 'TOTAL OTPUT RECORD COUNT ' WS-OT-REC-CNT. 00610000
STOP RUN. 00620000
00630000
100-INITIAL-PARA. 00640000
MOVE 'N' TO WS-END-OF-TFILE. 00650000
MOVE 'N' TO WS-END-OF-MFILE. 00660000
00670000
MOVE ZERO TO WS-IN-REC-CNT WS-OT-REC-CNT. 00680000
00690000
OPEN INPUT TRAN-INFILE MAST-INFILE. 00700000
OPEN OUTPUT BILL-OTFILE. 00710000
IF WS-MF-STATUS NOT = '00' OR 00720000
WS-TF-STATUS NOT = '00' OR 00730000
WS-BF-STATUS NOT = '00' 00740000
DISPLAY 'ERROR IN 100-PARA' 00750000
DISPLAY 'STATUS CODE TRAN FILE IS ' WS-TF-STATUS 00760000
DISPLAY 'STATUS CODE MAST FILE IS ' WS-MF-STATUS 00761000
DISPLAY 'STATUS CODE BILL FILE IS ' WS-BF-STATUS 00762000
CALL WS-ABENDPGM 00770000
END-IF. 00780000
INITIALIZE TRANS-LAYOUT MASTER-LAYOUT BILL-LAYOUT. 00790002
100-EXIT. EXIT. 00800000
00810000
200-GET-INPUT-PARA. 00820000
PERFORM 210-GET-TRAN-FILE-PARA THRU 210-EXIT. 00830000
PERFORM 220-GET-MAST-FILE-PARA THRU 220-EXIT. 00840000
200-EXIT. EXIT. 00850000
00860000
210-GET-TRAN-FILE-PARA. 00870000
READ TRAN-INFILE 00880000
AT END 00890000
MOVE 'Y' TO WS-END-OF-TFILE 00900000
GO TO 210-EXIT. 00910000
ADD +1 TO WS-IN-REC-CNT. 00920000
210-EXIT. EXIT. 00930000
00940000
220-GET-MAST-FILE-PARA. 00950000
READ MAST-INFILE 00960000
AT END 00970000
MOVE 'Y' TO WS-END-OF-MFILE 00980000
GO TO 220-EXIT. 00990000
220-EXIT. EXIT. 01010000
01020000
300-PROCESS-PARA. 01030000
IF CARD-NUMBER OF TRANS-LAYOUT = CARD-NUMBER OF 01040002
MASTER-LAYOUT 01050000
PERFORM 310-CAL-TOT-DUE-PARA THRU 310-EXIT 01060000
PERFORM 320-CAL-MIN-DUE-PARA THRU 320-EXIT 01070000
PERFORM 330-GET-DUE-DATE-PARA THRU 330-EXIT 01080000
PERFORM 340-MOVE-WRITE-PARA THRU 340-EXIT 01090000
PERFORM 200-GET-INPUT-PARA THRU 200-EXIT 01091000
ELSE 01100000
IF CARD-NUMBER OF TRANS-LAYOUT > CARD-NUMBER OF 01110002
MASTER-LAYOUT 01120000
PERFORM 220-GET-MAST-FILE-PARA THRU 220-EXIT 01130000
ELSE 01140000
DISPLAY 'INVALID CARD-NUMBER IN TRANS-FILE' 01150000
DISPLAY 'NO RECORD IN MASTER FILE ' 01160000
DISPLAY 'CARD NUMBER IS ' CARD-NUMBER OF TRANS-LAYOUT 01170000
CALL WS-ABENDPGM 01180000
END-IF 01190000
END-IF. 01200000
300-EXIT. EXIT. 01210000
01220001
310-CAL-TOT-DUE-PARA. 01230001
MOVE ZERO TO WS-PREV-DUE-AMT 01231001
WS-DUE-INST 01232001
WS-TOTL-DUE-2-PAY. 01233001
01234001
COMPUTE WS-PREV-DUE-AMT = PREVIOUS-DUE - PREVIOUS-DUE-PAID 01240001
IF WS-PREV-DUE-AMT > 0 01250001
COMPUTE WS-DUE-INST = WS-PREV-DUE-AMT * .15 01260001
END-IF. 01270001
COMPUTE WS-TOTL-DUE-2-PAY = WS-PREV-DUE-AMT + 01280001
WS-DUE-INST + 01290001
DUE-AMT-TO-PAY. 01300001
310-EXIT. EXIT. 01310001
01320001
320-CAL-MIN-DUE-PARA. 01330001
MOVE ZERO TO WS-MIN-DUE-AMT. 01331001
COMPUTE WS-MIN-DUE-AMT = WS-TOTL-DUE-2-PAY * .15. 01340001
320-EXIT. EXIT. 01350001
01360001
330-GET-DUE-DATE-PARA. 01370001
MOVE FUNCTION CURRENT-DATE TO WS-CURR-DATE-ALPNUM. 01380001
MOVE WS-CURR-DATE-ALPNUM TO WS-CURR-DATE-NUM. 01390001
01400001
COMPUTE WS-NUM-OF-DAYS = FUNCTION 01410001
INTEGER-OF-DATE(WS-CURR-DATE-NUM) 01420001
COMPUTE WS-NUM-OF-DAYS = WS-NUM-OF-DAYS + 20. 01430001
COMPUTE WS-DUE-DATE = FUNCTION 01440001
DATE-OF-INTEGER(WS-NUM-OF-DAYS). 01450001
01460001
MOVE WS-DUE-DATE TO WS-DUE-DATE-ALPNUM. 01470001
330-EXIT. EXIT. 01480001
01490001
340-MOVE-WRITE-PARA. 01500001
MOVE CARD-NUMBER OF MASTER-LAYOUT TO 01510001
CARD-NUMBER OF BILL-LAYOUT 01520001
MOVE CUST-NAME OF MASTER-LAYOUT TO 01530001
CUST-NAME OF BILL-LAYOUT. 01540001
MOVE WS-TOTL-DUE-2-PAY TO TOT-DUE-2-PAY 01550001
MOVE WS-MIN-DUE-AMT TO MIN-DUE-2-PAY 01560001
MOVE WS-CURR-DATE-ALPNUM TO BILLING-DATE 01570001
MOVE WS-DUE-DATE-ALPNUM TO DUE-DATE. 01580001
WRITE BILL-LAYOUT. 01590001
IF WS-BF-STATUS NOT = '00' 01600001
DISPLAY 'ERROR IN 340-PARA' 01610001
DISPLAY 'WRITE ERROR STATUS CODE IS ' WS-BF-STATUS 01620001
DISPLAY 'RECORD IS ' CARD-NUMBER OF MASTER-LAYOUT 01630001
CALL WS-ABENDPGM 01640001
END-IF. 01650001
ADD +1 TO WS-OT-REC-CNT. 01660001
340-EXIT. EXIT. 01670001
//IBMUSERX JOB NOTIFY=&SYSUID 00010000
//STEP1 EXEC PGM=MATCHLP1 00020001
//STEPLIB DD DSN=IBMUSER.T5.LOAD,DISP=SHR 00030001
//SYSPRINT DD SYSOUT=* 00040000
//SYSOUT DD SYSOUT=* 00050000
//TRANSDD1 DD DSN=IBMUSER.T5.CC.TRANS,DISP=SHR 00060001
//MASTDD01 DD DSN=IBMUSER.T5.CC.MAST,DISP=SHR 00070001
//BILLDD01 DD DSN=IBMUSER.T5.CC.BILLRPT,DISP=(NEW,CATLG,DELETE), 00080001
// UNIT=3390,VOL=SER=JASYS1, 00090000
// SPACE=(TRK,(1,1),RLSE), 00100000
// DCB=(DSORG=PS,LRECL=45,RECFM=FB,BLKSIZE=0) 00110000
// 00120000
ID DIVISION. 00010000
PROGRAM-ID. SUBPGM01. 00020000
AUTHOR. NAME. 00030000
DATE-WRITTEN. TODAY. 00040000
00050000
ENVIRONMENT DIVISION. 00060000
INPUT-OUTPUT SECTION. 00070000
FILE-CONTROL. 00080000
00090000
DATA DIVISION. 00100000
FILE SECTION. 00110000
WORKING-STORAGE SECTION. 00120000
01 WS-SPACE-LEN PIC 9(02) VALUE ZERO. 00130000
01 WS-I PIC 9(02) VALUE ZERO. 00131003
LINKAGE SECTION. 00140000
01 CUST-NAME PIC X(20). 00150000
01 STR-LEN PIC 9(02). 00160000
01 LETTER-FOUND PIC X(01). 00170002
PROCEDURE DIVISION USING CUST-NAME STR-LEN LETTER-FOUND. 00180002
000-MAIN-PARA. 00190000
DISPLAY 'AM IN SUBPGM01'. 00200000
PERFORM 100-FIND-STR-LEN-PARA THRU 100-EXIT. 00201002
PERFORM 200-FIND-LETTER-PARA THRU 200-EXIT. 00201102
GOBACK. 00201202
00201302
100-FIND-STR-LEN-PARA. 00202002
MOVE ZERO TO WS-SPACE-LEN. 00210001
INSPECT FUNCTION REVERSE(CUST-NAME) TALLYING WS-SPACE-LEN 00220000
FOR LEADING SPACE. 00230000
DISPLAY 'EXTRA SPACE COUNT ' WS-SPACE-LEN. 00240000
COMPUTE STR-LEN = LENGTH OF CUST-NAME - WS-SPACE-LEN. 00250000
00260000
100-EXIT. EXIT. 00270002
00280002
200-FIND-LETTER-PARA. 00290002
MOVE +1 TO WS-I. 00300002
PERFORM UNTIL WS-I > 20 OR WS-I > STR-LEN 00310004
OR LETTER-FOUND = 'Y' 00311005
IF CUST-NAME(WS-I:1) = 'A' 00320002
MOVE 'Y' TO LETTER-FOUND 00330002
END-IF 00340002
DISPLAY 'WS-I IS ' WS-I 00341002
ADD +1 TO WS-I 00350002
END-PERFORM. 00360002
200-EXIT. EXIT. 00370002
000100 IDENTIFICATION DIVISION. 00010000
000200* 00020000
000300 PROGRAM-ID. SUBPGM02. 00030000
000400* 00040000
000500 ENVIRONMENT DIVISION. 00050000
000600* 00060000
000700 DATA DIVISION. 00070000
000800* 00080000
000900 WORKING-STORAGE SECTION. 00090000
001000* 00100000
001100 01 SWITCH. 00110000
001200* 00120000
001300 05 LENGTH-DETERMINED-SW PIC X VALUE 'N'. 00130000
001400 88 LENGTH-DETERMINED VALUE 'Y'. 00140000
001500* 00150000
001600 LINKAGE SECTION. 00160000
001700* 00170000
001800 01 TEXT-LENGTH PIC S9(4) COMP. 00180000
001900* 00190000
002000 01 WORK-TABLE. 00200000
002100* 00210000
002200 05 WT-CHARACTER OCCURS 1 TO 254 TIMES 00220000
002300 DEPENDING ON TEXT-LENGTH 00230000
002400 PIC X. 00240000
002500* 00250000
002600 PROCEDURE DIVISION USING TEXT-LENGTH 00260000
002700 WORK-TABLE. 00270000
002800* 00280000
002900 000-DETERMINE-STRING-LENGTH. 00290000
003000* 00300000
003100 MOVE 'N' TO LENGTH-DETERMINED-SW. 00310000
003200 PERFORM 100-EXAMINE-LAST-CHARACTER 00320000
003300 UNTIL LENGTH-DETERMINED. 00330000
003400* 00340000
003500 000-EXIT. 00350000
003600* 00360000
003700 EXIT PROGRAM. 00370000
003800* 00380000
003900 100-EXAMINE-LAST-CHARACTER. 00390000
004000* 00400000
004100 IF WT-CHARACTER(TEXT-LENGTH) = SPACE 00410000
004200 SUBTRACT 1 FROM TEXT-LENGTH 00420000
004300 ELSE 00430000
004400 MOVE 'Y' TO LENGTH-DETERMINED-SW. 00440000
004500 IF TEXT-LENGTH = 0 00450000
004600 MOVE 'Y' TO LENGTH-DETERMINED-SW. 00460000
004700* 00470000

You might also like