Professional Documents
Culture Documents
COBOL Programs: by Madhu Padala
COBOL Programs: by Madhu Padala
com Ph : 040-64515137
COBOL Programs
By Madhu Padala
1
School of MAINFRAMES Email : schoolofmainframes@gmail.com Ph : 040-64515137
First Program
Purpose : To know about a basic COBOL program, compilation and its execution.
Requirement : Display the below string in program and check the string in SYSOUT after run.
THIS IS MY FIRST PROGRAM
Program:
IDENTIFICATION DIVISION.
PROGRAM-ID. PGM1.
AUTHOR. MADHU PADALA.
ENVIRONMENT DIVISION.
DATA DIVISION.
PROCEDURE DIVISION.
STOP RUN.
Compile JCL :
//IBMUSERS JOB 'MADHU PADALA',NOTIFY=&SYSUID,MSGLEVEL=(1,1),REGION=2M JOB03606
//*
//IGYWCL PROC SRCLIB=,
// COBCOPY=,
// LOADLIB=,
// PGMNAME=
//*
//COMPILE EXEC PGM=IGYCRCTL,PARM=(LIB,SSRANGE,LIST,TEST)
//SYSPRINT DD SYSOUT=*
//SYSLIN DD DSNAME=&&LOADSET,UNIT=SYSALLDA,
// DISP=(MOD,PASS),SPACE=(TRK,(3,3)),
// DCB=(BLKSIZE=3200)
//SYSUT1 DD UNIT=SYSALLDA,SPACE=(TRK,(1,1))
//SYSUT2 DD UNIT=SYSALLDA,SPACE=(TRK,(1,1))
//SYSUT3 DD UNIT=SYSALLDA,SPACE=(TRK,(1,1))
//SYSUT4 DD UNIT=SYSALLDA,SPACE=(TRK,(1,1))
//SYSUT5 DD UNIT=SYSALLDA,SPACE=(TRK,(1,1))
//SYSUT6 DD UNIT=SYSALLDA,SPACE=(TRK,(1,1))
//SYSUT7 DD UNIT=SYSALLDA,SPACE=(TRK,(1,1))
//SYSIN DD DSN=&SRCLIB(&PGMNAME),DISP=SHR
//SYSLIB DD DSN=&COBCOPY,DISP=SHR
//*
2
School of MAINFRAMES Email : schoolofmainframes@gmail.com Ph : 040-64515137
Run JCL:
//IBMUSERX JOB 'MADHU PADALA',MSGLEVEL=(1,1),NOTIFY=&SYSUID
//*
//JOBLIB DD DSN=IBMUSER.SMF.LOADLIB,DISP=SHR
//*
//STPE1 EXEC PGM=PGM1
//SYSOUT DD SYSOUT=*
Output:
THIS IS MY FIRST PROGRAM
3
School of MAINFRAMES Email : schoolofmainframes@gmail.com Ph : 040-64515137
Accept &Display
Purpose : To know about how to accept data from SYSIN.
Requirement : Accept first name and last name and display full name.
Program :
IDENTIFICATION DIVISION.
PROGRAM-ID. PGM2.
AUTHOR. MADHU PADALA.
ENVIRONMENT DIVISION.
DATA DIVISION.
WORKING-STORAGE SECTION.
01 WS-NAME.
05 FIRST-NAME PIC X(10).
05 LAST-NAME PIC X(10).
PROCEDURE DIVISION.
ACCEPT FIRST-NAME
ACCEPT LAST-NAME
STOP RUN.
RunJCL :
//IBMUSERX JOB 'MADHU PADALA',MSGLEVEL=(1,1),NOTIFY=&SYSUID
//*
//JOBLIB DD DSN=IBMUSER.SMF.LOADLIB,DISP=SHR
//*
//STPE1 EXEC PGM=PGM2
//SYSOUT DD SYSOUT=*
//SYSIN DD *
MADHU
PADALA
/*
Output :
THIS PROGRAM IS WRITTEN BY:MADHU PADALA
4
School of MAINFRAMES Email : schoolofmainframes@gmail.com Ph : 040-64515137
Structures
Purpose : To know about layout, level numbers and how to pass data on assumed decimal
from sysin.
Requirement : Accept data into group item and display all elementary items.
Program :
IDENTIFICATION DIVISION.
PROGRAM-ID. STRUC1.
AUTHOR. MADHU PADALA.
ENVIRONMENT DIVISION.
DATA DIVISION.
WORKING-STORAGE SECTION.
01 EMP-REC.
05 EMP-ID PIC X(04).
05 EMP-NAME.
10 FIRST-NAME PIC X(10).
10 LAST-NAME PIC X(10).
05 EMP-STATUS PIC X(01).
05 DOJ PIC 9(08).
05 BASIC-SAL PIC 9(7)V99.
05 HRA-PERCENT PIC 9(3)V99.
05 ALLOWANCE-PERCENT PIC 9(3)V99.
05 BONUS-AMT PIC 9(5)V99.
PROCEDURE DIVISION.
ACCEPT EMP-REC.
DISPLAY 'EMP-ID :' EMP-ID
DISPLAY 'EMP-NAME :' EMP-NAME
DISPLAY 'FIRST-NAME :' FIRST-NAME
DISPLAY 'LAST-NAME :' LAST-NAME
DISPLAY 'EMP-STATUS :' EMP-STATUS
DISPLAY 'DOJ :' DOJ
DISPLAY 'BASIC-SAL :' BASIC-SAL
DISPLAY 'HRA-PERCENT :' HRA-PERCENT
DISPLAY 'ALLOWANCE-PERCENT :' ALLOWANCE-PERCENT
DISPLAY 'BONUS-AMT :' BONUS-AMT
STOP RUN.
RunJCL :
//IBMUSERX JOB 'MADHU PADALA',MSGLEVEL=(1,1),NOTIFY=&SYSUID
//*
//JOBLIB DD DSN=IBMUSER.SMF.LOADLIB,DISP=SHR
//*
//STPE1 EXEC PGM=STRUC1
//SYSOUT DD SYSOUT=*
//SYSIN DD *
E001HITHA PADALA A2012101400500000004000070000500000
/*
Output :
EMP-ID :E001
EMP-NAME :HITHA PADALA
FIRST-NAME :HITHA
LAST-NAME :PADALA
EMP-STATUS :A
DOJ :20121014
BASIC-SAL :005000000
HRA-PERCENT :04000
ALLOWANCE-PERCENT :07000
BONUS-AMT :0500000
5
School of MAINFRAMES Email : schoolofmainframes@gmail.com Ph : 040-64515137
ENVIRONMENT DIVISION.
DATA DIVISION.
WORKING-STORAGE SECTION.
01 WS-GRP1.
05 A PIC 9(03).
05 B PIC S9(03).
05 D PIC S9(03) SIGN LEADING SEPARATE.
05 E PIC S9(03) SIGN TRAILING SEPARATE.
05 F PIC S9(03)V99.
01 WS-GRP2.
05 A PIC S9(01) COMP.
05 B PIC S9(04) COMP.
05 C PIC 9(04) COMP.
05 D PIC S9(05) COMP.
05 E PIC S9(09) COMP.
05 F PIC S9(10) COMP.
05 G PIC S9(18) COMP.
01 WS-GRP3.
05 A PIC 9(7) COMP-3.
05 B PIC S9(7) COMP-3.
05 C PIC S9(6) COMP-3.
05 D PIC S9(7)V99 COMP-3.
01 WS-GRP4.
05 A PIC X(5).
05 B PIC S9(4) COMP.
05 C PIC X(4).
01 WS-GRP5.
05 A PIC X(5).
05 B PIC S9(4) COMP SYNC.
05 C PIC X(4).
01 WS-GRP6.
05 A PIC X(5).
05 B PIC S9(9) COMP SYNC.
05 C PIC X(4).
01 WS-GRP7.
05 A COMP-1.
05 B COMP-2.
01 WS-GRP8.
05 A PIC 9(3).99.
05 B PIC -9(3).99.
05 C PIC 9(3).99-.
05 D PIC ZZ9.99-.
05 E PIC ---9.99.
6
School of MAINFRAMES Email : schoolofmainframes@gmail.com Ph : 040-64515137
PROCEDURE DIVISION.
STOP RUN.
RunJCL :
//IBMUSERX JOB 'MADHU PADALA',MSGLEVEL=(1,1),NOTIFY=&SYSUID
//*
//JOBLIB DD DSN=IBMUSER.SMF.LOADLIB,DISP=SHR
//*
//STPE1 EXEC PGM=TYPELEN
//SYSOUT DD SYSOUT=*
Output :
LENGTH OF WS-GRP1:000000019
LENGTH OF WS-GRP2:000000030
LENGTH OF WS-GRP3:000000017
LENGTH OF WS-GRP4:000000011
LENGTH OF WS-GRP5:000000012
LENGTH OF WS-GRP6:000000016
LENGTH OF WS-GRP7:000000012
000000004
000000008
LENGTH OF WS-GRP8:000000034
7
School of MAINFRAMES Email : schoolofmainframes@gmail.com Ph : 040-64515137
Program :
IDENTIFICATION DIVISION.
PROGRAM-ID. DATA2NUM.
AUTHOR. MADHU PADALA.
ENVIRONMENT DIVISION.
DATA DIVISION.
WORKING-STORAGE SECTION.
01 GROUP1.
05 A PIC 9(03) VALUE 123.
05 FILLER PIC X(01) VALUE ','.
05 B PIC 9(05) VALUE 123.
05 FILLER PIC X(01) VALUE ','.
05 C PIC S9(03) VALUE 123.
05 FILLER PIC X(01) VALUE ','.
05 D PIC S9(03) VALUE -123.
05 FILLER PIC X(01) VALUE ','.
05 E PIC S9(03)V99 VALUE -123.45.
01 GROUP2.
05 F PIC 9(03).
05 FILLER PIC X(01) VALUE ','.
05 G PIC 9(05).
05 FILLER PIC X(01) VALUE ','.
05 H PIC S9(03).
05 FILLER PIC X(01) VALUE ','.
05 I PIC S9(03).
05 FILLER PIC X(01) VALUE ','.
05 J PIC S9(03)V99.
01 GROUP3.
05 K PIC 9(03).
05 FILLER PIC X(01).
05 L PIC 9(05).
05 FILLER PIC X(01).
05 M PIC S9(03).
05 FILLER PIC X(01).
05 N PIC S9(03).
05 FILLER PIC X(01).
05 O PIC S9(03)V99.
8
School of MAINFRAMES Email : schoolofmainframes@gmail.com Ph : 040-64515137
01 GROUP-EDIT.
05 EDIT1 PIC 9(03).
05 FILLER PIC X(01) VALUE ','.
05 EDIT2 PIC 9(05).
05 FILLER PIC X(01) VALUE ','.
05 EDIT3 PIC +9(03).
05 FILLER PIC X(01) VALUE ','.
05 EDIT4 PIC +9(03).
05 FILLER PIC X(01) VALUE ','.
05 EDIT5 PIC +9(03)V99.
LINKAGE SECTION.
01 LS-VAR.
05 LEN PIC S9(04) COMP.
05 GROUP4.
10 P PIC 9(03).
10 FILLER PIC X(01).
10 Q PIC 9(05).
10 FILLER PIC X(01).
10 R PIC S9(03).
10 FILLER PIC X(01).
10 S PIC S9(03).
10 FILLER PIC X(01).
10 T PIC S9(03)V99.
MOVE F TO EDIT1
MOVE G TO EDIT2
MOVE H TO EDIT3
MOVE I TO EDIT4
MOVE J TO EDIT5
DISPLAY 'ACTUAL DATA IN GROUP2:' GROUP-EDIT
9
School of MAINFRAMES Email : schoolofmainframes@gmail.com Ph : 040-64515137
MOVE K TO EDIT1
MOVE L TO EDIT2
MOVE M TO EDIT3
MOVE N TO EDIT4
MOVE O TO EDIT5
DISPLAY 'ACTUAL DATA IN GROUP3:' GROUP-EDIT
MOVE P TO EDIT1
MOVE Q TO EDIT2
MOVE R TO EDIT3
MOVE S TO EDIT4
MOVE T TO EDIT5
DISPLAY 'ACTUAL DATA IN GROUP4:' GROUP-EDIT
STOP RUN.
RunJCL :
//IBMUSERX JOB 'MADHU PADALA',MSGLEVEL=(1,1),NOTIFY=&SYSUID
//*
//JOBLIB DD DSN=IBMUSER.SMF.LOADLIB,DISP=SHR
//*
//JS10 EXEC PGM=DATA2NUM,PARM=(123,00123,12C,12L,1234N)
//SYSOUT DD SYSOUT=*
//SYSIN DD *
123,00123,12C,12L,1234N
/*
Output :
INTERNAL DATA IN GROUP1:123,00123,12C,12L,1234N
INTERNAL DATA IN GROUP2:123,00123,12C,12L,1234N
INTERNAL DATA IN GROUP3:123,00123,12C,12L,1234N
INTERNAL DATA IN GROUP4:123,00123,12C,12L,1234N
ACTUAL DATA IN GROUP1:123,00123,+123,-123,-12345
ACTUAL DATA IN GROUP2:123,00123,+123,-123,-12345
ACTUAL DATA IN GROUP3:123,00123,+123,-123,-12345
ACTUAL DATA IN GROUP4:123,00123,+123,-123,-12345
10
School of MAINFRAMES Email : schoolofmainframes@gmail.com Ph : 040-64515137
Program :
IDENTIFICATION DIVISION.
PROGRAM-ID. DISPNUM.
AUTHOR. MADHU PADALA.
DATA DIVISION.
WORKING-STORAGE SECTION.
01 A-UNSIGN-ZONED-INT PIC 9(3) VALUE 123.
01 A-UNSIGN-ZONED-DEC PIC 9(3)V99 VALUE 123.45.
01 A-SIGN-ZONED-INT-P PIC S9(3) VALUE 123.
01 A-SIGN-ZONED-INT-N PIC S9(3) VALUE -123.
01 A-SIGN-ZONED-DEC-P PIC S9(3)V99 VALUE 123.45.
01 A-SIGN-ZONED-DEC-N PIC S9(3)V99 VALUE -123.45.
01 A-SIGN-ZONED-DEC-N-T PIC S9(3)V99 SIGN TRAILING SEPARATE
VALUE -123.45.
01 A-SIGN-ZONED-DEC-N-L PIC S9(3)V99 SIGN LEADING SEPARATE
VALUE -123.45.
01 B-UNSIGN-COMP PIC 9(4) USAGE COMP VALUE 1234.
01 B-SIGN-COMP-P PIC S9(4) COMP VALUE 1234.
01 B-SIGN-COMP-N PIC S9(4) COMP VALUE -1234.
PROCEDURE DIVISION.
11
School of MAINFRAMES Email : schoolofmainframes@gmail.com Ph : 040-64515137
STOP RUN.
RunJCL :
//IBMUSERX JOB 'MADHU PADALA',MSGLEVEL=(1,1),NOTIFY=&SYSUID
//*
//JOBLIB DD DSN=IBMUSER.SMF.LOADLIB,DISP=SHR
//*
//JS10 EXEC PGM=DISPNUM
//SYSOUT DD SYSOUT=*
Output :
A-UNSIGN-ZONED-INT :123
A-UNSIGN-ZONED-DEC :12345
A-SIGN-ZONED-INT-P :12C
A-SIGN-ZONED-INT-N :12L
A-SIGN-ZONED-DEC-P :1234E
A-SIGN-ZONED-DEC-N :1234N
A-SIGN-ZONED-DEC-N-T :12345-
A-SIGN-ZONED-DEC-N-L :-12345
B-UNSIGN-COMP :1234
B-SIGN-COMP-P :1234
B-SIGN-COMP-N :123M
C-UNSIGN-COMP-3-INT :12345
C-SIGN-COMP-3-INT-P :12345
C-SIGN-COMP-3-INT-N :1234N
C-SIGN-COMP-3-DEC-P :1234567
C-SIGN-COMP-3-DEC-N :123456P
D-COMP-1-MULT-EXP : .12345679E 04
D-COMP-1-MULT-EXP-EDIT : 001234.56787000000
D-COMP-1-DIV-EXP : .12345678E-04
D-COMP-1-DIV-EXP-EDIT : 000000.00001234568
D-COMP-2-MULT-EXP : .12345679E 04
D-COMP-2-MULT-EXP-EDIT : 001234.567870000000
D-COMP-2-DIV-EXP : .12345679E-04
D-COMP-2-DIV-EXP-EDIT : 000000.000012345679
12
School of MAINFRAMES Email : schoolofmainframes@gmail.com Ph : 040-64515137
Editing characters
Purpose : To know about
1. Different types of numeric and alphanumeric editing characters
2. Difference between numeric and numeric editing characters
Requirement : Declare different types of numeric variables with value and then display.
Move every numeric variable into its corresponding numeric editing variable and
then display.
Program :
IDENTIFICATION DIVISION.
PROGRAM-ID. EDITNUM.
AUTHOR. MADHU PADALA.
ENVIRONMENT DIVISION.
DATA DIVISION.
WORKING-STORAGE SECTION.
01 A PIC 9(5) VALUE 00123.
01 A-EDIT PIC ZZZZ9.
01 B PIC 9(4)V99 VALUE 0123.40.
01 B-EDIT PIC ZZZ9.99.
01 C PIC S9(5)V99 VALUE -01234.50.
01 C-EDIT1 PIC -----9.99.
01 C-EDIT2 PIC ZZZZ9.99-.
01 C-EDIT3 PIC $$$$$9.99-.
01 C-EDIT4 PIC ---,--9.99.
01 C-EDIT5 PIC ***,**9.99-.
01 D PIC S9(5)V99 VALUE 01234.50.
01 D-EDIT1 PIC -----9.99.
01 D-EDIT2 PIC +++++9.99.
01 E PIC S9(5)V99 COMP-3 VALUE -01234.50.
01 E-EDIT PIC -----9.99.
01 F PIC S9(4) COMP VALUE -0123.
01 F-EDIT PIC ----9.
01 G PIC 9(4) VALUE 1234.
01 G-EDIT PIC 9(4).00.
01 H PIC S9(4) VALUE -1234.
01 H-EDIT-CR PIC 9999CR.
01 H-EDIT-DB PIC 9999DB.
01 I PIC S9(4) VALUE +1234.
01 I-EDIT-CR PIC 9999CR.
01 I-EDIT-DB PIC 9999DB.
01 DATE1 PIC 9(8) VALUE 20120806.
01 DATE1-EDIT1 PIC 9999/99/99.
01 DATE1-EDIT2 PIC 9999B99B99.
PROCEDURE DIVISION.
* SUPPRESS LEADING ZEROS
MOVE A TO A-EDIT.
DISPLAY 'A :' A.
DISPLAY 'A-EDIT :' A-EDIT.
13
School of MAINFRAMES Email : schoolofmainframes@gmail.com Ph : 040-64515137
MOVE C TO C-EDIT1
C-EDIT2
C-EDIT3
C-EDIT4
C-EDIT5.
DISPLAY 'C :' C.
DISPLAY 'C-EDIT1 :' C-EDIT1.
DISPLAY 'C-EDIT2 :' C-EDIT2.
DISPLAY 'C-EDIT3 :' C-EDIT3.
DISPLAY 'C-EDIT4 :' C-EDIT4.
DISPLAY 'C-EDIT5 :' C-EDIT5.
MOVE D TO D-EDIT1
D-EDIT2.
DISPLAY 'D :' D.
DISPLAY 'D-EDIT1 :' D-EDIT1.
DISPLAY 'D-EDIT2 :' D-EDIT2.
14
School of MAINFRAMES Email : schoolofmainframes@gmail.com Ph : 040-64515137
STOP RUN.
RunJCL :
//IBMUSERX JOB 'MADHU PADALA',MSGLEVEL=(1,1),NOTIFY=&SYSUID
//*
//JOBLIB DD DSN=IBMUSER.SMF.LOADLIB,DISP=SHR
//*
//JS10 EXEC PGM=EDITNUM
//SYSOUT DD SYSOUT=*
Output :
A :00123
A-EDIT : 123
B :012340
B-EDIT : 123.40
C :012345}
C-EDIT1 : -1234.50
C-EDIT2 : 1234.50-
C-EDIT3 : $1234.50-
C-EDIT4 : -1,234.50
C-EDIT5 :**1,234.50-
D :012345{
D-EDIT1 : 1234.50
D-EDIT2 : +1234.50
E :012345}
E-EDIT : -1234.50
F :012L
F-EDIT : -123
G :1234
G-EDIT :1234.00
H :123M
H-EDIT-CR :1234CR
H-EDIT-DB :1234DB
I :123D
I-EDIT-CR :1234
I-EDIT-DB :1234
DATE1 :20120806
DATE1-EDIT1 :2012/08/06
DATE1-EDIT2 :2012 08 06
15
School of MAINFRAMES Email : schoolofmainframes@gmail.com Ph : 040-64515137
Program :
IDENTIFICATION DIVISION.
PROGRAM-ID. DATETIME.
AUTHOR. MADHU PADALA.
DATA DIVISION.
WORKING-STORAGE SECTION.
PROCEDURE DIVISION.
EVALUATE WS-DAY-OF-WEEK
WHEN 1
DISPLAY 'DAY OF WEEK IS MONDAY'
WHEN 2
DISPLAY 'DAY OF WEEK IS TUESDAY'
WHEN 3
DISPLAY 'DAY OF WEEK IS WEDNESDAY'
WHEN 4
DISPLAY 'DAY OF WEEK IS THURSDAY'
WHEN 5
DISPLAY 'DAY OF WEEK IS FRIDAY'
WHEN 6
DISPLAY 'DAY OF WEEK IS SATURDAY'
WHEN 7
DISPLAY 'DAY OF WEEK IS SUNDAY'
END-EVALUATE
STOP RUN.
16
School of MAINFRAMES Email : schoolofmainframes@gmail.com Ph : 040-64515137
RunJCL :
//IBMUSERX JOB 'MADHU PADALA',MSGLEVEL=(1,1),NOTIFY=&SYSUID
//*
//JOBLIB DD DSN=IBMUSER.SMF.LOADLIB,DISP=SHR
//*
//JS10 EXEC PGM=DATETIME
//SYSOUT DD SYSOUT=*
Output :
WS-DATE-YYMMDD :121028
WS-DATE-YYYYMMDD:20121028
WS-DATE-YYDDD :12302
WS-DATE-YYYYDDD :2012302
WS-TIME-HHMMSSSS:13534136
WS-DAY-OF-WEEK :7
DAY OF WEEK IS SUNDAY
17
School of MAINFRAMES Email : schoolofmainframes@gmail.com Ph : 040-64515137
ENVIRONMENT DIVISION.
DATA DIVISION.
WORKING-STORAGE SECTION.
01 A PIC X(4).
01 B PIC X(4) JUSTIFIED RIGHT.
01 C PIC X(4) VALUE 'ABCD'.
01 D PIC X(4) VALUE 'MNOP'.
01 E PIC X(4) VALUE 'ABCD'.
01 F PIC 9(4) VALUE ZEROS.
01 G PIC 9(5) VALUE 12345.
01 H PIC 9(3) VALUE 123.
01 I PIC X(4) VALUE 'ABCD'.
01 J PIC X(4) VALUE '1234'.
01 K PIC 9(4) VALUE 5678.
01 WS-DATE2.
05 CCYY PIC 9(4).
05 MM PIC 9(2).
05 DD PIC 9(2).
01 WS-DATE4.
05 MM PIC 9(2).
05 FILLER PIC X(1) VALUE '/'.
05 DD PIC 9(2).
05 FILLER PIC X(1) VALUE '/'.
05 CCYY PIC 9(4).
PROCEDURE DIVISION.
*MOVE INTO SAME LENGTH
MOVE 'ABCD' TO A
DISPLAY A
18
School of MAINFRAMES Email : schoolofmainframes@gmail.com Ph : 040-64515137
*MOVE INTO SAME LENGTH FIELD THAT HAS JUSTIFIED RIGHT CLAUSE
MOVE 'ABCD' TO B
DISPLAY B
*MOVE INTO SMALLER LENGTH FIELD THAT HAS JUSTIFIED RIGHT CLAUSE
MOVE 'ABCDE' TO B
DISPLAY B
*MOVE INTO BIGGER LENGTH FIELD THAT HAS JUSTIFIED RIGHT CLAUSE
MOVE 'ABC' TO B
DISPLAY B
IF J IS NUMERIC
MOVE J TO K
END-IF
DISPLAY K
STOP RUN.
19
School of MAINFRAMES Email : schoolofmainframes@gmail.com Ph : 040-64515137
RunJCL :
//IBMUSERX JOB 'MADHU PADALA',MSGLEVEL=(1,1),NOTIFY=&SYSUID
//*
//JOBLIB DD DSN=IBMUSER.SMF.LOADLIB,DISP=SHR
//*
//STPE1 EXEC PGM=MOVEX
//SYSOUT DD SYSOUT=*
Output:
ABCD
ABC
ABCD
ABCD
BCDE
ABC
MNAB
ABC4
12345
123
20121014
10/14/2012
5678
1234
20
School of MAINFRAMES Email : schoolofmainframes@gmail.com Ph : 040-64515137
Program :
IDENTIFICATION DIVISION.
PROGRAM-ID. MOVE9.
AUTHOR. MADHU PADALA.
ENVIRONMENT DIVISION.
DATA DIVISION.
WORKING-STORAGE SECTION.
01 A PIC 9(3)V99.
01 A-EDIT PIC 999.99.
01 B PIC 9(5).
01 C PIC X(4) VALUE 'ABCD'.
01 D PIC 9(4).
01 E PIC 9(3)V99 VALUE 123.45.
01 F PIC 9(3)V99 COMP-3.
01 F-EDIT PIC 999.99.
01 G PIC 9(4) VALUE 1234.
01 H PIC 9(4) COMP.
PROCEDURE DIVISION.
21
School of MAINFRAMES Email : schoolofmainframes@gmail.com Ph : 040-64515137
STOP RUN.
RunJCL:
//IBMUSERX JOB 'MADHU PADALA',MSGLEVEL=(1,1),NOTIFY=&SYSUID
//*
//JOBLIB DD DSN=IBMUSER.SMF.LOADLIB,DISP=SHR
//*
//STPE1 EXEC PGM=MOVE9
//SYSOUT DD SYSOUT=*
Output:
12345 : 123.45
01230 : 012.30
23456 : 234.56
12345 : 123.45
34500 : 345.00
00123
ABC4
123.45
1234
22
School of MAINFRAMES Email : schoolofmainframes@gmail.com Ph : 040-64515137
Arithmetic Verbs
Purpose : To know about arithmetic operations on numeric items.
Requirement : Execute all arithmetic verbs with all possible clauses.
Program :
IDENTIFICATION DIVISION.
PROGRAM-ID. ARITH.
AUTHOR. MADHU PADALA.
ENVIRONMENT DIVISION.
DATA DIVISION.
WORKING-STORAGE SECTION.
01 A PIC 9(4) VALUE ZEROS.
01 B PIC 9(4) VALUE ZEROS.
01 C PIC 9(4) VALUE ZEROS.
01 D PIC 9(4) VALUE ZEROS.
01 E PIC 9(3)V99 VALUE ZEROS.
01 F PIC 9(3)V99 VALUE ZEROS.
01 G PIC 9(3)V9 VALUE ZEROS.
PROCEDURE DIVISION.
MOVE 10 TO A
MOVE 20 TO B
DISPLAY 'BEFORE ADD A TO B :' A ',' B.
ADD A TO B
DISPLAY 'AFTER ADD A TO B :' A ',' B.
23
School of MAINFRAMES Email : schoolofmainframes@gmail.com Ph : 040-64515137
24
School of MAINFRAMES Email : schoolofmainframes@gmail.com Ph : 040-64515137
25
School of MAINFRAMES Email : schoolofmainframes@gmail.com Ph : 040-64515137
STOP RUN.
RunJCL :
//IBMUSERX JOB 'MADHU PADALA',MSGLEVEL=(1,1),NOTIFY=&SYSUID
//*
//JOBLIB DD DSN=IBMUSER.SMF.LOADLIB,DISP=SHR
//*
//JS10 EXEC PGM=ARITH
//SYSOUT DD SYSOUT=*
Output :
BEFORE ADD A TO B :0010,0020
AFTER ADD A TO B :0010,0030
26
School of MAINFRAMES Email : schoolofmainframes@gmail.com Ph : 040-64515137
27
School of MAINFRAMES Email : schoolofmainframes@gmail.com Ph : 040-64515137
Initialize
Purpose : To know about various options of INITIALIZE statement.
Requirement : Execute Initialize to check the below points.
1. Initialize on elementary items
2. How initialize reduces number of move statement
3. Initialize on group items
4. Initialize on group items that has filler with value clause
5. Initialize with replacing option
Program :
IDENTIFICATION DIVISION.
PROGRAM-ID. INIT1.
AUTHOR. MADHU PADALA.
DATA DIVISION.
WORKING-STORAGE SECTION.
01 A PIC X(3) VALUE 'ABC'.
01 B PIC X(3) VALUE '123'.
01 C PIC 9(3) VALUE 123.
01 D PIC S9(3) VALUE -123.
01 E PIC S9(3)V99 VALUE -123.45.
01 WS-GROUP1.
05 FLD1 PIC X(1) VALUE 'A'.
05 FLD2 PIC A(1) VALUE 'B'.
05 FLD3 PIC 9(1) VALUE 5.
01 WS-GROUP2.
05 FLD4 PIC X(1) VALUE 'A'.
05 FLD5 PIC A(1) VALUE 'B'.
05 FLD6 PIC 9(1) VALUE 5.
01 WS-DATE.
05 CCYY PIC 9(4) VALUE 2012.
05 FILLER PIC X(1) VALUE '/'.
05 MM PIC X(2) VALUE '08'.
05 FILLER PIC X(1) VALUE '/'.
05 DD PIC 9(2) VALUE 06.
PROCEDURE DIVISION.
28
School of MAINFRAMES Email : schoolofmainframes@gmail.com Ph : 040-64515137
STOP RUN.
RunJCL :
//IBMUSERX JOB 'MADHU PADALA',MSGLEVEL=(1,1),NOTIFY=&SYSUID
//*
//JOBLIB DD DSN=IBMUSER.SMF.LOADLIB,DISP=SHR
//*
//JS10 EXEC PGM=INIT1
//SYSOUT DD SYSOUT=*
Output :
A:
B:
C:000
D:00{
E:0000{
FLD1:
FLD2:
FLD3:0
FLD4:M
FLD5:N
FLD6:1
WS-DATE:0000/ /00
29
School of MAINFRAMES Email : schoolofmainframes@gmail.com Ph : 040-64515137
If Else
Purpose : To know the difference between continue and next sentence.
Program :
IDENTIFICATION DIVISION.
PROGRAM-ID. IFELSE.
AUTHOR. MADHU PADALA.
DATA DIVISION.
WORKING-STORAGE SECTION.
01 A PIC 9(2).
01 B PIC 9(2).
PROCEDURE DIVISION.
ACCEPT A
IF A > 20
CONTINUE
ELSE
MOVE ZEROS TO A
END-IF
ADD 15 TO A.
ADD 15 TO A.
DISPLAY A .
ACCEPT B
IF B > 20
NEXT SENTENCE
ELSE
MOVE ZEROS TO B
END-IF
ADD 15 TO B.
ADD 15 TO B.
DISPLAY B .
STOP RUN.
RunJCL :
//IBMUSERX JOB 'MADHU PADALA',MSGLEVEL=(1,1),NOTIFY=&SYSUID
//*
//JOBLIB DD DSN=IBMUSER.SMF.LOADLIB,DISP=SHR
//*
//STPE1 EXEC PGM=IFELSE
//SYSOUT DD SYSOUT=*
//SYSIN DD *
30
30
/*
Output :
60
45
30
School of MAINFRAMES Email : schoolofmainframes@gmail.com Ph : 040-64515137
Purpose : To know how to replace nested if with evaluate statement and how to use condition
names.
Requirement : Accept data for EMP-REC as per layout in the program and calculate bonus with
rules given below.
Status Bonus % in salary
Male and Married - 10
Male and Unmarried - 5
Male and Divorced - 7
Program :
IDENTIFICATION DIVISION.
PROGRAM-ID. NESTEDIF.
AUTHOR. MADHU PADALA.
DATA DIVISION.
WORKING-STORAGE SECTION.
01 EMP-REC.
05 EMP-NUM PIC X(04).
05 GENDER PIC X(01).
88 FEMALE VALUE 'F'.
88 MALE VALUE 'M'.
05 MARITAL-STATUS PIC X(01).
88 MARRIED VALUE 'M'.
88 UNMARRIED VALUE 'U'.
88 DIVORCED VALUE 'D'.
05 SALARY PIC 9(7)V99.
PROCEDURE DIVISION.
ACCEPT EMP-REC.
DISPLAY 'EMP-NUM :' EMP-NUM
DISPLAY 'GENDER :' GENDER
DISPLAY 'MARITAL-STATUS:' MARITAL-STATUS
MOVE SALARY TO SALARY-EDIT
DISPLAY 'SALARY :' SALARY-EDIT
*NESTED IF METHOD1
IF GENDER = 'M'
IF MARITAL-STATUS = 'M'
COMPUTE BONUS = SALARY * 0.10
ELSE
IF MARITAL-STATUS = 'U'
COMPUTE BONUS = SALARY * 0.05
ELSE
IF MARITAL-STATUS = 'D'
COMPUTE BONUS = SALARY * 0.07
ELSE
31
School of MAINFRAMES Email : schoolofmainframes@gmail.com Ph : 040-64515137
END-IF
END-IF
ELSE
IF GENDER = 'F'
IF MARITAL-STATUS = 'M'
COMPUTE BONUS = SALARY * 0.15
ELSE
IF MARITAL-STATUS = 'U'
COMPUTE BONUS = SALARY * 0.08
ELSE
IF MARITAL-STATUS = 'D'
COMPUTE BONUS = SALARY * 0.10
ELSE
DISPLAY 'INVALID MARITAL STATUS:' MARITAL-STATUS
END-IF
END-IF
END-IF
ELSE
DISPLAY 'INVALID GENDER:' GENDER
END-IF
END-IF
32
School of MAINFRAMES Email : schoolofmainframes@gmail.com Ph : 040-64515137
ELSE
DISPLAY 'INVALID GENDER:' GENDER
END-IF
END-IF
MOVE BONUS TO BONUS-EDIT
DISPLAY 'BONUS IN NESTED IF METHOD2:' BONUS-EDIT
33
School of MAINFRAMES Email : schoolofmainframes@gmail.com Ph : 040-64515137
WHEN 'D'
COMPUTE BONUS = SALARY * 0.10
WHEN OTHER
DISPLAY 'INVALID MARITAL STATUS:' MARITAL-STATUS
END-EVALUATE
WHEN OTHER
DISPLAY 'INVALID GENDER:' GENDER
END-EVALUATE
34
School of MAINFRAMES Email : schoolofmainframes@gmail.com Ph : 040-64515137
WHEN OTHER
DISPLAY 'INVLAID GENDER OR MARITAL STATUS:'
GENDER ',' MARITAL-STATUS
END-EVALUATE
STOP RUN.
RunJCL :
//IBMUSERX JOB 'MADHU PADALA',MSGLEVEL=(1,1),NOTIFY=&SYSUID
//*
//JOBLIB DD DSN=IBMUSER.SMF.LOADLIB,DISP=SHR
//*
//STPE1 EXEC PGM=NESTEDIF
//SYSOUT DD SYSOUT=*
//SYSIN DD *
E001FD005000000
/*
Output :
EMP-NUM :E001
GENDER :F
MARITAL-STATUS:D
SALARY : 50000.00
BONUS IN NESTED IF METHOD1: 5000.00
BONUS IN NESTED IF METHOD2: 5000.00
BONUS IN NESTED IF METHOD3: 5000.00
BONUS IN EVALUATE METHOD1: 5000.00
BONUS IN EVALUATE METHOD2: 5000.00
BONUS IN EVALUATE METHOD3: 5000.00
35
School of MAINFRAMES Email : schoolofmainframes@gmail.com Ph : 040-64515137
Without Redefines
Purpose : To know how memory is wasted without redefines on mutually exclusive situations.
Requirement : Accept one record on individual agent and one record on corporate agent into the
below layout. Supply spaces to company-name on individual agent and individual-agent-name on
corporate agent.
01 AGENT-REC.
05 AGENT-ID PIC X(04).
05 INDIVIDUAL-AGENT-NAME.
10 FIRST-NAME PIC X(10).
10 LAST-NAME PIC X(10).
05 COMPANY-NAME PIC X(20).
05 AGENT-TYPE PIC X(1).
88 INDIVIDUAL-AGENT VALUE 'I'.
88 CORPORATE-AGENT VALUE 'C'.
05 DOJ PIC X(08).
05 LAST-TRX-DATE PIC X(08).
Note: Memory is wasted for company-name on individual agent and first-name,
last-name on corporate agent. 20 bytes are wasted in each case.
Program :
IDENTIFICATION DIVISION.
PROGRAM-ID. NOREDEF.
AUTHOR. MADHU PADALA.
DATA DIVISION.
WORKING-STORAGE SECTION.
01 AGENT-REC.
05 AGENT-ID PIC X(04).
05 INDIVIDUAL-AGENT-NAME.
10 FIRST-NAME PIC X(10).
10 LAST-NAME PIC X(10).
05 COMPANY-NAME PIC X(20).
05 AGENT-TYPE PIC X(1).
88 INDIVIDUAL-AGENT VALUE 'I'.
88 CORPORATE-AGENT VALUE 'C'.
05 DOJ PIC X(08).
05 LAST-TRX-DATE PIC X(08).
PROCEDURE DIVISION.
ACCEPT AGENT-REC
IF AGENT-TYPE = 'I'
DISPLAY 'FIRST-NAME :' FIRST-NAME ','
'LAST-NAME :' LAST-NAME
ELSE
DISPLAY 'COMPANY-NAME:' COMPANY-NAME
END-IF
ACCEPT AGENT-REC
IF AGENT-TYPE = 'I'
DISPLAY 'FIRST-NAME :' FIRST-NAME ','
'LAST-NAME :' LAST-NAME
ELSE
DISPLAY 'COMPANY-NAME:' COMPANY-NAME
END-IF
STOP RUN.
36
School of MAINFRAMES Email : schoolofmainframes@gmail.com Ph : 040-64515137
RunJCL :
//IBMUSERX JOB 'MADHU PADALA',MSGLEVEL=(1,1),NOTIFY=&SYSUID
//*
//JOBLIB DD DSN=IBMUSER.SMF.LOADLIB,DISP=SHR
//*
//STPE1 EXEC PGM=NOREDEF
//SYSOUT DD SYSOUT=*
//SYSIN DD *
A001HITHA PADALA I2011010520120506
A002 SRIDURGA&CO PVT.LTD C2009050320120817
/*
Output :
FIRST-NAME :HITHA ,LAST-NAME :PADALA
COMPANY-NAME:SRIDURGA&CO PVT.LTD
37
School of MAINFRAMES Email : schoolofmainframes@gmail.com Ph : 040-64515137
With Redefines
Purpose : To know how the memory is saved with redefines on mutually exclusive situations.
Requirement : Accept individual and corporate agent records to the below layout.
01 AGENT-REC.
05 AGENT-ID PIC X(04).
05 INDIVIDUAL-AGENT-NAME.
10 FIRST-NAME PIC X(10).
10 LAST-NAME PIC X(10).
05 COMPANY-NAME REDEFINES INDIVIDUAL-AGENT-NAME PIC X(20).
05 AGENT-TYPE PIC X(1).
88 INDIVIDUAL-AGENT VALUE 'I'.
88 CORPORATE-AGENT VALUE 'C'.
05 DOJ PIC X(08).
05 LAST-TRX-DATE PIC X(08).
Note: Same memory is used for both Individual-agent-name and company-name because these
are mutually exclusive situations.
Program :
IDENTIFICATION DIVISION.
PROGRAM-ID. REDEF.
AUTHOR. MADHU PADALA.
DATA DIVISION.
WORKING-STORAGE SECTION.
01 AGENT-REC.
05 AGENT-ID PIC X(04).
05 INDIVIDUAL-AGENT-NAME.
10 FIRST-NAME PIC X(10).
10 LAST-NAME PIC X(10).
05 COMPANY-NAME REDEFINES INDIVIDUAL-AGENT-NAME PIC X(20).
05 AGENT-TYPE PIC X(1).
88 INDIVIDUAL-AGENT VALUE 'I'.
88 CORPORATE-AGENT VALUE 'C'.
05 DOJ PIC X(08).
05 LAST-TRX-DATE PIC X(08).
PROCEDURE DIVISION.
ACCEPT AGENT-REC
IF AGENT-TYPE = 'I'
DISPLAY 'FIRST-NAME :' FIRST-NAME ','
'LAST-NAME :' LAST-NAME
ELSE
DISPLAY 'COMPANY-NAME:' COMPANY-NAME
END-IF
ACCEPT AGENT-REC
IF AGENT-TYPE = 'I'
DISPLAY 'FIRST-NAME :' FIRST-NAME ','
'LAST-NAME :' LAST-NAME
ELSE
DISPLAY 'COMPANY-NAME:' COMPANY-NAME
END-IF
STOP RUN.
38
School of MAINFRAMES Email : schoolofmainframes@gmail.com Ph : 040-64515137
RunJCL:
//IBMUSERX JOB 'MADHU PADALA',MSGLEVEL=(1,1),NOTIFY=&SYSUID
//*
//JOBLIB DD DSN=IBMUSER.SMF.LOADLIB,DISP=SHR
//*
//STPE1 EXEC PGM=REDEF
//SYSOUT DD SYSOUT=*
//SYSIN DD *
A001HITHA PADALA I2011010520120506
A002SRIDURGA&CO PVT.LTD C2009050320120817
/*
Output :
FIRST-NAME :HITHA ,LAST-NAME :PADALA
COMPANY-NAME:SRIDURGA&CO PVT.LTD
39
School of MAINFRAMES Email : schoolofmainframes@gmail.com Ph : 040-64515137
Program :
IDENTIFICATION DIVISION.
PROGRAM-ID. REDEF1.
AUTHOR. MADHU PADALA.
DATA DIVISION.
WORKING-STORAGE SECTION.
01 WS-DATE1.
05 CC PIC 9(02) VALUE 20.
05 YYMMDD PIC 9(06).
01 WS-DATE2 REDEFINES WS-DATE1.
05 CCYY PIC 9(04).
05 MM PIC 9(02).
05 DD PIC 9(02).
01 WS-DATE3 REDEFINES WS-DATE1 PIC 9(8).
PROCEDURE DIVISION.
ACCEPT YYMMDD FROM DATE
ACCEPT BONUS-PERCENT
MOVE BONUS-PERCENT TO BONUS-EDIT
DISPLAY 'BONUS PECENT:' BONUS-EDIT
MOVE BONUS-RATE TO BONUS-EDIT
DISPLAY 'BONUS RATE :' BONUS-EDIT
STOP RUN.
40
School of MAINFRAMES Email : schoolofmainframes@gmail.com Ph : 040-64515137
RunJCL :
//IBMUSERX JOB 'MADHU PADALA',MSGLEVEL=(1,1),NOTIFY=&SYSUID
//*
//JOBLIB DD DSN=IBMUSER.SMF.LOADLIB,DISP=SHR
//*
//STPE1 EXEC PGM=REDEF1
//SYSOUT DD SYSOUT=*
//SYSIN DD *
03350
/*
Output :
LEAP YEAR
BONUS PECENT: 33.5000
BONUS RATE : 0.3350
41
School of MAINFRAMES Email : schoolofmainframes@gmail.com Ph : 040-64515137
String
Purpose : To show all possible options of STRING verb.
1. Delimited by Size
2. Delimited by spaces or any other character
3. With Pointer
Program :
IDENTIFICATION DIVISION.
PROGRAM-ID. STRING1.
AUTHOR. MADHU PADALA.
ENVIRONMENT DIVISION.
DATA DIVISION.
WORKING-STORAGE SECTION.
01 FULL-NAME.
10 LAST-NAME PIC X(10) VALUE 'EDISON'.
10 MIDDLE-NAME PIC X(10) VALUE 'ALVA'.
10 FIRST-NAME PIC X(10) VALUE 'THOMAS'.
01 NAME-OUT PIC X(21) VALUE SPACES.
01 STR-PTR PIC S9(4) COMP VALUE ZEROS.
PROCEDURE DIVISION.
*DELIMITED BY SIZE
STRING FIRST-NAME DELIMITED BY SIZE,
LAST-NAME DELIMITED BY SIZE
INTO NAME-OUT
DISPLAY 'NAME-OUT:' NAME-OUT
*DELIMITED BY SPACES
MOVE SPACES TO NAME-OUT
STRING FIRST-NAME DELIMITED BY SPACES,
LAST-NAME DELIMITED BY SPACES
INTO NAME-OUT
DISPLAY 'NAME-OUT:' NAME-OUT
42
School of MAINFRAMES Email : schoolofmainframes@gmail.com Ph : 040-64515137
RunJCL :
//IBMUSERX JOB 'MADHU PADALA',MSGLEVEL=(1,1),NOTIFY=&SYSUID
//*
//JOBLIB DD DSN=IBMUSER.SMF.LOADLIB,DISP=SHR
//*
//JS10 EXEC PGM=STRING1
//SYSOUT DD SYSOUT=*
Output :
NAME-OUT:THOMAS EDISON
NAME-OUT:THOMASEDISON
NAME-OUT:THOMAS,EDISON
NAME-OUT:THOMAS,EDISONXXXXXXXX
NAME-OUT: THOMAS,EDISON
43
School of MAINFRAMES Email : schoolofmainframes@gmail.com Ph : 040-64515137
Unstring
Purpose : To show different options of UNSTRING
1. Delimited by spaces or any other character
2. Tallying option to find number of fields received
3. With Pointer
Program :
IDENTIFICATION DIVISION.
PROGRAM-ID. UNSTRG1.
AUTHOR. MADHU PADALA.
ENVIRONMENT DIVISION.
DATA DIVISION.
WORKING-STORAGE SECTION.
01 CUST-ADDRESS2.
05 NAME PIC X(20).
05 HOUSE-NUM PIC X(10).
05 STREET PIC X(20).
05 CITY PIC X(15).
05 PIN-CODE PIC X(11).
PROCEDURE DIVISION.
44
School of MAINFRAMES Email : schoolofmainframes@gmail.com Ph : 040-64515137
* POINTER OPTION
DISPLAY 'BEFORE WS-DATE1:' WS-DATE2
MOVE 6 TO STR-PTR
UNSTRING WS-DATE1 DELIMITED BY '-'
INTO WS-MM, WS-DD
WITH POINTER STR-PTR
DISPLAY 'AFTER WS-DATE1 :' WS-DATE2
* DELIMITED BY COMMA.
ACCEPT CUST-ADDRESS1
UNSTRING CUST-ADDRESS1 DELIMITED BY ','
INTO NAME,
HOUSE-NUM,
STREET,
CITY,
PIN-CODE.
DISPLAY CUST-ADDRESS1
DISPLAY NAME
DISPLAY HOUSE-NUM
DISPLAY STREET
DISPLAY CITY
DISPLAY PIN-CODE.
STOP RUN.
RunJCL :
//IBMUSERX JOB 'MADHU PADALA',MSGLEVEL=(1,1),NOTIFY=&SYSUID
//*
//JOBLIB DD DSN=IBMUSER.SMF.LOADLIB,DISP=SHR
//*
//JS10 EXEC PGM=UNSTRG1
//SYSOUT DD SYSOUT=*
//SYSIN DD *
STEPHEN,102/2A,WALL STREET,NEWYORK,212/646/917
//*
Output:
THOMAS ;ALVA ;EDISON
NAMES RECEIVED:03
JAMES ;CAMAROON ;
NAMES RECEIVED:02
BEFORE WS-DATE1:20101231
AFTER WS-DATE1 :20100115
STEPHEN,102/2A,WALL STREET,NEWYORK,212/646/917
STEPHEN
102/2A
WALL STREET
NEWYORK
212/646/917
45
School of MAINFRAMES Email : schoolofmainframes@gmail.com Ph : 040-64515137
Inspect
Purpose : To show different options in Inspect
1. Tallying to find number of occurrences
2. Replacing to replace one character/string with another character/string
3. Converting to replace a character in CONVERTING set with the corresponding
character in TO set.
Program :
IDENTIFICATION DIVISION.
PROGRAM-ID. INSPECT1.
AUTHOR. MADHU PADALA.
ENVIRONMENT DIVISION.
DATA DIVISION.
WORKING-STORAGE SECTION.
01 WS-ALPHACHARS.
05 ALPHALOWER PIC X(26) VALUE 'abcdefghijklmnopqrstuvwxyz'.
05 ALPHAUPPER PIC X(26) VALUE 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'.
01 CUSTOMER-ADDRESS1.
05 NAME PIC X(15) VALUE 'John cohanburg'.
05 ADD-LINE1 PIC X(15) VALUE 'kennedy street'.
05 ADD-LINE2 PIC X(10) VALUE 'carmel'.
05 ADD-LINE3 PIC X(15) VALUE 'indiana police'.
01 CUSTOMER-ADDRESS2.
05 NAME PIC X(15) VALUE 'JOHN COHANBURG'.
05 ADD-LINE1 PIC X(15) VALUE 'KENNEDY STREET'.
05 ADD-LINE2 PIC X(10) VALUE 'CARMEL'.
05 ADD-LINE3 PIC X(15) VALUE 'INDIANA POLICE'.
PROCEDURE DIVISION.
46
School of MAINFRAMES Email : schoolofmainframes@gmail.com Ph : 040-64515137
STOP RUN.
RunJCL :
//IBMUSERX JOB 'MADHU PADALA',MSGLEVEL=(1,1),NOTIFY=&SYSUID
//*
//JOBLIB DD DSN=IBMUSER.SMF.LOADLIB,DISP=SHR
//*
//JS10 EXEC PGM=INSPECT1
//SYSOUT DD SYSOUT=*
Output :
WS-COUNT:0002
WS-COUNT:0005
BEFORE WS-EMAIL1:HITHA.P~GMAIL.COM
AFTER WS-EMAIL1 :HITHA.P@GMAIL.COM
BEFORE WS-EMAIL2:HITHA.P~GMAIL.COM
AFTER WS-EMAIL2 :HITHA.P@GMAIL.COM
BEFORE CUSTOMER-ADDRESS1:John cohanburg kennedy street carmel indiana police
AFTER CUSTOMER-ADDRESS1 :JOHN COHANBURG KENNEDY STREET CARMEL INDIANA POLICE
BEFORE CUSTOMER-ADDRESS2:JOHN COHANBURG KENNEDY STREET CARMEL INDIANA POLICE
AFTER CUSTOMER-ADDRESS2 :john cohanburg kennedy street carmel indiana police
47
School of MAINFRAMES Email : schoolofmainframes@gmail.com Ph : 040-64515137
Calculator
ENVIRONMENT DIVISION.
DATA DIVISION.
WORKING-STORAGE SECTION.
01 NUM1 PIC 9(3) VALUE ZEROS.
01 NUM2 PIC 9(3) VALUE ZEROS.
01 RESULT1 PIC S9(6) VALUE ZEROS.
01 RESULT2 PIC S9(3)V99 VALUE ZEROS.
01 OPERATION PIC X(1) VALUE SPACES.
01 RESULT1-EDIT PIC ------9.
01 RESULT2-EDIT PIC ---9.99.
PROCEDURE DIVISION.
ACCEPT NUM1
ACCEPT NUM2
ACCEPT OPERATION
EVALUATE OPERATION
WHEN '+'
PERFORM ADD-PARA
WHEN '-'
PERFORM SUB-PARA
WHEN '*'
PERFORM MULT-PARA
COMPUTE RESULT1 = NUM1 * NUM2
WHEN '/'
PERFORM DIV-PARA
COMPUTE RESULT1 = NUM1 / NUM2
WHEN 'A'
PERFORM ADD-PARA THRU DIV-PARA
COMPUTE RESULT1 = NUM1 / NUM2
48
School of MAINFRAMES Email : schoolofmainframes@gmail.com Ph : 040-64515137
WHEN OTHER
DISPLAY 'INVALID OPERATION'
END-EVALUATE
STOP RUN.
ADD-PARA.
COMPUTE RESULT1 = NUM1 + NUM2
MOVE RESULT1 TO RESULT1-EDIT
DISPLAY ' NUM1 + NUM2 = ' RESULT1-EDIT.
SUB-PARA.
COMPUTE RESULT1 = NUM1 - NUM2
MOVE RESULT1 TO RESULT1-EDIT
DISPLAY ' NUM1 - NUM2 = ' RESULT1-EDIT.
MULT-PARA.
COMPUTE RESULT1 = NUM1 * NUM2
MOVE RESULT1 TO RESULT1-EDIT
DISPLAY ' NUM1 * NUM2 = ' RESULT1-EDIT.
DIV-PARA.
COMPUTE RESULT2 = NUM1 / NUM2
MOVE RESULT2 TO RESULT2-EDIT
DISPLAY ' NUM1 / NUM2 = ' RESULT2-EDIT.
RunJCL :
//IBMUSERX JOB 'MADHU PADALA',MSGLEVEL=(1,1),NOTIFY=&SYSUID
//*
//JOBLIB DD DSN=IBMUSER.SMF.LOADLIB,DISP=SHR
//*
//STPE1 EXEC PGM=CALC
//SYSOUT DD SYSOUT=*
//SYSIN DD *
020
030
+
/*
Output :
NUM1:020
NUM2:030
OPERATION:+
NUM1 + NUM2 = 50
49
School of MAINFRAMES Email : schoolofmainframes@gmail.com Ph : 040-64515137
Program :
IDENTIFICATION DIVISION.
PROGRAM-ID. NAMELEN.
AUTHOR. MADHU PADALA.
DATA DIVISION.
WORKING-STORAGE SECTION.
01 WS-COUNT PIC 9(2).
01 WS-NAME PIC X(40).
01 WS-LENTH PIC 9(2).
01 STOP-LOOP PIC X(1).
PROCEDURE DIVISION.
ACCEPT WS-NAME.
MOVE 'N' TO STOP-LOOP.
PERFORM VARYING WS-COUNT FROM 40 BY -1 UNTIL WS-COUNT < 1
OR STOP-LOOP = 'Y'
IF WS-NAME(WS-COUNT:1) > SPACE
MOVE 'Y' TO STOP-LOOP
DISPLAY 'LENTH OF NAME:' WS-COUNT
END-IF
END-PERFORM.
STOP RUN.
RunJCL :
//IBMUSERX JOB 'MADHU PADALA',MSGLEVEL=(1,1),NOTIFY=&SYSUID
//*
//JOBLIB DD DSN=IBMUSER.SMF.LOADLIB,DISP=SHR
//*
//STPE1 EXEC PGM=NAMELEN
//SYSOUT DD SYSOUT=*
//SYSIN DD *
STEPHEN SPEELBERG
/*
Output :
LENTH OF NAME:17
50
School of MAINFRAMES Email : schoolofmainframes@gmail.com Ph : 040-64515137
Date Validation
Purpose : To know about
1. How to use perform paragraphs with THRU option.
2. How to jump to the exit para when the succeeding logic is not required.
3. How to execute the same statement for multiple WHEN conditions.
4. How to use IS NUMERIC to find the data is numeric or not
5. How to use Divide verb with remainder option to find leap year or not
6. How to set and reset a switch
Requirement : Accept date from sysin and validate it.
Program :
IDENTIFICATION DIVISION.
PROGRAM-ID. DATEVAL1.
AUTHOR. MADHU PADALA.
ENVIRONMENT DIVISION.
DATA DIVISION.
WORKING-STORAGE SECTION.
01 WS-QUOTIENT PIC S9(4) COMP VALUE ZEROS.
01 WS-REMAINDER PIC S9(4) COMP VALUE ZEROS.
01 WS-DATE.
05 CCYY PIC 9(4).
05 MM PIC 9(2).
05 DD PIC 9(2).
PROCEDURE DIVISION.
ACCEPT WS-DATE
DISPLAY WS-DATE
MOVE 'Y' TO WS-IND
STOP RUN.
100000-DATE-VALIDATION.
IF WS-DATE IS NUMERIC
CONTINUE
ELSE
MOVE 'N' TO WS-IND
DISPLAY 'DATE IS NOT NUMERIC'
GO TO 100000-EXIT
END-IF
51
School of MAINFRAMES Email : schoolofmainframes@gmail.com Ph : 040-64515137
RunJCL :
//IBMUSERX JOB 'MADHU PADALA',MSGLEVEL=(1,1),NOTIFY=&SYSUID
//*
//JOBLIB DD DSN=IBMUSER.SMF.LOADLIB,DISP=SHR
//*
//JS10 EXEC PGM=DATEVAL1
//SYSOUT DD SYSOUT=*
//SYSIN DD *
20080606
/*
Output :
20080606
DATE IS VALID
52
School of MAINFRAMES Email : schoolofmainframes@gmail.com Ph : 040-64515137
Diamond
ENVIRONMENT DIVISION.
DATA DIVISION.
WORKING-STORAGE SECTION.
01 STARS-FIELD PIC X(81) VALUE SPACES.
01 DIAMOND-SIZE PIC 9(2) VALUE 0.
01 MIDDLE-OF-DIAMOND PIC 9(2) VALUE 0.
01 I PIC 9(4) VALUE 0.
01 J PIC 9(4) VALUE 0.
01 LEFT-LIMIT PIC 9(4) VALUE 0.
01 RIGHT-LIMIT PIC 9(6) VALUE 0.
PROCEDURE DIVISION.
ACCEPT DIAMOND-SIZE
IF I < MIDDLE-OF-DIAMOND
SUBTRACT 1 FROM LEFT-LIMIT
ADD 1 TO RIGHT-LIMIT
ELSE
ADD 1 TO LEFT-LIMIT
SUBTRACT 1 FROM RIGHT-LIMIT
END-IF
END-PERFORM.
STOP RUN.
53
School of MAINFRAMES Email : schoolofmainframes@gmail.com Ph : 040-64515137
RunJCL:
//IBMUSERX JOB 'MADHU PADALA',MSGLEVEL=(1,1),NOTIFY=&SYSUID
//*
//JOBLIB DD DSN=IBMUSER.SMF.LOADLIB,DISP=SHR
//*
//JS10 EXEC PGM=DIAMOND
//SYSOUT DD SYSOUT=*
//SYSIN DD *
21
/*
//*ENTER DIAMOND SIZE FROM 03 TO 81
54
School of MAINFRAMES Email : schoolofmainframes@gmail.com Ph : 040-64515137
Infinite loop
Purpose : To know how to generate S322 abend.
Requirement : Execute a loop that goes to an infinite loop and check the EXPN-CNT and CPU
% in the DA of the SPOOL while the job is executing.
If EXPN-CNT is unchanged and CPU% is high then it indicates infinite loop.
Program :
IDENTIFICATION DIVISION.
PROGRAM-ID. INFINITE.
AUTHOR. MADHU PADALA.
ENVIRONMENT DIVISION.
DATA DIVISION.
WORKING-STORAGE SECTION.
01 I PIC 9(1).
01 A PIC X(1).
01 B PIC X(1).
PROCEDURE DIVISION.
RunJCL :
//IBMUSERX JOB 'MADHU PADALA',MSGLEVEL=(1,1),NOTIFY=&SYSUID
//*
//JOBLIB DD DSN=IBMUSER.SMF.LOADLIB,DISP=SHR
//*
//JS10 EXEC PGM=INFINITE
//SYSOUT DD SYSOUT=*
55
School of MAINFRAMES Email : schoolofmainframes@gmail.com Ph : 040-64515137
Reverse a String
Purpose : To know about
1. How to use inline perform to scan the string from back to front
2. How to use reference modification to handle single character of a string
Requirement : Accept a string from SYSIN, then display string and reverse of a string.
Program :
IDENTIFICATION DIVISION.
PROGRAM-ID. REVSTR.
AUTHOR. MADHU PADALA.
DATA DIVISION.
WORKING-STORAGE SECTION.
01 STR1 PIC X(20).
01 STR2 PIC X(20).
01 I PIC 9(2).
01 J PIC 9(2) VALUE 20.
01 K PIC 9(2) VALUE 20.
PROCEDURE DIVISION.
ACCEPT STR1.
DISPLAY 'STRING :' STR1.
STOP RUN.
RunJCL :
//IBMUSERX JOB 'MADHU PADALA',MSGLEVEL=(1,1),NOTIFY=&SYSUID
//*
//JOBLIB DD DSN=IBMUSER.SMF.LOADLIB,DISP=SHR
//*
//JS10 EXEC PGM=REVSTR
//SYSOUT DD SYSOUT=*
//SYSIN DD *
SCHOOL OF MAINFRAMES
/*
Output :
STRING :SCHOOL OF MAINFRAMES
REVERSE STRING:SEMARFNIAM FO LOOHCS
56
School of MAINFRAMES Email : schoolofmainframes@gmail.com Ph : 040-64515137
Program :
IDENTIFICATION DIVISION.
PROGRAM-ID. OCCUR1.
AUTHOR. MADHU PADALA.
ENVIRONMENT DIVISION.
DATA DIVISION.
WORKING-STORAGE SECTION.
01 I PIC S9(4) COMP VALUE ZEROS.
01 PRODUCT-DETAILS.
05 PRODUCT-TABLE OCCURS 5 TIMES.
10 PRODUCT-CODE PIC X(2).
10 PRODUCT-PRICE PIC 9(3)V99.
PROCEDURE DIVISION.
STOP RUN.
RunJCL :
//IBMUSERX JOB 'MADHU PADALA',MSGLEVEL=(1,1),NOTIFY=&SYSUID
//*
//JOBLIB DD DSN=IBMUSER.SMF.LOADLIB,DISP=SHR
//*
//JS10 EXEC PGM=OCCUR1
//SYSOUT DD SYSOUT=*
//SYSIN DD *
P110000
P230000
P320000
P430000
P540000
/*
Output :
P1,10000
P2,30000
P3,20000
P4,30000
P5,40000
57
School of MAINFRAMES Email : schoolofmainframes@gmail.com Ph : 040-64515137
Program :
IDENTIFICATION DIVISION.
PROGRAM-ID. OCCUR2.
AUTHOR. MADHU PADALA.
ENVIRONMENT DIVISION.
DATA DIVISION.
WORKING-STORAGE SECTION.
01 I PIC S9(4) COMP VALUE ZEROS.
01 PRODUCT-FOUND PIC X(1) VALUE 'N'.
01 PRODUCT-PRICE-EDIT PIC 9(3).99.
01 PRODUCT-DETAILS.
05 PRODUCT-TABLE OCCURS 5 TIMES.
10 PRODUCT-CODE PIC X(2).
10 PRODUCT-PRICE PIC 9(3)V99.
LINKAGE SECTION.
01 LS-VAR.
05 LS-LENGTH PIC S9(4) COMP.
05 LS-PRODUCT-CODE PIC X(2).
IF PRODUCT-FOUND = 'N'
DISPLAY 'PRODUCT NOT FOUND'
END-IF
STOP RUN.
58
School of MAINFRAMES Email : schoolofmainframes@gmail.com Ph : 040-64515137
RunJCL :
//IBMUSERX JOB 'MADHU PADALA',MSGLEVEL=(1,1),NOTIFY=&SYSUID
//*
//JOBLIB DD DSN=IBMUSER.SMF.LOADLIB,DISP=SHR
//*
//JS10 EXEC PGM=OCCUR2,PARM=(P3)
//SYSOUT DD SYSOUT=*
//SYSIN DD *
P110000
P230000
P320000
P430000
P540000
/*
Output :
PARM PRODUCT OCDE IS:P3
PRODUCT PRICE IS :200.00
59
School of MAINFRAMES Email : schoolofmainframes@gmail.com Ph : 040-64515137
Program :
IDENTIFICATION DIVISION.
PROGRAM-ID. OCCUR3.
AUTHOR. MADHU PADALA.
ENVIRONMENT DIVISION.
DATA DIVISION.
WORKING-STORAGE SECTION.
01 PRODUCT-PRICE-EDIT PIC 9(3).99.
01 PRODUCT-FOUND PIC X(1) VALUE 'N'.
01 PRODUCT-DETAILS.
05 PRODUCT-TABLE OCCURS 5 TIMES INDEXED BY I.
10 PRODUCT-CODE PIC X(2).
10 PRODUCT-PRICE PIC 9(3)V99.
LINKAGE SECTION.
01 LS-VAR.
05 LS-LENGTH PIC S9(4) COMP.
05 LS-PRODUCT-CODE PIC X(2).
SET I TO 1
SEARCH PRODUCT-TABLE
AT END
DISPLAY 'PRODUCT NOT FOUND:'
WHEN PRODUCT-CODE(I) = LS-PRODUCT-CODE
MOVE PRODUCT-PRICE(I) TO PRODUCT-PRICE-EDIT
DISPLAY 'PRODUCT PRICE IS :' PRODUCT-PRICE-EDIT.
STOP RUN.
60
School of MAINFRAMES Email : schoolofmainframes@gmail.com Ph : 040-64515137
RunJCL :
//IBMUSERX JOB 'MADHU PADALA',MSGLEVEL=(1,1),NOTIFY=&SYSUID
//*
//JOBLIB DD DSN=IBMUSER.SMF.LOADLIB,DISP=SHR
//*
//JS10 EXEC PGM=OCCUR3,PARM=(P3)
//SYSOUT DD SYSOUT=*
//SYSIN DD *
P110000
P230000
P320000
P430000
P540000
/*
Output :
PARM PRODUCT CODE IS:P3
PRODUCT PRICE IS :200.00
61
School of MAINFRAMES Email : schoolofmainframes@gmail.com Ph : 040-64515137
Program :
IDENTIFICATION DIVISION.
PROGRAM-ID. OCCUR4.
AUTHOR. MADHU PADALA.
ENVIRONMENT DIVISION.
DATA DIVISION.
WORKING-STORAGE SECTION.
01 PRODUCT-PRICE-EDIT PIC 9(3).99.
01 PRODUCT-FOUND PIC X(1) VALUE 'N'.
01 PRODUCT-DETAILS.
05 PRODUCT-TABLE OCCURS 5 TIMES ASCENDING KEY IS PRODUCT-CODE
INDEXED BY I.
10 PRODUCT-CODE PIC X(2).
10 PRODUCT-PRICE PIC 9(3)V99.
LINKAGE SECTION.
01 LS-VAR.
05 LS-LENGTH PIC S9(4) COMP.
05 LS-PRODUCT-CODE PIC X(2).
STOP RUN.
62
School of MAINFRAMES Email : schoolofmainframes@gmail.com Ph : 040-64515137
RunJCL :
//IBMUSERX JOB 'MADHU PADALA',MSGLEVEL=(1,1),NOTIFY=&SYSUID
//*
//JOBLIB DD DSN=IBMUSER.SMF.LOADLIB,DISP=SHR
//*
//JS10 EXEC PGM=OCCUR4,PARM=(P3)
//SYSOUT DD SYSOUT=*
//SYSIN DD *
P110000
P230000
P320000
P430000
P540000
/*
Output :
PARM PRODUCT CODE IS:P3
PRODUCT PRICE IS :200.00
63
School of MAINFRAMES Email : schoolofmainframes@gmail.com Ph : 040-64515137
Program :
IDENTIFICATION DIVISION.
PROGRAM-ID. OCCUR5.
AUTHOR. MADHU PADALA.
ENVIRONMENT DIVISION.
DATA DIVISION.
WORKING-STORAGE SECTION.
01 PRODUCT-PRICE-EDIT PIC 9(3).99.
01 PRODUCT-FOUND PIC X(1) VALUE 'N'.
01 PRODUCT-DETAILS.
05 STATE-TABLE OCCURS 3 TIMES INDEXED BY I.
10 STATE-CODE PIC X(2).
10 PRODUCT-TABLE OCCURS 5 TIMES INDEXED BY J.
15 PRODUCT-CODE PIC X(2).
15 PRODUCT-PRICE PIC 9(3)V99.
LINKAGE SECTION.
01 LS-VAR.
05 LS-LENGTH PIC S9(4) COMP.
05 LS-STATE-CODE PIC X(2).
05 LS-PRODUCT-CODE PIC X(2).
SET I TO 1
SEARCH STATE-TABLE
AT END
DISPLAY 'STATE NOT FOUND:'
WHEN STATE-CODE(I) = LS-STATE-CODE
SET J TO 1
SEARCH PRODUCT-TABLE
AT END
DISPLAY 'PRODUCT NOT FOUND:'
64
School of MAINFRAMES Email : schoolofmainframes@gmail.com Ph : 040-64515137
STOP RUN.
RunJCL :
//IBMUSERX JOB 'MADHU PADALA',MSGLEVEL=(1,1),NOTIFY=&SYSUID
//*
//JOBLIB DD DSN=IBMUSER.SMF.LOADLIB,DISP=SHR
//*
//JS10 EXEC PGM=OCCUR5,PARM=(KAP3)
//SYSOUT DD SYSOUT=*
//SYSIN DD *
AP
P110000
P230000
P320000
P430000
P540000
KA
P112500
P235000
P321000
P430000
P540000
TN
P112500
P230000
P320000
P431500
P540000
/*
Output :
STATE CODE IS:KA
PRODUCT CODE IS:P3
PRODUCT PRICE IS :210.00
65
School of MAINFRAMES Email : schoolofmainframes@gmail.com Ph : 040-64515137
Recurring Search
Program :
IDENTIFICATION DIVISION.
PROGRAM-ID. OCCUR6.
AUTHOR. MADHU PADALA.
ENVIRONMENT DIVISION.
DATA DIVISION.
WORKING-STORAGE SECTION.
01 PRODUCT-COUNT PIC S9(4) COMP VALUE ZEROS.
01 STOP-LOOP PIC X(1) VALUE 'N'.
01 PRODUCT-PRICE-EDIT PIC 9(3).99.
01 PRODUCT-DETAILS.
05 PRODUCT-TABLE OCCURS 10 TIMES INDEXED BY I.
10 PRODUCT-CODE PIC X(2).
10 PRODUCT-PRICE PIC 9(3)V99.
LINKAGE SECTION.
01 LS-VAR.
05 LS-LENGTH PIC S9(4) COMP.
05 LS-PRODUCT-PRICE PIC 9(3)V99.
SET I TO 1
PERFORM UNTIL STOP-LOOP = 'Y'
SEARCH PRODUCT-TABLE
AT END
MOVE 'Y' TO STOP-LOOP
WHEN PRODUCT-PRICE(I) >= LS-PRODUCT-PRICE
MOVE PRODUCT-PRICE(I) TO PRODUCT-PRICE-EDIT
DISPLAY PRODUCT-CODE(I) ',' PRODUCT-PRICE-EDIT
ADD +1 TO PRODUCT-COUNT
SET I UP BY 1
END-SEARCH
END-PERFORM
DISPLAY 'TOTAL PRODUCTS >= PRODUCT PRICE ARE:' PRODUCT-COUNT
STOP RUN.
66
School of MAINFRAMES Email : schoolofmainframes@gmail.com Ph : 040-64515137
RunJCL :
//IBMUSERX JOB 'MADHU PADALA',MSGLEVEL=(1,1),NOTIFY=&SYSUID
//*
//JOBLIB DD DSN=IBMUSER.SMF.LOADLIB,DISP=SHR
//*
//JS10 EXEC PGM=OCCUR6,PARM=(30000)
//SYSOUT DD SYSOUT=*
//SYSIN DD *
P110000
P225000
P320000
P430000
P540000
P610000
P730000
P825000
P930000
PA40000
/*
Output :
PRODUCT PRICE IS:300.00
P4,300.00
P5,400.00
P7,300.00
P9,300.00
PA,400.00
TOTAL PRODUCTS >= PRODUCT PRICE ARE:0005
67
School of MAINFRAMES Email : schoolofmainframes@gmail.com Ph : 040-64515137
Bubble Sort
Program :
IDENTIFICATION DIVISION.
PROGRAM-ID. BUBLESRT.
AUTHOR. MADHU PADALA.
ENVIRONMENT DIVISION.
DATA DIVISION.
WORKING-STORAGE SECTION.
01 I PIC S9(4) COMP VALUE ZEROS.
01 J PIC S9(4) COMP VALUE ZEROS.
01 SWAP-DONE PIC X(1) VALUE 'Y'.
01 WS-TEMP PIC X(2) VALUE SPACES.
01 FILLER.
05 TBL PIC X(2) OCCURS 5 TIMES.
PROCEDURE DIVISION.
STOP RUN.
68
School of MAINFRAMES Email : schoolofmainframes@gmail.com Ph : 040-64515137
RunJCL :
//IBMUSERX JOB 'MADHU PADALA',MSGLEVEL=(1,1),NOTIFY=&SYSUID
//*
//JOBLIB DD DSN=IBMUSER.SMF.LOADLIB,DISP=SHR
//*
//JS10 EXEC PGM=BUBLESRT
//SYSOUT DD SYSOUT=*
//SYSIN DD *
P5
P2
P1
P4
P3
/*
Output :
ELEMENTS BEFORE SORT
P5
P2
P1
P4
P3
ELEMENTS AFTER SORT
P1
P2
P3
P4
P5
69
School of MAINFRAMES Email : schoolofmainframes@gmail.com Ph : 040-64515137
Fibonacci Series
Program :
IDENTIFICATION DIVISION.
PROGRAM-ID. FIBONACI.
AUTHOR. MADHU PADALA.
ENVIRONMENT DIVISION.
DATA DIVISION.
WORKING-STORAGE SECTION.
01 A PIC S9(4) COMP VALUE 0.
01 B PIC S9(4) COMP VALUE 1.
01 I PIC S9(4) COMP VALUE ZEROS.
01 FIBONACCI-SERIES.
05 J-EDIT PIC ZZZZ9 OCCURS 1 TO 20 TIMES DEPENDING ON LS-K.
LINKAGE SECTION.
01 LS-VAR.
05 LS-LEN PIC S9(4) COMP.
05 LS-K PIC 9(2).
IF LS-K > 20
MOVE 20 TO LS-K
DISPLAY 'ENTER PARM VALUE LESS THAN 20'
END-IF
MOVE A TO J-EDIT(1)
MOVE B TO J-EDIT(2)
RunJCL :
//IBMUSERX JOB 'MADHU PADALA',MSGLEVEL=(1,1),NOTIFY=&SYSUID
//*
//JOBLIB DD DSN=IBMUSER.SMF.LOADLIB,DISP=SHR
//*
//JS10 EXEC PGM=FIBONACI,PARM=(09)
//SYSOUT DD SYSOUT=*
Output :
0 1 1 2 3 5 8 13 21
70
School of MAINFRAMES Email : schoolofmainframes@gmail.com Ph : 040-64515137
Main Program :
IDENTIFICATION DIVISION.
PROGRAM-ID. MAIN1.
AUTHOR. MADHU PADALA.
ENVIRONMENT DIVISION.
DATA DIVISION.
WORKING-STORAGE SECTION.
01 WS-DATE.
05 CCYY PIC 9(4).
05 MM PIC 9(2).
05 DD PIC 9(2).
01 WS-IND PIC X(1) VALUE SPACES.
PROCEDURE DIVISION.
ACCEPT WS-DATE
DISPLAY 'WS-DATE:' WS-DATE
STOP RUN.
71
School of MAINFRAMES Email : schoolofmainframes@gmail.com Ph : 040-64515137
Sub Program :
IDENTIFICATION DIVISION.
PROGRAM-ID. DATEVAL.
AUTHOR. MADHU PADALA.
ENVIRONMENT DIVISION.
DATA DIVISION.
WORKING-STORAGE SECTION.
01 WS-QUOTIENT PIC 9(1) VALUE ZEROS.
01 WS-REMAINDER PIC 9(4) VALUE ZEROS.
LINKAGE SECTION.
01 LS-DATE.
05 CCYY PIC 9(4).
05 MM PIC 9(2).
05 DD PIC 9(2).
01 LS-IND PIC X(1).
100000-VAL-DATE.
IF LS-DATE IS NUMERIC
CONTINUE
ELSE
MOVE 'N' TO LS-IND
GO TO 100000-EXIT
END-IF
72
School of MAINFRAMES Email : schoolofmainframes@gmail.com Ph : 040-64515137
WHEN 04
WHEN 06
WHEN 09
WHEN 11
IF DD >= 1 AND <= 30
CONTINUE
ELSE
MOVE 'N' TO LS-IND
END-IF
WHEN 02
IF WS-REMAINDER = 0
IF DD >= 1 AND <= 29
CONTINUE
ELSE
MOVE 'N' TO LS-IND
END-IF
ELSE
IF DD >= 1 AND <= 28
CONTINUE
ELSE
MOVE 'N' TO LS-IND
END-IF
END-IF
END-EVALUATE.
100000-EXIT.
EXIT.
RunJCL :
//IBMUSERX JOB 'MADHU PADALA',MSGLEVEL=(1,1),NOTIFY=&SYSUID
//*
//JOBLIB DD DSN=IBMUSER.SMF.LOADLIB,DISP=SHR
//*
//JS10 EXEC PGM=MAIN1
//SYSOUT DD SYSOUT=*
//SYSIN DD *
20080229
/*
Output :
WS-DATE:20080229
DATE IS VALID
73
School of MAINFRAMES Email : schoolofmainframes@gmail.com Ph : 040-64515137
Requirement : Accept date from sysin into main program and then call a sub-program to validate
the date. Display whether the date is valid or not in the main program.
Use the same date validation program DATEVAL created for MAIN1.
Note: Use a separate load library for sub-program and main program for better clarity.
Main Program :
IDENTIFICATION DIVISION.
PROGRAM-ID. MAIN2.
AUTHOR. MADHU PADALA.
ENVIRONMENT DIVISION.
DATA DIVISION.
WORKING-STORAGE SECTION.
01 WS-DATEVAL PIC X(8) VALUE 'DATEVAL'.
01 WS-DATE.
05 CCYY PIC 9(4).
05 MM PIC 9(2).
05 DD PIC 9(2).
01 WS-IND PIC X(1) VALUE SPACES.
PROCEDURE DIVISION.
ACCEPT WS-DATE
DISPLAY 'WS-DATE:' WS-DATE
STOP RUN.
RunJCL :
//IBMUSERX JOB 'MADHU PADALA',MSGLEVEL=(1,1),NOTIFY=&SYSUID
//*
//JOBLIB DD DSN=IBMUSER.SMF.LOADLIB,DISP=SHR
//*
//JS10 EXEC PGM=MAIN2
//SYSOUT DD SYSOUT=*
//SYSIN DD *
20080229
/*
Output :
WS-DATE:20080229
DATE IS VALID
74
School of MAINFRAMES Email : schoolofmainframes@gmail.com Ph : 040-64515137
Requirement : Write a future date sub-program to increment the data passed from main program.
Accept date from sysin into main program then call a sub-program to validate the date. If it is a
valid date then call another sub-program to get the future date. Display the date and its future
date. Use the same date validation sub-program that is created for MAIN1.
Main Program :
IDENTIFICATION DIVISION.
PROGRAM-ID. MAIN3.
AUTHOR. MADHU PADALA.
ENVIRONMENT DIVISION.
DATA DIVISION.
WORKING-STORAGE SECTION.
01 WS-DATE PIC 9(8).
01 WS-FUT-DATE PIC 9(8).
01 WS-IND PIC X(1) VALUE SPACES.
PROCEDURE DIVISION.
ACCEPT WS-DATE
DISPLAY 'WS-DATE :' WS-DATE
Sub Program :
IDENTIFICATION DIVISION.
PROGRAM-ID. FUTDATE.
AUTHOR. MADHU PADALA.
ENVIRONMENT DIVISION.
DATA DIVISION.
WORKING-STORAGE SECTION.
01 WS-REMAINDER PIC 9(1).
01 WS-QUOTIENT PIC 9(4).
LINKAGE SECTION.
01 LS-DATE PIC 9(8).
01 LS-FUTURE-DATE.
05 CCYY PIC 9(4).
05 MM PIC 9(2).
05 DD PIC 9(2).
75
School of MAINFRAMES Email : schoolofmainframes@gmail.com Ph : 040-64515137
100000-VAL-DATE.
DIVIDE CCYY BY 4 GIVING WS-QUOTIENT
REMAINDER WS-REMAINDER
ADD 1 TO DD
EVALUATE MM
WHEN 01
WHEN 03
WHEN 05
WHEN 07
WHEN 08
WHEN 10
IF DD > 31
ADD 1 TO MM
MOVE 1 TO DD
END-IF
WHEN 04
WHEN 06
WHEN 09
WHEN 11
IF DD > 30
ADD 1 TO MM
MOVE 1 TO DD
END-IF
WHEN 02
IF WS-REMAINDER = 0
IF DD > 29
ADD 1 TO MM
MOVE 1 TO DD
END-IF
ELSE
IF DD > 28
ADD 1 TO MM
MOVE 1 TO DD
END-IF
END-IF
WHEN 12
IF DD > 31
ADD 1 TO MM
MOVE 1 TO DD
END-IF
IF MM > 12
MOVE 1 TO MM
ADD 1 TO CCYY
END-IF
END-EVALUATE.
100000-EXIT.
EXIT.
76
School of MAINFRAMES Email : schoolofmainframes@gmail.com Ph : 040-64515137
RunJCL :
//IBMUSERX JOB 'MADHU PADALA',MSGLEVEL=(1,1),NOTIFY=&SYSUID
//*
//JOBLIB DD DSN=IBMUSER.SMF.LOADLIB,DISP=SHR
//*
//JS10 EXEC PGM=MAIN3
//SYSOUT DD SYSOUT=*
//SYSIN DD *
20080229
/*
Output :
WS-DATE:20080229
WS-FUT-DATE:20080301
77
School of MAINFRAMES Email : schoolofmainframes@gmail.com Ph : 040-64515137
Write a File
Purpose : To know how to declare a file in the COBOL program and how to relate it in the
JCL.
Requirement : Accept each record from SYSIN and write into a file.
Program :
IDENTIFICATION DIVISION.
PROGRAM-ID. ACPTWRT.
AUTHOR. MADHU PADALA.
ENVIRONMENT DIVISION.
INPUT-OUTPUT SECTION.
FILE-CONTROL.
DATA DIVISION.
FILE SECTION.
FD EMP-FILE
RECORDING MODE IS F
RECORD CONTAINS 32 CHARACTERS
BLOCK CONTAINS 320 CHARACTERS.
01 EMP-REC.
05 EMP-NUM PIC X(04).
05 EMP-NAME PIC X(10).
05 EMP-STATUS PIC X(1).
05 EMP-DOJ PIC X(8).
05 EMP-SALARY PIC 9(7)V99.
WORKING-STORAGE SECTION.
01 WS-OUT-STATUS PIC X(2).
PROCEDURE DIVISION.
PERFORM 10 TIMES
ACCEPT EMP-REC
WRITE EMP-REC
END-PERFORM
CLOSE EMP-FILE
STOP RUN.
78
School of MAINFRAMES Email : schoolofmainframes@gmail.com Ph : 040-64515137
RunJCL :
//IBMUSERX JOB 'MADHU PADALA',MSGLEVEL=(1,1),NOTIFY=&SYSUID
//*
//JOBLIB DD DSN=IBMUSER.SMF.LOADLIB,DISP=SHR
//*
//JS10 EXEC PGM=IEFBR14
//DD1 DD DSN=IBMUSER.SMF.EMPFILE,
// DISP=(MOD,DELETE,DELETE),
// SPACE=(CYL,(1,1),RLSE)
//*
//JS20 EXEC PGM=ACPTWRT
//SYSOUT DD SYSOUT=*
//*
//EMPFILE DD DSN=IBMUSER.SMF.EMPFILE,
// DISP=(NEW,CATLG,DELETE),
// UNIT=SYSDA,
// SPACE=(TRK,(1,1),RLSE),
// DCB=(RECFM=FB,LRECL=32,BLKSIZE=0)
//SYSIN DD *
E001DAVID A20050421005000000
E002MURRAY T20060310007000000
E003LARA A20070623004500000
E004STEPHEN T20070325005300000
E005NICOLAS T20080212004700000
E006LEE A20080512005630000
E007RAM T20090621004850000
E008SYAM A20100506003900000
E009MEENA A20100421003800000
E010LAASYA A20110312005700000
/*
Output :
IBMUSER.SMF.EMPFILE
E001DAVID A20050421005000000
E002MURRAY T20060310007000000
E003LARA A20070623004500000
E004STEPHEN T20070325005300000
E005NICOLAS T20080212004700000
E006LEE A20080512005630000
E007RAM T20090621004850000
E008SYAM A20100506003900000
E009MEENA A20100421003800000
E010LAASYA A20110312005700000
79
School of MAINFRAMES Email : schoolofmainframes@gmail.com Ph : 040-64515137
Read a File
Purpose : To know how to declare a file in the COBOL program and how to relate it in the
JCL.To know how to read input file.
Requirement : Take the output file of ACPTWRT as input then Read and display all records.
Program :
IDENTIFICATION DIVISION.
PROGRAM-ID. READDISP.
AUTHOR. MADHU PADALA.
ENVIRONMENT DIVISION.
INPUT-OUTPUT SECTION.
FILE-CONTROL.
DATA DIVISION.
FILE SECTION.
FD EMP-FILE
RECORDING MODE IS F
RECORD CONTAINS 32 CHARACTERS
BLOCK CONTAINS 320 CHARACTERS.
01 EMP-REC.
05 EMP-NUM PIC X(04).
05 EMP-NAME PIC X(10).
05 EMP-STATUS PIC X(1).
05 EMP-DOJ PIC X(8).
05 EMP-SALARY PIC 9(7)V99.
WORKING-STORAGE SECTION.
01 WS-IN-STATUS PIC X(2).
PROCEDURE DIVISION.
CLOSE EMP-FILE
STOP RUN.
80
School of MAINFRAMES Email : schoolofmainframes@gmail.com Ph : 040-64515137
RunJCL :
//IBMUSERX JOB 'MADHU PADALA',MSGLEVEL=(1,1),NOTIFY=&SYSUID
//*
//JOBLIB DD DSN=IBMUSER.SMF.LOADLIB,DISP=SHR
//*
//JS20 EXEC PGM=READDISP
//SYSOUT DD SYSOUT=*
//*
//EMPFILE DD DSN=IBMUSER.SMF.EMPFILE,DISP=SHR
Input File:
IBMUSER.SMF.EMPFILE
E001DAVID A20050421005000000
E002MURRAY T20060310007000000
E003LARA A20070623004500000
E004STEPHEN T20070325005300000
E005NICOLAS T20080212004700000
E006LEE A20080512005630000
E007RAM T20090621004850000
E008SYAM A20100506003900000
E009MEENA A20100421003800000
E010LAASYA A20110312005700000
Output :
E001DAVID A20050421005000000
E002MURRAY T20060310007000000
E003LARA A20070623004500000
E004STEPHEN T20070325005300000
E005NICOLAS T20080212004700000
E006LEE A20080512005630000
E007RAM T20090621004850000
E008SYAM A20100506003900000
E009MEENA A20100421003800000
E010LAASYA A20110312005700000
81
School of MAINFRAMES Email : schoolofmainframes@gmail.com Ph : 040-64515137
Program :
IDENTIFICATION DIVISION.
PROGRAM-ID. READ1.
AUTHOR. MADHU PADALA.
ENVIRONMENT DIVISION.
INPUT-OUTPUT SECTION.
FILE-CONTROL.
DATA DIVISION.
FILE SECTION.
FD EMP-FILE
RECORDING MODE IS F
RECORD CONTAINS 32 CHARACTERS
BLOCK CONTAINS 320 CHARACTERS.
01 EMP-REC.
05 EMP-NUM PIC X(04).
05 EMP-NAME PIC X(10).
05 EMP-STATUS PIC X(1).
05 EMP-DOJ PIC X(8).
05 EMP-SALARY PIC 9(7)V99.
FD OUT-FILE
RECORDING MODE IS F
RECORD CONTAINS 23 CHARACTERS
BLOCK CONTAINS 230 CHARACTERS.
82
School of MAINFRAMES Email : schoolofmainframes@gmail.com Ph : 040-64515137
01 OUT-REC.
05 OUT-EMP-NUM PIC X(04).
05 OUT-EMP-NAME PIC X(10).
05 OUT-EMP-SALARY PIC 9(7)V99.
WORKING-STORAGE SECTION.
01 WS-IN-STATUS PIC X(2).
01 WS-OUT-STATUS PIC X(2).
PROCEDURE DIVISION.
RunJCL :
//IBMUSERX JOB 'MADHU PADALA',MSGLEVEL=(1,1),NOTIFY=&SYSUID
//*
//JOBLIB DD DSN=IBMUSER.SMF.LOADLIB,DISP=SHR
//*
//JS10 EXEC PGM=IEFBR14
//DD1 DD DSN=IBMUSER.SMF.READ1.OUT,
// DISP=(MOD,DELETE,DELETE),
// SPACE=(CYL,(1,1),RLSE)
//*
//JS20 EXEC PGM=READ1
//SYSOUT DD SYSOUT=*
//*
//EMPFILE DD DSN=IBMUSER.SMF.EMPFILE,DISP=SHR
//OUTFILE DD DSN=IBMUSER.SMF.READ1.OUT,
// DISP=(NEW,CATLG,DELETE),
// UNIT=SYSDA,
// SPACE=(TRK,(1,1),RLSE),
// DCB=(RECFM=FB,LRECL=23,BLKSIZE=0)
//*
Output :
IBMUSER.SMF.READ1.OUT
E001DAVID 005000000
E003LARA 004500000
E006LEE 005630000
E008SYAM 003900000
E009MEENA 003800000
E010LAASYA 005700000
83
School of MAINFRAMES Email : schoolofmainframes@gmail.com Ph : 040-64515137
Requirement : Read emp-file and write active employees into output file with few fields of
input. See the layouts of input and output files in the program.
Program :
IDENTIFICATION DIVISION.
PROGRAM-ID. READ2.
AUTHOR. MADHU PADALA.
ENVIRONMENT DIVISION.
INPUT-OUTPUT SECTION.
FILE-CONTROL.
DATA DIVISION.
FILE SECTION.
FD EMP-FILE
RECORDING MODE IS F
RECORD CONTAINS 32 CHARACTERS
BLOCK CONTAINS 320 CHARACTERS.
01 EMP-REC.
05 EMP-NUM PIC X(04).
05 EMP-NAME PIC X(10).
05 EMP-STATUS PIC X(1).
05 EMP-DOJ PIC X(1).
05 EMP-SALARY PIC 9(7)V99.
FD OUT-FILE
RECORDING MODE IS F
RECORD CONTAINS 23 CHARACTERS
BLOCK CONTAINS 230 CHARACTERS.
01 OUT-REC.
05 OUT-EMP-NUM PIC X(04).
05 OUT-EMP-NAME PIC X(10).
05 OUT-EMP-SALARY PIC 9(7)V99.
WORKING-STORAGE SECTION.
01 WS-IN-STATUS PIC X(2).
01 WS-OUT-STATUS PIC X(2).
84
School of MAINFRAMES Email : schoolofmainframes@gmail.com Ph : 040-64515137
PROCEDURE DIVISION.
READ EMP-FILE
CLOSE EMP-FILE
OUT-FILE.
STOP RUN.
RunJCL :
//IBMUSERX JOB 'MADHU PADALA',MSGLEVEL=(1,1),NOTIFY=&SYSUID
//*
//JOBLIB DD DSN=IBMUSER.SMF.LOADLIB,DISP=SHR
//*
//JS10 EXEC PGM=IEFBR14
//DD1 DD DSN=IBMUSER.SMF.READ2.OUT,
// DISP=(MOD,DELETE,DELETE),
// SPACE=(CYL,(1,1),RLSE)
//*
//JS20 EXEC PGM=READ2
//SYSOUT DD SYSOUT=*
//*
//EMPFILE DD DSN=IBMUSER.SMF.EMPFILE,DISP=SHR
//OUTFILE DD DSN=IBMUSER.SMF.READ2.OUT,
// DISP=(NEW,CATLG,DELETE),
// UNIT=SYSDA,
// SPACE=(TRK,(1,1),RLSE),
// DCB=(RECFM=FB,LRECL=23,BLKSIZE=0)
//*
Output :
IBMUSER.SMF.READ2.OUT
E001DAVID 005042100
E003LARA 007062300
E006LEE 008051200
E008SYAM 010050600
E009MEENA 010042100
E010LAASYA 011031200
85
School of MAINFRAMES Email : schoolofmainframes@gmail.com Ph : 040-64515137
Program :
IDENTIFICATION DIVISION.
PROGRAM-ID. WRITETOT.
AUTHOR. MADHU PADALA.
ENVIRONMENT DIVISION.
INPUT-OUTPUT SECTION.
FILE-CONTROL.
DATA DIVISION.
FILE SECTION.
FD EMP-FILE
RECORDING MODE IS F
RECORD CONTAINS 32 CHARACTERS
BLOCK CONTAINS 320 CHARACTERS.
01 EMP-REC.
05 EMP-NUM PIC X(04).
05 EMP-NAME PIC X(10).
05 EMP-STATUS PIC X(1).
05 EMP-DOJ PIC X(8).
05 EMP-SALARY PIC 9(7)V99.
FD OUT-FILE
RECORDING MODE IS F
RECORD CONTAINS 50 CHARACTERS
BLOCK CONTAINS 500 CHARACTERS.
01 OUT-REC.
05 OUT-DESC PIC X(38).
05 OUT-TOT-SALARY PIC 9(9).99.
WORKING-STORAGE SECTION.
01 WS-IN-STATUS PIC X(2).
01 WS-OUT-STATUS PIC X(2).
01 WS-TOT-SALARY PIC 9(9)V99 VALUE ZEROS.
86
School of MAINFRAMES Email : schoolofmainframes@gmail.com Ph : 040-64515137
PROCEDURE DIVISION.
CLOSE EMP-FILE
OUT-FILE.
STOP RUN.
RunJCL :
//IBMUSERX JOB 'MADHU PADALA',MSGLEVEL=(1,1),NOTIFY=&SYSUID
//*
//JOBLIB DD DSN=IBMUSER.SMF.LOADLIB,DISP=SHR
//*
//JS10 EXEC PGM=IEFBR14
//DD1 DD DSN=IBMUSER.SMF.WRITETOT.OUT,
// DISP=(MOD,DELETE,DELETE),
// SPACE=(CYL,(1,1),RLSE)
//*
//JS20 EXEC PGM=WRITETOT
//SYSOUT DD SYSOUT=*
//*
//EMPFILE DD DSN=IBMUSER.SMF.EMPFILE,DISP=SHR
//OUTFILE DD DSN=IBMUSER.SMF.WRITETOT.OUT,
// DISP=(NEW,CATLG,DELETE),
// UNIT=SYSDA,
// SPACE=(TRK,(1,1),RLSE),
// DCB=(RECFM=FB,LRECL=50,BLKSIZE=0)
//*
Output :
TOTAL SALARY OF ALL ACTIVE EMPLOYEES: 000285300.00
87
School of MAINFRAMES Email : schoolofmainframes@gmail.com Ph : 040-64515137
Requirement : Read date control card and get the control date, then read emp-file and write into
output if the employee is joined after the control date. Generate user abend U1001 or 12 to
return-code if the date control card is empty. See the layouts of input and output files from the
program.
Program :
IDENTIFICATION DIVISION.
PROGRAM-ID. READCNTL.
AUTHOR. MADHU PADALA.
ENVIRONMENT DIVISION.
INPUT-OUTPUT SECTION.
FILE-CONTROL.
DATA DIVISION.
FILE SECTION.
FD EMP-FILE
RECORDING MODE IS F
RECORD CONTAINS 32 CHARACTERS
BLOCK CONTAINS 320 CHARACTERS.
01 EMP-REC.
05 EMP-NUM PIC X(04).
05 EMP-NAME PIC X(10).
05 EMP-STATUS PIC X(1).
05 EMP-DOJ PIC X(8).
05 EMP-SALARY PIC 9(7)V99.
FD DATE-CARD
RECORDING MODE IS F
RECORD CONTAINS 80 CHARACTERS.
01 DATE-REC.
05 CNTL-DATE PIC X(08).
05 FILLER PIC X(72).
88
School of MAINFRAMES Email : schoolofmainframes@gmail.com Ph : 040-64515137
FD OUT-FILE
RECORDING MODE IS F
RECORD CONTAINS 23 CHARACTERS
BLOCK CONTAINS 230 CHARACTERS.
01 OUT-REC.
05 OUT-EMP-NUM PIC X(04).
05 OUT-EMP-NAME PIC X(10).
05 OUT-EMP-SALARY PIC 9(7)V99.
WORKING-STORAGE SECTION.
01 WS-IN-STATUS PIC X(2).
01 WS-DATE-STATUS PIC X(2).
01 WS-OUT-STATUS PIC X(2).
PROCEDURE DIVISION.
READ DATE-CARD
IF WS-DATE-STATUS = '10'
DISPLAY 'DATE CARD IS EMPTY:'
* MOVE 1001 TO ABEND-CODE
* CALL VCSABEND USING ABEND-CODE
MOVE 12 TO RETURN-CODE
STOP RUN.
CLOSE EMP-FILE
DATE-CARD
OUT-FILE.
STOP RUN.
RunJCL:
//IBMUSERX JOB 'MADHU PADALA',MSGLEVEL=(1,1),NOTIFY=&SYSUID
//*
//JOBLIB DD DSN=IBMUSER.SMF.LOADLIB,DISP=SHR
//*
//JS10 EXEC PGM=IEFBR14
//DD1 DD DSN=IBMUSER.SMF.READCNTL.OUT,
// DISP=(MOD,DELETE,DELETE),
// SPACE=(CYL,(1,1),RLSE)
//*
89
School of MAINFRAMES Email : schoolofmainframes@gmail.com Ph : 040-64515137
Datecard :
IBMUSER.SMF.CNTLLIB(DATECARD)
20080101
Output :
IBMUSER.SMF.READCNTL.OUT
E005NICOLAS 004700000
E007RAM 004850000
90
School of MAINFRAMES Email : schoolofmainframes@gmail.com Ph : 040-64515137
Copy
Purpose : To know how to use a copybook in a program and how to supply copy library in the
compilation.
Requirement : Read emp-file from top to bottom and write active employee information into
output file. Use a copybook for the layout of emp-file.
Program :
IDENTIFICATION DIVISION.
PROGRAM-ID. COPY1.
AUTHOR. MADHU PADALA.
ENVIRONMENT DIVISION.
INPUT-OUTPUT SECTION.
FILE-CONTROL.
DATA DIVISION.
FILE SECTION.
FD EMP-IN
RECORDING MODE IS F
RECORD CONTAINS 32 CHARACTERS
BLOCK CONTAINS 320 CHARACTERS.
COPY CPEMP.
FD EMP-OUT
RECORDING MODE IS F
RECORD CONTAINS 23 CHARACTERS
BLOCK CONTAINS 230 CHARACTERS.
01 OUT-EMP-REC.
05 OUT-EMP-NUM PIC X(04).
05 OUT-EMP-NAME PIC X(10).
05 OUT-EMP-SALARY PIC 9(7)V99.
WORKING-STORAGE SECTION.
01 WS-IN-STATUS PIC X(2).
91
School of MAINFRAMES Email : schoolofmainframes@gmail.com Ph : 040-64515137
PROCEDURE DIVISION.
CLOSE EMP-IN
EMP-OUT
STOP RUN.
RunJCL :
//IBMUSERX JOB 'MADHU PADALA',MSGLEVEL=(1,1),NOTIFY=&SYSUID
//*
//JOBLIB DD DSN=IBMUSER.SMF.LOADLIB,DISP=SHR
//*
//JS10 EXEC PGM=IEFBR14
//DD1 DD DSN=IBMUSER.SMF.COPY1.OUT,
// DISP=(MOD,DELETE,DELETE),
// SPACE=(CYL,(1,1),RLSE)
//*
//JS20 EXEC PGM=COPY1
//SYSOUT DD SYSOUT=*
//*
//EMPIN DD DSN=IBMUSER.SMF.EMPFILE,DISP=SHR
//EMPOUT DD DSN=IBMUSER.SMF.COPY1.OUT,
// DISP=(NEW,CATLG,DELETE),
// UNIT=SYSDA,
// SPACE=(TRK,(1,1),RLSE),
// DCB=(RECFM=FB,LRECL=23,BLKSIZE=0)
//*
Output :
IBMUSER.SMF.COPY1.OUT
E001DAVID 005000000
E003LARA 004500000
E006LEE 005630000
E008SYAM 003900000
E009MEENA 003800000
E010LAASYA 005700000
92
School of MAINFRAMES Email : schoolofmainframes@gmail.com Ph : 040-64515137
Requirement : Read emp-file from top to bottom and write active employee information into
output file. Take the layout of input and output files as same. That means, use the same
copybook for input and output files with replacing option.
Program :
IDENTIFICATION DIVISION.
PROGRAM-ID. COPY2.
AUTHOR. MADHU PADALA.
ENVIRONMENT DIVISION.
INPUT-OUTPUT SECTION.
FILE-CONTROL.
DATA DIVISION.
FILE SECTION.
FD EMP-IN
RECORDING MODE IS F
RECORD CONTAINS 32 CHARACTERS
BLOCK CONTAINS 320 CHARACTERS.
FD EMP-OUT
RECORDING MODE IS F
RECORD CONTAINS 32 CHARACTERS
BLOCK CONTAINS 320 CHARACTERS.
WORKING-STORAGE SECTION.
01 WS-IN-STATUS PIC X(2).
93
School of MAINFRAMES Email : schoolofmainframes@gmail.com Ph : 040-64515137
PROCEDURE DIVISION.
CLOSE EMP-IN
EMP-OUT
STOP RUN.
RunJCL :
//IBMUSERX JOB 'MADHU PADALA',MSGLEVEL=(1,1),NOTIFY=&SYSUID
//*
//JOBLIB DD DSN=IBMUSER.SMF.LOADLIB,DISP=SHR
//*
//JS10 EXEC PGM=IEFBR14
//DD1 DD DSN=IBMUSER.SMF.COPY2.OUT,
// DISP=(MOD,DELETE,DELETE),
// SPACE=(CYL,(1,1),RLSE)
//*
//JS20 EXEC PGM=COPY2
//SYSOUT DD SYSOUT=*
//*
//EMPIN DD DSN=IBMUSER.SMF.EMPFILE,DISP=SHR
//EMPOUT DD DSN=IBMUSER.SMF.COPY2.OUT,
// DISP=(NEW,CATLG,DELETE),
// UNIT=SYSDA,
// SPACE=(TRK,(1,1),RLSE),
// DCB=(RECFM=FB,LRECL=32,BLKSIZE=0)
//*
Output :
IBMUSER.SMF.COPY2.OUT
E001DAVID A20050421005000000
E003LARA A20070623004500000
E006LEE A20080512005630000
E008SYAM A20100506003900000
E009MEENA A20100421003800000
E010LAASYA A20110312005700000
94
School of MAINFRAMES Email : schoolofmainframes@gmail.com Ph : 040-64515137
Requirement : Read a Product file and get the currency conversion rate from forex file, then
write output file with product price in usd if the currency is found otherwise write input record
into error file.
Approach : Read product file, then open forex file and read it from top to bottom until you find
currency code or end of file and then close forex file. If the currency is found in forex file, then
write outfile with conversion, otherwise write input record into error file.
Program :
IDENTIFICATION DIVISION.
PROGRAM-ID. CURCONV1.
AUTHOR. MADHU PADALA.
ENVIRONMENT DIVISION.
INPUT-OUTPUT SECTION.
FILE-CONTROL.
DATA DIVISION.
FILE SECTION.
FD PRODUCT-FILE.
01 PRODUCT-REC.
05 PRODUCT-CODE PIC X(04).
05 CURR-CODE PIC X(03).
05 PRODUCT-PRICE PIC 9(5)V99.
FD FOREX-FILE.
01 FOREX-RATE-REC.
05 FRX-CURR-CODE PIC X(03).
05 FILLER PIC X(02).
05 FRX-RATE PIC 9(03)V9(4).
05 FILLER PIC X(02).
05 CURR-DESC PIC X(20).
05 FILLER PIC X(02).
05 CURR-COUNTRY PIC X(20).
FD ERROR-FILE.
01 ERROR-REC PIC X(14).
FD OUT-FILE.
01 OUT-REC.
05 OUT-PRODUCT-CODE PIC X(04).
05 OUT-CURR-CODE PIC X(03).
05 OUT-PRODUCT-PRICE PIC 9(5)V99.
05 OUT-FRX-RATE PIC 9(3)V9(4).
05 OUT-PRICE-IN-USD PIC 9(7)V9(2).
95
School of MAINFRAMES Email : schoolofmainframes@gmail.com Ph : 040-64515137
WORKING-STORAGE SECTION.
01 WS-EOF-IN PIC X(1) VALUE 'N'.
01 WS-FRX-STATUS PIC X(2) VALUE SPACES.
01 WS-CURR-FOUND PIC X(1) VALUE 'N'.
01 WS-FRX-RATE PIC 9(3)V9(4) VALUE ZEROS.
PROCEDURE DIVISION.
000000-MAINLINE.
100000-INITIALIZATION.
100000-EXIT.
EXIT.
200000-PROCESS.
READ PRODUCT-FILE AT END MOVE 'Y' TO WS-EOF-IN
GO TO 200000-EXIT.
READ FOREX-FILE
IF CURR-CODE = FRX-CURR-CODE
MOVE 'Y' TO WS-CURR-FOUND
MOVE FRX-RATE TO WS-FRX-RATE
END-IF
END-PERFORM
CLOSE FOREX-FILE.
IF WS-CURR-FOUND = 'N'
DISPLAY 'RATE NOT FOUND FOR CURRENCY :' CURR-CODE
MOVE PRODUCT-REC TO ERROR-REC
WRITE ERROR-REC
GO TO 200000-EXIT.
200000-EXIT.
EXIT.
96
School of MAINFRAMES Email : schoolofmainframes@gmail.com Ph : 040-64515137
300000-TERMINATION.
CLOSE PRODUCT-FILE
ERROR-FILE
OUT-FILE.
300000-EXIT.
EXIT.
RunJCL :
//IBMUSERX JOB 'MADHU PADALA',MSGLEVEL=(1,1),NOTIFY=&SYSUID
//*
//JOBLIB DD DSN=IBMUSER.SMF.LOADLIB,DISP=SHR
//JS10 EXEC PGM=IEFBR14
//DD1 DD DSN=IBMUSER.SMF.CURCONV1.OUT,
// DISP=(MOD,DELETE,DELETE),
// SPACE=(TRK,(1,1),RLSE)
//DD2 DD DSN=IBMUSER.SMF.CURCONV1.ERROR,
// DISP=(MOD,DELETE,DELETE),
// SPACE=(TRK,(1,1),RLSE)
//*
//JS20 EXEC PGM=CURCONV1
//SYSOUT DD SYSOUT=*
//*
//PRODFILE DD DSN=IBMUSER.SMF.PRODUCT,DISP=SHR
//FRXFILE DD DSN=IBMUSER.SMF.FOREX,DISP=SHR
//ERRFILE DD DSN=IBMUSER.SMF.CURCONV1.ERROR,
// DISP=(NEW,CATLG,DELETE),
// UNIT=SYSDA,
// SPACE=(TRK,(1,1),RLSE),
// DCB=(RECFM=FB,LRECL=14,BLKSIZE=0)
//OUTFILE DD DSN=IBMUSER.SMF.CURCONV1.OUT,
// DISP=(NEW,CATLG,DELETE),
// UNIT=SYSDA,
// SPACE=(TRK,(1,1),RLSE),
// DCB=(RECFM=FB,LRECL=30,BLKSIZE=0)
//*
Product file:
IBMUSER.SMF.PRODUCT
P001AED0073448
P001AUD0019380
P001BHD0007520
P001CHF0018934
P001DKK0116482
P001EUR0015662
P001INR1030928
P001RUR0630915
P001SAR0074991
P001SGD0025763
P002AED0110173
P002AUD0029070
P002BHD0011280
P002CHF0028401
P002DKK0174723
P002EUR0023493
P002INR1546392
P002RUR0946372
P002SAR0112486
P002SGD0003865
97
School of MAINFRAMES Email : schoolofmainframes@gmail.com Ph : 040-64515137
Forex file :
IBMUSER.SMF.FOREX
AUD 0010320 AUSTRALIAN DOLLAR AUSTRALIA
BHD 0026596 BAHRAINI DINAR BAHRAIN
BND 0007763 BRUNEI DOLLAR BRUNEI
BRL 0005595 BRAZILIAN REAL BRAZIL
CAD 0009761 CANADIAN DOLLAR CANADA
CHF 0010563 SWISS FRANC SWITZERLAND
DKK 0001717 DANISH KRONE DENMARK
EUR 0012770 EURO EUROPEAN UNION
INR 0000194 INDIAN RUPEE INDIA
JPY 0000130 YEN JAPAN
Error file :
IBMUSER.SMF.CURCONV1.ERROR
P001AED0073448
P001RUR0630915
P001SAR0074991
P001SGD0025763
P002AED0110173
P002RUR0946372
P002SAR0112486
P002SGD0003865
Output file :
IBMUSER.SMF.CURCONV1.OUT
P001AUD00193800010320000020000
P001BHD00075200026596000020000
P001CHF00189340010563000020000
P001DKK01164820001717000020000
P001EUR00156620012770000020000
P001INR10309280000194000020000
P002AUD00290700010320000030000
P002BHD00112800026596000030000
P002CHF00284010010563000030000
P002DKK01747230001717000030000
P002EUR00234930012770000030001
P002INR15463920000194000030000
98
School of MAINFRAMES Email : schoolofmainframes@gmail.com Ph : 040-64515137
Requirement : Read a Product file and get the currency conversion rate from forex file, then
write output file with product price in usd if the currency is found otherwise write input record
into error file.
Program :
IDENTIFICATION DIVISION.
PROGRAM-ID. CURCONV2.
AUTHOR. MADHU PADALA.
ENVIRONMENT DIVISION.
INPUT-OUTPUT SECTION.
FILE-CONTROL.
DATA DIVISION.
FILE SECTION.
FD PRODUCT-FILE.
01 PRODUCT-REC.
05 PRODUCT-CODE PIC X(04).
05 CURR-CODE PIC X(03).
05 PRODUCT-PRICE PIC 9(5)V99.
FD FOREX-FILE.
01 FOREX-RATE-REC.
05 FRX-CURR-CODE PIC X(03).
05 FILLER PIC X(02).
05 FRX-RATE PIC 9(03)V9(4).
05 FILLER PIC X(02).
05 CURR-DESC PIC X(20).
05 FILLER PIC X(02).
05 CURR-COUNTRY PIC X(20).
FD ERROR-FILE.
01 ERROR-REC PIC X(14).
FD OUT-FILE.
01 OUT-REC.
05 OUT-PRODUCT-CODE PIC X(04).
05 OUT-CURR-CODE PIC X(03).
05 OUT-PRODUCT-PRICE PIC 9(5)V99.
99
School of MAINFRAMES Email : schoolofmainframes@gmail.com Ph : 040-64515137
WORKING-STORAGE SECTION.
01 WS-EOF-IN PIC X(1) VALUE 'N'.
01 WS-EOF-FRX PIC X(1) VALUE 'N'.
01 WS-COUNT PIC S9(4) COMP VALUE 1.
01 WS-FRX-RATE PIC 9(3)V9(4) VALUE ZEROS.
01 WS-CURR-FOUND PIC X(1).
01 FILLER.
05 FRX-TBL OCCURS 10 TIMES.
10 TBL-CURR-CODE PIC X(03).
10 TBL-FRX-RATE PIC 9(3)V9(4).
PROCEDURE DIVISION.
000000-MAINLINE.
100000-INITIALIZATION.
100000-EXIT.
EXIT.
110000-LOAD-TABLE.
READ FOREX-FILE AT END MOVE 'Y' TO WS-EOF-FRX
GO TO 110000-EXIT.
110000-EXIT.
EXIT.
200000-PROCESS.
READ PRODUCT-FILE AT END MOVE 'Y' TO WS-EOF-IN
GO TO 200000-EXIT.
MOVE 'N' TO WS-CURR-FOUND
PERFORM VARYING WS-COUNT FROM 1 BY 1 UNTIL WS-COUNT > 10
OR WS-CURR-FOUND = 'Y'
IF CURR-CODE IN PRODUCT-REC = TBL-CURR-CODE(WS-COUNT)
MOVE TBL-FRX-RATE(WS-COUNT) TO WS-FRX-RATE
MOVE 'Y' TO WS-CURR-FOUND
END-IF
END-PERFORM
100
School of MAINFRAMES Email : schoolofmainframes@gmail.com Ph : 040-64515137
IF WS-CURR-FOUND = 'N'
DISPLAY 'RATE NOT FOUND FOR CURRENCY :' CURR-CODE
MOVE PRODUCT-REC TO ERROR-REC
WRITE ERROR-REC
GO TO 200000-EXIT.
WRITE OUT-REC.
200000-EXIT.
EXIT.
300000-TERMINATION.
CLOSE PRODUCT-FILE
FOREX-FILE
ERROR-FILE
OUT-FILE.
300000-EXIT.
EXIT.
RunJCL :
//IBMUSERX JOB 'MADHU PADALA',MSGLEVEL=(1,1),NOTIFY=&SYSUID
//*
//JOBLIB DD DSN=IBMUSER.SMF.LOADLIB,DISP=SHR
//*
//JS10 EXEC PGM=IEFBR14
//SYSPRINT DD SYSOUT=*
//SYSOUT DD SYSOUT=*
//DD1 DD DSN=IBMUSER.SMF.CURCONV2.OUT,
// DISP=(MOD,DELETE,DELETE),
// SPACE=(TRK,(1,1),RLSE)
//DD2 DD DSN=IBMUSER.SMF.CURCONV2.ERROR,
// DISP=(MOD,DELETE,DELETE),
// SPACE=(TRK,(1,1),RLSE)
//*
//JS20 EXEC PGM=CURCONV2
//SYSPRINT DD SYSOUT=*
//SYSOUT DD SYSOUT=*
//*
//PRODFILE DD DSN=IBMUSER.SMF.PRODUCT,DISP=SHR
//FRXFILE DD DSN=IBMUSER.SMF.FOREX,DISP=SHR
//ERRFILE DD DSN=IBMUSER.SMF.CURCONV2.ERROR,
// DISP=(NEW,CATLG,DELETE),
// UNIT=SYSDA,
// SPACE=(TRK,(1,1),RLSE),
// DCB=(RECFM=FB,LRECL=14,BLKSIZE=0)
//OUTFILE DD DSN=IBMUSER.SMF.CURCONV2.OUT,
// DISP=(NEW,CATLG,DELETE),
// UNIT=SYSDA,
// SPACE=(TRK,(1,1),RLSE),
// DCB=(RECFM=FB,LRECL=30,BLKSIZE=0)
//*
101
School of MAINFRAMES Email : schoolofmainframes@gmail.com Ph : 040-64515137
Requirement : Read a Product file and get the currency conversion rate from forex file, then
write output file with product price in usd if the currency is found otherwise write input record
into error file.
Approach :
1. Read forex file and load indexed internal table.
2. Read product file and find currency code from the table with SEARCH verb and
get conversion rate.
3. If the currency code found in internal table then write record into output file otherwise
write into error file.
Program :
IDENTIFICATION DIVISION.
PROGRAM-ID. CURCONV3.
AUTHOR. MADHU PADALA.
ENVIRONMENT DIVISION.
INPUT-OUTPUT SECTION.
FILE-CONTROL.
DATA DIVISION.
FILE SECTION.
FD PRODUCT-FILE.
01 PRODUCT-REC.
05 PRODUCT-CODE PIC X(04).
05 CURR-CODE PIC X(03).
05 PRODUCT-PRICE PIC 9(5)V99.
FD FOREX-FILE.
01 FOREX-RATE-REC.
05 FRX-CURR-CODE PIC X(03).
05 FILLER PIC X(02).
05 FRX-RATE PIC 9(03)V9(4).
05 FILLER PIC X(02).
05 CURR-DESC PIC X(20).
05 FILLER PIC X(02).
05 CURR-COUNTRY PIC X(20).
FD ERROR-FILE.
01 ERROR-REC PIC X(14).
102
School of MAINFRAMES Email : schoolofmainframes@gmail.com Ph : 040-64515137
FD OUT-FILE.
01 OUT-REC.
05 OUT-PRODUCT-CODE PIC X(04).
05 OUT-CURR-CODE PIC X(03).
05 OUT-PRODUCT-PRICE PIC 9(5)V99.
05 OUT-FRX-RATE PIC 9(3)V9(4).
05 OUT-PRICE-IN-USD PIC 9(7)V9(2).
WORKING-STORAGE SECTION.
01 WS-EOF-IN PIC X(1) VALUE 'N'.
01 WS-EOF-FRX PIC X(1) VALUE 'N'.
01 WS-FRX-RATE PIC 9(3)V9(4).
01 FILLER.
05 FRX-TBL OCCURS 10 TIMES INDEXED BY WS-INDEX1.
10 TBL-CURR-CODE PIC X(03).
10 TBL-FRX-RATE PIC 9(3)V9(4).
PROCEDURE DIVISION.
000000-MAINLINE.
100000-INITIALIZATION.
OPEN INPUT PRODUCT-FILE
FOREX-FILE
OUTPUT ERROR-FILE
OUT-FILE.
SET WS-INDEX1 TO 1.
PERFORM 110000-LOAD-TABLE THRU 110000-EXIT
UNTIL WS-EOF-FRX = 'Y' OR
WS-INDEX1 > 10.
100000-EXIT.
EXIT.
110000-LOAD-TABLE.
READ FOREX-FILE AT END MOVE 'Y' TO WS-EOF-FRX
GO TO 110000-EXIT.
110000-EXIT.
EXIT.
200000-PROCESS.
READ PRODUCT-FILE AT END MOVE 'Y' TO WS-EOF-IN
GO TO 200000-EXIT.
SET WS-INDEX1 TO 1
SEARCH FRX-TBL
AT END
DISPLAY 'RATE NOT FOUND FOR CURRENCY :' CURR-CODE
103
School of MAINFRAMES Email : schoolofmainframes@gmail.com Ph : 040-64515137
INITIALIZE OUT-REC
MOVE PRODUCT-CODE TO OUT-PRODUCT-CODE
MOVE CURR-CODE TO OUT-CURR-CODE
MOVE PRODUCT-PRICE TO OUT-PRODUCT-PRICE
MOVE WS-FRX-RATE TO OUT-FRX-RATE
COMPUTE OUT-PRICE-IN-USD ROUNDED =
PRODUCT-PRICE * WS-FRX-RATE
WRITE OUT-REC.
200000-EXIT.
EXIT.
300000-TERMINATION.
CLOSE PRODUCT-FILE
FOREX-FILE
ERROR-FILE
OUT-FILE.
300000-EXIT.
EXIT.
RunJCL :
//IBMUSERX JOB 'MADHU PADALA',MSGLEVEL=(1,1),NOTIFY=&SYSUID
//*
//JOBLIB DD DSN=IBMUSER.SMF.LOADLIB,DISP=SHR
//*
//JS10 EXEC PGM=IEFBR14
//DD1 DD DSN=IBMUSER.SMF.CURCONV3.OUT,
// DISP=(MOD,DELETE,DELETE),
// SPACE=(CYL,(1,1),RLSE)
//DD2 DD DSN=IBMUSER.SMF.CURCONV3.ERROR,
// DISP=(MOD,DELETE,DELETE),
// SPACE=(CYL,(1,1),RLSE)
//*
//JS20 EXEC PGM=CURCONV3
//SYSOUT DD SYSOUT=*
//*
//PRODFILE DD DSN=IBMUSER.SMF.PRODUCT,DISP=SHR
//FRXFILE DD DSN=IBMUSER.SMF.FOREX,DISP=SHR
//ERRFILE DD DSN=IBMUSER.SMF.CURCONV3.ERROR,
// DISP=(NEW,CATLG,DELETE),
// UNIT=SYSDA,
// SPACE=(CYL,(1,1),RLSE),
// DCB=(RECFM=FB,LRECL=14,BLKSIZE=0)
//OUTFILE DD DSN=IBMUSER.SMF.CURCONV3.OUT,
// DISP=(NEW,CATLG,DELETE),
// UNIT=SYSDA,
// SPACE=(CYL,(1,1),RLSE),
// DCB=(RECFM=FB,LRECL=30,BLKSIZE=0)
//*
104
School of MAINFRAMES Email : schoolofmainframes@gmail.com Ph : 040-64515137
Program :
IDENTIFICATION DIVISION.
PROGRAM-ID. CURCONV4.
AUTHOR. MADHU PADALA.
ENVIRONMENT DIVISION.
INPUT-OUTPUT SECTION.
FILE-CONTROL.
SELECT PRODUCT-FILE ASSIGN TO PRODFILE.
SELECT FOREX-FILE ASSIGN TO FRXFILE.
SELECT ERROR-FILE ASSIGN TO ERRFILE.
SELECT OUT-FILE ASSIGN TO OUTFILE.
DATA DIVISION.
FILE SECTION.
FD PRODUCT-FILE.
01 PRODUCT-REC.
05 PRODUCT-CODE PIC X(04).
05 CURR-CODE PIC X(03).
05 PRODUCT-PRICE PIC 9(5)V99.
FD FOREX-FILE.
01 FOREX-RATE-REC.
05 FRX-CURR-CODE PIC X(03).
05 FILLER PIC X(02).
05 FRX-RATE PIC 9(03)V9(4).
05 FILLER PIC X(02).
05 CURR-DESC PIC X(20).
05 FILLER PIC X(02).
05 CURR-COUNTRY PIC X(20).
FD ERROR-FILE.
01 ERROR-REC PIC X(14).
FD OUT-FILE.
01 OUT-REC.
05 OUT-PRODUCT-CODE PIC X(04).
05 OUT-CURR-CODE PIC X(03).
05 OUT-PRODUCT-PRICE PIC 9(5)V99.
05 OUT-FRX-RATE PIC 9(3)V9(4).
05 OUT-PRICE-IN-USD PIC 9(7)V9(2).
WORKING-STORAGE SECTION.
01 WS-EOF-IN PIC X(1) VALUE 'N'.
105
School of MAINFRAMES Email : schoolofmainframes@gmail.com Ph : 040-64515137
PROCEDURE DIVISION.
000000-MAINLINE.
PERFORM 100000-INITIALIZATION THRU 100000-EXIT.
PERFORM 200000-PROCESS THRU 200000-EXIT
UNTIL WS-EOF-IN = 'Y' OR WS-EOF-FRX = 'Y'.
PERFORM 300000-TERMINATION THRU 300000-EXIT.
STOP RUN.
100000-INITIALIZATION.
OPEN INPUT PRODUCT-FILE
FOREX-FILE
OUTPUT ERROR-FILE
OUT-FILE.
100000-EXIT.
EXIT.
200000-PROCESS.
EVALUATE TRUE
WHEN CURR-CODE = FRX-CURR-CODE
CONTINUE
WHEN CURR-CODE < FRX-CURR-CODE
DISPLAY 'RATE NOT FOUND FOR CURRENCY :' CURR-CODE
MOVE PRODUCT-REC TO ERROR-REC
WRITE ERROR-REC
READ PRODUCT-FILE AT END MOVE 'Y' TO WS-EOF-IN
END-READ
GO TO 200000-EXIT
WHEN CURR-CODE > FRX-CURR-CODE
READ FOREX-FILE AT END MOVE 'Y' TO WS-EOF-FRX
END-READ
GO TO 200000-EXIT
END-EVALUATE
MOVE PRODUCT-CODE TO OUT-PRODUCT-CODE
MOVE CURR-CODE TO OUT-CURR-CODE
MOVE PRODUCT-PRICE TO OUT-PRODUCT-PRICE
MOVE FRX-RATE TO OUT-FRX-RATE
COMPUTE OUT-PRICE-IN-USD ROUNDED = PRODUCT-PRICE * FRX-RATE
WRITE OUT-REC
READ PRODUCT-FILE AT END MOVE 'Y' TO WS-EOF-IN.
200000-EXIT.
EXIT.
300000-TERMINATION.
PERFORM UNTIL WS-EOF-IN = 'Y'
DISPLAY 'RATE NOT FOUND FOR CURRENCY :' CURR-CODE
MOVE PRODUCT-REC TO ERROR-REC
WRITE ERROR-REC
READ PRODUCT-FILE AT END MOVE 'Y' TO WS-EOF-IN
END-READ
END-PERFORM.
CLOSE PRODUCT-FILE
FOREX-FILE
ERROR-FILE
106
School of MAINFRAMES Email : schoolofmainframes@gmail.com Ph : 040-64515137
OUT-FILE.
300000-EXIT.
EXIT.
RunJCL :
//IBMUSERX JOB 'MADHU PADALA',MSGLEVEL=(1,1),NOTIFY=&SYSUID
//*
//JOBLIB DD DSN=IBMUSER.SMF.LOADLIB,DISP=SHR
//*
//JS10 EXEC PGM=IEFBR14
//DD1 DD DSN=IBMUSER.SMF.CURCONV4.OUT,
// DISP=(MOD,DELETE,DELETE),
// SPACE=(CYL,(1,1),RLSE)
//DD2 DD DSN=IBMUSER.SMF.CURCONV4.ERROR,
// DISP=(MOD,DELETE,DELETE),
// SPACE=(CYL,(1,1),RLSE)
//*
//JS20 EXEC PGM=SORT
//SYSOUT DD SYSOUT=*
//*
//SORTWK01 DD UNIT=SYSDA,SPACE=(CYL,(1,1),RLSE)
//SORTIN DD DSN=IBMUSER.SMF.PRODUCT,DISP=SHR
//SORTOUT DD DSN=&&TEMP1,
// DISP=(NEW,PASS),
// UNIT=SYSDA,
// SPACE=(CYL,(1,1),RLSE),
// DCB=(RECFM=FB,LRECL=14,BLKSIZE=0)
//SYSIN DD *
SORT FIELDS=(5,3,CH,A)
/*
//*
//JS30 EXEC PGM=SORT
//SYSOUT DD SYSOUT=*
//*
//SORTWK01 DD UNIT=SYSDA,SPACE=(CYL,(1,1),RLSE)
//SORTIN DD DSN=IBMUSER.SMF.FOREX,DISP=SHR
//SORTOUT DD DSN=&&TEMP2,
// DISP=(NEW,PASS),
// UNIT=SYSDA,
// SPACE=(CYL,(1,1),RLSE),
// DCB=(RECFM=FB,LRECL=56,BLKSIZE=0)
//SYSIN DD *
SORT FIELDS=(1,3,CH,A)
/*
//*
//JS40 EXEC PGM=CURCONV4
//SYSOUT DD SYSOUT=*
//*
//PRODFILE DD DSN=&&TEMP1,DISP=(OLD,DELETE)
//FRXFILE DD DSN=&&TEMP2,DISP=(OLD,DELETE)
//ERRFILE DD DSN=IBMUSER.SMF.CURCONV4.ERROR,
// DISP=(NEW,CATLG,DELETE),
// UNIT=SYSDA,
// SPACE=(CYL,(1,1),RLSE),
// DCB=(RECFM=FB,LRECL=14,BLKSIZE=0)
//OUTFILE DD DSN=IBMUSER.SMF.CURCONV4.OUT,
// DISP=(NEW,CATLG,DELETE),
// UNIT=SYSDA,
// SPACE=(CYL,(1,1),RLSE),
// DCB=(RECFM=FB,LRECL=30,BLKSIZE=0)
107
School of MAINFRAMES Email : schoolofmainframes@gmail.com Ph : 040-64515137
//*
Requirement : Sort input file on agent id in ascending order and then write into output file.
It is same as SORT FIELDS=(1,4,CH,A)
Program :
IDENTIFICATION DIVISION.
PROGRAM-ID. ISORT1.
AUTHOR. MADHU PADALA.
ENVIRONMENT DIVISION.
INPUT-OUTPUT SECTION.
FILE-CONTROL.
DATA DIVISION.
FILE SECTION.
FD IN-FILE.
01 IN-REC.
05 IN-AGENT-NUM PIC X(04).
05 IN-STATE-CODE PIC X(02).
05 IN-SALES-DATE PIC 9(08).
05 IN-SALES-AMOUNT PIC 9(07)V99.
FD OUT-FILE.
01 OUT-REC.
05 OUT-AGENT-NUM PIC X(04).
05 OUT-STATE-CODE PIC X(02).
05 OUT-SALES-DATE PIC 9(08).
05 OUT-SALES-AMOUNT PIC 9(07)V99.
SD SORT-FILE.
01 SORT-REC.
05 SRT-AGENT-NUM PIC X(04).
05 SRT-STATE-CODE PIC X(02).
05 SRT-SALES-DATE PIC 9(08).
05 SRT-SALES-AMOUNT PIC 9(07)V99.
PROCEDURE DIVISION.
STOP RUN.
108
School of MAINFRAMES Email : schoolofmainframes@gmail.com Ph : 040-64515137
RunJCL :
//IBMUSERX JOB 'MADHU PADALA',MSGLEVEL=(1,1),NOTIFY=&SYSUID
//*
//JOBLIB DD DSN=IBMUSER.SMF.LOADLIB,DISP=SHR
//*
//JS10 EXEC PGM=IEFBR14
//DD1 DD DSN=IBMUSER.SMF.ISORT1.OUT,
// DISP=(MOD,DELETE,DELETE),
// SPACE=(TRK,(1,1),RLSE)
//*
//JS20 EXEC PGM=ISORT1
//SYSOUT DD SYSOUT=*
//*
//INFILE DD DSN=IBMUSER.SMF.ISORT.IN,DISP=SHR
//SORTWK01 DD UNIT=SYSDA,SPACE=(TRK,(5,2),RLSE)
//OUTFILE DD DSN=IBMUSER.SMF.ISORT1.OUT,
// DISP=(NEW,CATLG,DELETE),
// UNIT=SYSDA,
// SPACE=(TRK,(1,1),RLSE),
// DCB=(RECFM=FB,LRECL=23,BLKSIZE=0)
Input :
IBMUSER.SMF.ISORT.IN
A003TN20101025002000000
A003AP20101025002000000
A001AP20101025002000000
A001TN20101024000500000
A002TN20101025001000000
A001KA20101025001000000
A001KE20101024002000000
A002AP20101023001000000
Output :
IBMUSER.SMF.ISORT1.OUT
A001KA20101025001000000
A001KE20101024002000000
A001AP20101025002000000
A001TN20101024000500000
A002TN20101025001000000
A002AP20101023001000000
A003TN20101025002000000
A003AP20101025002000000
109
School of MAINFRAMES Email : schoolofmainframes@gmail.com Ph : 040-64515137
Purpose : To know
1. How to sort a file by using internal sort with INPUT PROCEDURE and
OUTPUT PROCEDURE clauses.
2. How to declare a sort file.
3. How to release unsorted record into sort file and how to return sorted record
from sort file.
Requirement : Sort input file on agent id in ascending order and then write into output file.
It is same as SORT FIELDS=(1,4,CH,A)
Program :
IDENTIFICATION DIVISION.
PROGRAM-ID. ISORT2.
AUTHOR. MADHU PADALA.
ENVIRONMENT DIVISION.
INPUT-OUTPUT SECTION.
FILE-CONTROL.
DATA DIVISION.
FILE SECTION.
FD IN-FILE.
01 IN-REC.
05 IN-AGENT-NUM PIC X(04).
05 IN-STATE-CODE PIC X(02).
05 IN-SALES-DATE PIC 9(8).
05 IN-SALES-AMOUNT PIC 9(07)V99.
FD OUT-FILE.
01 OUT-REC.
05 OUT-AGENT-NUM PIC X(04).
05 OUT-STATE-CODE PIC X(02).
05 OUT-SALES-DATE PIC 9(8).
05 OUT-SALES-AMOUNT PIC 9(07)V99.
SD SORT-FILE.
01 SORT-REC.
05 SRT-AGENT-NUM PIC X(04).
05 SRT-STATE-CODE PIC X(02).
05 SRT-SALES-DATE PIC 9(8).
05 SRT-SALES-AMOUNT PIC 9(07)V99.
WORKING-STORAGE SECTION.
01 WS-EOF-IN PIC X(01) VALUE 'N'.
01 WS-EOF-SORT PIC X(01) VALUE 'N'.
PROCEDURE DIVISION.
110
School of MAINFRAMES Email : schoolofmainframes@gmail.com Ph : 040-64515137
INPUT-PROC.
PERFORM UNTIL WS-EOF-IN = 'Y'
READ IN-FILE AT END MOVE 'Y' TO WS-EOF-IN
END-READ
IF WS-EOF-IN = 'N'
MOVE IN-REC TO SORT-REC
RELEASE SORT-REC
END-IF
END-PERFORM.
OUTPUT-PROC.
PERFORM UNTIL WS-EOF-SORT = 'Y'
RETURN SORT-FILE AT END MOVE 'Y' TO WS-EOF-SORT
END-RETURN
IF WS-EOF-SORT = 'N'
MOVE SORT-REC TO OUT-REC
WRITE OUT-REC
END-IF
END-PERFORM.
RunJCL :
//IBMUSERX JOB 'MADHU PADALA',MSGLEVEL=(1,1),NOTIFY=&SYSUID
//*
//JOBLIB DD DSN=IBMUSER.SMF.LOADLIB,DISP=SHR
//*
//JS10 EXEC PGM=IEFBR14
//DD1 DD DSN=IBMUSER.SMF.ISORT2.OUT,
// DISP=(MOD,DELETE,DELETE),
// SPACE=(TRK,(1,1),RLSE)
//*
//JS20 EXEC PGM=ISORT2
//SYSOUT DD SYSOUT=*
//*
//INFILE DD DSN=IBMUSER.SMF.ISORT.IN,DISP=SHR
//SORTWK01 DD UNIT=SYSDA,SPACE=(TRK,(5,2),RLSE)
//OUTFILE DD DSN=IBMUSER.SMF.ISORT2.OUT,
// DISP=(NEW,CATLG,DELETE),
// UNIT=SYSDA,
// SPACE=(TRK,(1,1),RLSE),
// DCB=(RECFM=FB,LRECL=23,BLKSIZE=0)
Output :
IBMUSER.SMF.ISORT2.OUT
A001KA20101025001000000
A001KE20101024002000000
A001AP20101025002000000
A001TN20101024000500000
A002TN20101025001000000
A002AP20101023001000000
111
School of MAINFRAMES Email : schoolofmainframes@gmail.com Ph : 040-64515137
A003TN20101025002000000
A003AP20101025002000000
Program :
IDENTIFICATION DIVISION.
PROGRAM-ID. ISORT3.
AUTHOR. MADHU PADALA.
ENVIRONMENT DIVISION.
INPUT-OUTPUT SECTION.
FILE-CONTROL.
SELECT IN-FILE ASSIGN TO INFILE.
SELECT SORT-FILE ASSIGN TO SORTWK01.
SELECT OUT-FILE ASSIGN TO OUTFILE.
DATA DIVISION.
FILE SECTION.
FD IN-FILE.
01 IN-REC.
05 IN-AGENT-NUM PIC X(04).
05 IN-STATE-CODE PIC X(02).
05 IN-SALES-DATE PIC 9(8).
05 IN-SALES-AMOUNT PIC 9(07)V99.
FD OUT-FILE.
01 OUT-REC.
05 OUT-AGENT-NUM PIC X(04).
05 OUT-STATE-CODE PIC X(02).
05 OUT-SALES-DATE PIC 9(8).
05 OUT-SALES-AMOUNT PIC 9(07)V99.
SD SORT-FILE.
01 SORT-REC.
05 SRT-AGENT-NUM PIC X(04).
05 SRT-STATE-CODE PIC X(02).
05 SRT-SALES-DATE PIC 9(8).
05 SRT-SALES-AMOUNT PIC 9(07)V99.
05 SRT-REC-NUM PIC 9(05).
WORKING-STORAGE SECTION.
01 WS-EOF-IN PIC X(01) VALUE 'N'.
01 WS-EOF-SORT PIC X(01) VALUE 'N'.
01 WS-REC-NUM PIC 9(05) VALUE ZEROS.
PROCEDURE DIVISION.
OPEN INPUT IN-FILE
OUTPUT OUT-FILE.
112
School of MAINFRAMES Email : schoolofmainframes@gmail.com Ph : 040-64515137
OUT-FILE.
STOP RUN.
INPUT-PROC.
PERFORM UNTIL WS-EOF-IN = 'Y'
READ IN-FILE AT END MOVE 'Y' TO WS-EOF-IN
END-READ
IF WS-EOF-IN = 'N'
MOVE IN-AGENT-NUM TO SRT-AGENT-NUM
MOVE IN-STATE-CODE TO SRT-STATE-CODE
MOVE IN-SALES-DATE TO SRT-SALES-DATE
MOVE IN-SALES-AMOUNT TO SRT-SALES-AMOUNT
ADD 1 TO WS-REC-NUM
MOVE WS-REC-NUM TO SRT-REC-NUM
RELEASE SORT-REC
END-IF
END-PERFORM.
OUTPUT-PROC.
PERFORM UNTIL WS-EOF-SORT = 'Y'
RETURN SORT-FILE AT END MOVE 'Y' TO WS-EOF-SORT
END-RETURN
IF WS-EOF-SORT = 'N'
MOVE SRT-AGENT-NUM TO OUT-AGENT-NUM
MOVE SRT-STATE-CODE TO OUT-STATE-CODE
MOVE SRT-SALES-DATE TO OUT-SALES-DATE
MOVE SRT-SALES-AMOUNT TO OUT-SALES-AMOUNT
WRITE OUT-REC
END-IF
END-PERFORM.
RunJCL :
//IBMUSERX JOB 'MADHU PADALA',MSGLEVEL=(1,1),NOTIFY=&SYSUID
//*
//JOBLIB DD DSN=IBMUSER.SMF.LOADLIB,DISP=SHR
//*
//JS10 EXEC PGM=IEFBR14
//DD1 DD DSN=IBMUSER.SMF.ISORT3.OUT,
// DISP=(MOD,DELETE,DELETE),
// SPACE=(TRK,(1,1),RLSE)
//*
//JS20 EXEC PGM=ISORT3
//SYSOUT DD SYSOUT=*
//*
//INFILE DD DSN=IBMUSER.SMF.ISORT.IN,DISP=SHR
//SORTWK01 DD UNIT=SYSDA,SPACE=(TRK,(5,2),RLSE)
//OUTFILE DD DSN=IBMUSER.SMF.ISORT3.OUT,
// DISP=(NEW,CATLG,DELETE),
// UNIT=SYSDA,
// SPACE=(TRK,(1,1),RLSE),
// DCB=(RECFM=FB,LRECL=23,BLKSIZE=0)
Output :
IBMUSER.SMF.ISORT3.OUT
A002AP20101023001000000
A001KE20101024002000000
A001KA20101025001000000
A002TN20101025001000000
A001TN20101024000500000
A001AP20101025002000000
113
School of MAINFRAMES Email : schoolofmainframes@gmail.com Ph : 040-64515137
A003AP20101025002000000
A003TN20101025002000000
Requirement : Sort on agent id and write AP records into outfile1 and other records into
outfile2.
It is same as SORT FIELDS=(1,4,CH,A)
OUTFIL FILES=1,INCLUDE=(5,2,CH,EQ,C'AP')
OUTFIL FILES=2,OMIT=(5,2,CH,EQ,C'AP')
Program :
IDENTIFICATION DIVISION.
PROGRAM-ID. ISORT4.
AUTHOR. MADHU PADALA.
ENVIRONMENT DIVISION.
INPUT-OUTPUT SECTION.
FILE-CONTROL.
DATA DIVISION.
FILE SECTION.
FD IN-FILE.
01 IN-REC.
05 IN-AGENT-NUM PIC X(04).
05 IN-STATE-CODE PIC X(02).
05 IN-SALES-DATE PIC 9(8).
05 IN-SALES-AMOUNT PIC 9(07)V99.
FD OUT-FILE1.
01 OUT-REC1.
05 OUT-AGENT-NUM PIC X(04).
05 OUT-STATE-CODE PIC X(02).
05 OUT-SALES-DATE PIC 9(8).
05 OUT-SALES-AMOUNT PIC 9(07)V99.
FD OUT-FILE2.
01 OUT-REC2.
05 OUT-AGENT-NUM PIC X(04).
05 OUT-STATE-CODE PIC X(02).
05 OUT-SALES-DATE PIC 9(8).
05 OUT-SALES-AMOUNT PIC 9(07)V99.
SD SORT-FILE.
01 SORT-REC.
05 SRT-AGENT-NUM PIC X(04).
05 SRT-STATE-CODE PIC X(02).
05 SRT-SALES-DATE PIC 9(8).
05 SRT-SALES-AMOUNT PIC 9(07)V99.
114
School of MAINFRAMES Email : schoolofmainframes@gmail.com Ph : 040-64515137
WORKING-STORAGE SECTION.
01 WS-EOF-IN PIC X(01) VALUE 'N'.
01 WS-EOF-SORT PIC X(01) VALUE 'N'.
PROCEDURE DIVISION.
CLOSE IN-FILE
OUT-FILE1
OUT-FILE2.
STOP RUN.
INPUT-PROC.
PERFORM UNTIL WS-EOF-IN = 'Y'
READ IN-FILE AT END MOVE 'Y' TO WS-EOF-IN
END-READ
IF WS-EOF-IN = 'N'
MOVE IN-REC TO SORT-REC
RELEASE SORT-REC
END-IF
END-PERFORM.
OUTPUT-PROC.
PERFORM UNTIL WS-EOF-SORT = 'Y'
RETURN SORT-FILE AT END MOVE 'Y' TO WS-EOF-SORT
END-RETURN
IF WS-EOF-SORT = 'N'
IF SRT-STATE-CODE = 'AP'
MOVE SORT-REC TO OUT-REC1
WRITE OUT-REC1
ELSE
MOVE SORT-REC TO OUT-REC2
WRITE OUT-REC2
END-IF
END-IF
END-PERFORM.
115
School of MAINFRAMES Email : schoolofmainframes@gmail.com Ph : 040-64515137
RunJCL :
//IBMUSERX JOB 'MADHU PADALA',MSGLEVEL=(1,1),NOTIFY=&SYSUID
//*
//JOBLIB DD DSN=IBMUSER.SMF.LOADLIB,DISP=SHR
//*
//JS10 EXEC PGM=IEFBR14
//DD1 DD DSN=IBMUSER.SMF.ISORT4.OUT1,
// DISP=(MOD,DELETE,DELETE),
// SPACE=(TRK,(1,1),RLSE)
//DD2 DD DSN=IBMUSER.SMF.ISORT4.OUT2,
// DISP=(MOD,DELETE,DELETE),
// SPACE=(TRK,(1,1),RLSE)
//*
//JS20 EXEC PGM=ISORT4
//SYSOUT DD SYSOUT=*
//*
//INFILE DD DSN=IBMUSER.SMF.ISORT.IN,DISP=SHR
//SORTWK01 DD UNIT=SYSDA,SPACE=(TRK,(5,2),RLSE)
//OUTFILE1 DD DSN=IBMUSER.SMF.ISORT4.OUT1,
// DISP=(NEW,CATLG,DELETE),
// UNIT=SYSDA,
// SPACE=(TRK,(1,1),RLSE),
// DCB=(RECFM=FB,LRECL=23,BLKSIZE=0)
//OUTFILE2 DD DSN=IBMUSER.SMF.ISORT4.OUT2,
// DISP=(NEW,CATLG,DELETE),
// UNIT=SYSDA,
// SPACE=(TRK,(1,1),RLSE),
// DCB=(RECFM=FB,LRECL=23,BLKSIZE=0)
Output 1:
IBMUSER.SMF.ISORT4.OUT1
A001AP20101025002000000
A002AP20101023001000000
A003AP20101025002000000
Output 2:
IBMUSER.SMF.ISORT4.OUT2
A001KA20101025001000000
A001KE20101024002000000
A001TN20101024000500000
A002TN20101025001000000
A003TN20101025002000000
116
School of MAINFRAMES Email : schoolofmainframes@gmail.com Ph : 040-64515137
Requirement : Write an agent sales report with report headers and report formats. See the
layouts of input file in the program and report format from the report and generate a plain report
with page breaks.
Program :
IDENTIFICATION DIVISION.
PROGRAM-ID. REPORTX.
AUTHOR. MADHU PADALA.
ENVIRONMENT DIVISION.
INPUT-OUTPUT SECTION.
FILE-CONTROL.
DATA DIVISION.
FILE SECTION.
FD SALES-IN.
01 IN-REC.
05 IN-AGENT-ID PIC X(04).
05 IN-PRODUCT-CODE PIC X(02).
05 IN-PRODUCT-PRICE PIC 9(7)V99.
05 IN-QUANTITY PIC 9(05).
05 IN-SALES-DATE PIC X(08).
FD SALES-REPORT.
01 REPORT-REC PIC X(132).
FD DATE-CARD.
01 DATE-REC.
05 CYCLE-DATE.
10 CYC-DATE-CCYY PIC X(4).
10 CYC-DATE-MM PIC X(2).
10 CYC-DATE-DD PIC X(2).
05 FILLER PIC X(72).
WORKING-STORAGE SECTION.
01 WS-EOF PIC X(1) VALUE 'N'.
01 WS-FIRST-TIME PIC X(1) VALUE 'Y'.
01 WS-LINE-COUNT PIC S9(4) COMP VALUE ZEROS.
117
School of MAINFRAMES Email : schoolofmainframes@gmail.com Ph : 040-64515137
01 WS-DATE.
05 WS-DATE-YY PIC X(2).
05 WS-DATE-MM PIC X(2).
05 WS-DATE-DD PIC X(2).
01 HEADER-LINE1.
05 FILLER PIC X(01) VALUE SPACES.
05 HDR1-DATE.
10 HDR1-DATE-MM PIC X(02).
10 FILLER PIC X(01) VALUE '/'.
10 HDR1-DATE-DD PIC X(02).
10 FILLER PIC X(01) VALUE '/'.
10 HDR1-DATE-YY PIC X(02).
05 FILLER PIC X(01) VALUE SPACES.
05 FILLER PIC X(20) VALUE SPACES.
05 FILLER PIC X(19) VALUE
'ABC COMPANY REPORTS'.
05 FILLER PIC X(10) VALUE SPACES.
05 FILLER PIC X(05) VALUE 'PAGE '.
05 HDR1-PAGE-COUNT PIC ZZZZ9.
01 HEADER-LINE2.
05 FILLER PIC X(01) VALUE SPACES.
05 FILLER PIC X(27) VALUE SPACES.
05 FILLER PIC X(11) VALUE
'CYCLE DATE:'.
05 HDR2-DATE.
10 HDR2-DATE-CCYY PIC X(04).
10 FILLER PIC X(01) VALUE '/'.
10 HDR2-DATE-MM PIC X(02).
10 FILLER PIC X(01) VALUE '/'.
10 HDR2-DATE-DD PIC X(02).
01 DETAIL-HEADER.
05 FILLER PIC X(01) VALUE SPACES.
05 FILLER PIC X(10) VALUE
'AGENT ID '.
05 FILLER PIC X(03) VALUE SPACES.
05 FILLER PIC X(10) VALUE
'PROD CODE '.
05 FILLER PIC X(05) VALUE SPACES.
05 FILLER PIC X(10) VALUE
'PROD PRICE'.
05 FILLER PIC X(05) VALUE SPACES.
05 FILLER PIC X(10) VALUE
'QUANTITY '.
05 FILLER PIC X(04) VALUE SPACES.
05 FILLER PIC X(10) VALUE
'SALES DATE'.
05 FILLER PIC X(05) VALUE SPACES.
05 FILLER PIC X(10) VALUE
'TOTAL AMNT'.
118
School of MAINFRAMES Email : schoolofmainframes@gmail.com Ph : 040-64515137
01 DETAIL-LINE.
05 FILLER PIC X(03) VALUE SPACES.
05 DTL-AGENT-ID PIC X(04).
05 FILLER PIC X(11) VALUE SPACES.
05 DTL-PROD-CODE PIC X(02).
05 FILLER PIC X(10) VALUE SPACES.
05 DTL-PRODUCT-PRICE PIC ZZZ9.99.
05 FILLER PIC X(08) VALUE SPACES.
05 DTL-QUANTITY PIC 9(4).
05 FILLER PIC X(10) VALUE SPACES.
05 DTL-SALES-DATE PIC X(08).
05 FILLER PIC X(06) VALUE SPACES.
05 DTL-TOTAL-AMT PIC ZZZZZ9.99.
PROCEDURE DIVISION.
000000-MAINLINE.
100000-INITIALIZATION.
READ DATE-CARD.
MOVE CYC-DATE-CCYY TO HDR2-DATE-CCYY.
MOVE CYC-DATE-MM TO HDR2-DATE-MM.
MOVE CYC-DATE-DD TO HDR2-DATE-DD.
100000-EXIT.
EXIT.
200000-PROCESS.
READ SALES-IN AT END MOVE 'Y' TO WS-EOF
GO TO 200000-EXIT.
200000-EXIT.
EXIT.
119
School of MAINFRAMES Email : schoolofmainframes@gmail.com Ph : 040-64515137
210000-WRITE-REPORT.
IF WS-LINE-COUNT = 0 OR > 54
ADD 1 TO WS-PAGE-COUNT
MOVE WS-PAGE-COUNT TO HDR1-PAGE-COUNT
MOVE HEADER-LINE1 TO REPORT-REC
WRITE REPORT-REC AFTER ADVANCING PAGE
MOVE HEADER-LINE2 TO REPORT-REC
WRITE REPORT-REC AFTER ADVANCING 1 LINE
MOVE SPACES TO REPORT-REC
WRITE REPORT-REC AFTER ADVANCING 1 LINE
MOVE DETAIL-HEADER TO REPORT-REC
WRITE REPORT-REC AFTER ADVANCING 1 LINE
MOVE 4 TO WS-LINE-COUNT
END-IF
210000-EXIT.
EXIT.
300000-TERMINATION.
CLOSE SALES-IN
SALES-REPORT
DATE-CARD.
300000-EXIT.
EXIT.
RunJCL :
//TSMFDASR JOB 'MADHU PADALA',MSGLEVEL=(1,1),NOTIFY=&SYSUID
//*
//JOBLIB DD DSN=IBMUSER.SMF.LOADLIB,DISP=SHR
//*
//JS10 EXEC PGM=SORT
//SYSOUT DD SYSOUT=*
//*
//SORTIN DD DSN=IBMUSER.SMF.SALESIN,DISP=SHR
//SORTWK01 DD UNIT=SYSDA,SPACE=(TRK,(1,1),RLSE)
//SORTOUT DD DSN=&&TEMP1,
// DISP=(NEW,PASS),
// UNIT=SYSDA,
// SPACE=(TRK,(1,1),RLSE),
// DCB=(RECFM=FB,LRECL=28,BLKSIZE=0)
//SYSIN DD *
SORT FIELDS=(1,4,CH,A)
/*
//JS20 EXEC PGM=REPORTX
//SYSOUT DD SYSOUT=*
//*
//SALESIN DD DSN=&&TEMP1,DISP=(OLD,DELETE)
//DATECARD DD DSN=IBMUSER.SMF.CNTLLIB(CYCDATE),DISP=SHR
//SALESRPT DD SYSOUT=(*,$001),
// DCB=(RECFM=FBA,LRECL=133,BLKSIZE=0)
//*
120
School of MAINFRAMES Email : schoolofmainframes@gmail.com Ph : 040-64515137
Input file :
IBMUSER.SMF.SALESIN
A001P10000100000100020121027
A001P10000100000100020121028
A001P10000100000100020121028
A001P20000200000100020121028
A001P20000200000100020121028
A001P20000200000100020121027
A001P30000300000100020121028
A001P30000300000100020121028
A001P30000300000100020121028
A001P50000500000100020121027
A001P50000700000100020121028
A001P70000400000100020121027
A002P10000100000100020121028
A002P10000100000100020121027
A002P10000100000100020121028
A002P10000100000100020121027
A002P10000100000100020121027
A002P20000200000100020121028
A002P20000200000100020121028
A002P20000200000100020121028
A002P30000300000100020121028
A002P50000700000100020121028
A002P50000700000100020121027
A002P60000300000100020121027
A002P70000400000100020121028
A003P10000100000100020121027
A003P10000100000100020121028
A003P10000100000100020121028
A003P10000100000100020121028
A003P20000200000100020121027
A003P30000300000100020121028
A003P40000400000100020121028
A003P50000700000100020121028
A003P70000400000100020121028
A003P70000400000100020121028
A004P10000100000100020121028
A004P10000100000100020121028
A004P10000100000100020121028
A004P10000100000100020121027
A004P10000100000100020121027
A004P20000200000100020121028
A004P20000200000100020121028
A004P20000200000100020121027
A004P20000200000100020121028
A004P40000400000100020121027
A004P40000400000100020121027
A004P40000400000100020121028
A004P50000500000100020121028
A004P60000300000100020121028
A005P10000100000100020121027
A005P10000100000100020121028
A005P20000200000100020121027
A005P20000200000100020121028
A005P20000200000100020121027
A005P20000200000100020121028
A005P30000300000100020121027
A005P30000300000100020121027
121
School of MAINFRAMES Email : schoolofmainframes@gmail.com Ph : 040-64515137
A005P40000400000100020121027
A005P50000500000100020121028
A005P60000300000100020121027
A006P10000100000100020121027
A006P30000300000100020121028
A006P50000500000100020121028
AGENT ID PROD CODE PROD PRICE QUANTITY SALES DATE TOTAL AMNT
A001 P1 100.00 1000 20121027 100000.00
A001 P1 100.00 1000 20121028 100000.00
A001 P1 100.00 1000 20121028 100000.00
A001 P2 200.00 1000 20121028 200000.00
A001 P2 200.00 1000 20121028 200000.00
A001 P2 200.00 1000 20121027 200000.00
A001 P3 300.00 1000 20121028 300000.00
A001 P3 300.00 1000 20121028 300000.00
A001 P3 300.00 1000 20121028 300000.00
A001 P5 500.00 1000 20121027 500000.00
A001 P5 700.00 1000 20121028 700000.00
A001 P7 400.00 1000 20121027 400000.00
A002 P1 100.00 1000 20121028 100000.00
A002 P1 100.00 1000 20121027 100000.00
A002 P1 100.00 1000 20121028 100000.00
A002 P1 100.00 1000 20121027 100000.00
A002 P1 100.00 1000 20121027 100000.00
A002 P2 200.00 1000 20121028 200000.00
A002 P2 200.00 1000 20121028 200000.00
A002 P2 200.00 1000 20121028 200000.00
A002 P3 300.00 1000 20121028 300000.00
A002 P5 700.00 1000 20121028 700000.00
A002 P5 700.00 1000 20121027 700000.00
A002 P6 300.00 1000 20121027 300000.00
A002 P7 400.00 1000 20121028 400000.00
A003 P1 100.00 1000 20121027 100000.00
A003 P1 100.00 1000 20121028 100000.00
A003 P1 100.00 1000 20121028 100000.00
A003 P1 100.00 1000 20121028 100000.00
A003 P2 200.00 1000 20121027 200000.00
A003 P3 300.00 1000 20121028 300000.00
A003 P4 400.00 1000 20121028 400000.00
A003 P5 700.00 1000 20121028 700000.00
A003 P7 400.00 1000 20121028 400000.00
A003 P7 400.00 1000 20121028 400000.00
A004 P1 100.00 1000 20121028 100000.00
A004 P2 200.00 1000 20121027 200000.00
A004 P2 200.00 1000 20121028 200000.00
A004 P4 400.00 1000 20121027 400000.00
A004 P4 400.00 1000 20121027 400000.00
A004 P4 400.00 1000 20121028 400000.00
A004 P5 500.00 1000 20121028 500000.00
A004 P6 300.00 1000 20121028 300000.00
A004 P1 100.00 1000 20121028 100000.00
A004 P1 100.00 1000 20121028 100000.00
A004 P1 100.00 1000 20121027 100000.00
A004 P1 100.00 1000 20121027 100000.00
122
School of MAINFRAMES Email : schoolofmainframes@gmail.com Ph : 040-64515137
AGENT ID PROD CODE PROD PRICE QUANTITY SALES DATE TOTAL AMNT
A005 P2 200.00 1000 20121027 200000.00
A005 P2 200.00 1000 20121028 200000.00
A005 P2 200.00 1000 20121027 200000.00
A005 P2 200.00 1000 20121028 200000.00
A005 P3 300.00 1000 20121027 300000.00
A005 P3 300.00 1000 20121027 300000.00
A005 P4 400.00 1000 20121027 400000.00
A005 P5 500.00 1000 20121028 500000.00
A005 P6 300.00 1000 20121027 300000.00
A006 P1 100.00 1000 20121027 100000.00
A006 P3 300.00 1000 20121028 300000.00
A006 P5 500.00 1000 20121028 500000.00
123
School of MAINFRAMES Email : schoolofmainframes@gmail.com Ph : 040-64515137
Requirement : Write an agent sales report with report headers and report formats.
Write detail records, sub totals on agent id and grand totals for the report.
Write every new agent in a new page.
See the layout of input files from program and report format from the report and generate report.
Program :
IDENTIFICATION DIVISION.
PROGRAM-ID. REPORTY.
AUTHOR. MADHU PADALA.
ENVIRONMENT DIVISION.
INPUT-OUTPUT SECTION.
FILE-CONTROL.
DATA DIVISION.
FILE SECTION.
FD SALES-IN.
01 IN-REC.
05 IN-AGENT-ID PIC X(04).
05 IN-PRODUCT-CODE PIC X(02).
05 IN-PRODUCT-PRICE PIC 9(7)V99.
05 IN-QUANTITY PIC 9(05).
05 IN-SALES-DATE PIC X(08).
FD SALES-REPORT.
01 REPORT-REC PIC X(132).
FD DATE-CARD.
01 DATE-REC.
05 CYCLE-DATE.
10 CYC-DATE-CCYY PIC X(4).
10 CYC-DATE-MM PIC X(2).
10 CYC-DATE-DD PIC X(2).
05 FILLER PIC X(72).
WORKING-STORAGE SECTION.
01 WS-EOF PIC X(1) VALUE 'N'.
01 WS-FIRST-TIME PIC X(1) VALUE 'Y'.
01 WS-LINE-COUNT PIC S9(4) COMP VALUE ZEROS.
01 WS-PAGE-COUNT PIC S9(6) COMP VALUE ZEROS.
01 WS-REPORT-REC PIC X(133) VALUE SPACES.
01 WS-PREV-AGENT-ID PIC X(04) VALUE SPACES.
124
School of MAINFRAMES Email : schoolofmainframes@gmail.com Ph : 040-64515137
01 WS-DATE.
05 WS-DATE-YY PIC X(2).
05 WS-DATE-MM PIC X(2).
05 WS-DATE-DD PIC X(2).
01 HEADER-LINE1.
05 FILLER PIC X(01) VALUE SPACES.
05 HDR1-DATE.
10 HDR1-DATE-MM PIC X(02).
10 FILLER PIC X(01) VALUE '/'.
10 HDR1-DATE-DD PIC X(02).
10 FILLER PIC X(01) VALUE '/'.
10 HDR1-DATE-YY PIC X(02).
05 FILLER PIC X(01) VALUE SPACES.
05 FILLER PIC X(20) VALUE SPACES.
05 FILLER PIC X(19) VALUE
'ABC COMPANY REPORTS'.
05 FILLER PIC X(10) VALUE SPACES.
05 FILLER PIC X(05) VALUE 'PAGE '.
05 HDR1-PAGE-COUNT PIC ZZZZ9.
01 HEADER-LINE2.
05 FILLER PIC X(01) VALUE SPACES.
05 FILLER PIC X(27) VALUE SPACES.
05 FILLER PIC X(11) VALUE
'CYCLE DATE:'.
05 HDR2-DATE.
10 HDR2-DATE-CCYY PIC X(04).
10 FILLER PIC X(01) VALUE '/'.
10 HDR2-DATE-MM PIC X(02).
10 FILLER PIC X(01) VALUE '/'.
10 HDR2-DATE-DD PIC X(02).
01 DETAIL-HEADER.
05 FILLER PIC X(01) VALUE SPACES.
05 FILLER PIC X(10) VALUE
'AGENT ID '.
05 FILLER PIC X(03) VALUE SPACES.
05 FILLER PIC X(10) VALUE
'PROD CODE '.
05 FILLER PIC X(05) VALUE SPACES.
05 FILLER PIC X(10) VALUE
'PROD PRICE'.
05 FILLER PIC X(05) VALUE SPACES.
05 FILLER PIC X(10) VALUE
'QUANTITY '.
05 FILLER PIC X(04) VALUE SPACES.
05 FILLER PIC X(10) VALUE
'SALES DATE'.
05 FILLER PIC X(05) VALUE SPACES.
05 FILLER PIC X(10) VALUE
'TOTAL AMNT'.
125
School of MAINFRAMES Email : schoolofmainframes@gmail.com Ph : 040-64515137
01 DETAIL-LINE.
05 FILLER PIC X(03) VALUE SPACES.
05 DTL-AGENT-ID PIC X(04).
05 FILLER PIC X(11) VALUE SPACES.
05 DTL-PROD-CODE PIC X(02).
05 FILLER PIC X(10) VALUE SPACES.
05 DTL-PRODUCT-PRICE PIC ZZZ9.99.
05 FILLER PIC X(08) VALUE SPACES.
05 DTL-QUANTITY PIC 9(4).
05 FILLER PIC X(10) VALUE SPACES.
05 DTL-SALES-DATE PIC X(08).
05 FILLER PIC X(06) VALUE SPACES.
05 DTL-TOTAL-AMT PIC ZZZZZ9.99.
01 SUB-TOTALS-LINE.
05 FILLER PIC X(15) VALUE SPACES.
05 FILLER PIC X(28) VALUE
'TOTAL SALES FOR THIS AGENT: '.
05 STL-AGENT-AMT PIC ZZZZZZZZ9.99.
01 GRAND-TOTALS-LINE.
05 FILLER PIC X(15) VALUE SPACES.
05 FILLER PIC X(28) VALUE
'TOTAL SALES FOR THE REPORT: '.
05 GTL-REPORT-AMT PIC ZZZZZZZZ9.99.
PROCEDURE DIVISION.
100000-INITIALIZATION.
OPEN INPUT SALES-IN
DATE-CARD
OUTPUT SALES-REPORT.
READ DATE-CARD.
MOVE CYC-DATE-CCYY TO HDR2-DATE-CCYY.
MOVE CYC-DATE-MM TO HDR2-DATE-MM.
MOVE CYC-DATE-DD TO HDR2-DATE-DD.
100000-EXIT.
EXIT.
200000-PROCESS.
READ SALES-IN AT END MOVE 'Y' TO WS-EOF
GO TO 200000-EXIT.
126
School of MAINFRAMES Email : schoolofmainframes@gmail.com Ph : 040-64515137
IF WS-FIRST-TIME = 'Y'
MOVE 'N' TO WS-FIRST-TIME
MOVE IN-AGENT-ID TO WS-PREV-AGENT-ID
END-IF.
200000-EXIT.
EXIT.
210000-AGENT-BREAK.
MOVE WS-AGENT-TOTAL TO STL-AGENT-AMT.
MOVE SUB-TOTALS-LINE TO WS-REPORT-REC.
PERFORM 220000-WRITE-REPORT THRU 220000-EXIT.
210000-EXIT.
EXIT.
220000-WRITE-REPORT.
IF WS-LINE-COUNT = 0 OR > 54
ADD 1 TO WS-PAGE-COUNT
MOVE WS-PAGE-COUNT TO HDR1-PAGE-COUNT
MOVE HEADER-LINE1 TO REPORT-REC
WRITE REPORT-REC AFTER ADVANCING PAGE
MOVE HEADER-LINE2 TO REPORT-REC
WRITE REPORT-REC AFTER ADVANCING 1 LINE
MOVE SPACES TO REPORT-REC
WRITE REPORT-REC AFTER ADVANCING 1 LINE
MOVE DETAIL-HEADER TO REPORT-REC
WRITE REPORT-REC AFTER ADVANCING 1 LINE
MOVE 4 TO WS-LINE-COUNT
END-IF
MOVE WS-REPORT-REC TO REPORT-REC
WRITE REPORT-REC AFTER ADVANCING 1 LINE
ADD 1 TO WS-LINE-COUNT.
127
School of MAINFRAMES Email : schoolofmainframes@gmail.com Ph : 040-64515137
220000-EXIT.
EXIT.
300000-TERMINATION.
IF WS-FIRST-TIME = 'Y'
CONTINUE
ELSE
PERFORM 210000-AGENT-BREAK THRU 210000-EXIT
MOVE WS-GRAND-TOTAL TO GTL-REPORT-AMT
MOVE GRAND-TOTALS-LINE TO WS-REPORT-REC
PERFORM 220000-WRITE-REPORT THRU 220000-EXIT
END-IF.
CLOSE SALES-IN
DATE-CARD
SALES-REPORT.
300000-EXIT.
EXIT.
RunJCL :
//TSMFDASR JOB 'MADHU PADALA',MSGLEVEL=(1,1),NOTIFY=&SYSUID
//*
//JOBLIB DD DSN=IBMUSER.SMF.LOADLIB,DISP=SHR
//*
//JS10 EXEC PGM=SORT
//SYSOUT DD SYSOUT=*
//*
//SORTIN DD DSN=IBMUSER.SMF.SALESIN,DISP=SHR
//SORTWK01 DD UNIT=SYSDA,SPACE=(TRK,(1,1),RLSE)
//SORTOUT DD DSN=&&TEMP1,
// DISP=(NEW,PASS),
// UNIT=SYSDA,
// SPACE=(TRK,(1,1),RLSE),
// DCB=(RECFM=FB,LRECL=28,BLKSIZE=0)
//SYSIN DD *
SORT FIELDS=(1,4,CH,A)
/*
//JS20 EXEC PGM=REPORTY
//SYSOUT DD SYSOUT=*
//*
//SALESIN DD DSN=&&TEMP1,DISP=(OLD,DELETE)
//DATECARD DD DSN=IBMUSER.SMF.CNTLLIB(CYCDATE),DISP=SHR
//SALESRPT DD SYSOUT=(*,$002),
// DCB=(RECFM=FBA,LRECL=133,BLKSIZE=0)
//*
128
School of MAINFRAMES Email : schoolofmainframes@gmail.com Ph : 040-64515137
AGENT ID PROD CODE PROD PRICE QUANTITY SALES DATE TOTAL AMNT
A001 P1 100.00 1000 20121027 100000.00
A001 P1 100.00 1000 20121028 100000.00
A001 P1 100.00 1000 20121028 100000.00
A001 P2 200.00 1000 20121028 200000.00
A001 P2 200.00 1000 20121028 200000.00
A001 P2 200.00 1000 20121027 200000.00
A001 P3 300.00 1000 20121028 300000.00
A001 P3 300.00 1000 20121028 300000.00
A001 P3 300.00 1000 20121028 300000.00
A001 P5 500.00 1000 20121027 500000.00
A001 P5 700.00 1000 20121028 700000.00
A001 P7 400.00 1000 20121027 400000.00
TOTAL SALES FOR THIS AGENT: 3400000.00
AGENT ID PROD CODE PROD PRICE QUANTITY SALES DATE TOTAL AMNT
A002 P1 100.00 1000 20121028 100000.00
A002 P1 100.00 1000 20121027 100000.00
A002 P1 100.00 1000 20121028 100000.00
A002 P1 100.00 1000 20121027 100000.00
A002 P1 100.00 1000 20121027 100000.00
A002 P2 200.00 1000 20121028 200000.00
A002 P2 200.00 1000 20121028 200000.00
A002 P2 200.00 1000 20121028 200000.00
A002 P3 300.00 1000 20121028 300000.00
A002 P5 700.00 1000 20121028 700000.00
A002 P5 700.00 1000 20121027 700000.00
A002 P6 300.00 1000 20121027 300000.00
A002 P7 400.00 1000 20121028 400000.00
TOTAL SALES FOR THIS AGENT: 3500000.00
AGENT ID PROD CODE PROD PRICE QUANTITY SALES DATE TOTAL AMNT
A003 P1 100.00 1000 20121027 100000.00
A003 P1 100.00 1000 20121028 100000.00
A003 P1 100.00 1000 20121028 100000.00
A003 P1 100.00 1000 20121028 100000.00
A003 P2 200.00 1000 20121027 200000.00
A003 P3 300.00 1000 20121028 300000.00
A003 P4 400.00 1000 20121028 400000.00
A003 P5 700.00 1000 20121028 700000.00
A003 P7 400.00 1000 20121028 400000.00
A003 P7 400.00 1000 20121028 400000.00
TOTAL SALES FOR THIS AGENT: 2800000.00
129
School of MAINFRAMES Email : schoolofmainframes@gmail.com Ph : 040-64515137
AGENT ID PROD CODE PROD PRICE QUANTITY SALES DATE TOTAL AMNT
A004 P1 100.00 1000 20121028 100000.00
A004 P2 200.00 1000 20121027 200000.00
A004 P2 200.00 1000 20121028 200000.00
A004 P4 400.00 1000 20121027 400000.00
A004 P4 400.00 1000 20121027 400000.00
A004 P4 400.00 1000 20121028 400000.00
A004 P5 500.00 1000 20121028 500000.00
A004 P6 300.00 1000 20121028 300000.00
A004 P1 100.00 1000 20121028 100000.00
A004 P1 100.00 1000 20121028 100000.00
A004 P1 100.00 1000 20121027 100000.00
A004 P1 100.00 1000 20121027 100000.00
A004 P2 200.00 1000 20121028 200000.00
A004 P2 200.00 1000 20121028 200000.00
TOTAL SALES FOR THIS AGENT: 3300000.00
AGENT ID PROD CODE PROD PRICE QUANTITY SALES DATE TOTAL AMNT
A005 P1 100.00 1000 20121027 100000.00
A005 P1 100.00 1000 20121028 100000.00
A005 P2 200.00 1000 20121027 200000.00
A005 P2 200.00 1000 20121028 200000.00
A005 P2 200.00 1000 20121027 200000.00
A005 P2 200.00 1000 20121028 200000.00
A005 P3 300.00 1000 20121027 300000.00
A005 P3 300.00 1000 20121027 300000.00
A005 P4 400.00 1000 20121027 400000.00
A005 P5 500.00 1000 20121028 500000.00
A005 P6 300.00 1000 20121027 300000.00
TOTAL SALES FOR THIS AGENT: 2800000.00
AGENT ID PROD CODE PROD PRICE QUANTITY SALES DATE TOTAL AMNT
A006 P1 100.00 1000 20121027 100000.00
A006 P3 300.00 1000 20121028 300000.00
A006 P5 500.00 1000 20121028 500000.00
TOTAL SALES FOR THIS AGENT: 900000.00
130
School of MAINFRAMES Email : schoolofmainframes@gmail.com Ph : 040-64515137
S0C7
Requirement : Read sales record and generate output file by calculating sales amount with the
multiplication of product price and quantity. By using HEX ON, take a non numeric data on
product price(COMP-3 field) of input file. This will cause the program to S0C7 abend. Find the
abend causing statement and record after the abend.
Program :
IDENTIFICATION DIVISION.
PROGRAM-ID. S0C7.
AUTHOR. MADHU PADALA.
ENVIRONMENT DIVISION.
INPUT-OUTPUT SECTION.
FILE-CONTROL.
DATA DIVISION.
FILE SECTION.
FD SALES-FILE.
01 SALES-REC.
05 AGENT-ID PIC X(04).
05 PRODUCT-CODE PIC X(04).
05 PRODUCT-PRICE PIC S9(7)V99 COMP-3.
05 QTY PIC 9(4).
FD OUT-FILE.
01 OUT-REC.
05 OUT-AGENT-ID PIC X(04).
05 OUT-PRODUCT-CODE PIC X(04).
05 OUT-PRODUCT-PRICE PIC 9(7)V99.
05 OUT-QTY PIC 9(4).
05 OUT-SALES-AMT PIC 9(9)V99.
WORKING-STORAGE SECTION.
01 WS-EOF-IN PIC X(1) VALUE 'N'.
PROCEDURE DIVISION.
131
School of MAINFRAMES Email : schoolofmainframes@gmail.com Ph : 040-64515137
100000-INITIALIZATION.
100000-EXIT.
EXIT.
200000-PROCESS.
READ SALES-FILE AT END MOVE 'Y' TO WS-EOF-IN
GO TO 200000-EXIT.
DISPLAY SALES-REC
200000-EXIT.
EXIT.
300000-TERMINATION.
CLOSE SALES-FILE
OUT-FILE.
300000-EXIT.
EXIT.
RunJCL :
//IBMUSERX JOB 'MADHU PADALA',MSGLEVEL=(1,1),NOTIFY=&SYSUID
//*
//JOBLIB DD DSN=IBMUSER.SMF.LOADLIB,DISP=SHR
//*
//JS10 EXEC PGM=IEFBR14
//DD1 DD DSN=IBMUSER.SMF.S0C7.OUT,
// DISP=(MOD,DELETE,DELETE),
// SPACE=(CYL,(1,1),RLSE)
//*
//JS20 EXEC PGM=S0C7
//SYSOUT DD SYSOUT=*
//*
//SALES DD DSN=IBMUSER.SMF.S0C7.INFILE,DISP=SHR
//OUTFILE DD DSN=IBMUSER.SMF.S0C7.OUT,
// DISP=(NEW,CATLG,DELETE),
// UNIT=SYSDA,
// SPACE=(CYL,(1,1),RLSE),
// DCB=(RECFM=FB,LRECL=32,BLKSIZE=0)
//*
132
School of MAINFRAMES Email : schoolofmainframes@gmail.com Ph : 040-64515137
Input File :
IBMUSER.SMF.S0C7.INFILE
A001P001 0100
A002P001 0100
A003P001 0100
A004P001 0100
A005P001 v 0100
A006P001 0100
A007P001 0100
133
School of MAINFRAMES Email : schoolofmainframes@gmail.com Ph : 040-64515137
S0C7 Solution
Purpose : To know about
1. How to give a permanent solution to S0C7
2. How to skip the abend causing record programmatically
Requirement : Read sales record and generate output file by calculating sales amount with the
multiplication of product price and quantity. By using HEX ON, take a non numeric data on
product price(COMP-3 field) of input file.
Check the product price is numeric or not. If it is numeric then process this record to write into
output, otherwise, write input record into error file.
Program :
IDENTIFICATION DIVISION.
PROGRAM-ID. S0C7SOL.
AUTHOR. MADHU PADALA.
ENVIRONMENT DIVISION.
INPUT-OUTPUT SECTION.
FILE-CONTROL.
DATA DIVISION.
FILE SECTION.
FD SALES-FILE.
01 SALES-REC.
05 AGENT-ID PIC X(04).
05 PRODUCT-CODE PIC X(04).
05 PRODUCT-PRICE PIC S9(7)V99 COMP-3.
05 QTY PIC 9(4).
FD OUT-FILE.
01 OUT-REC.
05 OUT-AGENT-ID PIC X(04).
05 OUT-PRODUCT-CODE PIC X(04).
05 OUT-PRODUCT-PRICE PIC S9(7)V99 COMP-3.
05 OUT-QTY PIC 9(04).
05 OUT-SALES-AMT PIC 9(09)V99.
FD ERROR-FILE.
01 ERROR-REC PIC X(17).
WORKING-STORAGE SECTION.
01 WS-EOF-IN PIC X(1) VALUE 'N'.
PROCEDURE DIVISION.
000000-MAINLINE.
134
School of MAINFRAMES Email : schoolofmainframes@gmail.com Ph : 040-64515137
100000-INITIALIZATION.
100000-EXIT.
EXIT.
200000-PROCESS.
READ SALES-FILE AT END MOVE 'Y' TO WS-EOF-IN
GO TO 200000-EXIT.
DISPLAY SALES-REC
200000-EXIT.
EXIT.
300000-TERMINATION.
CLOSE SALES-FILE
ERROR-FILE
OUT-FILE.
300000-EXIT.
EXIT.
RunJCL :
//IBMUSERX JOB 'MADHU PADALA',MSGLEVEL=(1,1),NOTIFY=&SYSUID
//*
//JOBLIB DD DSN=IBMUSER.SMF.LOADLIB,DISP=SHR
//*
//JS10 EXEC PGM=IEFBR14
//DD1 DD DSN=IBMUSER.SMF.S0C7.OUT,
// DISP=(MOD,DELETE,DELETE),
// SPACE=(CYL,(1,1),RLSE)
//DD1 DD DSN=IBMUSER.SMF.S0C7.ERROR,
// DISP=(MOD,DELETE,DELETE),
// SPACE=(CYL,(1,1),RLSE)
//*
//JS20 EXEC PGM=S0C7SOL
//SYSOUT DD SYSOUT=*
//*
135
School of MAINFRAMES Email : schoolofmainframes@gmail.com Ph : 040-64515137
//SALES DD DSN=IBMUSER.SMF.S0C7.INFILE,DISP=SHR
//OUTFILE DD DSN=IBMUSER.SMF.S0C7.OUT,
// DISP=(NEW,CATLG,DELETE),
// UNIT=SYSDA,
// SPACE=(CYL,(1,1),RLSE),
// DCB=(RECFM=FB,LRECL=28,BLKSIZE=0)
//ERRORFLE DD DSN=IBMUSER.SMF.S0C7.ERROR,
// DISP=(NEW,CATLG,DELETE),
// UNIT=SYSDA,
// SPACE=(CYL,(1,1),RLSE),
// DCB=(RECFM=FB,LRECL=17,BLKSIZE=0)
//*
Error :
IBMUSER.SMF.S0C7.ERROR
A005P001 v 0100
Output :
IBMUSER.SMF.S0C7.OUT
A001P001 010000050000000
A002P001 010000050000000
A003P001 010000050000000
A004P001 010000050000000
A006P001 010000050000000
A007P001 010000050000000
136
School of MAINFRAMES Email : schoolofmainframes@gmail.com Ph : 040-64515137
Requirement : Take the input file that has records with three different layouts for three different
transactions as shown in the program. These transactions are Deposit, withdrawal and transfer.
All these transactions are padded with a filler in the end to make each record to 100 bytes. Write
output file with these records without this filler, so that each record will have different length.
Program :
IDENTIFICATION DIVISION.
PROGRAM-ID. FB2VB1.
AUTHOR. MADHU PADALA.
ENVIRONMENT DIVISION.
INPUT-OUTPUT SECTION.
FILE-CONTROL.
SELECT IN-FILE ASSIGN TO INFILE.
SELECT OUT-FILE ASSIGN TO OUTFILE
FILE STATUS IS WS-FILE-STATUS.
DATA DIVISION.
FILE SECTION.
FD IN-FILE.
01 IN-REC.
05 TRX-TYPE PIC X(02).
88 DEPOSIT-TRX VALUE 'DE'.
88 WITHDRAWL-TRX VALUE 'WI'.
88 TRANSFER-TRX VALUE 'TR'.
05 IN-TRANSACTION-INFO PIC X(98).
01 DEPOSIT-REC.
05 IN-TRX-TYPE PIC X(02).
05 IN-DEPOSIT-ACCT PIC X(10).
05 IN-DEPOSITEE-NAME PIC X(10).
05 IN-DEPOSIT-BANK PIC X(10).
05 IN-DEPOSIT-BRANCH PIC X(03).
05 IN-DEPOSIT-DATE PIC X(08).
05 IN-DEPOSIT-AMOUNT PIC 9(08)V99.
05 IN-DEPOSIT-TYPE PIC X(01).
88 DRAFT-OR-CHEQUE VALUE 'D'.
88 CASH VALUE 'C'.
05 IN-DRAFT-BANK PIC X(08).
05 IN-DEPOSITOR-PAN PIC X(10).
05 FILLER PIC X(28).
01 WITHDRAWL-REC.
05 IN-TRX-TYPE PIC X(02).
137
School of MAINFRAMES Email : schoolofmainframes@gmail.com Ph : 040-64515137
138
School of MAINFRAMES Email : schoolofmainframes@gmail.com Ph : 040-64515137
WORKING-STORAGE SECTION.
01 WS-EOF PIC X(01) VALUE 'N'.
01 OUTFILE-LENGTH PIC 9(04) COMP VALUE ZERO.
01 WS-FILE-STATUS PIC X(02) VALUE SPACES.
PROCEDURE DIVISION.
000000-MAINLINE.
PERFORM 100000-INITIALIZATION THRU 100000-EXIT.
PERFORM 200000-PROCESS THRU 200000-EXIT
UNTIL WS-EOF = 'Y'.
PERFORM 300000-TERMINATION THRU 300000-EXIT.
STOP RUN.
100000-INITIALIZATION.
OPEN INPUT IN-FILE
OUTPUT OUT-FILE.
100000-EXIT.
EXIT.
200000-PROCESS.
READ IN-FILE AT END MOVE 'Y' TO WS-EOF
GO TO 200000-EXIT.
EVALUATE TRX-TYPE IN IN-REC
WHEN 'DE'
MOVE LENGTH OF OUT-DEPOSIT-REC TO OUTFILE-LENGTH
WHEN 'WI'
MOVE LENGTH OF OUT-WITHDRAWL-REC TO OUTFILE-LENGTH
WHEN 'TR'
MOVE LENGTH OF OUT-TRANSFER-REC TO OUTFILE-LENGTH
END-EVALUATE.
MOVE IN-REC TO OUT-REC
WRITE OUT-REC.
200000-EXIT.
EXIT.
300000-TERMINATION.
CLOSE IN-FILE
OUT-FILE.
300000-EXIT.
EXIT.
RunJCL :
//IBMUSERX JOB 'MADHU PADALA',MSGLEVEL=(1,1),NOTIFY=&SYSUID
//*
//JOBLIB DD DSN=IBMUSER.SMF.LOADLIB,DISP=SHR
//*
//JS10 EXEC PGM=IEFBR14
//DD1 DD DSN=IBMUSER.SMF.FB2VB1.OUT,
// DISP=(MOD,DELETE,DELETE),
// SPACE=(CYL,(1,1),RLSE)
//*
//JS20 EXEC PGM=FB2VB1
//SYSOUT DD SYSOUT=*
//SYSPRINT DD SYSOUT=*
//*
//INFILE DD DSN=IBMUSER.SMF.FB2VB1.IN,DISP=SHR
//OUTFILE DD DSN=IBMUSER.SMF.FB2VB1.OUT,
// DISP=(NEW,CATLG,DELETE),
// UNIT=SYSALLDA,
// SPACE=(CYL,(1,1),RLSE),
// DCB=(RECFM=VB,LRECL=104,BLKSIZE=108)
//*
139
School of MAINFRAMES Email : schoolofmainframes@gmail.com Ph : 040-64515137
Input File :
IBMUSER.SMF.FB2VB1.IN
DE0511111111MFSCHOOL ICICI JUB201009010000500000C ALVPP3618P
DE0511111112JEFFERSON HDFC JUB201009010000500000C ALVPP3619P
WIMADHU PADALA 012365ICICI JUB201009050000600000O
WIRAVI MULAKALA 012365HDFC JUB201009050000600000S
TR1111111112HDFC MADHU 2222222222ICICI RAVI 000070000020100901
TR1111111113ICICI HITHA 2222222222ICICI RAVI 000070000020100901
Output file :
IBMUSER.SMF.FB2VB1.OUT
DE0511111111MFSCHOOL ICICI JUB201009010000500000C ALVPP3618P
DE0511111112JEFFERSON HDFC JUB201009010000500000C ALVPP3619P
WIMADHU PADALA 012365ICICI JUB201009050000600000O
WIRAVI MULAKALA 012365HDFC JUB201009050000600000S
TR1111111112HDFC MADHU 2222222222ICICI RAVI 000070000020100901
TR1111111113ICICI HITHA 2222222222ICICI RAVI 000070000020100901
140
School of MAINFRAMES Email : schoolofmainframes@gmail.com Ph : 040-64515137
Purpose : To know
1. How to find the actual length of each record in variable length file.
Requirement : Read the output file of program FB2VB1 and display the transaction code and its
length.
Program :
IDENTIFICATION DIVISION.
PROGRAM-ID. VBREAD1.
AUTHOR. MADHU PADALA.
ENVIRONMENT DIVISION.
INPUT-OUTPUT SECTION.
FILE-CONTROL.
SELECT IN-FILE ASSIGN TO INFILE
FILE STATUS IS WS-FILE-STATUS.
DATA DIVISION.
FILE SECTION.
FD IN-FILE
RECORDING MODE IS V
RECORD VARYING FROM 1 TO 100 CHARACTERS
DEPENDING ON INFILE-LENGTH.
01 IN-REC.
05 TRX-TYPE PIC X(02).
88 DEPOSIT-TRX VALUE 'DE'.
88 WITHDRAWL-TRX VALUE 'WI'.
88 TRANSFER-TRX VALUE 'TR'.
05 FILLER PIC X(98).
WORKING-STORAGE SECTION.
01 INFILE-LENGTH PIC 9(04) COMP VALUE ZERO.
01 WS-FILE-STATUS PIC X(2).
PROCEDURE DIVISION.
OPEN INPUT IN-FILE
PERFORM UNTIL WS-FILE-STATUS = '10'
READ IN-FILE
IF WS-FILE-STATUS = '00'
DISPLAY TRX-TYPE ';' INFILE-LENGTH
END-IF
END-PERFORM
CLOSE IN-FILE
STOP RUN.
RunJCL :
//IBMUSERX JOB 'MADHU PADALA',MSGLEVEL=(1,1),NOTIFY=&SYSUID
//*
//JOBLIB DD DSN=IBMUSER.SMF.LOADLIB,DISP=SHR
//*
//JS20 EXEC PGM=VBREAD1
//SYSOUT DD SYSOUT=*
141
School of MAINFRAMES Email : schoolofmainframes@gmail.com Ph : 040-64515137
//*
//INFILE DD DSN=IBMUSER.SMF.FB2VB1.OUT,DISP=SHR
Input file :
IBMUSER.SMF.FB2VB1.OUT
DE0511111111MFSCHOOL ICICI JUB201009010000500000C ALVPP3618P
DE0511111112JEFFERSON HDFC JUB201009010000500000C ALVPP3619P
WIMADHU PADALA 012365ICICI JUB201009050000600000O
WIRAVI MULAKALA 012365HDFC JUB201009050000600000S
TR1111111112HDFC MADHU 2222222222ICICI RAVI 000070000020100901
TR1111111113ICICI HITHA 2222222222ICICI RAVI 000070000020100901
Output :
DE;0072
DE;0072
WI;0060
WI;0060
TR;0080
TR;0080
142
School of MAINFRAMES Email : schoolofmainframes@gmail.com Ph : 040-64515137
Requirement : Employee input file has a children info occurs 5 times whether the employee has
children or not. Create Employee output file that has children info occurs 0 to 5 times depending
on number of children.
Program :
IDENTIFICATION DIVISION.
PROGRAM-ID. FB2VB2.
AUTHOR. MADHU PADALA.
ENVIRONMENT DIVISION.
INPUT-OUTPUT SECTION.
FILE-CONTROL.
DATA DIVISION.
FILE SECTION.
FD EMP-IN
RECORDING MODE IS F
RECORD CONTAINS 125 CHARACTERS.
01 EMP-IN-REC.
05 EMP-NUM PIC X(04).
05 EMP-NAME PIC X(20).
05 CHILDREN-NUM PIC 9(01).
05 CHILDREN-INFO OCCURS 5 TIMES.
10 CHILD-NAME PIC X(10).
10 CHILD-DOB PIC 9(08).
10 CHILD-AGE PIC 9(02).
FD EMP-OUT
RECORDING MODE IS V
RECORD VARYING FROM 1 TO 125 CHARACTERS
DEPENDING ON OUT-FILE-LEN.
01 EMP-OUT-REC.
05 OUT-EMP-NUM PIC X(04).
05 OUT-EMP-NAME PIC X(20).
05 OUT-CHILDREN-NUM PIC 9(01).
05 OUT-CHILDREN-INFO OCCURS 0 TO 5 TIMES
DEPENDING ON OUT-CHILDREN-NUM.
10 OUT-CHILD-NAME PIC X(10).
10 OUT-CHILD-DOB PIC 9(08).
10 OUT-CHILD-AGE PIC 9(02).
WORKING-STORAGE SECTION.
01 WS-EOF PIC X(1) VALUE 'N'.
01 WS-COUNT PIC 9(1) VALUE ZEROS.
143
School of MAINFRAMES Email : schoolofmainframes@gmail.com Ph : 040-64515137
PROCEDURE DIVISION.
100000-INITIALIZATION.
OPEN INPUT EMP-IN
OUTPUT EMP-OUT.
100000-EXIT.
EXIT.
200000-PROCESS.
READ EMP-IN AT END MOVE 'Y' TO WS-EOF
GO TO 200000-EXIT.
300000-TERMINATION.
CLOSE EMP-IN
EMP-OUT.
300000-EXIT.
EXIT.
RunJCL :
//IBMUSERX JOB 'MADHU PADALA',MSGLEVEL=(1,1),NOTIFY=&SYSUID
//*
//JOBLIB DD DSN=IBMUSER.SMF.LOADLIB,DISP=SHR
//*
//JS10 EXEC PGM=IEFBR14
//DD1 DD DSN=IBMUSER.SMF.FB2VB2.OUT,
// DISP=(MOD,DELETE,DELETE),
// SPACE=(CYL,(1,1),RLSE)
//*
//JS20 EXEC PGM=FB2VB2
//SYSOUT DD SYSOUT=*
//*
//EMPIN DD DSN=IBMUSER.SMF.FB2VB2.IN,DISP=SHR
//EMPOUT DD DSN=IBMUSER.SMF.FB2VB2.OUT,
// DISP=(NEW,CATLG,DELETE),
// UNIT=SYSALLDA,
// SPACE=(CYL,(1,1),RLSE),
// DCB=(RECFM=VB,LRECL=129,BLKSIZE=133)
144
School of MAINFRAMES Email : schoolofmainframes@gmail.com Ph : 040-64515137
//*
Input :
IBMUSER.SMF.FB2VB2.IN
E000PRABHAS 0
E001KRISH 1CHINTU 2010030502
E002RAMYA 2NEELU 2009040703RAMU 2011050602
E003SRAVAN 3SHEELA 2008020504SAILAJA 2009050603CHAITRA 2010090702
E004STEPHEN 4DAVID 2008040604FERNANDEZ 2009030503SARA 2010030702LARA 2011091101
E005SIVARAM 5CHITRA 2005090307VARSHA 2007060505NARESH 2010010802SRILEKYA 2011091101LAHARI 2011091101
Output :
IBMUSER.SMF.FB2VB2.OUT
E000PRABHAS 0
E001KRISH 1CHINTU 2010030502
E002RAMYA 2NEELU 2009040703RAMU 2011050602
E003SRAVAN 3SHEELA 2008020504SAILAJA 2009050603CHAITRA 2010090702
E004STEPHEN 4DAVID 2008040604FERNANDEZ 2009030503SARA 2010030702LARA 2011091101
E005SIVARAM 5CHITRA 2005090307VARSHA 2007060505NARESH 2010010802SRILEKYA 2011091101LAHARI 2011091101
145
School of MAINFRAMES Email : schoolofmainframes@gmail.com Ph : 040-64515137
Requirement : Read the output file of program FB2VB2 and display the transaction code and its
length.
Program :
IDENTIFICATION DIVISION.
PROGRAM-ID. VBREAD2.
AUTHOR. MADHU PADALA.
ENVIRONMENT DIVISION.
INPUT-OUTPUT SECTION.
FILE-CONTROL.
SELECT IN-FILE ASSIGN TO INFILE
FILE STATUS IS WS-FILE-STATUS.
DATA DIVISION.
FILE SECTION.
FD IN-FILE
RECORDING MODE IS V
RECORD VARYING FROM 1 TO 125 CHARACTERS
DEPENDING ON INFILE-LENGTH.
01 IN-FILE-REC.
05 IN-EMP-NUM PIC X(04).
05 IN-EMP-NAME PIC X(20).
05 IN-CHILDREN-NUM PIC 9(01).
05 IN-CHILDREN-INFO OCCURS 0 TO 5 TIMES
DEPENDING ON IN-CHILDREN-NUM.
10 IN-CHILD-NAME PIC X(10).
10 IN-CHILD-DOB PIC 9(08).
10 IN-CHILD-AGE PIC 9(02).
WORKING-STORAGE SECTION.
01 INFILE-LENGTH PIC 9(04) COMP VALUE ZERO.
01 WS-FILE-STATUS PIC X(2).
PROCEDURE DIVISION.
OPEN INPUT IN-FILE
PERFORM UNTIL WS-FILE-STATUS = '10'
READ IN-FILE
IF WS-FILE-STATUS = '00'
DISPLAY IN-EMP-NUM ';' IN-CHILDREN-NUM ';'
INFILE-LENGTH
END-IF
END-PERFORM
CLOSE IN-FILE
STOP RUN.
146
School of MAINFRAMES Email : schoolofmainframes@gmail.com Ph : 040-64515137
RunJCL :
//IBMUSERX JOB 'MADHU PADALA',MSGLEVEL=(1,1),NOTIFY=&SYSUID
//*
//JOBLIB DD DSN=IBMUSER.SMF.LOADLIB,DISP=SHR
//*
//JS20 EXEC PGM=VBREAD2
//SYSOUT DD SYSOUT=*
//*
//INFILE DD DSN=IBMUSER.SMF.FB2VB2.OUT,DISP=SHR
Input :
IBMUSER.SMF.FB2VB2.OUT
E000PRABHAS 0
E001KRISH 1CHINTU 2010030502
E002RAMYA 2NEELU 2009040703RAMU 2011050602
E003SRAVAN 3SHEELA 2008020504SAILAJA 2009050603CHAITRA 2010090702
E004STEPHEN 4DAVID 2008040604FERNANDEZ 2009030503SARA 2010030702LARA 2011091101
E005SIVARAM 5CHITRA 2005090307VARSHA 2007060505NARESH 2010010802SRILEKYA 2011091101LAHARI 2011091101
Output :
E000;0;0025
E001;1;0045
E002;2;0065
E003;3;0085
E004;4;0105
E005;5;0125
147
School of MAINFRAMES Email : schoolofmainframes@gmail.com Ph : 040-64515137
Requirement : Write a COBOL program to create and submit a JCL that deletes a file with
IEFBR14.
Program :
IDENTIFICATION DIVISION.
PROGRAM-ID. INTRDR.
AUTHOR. MADHU PADALA.
ENVIRONMENT DIVISION.
INPUT-OUTPUT SECTION.
FILE-CONTROL.
DATA DIVISION.
FILE SECTION.
FD JCL-FILE.
01 JCL-REC PIC X(80).
PROCEDURE DIVISION.
CLOSE JCL-FILE.
STOP RUN.
RunJCL :
//IBMUSERX JOB 'MADHU PADALA',MSGLEVEL=(1,1),NOTIFY=&SYSUID
//*
//JOBLIB DD DSN=IBMUSER.SMF.LOADLIB,DISP=SHR
//*
//JS20 EXEC PGM=INTRDR
//SYSOUT DD SYSOUT=*
//*
//JCLFILE DD SYSOUT=(*,INTRDR)
148
School of MAINFRAMES Email : schoolofmainframes@gmail.com Ph : 040-64515137
149