Professional Documents
Culture Documents
ND II Comp Sci - Com 213 Cobol (R & e Students)
ND II Comp Sci - Com 213 Cobol (R & e Students)
COBOL Programming
Fundamental
ISSC SH
Walker JIA
Version 1.0
Training Schedule
Day 1 Day 2 Day 3 Day 4
Simple iteration
Introduction to with the
Introduction to COBOL Sequential Conditions
PERFORM
Moring Files verb
COBOL Basics 1 Tables and the
Processing PERFORM .
Arithmetic and
Sequential .. VARYING
Edited
Files Pictures
Table of contents
Introduction to COBOL
COBOL Basics 1
COBOL Basics 2
Introduction to Sequential Files
Processing Sequential Files
Simple iteration with the PERFORM verb
Arithmetic and Edited Pictures
Conditions
Tables and the PERFORM ... VARYING
Designing Programs
Introduction to COBOL
Overview
Introduction to COBOL
COBOL
Introduction to COBOL
COBOL idiosyncracies
Introduction to COBOL
Structure of COBOL programs
Program
Program
Divisions
Divisions
Section(s)
Section(s)
Paragraph(s)
Paragraph(s)
Sentence(s)
Sentence(s)
Statement(s)
Statement(s)
7 COBOL Programming Fundamental © 2004 IBM Corporation
ISSC Shanghai, AMS, GCG
Introduction to COBOL
The Four Divisions
– IDENTIFICATION DIVISION.
– ENVIRONMENT DIVISION.
– DATA DIVISION.
– PROCEDURE DIVISION.
Introduction to COBOL
Functions of the four divisions
Introduction to COBOL
COBOL Program Text Structure
IDENTIFICATION DIVISION.
Program Details
Introduction to COBOL
IDENTIFICATION DIVISION
Introduction to COBOL
The IDENTIFICATION DIVISION Syntax
Introduction to COBOL
The DATA DIVISION
Introduction to COBOL
DATA DIVISION Syntax
IDENTIFICATION
IDENTIFICATION DIVISION.
DIVISION.
PROGRAM-ID.
PROGRAM-ID. Sequence-Program.
Sequence-Program.
AUTHOR.
AUTHOR. Michael Coughlan.
Michael Coughlan.
DATA
DATA DIVISION.
DIVISION.
WORKING-STORAGE
WORKING-STORAGE SECTION.
SECTION.
01
01 Num1
Num1 PIC
PIC 99 VALUE
VALUE ZEROS.
ZEROS.
01 Num2
01 Num2 PIC 9 VALUE ZEROS.
PIC 9 VALUE ZEROS.
01
01 Result
Result PIC
PIC 99
99 VALUE
VALUE ZEROS.
ZEROS.
14 COBOL Programming Fundamental © 2004 IBM Corporation
ISSC Shanghai, AMS, GCG
Introduction to COBOL
The PROCEDURE DIVISION
§ The PROCEDURE DIVISION is where all the data described
in the DATA DIVISION is processed and produced. It is here
that the programmer describes his algorithm.
Introduction to COBOL
Sections
§ A section begins with the section name and ends where the next
section name is encountered or where the program text ends.
Introduction to COBOL
Paragraphs
Introduction to COBOL
Sentences and Statements
Introduction to COBOL
A Full COBOL program
IDENTIFICATION
IDENTIFICATIONDIVISION.
DIVISION.
PROGRAM-ID. SAMPLE1.
PROGRAM-ID. SAMPLE1.
AUTHOR.
AUTHOR. Michael
MichaelCoughlan.
Coughlan.
DATA
DATADIVISION.
DIVISION.
WORKING-STORAGE
WORKING-STORAGESECTION.
SECTION.
01 Num1
01 Num1 PIC
PIC 9 VALUEZEROS.
9 VALUE ZEROS.
01 Num2
01 Num2 PIC 9 VALUE ZEROS.
PIC 9 VALUE ZEROS.
01 Result
01 Result PIC
PIC99
99VALUE
VALUEZEROS.
ZEROS.
PROCEDURE
PROCEDUREDIVISION.
DIVISION.
CalculateResult.
CalculateResult.
ACCEPT
ACCEPTNum1.
Num1.
ACCEPT Num2.
ACCEPT Num2.
MULTIPLY
MULTIPLYNum1
Num1BY BYNum2
Num2GIVING
GIVINGResult.
Result.
DISPLAY "Result is = ", Result.
DISPLAY "Result is = ", Result.
STOP
STOPRUN.
RUN.
Introduction to COBOL
The minimum COBOL program
IDENTIFICATION DIVISION.
IDENTIFICATION DIVISION.
PROGRAM-ID. SAMPLE2.
PROGRAM-ID. SAMPLE2.
PROCEDURE DIVISION.
PROCEDURE DIVISION.
DisplayPrompt.
DisplayPrompt.
DISPLAY "I did it".
DISPLAY "I did it".
STOP RUN.
STOP RUN.
Table of contents
Introduction to COBOL
COBOL Basics 1
COBOL Basics 2
Introduction to Sequential Files
Processing Sequential Files
Simple iteration with the PERFORM verb
Arithmetic and Edited Pictures
Conditions
Tables and the PERFORM ... VARYING
Designing Programs
COBOL Basics 1
Overview
COBOL Basics 1
COBOL coding rules
COBOL Basics 1
Name Construction
COBOL Basics 1
Describing DATA
COBOL Basics 1
Data-Names / Variables
COBOL Basics 1
Using Variables
StudentName
COBOL Basics 1
Using Variables
StudentName
J O H N
COBOL Basics 1
Using Variables
StudentName
My name is JOHN
J O H N
COBOL Basics 1
COBOL Data Types
§ For the time being we will focus on just two data types,
– numeric
– text or string
COBOL Basics 1
Quick Review of “Data Typing”
§ The type usually determines the range of values the data item can store.
For instance a CARDINAL item can store values between 0..65,535 and an
INTEGER between -32,768..32,767
§ From the type of the item the compiler can establish how much memory to
set aside for storing its values.
COBOL Basics 1
COBOL data description
COBOL Basics 1
COBOL ‘PICTURE’ Clause symbols
§ To create the required ‘picture’ the programmer uses a set of symbols.
COBOL Basics 1
COBOL ‘PICTURE’ Clauses
§ Some examples
PICTURE 999 a three digit (+ive only) integer
PICTURE S999 a three digit (+ive/-ive) integer
PICTURE XXXX a four character text item or string
PICTURE 99V99 a +ive ‘real’ in the range 0 to 99.99
PICTURE S9V9 a +ive/-ive ‘real’ in the range ?
COBOL Basics 1
Abbreviating recurring symbols
COBOL Basics 1
Declaring DATA in COBOL
§ In COBOL a variable declaration consists of a line containing the following
items;
1. A level number.
2. A data-name or identifier.
3. A PICTURE clause.
DATA DIVISION.
WORKING-STORAGE SECTION.
01 Num1 PIC 999 VALUE ZEROS.
01 VatRate PIC V99 VALUE .18.
01 StudentName PIC X(10) VALUE SPACES.
DATA
Num1
Num1 VatRate
VatRate StudentName
StudentName
000
000 .18
.18
36 COBOL Programming Fundamental © 2004 IBM Corporation
ISSC Shanghai, AMS, GCG
COBOL Basics 1
COBOL Literals
§ Numeric literals may consist of numerals, the decimal point and the plus or
minus sign. Numeric literals are not enclosed in quotes.
e.g. 123, 123.45, -256, +2987
COBOL Basics 1
Figurative Constants
SPACE
SPACEororSPACES
SPACES == ¨¨
ZERO
ZEROor
orZEROS
ZEROSor
orZEROS
ZEROS == 00
QUOTE
QUOTEororQUOTES
QUOTES == ""
HIGH -VALUE or
HIGH-VALUE orHIGH -VALUES
HIGH-VALUES == Max
MaxValue
Value
LOW -VALUE or
LOW-VALUE orLOW -VALUES
LOW-VALUES == Min
MinValue
Value
ALL
ALLliteral
literal == Fill
FillWith
WithLiteral
Literal
COBOL Basics 1
Figurative Constants - Examples
01
01 GrossPay
GrossPay PICPIC 9(5)V99
9(5)V99 VALUE
VALUE 13.5.
13.5.
ZERO
MOVE
MOVE ZEROS TO
TO GrossPay.
GrossPay.
ZEROES
GrossPay
0 0 0 1 3 5 0
ñ
l
StudentName
StudentName PIC
PIC X(10)
X(10) VALUE
VALUE "MIKE".
"MIKE".
MOVE
MOVE ALL
ALL "-"
"-" TO
TO StudentName.
StudentName.
StudentName
M I K E ¨ ¨ ¨ ¨ ¨ ¨
39 COBOL Programming Fundamental © 2004 IBM Corporation
ISSC Shanghai, AMS, GCG
COBOL Basics 1
Figurative Constants - Examples
01
01 GrossPay
GrossPay PIC
PIC 9(5)V99
9(5)V99 VALUE
VALUE 13.5.
13.5.
MOVE ZERO TO
MOVE ZEROS TO GrossPay.
GrossPay.
ZEROES
GrossPay
0 0 0 0 0 0 0
ñ
l
01
01 StudentName
StudentName PIC
PIC X(10)
X(10) VALUE
VALUE "MIKE".
"MIKE".
MOVE
MOVE ALL
ALL "-"
"-" TO
TO StudentName.
StudentName.
StudentName
- - - - - - - - - -
40 COBOL Programming Fundamental © 2004 IBM Corporation
ISSC Shanghai, AMS, GCG
COBOL Basics 1
Editing, Compiling, Running
COBOL Basics 1
Editing, Compiling, Running
//EV6098A JOB (F9500B,WD01X),'EV6098',NOTIFY=EV6098,
// MSGLEVEL=(1,1),
// CLASS=M,MSGCLASS=R,USER=WD01UJ1,PASSWORD=MON10JUN
//*********************************************************************
//* UIBMCL: COMPILE AND LINKEDIT A COBOL PROGRAM
//*
//UIBMCL PROC WSPC=500,NAME=TEMPNAME
//*
//* COMPILE THE COBOL PROGRAM
//*
//COB EXEC PGM=IGYCRCTL,
// PARM='APOST,LIB,NOSEQ,RENT,TRUNC(BIN),LANG(UE)‘
//STEPLIB DD DSN=SYS1.IGY.SIGYCOMP,DISP=SHR
//SYSIN DD DSN=WD01I.DS.COBOL&SRC(&NAME),DISP=SHR
//SYSLIB DD DSN=WD01I.DS.COPY©,DISP=SHR <=== BLK 3120
// DD DSN=MQM.SCSQCOBC,DISP=SHR
//SYSLIN DD DSN=WD01I.DS.UT.OBJ&SRC(&NAME),DISP=SHR
//OUTDEF OUTPUT PRMODE=SOSI2,CHARS=(KN10,KNJE)
//SYSPRINT DD SYSOUT=*,OUTPUT=*.OUTDEF
//SYSUDUMP DD SYSOUT=*
//SYSUT1 DD SPACE=(800,(&WSPC,&WSPC),,,ROUND),UNIT=3390
//SYSUT2 DD SPACE=(800,(&WSPC,&WSPC),,,ROUND),UNIT=3390
COBOL Basics 1
Editing, Compiling, Running
//*
//* LINKEDIT IF THE COMPILE
//* RETURN CODES ARE 4 OR LESS
//*
//LKED EXEC PGM=HEWL,PARM='XREF',COND=(4,LT,COB)
//SYSLIB DD DSN=SYS1.SCEELKED,DISP=SHR
// DD DSN=DSNCFD.SDSNEXIT,DISP=SHR
// DD DSN=DSNCFD.DSNLOAD,DISP=SHR
//OBJECT DD DSN=WD01I.DS.UT.OBJ&SRC,DISP=SHR
//CSQSTUB DD DSN=MQM.SCSQLOAD,DISP=SHR
//CEEUOPT DD DSN=WD01I.DS.LOAD00,DISP=SHR
//SYSLMOD DD DSN=WD01I.DS.UT.LOAD&SRC(&NAME),DISP=SHR
//SYSLIN DD DSN=WD01I.DS.UT.OBJ&SRC(&NAME),DISP=SHR
// DD DSN=WD01I.CSL1.PARMLIB(DSNELI),DISP=SHR
// DD DSN=WD01I.DS.PARAM00(CEEUOPT),DISP=SHR
//OUTDEF OUTPUT PRMODE=SOSI2,CHARS=(KN10,KNJE)
//SYSPRINT DD SYSOUT=*,OUTPUT=*.OUTDEF
//SYSUDUMP DD SYSOUT=*
//SYSUT1 DD SPACE=(4096,(500,500)),UNIT=3390
// PEND
//*
//COMP EXEC UIBMCL,SRC=00,COPY=00,NAME=BUAC25
//COB.SYSIN DD DSN=WD01I.EV6098.COBOL00(BUAC25)
43 COBOL Programming Fundamental © 2004 IBM Corporation
ISSC Shanghai, AMS, GCG
COBOL Basics 1
Editing, Compiling, Running
//EV6098G2 JOB (F9500B,WD01X),CFD,TIME=1440,
// REGION=8M,CLASS=M,MSGCLASS=R,MSGLEVEL=(1,1),
// NOTIFY=EV6098,USER=WD01UJ1,PASSWORD=MON10JUN
//JOBLIB DD DSN=WD01I.DS.UT.LOAD00,DISP=SHR
// DD DSN=DSNCFD.DSNLOAD,DISP=SHR
//********************************************************************
//SCR EXEC DSNDCR
DSN=WD01I.DS.PCDERR.CHK.REPORT
//*-------------------------------------------------------------------
//* BUAC25 DUW25 CREATE ***
//*-------------------------------------------------------------------
//STEP160 EXEC PGM=BUAC25,COND=(4,LT)
//IDUW13 DD DSN=&&DUW13T,DISP=(OLD,DELETE)
//UAC250 DD DSN=WD01I.DS.PCDERR.CHK.REPORT,DISP=(,CATLG),
// UNIT=3390,VOL=SER=EGF001,SPACE=(CYL,(15,15),RLSE),
// DCB=(RECFM=FBA,LRECL=133,BLKSIZE=0)
//OFSW16 DD SYSOUT=*
//SYSPRINT DD SYSOUT=*
//SYSUDUMP DD SYSOUT=*
//SYSABOUT DD SYSOUT=*
//SYSOUT DD SYSOUT=*
/*
EXERCISE 1
Table of contents
Introduction to COBOL
COBOL Basics 1
COBOL Basics 2
Introduction to Sequential Files
Processing Sequential Files
Simple iteration with the PERFORM verb
Arithmetic and Edited Pictures
Conditions
Tables and the PERFORM ... VARYING
Designing Programs
COBOL Basics 2
Overview
Level Numbers.
Group and elementary data items.
Group item PICTURE clauses.
The MOVE. MOVEing numeric items.
DISPLAY and ACCEPT.
COBOL Basics 2
Group Items/Records
WORKING-STORAGE
WORKING-STORAGE SECTION.
SECTION.
01
01 StudentDetails
StudentDetails PIC
PIC X(26).
X(26).
StudentDetails
H E N N E S S Y R M 9 2 3 0 1 6 5 L M 5 1 0 5 5 0 F
COBOL Basics 2
Group Items/Records
WORKING-STORAGE
WORKING-STORAGE SECTION.
SECTION.
01 StudentDetails.
01 StudentDetails.
02
02 StudentName
StudentName PIC
PIC X(10).
X(10).
02
02 StudentId
StudentId PIC
PIC 9(7).
9(7).
02 CourseCode
02 CourseCode PIC X(4).
PIC X(4).
02
02 Grant
Grant PIC
PIC 9(4).
9(4).
02 Gender
02 Gender PIC X.
PIC X.
StudentDetails
H EN N E S S Y RM 9 2 3 0 1 6 5 L M 5 1 0 5 5 0 F
StudentName StudentId CourseCode Grant Gender
49 COBOL Programming Fundamental © 2004 IBM Corporation
ISSC Shanghai, AMS, GCG
COBOL Basics 2
Group Items/Records
WORKING-STORAGE
WORKING-STORAGE SECTION.
SECTION.
01
01 StudentDetails.
StudentDetails.
02
02 StudentName
StudentName..
03
03 Surname
Surname PIC
PIC X(8).
X(8).
03 Initials
03 Initials PIC XX.
PIC XX.
02
02 StudentId
StudentId PIC
PIC 9(7).
9(7).
02
02 CourseCode
CourseCode PIC
PIC X(4).
X(4).
02 Grant
02 Grant PIC 9(4).
PIC 9(4).
02
02 Gender
Gender PIC
PIC X.
X.
StudentDetails
H EN N E S S Y RM 9 2 3 0 1 6 5 L M 5 1 0 5 5 0 F
StudentName StudentId CourseCode Grant Gender
Surname Initials
50 COBOL Programming Fundamental © 2004 IBM Corporation
ISSC Shanghai, AMS, GCG
COBOL Basics 2
LEVEL Numbers express DATA hierarchy
COBOL Basics 2
Group and elementary items
§ In COBOL the term “group item” is used to describe a data item which has
been further subdivided.
– A Group item is declared using a level number and a data name. It cannot have a picture
clause.
– Where a group item is the highest item in a data hierarchy it is referred to as a record and
uses the level number 01.
§ The term “elementary item” is used to describe data items which are atomic;
that is, not further subdivided.
§ An elementary item declaration consists of;
1. a level number,
2. a data name
3. picture clause.
An elementary item must have a picture clause.
§ Every group or elementary item declaration must be followed by a full stop.
COBOL Basics 2
PICTUREs for Group Items
§ Picture clauses are NOT specified for ‘group’ data items because the
size a group item is the sum of the sizes of its subordinate, elementary
items and its type is always assumed to be PIC X.
COBOL Basics 2
Assignment in COBOL
§ In “strongly typed” languages like Modula-2, Pascal or ADA the
assignment operation is simple because assignment is only allowed
between data items with compatible types.
§ The simplicity of assignment in these languages is achieved at the “cost”
of having a large number of data types.
§ In COBOL there are basically only three data types,
Alphabetic (PIC A)
Alphanumeric (PIC X)
Numeric (PIC 9)
§ But this simplicity is achieved only at the cost of having a very complex
assignment statement.
§ In COBOL assignment is achieved using the MOVE verb.
COBOL Basics 2
The MOVE Verb
Identifier
MOVE TO {Identifier}...
Literal
§ The MOVE copies data from the source identifier or literal to one or
more destination identifiers.
§ The source and destination identifiers can be group or elementary
data items.
§ When the destination item is alphanumeric or alphabetic (PIC X or
A) data is copied into the destination area from left to right with
space filling or truncation on the right.
§ When data is MOVEd into an item the contents of the item are
completely replaced. If the source data is too small to fill the
destination item entirely the remaining area is zero or space filled.
COBOL Basics 2
MOVEing Data
MOVE
MOVE “RYAN”
“RYAN” TO
TO Surname.
Surname.
MOVE
MOVE “FITZPATRICK”
“FITZPATRICK” TOTO Surname.
Surname.
COBOL Basics 2
MOVEing Data
MOVE
MOVE ““RYAN”
RYAN” TO
TO Surname.
Surname.
MOVE
MOVE “FITZPATRICK”
“FITZPATRICK” TO
TO Surname.
Surname.
COBOL Basics 2
MOVEing Data
MOVE
MOVE “RYAN”
“RYAN” TO
TO Surname.
Surname.
MOVE
MOVE ““FITZPATRICK”
FITZPATRICK” TO TO Surname.
Surname.
COBOL Basics 2
MOVEing to a numeric item
§ When the decimal point is not explicitly specified in either the source or
destination items, the item is treated as if it had an assumed decimal point
immediately after its rightmost character.
COBOL Basics 2
MOVEing to a numeric item
GrossPay
0 0 0 0 0 0
MOVE ZEROS TO GrossPay. ñ
GrossPay l
COBOL Basics 2
MOVEing to a numeric item
CountyPop
MOVE 1234 TO CountyPop. 1 2 3 4
ñ
l
MOVE 12.4 TO CountyPop. CountyPop 0 1 2 4
ñ
l
MOVE 154 TO Price. Price 1 5 4 0 0
ñ
Price l
MOVE 3552.75 TO Price. 3 5 5 2 7 5
ñ
l
COBOL Basics 2
Legal MOVEs
Certain combinations of sending and receiving data types are not
permitted (even by COBOL).
COBOL Basics 2
The DISPLAY Verb
Identifier Identifier
DISPLAY ...
Literal Literal
[UPON Mnemonic - Name ][WITH NO ADVANCING ]
COBOL Basics 2
The ACCEPT verb
Format 1. ACCEPT Identifier [FROM Mnemonic - name ]
DATE
DAY
Format 2. ACCEPT Identifier FROM
DAY - OF - WEEK
TIME
01
01 CurrentDate
CurrentDate PIC
PIC 9(6).
9(6).
* YYMMDD
* YYMMDD
01
01 DayOfYear
DayOfYear PIC
PIC 9(5).
9(5).
* YYDDD
* YYDDD
01
01 Day0fWeek
Day0fWeek PIC
PIC 9.
9.
* D (1=Monday)
* D (1=Monday)
01
01 CurrentTime
CurrentTime PIC
PIC 9(8).
9(8).
* HHMMSSss
* HHMMSSss s = S/100 s = S/100
Table of contents
Introduction to COBOL
COBOL Basics 1
COBOL Basics 2
Introduction to Sequential Files
Processing Sequential Files
Simple iteration with the PERFORM verb
Arithmetic and Edited Pictures
Conditions
Tables and the PERFORM ... VARYING
Designing Programs
STUDENTS.DAT
StudId
StudId StudName
StudName DateOfBirth
DateOfBirth
9723456
9723456 COUGHLAN
COUGHLAN 10091961
10091961
9724567 RYAN
9724567 RYAN 31121976
31121976
9534118
9534118 COFFEY
COFFEY 23061964
23061964 occurrences
9423458 O'BRIEN
9423458 O'BRIEN 03111979
03111979
9312876
9312876 SMITH
SMITH 12121976
12121976
§ Files are repositories of data that reside on backing storage (hard disk
or magnetic tape).
§ A file may consist of hundreds of thousands or even millions of
records.
§ Suppose we want to keep information about all the TV license holders
in the country. Suppose each record is about 150 characters/bytes
long. If we estimate the number of licenses at 1 million this gives us a
size for the file of 150 X 1,000,000 = 150 megabytes.
§ If we want to process a file of this size we cannot do it by loading the
whole file into the computer’s memory at once.
§ Files are processed by reading them into the computer’s memory one
record at a time.
§ To process a file records are read from the file into the computer’s
memory one record at a time.
§ The record buffer is the only connection between the program and
the records in the file.
Program
IDENTIFICATION DIVISION.
etc.
ENVIRONMENT DIVISION.
etc.
Record Instance DATA DIVISION.
DISK FILE SECTION.
STUDENTS.DAT RecordBuffer
Declaration
§ If your program processes more than one file you will have to
describe a record buffer for each file.
§ To process all the records in an INPUT file each record instance
must be copied (read) from the file into the record buffer when
required.
§ To create an OUTPUT file containing data records each record
must be placed in the record buffer and then transferred (written) to
the file.
§ To transfer a record from an input file to an output file we will have
to
read the record into the input record buffer
transfer it to the output record buffer
write the data to the output file from the output record buffer
Student Details.
01 StudentDetails.
01 StudentDetails.
§§ Student
StudentId.
Id. 02 StudentId
02 StudentId
PIC 9(7).
PIC 9(7).
§§ Student
StudentName.
Name. 02 StudentName.
02 StudentName.
Surname 03 Surname PIC X(8).
Surname 03 Surname PIC X(8).
Initials 03 Initials PIC XX.
Initials 03 Initials PIC XX.
§§ Date
DateofofBirth
Birth 02 DateOfBirth.
02 DateOfBirth.
Year of Birth 03 YOBirth PIC 99.
Year of Birth 03 YOBirth PIC 99.
Month of Birth 03 MOBirth PIC 99.
Month of Birth 03 MOBirth PIC 99.
Day of Birth 03 DOBirth PIC 99.
Day of Birth 03 DOBirth PIC 99.
§§ Course
CourseCode
Code 02 CourseCode PIC X(4).
02 CourseCode PIC X(4).
§§ Value
Valueofofgrant
grant 02 Grant
02 Grant
PIC 9(4).
PIC 9(4).
§§ Gender
Gender 02 Gender
02 Gender
PIC X.
PIC X.
75 COBOL Programming Fundamental © 2004 IBM Corporation
ISSC Shanghai, AMS, GCG
DATA
DATA DIVISION.
DIVISION.
FILE
FILE SECTION.
SECTION.
FD StudentFile.
FD StudentDetails.
StudentFile.
01
01 02StudentDetails.
02 StudentId
StudentId PIC
PIC 9(7).
9(7).
02 StudentName.
02 03StudentName.
03 Surname
Surname PIC
PIC X(8).
X(8).
03 Initials
03 Initials PIC XX.
PIC XX.
02 DateOfBirth.
02 03DateOfBirth.
03 YOBirth
YOBirth PIC
PIC 9(2).
9(2).
03 MOBirth
03 DOBirth
MOBirth PIC 9(2).
PIC 9(2).
9(2).
03
03 DOBirth PIC
PIC X(4).
9(2).
02 CourseCode
02 Grant
CourseCode PIC
PIC 9(4).
X(4).
02
02 Gender
Grant PIC
PIC X. 9(4).
02
02 Gender PIC
PIC X.
§ The record type/template/buffer of every file used in a program
must be described in the FILE SECTION by means of an FD (file
description) entry.
ENVIRONMENT
//STEP160 EXEC PGM=BUAC25,COND=(4,LT)
ENVIRONMENT DIVISION.
DIVISION.
//STEP160 EXEC PGM=BUAC25,COND=(4,LT)
INPUT-OUTPUT SECTION.
//STUDENTS DD DSN= STUDENTS.DAT,DISP=SHR
INPUT-OUTPUT SECTION.
//STUDENTS DD DSN= STUDENTS.DAT,DISP=SHR
FILE-CONTROL.
***** FILE-CONTROL.
SELECT
***** SELECT StudentFile
StudentFile
ASSIGN
ASSIGN TOTO “STUDENTS”.
“STUDENTS”.
DATA
DATA DIVISION.
DIVISION.
FILE
FILE SECTION.
SECTION.
FD StudentFile.
FD StudentDetails.
StudentFile.
01
01 02
StudentDetails.
02 StudentId
StudentId PIC
PIC 9(7).
9(7).
DISK 02 StudentName.
02 03StudentName.
Surname PIC X(8).
03
03 Surname
Initials PIC
PIC X(8).
XX.
STUDENTS.DAT 02 03 Initials
DateOfBirth. PIC XX.
02 03DateOfBirth.
YOBirth PIC 9(2).
03
03 YOBirth
MOBirth PIC
PIC 9(2).
9(2).
03 DOBirth
03 MOBirth PIC 9(2).
PIC 9(2).
03 DOBirth
******** PIC 9(2).
********
§ The internal file name used in the FD entry is connected to an external file (on
disk or tape) by means of the Select and Assign clause.
77 COBOL Programming Fundamental © 2004 IBM Corporation
ISSC Shanghai, AMS, GCG
§ OPEN
Before your program can access the data in an input file or place data in an
output file you must make the file available to the program by OPENing it.
§ READ
The READ copies a record occurrence/instance from the file and places it in
the record buffer.
§ WRITE
The WRITE copies the record it finds in the record buffer to the file.
§ CLOSE
You must ensure that (before terminating) your program closes all the files it
has opened. Failure to do so may result in data not being written to the file or
users being prevented from accessing the file.
INPUT
OPEN OUTPUT InternalFi leName ...
EXTEND
§ Once the system has opened a file and made it available to the program
it is the programmers responsibility to process it correctly.
§ Remember, the file record buffer is our only connection with the file and
it is only able to store a single record at a time.
§ To process all the records in the file we have to transfer them, one
record at a time, from the file to the buffer.
§ Using INTO Identifier clause causes the data to be read into the
record buffer and then copied from there to the specified
Identifier in one operation.
– When this option is used there will be two copies of the data. It is
the equivalent of a READ followed by a MOVE.
9 3 3 4 5 6 7 F r a n k C u r t a i n L M 0 5 1
9 3 8 3 7 1 5 T h o m a s H e a l y L M 0 6 8
9 3 4 7 2 9 2 T o n y O ‘ B r i a n L M 0 5 1
9 3 7 8 8 1 1 B i l l y D o w n e s L M 0 2 1
EOF
PERFORM UNTIL StudentRecord = HIGH-VALUES
READ StudentRecords
AT END MOVE HIGH-VALUES TO StudentRecord
END-READ
END-PERFORM.
9 3 3 4 5 6 7 F r a n k C u r t a i n L M 0 5 1
9 3 8 3 7 1 5 T h o m a s H e a l y L M 0 6 8
9 3 4 7 2 9 2 T o n y O ‘ B r i a n L M 0 5 1
9 3 7 8 8 1 1 B i l l y D o w n e s L M 0 2 1
EOF
PERFORM UNTIL StudentRecord = HIGH-VALUES
READ StudentRecords
AT END MOVE HIGH-VALUES TO StudentRecord
END-READ
END-PERFORM.
84 COBOL Programming Fundamental © 2004 IBM Corporation
ISSC Shanghai, AMS, GCG
9 3 3 4 5 6 7 F r a n k C u r t a i n L M 0 5 1
9 3 8 3 7 1 5 T h o m a s H e a l y L M 0 6 8
9 3 4 7 2 9 2 T o n y O ‘ B r i a n L M 0 5 1
9 3 7 8 8 1 1 B i l l y D o w n e s L M 0 2 1
EOF
PERFORM UNTIL StudentRecord = HIGH-VALUES
READ StudentRecords
AT END MOVE HIGH-VALUES TO StudentRecord
END-READ
END-PERFORM.
85 COBOL Programming Fundamental © 2004 IBM Corporation
ISSC Shanghai, AMS, GCG
9 3 3 4 5 6 7 F r a n k C u r t a i n L M 0 5 1
9 3 8 3 7 1 5 T h o m a s H e a l y L M 0 6 8
9 3 4 7 2 9 2 T o n y O ‘ B r i a n L M 0 5 1
9 3 7 8 8 1 1 B i l l y D o w n e s L M 0 2 1
EOF
PERFORM UNTIL StudentRecord = HIGH-VALUES
READ StudentRecords
AT END MOVE HIGH-VALUES TO StudentRecord
END-READ
END-PERFORM.
86 COBOL Programming Fundamental © 2004 IBM Corporation
ISSC Shanghai, AMS, GCG
HIGH-VALUES
9 3 3 4 5 6 7 F r a n k C u r t a i n L M 0 5 1
9 3 8 3 7 1 5 T h o m a s H e a l y L M 0 6 8
9 3 4 7 2 9 2 T o n y O ‘ B r i a n L M 0 5 1
9 3 7 8 8 1 1 B i l l y D o w n e s L M 0 2 1
EOF
PERFORM UNTIL StudentRecord = HIGH-VALUES
READ StudentRecords
AT END MOVE HIGH-VALUES TO StudentRecord
END-READ
END-PERFORM.
87 COBOL Programming Fundamental © 2004 IBM Corporation
ISSC Shanghai, AMS, GCG
Students.Dat
9 3 3 4 5 6 7 F r a n k C u r t a i n L M 0 5 1
EOF
Students.Dat
9 3 3 4 5 6 7 F r a n k C u r t a i n L M 0 5 1
9 3 8 3 7 1 5 T h o m a s H e a l y L M 0 6 8
EOF
90 COBOL Programming Fundamental © 2004 IBM Corporation
ISSC Shanghai, AMS, GCG
IDENTIFICATION DIVISION.
IDENTIFICATION
PROGRAM-ID. DIVISION.
SeqWrite.
PROGRAM-ID. SeqWrite.
AUTHOR. Michael Coughlan.
AUTHOR. Michael Coughlan.
ENVIRONMENT DIVISION.
Introduction to Sequential Files
ENVIRONMENT SECTION.
INPUT-OUTPUT DIVISION. Sample Code
FILE-CONTROL. SECTION.
INPUT-OUTPUT
FILE-CONTROL.
SELECT Student ASSIGN TO STUDENTS
SELECT Student ASSIGN
ORGANIZATION IS LINETO SEQUENTIAL.
STUDENTS
ORGANIZATION IS LINE SEQUENTIAL.
DATA DIVISION.
DATASECTION.
FILE DIVISION.
FILE SECTION.
FD Student.
FD Student.
01 StudentDetails.
0102StudentDetails.
StudentId PIC 9(7).
0202 StudentName.
StudentId PIC 9(7).
02 03
StudentName.
Surname PIC X(8).
03Initials
03 Surname PICXX.
PIC X(8).
03 Initials
02 DateOfBirth. PIC XX.
02 03
DateOfBirth.
YOBirth PIC 9(2).
03MOBirth
03 YOBirth PIC9(2).
PIC 9(2).
03 MOBirth
03 DOBirth PIC 9(2).
PIC 9(2).
03 DOBirth
02 CourseCode PIC 9(2).
PIC X(4).
02 CourseCode
02 Grant PIC X(4).
PIC 9(4).
02 Grant
02 Gender PIC
PIC X.9(4).
02 Gender PIC X.
PROCEDURE DIVISION.
PROCEDURE DIVISION.
Begin.
Begin.
OPEN OUTPUT Student.
OPEN OUTPUT
DISPLAY Student.
"Enter student details using template below. Enter no data to end.".
DISPLAY "Enter student details using template below. Enter no data to end.".
PERFORM GetStudentDetails.
PERFORM GetStudentDetails.
PERFORM UNTIL StudentDetails = SPACES
PERFORM UNTIL StudentDetails = SPACES
WRITE StudentDetails
PERFORM StudentDetails
WRITE GetStudentDetails
PERFORM GetStudentDetails
END-PERFORM.
END-PERFORM.
CLOSE Student.
CLOSE
STOP Student.
RUN.
STOP RUN.
GetStudentDetails.
GetStudentDetails.
DISPLAY "NNNNNNNSSSSSSSSIIYYMMDDCCCCGGGGS".
DISPLAYStudentDetails.
ACCEPT "NNNNNNNSSSSSSSSIIYYMMDDCCCCGGGGS".
ACCEPT StudentDetails.
91 COBOL Programming Fundamental © 2004 IBM Corporation
ISSC Shanghai, AMS, GCG
IDENTIFICATION DIVISION.
IDENTIFICATION
PROGRAM-ID.
PROGRAM-ID.
DIVISION.
SeqRead.
SeqRead.
AUTHOR. Michael Coughlan.
AUTHOR. Michael Coughlan.
Introduction to Sequential Files
ENVIRONMENT DIVISION. Sample Code
ENVIRONMENT SECTION.
INPUT-OUTPUT DIVISION.
FILE-CONTROL. SECTION.
INPUT-OUTPUT
FILE-CONTROL.
SELECT Student ASSIGN TO STUDENTS
SELECT Student ASSIGN
ORGANIZATION IS LINETO SEQUENTIAL.
STUDENTS
ORGANIZATION IS LINE SEQUENTIAL.
DATA DIVISION.
DATASECTION.
FILE DIVISION.
FILE SECTION.
FD Student.
FDStudentDetails.
01 Student.
0102StudentDetails.
StudentId PIC 9(7).
0202 StudentName.
StudentId PIC 9(7).
02 03StudentName.
Surname PIC X(8).
0303Initials
Surname PICXX.
PIC X(8).
03 Initials
02 DateOfBirth. PIC XX.
02 03DateOfBirth.
YOBirth PIC 9(2).
0303MOBirth
YOBirth PIC9(2).
PIC 9(2).
03 MOBirth
03 DOBirth PIC 9(2).
PIC 9(2).
03 DOBirth
02 CourseCode PIC 9(2).
PIC X(4).
02 CourseCode
02 Grant PIC X(4).
PIC 9(4).
02 Grant
02 Gender PIC
PIC X.9(4).
02 Gender PIC X.
PROCEDURE DIVISION.
PROCEDURE DIVISION.
Begin.
Begin.
OPEN INPUT Student
OPENStudent
READ INPUT Student
READ Student
AT END MOVE HIGH-VALUES TO StudentDetails
AT
END-READ END MOVE HIGH-VALUES TO StudentDetails
END-READ
PERFORM UNTIL StudentDetails = HIGH-VALUES
PERFORMStudentId
DISPLAY UNTIL StudentDetails = HIGH-VALUES
SPACE StudentName SPACE CourseCode
DISPLAY StudentId
READ Student SPACE StudentName SPACE CourseCode
READ Student
AT END MOVE HIGH-VALUES TO StudentDetails
AT END MOVE HIGH-VALUES TO StudentDetails
END-READ
END-READ
END-PERFORM
END-PERFORM
CLOSE Student
CLOSE
STOP Student
RUN.
STOP RUN.
92 COBOL Programming Fundamental © 2004 IBM Corporation
ISSC Shanghai, AMS, GCG
Table of contents
Introduction to COBOL
COBOL Basics 1
COBOL Basics 2
Introduction to Sequential Files
Processing Sequential Files
Simple iteration with the PERFORM verb
Arithmetic and Edited Pictures
Conditions
Tables and the PERFORM ... VARYING
Designing Programs
$ SET SOURCEFORMAT"FREE"
$ SET SOURCEFORMAT"FREE"
IDENTIFICATION DIVISION.
IDENTIFICATION DIVISION.
PROGRAM-ID. SeqWrite.
Processing Sequential Files PROGRAM-ID. SeqWrite.
AUTHOR. Michael Coughlan.
AUTHOR. Michael Coughlan.
ENVIRONMENT DIVISION.
Run of SeqWrite ENVIRONMENT SECTION.
INPUT-OUTPUT DIVISION.
FILE-CONTROL. SECTION.
INPUT-OUTPUT
FILE-CONTROL.
SELECT StudentFile ASSIGN TO STUDENTS
SELECT StudentFile
ORGANIZATION IS ASSIGN TO STUDENTS
LINE SEQUENTIAL.
Enter student details using template below. Press CR ORGANIZATION
to end. IS LINE SEQUENTIAL.
Enter student details using template below. DATA
NNNNNNNSSSSSSSSIIYYMMDDCCCCGGGGS Press CR to end.
DIVISION.
NNNNNNNSSSSSSSSIIYYMMDDCCCCGGGGS
9456789COUGHLANMS580812LM510598M DATASECTION.
FILE DIVISION.
9456789COUGHLANMS580812LM510598M FILE
FD SECTION.
StudentFile.
NNNNNNNSSSSSSSSIIYYMMDDCCCCGGGGS FDStudentDetails.
StudentFile.
NNNNNNNSSSSSSSSIIYYMMDDCCCCGGGGS
9367892RYAN TG521210LM601222F 01
9367892RYAN TG521210LM601222F 0102StudentDetails.
StudentId PIC 9(7).
NNNNNNNSSSSSSSSIIYYMMDDCCCCGGGGS 0202 StudentName.
StudentId PIC 9(7).
NNNNNNNSSSSSSSSIIYYMMDDCCCCGGGGS
9368934WILSON HR520323LM610786M 02 03StudentName.
Surname PIC X(8).
9368934WILSON HR520323LM610786M
NNNNNNNSSSSSSSSIIYYMMDDCCCCGGGGS 0303Initials
Surname PICXX.
PIC X(8).
NNNNNNNSSSSSSSSIIYYMMDDCCCCGGGGS 02 03 Initials
DateOfBirth. PIC XX.
CarriageReturn 02 03DateOfBirth.
CarriageReturn YOBirth PIC 9(2).
0303MOBirth
YOBirth PIC9(2).
PIC 9(2).
0303DOBirth
MOBirth PIC9(2).
PIC 9(2).
02 03 DOBirth
CourseCode PICX(4).
PIC 9(2).
PROCEDURE DIVISION. 0202 CourseCode
Grant PIC
PIC X(4).
9(4).
PROCEDURE DIVISION.
Begin. 02 Grant PIC 9(4).
Begin. 02 Gender PIC X.
OPEN OUTPUT StudentFile 02 Gender PIC X.
OPEN OUTPUT
DISPLAY StudentFile
"Enter student details using template below. Press CR to end.".
DISPLAY "Enter student details using template below. Press CR to end.".
PERFORM GetStudentDetails
PERFORM UNTIL
PERFORM GetStudentDetails
StudentDetails = SPACES
PERFORM
WRITE UNTIL StudentDetails = SPACES
StudentDetails
WRITE StudentDetails
PERFORM GetStudentDetails
PERFORM GetStudentDetails
END-PERFORM
END-PERFORM
CLOSE StudentFile
CLOSE
STOP StudentFile
RUN.
STOP RUN.
GetStudentDetails.
GetStudentDetails.
DISPLAY "NNNNNNNSSSSSSSSIIYYMMDDCCCCGGGGS".
DISPLAY StudentDetails.
ACCEPT "NNNNNNNSSSSSSSSIIYYMMDDCCCCGGGGS".
ACCEPT StudentDetails.
95 COBOL Programming Fundamental © 2004 IBM Corporation
ISSC Shanghai, AMS, GCG
$ SET SOURCEFORMAT"FREE"
Processing Sequential Files $ SET SOURCEFORMAT"FREE"
IDENTIFICATION
IDENTIFICATION
PROGRAM-ID.
DIVISION.
DIVISION.
SeqRead.
PROGRAM-ID. SeqRead.
RUN OF SeqRead AUTHOR. Michael Coughlan.
AUTHOR. Michael Coughlan.
ENVIRONMENT DIVISION.
ENVIRONMENT SECTION.
INPUT-OUTPUT DIVISION.
INPUT-OUTPUT SECTION.
FILE-CONTROL.
FILE-CONTROL.
SELECT StudentFile ASSIGN TO STUDENTS
SELECT StudentFile
ORGANIZATION IS ASSIGN TO STUDENTS
LINE SEQUENTIAL.
ORGANIZATION IS LINE SEQUENTIAL.
9456789 COUGHLANMS LM51 DATA DIVISION.
9456789 COUGHLANMS LM51 DATASECTION.
FILE DIVISION.
9367892 RYAN TG LM60 FILE SECTION.
FD StudentFile.
9367892 RYAN TG LM60 FDStudentDetails.
01 StudentFile.
0102StudentDetails.
StudentId PIC 9(7).
9368934 WILSON HR LM61 0202 StudentName.
StudentId PIC 9(7).
9368934 WILSON HR LM61 02 03
StudentName.
Surname PIC X(8).
03Initials
03 Surname PICXX.
PIC X(8).
03 Initials
02 DateOfBirth. PIC XX.
02 03
DateOfBirth.
YOBirth PIC 9(2).
03MOBirth
03 YOBirth PIC9(2).
PIC 9(2).
PROCEDURE DIVISION. 03 MOBirth
03 DOBirth PIC 9(2).
PIC 9(2).
PROCEDURE DIVISION. 03 DOBirth
02 CourseCode PIC 9(2).
PIC X(4).
Begin. 0202 Grant
CourseCode PIC9(4).
PIC X(4).
Begin.
OPEN INPUT StudentFile 02 Gender
Grant PICX.
9(4).
OPEN StudentFile
INPUT StudentFile 02 PIC
READ 02 Gender PIC X.
READ
AT StudentFile
END MOVE HIGH-VALUES TO StudentDetails
AT
END-READ END MOVE HIGH-VALUES TO StudentDetails
END-READ
PERFORM UNTIL StudentDetails = HIGH-VALUES
PERFORM
DISPLAYUNTIL StudentDetails
StudentId = HIGH-VALUES
SPACE StudentName SPACE CourseCode
DISPLAY
READ StudentId SPACE StudentName SPACE CourseCode
StudentFile
READ
AT StudentFile
END MOVE HIGH-VALUES TO StudentDetails
AT END MOVE HIGH-VALUES TO StudentDetails
END-READ
END-READ
END-PERFORM
END-PERFORM
CLOSE StudentFile
CLOSE
STOP StudentFile
RUN.
STOP RUN.
96 COBOL Programming Fundamental © 2004 IBM Corporation
ISSC Shanghai, AMS, GCG
§ Data organization refers to the way the records of the file are organized on
the backing storage device.
COBOL recognizes three main file organizations;
Sequential - Records organized serially.
Relative - Relative record number based organization.
Indexed - Index based organization.
§ The method of access refers to the way in which records are accessed.
– A file with an organization of Indexed or Relative may
still have its records accessed sequentially.
– But records in a file with an organization of Sequential can not be accessed
directly.
97 COBOL Programming Fundamental © 2004 IBM Corporation
ISSC Shanghai, AMS, GCG
RecordA
RecordA RecordM
RecordM
RecordB
RecordB RecordH
RecordH
RecordG
RecordG RecordB
RecordB
RecordH
RecordH RecordN
RecordN
RecordK
RecordK RecordA
RecordA
RecordM
RecordM RecordK
RecordK
RecordN
RecordN RecordG
RecordG
In an ordered file the records are sequenced on some field in the record.
Transaction Unordered
File PROGRAM File
FILE
FILE SECTION.
RecordF
RecordF SECTION.
PROGRAM RecordM
RecordM
TFRec
RecordP
RecordP RecordH
RecordH
UFRec
RecordW
RecordW RecordB
RecordB
PROCEDURE
PROCEDURE DIVISION.
DIVISION. RecordN
RecordN
OPEN
OPEN EXTEND
EXTEND UF.
UF.
OPEN
OPEN INPUT
INPUT TF.
TF.
RecordA
RecordA
READ
READ TF.
TF. RecordK
RecordK
MOVE
MOVE TFRec
TFRec TO
TO UFRec.
UFRec.
WRITE
WRITE UFRec.
UFRec. RecordG
RecordG
Transaction Unordered
File PROGRAM File
FILE
FILE SECTION.
RecordF
RecordF SECTION.
PROGRAM RecordM
RecordM
RecordF
RecordP
RecordP RecordH
RecordH
RecordF
RecordW
RecordW RecordB
RecordB
PROCEDURE
PROCEDURE DIVISION.
DIVISION. RecordN
RecordN
OPEN
OPEN EXTEND
EXTEND UF.
UF.
OPEN RecordA
OPEN INPUT
INPUT TF.
TF. RecordA
READ
READ TF.
TF. RecordK
RecordK
MOVE
MOVE TFRec
TFRec TO
TO UFRec.
UFRec.
WRITE
WRITE UFRec.
UFRec. RecordG
RecordG
RecordF
RecordF
§ The only way to delete Sequential file records is to create a new file
which does not contain them.
§ Why?
EXERCISE 2
Table of contents
Introduction to COBOL
COBOL Basics 1
COBOL Basics 2
Introduction to Sequential Files
Processing Sequential Files
Simple iteration with the PERFORM verb
Arithmetic and Edited Pictures
Conditions
Tables and the PERFORM ... VARYING
Designing Programs
ProcessRecord.
DISPLAY StudentRecord
READ StudentFile
AT END MOVE HIGH-VALUES TO StudentRecord
END-READ.
ProduceOutput.
DISPLAY “Here is a message”.
NOTE
NOTE
The
Thescope
scopeof
of‘ProcessRecord’
‘ProcessRecord’is
isdelimited
delimited
by
bythe
theoccurrence
occurrencethe
theparagraph
paragraphname
name
‘ProduceOutput’.
‘ProduceOutput’.
129 COBOL Programming Fundamental © 2004 IBM Corporation
ISSC Shanghai, AMS, GCG
THRU
PERFORM 1stProc EndProc
THROUGH
PROCEDURE
PROCEDURE DIVISION.
DIVISION.
TopLevel .
TopLevel.
DISPLAY
DISPLAY"In
"InTopLevel. Starting
TopLevel. Startingto
torun
runprogram"
program"
PERFORM
PERFORM OneLevelDown
OneLevelDown
DISPLAY
DISPLAY "Back in
"Back in TopLevel.".
TopLevel.".
STOP RUN.
STOP RUN.
TwoLevelsDown.
TwoLevelsDown.
DISPLAY
DISPLAY ">>>>>>>>
">>>>>>>> Now
Now in
in TwoLevelsDown."
TwoLevelsDown."
OneLevelDown.
OneLevelDown.
DISPLAY
DISPLAY ">>>>
">>>> Now
Now in
in OneLevelDown"
OneLevelDown"
PERFORM TwoLevelsDown
PERFORM TwoLevelsDown
DISPLAY
DISPLAY ">>>>
">>>> Back
Back in
in OneLevelDown".
OneLevelDown".
In
In TopLevel.
TopLevel. Starting
Starting to
to run
run program
program
>>>> Now in OneLevelDown
>>>> Now in OneLevelDown
>>>>>>>>
>>>>>>>> Now
Now in
in TwoLevelsDown.
TwoLevelsDown.
>>>> Back in OneLevelDown
>>>> Back in OneLevelDown
Back
Back in
in TopLevel.
TopLevel.
PROCEDURE
PROCEDURE DIVISION.
DIVISION.
TopLevel.
TopLevel.
DISPLAY
DISPLAY "In
"In TopLevel.
TopLevel. Starting
Starting to
to run
run program"
program"
PERFORM
PERFORMOneLevelDown
OneLevelDown
DISPLAY
DISPLAY "Back
"Back in
in TopLevel.".
TopLevel.".
STOP RUN.
STOP RUN.
TwoLevelsDown.
TwoLevelsDown.
DISPLAY
DISPLAY ">>>>>>>>
">>>>>>>> Now
Now in
in TwoLevelsDown."
TwoLevelsDown."
OneLevelDown.
OneLevelDown.
DISPLAY
DISPLAY ">>>>
">>>> Now
Now in
in OneLevelDown"
OneLevelDown"
PERFORM TwoLevelsDown
PERFORM TwoLevelsDown
DISPLAY
DISPLAY ">>>>
">>>> Back
Back in
in OneLevelDown".
OneLevelDown".
132 COBOL Programming Fundamental © 2004 IBM Corporation
ISSC Shanghai, AMS, GCG
In
In TopLevel.
TopLevel. Starting
Starting to
to run
run program
program
>>>>
>>>> Now
Now in
in OneLevelDown
OneLevelDown
>>>>>>>>
>>>>>>>> Now
Now in
in TwoLevelsDown.
TwoLevelsDown.
>>>> Back in OneLevelDown
>>>> Back in OneLevelDown
Back
Back in
in TopLevel.
TopLevel.
PROCEDURE
PROCEDURE DIVISION.
DIVISION.
TopLevel.
TopLevel.
DISPLAY
DISPLAY "In
"In TopLevel.
TopLevel. Starting
Starting to
to run
run program"
program"
PERFORM OneLevelDown
PERFORM OneLevelDown
DISPLAY
DISPLAY "Back
"Back in
in TopLevel.".
TopLevel.".
STOP RUN.
STOP RUN.
TwoLevelsDown.
TwoLevelsDown.
DISPLAY
DISPLAY ">>>>>>>>
">>>>>>>> Now
Now in
in TwoLevelsDown."
TwoLevelsDown."
OneLevelDown
OneLevelDown..
DISPLAY
DISPLAY">>>>
">>>>Now
NowininOneLevelDown
OneLevelDown""
PERFORM
PERFORM TwoLevelsDown
TwoLevelsDown
DISPLAY
DISPLAY ">>>> Back
">>>> Back in
in OneLevelDown".
OneLevelDown".
PROCEDURE
PROCEDURE DIVISION.
DIVISION.
Begin.
Begin.
PERFORM
PERFORM SumSales
SumSales
STOP RUN.
STOP RUN.
SumSales.
SumSales.
Statements
Statements
Statements
Statements
IF
IF NoErrorFound
NoErrorFound
Statements
Statements
Statements
Statements
IF
IF NoErrorFound
NoErrorFound
Statements
Statements
Statements
Statements
Statements
Statements
END-IF
END-IF
END-IF.
END-IF.
138 COBOL Programming Fundamental © 2004 IBM Corporation
ISSC Shanghai, AMS, GCG
PROCEDURE
PROCEDURE DIVISION
DIVISION
Begin.
Begin.
PERFORM
PERFORM SumSales
SumSales THRU
THRU SumSalesExit
SumSalesExit
STOP
STOP RUN.
RUN.
SumSales.
SumSales.
Statements
Statements
Statements
Statements
IF
IF ErrorFound
ErrorFound GO
GO TO
TO SumSalesExit
SumSalesExit
END-IF
END-IF
Statements
Statements
Statements
Statements
Statements
Statements
IF
IF ErrorFound
ErrorFound GO
GO TO
TO SumSalesExit
SumSalesExit
END-IF
END-IF
Statements
Statements
SumSalesExit.
SumSalesExit.
EXIT.
EXIT.
139 COBOL Programming Fundamental © 2004 IBM Corporation
ISSC Shanghai, AMS, GCG
PROCEDURE
PROCEDUREDIVISION.
DIVISION.
Begin.
Begin.
Statements
PERFORM DisplayName 4 TIMES
Statements
STOP RUN.
DisplayName.
DisplayName.
DISPLAY “Tom Ryan”.
PERFORM PERFORM
PERFORMWITH
PERFORMWITH
WITH WITH
TEST TEST
TESTAFTER
AFTER==
TESTBEFORE
BEFORE==
WHILE REPEAT
REPEAT...
...UNTIL
WHILE...
...DO
DO UNTIL
False False
test test
True True
§ With the “read ahead” strategy we always try to stay one data item
ahead of the processing.
§ Algorithm Template
READ StudentRecords
AT END MOVE HIGH-
HIGH-VALUES TO StudentRecord
END-
END-READ
PERFORM UNTIL StudentRecord = HIGH-
HIGH-VALUES
DISPLAY StudentRecord
READ StudentRecords
AT END MOVE HIGH-
HIGH-VALUES TO StudentRecord
END-
END-READ
END-
END-PERFORM
Table of contents
Introduction to COBOL
COBOL Basics 1
COBOL Basics 2
Introduction to Sequential Files
Processing Sequential Files
Simple iteration with the PERFORM verb
Arithmetic and Edited Pictures
Conditions
Tables and the PERFORM ... VARYING
Designing Programs
TO
Identifier K
Identifier FROM
VERB [ROUNDED ]
Literal BY Identifier GIVING Identifier K
INTO
[ON SIZE ERROR StatementB lock END - VERB ]
§ Most COBOL arithmetic verbs conform to the template above. For
example;
ADD Takings TO CashTotal.
ADD Males TO Females GIVING TotalStudents.
SUBTRACT Tax FROM GrossPay.
SUBTRACT Tax FROM GrossPay GIVING NetPay.
DIVIDE Total BY Members GIVING MemberAverage.
DIVIDE Members INTO Total GIVING MemberAverage.
MULTIPLY 10 BY Magnitude.
MULTIPLY Members BY Subs GIVING TotalSubs.
§ The exceptions are the COMPUTE and the DIVIDE with REMAINDER.
150 COBOL Programming Fundamental © 2004 IBM Corporation
ISSC Shanghai, AMS, GCG
u A size error condition exists when, after decimal point alignment, the
result is truncated on either the left or the right hand side.
u If an arithmetic statement has a rounded phrase then a size error only
occurs if there is truncation on the left hand side (most significant
digits).
152 COBOL Programming Fundamental © 2004 IBM Corporation
ISSC Shanghai, AMS, GCG
ADD
ADD Cash
Cash TO
TO Total.
Total.
Before
Before 33 1000
1000
After 3 1003
After
ADD
ADD Cash,
Cash, 20
20 TO
TO Total,
Total, Wage.
Wage.
Before
Before 33 1000
1000 100100
After
After 3 1023 123
ADD
ADD Cash,
Cash, Total
TotalGIVING
GIVINGResult.
Result.
Before
Before 33 1000
1000 0015
0015
After
After 3 1000 1003
ADD
ADDMales
MalesTO
TOFemales
FemalesGIVING
GIVING TotalStudents.
TotalStudents.
Before
Before 1500
1500 0625
0625 1234
1234
After
After 1500 0625 2125
SUBTRACT
SUBTRACT Tax
Tax FROM
FROMGrossPay,
GrossPay,Total.
Total.
Before
Before 120
120 4000
4000 9120
9120
After
After 120 3880 9000
SUBTRACT
SUBTRACT Tax,
Tax,80
80FROM
FROMTotal.
Total.
Before
Before 100
100 480
480
After
After 100 300
SUBTRACT
SUBTRACT Tax
Tax FROM
FROMGrossPay
GrossPayGIVING
GIVINGNetPay.
NetPay.
Before
Before 750
750 1000
1000 0012
0012
After
After 750 1000 0250
MULTIPLY
MULTIPLY10
10BY
BYMagnitude,
Magnitude, Size.
Size.
Before
Before
355
355 125
125
After
After 3550 1250
DIVIDE
DIVIDE Total
Total BY
BY Members
MembersGIVING
GIVINGAverage
Average ROUNDED.
ROUNDED.
Before
Before
9234.55
9234.55 100
100 1234.56
1234.56
After 9234.55 100 92.35
After
155 COBOL Programming Fundamental © 2004 IBM Corporation
ISSC Shanghai, AMS, GCG
Identifier Identifier
DIVIDE BY GIVING {Identifier [ ROUNDED ]} REMAINDER Identifier
Literal Literal
ON SIZE ERROR
StatementB lock END - DIVIDE
NOT ON SIZE ERROR
DIVIDE
DIVIDE201
201BY
BY10
10GIVING
GIVINGQuotient
Quotient REMAINDER
REMAINDERRemain.
Remain.
Before
Before 209
209 424
424
After 020 001
After
Precedence
Precedence Rules.
Rules.
1.
1. **** == POWER
POWER NNNN
2.
2. ** == MULTIPLY
MULTIPLY xx
// == DIVIDE
DIVIDE ÷÷
3.
3. ++ == ADD
ADD ++
-- == SUBTRACT
SUBTRACT --
Compute
ComputeIrishPrice
IrishPrice==SterlingPrice
SterlingPrice//Rate
Rate ** 100.
100.
Before
Before 1000.50
1000.50 156.25
156.25 87
87
After 179.59 156.25 87
After
§ Edited Pictures are PICTURE clauses which format data intended for output to
screen or printer.
§ To enable the data items to be formatted in a particular style COBOL provides
additional picture symbols supplementing the basic 9, X, A, V and S symbols.
§ The additional symbols are referred to as “Edit Symbols” and PICTURE
clauses which include edit symbols are called “Edited Pictures”.
§ The term edit is used because the edit symbols have the effect of changing, or
editing, the data inserted into the edited item.
§ Edited items can not be used as operands in a computation but they may be
used as the result or destination of a computation (i.e. to the right of the word
GIVING).
PIC
PIC9(6)
9(6) 120183
120183 PIC
PIC99B99B99
99B99B99 12 01 83
PIC
PIC9(6)
9(6) 120183
120183 PIC
PIC99/99/99
99/99/99 12/01/83
PIC
PIC9(6)
9(6) 001245
001245 PIC
PIC990099
990099 120045
161 COBOL Programming Fundamental © 2004 IBM Corporation
ISSC Shanghai, AMS, GCG
Sending
Sending Receiving
Receiving
Picture
Picture Data
Data Picture
Picture Result
Result
PIC
PIC999V99
999V99 12345
12345 PIC
PIC999.99
999.99 123.45
PIC
PIC999V99
999V99 02345
02345 PIC
PIC999.9
999.9 023.4
PIC
PIC999V99
999V99 51234
51234 PIC
PIC99.99
99.99 12.34
PIC
PIC999
999 456
456 PIC
PIC999.99
999.99 456.00
Sending
Sending Receiving
Receiving
Picture
Picture Data
Data Picture
Picture Result
Result
PIC
PICS999
S999 -123
-123 PIC
PIC-999
-999 -123
PIC
PICS999
S999 -123
-123 PIC
PIC 999-
999- 123-
PIC
PICS999
S999 +123
+123 PIC
PIC-999
-999 123
PIC
PICS9(5)
S9(5) +12345
+12345 PIC
PIC+9(5)
+9(5) +12345
PIC
PICS9(3)
S9(3) -123
-123 PIC
PIC+9(3)
+9(3) -123
PIC
PICS9(3)
S9(3) -123
-123 PIC
PIC999+
999+ 123-
163 COBOL Programming Fundamental © 2004 IBM Corporation
ISSC Shanghai, AMS, GCG
Sending
Sending Receiving
Receiving
Picture
Picture Data
Data Picture
Picture Result
Result
PIC
PICS9(4)
S9(4) +1234
+1234 PIC
PIC9(4)CR
9(4)CR 1234
PIC
PICS9(4)
S9(4) -1234
-1234 PIC
PIC9(4)CR
9(4)CR 1234CR
PIC
PICS9(4)
S9(4) +1234
+1234 PIC
PIC9(4)DB
9(4)DB 1223
PIC
PICS9(4)
S9(4) -1234
-1234 PIC
PIC9(4)DB
9(4)DB 1234DB
PIC
PIC9(4)
9(4) 1234
1234 PIC
PIC$99999
$99999 $01234
PIC
PIC9(4)
9(4) 0000
0000 PIC
PIC$ZZZZZ
$ZZZZZ $
PIC
PICS9(4)
S9(4) -- 0005
0005 PIC
PIC++++9
++++9 -5
PIC
PICS9(4)
S9(4) +0080
+0080 PIC
PIC++++9
++++9 +80
PIC
PICS9(4)
S9(4) -- 0080
0080 PIC
PIC-------- 99 -80
PIC
PICS9(5)
S9(5) +71234
+71234 PIC
PIC-------- 99 ž1234
165 COBOL Programming Fundamental © 2004 IBM Corporation
ISSC Shanghai, AMS, GCG
Sending
Sending Receiving
Receiving
Picture
Picture Data
Data Picture
Picture Result
Result
PIC
PIC9(5)
9(5) 12345
12345 PIC
PICZZ,999
ZZ,999 12,345
PIC
PIC9(5)
9(5) 01234
01234 PIC
PICZZ,999
ZZ,999 1,234
PIC
PIC9(5)
9(5) 00123
00123 PIC
PICZZ,999
ZZ,999 123
PIC
PIC9(5)
9(5) 00012
00012 PIC
PICZZ,999
ZZ,999 012
PIC
PIC9(5)
9(5) 05678
05678 PIC
PIC**,**9
**,**9 *5,678
PIC
PIC9(5)
9(5) 00567
00567 PIC
PIC**,**9
**,**9 ***567
PIC
PIC9(5)
9(5) 00000
00000 PIC
PIC**,***
**,*** ******
166 COBOL Programming Fundamental © 2004 IBM Corporation
ISSC Shanghai, AMS, GCG
EXERCISE 3
Table of contents
Introduction to COBOL
COBOL Basics 1
COBOL Basics 2
Introduction to Sequential Files
Processing Sequential Files
Simple iteration with the PERFORM verb
Arithmetic and Edited Pictures
Conditions
Tables and the PERFORM ... VARYING
Designing Programs
Conditions
Overview
§ IF..THEN...ELSE.
§ Relation conditions.
§ Class conditions.
§ Sign conditions.
§ Complex conditions.
§ Implied Subjects.
§ Nested IFs and the END-IF.
§ Condition names and level 88's.
§ The SET verb.
Conditions
IF Syntax
StatementB lock
IF Condition THEN
NEXT SENTENCE
StatementB lock
ELSE [END - IF ]
NEXT SENTENCE
CONDITION TYPES
§§ Simple
SimpleConditions
Conditions
–– Relation
RelationConditions
Conditions
–– Class
ClassConditions
Conditions
–– Sign
SignConditions
Conditions
§§ Complex
ComplexConditions
Conditions
§§ Condition
ConditionNames
Names
Conditions
Relation Conditions
[NOT] GREATERTHAN
[NOT] >
[NOT] LESSTHAN
[NOT] <
Identifier [NOT] EQUALTO Identifier
Literal IS Literal
ArithmeticExpression [NOT] =
GREATERTHAN OR EQUALTO ArithmeticExpression
>=
LESSTHAN OR EQUALTO
<=
Conditions
Class Conditions
NUMERIC
ALPHABETIC
Identifier IS [ NOT ] ALPHABETIC - LOWER
ALPHABETIC - UPPER
UserDefine dClassName
Conditions
Sign Conditions
POSITIVE
ArithExp IS [ NOT ] NEGATIVE
ZERO
Conditions
Complex conditions
AND
Condition Condition K
OR
§ Programs often require conditions which are more complex
than single value testing or determining a data class.
§ Like all other programming languages COBOL allows simple
conditions to be combined using OR and AND to form
composite conditions.
§ Like other conditions, a complex condition evaluates to true
or false.
§ A complex condition is an expression which is evaluated from
left to right unless the order of evaluation is changed by the
precedence rules or bracketing.
Conditions
Complex conditions have precedence rules too
Precedence
Precedence Rules.
Rules.
1.
1. NOT
NOT == ****
2.
2. AND
AND == **oror//
3.
3. OR
OR == ++or
or--
Conditions
Implied Subjects
§ When a data item is involved in a relation condition with each of a number of
other items it can be tedious to have to repeat the data item for each
condition. For example,
IF TotalAmt > 10000 AND TotalAmt < 50000 THEN
IF Grade = “A” OR Grade = “B+” OR GRADE = “B” THEN
IF VarA > VarB AND VarA > VarC AND VarA > VarD
DISPLAY “VarA is the Greatest”
END-IF
§ In these situations COBOL provides an abbreviation mechanism called
implied subjects.
§ The statements above may be re-written using implied subjects as;
IF TotalAmt > 10000 AND < 50000 THEN
IF Grade=“A” OR “B+” OR “B” THEN
IF VarA > VarB AND VarC AND VarD
Implied
ImpliedSubjects
Subjects
DISPLAY “VarA is the Greatest”
TotalAmt
TotalAmt
END-IF Grade
Grade==
VarA
VarA>>
176 COBOL Programming Fundamental © 2004 IBM Corporation
ISSC Shanghai, AMS, GCG
Conditions
Nested IFs
IF
IF (( VarA
VarA << 10
10 )) AND
AND (( VarB
VarB NOT
NOT >> VarC
VarC )) THEN
THEN
IF VarG = 14 THEN
IF VarG = 14 THEN
DISPLAY
DISPLAY “First”
“First”
ELSE
ELSE
DISPLAY
DISPLAY “Second”
“Second”
END-IF
END-IF
ELSE
ELSE
DISPLAY
DISPLAY “Third”
“Third”
END-IF
END-IF
VarA
VarA VarB
VarB VarC
VarC VarG
VarG DISPLAY
DISPLAY
33 T 44 T 15
15 14
14 T First
33 T 44 T 15
15 15
15 F Second
33 T 44 F 33 14
14 Third
13
13F 44 T 15
15 14
14 Third
177 COBOL Programming Fundamental © 2004 IBM Corporation
ISSC Shanghai, AMS, GCG
Conditions
Condition Names
IF 4
1 VarA
4 4GREATER
4 4 4 4 44THAN
24 4 VarB
4 4THEN
4 4 4Action
44 3
Condition is either
TRUE or False
Conditions
Defining Condition Names
Literal
VALUE
88 ConditionN ame THROUGH K
VALUES LowValue HighValue
THRU
§ Condition Names are defined in the DATA DIVISION using the special
level number 88.
§ They are always associated with a data item and are defined
immediately after the definition of the data item.
§ The VALUE clause is used to identify the values which make the
Condition Name TRUE.
Conditions
Example
01
01 CityCode
CityCode PIC
PIC 99 VALUE
VALUE 5. 5.
88
88 Dublin
Dublin VALUE
VALUE 1.1.
88 Limerick
88 Limerick VALUE 2.
VALUE 2.
88
88 Cork
Cork VALUE
VALUE 3.3.
88 Galway
88 Galway VALUE 4.
VALUE 4.
88
88 Sligo
Sligo VALUE
VALUE 5.5.
88 Waterford
88 Waterford VALUE 6.
VALUE 6.
88
88 UniversityCity
UniversityCity VALUE
VALUE 11 THRU
THRU 4.4.
City Code
5
IF
IF Limerick
Limerick Dublin FALSE
DISPLAY Limerick FALSE
DISPLAY "Hey,
"Hey, we're
we're home."
home." Cork FALSE
END-IF
END-IF Galway FALSE
IF
IF UniversityCity
UniversityCity Sligo TRUE
PERFORM
PERFORM CalcRentSurcharge
CalcRentSurcharge Waterford FALSE
END-IF UniversityCity FALSE
END-IF
180 COBOL Programming Fundamental © 2004 IBM Corporation
ISSC Shanghai, AMS, GCG
Conditions
Example
01
01 CityCode
CityCode PIC
PIC 99 VALUE
VALUE 5.
5.
88
88 Dublin
Dublin VALUE
VALUE 1.1.
88
88 Limerick
Limerick VALUE
VALUE 2.2.
88
88 Cork
Cork VALUE
VALUE 3.3.
88
88 Galway
Galway VALUE
VALUE 4.4.
88
88 Sligo
Sligo VALUE
VALUE 5.5.
88
88 Waterford
Waterford VALUE
VALUE 6.6.
88
88 UniversityCity
UniversityCity VALUE
VALUE 11 THRU
THRU 4.
4.
City Code
2
IF
IF Limerick
Limerick Dublin FALSE
DISPLAY Limerick TRUE
DISPLAY "Hey,
"Hey, we're
we're home."
home."
END-IF Cork FALSE
END-IF Galway FALSE
IF
IF UniversityCity
UniversityCity
PERFORM Sligo FALSE
PERFORM CalcRentSurcharge
CalcRentSurcharge Waterford FALSE
END-IF
END-IF UniversityCity TRUE
181 COBOL Programming Fundamental © 2004 IBM Corporation
ISSC Shanghai, AMS, GCG
Conditions
Example
01
01 CityCode
CityCode PIC
PIC 99 VALUE
VALUE 5.
5.
88
88 Dublin
Dublin VALUE
VALUE 1.
1.
88
88 Limerick
Limerick VALUE
VALUE 2.
2.
88
88 Cork
Cork VALUE
VALUE 3.
3.
88
88 Galway
Galway VALUE
VALUE 4.
4.
88
88 Sligo
Sligo VALUE
VALUE 5.
5.
88
88 Waterford
Waterford VALUE
VALUE 6.
6.
88
88 UniversityCity
UniversityCity VALUE
VALUE 11 THRU
THRU 4.
4.
City Code
6
IF
IF Limerick
Limerick Dublin FALSE
DISPLAY
DISPLAY "Hey,
"Hey, we're
we're home."
home." Limerick FALSE
END-IF
END-IF Cork FALSE
IF Galway FALSE
IF UniversityCity
UniversityCity Sligo FALSE
PERFORM
PERFORM CalcRentSurcharge
CalcRentSurcharge Waterford TRUE
END-IF
END-IF UniversityCity FALSE
182 COBOL Programming Fundamental © 2004 IBM Corporation
ISSC Shanghai, AMS, GCG
Conditions
Example
01
01 InputChar
InputChar PIC
PIC X.
X.
88
88 Vowel
Vowel VALUE
VALUE "A","E","I","O","U".
"A","E","I","O","U".
88
88 Consonant
Consonant VALUE
VALUE "B"
"B" THRU
THRU "D",
"D", "F","G","H"
"F","G","H"
"J"
"J" THRU
THRU "N",
"N", "P"
"P" THRU
THRU "T"
"T"
"V"
"V" THRU
THRU "Z".
"Z".
88
88 Digit
Digit VALUE
VALUE "0"
"0" THRU
THRU "9".
"9".
88
88 LowerCase
LowerCase VALUE
VALUE "a""a" THRU
THRU "z".
"z".
88
88 ValidChar
ValidChar VALUE
VALUE "A""A" THRU
THRU "Z","0"
"Z","0" THRU
THRU "9".
"9".
IF
IF ValidChar
ValidChar Input Char
DISPLAY
DISPLAY "Input
"Input OK."
OK."
END-IF
END-IF E
IF
IF LowerCase
LowerCase
DISPLAY
DISPLAY "Not
"Not Upper
Upper Case"
Case" Vowel TRUE
END-IF
END-IF Consonant FALSE
IF
IF Vowel
Vowel Digit FALSE
Display
Display "Vowel
"Vowel entered."
entered." LowerCase FALSE
END-IF
END-IF ValidChar TRUE
Conditions
Example
01
01 InputChar
InputChar PIC
PIC X.
X.
88
88 Vowel
Vowel VALUE
VALUE "A","E","I","O","U".
"A","E","I","O","U".
88
88 Consonant
Consonant VALUE
VALUE "B"
"B" THRU
THRU "D",
"D", "F","G","H"
"F","G","H"
"J"
"J" THRU
THRU "N",
"N", "P"
"P" THRU
THRU "T"
"T"
"V"
"V" THRU
THRU "Z".
"Z".
88
88 Digit
Digit VALUE
VALUE "0"
"0" THRU
THRU "9".
"9".
88
88 LowerCase
LowerCase VALUE
VALUE "a""a" THRU
THRU "z".
"z".
88
88 ValidChar
ValidChar VALUE
VALUE "A""A" THRU
THRU "Z","0"
"Z","0" THRU
THRU "9".
"9".
IF
IF ValidChar
ValidChar
DISPLAY
DISPLAY "Input
"Input OK."
OK." Input Char
END-IF
END-IF
IF
IF LowerCase
LowerCase 4
DISPLAY
DISPLAY "Not
"Not Upper
Upper Case"
Case"
END-IF Vowel FALSE
END-IF
IF Consonant FALSE
IF Vowel
Vowel Digit TRUE
Display
Display "Vowel
"Vowel entered."
entered." LowerCase FALSE
END-IF
END-IF ValidChar TRUE
184 COBOL Programming Fundamental © 2004 IBM Corporation
ISSC Shanghai, AMS, GCG
Conditions
Example
01
01 InputChar
InputChar PIC
PIC X.
X.
88
88 Vowel
Vowel VALUE
VALUE "A","E","I","O","U".
"A","E","I","O","U".
88
88 Consonant
Consonant VALUE
VALUE "B"
"B" THRU
THRU "D",
"D", "F","G","H"
"F","G","H"
"J"
"J" THRU
THRU "N",
"N", "P"
"P" THRU
THRU "T"
"T"
"V"
"V" THRU
THRU "Z".
"Z".
88
88 Digit
Digit VALUE
VALUE "0"
"0" THRU
THRU "9".
"9".
88 LowerCase
88 LowerCase VALUE
VALUE "a"
"a" THRU "z".
THRU "z".
88
88 ValidChar
ValidChar VALUE
VALUE "A"
"A" THRU "Z","0" THRU
THRU "Z","0" THRU "9".
"9".
IF
IF ValidChar
ValidChar Input Char
DISPLAY
DISPLAY "Input
"Input OK."
OK."
END-IF
END-IF g
IF
IF LowerCase
LowerCase
DISPLAY Vowel FALSE
DISPLAY "Not
"Not Upper
Upper Case"
Case" Consonant FALSE
END-IF
END-IF
IF Digit FALSE
IF Vowel
Vowel LowerCase TRUE
Display
Display "Vowel
"Vowel entered."
entered." ValidChar FALSE
END-IF
END-IF
185 COBOL Programming Fundamental © 2004 IBM Corporation
ISSC Shanghai, AMS, GCG
Conditions
Example
EndOfFileFlag
01
01 EndOfFileFlag
EndOfFileFlag PIC
PIC 99 VALUE
VALUE 0.
0.
88
88 EndOfFile
EndOfFile VALUE
VALUE 1.
1. 0
EndOfFile
READ
READ InFile
InFile
AT
AT END
END MOVE
MOVE 11 TO
TO EndOfFileFlag
EndOfFileFlag
END-READ
END-READ
PERFORM
PERFORM UNTIL
UNTIL EndOfFile
EndOfFile
Statements
Statements
READ
READ InFile
InFile
AT
AT END
END MOVE
MOVE 11 TO
TO EndOfFileFlag
EndOfFileFlag
END-READ
END-READ
END-PERFORM
END-PERFORM
186 COBOL Programming Fundamental © 2004 IBM Corporation
ISSC Shanghai, AMS, GCG
Conditions
Example
01
01 EndOfFileFlag
EndOfFileFlag PIC
PIC 99 VALUE
VALUE 0.
0. EndOfFileFlag
88
88 EndOfFile
EndOfFile VALUE
VALUE 1.
1.
1
EndOfFile
READ
READ InFile
InFile
AT
AT END
END MOVE
MOVE 11 TO
TO EndOfFileFlag
EndOfFileFlag
END-READ
END-READ
PERFORM
PERFORM UNTIL
UNTIL EndOfFile
EndOfFile
Statements
Statements
READ
READ InFile
InFile
AT
AT END
END MOVE
MOVE 11 TO
TO EndOfFileFlag
EndOfFileFlag
END-READ
END-READ
END-PERFORM
END-PERFORM
187 COBOL Programming Fundamental © 2004 IBM Corporation
ISSC Shanghai, AMS, GCG
Conditions
Using the SET verb
FILLER
01
01 FILLER
FILLER PIC
PIC 99 VALUE
VALUE 0.
0. 0
88
88 EndOfFile
EndOfFile VALUE
VALUE 1.1.
88 NotEndOfFile VALUE 0.
88 NotEndOfFile VALUE 0. EndOfFile 1
NotEndOfFile 0
READ
READ InFile
InFile
AT
AT END
END SET
SET EndOfFile
EndOfFile TO TO TRUE
TRUE
END-READ
END-READ
PERFORM
PERFORM UNTIL
UNTIL EndOfFile
EndOfFile
Statements
Statements
READ
READ InFile
InFile
AT
AT END
END SET
SET EndOfFile
EndOfFile TOTO TRUE
TRUE
END-READ
END-READ
END-PERFORM
END-PERFORM
Set
Set NotEndOfFile
NotEndOfFile TO TO TRUE.
TRUE.
188 COBOL Programming Fundamental © 2004 IBM Corporation
ISSC Shanghai, AMS, GCG
Conditions
Using the SET verb
FILLER
01
01 FILLER
FILLER PIC
PIC 99 VALUE
VALUE 0.
0. 1
88
88 EndOfFile
EndOfFile VALUE
VALUE 1.1.
88
88 NotEndOfFile
NotEndOfFile VALUE
VALUE 0.0. EndOfFile 1
NotEndOfFile 0
READ
READ InFile
InFile
AT
AT END
END SET
SET EndOfFile
EndOfFile TO TO TRUE
TRUE
END-READ
END-READ
PERFORM
PERFORM UNTIL
UNTIL EndOfFile
EndOfFile
Statements
Statements
READ
READ InFile
InFile
AT
AT END
END SET
SET EndOfFile
EndOfFile TOTO TRUE
TRUE
END-READ
END-READ
END-PERFORM
END-PERFORM
Set
Set NotEndOfFile
NotEndOfFile TO TO TRUE.
TRUE.
189 COBOL Programming Fundamental © 2004 IBM Corporation
ISSC Shanghai, AMS, GCG
Conditions
Using the SET verb
FILLER
01
01 FILLER
FILLER PIC
PIC 99 VALUE
VALUE 0.
0. 0
88
88 EndOfFile
EndOfFile VALUE
VALUE 1.1.
88 NotEndOfFile VALUE 0.
88 NotEndOfFile VALUE 0. EndOfFile 1
NotEndOfFile 0
READ
READ InFile
InFile
AT
AT END
END SET
SET EndOfFile
EndOfFile TO TO TRUE
TRUE
END-READ
END-READ
PERFORM
PERFORM UNTIL
UNTIL EndOfFile
EndOfFile
Statements
Statements
READ
READ InFile
InFile
AT
AT END
END SET
SET EndOfFile
EndOfFile TOTO TRUE
TRUE
END-READ
END-READ
END-PERFORM
END-PERFORM
Set
Set NotEndOfFile
NotEndOfFile TO TO TRUE.
TRUE.
190 COBOL Programming Fundamental © 2004 IBM Corporation
ISSC Shanghai, AMS, GCG
Conditions
The Evaluate
Identifier
Literal
CondExpres sion
EVALUATE K
ArithExpre ssion
TRUE
FALSE
ANY
Condition
WHEN TRUE K StatementB lock K
FALSE
Identifier Identifier
THRU
[NOT ] Literal Literal
THROUGH
ArithExpre ssion ArithExpre ssion
[WHEN OTHER StatementB lock ]
END - EVALUATE
Conditions
The Evaluate
1 2 3 4 5 6 7 8 9 10
W I L L I A M S
Conditions
Decision Table Implementation
Gender M F M F M F M F
Age <20 <20 20-40 20-40 40> 40> 20-40 20-40 etc
Service Any Any <10 <10 <10 <10 10-20 10-20 etc
% Bonus 5 10 12 13 20 15 14 23
Table of contents
Introduction to COBOL
COBOL Basics 1
COBOL Basics 2
Introduction to Sequential Files
Processing Sequential Files
Simple iteration with the PERFORM verb
Arithmetic and Edited Pictures
Conditions
Tables and the PERFORM ... VARYING
Designing Programs
§ Introduction to tables.
§ Declaring tables.
§ Processing tables using the PERFORM..VARYING.
Tables
County1
and the PERFORM
County2 County3
... VARYING
County4 County5
TaxTotal TaxTotal TaxTotal TaxTotal TaxTotal
PROCEDURE DIVISION.
Begin.
OPEN INPUT TaxFile
READ TaxFile
AT END SET EndOfTaxFile TO TRUE
END-READ
PERFORM SumCountyTaxes UNTIL EndOfTaxFile
DISPLAY "County 1 total is ", County1TaxTotal
: : : 24 Statements : : :
DISPLAY "County 26 total is ", County26TaxTotal
CLOSE TaxFile
STOP RUN.
SumCountyTaxes.
IF CountyNum = 1 ADD TaxPaid TO County1TaxTotal
END-IF
: : : 24 Statements : : :
IF CountyNum = 26 ADD TaxPaid TO County26TaxTotal
END-IF
READ TaxFile
AT END SET EndOfTaxFile TO TRUE
END-READ
58 Statements
197 COBOL Programming Fundamental © 2004 IBM Corporation
ISSC Shanghai, AMS, GCG
AAtable
tableisisaacontiguous
contiguoussequence
sequenceofofmemory
memorylocations
locations
called
calledelements
elements, , which
whichall
allhave
havethe
thesame
samename,
name,and
name andare
are
uniquely
uniquelyidentified
identifiedby
bythat
thatname
nameand
andby
bytheir
theirposition
positionin
in
the
thesequence.
sequence.
CountyTax
10
1 2 3 4 6 5
MOVE 10 TO CountyTax(5)
ADD TaxPaid TO CountyTax(CountyNum)
ADD TaxPaid TO CountyTax(CountyNum + 2)
198 COBOL Programming Fundamental © 2004 IBM Corporation
ISSC Shanghai, AMS, GCG
CountyTax
10
55
1 2 3 4 5 6
MOVE 10 TO CountyTax(5)
55 2
ADD TaxPaid TO CountyTax(CountyNum)
ADD TaxPaid TO CountyTax(CountyNum + 2)
AAtable
tableisisaacontiguous
contiguoussequence
sequenceofofmemory
memorylocations
locations
called
calledelements
elements, , which
whichall
allhave
havethe
thesame
samename,
name,and
name andare
are
uniquely
uniquelyidentified
identifiedby
bythat
thatname
nameand
andby
bytheir
theirposition
positionin
in
the
thesequence.
sequence.
CountyTax
55 55 10
1 2 3 4 5 6
MOVE 10 TO CountyTax(5)
ADD TaxPaid TO CountyTax(CountyNum)
ADD TaxPaid TO CountyTax(CountyNum + 2)
55 2
200 COBOL Programming Fundamental © 2004 IBM Corporation
ISSC Shanghai, AMS, GCG
AAtable
tableisisaacontiguous
contiguoussequence
sequenceof ofmemory
memorylocations
locations
called
calledelements
elements, , which
whichall
allhave
havethe
thesame
samename,
name,and
name andare
are
uniquely
uniquelyidentified
identifiedby
bythat
thatname
nameand
andby bytheir
theirposition
positionin
in
the
thesequence.
sequence.The Theposition
positionindex
indexisiscalled
calledaasubscript.
subscript.
CountyTax
55 55 10
1 2 3 4 5 6
Subscript
MOVE 10 TO CountyTax(5)
ADD TaxPaid TO CountyTax(CountyNum)
ADD TaxPaid TO CountyTax(CountyNum + 2)
201 COBOL Programming Fundamental © 2004 IBM Corporation
ISSC Shanghai, AMS, GCG
1 2 3 4 5 6
PROCEDURE DIVISION.
Begin.
OPEN INPUT TaxFile
READ TaxFile
AT END SET EndOfTaxFile TO TRUE
END-READ
PERFORM UNTIL EndOfTaxFile
ADD TaxPaid TO CountyTax(CountyNum)
READ TaxFile
AT END SET EndOfTaxFile TO TRUE
END-READ Subscript
END-PERFORM.
PERFORM VARYING Idx FROM 1 BY 1
UNTIL Idx GREATER THAN 26
DISPLAY "County ", CountyNum
" tax total is " CountyTax(Idx)
END-PERFORM
CLOSE TaxFile 9 Statements
STOP RUN.
202 COBOL Programming Fundamental © 2004 IBM Corporation
ISSC Shanghai, AMS, GCG
1 2 3 4 5 6
IF CountyName = "CARLOW"
ADD TaxPaid TO CountyTax(1)
END-IF
IF CountyName = "CAVAN"
ADD TaxPaid TO CountyTax(2)
END-IF
: : : : :
: : : : :
24 TIMES
TaxTotals
CountyTax
Tables and the PERFORM ... VARYING
Declaring Tables
1 2 3 4 5 6
01 TaxTotals.
02 CountyTax PIC 9(10)V99
OCCURS 26 TIMES.
or
02 CountyTax OCCURS 26 TIMES
PIC 9(10)V99.
e.g.
MOVE ZEROS TO TaxTotals.
MOVE 20 TO CountyTax(5).
208 COBOL Programming Fundamental © 2004 IBM Corporation
ISSC Shanghai, AMS, GCG
000000 000000
CountyTax PayerCount
CountyTaxDetails
01 TaxTotals.
02 CountyTaxDetails OCCURS 26 TIMES.
03 CountyTax PIC 9(10)V99.
03 PayerCount PIC 9(7).
THRU BEFORE
PERFORM 1stProc EndProc WITH TEST
THROUGH AFTER
Identifier 2
Identifer1
VARYING FROM IndexName 2
IndexName1 Literal
Identifier 3
BY UNTIL Condition1
Literal
Identifier 5
Identifier 4
AFTER FROM IndexName 4
IndexName3 K
Literal
Identifier 6
BY UNTIL Condition2
Literal
[StatementB lock END - PERFORM ]
Idx1
Move 1 to Idx1 1
True
Idx1 = 3 Next Statement
False
Loop Body
Inc Idx1
Idx1
1
Move 1 to Idx1
True
Idx1 = 3 Next Statement
False
Loop Body
Inc Idx1
Idx1
Move 1 to Idx1
1
True
Idx1 = 3 Next Statement
False
1
Loop Body
Inc Idx1
Idx1
Move 1 to Idx1
2
True
Idx1 = 3 Next Statement
False
1
Loop Body
Inc Idx1
Move 1 to Idx1
Idx1
2
True
Idx1 = 3 Next Statement
False
1
Loop Body
Inc Idx1
True
Idx1 = 3 Next Statement
False
1
Loop Body 2
Inc Idx1
Table of contents
Introduction to COBOL
COBOL Basics 1
COBOL Basics 2
Introduction to Sequential Files
Processing Sequential Files
Simple iteration with the PERFORM verb
Arithmetic and Edited Pictures
Conditions
Tables and the PERFORM ... VARYING
Designing Programs
Designing Programs
Overview
Designing Programs
COBOL
Designing Programs
Cost of a system over its entire life
Testing
Coding 15%
7%
Analysis
and
Design 9%
Zelkowitz
ACM 1978
Maintenance p202
67%
Maintenance Costs are only as low as this because many systems become so
unmaintainable early in their lives that they have to be SCRAPPED !!
:- B. Boehm
222 COBOL Programming Fundamental © 2004 IBM Corporation
ISSC Shanghai, AMS, GCG
Designing Programs
Program Maintenance
Designing Programs
How should write your programs?
§ You should write your programs with the expectation that they
will have to be changed.
§ You should write your programs as you would like them written if
you had to maintain them.
Designing Programs
Efficiency vs Clarity
Designing Programs
When shouldn’t we design our programs?
Designing Programs
Producing a Good Design
§ The first step to producing a good design is to design consciously.
§ Conscious design starts by separating the design task from the task
of program construction.
Designing Programs
Why separate design from construction?
Designing Programs
Relative cost of fixing a bug
In Production
x82
In
Construction
x20
In Design
Figures from IBM in Santa Clara.
229 COBOL Programming Fundamental © 2004 IBM Corporation
ISSC Shanghai, AMS, GCG
Designing Programs
Design Notations
Designing Programs
Flowcharts as design tools
Designing Programs
Structured Flowcharts as design tools
Designing Programs
Structured English
For
Foreach
eachtransaction
transactionrecord
recorddo dothe
thefollowing
following
IF
IFthe
therecord
recordisisaareceipt
receiptthen
then
add
add11to tothe
theReceiptsCount
ReceiptsCount
add
addthetheAmount
Amountto tothe
theBalance
Balance
otherwise
otherwise
add
add11to tothe
thePaymentsCount
PaymentsCount
subtract
subtractthetheAmount
Amountfromfromthe
theBalance
Balance
EndIF
EndIF
add
add11to tothe
theRecordCount
RecordCount
Write
WritethetheBalance
Balanceto tothe
theCustomerFile
CustomerFile
When
Whenthe
thefile
filehas
hasbeen
beenprocessed
processed
Output
Output thetheReceiptsCount
ReceiptsCount
the
thePaymentsCount
PaymentsCount
and
andthe
theRecordCount
RecordCount
Designing Programs
The Jackson Method
Designing Programs
Warnier-Orr Diagrams
OpenFiles
ProcessRecords
ProcessReceipt
RecordType ? ⊕
UpdateCustomerBalance ProcessPayment
WriteNewBalance
PrintTotals
CloseFiles