It is maintained by CODASYL-Conference on Data Analysis and Systems Language.
Hierarchy of a COBOL PROGRAM.
- Divisions
- Sections
- Paragraphs
- Sentences
- Statements
- Clause/Word
- Characters
There are 4 Divisions in a COBOL Program.
- IDENTIFICATION DIVISION.
- ENVIRONMENT DIVISION.
- DATA DIVISION.
- PROCEDURE DIVISION.
.
IDENTIFICATION DIVISION.
It has no sections.The important and compulsory entry is PROGRAM-ID paragraph.
IDENTIFICATION DIVISION.
PROGRAM-ID. MY-FIRST-PROGRAM.
ENVIRONMENT DIVISION.
It has two sections.
CONFIGURATION SECTION.
INPUT-OUTPUT SECTION.
CONFIGURATION SECTION has two paragraphs.
SOURCE-COMPUTER. IBM-PC.
OBJECT-COMPUTER. IBM-PC
This sections identifies the computer or hardware we are using for the COBOL Program.
INPUT-OUTPUT SECTION has one important paragraph.
FILE-CONTROL.
SELECT WS-FILE ASSIGN TO DISK
ORGANIZATION IS LINE SEQUENTIAL.
It specifies the data and printer files that are used in a COBOL Program.
DATA DIVISION.
It has 5 sections.
- FILE SECTION.
- WORKING-STORAGE SECTION.
- SCREEN SECTION.
- LINKAGE SECTION.
- REPORT SECTION.
In FILE SECTION we mention the format of the data files and the printer files used in the program.
FILE SECTION.
FD WS-FILE
LABEL RECORDS ARE STANDARD
VALUE OF FILE-ID "C:STUDENT.DAT".
01 STUDENT-REC.
02 S-NAME PIC A(30).
02 S-AGE PIC 9(2).
02 ADDI-INFO PIX X(50).
Here FD is a file identifier and its full form is FILE DESCRIPTION.
WS-FILE is the file name mentioned in the INPUT-OUTPUT SECTION of ENVIRONMENT DIVISION.
C:STUDENT.DAT is the name of the data file stored on c drive of the computer.
LABEL RECORDS ARE STANDARD means it follows the standard convention of the operating system used.
01 STUDENT-REC.---------------------------------------------------(Record Name)
02 S-NAME PIC A(30).-------------------------(Field Name)
02 S-AGE PIC 9(2).---------------------------(Field Name)
02 ADDI-INFO PIX X(50).---------------------(Field Name)
The above one is the structure of the record in the student.dat file. 01 and 02 are called level nos.
In WORKING-STORAGE SECTION we mention the data names or identifiers or variables used in the COBOL program.
WORKING-STORAGE SECTION.
77 ANSWER PIC X VALUE " ".
77 SALARY PIC 9(4)V99 VALUE 0.
77 is the level number where we can specify individual data names.
SCREEN SECTION is used for formatting the display screen or the monitor or VDU.
LINKAGE SECTION is used when we use sub programming
REPORT SECTION is for formatting the reports.
Apart from the above sections we can also mention COMMUNICATION SECTION which can be used in NETWORKING environment.
PROCEDURE DIVISION.
It has user defined sections and paragraphs.Here we write the COBOL instructions
COBOL CODING SHEET
COBOL programs are written in coding sheet.The same format need to be followed while typing in the editor.
The coding sheet consists of 1-80 columns.
Columns 1-3 - Page No.-(optional)
4-6 - Line Nos.(Optional)
7 - Special mark like -,*,/
- is for continuation
* is for comment entry
/ is for page skip
8-11 - A -area
All the division names,section names,paragraph names,level nos 01-49,77,66 , FD,SD
will start here.
12-72 - B-area
All the COBOL instructions will start here.
72-80 - Remarks - has no relevance to the compiler.
PICTURE CLAUSE
PIC stands for PICTURE Clause. It is specified along with the data names/identifiers.
Example:
77 S-NAME PIC A(30) VALUE SPACES.
77 S-AGE PIC 9(2) VALUE 0.
77 S-FEES PIC 9(4)V99 VALUE 4567.54.
Here S-NAME,S-AGE,S-FEES are data names/identifiers. PIC indicates PICTURE clause.Along with the picture clause we can specify data type, width and initial value. The value clause indicates the initial value given to the identifier. Here, in the picture clause:
A - indicates the given data type is alphabetic- a-z and a blank values are allowed
X - indicates alphanumeric - all characters, numbers and special symbols including a blank are allowed
9 - indicates numeric values - only numbers 0-9 are allowed
V99 indicates decimal values
SPACE,SPACES, ZEROS, ZEROES,ZERO are called as figurative constants.
META LANGUAGE
The syntax of the COBOL language is expressed using meta language.Meta language means, language about a language.
Capitals and Capital Underlined------- Reserved or Key words
Lower Case ------- User Defined entries
[ ] ------- Optional entries
{ } ------- Choice of entries
... ------- prior entries will be repeated
INPUT and OUTPUT statements
ACCEPT and DISPLAY Statements are the input and output statements in COBOL.
Syntax:
ACCEPT (LIN COL) identifier-1...
DISPLAY (LIN COL) identifier-1... or message
Example 1.
Write a COBOL program to accept your name and age and display in the monitor.
SOLUTION-1.
IDENTIFICATION DIVISION.
PROGRAM-ID. EXAMPLE1.
ENVIRONMENT DIVISION.
DATA DIVISION.
WORKING-STORAGE SECTION.
77 S-NAME PIC X(30) VALUE SPACES.
77 S-AGE PIC 9(2) VALUE 0.
PROCEDURE DIVISION.
PARA-1.
DISPLAY "ENTER YOUR NAME".
ACCEPT S-NAME.
DISPLAY "ENTER YOUR AGE".
ACCEPT S-AGE.
PARA-2.
DISPLAY "MY NAME IS : " S-NAME.
DISPLAY "MY AGE IS :" S-AGE.
STOP RUN.
SOLUTION-2. (with line and column number).
IDENTIFICATION DIVISION.
PROGRAM-ID. EXAMPLE1.
ENVIRONMENT DIVISION.
DATA DIVISION.
WORKING-STORAGE SECTION.
77 S-NAME PIC X(30) VALUE SPACES.
77 S-AGE PIC 9(2) VALUE 0.
PROCEDURE DIVISION.
PARA-1.
DISPLAY (5, 20) "ENTER YOUR NAME".
ACCEPT S-NAME.
DISPLAY (7, 20)"ENTER YOUR AGE".
ACCEPT S-AGE.
PARA-2.
DISPLAY (9, 20) "MY NAME IS : " S-NAME.
DISPLAY (10, 20) "MY AGE IS :" S-AGE.
STOP RUN.
To enter the program
c>NE EXAMPL1.COB
To compile the program
c>COBOL EXAMPL1.COB;
---Compile the program till NO Errors or Warnings
To execute the program(to see the output)
c>RUNCOB EXAMPL1
Arithmetic statements in COBOL
Operators
- Arithmetic Operators
+ plus sum
- minus difference
* multiply product
/ divide quotient
- Relational Operators
< less than
>= greater than or equal to
<= less than or equal to
= equal to
not = not equal to
- Arithmetic verbs
Example:
ADD A B GIVING C. COMPUTE C = A + B.
ADD A TO B. COMPUTE B = A + B.
SUBTRACT A FROM B. COMPUTE B = B - A.
SUBTRACT A FROM B GIVING C. COMPUTE C = B - A.
MULTIPLY A BY B. COMPUTE B = A * B.
MULTIPLY A BY B GIVING C. COMPUTE C = A* B.
DIVIDE A BY B. COMPUTE B = A / B.
DIVIDE A BY B GIVING C. COMPUTE C = A / B.
DIVIDE A BY B GIVING C REMAINDER D. COMPUTE C = A / B.
Syntax:
ADD numeric value TO
numeric value
GIVING variable [ROUNDED]
[ ON SIZE ERROR
do something ]
ADD numeric value TO
numeric variable [ROUNDED]
[ ON SIZE ERROR
do something ]
Examples:ADD 17.5 TO THE-VALUE GIVING THE-SUM ROUNDED ON SIZE ERROR
DISPLAY "Add - overflow" ADD 1.17 TO THE-VALUE ROUNDED ON SIZE ERROR
DISPLAY "Add - overflow"
Syntax:COMPUTE numeric variable [ROUNDED] = arithmetic expression [ ON SIZE ERROR
do something else ]
Examples:COMPUTE THE-RESULT ROUNDED = (BASE-VALUE * 10) + (A-VALUE / 50) ON SIZE ERROR DISPLAY "Warning Size error."
Similarly for SUBTRACT,MULTIPLY and DIVIDE statements.
- Write a COBOL program to illustrate arithmetic statements.
Solution.
IDENTIFICATION DIVISION.
PROGRAM-ID. ARITHMETICS.
ENVIRONMENT DIVISION.
CONFIGURATION SECTION.
SOURCE-COMPUTER. IBM-PC.
OBJECT-COMPUTER. IBM-PC.
DATA DIVISION.
WORKING-STORAGE SECTION.
77 A PIC 9(2) VALUE 0.
77 B PIC 9(2) VALUE 0.
77 C PIC 9(4) VALUE 0.
77 D PIC 9(2) VALUE 0.
PROCEDURE DIVISION.
PARA-INPUT.
ACCEPT A.
ACCEPT B.
PARA-ADD.
ADD A B GIVING C.
DISPLAY " SUM IS : ", C.
PARA-SUBTRACT.
SUBTRACT A FROM B GIVING C.
DISPLAY "DIFFERENCE IS : ", C.
PARA-MULTIPLY.
MULTIPLY A BY B GIVING C.
DISPLAY "PRODUCT IS : ", C.
PARA-DIVIDE.
DIVIDE A BY B GIVING C REMAINDER D.
DISPLAY " QUOTIENT IS :", C.
DISPLAY " REMAINDER IS : ", D.
STOP RUN.
Solution(with editing characters)
IDENTIFICATION DIVISION.
PROGRAM-ID. ARITHMETICS.
ENVIRONMENT DIVISION.
CONFIGURATION SECTION.
SOURCE-COMPUTER. IBM-PC.
OBJECT-COMPUTER. IBM-PC.
DATA DIVISION.
WORKING-STORAGE SECTION.
77 A PIC 9(2) VALUE 0.
77 B PIC 9(2) VALUE 0.
77 C PIC z(4)V99.
77 D PIC z(2).
PROCEDURE DIVISION.
PARA-INPUT.
ACCEPT A.
ACCEPT B.
PARA-ADD.
ADD A B GIVING C.
DISPLAY " SUM IS : ", C.
PARA-SUBTRACT.
SUBTRACT A FROM B GIVING C.
DISPLAY "DIFFERENCE IS : ", C.
PARA-MULTIPLY.
MULTIPLY A BY B GIVING C.
DISPLAY "PRODUCT IS : ", C.
PARA-DIVIDE.
DIVIDE A BY B GIVING C REMAINDER D.
DISPLAY " QUOTIENT IS :", C.
DISPLAY " REMAINDER IS : ", D.
STOP RUN.
IF Statement
Syntax:1. IF condition-1
imperative statement-1......
2. IF condition-1
statement-1.....
ELSE
statement-2......
3. IF condition-1
IF condition-2
statement-2
ELSE statement-3
ELSE
IF condition-3
statement-4
ELSE statement-5.
The syntax1 is simple IF condition,syntax2 is IF else and the syntax3 is nested if.Conditions can be either simple or complex condition.Complex condition generally contains Logical operators like AND OR NOT.
The Relational operator specifies the type of comparison to be made as shown in below table.
Relational operator | Can be written as | Meaning of operator |
IS GREATER THAN | IS > | Greater than |
IS NOT GREATER THAN | IS NOT > | Not greater than |
IS LESS THAN | IS < | Less than |
IS NOT LESS THAN | IS NOT < | Not less than |
IS EQUAL TO | IS = | Equal to |
IS NOT EQUAL TO | IS NOT = | Not equal to |
IS GREATER THAN OR EQUAL TO | IS >= | Is greater than or equal to |
IS LESS THAN OR EQUAL TO | IS <= | Is less than or equal to |
MOVE statement
syntax:
MOVE identifier/literal TO identifier-1...
1. Write a COBOL Program to illustrate a simple Calculator.
IDENTIFICATION DIVISION. PROGRAM-ID. Iteration-If. AUTHOR. VVNK. DATA DIVISION. WORKING-STORAGE SECTION. 01 Num1 PIC 9 VALUE ZEROS. 01 Num2 PIC 9 VALUE ZEROS. 01 Result PIC 99 VALUE ZEROS. 01 Operator PIC X VALUE SPACE. PROCEDURE DIVISION. Calculator. DISPLAY "Enter First Number : ". ACCEPT Num1. DISPLAY "Enter Second Number : ". ACCEPT Num2. DISPLAY "Enter operator (+ or - or *) : ". ACCEPT Operator IF Operator = "+" ADD Num1, Num2 GIVING Result. IF Operator = "-"SUBTRACT Num1 FROM Num2 GIVING Result. IF Operator = "*"MULTIPLY Num1 BY Num2 GIVING Result. DISPLAY "Result is = ", Result. STOP RUN.
CONDITION NAMES
condition-name condition. (important)
condition-name is a identifier defined with level number 88. It has only VALUE clause, it does not contain any picture clause, but it must always be associated to a data name called the conditional variable. Syntax 88 condition-name literal-1 [ literal-2 ] [, literal-3 [ literal-4] ... ] Example - 01 WS-AGE PIC 99. <--- conditional variable 88 INFANT VALUE 0. 88 BABY VALUE 1,2. 88 CHILD VALUE 3 THRU 12. 88 TEEN-AGER VALUE 13 THRU 19. In the above example we have defined 4 condition-name's associated with one data name WS-NAME. if WS-AGE contains value 0 (ZERO). INFANT will become true , since we have defined this condition-name with value 0. If WS-AGE contains values 1 OR 2, Second condition name BABY will become true,since we have defined BABY condition-name with value 1 and 2. Same rule applied to other condition-names. How we can use this in PROCEDURE DIVISION? See below example... IF INFANT is true, statement(s) after IF statement will be executed. i.e., WS-AGE contains value 0 (ZER0), then INFANT will become true. IF INFANT MOVE 20 TO X.
1.Write a COBOL program using conditional Verbs
IDENTIFICATION DIVISION. PROGRAM-ID. Conditions. AUTHOR. VVNK. DATA DIVISION. WORKING-STORAGE SECTION. 01 Char PIC X. 88 Vowel VALUE "a", "e", "i", "o", "u". 88 Consonant VALUE "b", "c", "d", "f", "g", "h" "j" THRU "n", "p" THRU "t", "v" THRU "z". 88 Digit VALUE "0" THRU "9". 88 ValidCharacter VALUE "a" THRU "z", "0" THRU "9". PROCEDURE DIVISION. Para-1. DISPLAY "Enter lower case character or digit. No data ends.". ACCEPT Char. IF Vowel DISPLAY "The letter " Char " is a vowel." IF Consonant DISPLAY "The letter " Char " is a consonant." IF Digit DISPLAY Char " is a digit." IF OTHER DISPLAY "problems found". STOP RUN.
GO TO statement :
GO TO para name
Eg:
GO TO para-1.
After the execution of this statement the control will jump the para mentioned along with the GO TO statement but will not return back.
This is the disadvantage with GO TO statement.
PERFORM statements:
The following are the different forms of perform statements:
- PERFORM paraname.
- PERFORM paraname-1 THRU paraname-n.
- PERFORM paraname integer TIMES.
- PERFORM paraname-1 THRU paraname-n integer TIMES.
- PERFORM paraname VARYING index FROM integer-1 BY integer-2 UNTIL condition.
- PERFORM paraname VARYING index-1 FROM integer-1 BY integer-2 AFTER index-2 FROM integer-3 BY integer-4 UNTIL condition.
eX:
Write a program to display multiplication table of a given number using different types of perform statements.
METHOD 1:
IDENTIFICATION DIVISION.
PROGRAM-ID. MULT-TABLE.
ENVIRONMENT DIVISION.
DATA DIVISION.
WORKING-STORAGE SECTION.
77 I PIC 9(2) VALUE 0.
77 PROD PIC 9(2) VALUE 0.
77 NUM PIC 9(2) VALUE 0.
PROCEDURE DIVISION.
PARA-MAIN.
ACCEPT NUM.
PERFORM PARA-MUL 10 TIMES.
STOP RUN.
PARA-MUL.
COMPUTE I = I + 1.
COMPUTE PROD = NUM * I.
DISPLAY NUM "*" I "=" PROD.
METHOD 2:
COMPUTE I = I + 1.
COMPUTE PROD = NUM * I.
DISPLAY NUM "*" I "=" PROD.
METHOD 2:
IDENTIFICATION DIVISION.
PROGRAM-ID. MULT-TABLE.
ENVIRONMENT DIVISION.
DATA DIVISION.
WORKING-STORAGE SECTION.
77 I PIC 9(2) VALUE 0.
77 PROD PIC 9(2) VALUE 0.
77 NUM PIC 9(2) VALUE 0.
PROCEDURE DIVISION.
PARA-MAIN.
ACCEPT NUM.
PERFORM PARA-MUL VARYING I FROM 1 BY 1 UNTIL I > 10.
STOP RUN.
PARA-MUL.
COMPUTE PROD = NUM * I.
DISPLAY NUM "*" I "=" PROD.
COMPUTE PROD = NUM * I.
DISPLAY NUM "*" I "=" PROD.
METHOD 3:
IDENTIFICATION DIVISION.
PROGRAM-ID. MULT-TABLE.
ENVIRONMENT DIVISION.
DATA DIVISION.
WORKING-STORAGE SECTION.
77 I PIC 9(2) VALUE 1.
77 PROD PIC 9(2) VALUE 0.
77 NUM PIC 9(2) VALUE 0.
PROCEDURE DIVISION.
PARA-MAIN.
ACCEPT NUM.
PERFORM PARA-MUL 1 UNTIL I > 10.
STOP RUN.
PARA-MUL.
COMPUTE PROD = NUM * I.
DISPLAY NUM "*" I "=" PROD.
COMPUTE I = I + 1.
COMPUTE PROD = NUM * I.
DISPLAY NUM "*" I "=" PROD.
COMPUTE I = I + 1.
OCCURS clause:
Occurs clause is used to store table entries in the data division.Whenever you refer an entry defined by occurs clause, it should be referred with a subscript.
Ex:
01 Marks-table.
02 s-marks pic 9(3) occurs 5 times.
In the above case we can store the marks of 5 subjects with one single data entry using occurs clause.
If we want to refer 3rd subject marks we should refer as s-marks(3) in procedure division.
EX:
Write a program to store 5 salesman sale value in a table and find its grand total.
IDENTIFICATION DIVISION.
PROGRAM-ID. SALE-VALUE.
ENVIRONMENT DIVISION.
DATA DIVISION.
WORKING-STORAGE SECTION.
77 I PIC 9(2) VALUE 0.
01 SALES-TABLE.
02 SALES-VALUE OCCURS 5 TIMES PIC 9(3).
77 G-TOT PIC 9(5) VALUE 0.
PROCEDURE DIVISION.
PARA-MAIN.
PERFORM ACC-PARA VARYING I FROM 1 BY 1 UNTIL I > 5.
PERFORM TOT-PARA VARYING I FROM 1 BY 1 UNTIL I > 5.
DISPLAY "TOTAL SALE VALUE = " G-TOT.
STOP RUN.
ACC-PARA.
MOVE 0 TO SALES-VALUE( I ).
DISPLAY " ENTER " I " SALE VALUE".
ACCEPT SALES-VALUE( I ).
TOT-PARA.
COMPUTE G-TOT = G-TOT + SALES-VALUE ( I ).
2 DIMENSIONAL TABLE
77 I PIC 9(2) VALUE 0.
01 SALES-TABLE.
02 SALES-VALUE OCCURS 5 TIMES PIC 9(3).
77 G-TOT PIC 9(5) VALUE 0.
PROCEDURE DIVISION.
PARA-MAIN.
PERFORM ACC-PARA VARYING I FROM 1 BY 1 UNTIL I > 5.
PERFORM TOT-PARA VARYING I FROM 1 BY 1 UNTIL I > 5.
DISPLAY "TOTAL SALE VALUE = " G-TOT.
STOP RUN.
ACC-PARA.
MOVE 0 TO SALES-VALUE( I ).
DISPLAY " ENTER " I " SALE VALUE".
ACCEPT SALES-VALUE( I ).
TOT-PARA.
COMPUTE G-TOT = G-TOT + SALES-VALUE ( I ).
2 DIMENSIONAL TABLE
ex:
To store marks of 60 students each having 5 subjects we use occurs clause as given below:
01 student-marks-table.
02 students occurs 60 times.
03 marks occurs 5 times pic 9(3).
ex:
Write a program to store sales value of 12 months for 5 salesman and store the total sale value of each salesman.Also display the grand total sale value of all salesman.
IDENTIFICATION DIVISION.
PROGRAM-ID. MULT-TABLE.
ENVIRONMENT DIVISION.
DATA DIVISION.
WORKING-STORAGE SECTION.
01 SALES-TABLE.
02 SALESMAN OCCURS 5 TIMES.
03 SALE-VALUE OCCURS 12 TIMES PIC 9(3).
01 SALE-TOT-TABLE.
02 SALE-TOT OCCURS 5 TIMES PIC 9(5).
77 G-TOT PIC 9(5) VALUE 0.
77 I PIC 9(2) VALUE 0.
77 J PIC 9(2) VALUE 0.
PROCEDURE DIVISION.
PARA-MAIN.
PERFORM ACC-SALE-VALUE VARYING I FROM 1 BY 1 UNTIL I > 5 AFTER
J FROM 1 BY 1 UNTIL J > 12.
PERFORM SALES-TOTAL VARYING I FROM 1 BY 1 UNTIL I > 5 AFTER
J FROM 1 BY 1 UNTIL J > 12.
PERFORM G-TOT-PARA VARYING I FROM 1 BY 1 UNTIL I > 5.
DISPLAY " GRAND TOTAL = " G-TOT.
STOP RUN.
ACC-SALE-VALUE.
MOVE 0 TO SALE-VALUE ( I J).
MOVE 0 TO SALE-TOT( I ).
ACCEPT SALE-VALUE( I J ).
SALES-TOTAL.
COMPUTE SALE-TOT ( I ) = SALE-VALUE( I ) + SALE-TOT( I ).
G-TOT-PARA.
DISPLAY SALE-TOT( I ).
COMPUTE G-TOT = G-TOT + SALE-TOT( I ).
INDEXED TABLES: example:
01 MARKS-TABLE.
02 S-MARKS PIC 9(3) OCCURS 5 TIMES INDEXED BY I.
To manipulate the index I we have to use SET Verb.
To initialize I
SET I TO 0.
It initializes value to 0.
To increase the value of I
SET I UP BY 1.
To decrease the value of I
SET I DOWN BY 1.
Note: I need not be separately declared in working storage section.
SERACH Verb:
The SEARCH verb is used to locate elements in 1-dimensional table.
SEARCH identifier-1
AT END imperative statement-1
WHEN condition-1 imperative statement.
Example:
Write a program to store ACC NO,ACC NAME and Balance in a table and display the balance for a given account number.
IDENTIFICATION DIVISION.
PROGRAM-ID. BANK-ACC.
ENVIRONMENT DIVISION.
DATA DIVISION.
WORKING-STORAGE SECTION.
77 W-ACC-NO PIC 9(3) VALUE 0.
01 SB-ACC-DETAILS.
02 ACCOUNT OCCURS 5 TIMES INDEXED BY I.
03 ACC-NUM PIC 9(3).
03 ACC-NAME PIC X(15).
03 BALANCE PIC 9(5).
PROCEDURE DIVISION.
PARA-MAIN.
PERFORM ACC-PARA 5 TIMES.
PERFORM SERACH-PARA.
STOP RUN.
ACC-PARA.
MOVE 0 TO ACC-NUM(I).
MOVE SPACES TO ACC-NAME(I).
MOVE 0 TO BALANCE(I).
ACCEPT ACC-NUM(I).
ACCEPT ACC-NAME(I).
ACCEPT BALANCE(I).
SEARCH-PARA.
DISPLAY "ENTER ACCOUNT NUMBER TO SEARCH".
ACCEPT W-ACC-NO.
SEARCH ACCOUNT
AT END DISPLAY " ACCOUNT NOT FOUND"
WHEN W-ACC-NO = ACC-NAME(I)
DISPLAY ACC-NUM(I),
ACC-NAME(I),
BALANCE(I).
Binary Search:
For binary search, search all statement is used.
SEARCH ALL identifier-1
AT END imperative statement-1
WHEN condition-1 imperative statement.
We can also declare key elements in an indexed table using ASCENDING KEY / DESCENDING KEY phrase.
EX:
Write a program to store ACC NO,ACC NAME and Balance in a table and display the balance for a given account number.Take ACCNO as primary key.Use binary search.
IDENTIFICATION DIVISION.
PROGRAM-ID. BANK-ACC.
ENVIRONMENT DIVISION.
DATA DIVISION.
WORKING-STORAGE SECTION.
77 W-ACC-NO PIC 9(3) VALUE 0.
01 SB-ACC-DETAILS.
02 ACCOUNT OCCURS 5 TIMES
ASCENDING KEY IS ACC-NUM INDEXED BY I.
03 ACC-NUM PIC 9(3).
03 ACC-NAME PIC X(15).
03 BALANCE PIC 9(5).
PROCEDURE DIVISION.
PARA-MAIN.
PERFORM ACC-PARA 5 TIMES.
PERFORM SERACH-PARA.
STOP RUN.
ACC-PARA.
MOVE 0 TO ACC-NUM(I).
MOVE SPACES TO ACC-NAME(I).
MOVE 0 TO BALANCE(I).
ACCEPT ACC-NUM(I).
ACCEPT ACC-NAME(I).
ACCEPT BALANCE(I).
SEARCH-PARA.
DISPLAY "ENTER ACCOUNT NUMBER TO SEARCH".
ACCEPT W-ACC-NO.
SEARCH ALL ACCOUNT
AT END DISPLAY " ACCOUNT NOT FOUND"
WHEN W-ACC-NO = ACC-NAME(I)
DISPLAY ACC-NUM(I),
ACC-NAME(I),
BALANCE(I).
01 SALES-TABLE.
02 SALESMAN OCCURS 5 TIMES.
03 SALE-VALUE OCCURS 12 TIMES PIC 9(3).
01 SALE-TOT-TABLE.
02 SALE-TOT OCCURS 5 TIMES PIC 9(5).
77 G-TOT PIC 9(5) VALUE 0.
77 I PIC 9(2) VALUE 0.
77 J PIC 9(2) VALUE 0.
PROCEDURE DIVISION.
PARA-MAIN.
PERFORM ACC-SALE-VALUE VARYING I FROM 1 BY 1 UNTIL I > 5 AFTER
J FROM 1 BY 1 UNTIL J > 12.
PERFORM SALES-TOTAL VARYING I FROM 1 BY 1 UNTIL I > 5 AFTER
J FROM 1 BY 1 UNTIL J > 12.
PERFORM G-TOT-PARA VARYING I FROM 1 BY 1 UNTIL I > 5.
DISPLAY " GRAND TOTAL = " G-TOT.
STOP RUN.
ACC-SALE-VALUE.
MOVE 0 TO SALE-VALUE ( I J).
MOVE 0 TO SALE-TOT( I ).
ACCEPT SALE-VALUE( I J ).
SALES-TOTAL.
COMPUTE SALE-TOT ( I ) = SALE-VALUE( I ) + SALE-TOT( I ).
G-TOT-PARA.
DISPLAY SALE-TOT( I ).
COMPUTE G-TOT = G-TOT + SALE-TOT( I ).
INDEXED TABLES: example:
01 MARKS-TABLE.
02 S-MARKS PIC 9(3) OCCURS 5 TIMES INDEXED BY I.
To manipulate the index I we have to use SET Verb.
To initialize I
SET I TO 0.
It initializes value to 0.
To increase the value of I
SET I UP BY 1.
To decrease the value of I
SET I DOWN BY 1.
Note: I need not be separately declared in working storage section.
SERACH Verb:
The SEARCH verb is used to locate elements in 1-dimensional table.
SEARCH identifier-1
AT END imperative statement-1
WHEN condition-1 imperative statement.
Example:
Write a program to store ACC NO,ACC NAME and Balance in a table and display the balance for a given account number.
IDENTIFICATION DIVISION.
PROGRAM-ID. BANK-ACC.
ENVIRONMENT DIVISION.
DATA DIVISION.
WORKING-STORAGE SECTION.
77 W-ACC-NO PIC 9(3) VALUE 0.
01 SB-ACC-DETAILS.
02 ACCOUNT OCCURS 5 TIMES INDEXED BY I.
03 ACC-NUM PIC 9(3).
03 ACC-NAME PIC X(15).
03 BALANCE PIC 9(5).
PROCEDURE DIVISION.
PARA-MAIN.
PERFORM ACC-PARA 5 TIMES.
PERFORM SERACH-PARA.
STOP RUN.
ACC-PARA.
MOVE 0 TO ACC-NUM(I).
MOVE SPACES TO ACC-NAME(I).
MOVE 0 TO BALANCE(I).
ACCEPT ACC-NUM(I).
ACCEPT ACC-NAME(I).
ACCEPT BALANCE(I).
SEARCH-PARA.
DISPLAY "ENTER ACCOUNT NUMBER TO SEARCH".
ACCEPT W-ACC-NO.
SEARCH ACCOUNT
AT END DISPLAY " ACCOUNT NOT FOUND"
WHEN W-ACC-NO = ACC-NAME(I)
DISPLAY ACC-NUM(I),
ACC-NAME(I),
BALANCE(I).
Binary Search:
For binary search, search all statement is used.
SEARCH ALL identifier-1
AT END imperative statement-1
WHEN condition-1 imperative statement.
We can also declare key elements in an indexed table using ASCENDING KEY / DESCENDING KEY phrase.
EX:
Write a program to store ACC NO,ACC NAME and Balance in a table and display the balance for a given account number.Take ACCNO as primary key.Use binary search.
IDENTIFICATION DIVISION.
PROGRAM-ID. BANK-ACC.
ENVIRONMENT DIVISION.
DATA DIVISION.
WORKING-STORAGE SECTION.
77 W-ACC-NO PIC 9(3) VALUE 0.
01 SB-ACC-DETAILS.
02 ACCOUNT OCCURS 5 TIMES
ASCENDING KEY IS ACC-NUM INDEXED BY I.
03 ACC-NUM PIC 9(3).
03 ACC-NAME PIC X(15).
03 BALANCE PIC 9(5).
PROCEDURE DIVISION.
PARA-MAIN.
PERFORM ACC-PARA 5 TIMES.
PERFORM SERACH-PARA.
STOP RUN.
ACC-PARA.
MOVE 0 TO ACC-NUM(I).
MOVE SPACES TO ACC-NAME(I).
MOVE 0 TO BALANCE(I).
ACCEPT ACC-NUM(I).
ACCEPT ACC-NAME(I).
ACCEPT BALANCE(I).
SEARCH-PARA.
DISPLAY "ENTER ACCOUNT NUMBER TO SEARCH".
ACCEPT W-ACC-NO.
SEARCH ALL ACCOUNT
AT END DISPLAY " ACCOUNT NOT FOUND"
WHEN W-ACC-NO = ACC-NAME(I)
DISPLAY ACC-NUM(I),
ACC-NAME(I),
BALANCE(I).
FILES :
A file is a collection of logically related records.A record is a collection of logically related fields.
Fields contain data within them.Data is stored in the form of bits and bytes.
There are 3 types of files in COBOL.
- SEQUENTIAL
- INDEXED
- RELATIVE
- SEQUENTIAL
- RANDOM
- DYNAMIC
In sequential files records are stored in the manner in which there are entered or saved.Hence they can be accessed sequentially only.To write a record or read a record we have to access one after the other i,e., sequentially.Records can be added only at the end of the file and not anywhere in the middle.
In Indexed files records are stored based on a key field which are part of the the record also called as Index.
An index file is conceptually made up of two files i.e., an index file on which the file is accessed and a data file.The index file contains all the key fields.In case of Indexed files records can be accessed sequentially, or randomly or dynamically.
In Relative file the record is identified based on a relative record number.The records are accessed i.e., stored and retrieved based on the relative record number.In case of relative files records can be accessed sequentially, or randomly or dynamically.
While creating any file generally we write the records in a sequential manner.
While creating the file the file should be opened in OUTPUT mode.In order to retrieve the records in the file it should be opened in INPUT mode in case of sequential,Index and Relative files.Indexed and Relative files can be accessed that is , retrieved by opening them in I-O mode(that is for updation purpose).In order to add records in a sequential file we can add only at the end of the file hence while adding records it should be opened in EXTEND mode.
HenceIn Indexed files records are stored based on a key field which are part of the the record also called as Index.
An index file is conceptually made up of two files i.e., an index file on which the file is accessed and a data file.The index file contains all the key fields.In case of Indexed files records can be accessed sequentially, or randomly or dynamically.
In Relative file the record is identified based on a relative record number.The records are accessed i.e., stored and retrieved based on the relative record number.In case of relative files records can be accessed sequentially, or randomly or dynamically.
While creating any file generally we write the records in a sequential manner.
While creating the file the file should be opened in OUTPUT mode.In order to retrieve the records in the file it should be opened in INPUT mode in case of sequential,Index and Relative files.Indexed and Relative files can be accessed that is , retrieved by opening them in I-O mode(that is for updation purpose).In order to add records in a sequential file we can add only at the end of the file hence while adding records it should be opened in EXTEND mode.
ORGANIZATION IS SEQUENTIAL
INDEXED
RELATIVE
ACCESS IS SEQUENTIAL
RANDOM
DYNAMIC
OPEN mode file- name.
OPEN OUTPUT filename - TO CREATE A FILE
INPUT - TO READ A FILE
I-O - TO UPDATE INDEXED FILES
EXTEND - TO ADD RECORDS AT THE END OF A SEQUENTIAL FILE.
SEQUENTIAL FILE CREATION:
EX:
Write a COBOL program to create a sequential file which contains the following fields.
sno,name,course,marks and dob.
IDENTIFICATION DIVISION.
PROGRAM-ID, CREA-SEQ.
ENVIRONMENT DIVISION.
INPUT-OUTPUT SECTION.
FILE-CONTROL.
SELECT S-FILE ASSIGN TO DISK
ORGANIZATION IS LINE SEQUENTIAL.
DATA DIVISION.
FILE SECTION.
FD S-FILE
LABEL RECORDS ARE STANDARD
VALUE OF FILE-ID "STUDENT.DAT".
01 STU-REC.
02 SNO PIC 9(2).
02 SNAME PIX X(15).
02 SCOURSE PIC X(5).
02 SDOB PIC XX/XX/XX.
02 SMARKS PIC 9(3).
WORKING-STORAGE SECTION.
77 S-FLAG PIC X VALUE SPACE.
PROCEDURE DIVISION.
PARA-MAIN.
OPEN OUTPUT S-FILE.
PERFORM ADD-RECORDS UNTIL S-FLAG = "Y".
CLOSE S-FILE.
STOP RUN.
ADD-RECORDS.
DISPLAY (5, 10) "ENTER STUDENT SNO :".
ACCEPT (5, 35) SNO.
DISPLAY (6, 10) "ENTER STUDENT NAME :".
ACCEPT (6, 35) SNAME.
DISPLAY (7, 10) "ENTER STUDENT COURSE :".
ACCEPT (7, 35) SCOURSE.
DISPLAY (8, 10) "ENTER STUDENT DOB :".
ACCEPT (8, 35) DOB.
DISPLAY (9, 10) "ENTER STUDENT MARKS :".
ACCEPT (9, 35) SMARKS.
WRITE STU-REC.
DISPLAY (10, 10) "DO YOU WANT TO ADD MORE RECORDS ?(Y/N)".
ACCEPT (10, 55) S-FLAG.
Ex: Write e program to read the above file and display its contents.
IDENTIFICATION DIVISION.
PROGRAM-ID, CREA-SEQ.
ENVIRONMENT DIVISION.
INPUT-OUTPUT SECTION.
FILE-CONTROL.
SELECT S-FILE ASSIGN TO DISK
ORGANIZATION IS LINE SEQUENTIAL.
DATA DIVISION.
FILE SECTION.
FD S-FILE
LABEL RECORDS ARE STANDARD
VALUE OF FILE-ID "STUDENT.DAT".
01 STU-REC.
02 SNO PIC 9(2).
02 SNAME PIX X(15).
02 SCOURSE PIC X(5).
02 SDOB PIC XX/XX/XX.
02 SMARKS PIC 9(3).
WORKING-STORAGE SECTION.
77 EOF-FLAG PIC X VALUE SPACE.
PROCEDURE DIVISION.
PARA-MAIN.
OPEN INPUT S-FILE.
READ S-FILE AT END MOVE "Y" TO EOF-FLAG.
PERFORM READ-RECORDS UNTIL EOF-FLAG = "Y".
CLOSE S-FILE.
STOP RUN.
READ-RECORDS.
DISPLAY (5, 10) SNO.
DISPLAY (6, 10) SNAME.
DISPLAY (7, 10) SCOURSE.
DISPLAY (8, 10) DOB.
DISPLAY (9, 10) SMARKS.
READ S-FILE AT END MOVE "Y" TO EOF-FLAG.
eX:
Write a program to enter 5 subjects marks of a student in a file.
IDENTIFICATION DIVISION.
PROGRAM-ID. MARKS-FILE.
ENVIRONMENT DIVISION.
INPUT-OUTPUT SECTION.
FILE-CONTROL.
SELECT S-FILE ASSIGN TO DISK
ORGANIZATION IS LINE SEQUENTIAL.
DATA DIVISION.
FILE SECTION.
FD S-FILE
LABEL RECORDS ARE STANDARD
VALUE OF FILE-ID "MARKS.DAT".
01 MARKS-REC.
02 HTNO PIC 9(5).
02 SNAME PIC X(20).
02 COURSE PIC X(5).
02 S-MARKS OCCURS 5 TIMES.
03 SUBJECT-NAME PIC X(10).
03 SUBJECT-MARKS PIC 9(3).
WORKING-STORAGE SECTION.
77 EOF-FLAG PIC X VALUE SPACE.
77 I PIC 9 VALUE 0.
PROCEDURE DIVISION.
PARA-MAIN.
OPEN OUTPUT S-FILE.
PERFORM STORE-MARKS UNTIL EOF-FLAG ="N".
CLOSE S-FILE.
STOP RUN.
STORE-MARKS.
ACCEPT HTNO.
ACCEPT SNAME.
ACCEPT COURSE.
PERFORM ADD-MARKS VARYING I FROM 1 BY 1 UNTIL I > 5.
WRITE MARKS-REC.
DISPLAY "DO YOU WANT TO CONTINUE(Y/N)?".
ACCEPT EOF-FLAG.
ADD-MARKS.
ACCEPT SUBJECT-NAME(I).
ACCEPT SUBJECT-MARKS(I).
READING A SEQUENTIAL FILE:
EX:
Write a program to read the above file and display its contents.
IDENTIFICATION DIVISION.
PROGRAM-ID. MARKS-FILE.
ENVIRONMENT DIVISION.
INPUT-OUTPUT SECTION.
FILE-CONTROL.
SELECT S-FILE ASSIGN TO DISK
ORGANIZATION IS LINE SEQUENTIAL.
DATA DIVISION.
FILE SECTION.
FD S-FILE
LABEL RECORDS ARE STANDARD
VALUE OF FILE-ID "MARKS.DAT".
01 MARKS-REC.
02 HTNO PIC 9(5).
02 SNAME PIC X(20).
02 COURSE PIC X(5).
02 S-MARKS OCCURS 5 TIMES.
03 SUBJECT-NAME PIC X(10).
03 SUBJECT-MARKS PIC 9(3).
WORKING-STORAGE SECTION.
77 EOF-FLAG PIC X VALUE SPACE.
77 I PIC 9 VALUE 0.
PROCEDURE DIVISION.
PARA-MAIN.
OPEN INPUT S-FILE.
READ S-FILE AT END MOVE "Y" TO EOF-FLAG.
PERFORM READ-MARKS UNTIL EOF-FLAG ="Y".
CLOSE S-FILE
STOP RUN.
READ-MARKS.
DISPLAY "HALL TICKET NO :", HTNO.
DISPLAY "STUDENT NAME ::, SNAME.
DISPLAY "STUDENT COURSE :"' COURSE.
PERFORM DISP-MARKS VARYING I FROM 1 BY 1 UNTIL I > 5.
READ S-FILE AT END MOVE "Y" TO EOF-FLAG.
DISP-MARKS.
DISPLAY SUBJECT-NAME( I ) ":" SUBJECT-MARKS( I ).
eX:
Write a program to read the above file and store HTNO, NAME, TOTMARKS and grade in another file.
IDENTIFICATION DIVISION.
PROGRAM-ID. MARKS-FILE.
ENVIRONMENT DIVISION.
INPUT-OUTPUT SECTION.
FILE-CONTROL.
SELECT S-FILE ASSIGN TO DISK
ORGANIZATION IS LINE SEQUENTIAL.
SELECT M-FILE ASSIGN TO DISK
ORGANIZATION IS LINE SEQUENTIAL.
DATA DIVISION.
FILE SECTION.
FD S-FILE
LABEL RECORDS ARE STANDARD
VALUE OF FILE-ID "MARKS.DAT".
01 MARKS-REC.
02 HTNO PIC 9(5).
02 SNAME PIC X(20).
02 COURSE PIC X(5).
02 S-MARKS OCCURS 5 TIMES.
03 SUBJECT-NAME PIC X(10).
03 SUBJECT-MARKS PIC 9(3).
FD M-FILE
LABEL RECORDS ARE STANDARD
VALUE OF FILE-ID "GRADE.DAT".
01 MARKS-REC.
02 MHTNO PIC 9(5).
02 MSNAME PIC X(20).
02 MCOURSE PIC X(5).
02 MTOTAL PIC 9(3).
02 MAVG PIC 9(3)V99.
02 MGRADE PIC X(8).
WORKING-STORAGE SECTION.
77 TOT PIC 9(3) VALUE 0.
77 AVG PIC 9(3)V99 VALUE 0.
77 GRADE PIC X(8) VALUE SPACES.
77 EOF-FLAG PIC X VALUE SPACE.
77 I PIC 9 VALUE 0.
PROCEDURE DIVISION.
PARA-MAIN.
OPEN INPUT S-FILE OUTPUT M-FILE.
READ S-FILE AT END MOVE "Y" TO EOF-FLAG.
PERFORM READ-MARKS UNTIL EOF-FLAG ="Y".
CLOSE S-FILE M-FILE
STOP RUN.
READ-MARKS.
DISPLAY "HALL TICKET NO :", HTNO.
DISPLAY "STUDENT NAME ::, SNAME.
DISPLAY "STUDENT COURSE :"' COURSE.
PERFORM DISP-MARKS VARYING I FROM 1 BY 1 UNTIL I > 5.
PERFORM WRITE-PARA.
READ S-FILE AT END MOVE "Y" TO EOF-FLAG.
DISP-MARKS.
DISPLAY SUBJECT-NAME( I ) ":" SUBJECT-MARKS( I ).
COMPUTE TOT = TOT + SUBJECT-MARKS(I).
WRITE-PARA.
COMPUTE AVG = TOT / 5.
IF AVG > 70 MOVE "DISTINCTION" TO GRADE
ELSE IF AVG > 60 AND AVG <70 MOVE "FIRST" TO GRADE
ELSE IF AVG >50 AND AVG < 60 MOVE "SECOND" TO GRADE
ELSE IF AVG >40 AND AVG < 50 MOVE "PASS" TO GRADE
ELSE MOVE "FAIL" TO GRADE.
MOVE HTNO TO MHTNO.
MOVE SNAME TO MSNAME.
MOVE COURSE TO MCOURSE.
MOVE TOT TO MTOTAL.
MOVE AVG TO MAVG.
MOVE GRADE TO MGRADE.
WRITE MARKS-REC.
ex:
Write a COBOL program to add record at the end of a sequential file which contains the following fields.
sno,name,course,marks and dob.
IDENTIFICATION DIVISION.
PROGRAM-ID, CREA-SEQ.
ENVIRONMENT DIVISION.
INPUT-OUTPUT SECTION.
FILE-CONTROL.
SELECT S-FILE ASSIGN TO DISK
ORGANIZATION IS LINE SEQUENTIAL.
DATA DIVISION.
FILE SECTION.
FD S-FILE
LABEL RECORDS ARE STANDARD
VALUE OF FILE-ID "STUDENT.DAT".
01 STU-REC.
02 SNO PIC 9(2).
02 SNAME PIX X(15).
02 SCOURSE PIC X(5).
02 SDOB PIC XX/XX/XX.
02 SMARKS PIC 9(3).
WORKING-STORAGE SECTION.
77 S-FLAG PIC X VALUE SPACE.
PROCEDURE DIVISION.
PARA-MAIN.
OPEN EXTEND S-FILE.
PERFORM ADD-RECORDS UNTIL S-FLAG = "Y".
CLOSE S-FILE.
STOP RUN.
ADD-RECORDS.
DISPLAY (5, 10) "ENTER STUDENT SNO :".
ACCEPT (5, 35) SNO.
DISPLAY (6, 10) "ENTER STUDENT NAME :".
ACCEPT (6, 35) SNAME.
DISPLAY (7, 10) "ENTER STUDENT COURSE :".
ACCEPT (7, 35) SCOURSE.
DISPLAY (8, 10) "ENTER STUDENT DOB :".
ACCEPT (8, 35) DOB.
DISPLAY (9, 10) "ENTER STUDENT MARKS :".
ACCEPT (9, 35) SMARKS.
WRITE STU-REC.
DISPLAY (10, 10) "DO YOU WANT TO ADD MORE RECORDS ?(Y/N)".
ACCEPT (10, 55) S-FLAG.
Indexed Files:
Indexed files are accessed with a key field. The values in the key field should be unique and not null.The key field is a field within the file.
While executing the Index file programs, first we should run ISAM.exe file and then execute the programs.This is very important, since ISAM will enable us to create a key file with an extension filename.KEY which stores all the key fields on which the data file is accessed.
Ex. Write a program to create an INDEXED sequential file.
IDENTIFICATION DIVISION.
PROGRAM-ID. CREATEFILE.
ENVIRONMENT DIVISION.
CONFIGURATION SECTION.
INPUT-OUTPUT SECTION.
FILE-CONTROL.
SELECT EMP-FILE ASSIGN TO DISK
ORGANIZATION IS INDEXED
ACCESS IS SEQUENTIAL
RECORD KEY IS EMP-NO.
DATA DIVISION.
FILE SECTION.
FD EMP-FILE
LABEL RECORDS ARE STANDARD
VALUE OF FILE-ID "EMP.DAT".
01 EMP-REC.
02 EMP-NO PIC 9(3).
02 EMP-NAME PIC X(20).
02 SALARY PIC 9(5).
PROCEDURE DIVISION.
WORKING-STORAGE SECTION.
77 EOF-FLAG PIC X.
PARA-M.
OPEN OUTPUT EMP-FILE.
PERFORM ADD-RECORDS UNTIL EOF-FLAG = "N".
CLOSE EMP-FILE.
STOP RUN.
ADD-RECORDS.
ACCEPT EMP-NO.
ACCEPT EMP-NAME.
ACCEPT SALARY.
WRITE EMP-REC INVALID KEY DISPLAY "ERROR IN CREATION".
DISPLAY "DO U WANT TO CONTINUE?(Y/N)".
ACCEPT EOF-FLAG.
Ex.
Write a program to read the above file.
IDENTIFICATION DIVISION.
PROGRAM-ID. READFILE.
ENVIRONMENT DIVISION.
CONFIGURATION SECTION.
INPUT-OUTPUT SECTION.
FILE-CONTROL.
SELECT EMP-FILE ASSIGN TO DISK
ORGANIZATION IS INDEXED
ACCESS IS RANDOM
RECORD KEY IS EMP-NO.
DATA DIVISION.
FILE SECTION.
FD EMP-FILE
LABEL RECORDS ARE STANDARD
VALUE OF FILE-ID "EMP.DAT".
01 EMP-REC.
02 EMP-NO PIC 9(3).
02 EMP-NAME PIC X(20).
02 SALARY PIC 9(5).
PROCEDURE DIVISION.
WORKING-STORAGE SECTION.
77 EOF-FLAG PIC X.
77 W-EMP-NO PIC 9(3) VALUE 0.
PARA-M.
OPEN INPUT EMP-FILE.
PERFORM READ-RECORDS UNTIL EOF-FLAG = "N" OR W-EMP-NO=999..
CLOSE EMP-FILE.
STOP RUN.
READ-RECORDS.
DISPLAY "ENTER EMP NO TO READ :".
ACCEPT W-EMP-NO.
MOVE W-EMP-NO TO EMP-NO.
READ EMP-FILE INVALID KEY PERFORM ERROR-PARA.
DISPLAY EMP-NO.
DISPLAY EMP-NAME.
DISPLAY SALARY.
DISPLAY " DO U WANT TO READ MORE (Y/N)?.
ACCEPT EOF-FLAG.
ERROR-PARA.
DISPLAY "ERROR IN READING".
SCREEN SECTION.
Screen section is meant to format the screen.Screen section is a part of data division.
Ex.Write a program to create a sequential file using screen section.
IDENTIFICATION DIVISION.
PROGRAM-ID. SCREEN-CREATE.
ENVIRONMENT DIVISION.
INPUT-OUTPUT SECTION.
FILE SECTION.
SELECT OUT-FILE ASSIGN TO DISK
ORGANIZATION IS LINE SEQUENTIAL.
DATA DIVISION.
FILE SECTION.
FD OUT-FILE
LABEL RECORDS ARE STANDARD
VALUE OF FILE-ID "MYFILE.DAT".
01 OUT-REC.
05 SNAME PIC X(20).
05 AGE PIC 9(3).
SCREEN SECTION.
01 CLEAR-SCREEN.
05 BLANK SCREEN.
01 FORM-FORMAT.
05 LINE 1 COLUMN 1 PIC X(30) FROM ALL "_".
05 LINE 2 COLUMN 10 VALUE "FILL THE FORM" HIGHLIGHT.
05 LINE 3 COLUMN 1 PIC X(30) FROM ALL "_".
05 LINE 5 COLUMN 1 VALUE "NAME :".
05 LINE 5 COLUMN 10 PIC X(20) TO SNAME.
05 LINE 6 COLUMN 1 VALUE "AGE :".
05 LINE 6 COLUMN 10 PIC 9(3) TO AGE.
05 LINE PLUS 2 PIC X(30) FROM ALL "_".
05 LINE PLUS 2 COLUMN 1 "PRESS ESCAPE TO EXIT" BLINK.
PROCEDURE DIVISION.
DISPLAY-FORM.
OPEN OUTPUT OUT-FILE.
DISPLAY CLEAR-SCREEN.
DISPLAY FORM-FORMAT.
FILL-THE-FORM.
ACCEPT FORM-FORMAT
ON ESCAPE GO TO FINISH-ENTRY.
WRITE OUT-REC.
GO TO FILL-THE-FORM.
FINISH-ENTRY.
CLOSE OUT-FILE.
STOP RUN.