Você está na página 1de 249

PROGRAMAO APLICADA (COBOL)

EDIO N 1 - 2007

FLVIO ANTONIO DA MAIA

___________________________________________________________________
Apoio

Gesto e Execuo

Contedo e Tecnologia

Programao Aplicada - Cobol

Apresentao
Este livro didtico contm a disciplina de COBOL. Seu objetivo treinar
pessoas que tenham noo de lgica de programao para que, ao final do curso,
estejam capacitadas a desenvolver programas bsicos nessa poderosa e eficaz
ferramenta de desenvolvimento de sistemas.
Para a execuo dos exerccios, construo e compilao dos programasexemplo contidos nestas pginas, utilizaremos basicamente duas ferramentas: um
editor de textos com marcao de linha e coluna (EDIT do MS-DOS) e o
compilador COBOL. Todos os exemplos de programas e de trechos de programas
sero escritos com fonte Courier New, cujo tamanho fixo de letras facilita o
entendimento da linguagem que trabalha com linhas e colunas.
Atualmente, existem muitas variaes do COBOL, principalmente para o
desenvolvimento em ambiente grfico, como veremos no captulo A EVOLUO
DO COBOL. Sendo assim, esta disciplina no tratar o COBOL em termos
grficos. Por outro lado, para facilitar a compreenso do aluno, o assunto foi
dividido em duas partes. Na primeira, so apresentados os conceitos bsicos do
COBOL, suas caractersticas principais, as estruturas, definies, comandos e
interface com o usurio. Na segunda, sero abordados os processos de criao e
manuteno de dados em arquivos e tambm em banco de dados. Esse ltimo
tpico, hoje, talvez uma das principais necessidades do mercado que busca
profissionais conhecedores do COBOL.
Lembre-se de que a sua passagem por esta disciplina ser tambm
acompanhada pelo Sistema de Ensino Virtual Tupy, seja por correio postal, fax,
telefone, e-mail ou Ambiente Virtual de Aprendizagem. Entre sempre em contato
conosco quando surgir alguma dvida ou dificuldade. Participe dos bate-papos
(chats) marcados e envie suas dvidas pelo Tira-Dvidas.

SOCIESC Sociedade Educacional de Santa Catarina

Programao Aplicada - Cobol

Toda a equipe est disposio para atend-lo. Seu crescimento o nosso


maior objetivo. Acredite no seu sucesso e tenha bons momentos de estudo.
Equipe Tupy Virtual.

SUMRIO

Aula 1 - Histria e Evoluo do Cobol...................................................................7


Aula 2 - Estrutura do Fonte Cobol .......................................................................12
Aula 3 - As Divises do Cobol..............................................................................23
Aula 4 - Tipos de Variveis ...................................................................................32
Aula 5 - Principais Comandos ..............................................................................49
Aula 6 - Compilao e Linkedio........................................................................82
Aula 7 - Interface com Usurio .............................................................................99
Aula 8 - Comunicao entre Programas............................................................108
Aula 9 - Tratamento com Arquivos Nativos ......................................................123
Aula 10 - Criando uma Aplicao.......................................................................164
Aula 11 - Trabalhando com Banco de Dados....................................................201

SOCIESC Sociedade Educacional de Santa Catarina

Programao Aplicada - Cobol

Carta do Professor

Feliz aquele que transfere o que sabe


e aprende o que ensina. (Cora Coralina)

Caro Aluno (a),


Nesta disciplina vamos conhecer a Linguagem Cobol que est entre as mais
utilizadas mundialmente pelas empresas, entre elas, grandes instituies bancrias
e rgos governamentais. Isso deve-se ao fato da linguagem ter evoludo no
decorrer dos anos, procurando incorporar as novas tecnologias sem perder a
compatibilidade com as existentes. Atualmente, a linguagem incorpora o paradigma
da Orientao a Objeto, permite a criao de sistemas Grficos e tambm WEB, e
tudo isso pode ser incorporado medida que as necessidades vo surgindo, sem ter
que reescrever todo o sistema atual.
Estas aulas foram preparadas visando a uma introduo da ferramenta. Ao
trmino da disciplina, voc ter adquirido conhecimentos suficientes que contribuiro
para o seu crescimento profissional.
Lembre-se, a melhor tecnologia no a mais atual, ou aquela que voc
domina, mas sim a que melhor se ajusta s necessidades do seu usurio.
Seja Bem-vindo(a)!
Professor Flvio Antonio da Maia

SOCIESC Sociedade Educacional de Santa Catarina

Programao Aplicada - Cobol

Cronograma de Estudos
Acompanhe no cronograma abaixo os contedos das aulas, e atualize as
possveis datas de realizao de aprendizagem e avaliaes.
Semana Carga horria

Aula

Data/ Avaliao

Histria e Evoluo do COBOL

_/_ a _/_

Estrutura fonte do COBOL

_/_ a _/_

As divises do COBOL

_/_ a _/_

Tipos de variveis

_/_ a _/_

14

Principais comandos

_/_ a _/_

10

Compilao e Linkedio

_/_ a _/_

14

Interface com usurio

_/_ a _/_

12

Comunicao entre Programas

_/_ a _/_

16

Tratamento com arquivos nativos

_/_ a _/_

22

Criando uma Aplicao

_/_ a _/_

Trabalhando com Banco de Dados

_/_ a _/_

SOCIESC Sociedade Educacional de Santa Catarina

Programao Aplicada - Cobol

Plano de Estudos
Ementa
Abordagem sobre histria do COBOL e sua evoluo; estrutura do fonte COBOL;
palavras reservadas; compilao; divises do COBOL; tipos de variveis; comandos
bsicos; interface com usurio (tela); arquivos nativos; desenvolvimento de uma
aplicao; e trabalhar com banco de dados.
Objetivos da Disciplina

Geral

Ao final do mdulo, voc dever demonstrar competncia em:


Compreender a importncia da linguagem de programao COBOL;
Desenvolver aplicaes nesta ferramenta.

Especficos

Historiar a Evoluo do COBOL


Apresentar estrutura do Fonte COBOL
Apresentar Modos de Compilao
Descrever as Divises do COBOL
Descrever os Tipos Variveis
Compreender os Comandos Bsicos
Compreender a Interface com Usurio
Trabalhar com Arquivos Nativos
Trabalhar com Banco de Dados

Carga Horria: 110 horas/aula.

SOCIESC Sociedade Educacional de Santa Catarina

Programao Aplicada - Cobol

Aula 1

HISTRIA E EVOLUO DO COBOL

Objetivos da Aula
Ao final desta aula, voc dever ser capaz de:
 Apresentar dados sobre o surgimento da linguagem de programao COBOL;
 Descrever a evoluo do COBOL.

Contedos da Aula
Acompanhe os assuntos desta aula, se preferir, ao
terminar, assinale o contedo j estudado.


Histria do COBOL

Evoluo do COBOL

Exerccios propostos

Seja bem-vindo(a) a nossa primeira aula sobre a Linguagem de Programao COBOL. Primeiramente abordaremos a
Histria e a Evoluo do COBOL, para que seja entendida a
importncia da utilizao dessa ferramenta.
Bons Estudos!

SOCIESC Sociedade Educacional de Santa Catarina

Programao Aplicada - Cobol

1 HISTRIA DO COBOL
A histria do COBOL inicia em 1959, dentro do Pentgono, quando Grace
Hopper e uma equipe de especialistas vindos da indstria de computadores,
universidades e do Departamento de Defesa dos Estados Unidos iniciaram o
trabalho das primeiras especificaes de uma nova linguagem dirigida diretamente
ao foco dos negcios, independente da plataforma especfica e capaz de ser
flexvel ao ponto de suportar desenvolvimento e mudanas contnuas. As
especificaes iniciais do COBOL surgiram em abril de 1960.
O termo COBOL significa Common Business Oriented Language
(linguagem de programao comum orientada a negcios). Apesar de considerada
ultrapassada por muitos, normalmente aqueles que no conhecem seu potencial
ou no acompanharam sua evoluo, a linguagem de programao que possui o
maior nmero de aplicaes comerciais ativas, sendo executada ao redor do
planeta, pois seus usurios so principalmente Governos, Instituies Bancrias,
Seguradoras, Companhias areas, grandes indstrias, entre outros.
Estima-se que, para converter toda base instalada de programas COBOL
para outra linguagem de alto nvel, seja necessrio cerca de 10% do PIB
Americano.
Qual o porqu de tanto sucesso depois de vrias dcadas? Para quem
conhece COBOL, a resposta fcil. Ele estruturado, robusto, estvel e de
simples aprendizado.
2 EVOLUO DO COBOL
Normalmente, quando o assunto COBOL, os menos esclarecidos j
pensam em mainframes, museus, dinossauros, espcies em extino e coisas do
gnero. Esse preconceito formado em torno do COBOL, pelos profissionais de TI,
de certa forma tem uma razo para existir.
Durante muitos anos, principalmente no final da dcada de 80, a linguagem
COBOL perdeu terreno para outras linguagens, que tiveram maior evoluo. O
Clipper um exemplo dessas linguagens que j vinham com diversas bibliotecas
de apoio ao desenvolvimento, o que facilitava a vida dos programadores iniciantes,

SOCIESC Sociedade Educacional de Santa Catarina

Programao Aplicada - Cobol

que no perdiam tempo desenvolvendo suas prprias rotinas: (menus, interface


com o usurio e outras).
O problema que o COBOL da MicroFocus foi distribudo por muito tempo
pela MicroSoft, que no tinha interesse em divulgar plenamente essa linguagem,
j que a prpria MicroSoft produzia outras linguagens de computador, e os demais
produtores da Linguagem COBOL no tinham tanta penetrao no mercado.
Os dialetos do COBOL ficaram por muito tempo restritos, utilizando padres
empregados em sistemas de grande porte (mainframes). Por volta de 1990 isso
comeou a mudar, pois a MicroFocus passou a distribuir ela mesma o seu
COBOL, no que foi seguida por outras grandes, e hoje temos vrios fabricantes de
COBOL.
Atualmente, os diversos compiladores COBOL existentes no mercado so
ferramentas poderosas, que no perdem para outras linguagens como C++, Visual
Basic e Delphi. Os mais conhecidos so os seguintes:
NETEXPRESS (MicroFocus Merant)
POWERCOBOL (Fujitsu)
ACUCOBOL GT (AcuCorp)
OBJECT COBOL
RM COBOL
TINYCOBOL (projeto de compilador gratuito para Linux/Windows)
Alguns dos principais recursos possveis com os atuais compiladores COBOL:
Desenvolvimento Integrado de Aplicaes (IDE), o que facilita o ciclo
de desenvolvimento de um sistema para ambientes distribudos.
Interface Grfica para desenvolvimento de aplicaes WINDOWS.
Orientao a Objetos e Eventos.
Ferramentas que permitem criao de aplicaes WEB e arquivos no
formato XML.
Suporte a Automao OLE, que permite interagir com outras
aplicaes Windows (Planilhas, Editores, Programas de e-mail, etc.).
Suporte a Banco de Dados via ODBC.
Integrao com outras linguagens atravs de DLL.

SOCIESC Sociedade Educacional de Santa Catarina

Programao Aplicada - Cobol

10

Sendo assim, o quadro do final dos anos 80 reverteu-se e diversas so as


linguagens que pararam no tempo, no apresentando a mesma evoluo do
COBOL. Isso quer dizer que, atualmente, qualquer aplicao que precise ser
desenvolvida com tecnologia de ponta, com acesso a banco de dados, leitura de
cdigos de barras, interface WEB, comunicao com perifricos (catracas,
balanas,

impressoras

fiscais,

etc.),

entre

outros,

tambm

poderia

ser

desenvolvida com alguma ferramenta COBOL.

Sntese

Nessa aula, vimos a histria do COBOL, ferramenta que iniciou seu ciclo de
vida a partir de 1960, continua evoluindo e atualmente existem vrios fabricantes
que distribuem produtos COBOL com tecnologia de ponta.

Exerccios propostos

1.

Baseando-se no fato do COBOL ser uma linguagem de programao um

pouco antiga, explique o motivo por que ainda muito utilizada:


___________________________________________________________________
___________________________________________________________________
___________________________________________________________________
___
2.

Qual foi o principal fator que fez com que a linguagem de programao

COBOL deixasse de ser algo restrito, deixando de ser empregado apenas em


sistemas de grande porte?
___________________________________________________________________
___________________________________________________________________

SOCIESC Sociedade Educacional de Santa Catarina

Programao Aplicada - Cobol

11

___________________________________________________________________
___
3.

Cite quais so os principais compiladores atuais do COBOL:

___________________________________________________________________
___________________________________________________________________
___________________________________________________________________
___
4.

Cite os principais recursos oferecidos pelos compiladores COBOL:

___________________________________________________________________
___________________________________________________________________
___________________________________________________________________
___

SOCIESC Sociedade Educacional de Santa Catarina

Programao Aplicada - Cobol

Aula 2

Estrutura do Fonte COBOL

Objetivos da Aula
Ao final desta aula, voc dever ser capaz de:
 Compreender a estrutura geral do COBOL;
 Definir os usos de palavras no COBOL;
 Reconhecer as Palavras Reservadas em COBOL;
 Determinar as diretrizes a serem seguidas na Linguagem de
Programao COBOL.
Contedos da Aula
Acompanhe os assuntos desta aula, se preferir,
ao terminar, assinale o contedo j estudado.
 Conjunto de Caracteres
 Palavras em COBOL
 Codificando um Fonte COBOL
 Exerccios propostos

Seja Bem-vindo(a) a nossa segunda aula. Agora


voc comear a ter acesso s nomenclaturas e estruturas do
COBOL.
Bons Estudos!

SOCIESC Sociedade Educacional de Santa Catarina

12

Programao Aplicada - Cobol

13

1 CONJUNTO DE CARACTERES
Para escrevemos um programa na linguagem COBOL, existem algumas regras
rgidas a serem seguidas, tal qual uma redao que possui incio, meio e fim.
Cada linguagem usa um conjunto de instrues ou comandos que tem um
significado. Por exemplo, todos os livros em portugus, usam combinao de 26
letras do alfabeto, 10 dgitos numricos e sinais de pontuao.
De forma semelhante, os programas em COBOL so escritos usando um
conjunto de caracteres formado pelas 26 letras do alfabeto (Maisculas e Minsculas),
os dez dgitos numricos (de 0 a 9) e os smbolos mostrados na Tabela 1:
Tabela 1 - Smbolos utilizados pelo COBOL
ESPAO
+

ESPAO
Mais

Menos

Multiplicador

Divisor

Igual

Dlar

Ponto

Vrgula

Ponto e Vrgula

Aspas

Apstrofe

Abre Parnteses

Fecha Parnteses

>

Maior que

<

Menor que

Dois Pontos

Note que todo esse conjunto representa os caracteres aceitos e entendidos


pela linguagem COBOL.
2 PALAVRAS EM COBOL
As palavras em COBOL so cadeias de caracteres, no mximo 30, que podem
formar:

SOCIESC Sociedade Educacional de Santa Catarina

Programao Aplicada - Cobol

Palavras ou nomes definidos pelos usurios;

Palavras reservadas em COBOL.

14

2.1 Palavras ou Nomes Definidos Pelos Usurios


So palavras que devem satisfazer o formato de uma clusula ou declarao.
Os caracteres desse tipo podem ser as letras de A a Z ( Maisculas ou Minsculas,
para o COBOL indiferente), os nmeros de 0 a 9 e o sinal de menos

( ) , exceto

como primeiro e ltimo caracter da palavra.

REGISTRO-BANCOS
BANCO1-DAT
BANCO1-TXT
ROTINA-DE-GRAVACAO
rotina-de-gravacao

Essas so palavras vlidas em COBOL. Note que ROTINA-DE-GRAVACAO e


rotina-de-gravacao representam o mesmo nome para o COBOL.
Outros exemplos:
REGISTRO-GRAVACAO-FUNCIONARIO-MATRIZ
-LINHA-GRAVACAO
LINHA-GRAVACAO-

Esses trs exemplos no so suportados pelo COBOL, pois o primeiro tem


mais de 30 caracteres de comprimento, o segundo comea com sinal de menos - e
o terceiro termina com este sinal. A utilizao destes tipos de nomes (fora da
sintaxe) implicar na emisso de mensagem de erro pelo compilador.
2.2 Palavras Reservadas em COBOL
So palavras que no podem, em hiptese alguma, ser usadas como palavras
definidas pelo usurio, nem como palavras para o sistema. Somente devem ser
usadas conforme seu significado e segundo sua sintaxe ou formato especfico.
A lista de palavras reservadas em COBOL extensa, chega perto da casa de
1000 palavras. Em outros termos, como se fosse todo o dicionrio da linguagem.
SOCIESC Sociedade Educacional de Santa Catarina

Programao Aplicada - Cobol

15

Dessa forma, essa listagem acaba se tornando pequena e se tornar menor


ainda medida que voc for adquirindo prtica e experincia na programao
COBOL, percebendo que algumas divises e definies so praticamente carimbo
de um programa para outro, ou seja, mudam muito pouco.
Excluindo os operadores aritmticos e relacionais, costumamos reduzir o que
chamamos de set de instrues (conjunto de instrues) do COBOL a
aproximadamente 50 palavras reservadas. Na realidade, com elas que construmos
a maioria de nossos programas, como veremos no decorrer do curso.
Essas palavras reservadas podem ser subdivididas em seis tipos:

Palavras-chave so as que representam aes que devem ser tomadas.


So os verbos e as palavras com um significado funcional especfico. Tanto
podem ser escritas em maisculas quanto em minsculas.

Palavras Opcionais palavras-chave cuja omisso no altera o significado


ou a lgica da sentena onde aparecem.

Conectores - palavras ou smbolos usados para associar nomes com seus


qualificadores. So eles:

o - OF (de), IN (em), para especificar qualificadores;


o -, (vrgula) e; (ponto-e-vrgula) para a juno de dois ou mais
operandos consecutivos;
o - AND (e) e OR (ou) conectores lgicos para construo de
condies.

Registros especiais reas de armazenamento especiais criadas pelo


COBOL, para guardar informaes produzidas em conjunto com o uso
especfico em recursos de linguagem. Os principais so:
o -CURRENT-DATE, com 8 caracteres de comprimento, usado pela
linguagem para armazenar a data corrente, no formato AA/MM/DD (ano,
ms e dia a partir de 1900);
o - LENGHT OF , com 9 nmeros de comprimento, contm o nmero de
bytes usados por um identificador;

SOCIESC Sociedade Educacional de Santa Catarina

Programao Aplicada - Cobol

16

o - RETUR-CODE - com 4 bytes de comprimento, pode ser usado por um


programa para armazenar valores de retorno entre passagem de um
programa para outro;
o -TIME-OF-DAY - com 6 bytes de comprimento, usado pela linguagem
para armazenar a hora corrente do dia, em formato de 24 horas,
HHMMSS, onde HH representa as horas, MM representa os minutos e
SS representa os segundos.

Constantes Figurativas usadas para nomear e referenciar valores


constantes especficos. Os principais so:
o

ZERO, ZEROS ou ZEROES - que representam o valor 0;

SPACE ou SPACES - representam os espaos em branco;

HIGH-VALUE ou HIGH-VALUES significa o maior valor em uma


seqncia pr-definida do programa;

LOW-VALUE ou LOW-VALUES significa o menor valor em uma


seqncia pr-definida do programa;

ALL representa um ou mais caracteres de cadeia representando


a varivel.

Caracteres especiais operadores aritmticos e relacionais, mostrados na


tabela 2:

SOCIESC Sociedade Educacional de Santa Catarina

Programao Aplicada - Cobol

17

Tabela 2 - Listagem das principais palavras reservadas em COBOL


ACCEPT
DISPLAY
INPUT
SECTION
ADD

DIVIDE

INPUT-OUTPUT

SELECT

AFTER

DIVISION

INSERT

SEQUENTIAL

ALL

DUPLICATES

INSPECT

SIZE

ALPHANUMERIC

DYNAMIC

INTO

SORT

ALTER

ELSE

LAST

SPACE

ALTERNATE

END

LESS

SPACES

AND

ENVIRONMENT

LINE

START

ASCENDING

EQUAL

LINKAGE

STOP

ASSIGN

ESCAPE

MOVE

STRING

AUTHOR

EVALUATE

MULTIPLY

THRU

BY

FD

NAME

TRUE

CALL

FILE

NEXT

UNLOCK

CANCEL

FILE-CONTROL

NUMERIC

UNSTRING

COMP

FILE-ID

OCCURS

UNTIL

COMP-3

FILLER

OR

USING

COMPUTE

FROM

PERFORM

VALUES

CONFIGURATION

GIVING

PICTURE

WHEN

COPY

I-O

PROCEDURE

WITH

CURRENT-DATE

IDENTIFICATION

PROGRAM-ID

WRITE

DELETE

IF

READ

ZERO

DELIMITED

INDEXED

REDEFINES

ZEROS

DISK

INITIALIZE

RELATIVE

ZEROES

SOCIESC Sociedade Educacional de Santa Catarina

Programao Aplicada - Cobol

18

3 CODIFICANDO UM FONTE COBOL


Todo programa dever ser construdo seguindo algumas diretrizes de
posicionamento em cada linha programada:

Colunas de 1 at 6: rea reservada - Todo fonte COBOL deve preservar


as colunas de 1 at 6, reservadas pela linguagem. Nessa rea s
permitida a incluso de comentrios. Alm disso, se quisermos deixar toda
a linha em comentrio, podemos inserir um asterisco na coluna 1.

Coluna 7: rea de Indicao -

Essa

coluna

chamada

rea

de

indicao, porque um hfen (-) nessa posio indica que haver


continuao da linha anterior, quando a sentena escrita muito extensa.
De forma semelhante coluna 1, um asterisco na coluna tambm faz com
que o compilador interprete a linha inteira como comentrio.

Colunas de 8 at 72: reas A e B Originalmente, havia uma separao


do que poderia ser escrito nessas duas reas. Com o advento do padro
ANS85, isto no existe mais. Muitas empresas que utilizam o COBOL,
atualmente,

ainda

respeitam

os

padres,

por

garantirem

melhor

estruturao e visualizao dos programas. Adotaremos esse padro


durante o curso. Na rea A, so definidas, basicamente, todas as
declaraes de divises, sees e pargrafos do COBOL, sempre a partir
da coluna 8. Na rea B, so definidos todos os comandos e lgica de
programao, sempre a partir da coluna 12, limitado coluna 72. Ou seja,
toda linha de programao COBOL dever estar contida entre a coluna 12
e 72.
Vejamos, na figura 1, um exemplo prtico de programa COBOL, respeitando as
definies de colunas.

SOCIESC Sociedade Educacional de Santa Catarina

Programao Aplicada - Cobol

19

Figura 1 Programa Exemplo PROG1. CBL


Observe que o programa foi digitado no EDIT do MS-DOS, presente em todas
as verses do Windows.
Para facilitar a visualizao das colunas, foi inserida na segunda linha um
marcador, que vai da coluna 01 at a coluna 72.
Vamos entender a estrutura do programa, linha por linha:

Linhas 1, 2 e 3 - sero consideradas comentrio, pois tm o asterisco na


coluna 01. Nas demais linhas, podemos notar que, entre as colunas 01 e
06, no h nenhum caracter informado, pois esta rea reservada pelo
COBOL.

Linhas 4, 5 e 6 - esto iniciando na coluna 08, por se tratarem de


identificaes do COBOL.

Linhas 7, 8 e 9 - tambm sero consideradas comentrio, pois o asterisco


est na coluna 07, como a linguagem tambm permite.

Linhas 10, 11, 13 e 14 - tambm iniciam na coluna 08, por se tratarem de


divises, sees e pargrafos.

SOCIESC Sociedade Educacional de Santa Catarina

Programao Aplicada - Cobol

20

Linhas 15,16 e 17 - iniciam na coluna 12, por se tratarem de comandos da


linguagem.

Agora modificamos um pouco o programa, na linha 16, para demonstrar (figura


2), a coluna 07 como rea de indicao.

Figura 2 Programa Exemplo com rea de Indicao (Coluna 07)


Como podemos verificar, a frase agora mais extensa que no primeiro
programa. Sendo assim, na primeira linha da saudao Ola Alunos... escrevemos o
que foi possvel at a coluna 72 e na linha seguinte, indicamos com hfen na coluna
07 que haver continuao da linha anterior, concluindo o comando.

Sntese
Nessa aula vimos como funcionam a definio e o uso de palavras em COBOL.
Vimos tambm as principais palavras reservadas da linguagem e as diretrizes de
posicionamento dos caracteres a serem seguidas, na construo de um fonte
COBOL.

SOCIESC Sociedade Educacional de Santa Catarina

Programao Aplicada - Cobol

21

Exerccios Propostos
1.Cite no mnimo cinco smbolos suportados pelo COBOL, alm das letras e
nmeros:
___________________________________________________________________
___________________________________________________________________
___________________________________________________________________
___
2.Qual o

tamanho

mximo das PALAVRAS

EM

COBOL? E

qual a

particularidade com o sinal de menos ( ) na definio das palavras?


___________________________________________________________________
___________________________________________________________________
___________________________________________________________________
___
3.Assinale Verdadeiro (V) ou Falso (F) nas afirmaes abaixo:
( ) IDENTIFICATION DIVISION ou identification division representa a mesma coisa
para o COBOL.
(

) total-horas- ou TOTAL-HORAS- so palavras vlidas para o COBOL.

) Para representar o numero 0, podemos digitar ZERO ou ZEROS.

) Toda linha de programao COBOL dever estar entre a coluna 08 e 72.

4.Explique sinteticamente como funciona a codificao de um Fonte COBOL:


rea reservada:
_______________________________________________________________
_______________________________________________________________
__
rea de Indicao
_______________________________________________________________
_______________________________________________________________
__
SOCIESC Sociedade Educacional de Santa Catarina

Programao Aplicada - Cobol

22

reas A e B
_______________________________________________________________
_______________________________________________________________
__

SOCIESC Sociedade Educacional de Santa Catarina

Programao Aplicada - Cobol

Aula 3

DIVISES DO COBOL

Objetivos da Aula
Ao final da aula, voc dever ser capaz de:
 Identificar cada diviso do COBOL;
 Distinguir os procedimentos para cada diviso no COBOL;
 Definir as principais clusulas existentes no COBOL.
Contedos da Aula
Acompanhe os assuntos desta aula, se preferir, ao
terminar, assinale o contedo j estudado.


Identification Division

Environment Division

Data Division

Procedure Division

Exerccios propostos

Seja Bem-vindo (a) a nossa terceira aula. Nesta


aula vamos aprender sobre as quatro divises do COBOL.
Veremos tambm que algumas dessas divises nem sempre so
obrigatrias num programa fonte COBOL mas podem tornar-se,
medida que os programas precisem especificar ou declarar
algum procedimento nelas contidos.
Bons Estudos!

SOCIESC Sociedade Educacional de Santa Catarina

23

Programao Aplicada - Cobol

24

1 IDENTIFICATION DIVISION
a diviso inicial da linguagem, que identifica o programa em todas as suas
etapas de desenvolvimento. Nela podem ser includos a data do programa, a data da
compilao, o nome do autor, comentrios, etc.
Seu formato o seguinte:

IDENTIFICATION DIVISION.
PROGRAM-ID.

(nome do programa fonte)

AUTHOR.

(nome do desenvolvedor do programa)

DATE-WRITTEN.

(comentrios)

DATE-COMPILED

(comentrios)

1.1 Significado dos Pargrafos:


PROGRAM-ID (Identificao do Programa) Aqui informamos o nome do
programa atravs do qual ele ser identificado.
AUTHOR Clusula Opcional para identificao do desenvolvedor do
programa.
DATE-WRITTEN Clusula Opcional onde o desenvolvedor vai inserir a data
de concluso do seu programa.
DATE-COMPILED Clusula Opcional onde o compilador insere a data de
compilao do programa.
Veja os exemplos abaixo, imaginando que a coluna onde comea a palavra
IDENTIFICATION DIVISION a coluna 8. Note que nas linhas onde h comentrios,
existe um asterisco na coluna anterior (07), como vimos na ltima aula.

IDENTIFICATION DIVISION.
PROGRAM-ID.

MENU.

SOCIESC Sociedade Educacional de Santa Catarina

Programao Aplicada - Cobol

AUTHOR.

SOCIESC.

DATE-WRITTEN.

01/04/07.

25

DATE-COMPILED.
*
*

Menu Principal do Sistema

*
IDENTIFICATION DIVISION.
PROGRAM-ID.

CADPESSOA.

AUTHOR.

SOCIESC.

DATE-WRITTEN.

02/04/07.

DATE-COMPILED.
*
*

Cadastro de Clientes

2 ENVIRONMENT DIVISION
a diviso de ambiente, que descreve o ambiente operacional e os perifricos
que sero utilizados no programa. Ela pode ser subdividida em duas sees:
CONFIGURATION SECTION - Responsvel pela configurao do ambiente.
subdividida em trs clusulas opcionais:
o SOURCE-COMPUTER Identifica o computador no qual foi confeccionado
o programa.
o OBJECT-COMPUTER Identifica o computador do ambiente de execuo.
o SPECIAL-NAMES Especifica vrios parmetros, como sinal monetrio,
tipo de ponto decimal, caracteres simblicos e possibilita adaptar o
programa para se comunicar com programas de outras linguagens.

declarao mais conhecida utilizada nesta clusula DECIMAL POINT IS


COMMA (ponto decimal vrgula), em virtude de que no Brasil utilizamos a
vrgula e no o ponto como separador decimal.
INPUT-OUTPUT SECTION seo que tem por principal funo a
configurao do ambiente de leitura e gravao, subdividida em dois
pargrafos:
o FILE CONTROL Define as especificaes dos arquivos que o programa ir
acessar.

SOCIESC Sociedade Educacional de Santa Catarina

Programao Aplicada - Cobol

26

o I-O CONTROL - Define tcnicas de controle especial a serem usadas pelo


programa (valendo atualmente apenas para ambientes Mainframe).
Vamos agora exemplificar o formato mais tradicional de declarao da
ENVIRONMENT DIVISION. Como no exemplo anterior, relativo IDENTIFICATION
DIVISION, continuamos imaginando que a primeira coluna do exemplo a 08.

ENVIRONMENT DIVISION.
CONFIGURATION SECTION.
SPECIAL-NAMES. DECIMAL POINT IS COMMA.
INPUT-OUTPUT SECTION.
FILE-CONTROL.
*
* NESTE ESPAO SO INSERIDAS AS ESPECIFICAES DOS
* ARQUIVOS UTILIZADOS PELO PROGRAMA
*

Nesse exemplo, no declaramos as clusulas SOURCE-COMPUTER e


OBJECT-COMPUTER por no serem obrigatrias.

Declaramos a clusula

SPECIAL-NAMES, informando ao programa que a vrgula dever ser considerada


separador decimal. Por fim, declaramos a seo INPUT-OUTPUT SECTION porque
o programa ir trabalhar com arquivos, especificados aps a diretiva FILECONTROL. O uso de arquivos ser visto na segunda parte de nosso curso.
3 DATA DIVISION
Essa diviso responsvel pela definio de todos os dados a serem
processados ou manipulados pelo programa, durante seu processamento. Suas
principais sees so:
File Section Seo que define as estruturas dos arquivos de dados. Tal
definio envolve a descrio dos arquivos e seus respectivos registros.
Working-Storage Section Seo que descreve e armazena, numa rea de
memria, todos os dados, informaes, variveis e constantes, com valores
pr-definidos ou no, a serem manipulados pelo programa.

SOCIESC Sociedade Educacional de Santa Catarina

Programao Aplicada - Cobol

27

Linkage Section Seo que faz a comunicao entre o programa chamador


e o programa chamado, permitindo a passagem de parmetros entre os
programas. Veremos mais adiante um captulo destinado exclusivamente a
essa seo.
Screen Section Seo que define layout e atributos de tela, permitindo
controlar a posio exata dos campos de registros e do cursor para atualizao
ou entrada de dados.

Caro Aluno, ateno especial para a WORKING-STORASE SECTION.


a seo de declaraes do COBOL que mais tende a variar de programa
para programa, pois a finalidade e a lgica de cada programa que vo
determinar a quantidade de variveis e constantes que vai possuir.

3.1 Estrutura da Data Division


Veja como funciona a estrutura da Data Division:

DATA DIVISION.
FILE SECTION.

[Detalhamento dos arquivos a serem utilizados]


WORKING-STORAGE SECTION.

[Declarao das Variveis e Constantes que o programa vai utilizar]


LINKAGE SECTION.

[Detalhamento da rea de comunicao do programa com outros programas]


SCREEN SECTION.

[Construo da Tela]
As sees da DATA DIVISION tornam-se obrigatrias apenas se o programa
utilizar seus recursos. Por exemplo, caso o programa em questo no manipule
arquivos, no necessita declarar a seo FILE SECTION, que se torna obrigatria.
Essa regra prevalece para as demais sees.

SOCIESC Sociedade Educacional de Santa Catarina

Programao Aplicada - Cobol

28

4 PROCEDURE DIVISION
A ltima diviso do COBOL responsvel pela especificao das aes
necessrias para o processamento dos dados em geral: controle de execuo,
entrada e sada, movimento dos dados, etc. Em resumo, nesta diviso que a lgica
do programa propriamente dita desenvolvida.
Os procedimentos descritos na PROCEDURE DIVISION so escritos em
STATEMENTS e esto, geralmente, agrupados em pargrafos ou sees, criados
pelo programador.
4.1 Estrutura da Procedure Division

PROCEDURE DIVISION.

[Nome de Seo]
[Nome de Pargrafo]
[Sentenas]...]...]...
Como mostra o exemplo, o STATEMENT a aula bsica da Diviso de
Procedimentos. Existem dois tipos de pargrafos de STATEMENTS: condicionais
e imperativos. Uma sentena composta por um ou mais statements, terminando
sempre por um ponto seguido de espao. As sentenas podem ser agrupadas para
formar um pargrafo. Um ou mais pargrafos formam uma seo, que iniciada por
um nome de seo seguida da palavra section e por um ponto.
Recapitulando nossa aula 02, o nome da seo deve iniciar na rea A (coluna
08). Uma seo termina imediatamente antes do prximo nome de seo ou pelo
trmino do programa.
Vejamos o exemplo abaixo da PROCEDURE DIVISION, preocupando-nos,
nesse momento, no com os comandos e sim com sua estrutura:

PROCEDURE DIVISION.
INICIO-SECTION.
ABRE-ARQUIVO.
OPEN INPUT ARQALUNOS.

SOCIESC Sociedade Educacional de Santa Catarina

Programao Aplicada - Cobol

29

OPEN OUTPUT LISTAGEM.


LEITURA.
READ ARQALUNOS AT END
GO TO FINAL.
ADD 1 TO CONTA-LIDOS.
MOVE NOME-ALUNO

TO IMP-NOME.

MOVE MEDIA-ALUNO TO IMP-MEDIA.


WRITE LINHA FROM IMPRESSAO.
GO TO LEITURA.
FINAL.
DISPLAY REGISTROS LIDOS CONTA-LIDOS AT 1010.
CLOSE ARQALUNOS.
CLOSE LISTAGEM.
STOP RUN.

Caro Aluno. Essa Procedure Division basicamente abre um arquivo para


leitura e outro para impresso de um relatrio, contendo o Nome do Aluno e
sua Mdia.
Note que a primeira linha, aps a declarao da PROCEDURE DIVISION,
uma seo (INICIO-SECTION). Essa prtica no obrigatria, poderamos ter
iniciado com um pargrafo, como nos exemplos da aula 02. Vamos relembrar:
Estrutura da Procedure Division:
PROCEDURE DIVISION.
INICIO.
DISPLAY ERASE AT 0101.
DISPLAY "Ola Alunos,eu sou o COBOL" AT 1220.
STOP RUN.

Voltando ao exemplo atual, logo em seguida declarao da seo, inserido


o primeiro pargrafo (ABRE-ARQUIVO), pois justamente o procedimento que o
programa vai executar nas duas prximas linhas. Logo depois temos o pargrafo
LEITURA, no qual so executadas as instrues de leitura do arquivo de alunos. Por
ltimo, temos o pargrafo FINAL, com os procedimentos de encerramento do
programa.
Podemos notar que, na construo de um programa, o nome das sees, dos
pargrafos e das variveis deve seguir um padro de modo a facilitar o

SOCIESC Sociedade Educacional de Santa Catarina

Programao Aplicada - Cobol

30

entendimento do programador, principalmente na hora de efetuar uma alterao,


caso o cdigo fonte seja muito extenso.

Sntese
Nessa aula aprendemos sobre as quatro divises do COBOL. Suas definies
de estrutura, o conceito de seo, pargrafos e sentenas. Evidenciamos que nem
todas as divises so obrigatrias, mas podem tornar-se medida que seu uso seja
requisitado no programa.

Exerccios Propostos

1.

Cite, em poucas palavras, a funo da DATA DIVISION e da PROCEDURE

DIVISION:
___________________________________________________________________
___________________________________________________________________
___________________________________________________________________
___
2.

Especifique o significado da clusula SPECIAL-NAMES e de sua principal

diretiva:
___________________________________________________________________
___________________________________________________________________
___________________________________________________________________
___
3.

No programa Exemplo dessa aula, cite o nome dos 3 pargrafos

existentes:

SOCIESC Sociedade Educacional de Santa Catarina

Programao Aplicada - Cobol

31

___________________________________________________________________
___________________________________________________________________
___________________________________________________________________
__
4.

obrigatrio iniciar a PROCEDURE DIVISION com uma seo? Explique:

___________________________________________________________________
___________________________________________________________________
___________________________________________________________________
___

SOCIESC Sociedade Educacional de Santa Catarina

Programao Aplicada - Cobol

Aula 4

TIPOS DE VARIVEIS
Objetivos da Aula
Ao final da aula, voc dever ser capaz de:
 Identificar os principais tipos de variveis do COBOL;
 Diferenciar os principais tipos de variveis do COBOL;
 Definir o tipo e o tamanho de varivel aplicvel em cada
programa.
Contedos da Aula
Acompanhe os assuntos desta aula, se preferir, ao terminar,
assinale o contedo j estudado.


Conceito de Nveis

Tipo de Dados

Variveis Editadas

Clusula Redefines

Indexao de Variveis (Ocorrncias)

Exerccios propostos

Seja Bem-vindo(a) a nossa quarta Aula.


Vamos estudar sobre os principais Tipos de Variveis
suportados pelo COBOL.
Bons Estudos!

SOCIESC Sociedade Educacional de Santa Catarina

32

Programao Aplicada - Cobol

33

1 CONCEITO DE NVEIS
Como vimos na Aula anterior, todos os dados, registros e valores processados
por um programa devem estar definidos na DATA DIVISION do programa,
normalmente na seo de armazenamento de trabalho (WORKING-STORAGE
SECTION) ou ento, caso sejam dados de arquivos gerenciados pela prpria
linguagem, na FILE SECTION.
Todas as definies de variveis, sejam as temporrias ou as de arquivos,
devem seguir um formato padro, iniciando com um nmero de nvel que, por sua
vez,

indicar a hierarquia da estrutura das informaes, dividida em itens

elementares e itens de grupo.


Os nmeros de nveis iniciam com 01, indicando que a informao um item
elementar e pode atingir o valor de 49, alm dos valores especiais 66,77,78 e 88. Os
itens elementares so indicados de forma resumida, pois esto no nvel mais alto. J
os itens de grupo so constitudos pelos itens elementares. O registro de um arquivo
sempre iniciado pelo nmero de nvel 01, indicando o maior nvel da estrutura. Por
default, em nosso curso, vamos utilizar os nveis de 01 a 05, e os nveis especiais 77
e 88.
Vejamos:

01 REGISTRO-ALUNO.
02 NOME-ALUNO.
03 PRIMEIRONOME

PIC A(020).

03 SOBRENOME

PIC X(030).

02 ENDERECO-ALUNO.
03

LOGRADOURO

PIC X(003).

03

NOME-DA-RUA

PIC X(040).

03

NUMERO-DA-RUA

PIC 9(005).

03

COMPLEMENTO-ENDERECO PIC X(020).

03

BAIRRO-ALUNO

PIC X(030).

03

CIDADE-ALUNO

PIC X(030).

03

ESTADO-ALUNO

PIC A(002).

02 DATA-NASCIMENTO-ALUNO.
03

DIA-NASCIMENTO

PIC 9(002).

03

MS-NASCIMENTO

PIC 9(002).

03

ANO-NASCIMENTO

PIC 9(004).

SOCIESC Sociedade Educacional de Santa Catarina

Programao Aplicada - Cobol

34

Vamos supor que nosso programa esteja lendo um arquivo de alunos, definido
com a estrutura acima. Repare que, ao registro do arquivo, associamos o nvel 01, o
maior ou o mais resumido.
Veja agora o Nome do Aluno. Dentro do item elementar REGISTRO-ALUNO,
definimos um item de grupo, chamado NOME-ALUNO, sem atribuio nenhuma,
contudo, nas duas linhas seguintes, dividimos os campos em dois outros itens de
grupo: PRIMEIRONOME e SOBRENOME, o primeiro com 20 caracteres de tamanho
e o segundo com 30. Na linha seguinte, o nmero do nvel voltou para um valor mais
alto, indicando que o item de grupo anterior acabou e ali est iniciando outro item.
Da mesma forma o item de grupo ENDERECO-ALUNO foi tambm subdividido
em outros itens de grupo: LOGRADOURO, NOME-DA-RUA, NUMERO-DA-RUA e
assim por diante, at o prximo item de grupo com nvel inferior, DATANASCIMENTO-ALUNO.
Os nmeros de nvel, nessas condies, podem variar de 01 at 49. Na
programao profissional, normalmente usam-se intervalos maiores entre os nveis
superiores a 01 para as subdivises, como de 02 em 02, ou 03 em 03. Usando
intervalo de 02, teramos:

01 REGISTRO-ALUNO.
03 NOME-ALUNO.
05 PRIMEIRONOME

PIC A(020).

05 SOBRENOME

PIC X(030).

03 ENDERECO-ALUNO.
05

LOGRADOURO

PIC X(003).

05

NOME-DA-RUA

PIC X(040).

05

NUMERO-DA-RUA

PIC 9(005).

05

COMPLEMENTO-ENDERECO PIC X(020).

05

CEP-ALUNO

PIC 9(008).

05

BAIRRO-ALUNO

PIC X(030).

05

CIDADE-ALUNO

PIC X(030).

05

ESTADO-ALUNO

PIC A(002).

03 DATA-NASCIMENTO-ALUNO.
05

DIA-NASCIMENTO

PIC 9(002).

05

MS-NASCIMENTO

PIC 9(002).

05

ANO-NASCIMENTO

PIC 9(004).

SOCIESC Sociedade Educacional de Santa Catarina

Programao Aplicada - Cobol

35

Usando intervalos maiores, os programadores podem inserir novos nveis entre


os j existentes, de acordo com as necessidades que vo surgindo nos programas.
O nmero de nvel especial, 77, utilizado para definir variveis de dados
independentes, que no possuem relao com nenhum item elementar ou de grupo.

77

RESULTADO-OPERACAO

PIC 9(007)V99.

77

TITULO-RELATORIO

PIC X(050).

O nmero de nvel especial, 88, usado para especificar valores constantes a


variveis definidas entre os nveis 01 e 49.

01

01

ESTADO-CIVIL

PIC X(001).

88

CASADO

VALUE C.

88

SOLTEIRO

VALUE S.

88

DIVORCIADO

VALUE D.

SEXO-ALUNO

PIC X(001).

88

MASCULINO

VALUE M.

88

FEMININO

VALUE F.

1.1 Clusula Filler


A palavra -Filler- pode ser considerada um coringa dentro do COBOL.
utilizada na definio da estrutura de um registro de arquivo ou de um bloco de
variveis da WORKING-STORAGE SECTION, quando o programador no quer
utilizar um nome de item elementar ou de grupo. Pode ser repetida quantas vezes
forem necessrias dentro da mesma estrutura ou de estruturas distintas, como
veremos mais adiante, num exemplo sobre Indexao de Variveis (OCCURS).
2 TIPOS DE DADOS
Se voc observar o Registro definido no tpico anterior (REGISTRO-ALUNO),
h algumas variveis com a clusula PIC no lado direito. Com essa clusula
(abreviatura de PICTURE IS), definimos o tipo de dado de uma varivel e, na

SOCIESC Sociedade Educacional de Santa Catarina

Programao Aplicada - Cobol

36

seqncia, seu tamanho em bytes. Em COBOL, os tipos de dados mais utilizados na


definio de variveis so os seguintes:


ALPHABETIC (Alfabtica) Quando sero aceitos na varivel apenas


letras do alfabeto identificada pela declarao PIC A(...)

NUMERIC (Numrica) Quando so aceitos os dgitos de 0 a 9, ou sinal


de ( + ) e ( - ) (positivo e negativo) e o ponto decimal (vrgula)
identificada pela declarao PIC 9(...)

ALPHANUMERIC (Alfanumrica) Esta classe aceita todo e qualquer


caractere, na faixa de 0 a 255 ASCII identificada pela declarao PIC
X(...)

Vamos supor agora que, em algum programa, iremos trabalhar com os 3 tipos
de dados (numrico, alfanumrico e alfabtico), conforme mostra a tabela 3:
Tabela 3 - Tipos de variveis
NOME DA VARIVEL
CONTEDO
NUMERICA-1
251666
NUMERICA-2
ALFABETICA-1
ALFANUMERICA-1

TIPO
Numrica

750,33

Numrica

SOCIESC

Alfabtica

sociesc123@sociesc.com.br Alfanumrica

Em COBOL, essas variveis seriam definidas desta forma:


77

NUMERICA-1

PIC 9(006)

VALUE 251666

77

NUMERICA-2

PIC 9(003)V99

VALUE 750,33

77

ALFABETICA-1

PIC A(007)

VALUE SOCIESC.

77

ALFANUMERICA-1

PIC X(020)

VALUE sociesc123@sociesc.com.br

Ou dessa forma:
01

NUMERICA-1

PIC 9(006)

VALUE 251666

01

NUMERICA-2

PIC 9(003)V99

VALUE 750,33

01

ALFABETICA-1

PIC A(007)

VALUE SOCIESC.

01

ALFANUMERICA-1

PIC X(020)

VALUE sociesc123@sociesc.com.br

SOCIESC Sociedade Educacional de Santa Catarina

Programao Aplicada - Cobol

37

Note que as variveis podem tanto ser representadas pelo nvel especial 77,
que independente, como pelo nvel elementar 01, quando este no est associado
a itens de grupo.
Se voc observar atentamente, tambm ver que introduzimos uma nova
clusula na definio das variveis (VALUE), ou seja, atribumos um valor inicial
para cada uma, que poder permanecer dessa forma (conceito de constante) ou
poder ser modificado no decorrer do programa, de acordo com a lgica
estabelecida.
3 VARIVEIS EDITADAS
As variveis que utilizamos apenas para processamento interno de clculos e
execuo de procedimentos, ou para definio da estrutura de dados em arquivos,
normalmente esto no estado original do tipo de dado no editado. A partir do
momento que as informaes necessitam ser exibidas ao usurio final de um
sistema, na forma de consulta em vdeo ou relatrio, normalmente precisam ser
editadas, para melhor apresentao. nessa hora que aplicamos o conceito das
Variveis Editadas, ou seja, tiramos a varivel de seu estado original (no editado) e
damos a ele um estado de apresentao mais refinado.
Imaginemos o registro de um arquivo de notas fiscais, conforme estrutura
definida abaixo:

01 REGISTRO-NOTAFISCAL.
03 NUMERO-NOTAFISCAL

PIC 9(009).

03 CPF-CLIENTE-NOTAFISCAL

PIC 9(011).

03 VALOR-NOTAFISCAL

PIC 9(011)V99.

03 DATA-NOTAFISCAL.
05

DIA-NOTAFISCAL

PIC 9(002).

05

MS-NOTAFISCAL

PIC 9(002).

05

ANO-NOTAFISCAL

PIC 9(004).

Conforme declaramos no primeiro pargrafo desse tpico, as variveis


temporrias ou de estrutura de arquivo tm sua definio no estado no editado, ou
seja, para gravar o movimento de notas fiscais no arquivo, no precisamos refinar as

SOCIESC Sociedade Educacional de Santa Catarina

Programao Aplicada - Cobol

38

variveis, porm, a partir do momento que seja necessria uma sada de dados, seja
por consulta ou relatrio, devemos melhorar o modo de apresentao dos dados.
Vejamos agora como ficaria a consulta de algumas notas fiscais gravadas no
arquivo, se apresentssemos as variveis no editadas, conforme mostra tabela 4.

Contedo do Registro:
Tabela 4 - Variveis no editadas
N.NOTA FISCAL

CPF DO CLIENTE

VALOR NOTA FISCAL

DATA DA NOTA

000000589

12345678900

00000001598,50

01012007

000000590

44561345699

00000000077,99

10022008

Vejamos agora como ficaria essa mesma consulta, com o uso de variveis editadas,
como mostra tabela 5.
Tabela 5- Variveis editadas
N.NOTA FISCAL

CPF DO CLIENTE

VALOR NOTA FISCAL

DATA DA NOTA

589

123.456.789.00

1.598,50

01/01/2007

590

445.613.456.99

77,99

10/02/2008

Podemos notar que, nos dois exemplos, os valores apresentados so os


mesmos, originados do arquivo de notas fiscais, porm, a forma de apresentao
das informaes muito melhor visualizada no segundo exemplo, no qual refinamos
as variveis atravs do processo de edio.
Para tipos de dados Numricos, o formato de edio utiliza a PIC Z... no lugar
da PIC 9.... Declarando uma varivel de edio com Z, os zeros esquerda da
varivel sero desconsiderados. Vejamos os casos dos campos NUMERONOTAFISCAL e VALOR-NOTAFISCAL:
03 NUMERO-NOTAFISCAL

PIC 9(009).

03 VALOR-NOTAFISCAL

PIC 9(011)V99.

Conforme a declarao original, as variveis so numricas, a primeira de


tamanho 9 e a segunda de tamanho inteiro 11, mais duas casas decimais.

SOCIESC Sociedade Educacional de Santa Catarina

Programao Aplicada - Cobol

39

Para obtermos o resultado que transformou a varivel 000000589 em 589 e o


valor 00000001598,50 em 1.598,50, foi necessrio definir duas variveis editadas,
uma para cada situao, com o seguinte formato:
03 NUMERO-NOTAFISCAL-EDIT

PIC ZZZZZZZZ9.

03 VALOR-NOTAFISCAL-EDIT

PIC ZZ.ZZZ.ZZZ.ZZ9,99.

Nas duas variveis editadas, definidas acima, o dgito 9, no ltimo byte da


primeira, e os dgitos 9,99 nos ltimos bytes da segunda, continuam sendo
caracteres significativos. Se os valores das duas variveis fossem ZERO, seriam
apresentados na consulta o Nmero da Nota Fiscal como 0 e o Valor da Nota como
0,00.
Nem sempre a edio das variveis numricas necessita ser feita pela PIC Z,
caso tpico dos outros campos de nosso arquivo de notas o CPF do Cliente e a
Data da Nota Fiscal.
03 CPF-CLIENTE-NOTAFISCAL

PIC 9(011).

03 DATA-NOTAFISCAL.
05

DIA-NOTAFISCAL

PIC 9(002).

05

MS-NOTAFISCAL

PIC 9(002).

05

ANO-NOTAFISCAL

PIC 9(004).

No caso do CPF e da Data, no queremos desprezar nenhum dgito, assim,


editamos as variveis da seguinte forma:
03 CPF-CLIENTE-NOTAFISCAL-EDIT

PIC 999.999.999.99.

03 DATA-NOTAFISCAL-EDIT

PIC 99/99/9999.

Dessa forma, o Nmero 12345678900

e a data 01012007 ficam com os

respectivos formatos de apresentao 123.456.789.00 e 01/01/2007.


Como fazer para que o contedo das variveis seja transferido da varivel do
estado original para o editado? Essa a funo do comando MOVE (sobre o qual
falaremos na aula referente a comandos do COBOL captulo Comandos Bsicos).
Abaixo segue o exemplo com nossas variveis atuais:

SOCIESC Sociedade Educacional de Santa Catarina

Programao Aplicada - Cobol

40

01 REGISTRO-NOTAFISCAL.
03 NUMERO-NOTAFISCAL

PIC 9(009).

03 CPF-CLIENTE-NOTAFISCAL

PIC 9(011).

03 VALOR-NOTAFISCAL

PIC 9(011)V99.

03 DATA-NOTAFISCAL.
05

DIA-NOTAFISCAL

PIC 9(002).

05

MS-NOTAFISCAL

PIC 9(002).

05

ANO-NOTAFISCAL

PIC 9(004).

03 NUMERO-NOTAFISCAL-EDIT

PIC ZZZZZZZZ9.

03 CPF-CLIENTE-NOTAFISCAL-EDIT PIC 999.999.999.99.


03 VALOR-NOTAFISCAL-EDIT

PIC ZZ.ZZZ.ZZZ.ZZ9,99.

03 DATA-NOTAFISCAL-EDIT

PIC 99/99/9999.

Nesse caso, a transferncia dos dados e a apresentao na tela se daria pelas


linhas de comando a seguir:

MOVE NUMERO-NOTAFISCAL

TO NUMERO-NOTAFISCAL-EDIT.

MOVE CPF-CLIENTE-NOTAFISCAL TO CPF-CLIENTE-NOTAFISCAL-EDIT.


MOVE VALOR-NOTAFISCAL

TO VALOR-NOTAFISCAL-EDIT.

MOVE DATA-NOTAFISCAL

TO DATA-NOTAFISCAL-EDIT.

DISPLAY NUMERO-NOTAFISCAL-EDIT

AT 0101.

DISPLAY CPF-CLIENTE-NOTAFISCAL-EDIT AT 0118.


DISPLAY VALOR-NOTAFISCAL-EDIT

AT 0132.

DISPLAY DATA-NOTAFISCAL-EDIT

AT 0152.

4 CLUSULA REDEFINES
Essa uma clusula opcional na definio de variveis. Como o prprio nome
sugere, permite a redefinio de qualquer varivel, subdividindo-a em nveis
menores ao da varivel que est sendo redefinida. Vejamos:

03

DATA-COMPRA

03

REDEFINES DATA-COMPRA.

PIC 9(008).

05

DIA-COMPRA

PIC 9(002).

05

MS-COMPRA

PIC 9(002).

05

ANO-COMPRA

PIC 9(004).

SOCIESC Sociedade Educacional de Santa Catarina

Programao Aplicada - Cobol

03

HORARIO-COMPRA

03

REDEFINES HORARIO-COMPRA.

41

PIC 9(004).

05

HORA-COMPRA

PIC 9(002).

05

MIN-COMPRA

PIC 9(002).

Podemos notar que essa clusula acaba se tornando bastante til e prtica
para os programadores, pois permite que se trabalhe tanto com o item principal
(DATA-COMPRA e HORARIO-COMPRA) como tambm permite o uso das variveis
redefinidas.
Vamos supor que o programa necessite efetuar sempre uma consistncia
sobre o ms da compra o programador no precisa desenvolver nenhuma lgica
mirabolante para extrair o ms de dentro da varivel DATA-COMPRA, basta usar
diretamente a varivel MES-COMPRA. A nica regra que prevalece numa
redefinio a de que a soma dos bytes das variveis redefinidas deve equivaler ao
total de bytes da varivel original.

03

HORARIO-COMPRA

PIC 9(004).

03

REDEFINES HORARIO-COMPRA.
05

HORA-COMPRA

PIC 9(002).

05

MIN-COMPRA

PIC 9(003).

Aqui os itens redefinidos somariam cinco (5) bytes, provocando erro de


compilao no programa.
5 INDEXAO DE VARIVEIS (OCCURS)
Por fim, chegamos ao conceito de ocorrncias (conhecido em outras
linguagens como Vetor ou Array), que utiliza a clusula OCCURS, eliminando a
necessidade de descries separadas para sentenas repetitivas. Em outras
palavras, especifica o nmero de vezes que um item se repete com o mesmo
formato.
Tambm uma clusula muito til na montagem de tabelas, reduzindo
consideravelmente o tempo de codificao de um programa. J que trata de tabelas,
obrigatoriamente o item nela referenciado dever possuir um ndice subscrito, que

SOCIESC Sociedade Educacional de Santa Catarina

Programao Aplicada - Cobol

42

indique sua posio, alm de indicar qual dado ser utilizado: Por exemplo, uma
tabela de meses:

01

01

TABELA-MESES.
03

FILLER

PIC X(009) VALUE JANEIRO.

03

FILLER

PIC X(009) VALUE FEVEREIRO.

03

FILLER

PIC X(009) VALUE MARO.

03

FILLER

PIC X(009) VALUE ABRIL.

03

FILLER

PIC X(009) VALUE MAIO.

03

FILLER

PIC X(009) VALUE JUNHO.

03

FILLER

PIC X(009) VALUE JULHO.

03

FILLER

PIC X(009) VALUE AGOSTO.

03

FILLER

PIC X(009) VALUE SETEMBRO.

03

FILLER

PIC X(009) VALUE OUTUBRO.

03

FILLER

PIC X(009) VALUE NOVEMBRO.

03

FILLER

PIC X(009) VALUE DEZEMBRO.

REDEFINES TABELA-MESES.
03

MES-EXTENSO

PIC X(009) OCCURS 12 TIMES.

Criamos um item elementar de nome TABELA-MESES que, por sua vez,


possui 12 itens de grupo, com os nomes dos meses. Em seguida, redefinimos
TABELA-MESES, criando um item de grupo MES-EXTENSO, dizendo que ocorre 12
vezes ou seja, se repete doze vezes, com a mesma representao.
Na prtica, como se tivssemos criado 12 variveis MES-EXTENSO:
MES-EXTENSO(1), MES-EXTENSO(2), ... MES-EXTENSO(12).

Nesse caso, o ndice subscrito ser o ms (entre parnteses) que define qual a
ocorrncia selecionada.
Para que voc possa ter idia da reduo de linhas de cdigo com o uso
apropriado da clusula OCCURS, vejamos um exemplo utilizando esse recurso de
forma apropriada e outro exemplo que no utiliza o recurso:
Uso do Occurs
*
*...5....0....5....0....5....0....5....0....5....0....5....0....5...

SOCIESC Sociedade Educacional de Santa Catarina

Programao Aplicada - Cobol

43

*
IDENTIFICATION DIVISION.
PROGRAM-ID.
AUTHOR.

PROGR2.
SOCIESC.

*
* Programa Exemplo de Ocorrncias
*
DATA DIVISION.
WORKING-STORAGE SECTION.
01

01

TABELA-MESES.
03

FILLER

PIC X(009) VALUE "JANEIRO".

03

FILLER

PIC X(009) VALUE "FEVEREIRO".

03

FILLER

PIC X(009) VALUE "MARCO".

03

FILLER

PIC X(009) VALUE "ABRIL".

03

FILLER

PIC X(009) VALUE "MAIO".

03

FILLER

PIC X(009) VALUE "JUNHO".

03

FILLER

PIC X(009) VALUE "JULHO".

03

FILLER

PIC X(009) VALUE "AGOSTO".

03

FILLER

PIC X(009) VALUE "SETEMBRO".

03

FILLER

PIC X(009) VALUE "OUTUBRO".

03

FILLER

PIC X(009) VALUE "NOVEMBRO".

03

FILLER

PIC X(009) VALUE "DEZEMBRO".

REDEFINES TABELA-MESES.
03

MES-EXTENSO

01

DATA1

01

REDEFINES DATA1.

PIC X(009) OCCURS 12 TIMES.

PIC 9(008) VALUE 06042002.

03

DIA1

PIC 9(002).

03

MES1

PIC 9(002).

03

ANO1

PIC 9(004).

01

DATA2

01

REDEFINES DATA2.

PIC 9(008) VALUE 22091977.

03

DIA2

PIC 9(002).

03

MES2

PIC 9(002).

03

ANO2

PIC 9(004).

PROCEDURE DIVISION.
INICIO-SECTION.
DISPLAY ERASE AT 0101.
*
*

Caro Aluno, note que a variavel DATA1 esta declarada com

valor inicial 06042002

objetivo do programa listar o

e a varivel DATA2 com 22091977. O

SOCIESC Sociedade Educacional de Santa Catarina

Programao Aplicada - Cobol

44

mes por extenso. O resultado portanto, devera ser ABRIL

e SETEMBRO

*
DISPLAY MES-EXTENSO(MES1)

AT 1010.

DISPLAY MES-EXTENSO(MES2)

AT 1110.

STOP RUN.

Sem uso do Occurs


*
*...5....0....5....0....5....0....5....0....5....0....5....0....5...
*
IDENTIFICATION DIVISION.
PROGRAM-ID.
AUTHOR.

PROGR2.
SOCIESC.

*
* Programa Exemplo sem uso de Ocorrencias
*
DATA DIVISION.
WORKING-STORAGE SECTION.
01

DATA1

01

REDEFINES DATA1.

PIC 9(008) VALUE 06042002.

03

DIA1

PIC 9(002).

03

MES1

PIC 9(002).

03

ANO1

PIC 9(004).

01

DATA2

01

REDEFINES DATA2.

PIC 9(008) VALUE 22091977.

03

DIA2

PIC 9(002).

03

MES2

PIC 9(002).

03

ANO2

PIC 9(004).

PROCEDURE DIVISION.
INICIO-SECTION.
DISPLAY ERASE AT 0101.
IF

MES1 = 01
DISPLAY JANEIRO AT 1010

END-IF
IF

MES1 = 02
DISPLAY FEVEREIRO AT 1010

END-IF
IF

MES1 = 03
DISPLAY MARO AT 1010

SOCIESC Sociedade Educacional de Santa Catarina

Programao Aplicada - Cobol

END-IF
IF

MES1 = 04
DISPLAY ABRIL AT 1010

END-IF
IF

MES1 = 05
DISPLAY MAIO AT 1010

END-IF
IF

MES1 = 06
DISPLAY JUNHO AT 1010

END-IF
IF

MES1 = 07
DISPLAY JULHO AT 1010

END-IF
IF

MES1 = 08
DISPLAY AGOSTO AT 1010

END-IF
IF

MES1 = 09
DISPLAY SETEMBRO AT 1010

END-IF
IF

MES1 = 10
DISPLAY OUTUBRO AT 1010

END-IF
IF

MES1 = 11
DISPLAY NOVEMBRO AT 1010

END-IF
IF

MES1 = 12
DISPLAY DEZEMBRO AT 1010

END-IF
IF

MES2 = 01
DISPLAY JANEIRO AT 1110

END-IF
IF

MES2 = 02
DISPLAY FEVEREIRO AT 1110

END-IF
IF

MES2 = 03
DISPLAY MARO AT 1110

END-IF
IF

MES2 = 04
DISPLAY ABRIL AT 1110

END-IF
IF

MES2 = 05
DISPLAY MAIO AT 1110

END-IF
IF

MES2 = 06
DISPLAY JUNHO AT 1110

SOCIESC Sociedade Educacional de Santa Catarina

45

Programao Aplicada - Cobol

46

END-IF
IF

MES2 = 07
DISPLAY JULHO AT 1110

END-IF
IF

MES2 = 08
DISPLAY AGOSTO AT 1110

END-IF
IF

MES2 = 09
DISPLAY SETEMBRO AT 1110

END-IF
IF

MES2 = 10
DISPLAY OUTUBRO AT 1110

END-IF
IF

MES2 = 11
DISPLAY NOVEMBRO AT 1110

END-IF
IF

MES2 = 12
DISPLAY DEZEMBRO AT 1110

END-IF
STOP RUN.

Como podemos observar, o segundo programa repete as mesmas instrues


muitas vezes, variando apenas a sentena que consiste no ms em questo. No
primeiro programa, em apenas duas linhas de cdigo j conseguimos imprimir o
nome de cada ms na tela.

Sntese

Nessa aula aprendemos sobre os tipos de variveis mais comuns suportados


pelo COBOL. Conceituamos os nveis e os tipos de dados. Aprendemos a editar
variveis para apresentar as informaes num layout mais requintado ao usurio
final e tambm aprendemos a redefinir variveis, evidenciando como esse processo
pode ajudar o programador em muitos casos no desenvolvimento de sua lgica.

SOCIESC Sociedade Educacional de Santa Catarina

Programao Aplicada - Cobol

47

Exerccios Propostos
1.

Explique o nvel especial 77:

___________________________________________________________________
___________________________________________________________________
___________________________________________________________________
___
2.

Crie dois exemplos para cada tipo de varivel (numrica, alfanumrica e

alfabtica) especificando o tamanho de cada uma:


___________________________________________________________________
___________________________________________________________________
___________________________________________________________________
___
3.

O que se define atravs da clusula PIC?

___________________________________________________________________
___________________________________________________________________
___________________________________________________________________
___
4.

Para que serve a clusula VALUE na definio de variveis?

___________________________________________________________________
___________________________________________________________________
___________________________________________________________________
___
5.

Crie uma varivel chamada NACIONALIDADE-ALUNO, que poder

assumir o valor B para Brasileiro ou E para Estrangeiro, definindo os


dados no nvel especial 88 (veja o exemplo da varivel ESTADO-CIVIL):
___________________________________________________________________
___________________________________________________________________

SOCIESC Sociedade Educacional de Santa Catarina

Programao Aplicada - Cobol

48

___________________________________________________________________
__
6.

O que so Variveis Editadas?

___________________________________________________________________
___________________________________________________________________
___________________________________________________________________
__
7.

Cite dois exemplos de utilizao para as Variveis Editadas.

___________________________________________________________________
___________________________________________________________________
___________________________________________________________________
___

8.

Explique a Clusula Redefines:

___________________________________________________________________
___________________________________________________________________
___________________________________________________________________
___
9.

Explique a importncia da utilizao da clusula OCCURS na construo

de um programa:
___________________________________________________________________
___________________________________________________________________
___________________________________________________________________
___

SOCIESC Sociedade Educacional de Santa Catarina

Programao Aplicada - Cobol

Aula 5

PRINCIPAIS COMANDOS
Objetivos da Aula
Ao final desta aula, voc dever ser capaz de:
 Identificar os principais comandos da Linguagem COBOL;
 Definir os comandos adequados a cada situao no desenvolmento de um programa;
 Adquirir habilidades para aplicar os vrios formatos dos comandos utilizados pelo COBOL.
Contedos da Aula
Acompanhe os assuntos desta aula, se preferir, ao
terminar, assinale o contedo j estudado.


Comandos Bsicos

Comandos para Operaes Aritmticas

Comandos Condicionais

Comandos de Desvio

Comandos Especiais

Exerccios propostos

Seja Bem-vindo(a) a nossa quinta aula.


medida que formos mostrando cada comando do COBOL,
suas regras de uso (que chamamos de sintaxe) e suas aplicaes
prticas, creio que a aula se tornar gradativamente mais
interessante para voc.
Bons Estudos!

SOCIESC Sociedade Educacional de Santa Catarina

49

Programao Aplicada - Cobol

50

1 COMANDOS BSICOS
Como vamos falar de comandos, aqui vai uma regrinha bsica: todo pargrafo
ou seo deve possuir um ponto final ou o ltimo comando executado deve
possuir um ponto. Parece um detalhe sem importncia no? Pois veremos, a partir
de agora, que trabalharemos muito mais na PROCEDURE DIVISION, que um ponto
fora do lugar pode complicar muito a vida do programador.
Veja a seguir os principais comandos utilizados pelo COBOL, e suas
aplicaes:
2 DISPLAY
Comando utilizado para exibir informaes na tela, em ambiente caracter. Seu
uso em conjunto com a palavra reservada ERASE limpa a tela. Alguns exemplos de
formatos:
DISPLAY ERASE AT 0101

No comando acima, limpamos a tela desde a linha 01 e coluna 01. Podemos


exibir tambm mensagens fixas ou armazenadas em variveis.
DISPLAY Ola Alunos, eu sou o COBOL AT 1010.

Essa forma de utilizao do comando ir exibir na tela a cadeia de caracteres


entre as aspas ( ) na posio especificada por AT 1010, ou seja, linha 10 e coluna
10 que so compreendidas entre linhas de 1 a 25 e colunas de 1 a 80.

DISPLAY OBSERVACAO-NOTA-FISCAL AT 1201

Nesse outro formato, o comando ir exibir na tela o contedo da varivel


OBSERVACAO-NOTA-FISCA,L

na linha 12, a partir da coluna 01.

SOCIESC Sociedade Educacional de Santa Catarina

Programao Aplicada - Cobol

51

3 ACCEPT
Comando utilizado para aceitar entrada de dados nos programas. atravs
dele que os dados digitados pelos usurios na tela retornaro ao programa. Possui
vrios formatos, vamos ver os principais:
ACCEPT NOME-ALUNO AT 1020
ACCEPT DATA-ADMISSAO AT 1020 WITH AUTO-SKIP
ACCEPT SENHA AT 1830 WITH NO-ECHO
ACCEPT RESPOSTA AT 1020 ON ESCAPE <sentena>

3.1 Accept Nome-Aluno At 1020


Neste formato, esperaremos que o usurio informe algo na posio 1020 da
tela. O que for informado retornar como contedo da varivel NOME-ALUNO. O
usurio indica para a aplicao que terminou de fornecer estas informaes,
pressionando a tecla <ENTER>.
3.2 Accept Data-Admissao At 1020 With Auto-Skip
Especificando a clusula AUTO-SKIP, quando o campo DATA-ADMISSAO for
totalmente preenchido, no h necessidade de se pressionar a tecla <ENTER> para
saltar para a prxima declarao ou linha de comando.
3.3 Accept Senha At 1830 With No-Echo
Especificando a clusula NO-ECHO, as teclas pressionadas no so
mostradas na tela. Ideal para cadastramento e confirmao de senhas.
3.4 Accept Resposta At 1020 On ESCAPE <sentena>
Adicionando a clusula ON ESCAPE, ao final do comando, podemos definir
uma sentena caso o usurio pressione a tecla ESC.
SOCIESC Sociedade Educacional de Santa Catarina

Programao Aplicada - Cobol

52

ACCEPT RESPOSTA AT 1020 ON ESCAPE GO TO FIM.

4 MOVE
Esse um dos comandos mais utilizados em COBOL, pois o responsvel
pela transferncia de dados, ou seja, associa um determinado valor fixo ou de uma
varivel a uma ou mais variveis.

MOVE 18 TO IDADE-MINIMA.
MOVE DATA-ATUAL TO DATA-RELATORIO.
MOVE 1 TO A1, A2, A3.
MOVE ALL * TO LINHA-RELATORIO.

No primeiro exemplo, transferimos um valor fixo (18) para a varivel IDADEMINIMA. No segundo, transferimos o contedo de DATA-ATUAL para a varivel
DATA-RELATORIO. No terceiro, movemos o valor 1, simultaneamente, para 3
variveis (A1, A2 e A3). Por fim, no ltimo exemplo, com a clusula ALL, movemos o
caracter asterisco (*) para o tamanho exato em bytes da varivel LINHARELATORIO.
Observe que, no uso da declarao MOVE, todas as variveis envolvidas
devem ser do mesmo tipo de dado.
Note que, entre os elementos da declarao MOVE existe a palavra reservada
TO em destaque, fazendo parte da sintaxe do comando.
5 STOP RUN
Comando utilizado para encerrar a aplicao. No possui variaes.
Vejamos agora uma variao do programa da aula anterior, utilizando todos os
comandos bsicos, comentados linha por linha:

SOCIESC Sociedade Educacional de Santa Catarina

Programao Aplicada - Cobol

53

*
*...5....0....5....0....5....0....5....0....5....0....5....0....5....0
*
IDENTIFICATION DIVISION.
PROGRAM-ID.
AUTHOR.

PROGR3.
SOCIESC.

*
* Programa Exemplo dos Comandos Bsicos
*
DATA DIVISION.
WORKING-STORAGE SECTION.
01

01

TABELA-MESES.
03

FILLER

PIC X(009) VALUE "JANEIRO".

03

FILLER

PIC X(009) VALUE "FEVEREIRO".

03

FILLER

PIC X(009) VALUE "MARCO".

03

FILLER

PIC X(009) VALUE "ABRIL".

03

FILLER

PIC X(009) VALUE "MAIO".

03

FILLER

PIC X(009) VALUE "JUNHO".

03

FILLER

PIC X(009) VALUE "JULHO".

03

FILLER

PIC X(009) VALUE "AGOSTO".

03

FILLER

PIC X(009) VALUE "SETEMBRO".

03

FILLER

PIC X(009) VALUE "OUTUBRO".

03

FILLER

PIC X(009) VALUE "NOVEMBRO".

03

FILLER

PIC X(009) VALUE "DEZEMBRO".

REDEFINES TABELA-MESES.
03

MES-EXTENSO

01

DATA1

01

REDEFINES DATA1.

01

PIC X(009) OCCURS 12 TIMES.


PIC 9(008).

03

DIA

PIC 9(002).

03

MES

PIC 9(002).

03

ANO

PIC 9(004).

DATA-EDIT

PIC 99/99/9999.

PROCEDURE DIVISION.
INICIO-SECTION.
DISPLAY ERASE AT 0101.
* A linha acima limpou a tela.
DISPLAY "Digite a Data (DD/MM/AAAA) - " AT 1010.
* A linha acima exibiu o contedo entre as , na linha 10,
* coluna 10
ACCEPT DATA1 AT 1040.
* A linha acima est aguardando o usurio entrar com dados

SOCIESC Sociedade Educacional de Santa Catarina

Programao Aplicada - Cobol

54

* na linha 10, coluna 40 e ir armazen-los na varivel DATA1


DISPLAY MES-EXTENSO(MES) AT 1510.
* A linha acima exibe o ms por extenso na linha 15 coluna 10
* Notem que a varivel MS-EXTENSO QUE ocorre 12 vezes, est
* utilizando a varivel MES como ndice (entre parnteses)
* Embora o usurio no digite apenas o mes, e sim a data
* completa, o programa consegue extrair este valor pronto atravs da
* clusula REDEFINES da varivel DATA1.
MOVE DATA1 TO DATA-EDIT.
* A linha acima transfere o contedo de DATA1 para DATA-EDIT
DISPLAY DATA-EDIT AT 1530.
* A linha acima exibe a data editada na linha 15 coluna 30
STOP RUN.
* Por fim, a aplicao encerrada.

No exemplo acima, temos o uso de todos os comandos bsicos, agora j


devidamente explicados e com os principais formatos demonstrados.
Vejamos o resultado do programa, aps sua execuo, conforme mostra a
figura 3:

Figura 3 - Imagem do programa PROG3 aps sua execuo.

6 COMANDOS PARA OPERAES ARITMTICAS


So vrios os comandos que auxiliam o programador a efetuar clculos
aritmticos. Entre eles, destacamos:

SOCIESC Sociedade Educacional de Santa Catarina

Programao Aplicada - Cobol

55

Add
Subtract
Multiply
Divide
Compute
6.1 Add
Utilizado para somar valores, entre variveis e literais (nmeros inteiros fixos
escritos no programa).

ADD 10 TO CONTADOR-LINHAS.
ADD TOTAL-FALTAS-MES TO TOTAL-FALTAS-SEMESTRE.

No primeiro exemplo, somamos um literal de valor 10 na varivel CONTADORLINHAS. No segundo exemplo, somamos duas variveis.
Note que, entre os elementos da soma, existe a palavra reservada TO em
destaque. Ela faz parte da sintaxe do comando.
6.2 Subtract
Utilizado para subtrair valores, segue as mesmas regras do comando ADD.

SUBTRACT 10 FROM CONTADOR-LINHAS.


SUBTRACT TOTAL-HORAS-FALTAS FROM TOTAL-HORAS-PAGAS.

No primeiro exemplo, subtramos um literal de valor 10 da varivel


CONTADOR-LINHAS. No segundo exemplo, subtramos TOTAL-HORAS-FALTAS
da varivel TOTAL-HORAS-PAGAS.
Note que, entre os elementos da subtrao, existe a palavra reservada FROM
em destaque, fazendo parte da sintaxe do comando.

SOCIESC Sociedade Educacional de Santa Catarina

Programao Aplicada - Cobol

56

6.3 Multiply
Utilizado para multiplicar valores. Temos trs formatos:
MULTIPLY 100 BY TAXA-JUROS - Nesse primeiro formato, o literal
(100) multiplicado pela varivel TAXA-JUROS, que vai receber o
resultado desta multiplicao.
MULTIPLY HORAS-TRABALHADAS BY TOTAL - No segundo
formato, existe a multiplicao entre variveis e a segunda varivel
armazenar o resultado da multiplicao.
MULTIPLY HORAS-TRABALHADAS BY SALARIO-HORA GIVING
SALARIO-MS - Nesse terceiro formato, temos a clusula GIVING
muito til quando queremos o resultado da multiplicao numa varivel
em separado. Nesse caso, o resultado ser armazenado na varivel
SALARIO-MES.

Ateno Aluno!
Este comando MULTIPLY TAXA-JUROS BY 100 no ser aceito pelo
compilador, pois se no for especificada a clusula GIVING, o resultado
sempre vai para o 2 elemento, que deve ser ento varivel, no um literal.
Note que entre os elementos da multiplicao existe a palavra reservada BY
em destaque. Ela faz parte da sintaxe do comando.
6.4 Divide
Utilizado para dividir valores. Embora possua vrios formatos, vamos nos ater
ao principal deles, que segue a mesma regra do terceiro formato do comando
MULTIPLY.

SOCIESC Sociedade Educacional de Santa Catarina

Programao Aplicada - Cobol

57

DIVIDE SALARIO-TOTAL BY HORAS-MES GIVING SALARIO-HORA.

Nesse caso, o resultado da diviso ser armazenado na varivel SALARIOHORA, preservando o valor original das outras variveis envolvidas na diviso.
6.5 Compute
o comando mais utilizado para clculos no COBOL. Podemos utilizar
qualquer expresso aritmtica vlida (excluindo-se chaves {} e colchetes []) para
que o COMPUTE a execute. Os sinais esperados no comando compute so os
demonstrados na tabela 6:
Tabela 6 - Sinais esperados no comando COMPUTE.
+

Adicionar

Subtrair

Multiplicar

Dividir

**

Exponenciao

Essa expresso tambm poder conter Parnteses ( ).

COMPUTE RESULTADO = TOTAL + 3 * DIAS-MES ( 3 + 4 )


COMPUTE SALARIO = DIAS-TRABALHADOS * 30

COMPUTE DESCONTO = (DIAS-ANTECIPADOS * 2 / 100)

- 1

O COMPUTE tambm pode ser utilizado como acumulador, para apresentar


totais em relatrios e consultas.

SOCIESC Sociedade Educacional de Santa Catarina

Programao Aplicada - Cobol

58

COMPUTE SALDO-TOTAL = SALDO-TOTAL + VALOR-NOTAFISCAL.

Sendo assim, o programador j ter, ao final do programa, o valor total de


notas fiscais na varivel SALDO-TOTAL. Podemos inserir uma clusula no comando
para arredondamento de casas decimais. a clusula ROUNDED.
COMPUTE SALDO-TOTAL ROUNDED = SALDO-TOTAL + VALOR-NOTAFISCAL.

Com essa clusula, o COBOL far o arredondamento das casas decimais da


varivel SALDO-TOTAL. Caso o valor final da varivel fosse 1350,766 seria
mostrado 1350,77.
7 COMANDOS CONDICIONAIS
So os comandos que permitem ao programador definir os rumos que o
programa deve tomar em determinadas circunstncias. Os principais so IF e
EVALUATE.
7.1 Comando If
O Comando IF utilizado para tomadas de decises mais simples, do tipo SE
FOR VERDADE FAA ISTO, SENO FAA AQUILO.A figura 4 mostra como usar
esse comando.

Figura 4 - Sintaxe Geral do Comando IF

SOCIESC Sociedade Educacional de Santa Catarina

Programao Aplicada - Cobol

59

Conforme a sintaxe, aps a declarao IF, condition indica a condio a ser


avaliada e, se for verdadeira, o comando statement-1 ser executado. Caso a
avaliao da condio no seja verdadeira, o IF verificar se a clusula ELSE
(seno) existe: caso exista, executar o comando statement-2. Caso no exista a
clusula ELSE, o compilador ir executar o prximo comando. A clusula NEXT
SENTENCE (prxima sentena) no lugar de statement-1 ou statement-2 indica ao
compilador para prosseguir a partir da prxima sentena vlida (normalmente
prxima linha de comando aps um ponto final). Vejamos alguns exemplos:

IF

NOME-ALUNO = SPACES
DISPLAY Nome Aluno Desconhecido... AT 1010

ELSE
DISPLAY NOME-ALUNO AT 1010
END-IF

Nesse primeiro exemplo, caso a varivel NOME-ALUNO no venha em branco,


ser exibida na posio 1010 da Tela. Caso contrrio, ser exibida mensagem
Nome Aluno Desconhecido na mesma posio. Outro detalhe importante
referente ao ponto, caso o programador opte em adotar um ponto por comando,
deve atentar para o que mostram os exemplos seguintes:

*> ISTO ESTA ERRADO!


IF

NOME-ALUNO = SPACES.
DISPLAY Nome Aluno Desconhecido... AT 1010.

ELSE.
DISPLAY NOME-ALUNO AT 1010.
END-IF.

*> ISTO ESTA CERTO!


IF

NOME-ALUNO = SPACES
DISPLAY Nome Aluno Desconhecido... AT 1010

ELSE
DISPLAY NOME-ALUNO AT 1010
END-IF.

SOCIESC Sociedade Educacional de Santa Catarina

Programao Aplicada - Cobol

60

O comando IF ir considerar como o fim de seus comandos a clusula END-IF


ou o primeiro ponto encontrado.No

comando

IF,

existem

condies

vlidas

permitidas pelo COBOL, conforme mostra a tabela 7.


Tabela 7 Condies vlidas no Comando IF
CONDIO

SMBOLO

CLUSULA

Igual

EQUAL

Menor que

<

LESS

Menor igual que

<=

NOT GREATER

Maior que

>

GREATER

Maior igual que

>=

NOT LESS

Diferente

<>

NOT EQUAL

Podemos utilizar tanto os smbolos quanto as clusulas. Todos os exemplos a


seguir so vlidos:

IF

NOME-ALUNO = Joo
DISPLAY NOME-ALUNO AT 1010

END-IF
IF

NOME-ALUNO EQUAL Joo


DISPLAY NOME-ALUNO AT 1010

END-IF
IF

MEDIA-ALUNO < 7,0


DISPLAY Aluno em Recuperao... AT 1010

END-IF
IF

MEDIA-ALUNO LESS 7,0


DISPLAY Aluno em Recuperao... AT 1010

END-IF

Vimos at agora o IF com condies simples. Pode ser utilizado tambm com
condies complexas - associao de condies simples com operadores lgicos,
que podem ser:

SOCIESC Sociedade Educacional de Santa Catarina

Programao Aplicada - Cobol

61

AND Uma condio AND ser verdadeira quando todos os itens nela

envolvidos forem verdadeiros.


OR Uma condio OR ser verdadeira quando pelo menos um dos itens

nela envolvidos for verdadeiro.

IF

MEDIA-ALUNO >= 7,0

AND NUMERO-FALTAS <= 25


DISPLAY Aluno Aprovado... AT 1010
END-IF
IF

IDADE >= 18

OR AUTORIZACAO-VIAGEM = S
DISPLAY Aluno Autorizado a Viajar com a Escola! AT 0510
END-IF.

O Comando IF tambm pode ser encadeado no que chamamos de


cadeia de IFs (uma sentena IF dentro de outra).

IF

MEDIA-ALUNO < 4
DISPLAY Aluno Reprovado... AT 1120

ELSE
IF

MEDIA-ALUNO < 7
DISPLAY Aluno em Recuperao... AT 1120

ELSE
DISPLAY Aluno Aprovado... AT 1120
END-IF
END-IF

No exemplo acima, no conseguiramos apenas com um IF (condio simples)


atender s 3 mensagens que poderiam ser exibidas na tela. Note tambm que, para
cada comando IF, s poder haver um ELSE. Recomenda-se tambm adotar como
padro, ao final da declarao IF, o uso do END-IF, deixando o programa melhor
estruturado e de fcil visualizao.

SOCIESC Sociedade Educacional de Santa Catarina

Programao Aplicada - Cobol

62

7.2 Comando Evaluate

Figura 5 Sintaxe geral do comando EVALUATE


Apesar da sintaxe do comando ser extensa, pois o Evaluate na verdade um
sofisticado mecanismo de anlises condicionais ( conforme demonstrado na figura
5), faremos uso dele no seu formato mais simples, porm, um dos mais eficazes.
Utilizaremos o formato:
EVALUATE {NOME-DA-VARIAVEL}
WHEN (CONDIO-1) STATEMENT-1
WHEN (CONDIO-2) STATEMENT-2
...
WHEN OTHER STATEMENT-FINAL
END-EVALUATE.

Dessa forma, submeteremos sempre uma varivel ao comando EVALUATE. A


clusula WHEN testar cada condio descrita, quando achar uma sentena com a
condio verdadeira, executar o comando statement associado a ela. A clusula
WHEN OTHER ser executada caso nenhuma das condies das clusulas
anteriores seja verdadeira. Todos os exemplos abaixo so vlidos:

EVALUATE MEDIA-ALUNO

SOCIESC Sociedade Educacional de Santa Catarina

Programao Aplicada - Cobol

63

WHEN 0
WHEN 1
WHEN 2
WHEN 3 DISPLAY Aluno Reprovado AT 1020
WHEN 4
WHEN 5
WHEN 6 DISPLAY Aluno em Recuperao AT 1020
WHEN OTHER DISPLAY Aluno Aprovado AT 1010
END-EVALUATE
EVALUATE SIGLA-ESTADO
WHEN SC DISPLAY SANTA CATARINA AT 1020
WHEN PR DISPLAY PARANA AT 1020
WHEN SP DISPLAY SO PAULO AT 1020
...
WHEN OTHER DISPLAY ESTADO INVLIDO AT 1020
END-EVALUATE
EVALUATE NUMERO
WHEN 1 ADD 10 TO NUMERO
DISPLAY NUMERO AT 1015
WHEN 2 ADD 20 TO NUMERO
IF

NUMERO < 100


DISPLAY NUMERO AT 1015

ELSE
DISPLAY Numero Excedeu Limite AT 1015
END-IF
END-EVALUATE

8 COMANDO DE DESVIOS
comum, em lgicas complexas e extensas, que o programa, durante o
desenvolvimento, tenha que ser, por muitas vezes, desviado para processar outras
rotinas, retornando ao ponto de partida - ou ainda, dependendo da condio que ,
aps o desvio, no retorne ao ponto original, e continue executando as instrues do
programa deste ponto em diante.
Existem dois comandos para controle dos desvios: o Comando PERFORM e
o COMANDO GO TO.

SOCIESC Sociedade Educacional de Santa Catarina

Programao Aplicada - Cobol

64

8.1 Comando Perform


Declarao usada para transferir explicitamente o controle do programa para
outro procedimento especfico (esteja ele num pargrafo ou seo), retornando ao
ponto de partida sempre que tal procedimento seja encerrado. A palavra que melhor
traduz a declarao PERFORM seria EXECUTE. Vejamos os principais formatos:
8.1.1 Formato 1
Desvio do programa para outra seo. Todos os exemplos a seguir so vlidos:

...
IF IDADE >= 18
PERFORM LISTA-TIT-ELEITOR-SECT
ELSE
DISPLAY Titulo no Obrigatrio AT 1215
END-IF

...
EVALUATE TIPO-SALARIO-PROFESSOR
WHEN Por Hora

PERFORM SALARIO-HORA-SECT

WHEN Por Semana PERFORM SALARIO-SEMANA-SECT


WHEN Por Ms

PERFORM SALARIO-MENSAL-SECT

END-EVALUATE
...
PROCEDURE DIVISION.
INICIO.
DISPLAY ERASE AT 0101.
PERFORM ABRE-ARQUIVOS-SECT.
* A linha acima provoca um desvio no programa para abrir
* arquivos que sero necessrios execuo do mesmo.
* Note que se voc fizer o exerccio de entender o PERFORM
* como uma ordem, ou seja, EXECUTE A SEO ABRE-ARQUIVOS-SECT
* o entendimento desta declarao ser muito mais fcil.
* Aps executar a seo, o programa retorna o controle ao
* ponto de partida, continuando a execut-lo a partir da
* prxima linha vlida.
IF ABRIU-ARQUIVOS = Com Erro
STOP RUN
END-IF

SOCIESC Sociedade Educacional de Santa Catarina

Programao Aplicada - Cobol

65

PERFORM PROCESSA-CALCULO-SECT.
* Novo desvio para executar a seo PROCESSA-CALCULO-SECT.
* Ao finalizar a execuo da seo, o controle do programa volta
* a este ponto, continuando a lgica novamente a partir da
* prxima linha vlida. ISSO UMA CONSTANTE NO USO DESTE
* FORMATO DO PERFORM.
PERFORM FECHA-ARQUIVOS-SECT.
* Por fim, desviamos o programa para executar a seo
* que fecha os arquivos abertos no inicio do mesmo.
STOP RUN.

Como podemos verifica, usando o comando PERFORM, os programas podem


ser melhor estruturados, pois o programador pode criar sees especficas para cada
lgica de seu programa, e execut-las na medida que seu cdigo fonte necessite
destas sees sabendo que, ao executar cada seo, utilizando o PERFORM, o
programa vai retornar ao ponto de origem.
Fazendo uma analogia simples para entender essa questo, imaginemos o
sumrio deste material didtico como um programa COBOL: nele temos os tpicos
de cada aula. Sendo assim, fica fcil, atravs do sumrio, termos uma idia geral de
tudo que o curso abrange, sem que tenhamos que ler todo o contedo.
Na construo de um programa, o mesmo deve ser estruturado de forma que
qualquer programador possa identificar o que ele faz, sem precisar ler todo seu
contedo.

PROCEDURE DIVISION.
INICIO.
PERFORM HISTORICO-COBOL-SECT.
PERFORM ESTRUTURA-FONTE-SECT.
PERFORM DIVISOES-COBOL-SECT.
PERFORM TIPOS-VARIAVEIS-SECT.
PERFORM PRINCIPAIS-COMANDOS-SECT.
...
PERFORM CONCLUSAO-CURSO-SECT.
STOP RUN.

Com esta estrutura, o programador seguiu um padro de desenvolvimento que


permite a qualquer outro programador perceber, em linhas gerais, quais as
proposies do programa.

SOCIESC Sociedade Educacional de Santa Catarina

Programao Aplicada - Cobol

66

8.1.2 Formato 2
Execuo de Procedimentos ou Sees com repeties, atravs da clusula
TIMES (vezes). O literal especificado antes da clusula TIMES pode ser fixo ou uma
varivel. Vejamos os exemplos abaixo:

PERFORM VERIFICA-SENHA-SECT 3 TIMES

Nesse caso, a seo VERIFICA-SENHA-SECT ser executada 3 vezes.

PERFORM CALCULA-JUROS-SECT DIAS-ATRASO TIMES

Onde DIAS-ATRASO a varivel que guarda a quantidade de dias em atraso,


valor que ser base para a quantidade de vezes que a seo CALCULA-JUROS
ser executada.
8.1.3 Formato 3
Execuo de Procedimentos at que (UNTIL) a condio especificada seja
verdadeira. Vejamos:

PERFORM UNTIL FIM-ARQUIVO = S


READ ARQALUNOS AT END
MOVE S TO FIM-ARQUIVO
NOT AT END
MOVE NOME-ALUNO TO LISTA-NOME-ALUNO
MOVE COD-ALUNO

TO COD-ALUNO-EDIT

WRITE LINHA-IMPRESSAO BEFORE 1


END-PERFORM

O procedimento acima ser executado at que a varivel FIM-ARQUIVO esteja


com S situao prevista dentro da lgica do PERFORM Nesse caso, quando o
arquivo de alunos (ARQALUNOS) for lido at o final, o programa vai executar a linha

SOCIESC Sociedade Educacional de Santa Catarina

Programao Aplicada - Cobol

67

abaixo da clusula AT END que justamente mover S para a varivel da


condio especificada no PERFORM.
O programador s dever tomar o cuidado de no criar uma condio que
nunca ocorra isso acarretar em loop (travamento) no programa.

PERFORM UNTIL QTDE-ALUNOS = 0


DISPLAY QTDE-ALUNOS AT LINE LINHA-VAR COLUMN 10
SUBTRACT 1 FROM QTDE-ALUNOS
ADD 1 TO LINHA-VAR
END-PERFORM

Nesse outro exemplo, o PERFORM ser executado at que a condio QTDEALUNOS seja = a ZERO. Nesse formato do PERFORM, para fins de padronizao,
utilizamos clusula END-PERFORM, indicando o encerramento da declarao.
8.2 Comando Go To
Essa declarao desvia a execuo do programa do ponto onde foi inserida,
mas no retorna mais a esse ponto. a principal diferena entre os dois comandos
de desvio. O PERFORM executa a rotina e retorna ao ponto de partida: ao passo
que o GO TO no retorna em hiptese alguma: ele faz o desvio para outro pargrafo
do programa, sem dar continuidade aos comandos que existirem abaixo dele.
Vejamos:

PROCEDURE DIVISION.
INICIO.
PERFORM ABRE-ARQUIVOS-SECT.
IF ABRIU-ARQUIVOS = Com Erro
GO TO FINAL
END-IF.
PROCESSAMENTO.
DISPLAY ERASE AT 0101.
PERFORM PROCESSA-CALCULO-SECT.
RESPOSTA.
DISPLAY Processar Novamente? (S/N) AT 1001.

SOCIESC Sociedade Educacional de Santa Catarina

Programao Aplicada - Cobol

68

ACCEPT RESP AT 1030.


IF RESP NOT EQUAL S AND N
GO TO RESPOSTA
END-IF
IF RESP = S
GO TO PROCESSAMENTO
END-IF
PERFORM FECHA-ARQUIVOS-SECT.
FINAL.
STOP RUN.

Recomenda-se o uso do comando GO TO apenas dentro da mesma


seo. Caso seja utilizado em sees diferentes, se o controle no for bem
rigoroso por parte do programador, o programa pode entrar em loop, no
funcionando adequadamente.

9 COMANDOS ESPECIAIS
Os comandos especiais no COBOL so os seguintes:
Exit
Initialize
String
Unstring
Call
Exit Program
9.1 Exit
Declarao utilizada para encerrar uma seo.

PROCESSA-FOLHA-SECT SECTION.

SOCIESC Sociedade Educacional de Santa Catarina

Programao Aplicada - Cobol

69

PROCESSA-INICIO.
...
[Procedimentos da Seo]
...
PROCESSA-FIM.
EXIT.

9.2 Initialize
Declarao utilizada para inicializar variveis, de acordo com seu tipo de dado
(numrico, alfanumrico ou alfabtico). Recurso muito til quando a lgica do
programa desenvolvido permite que o processamento seja refeito ou que um bloco
de variveis seja utilizado para vrios fins dentro do mesmo programa. As variveis
da WORKING-STORAGE SECTION, principalmente, devem iniciar um segundo
processo com seus valores zerados, exatamente como se fosse a primeira execuo
da rotina. Vejamos:

01

VARIAVEIS-NUMERICAS.
03

VALOR1

PIC 9(009)V99.

03

VALOR2

PIC 9(009)V99.

03

TOTAL-JUROS-MES

PIC 9(003)V99.

03

QTDE-CLIENTES-EM-ATRASO PIC 9(005).

03

QTDE-CLIENTES-EM-DIA

PIC 9(005).

Digamos que, ao final de nosso programa, as variveis estejam com valores,


resultantes do processamento realizado. Se nosso programa permite iniciar o
processamento novamente, com outros parmetros, precisamos limpar (inicializar)
os valores das variveis na memria, seno sero considerados novamente,
modificando o resultado a partir da segunda execuo. Para que no seja
necessrio zerar varivel por varivel, como esto subordinadas ao nvel 01,
podemos fazer isso com um nico comando:

INITIALIZE VARIAVEIS NUMERICAS.

SOCIESC Sociedade Educacional de Santa Catarina

Programao Aplicada - Cobol

70

Tambm podemos inicializar num mesmo comando variveis de tipos de dados


diferentes a declarao INITIALIZE vai limp-las de acordo com a categoria de
dados.

INITIALIZE TOTAL-SALARIO NOME-FUNCIONARIO.

9.2 String
Efetua a concatenao de duas ou mais cadeias de caracteres.
Sua sintaxe a seguinte:
STRING [Identificador-1] DELIMITED BY [Identificador-2 ou SIZE]
INTO [Identificador-3]
END-STRING

Digamos que temos 2 variveis: uma NOME-ESCOLA (com o contedo SOCIESC)


e outra NOME-CURSO (com o contedo COBOL VIRTUAL) e queremos montar o
ttulo de um relatrio com estas duas variveis, jogando o resultado na varivel
TITULO-RELATORIO.
STRING NOME-ESCOLA - NOME-CURSO
DELIMITED BY SIZE
INTO
TITULO-RELATORIO
END-STRING

Sendo assim, o contedo de TITULO-RELATORIO ficou da seguinte forma:


SOCIESC-COBOL VIRTUAL.

9.3 Unstring
Declarao inversa da STRING, que serve para repartir cadeias de caracteres
em itens de dados separados. A sintaxe mais extensa do que o comando STRING.
Vamos nos ater a uma sintaxe mais reduzida:
UNSTRING <Varivel-que-sera-repartida>
DELIMITED BY <caracteres-para-repartio-das-variveis>
INTO <variavel-1> <variavel-2> ...<variavel-N>
COUNT IN <varivel-contagem-bytes> (opcional)

SOCIESC Sociedade Educacional de Santa Catarina

Programao Aplicada - Cobol

71

END-UNSTRING

Vamos repartir a varivel TITULO-RELATORIO, que est com o contedo


SOCIESC-COBOL VIRTUAL.
UNSTRING TITULO-RELATORIO DELIMITED BY -
INTO NOME-ESCOLA,NOME-CURSO
END-UNSTRING

Nesse exemplo, separamos a varivel TITULO-RELATORIO usando a procura


pelo caracter de repartio -, deixando o contedo nas variveis NOME-ESCOLA e
NOME-CURSO.
9.1 Call
Comando utilizado para chamar outros programas dentro da aplicao atual.
Sua sintaxe permite, inclusive, a passagem de parmetros entre os programas,
atravs da Linkage Section (que veremos mais adiante).
Sua sintaxe a seguinte:
CALL NOME-DO-PROGRAMA USING <PARAMETROS>
CALL NOME-DO-PROGRAMA

No primeiro formato, o CALL est chamando outro programa levando


parmetros (usando a clusula USING) que sero utilizados nesse subprograma.
No segundo formato, a chamada realizada sem a passagem de parmetros.
O controle retorna aplicao depois que o subprograma encerrado. Existe
tambm uma clusula adicional que pode ser utilizada em conjunto com este
comando, caso no seja encontrado ou acuse erro na execuo.
CALL NOME-DO-PROGRAMA USING <PARAMETROS> ON OVERFLOW

<SENTENCA>

SOCIESC Sociedade Educacional de Santa Catarina

Programao Aplicada - Cobol

72

A clusula ON OVERFLOW, especificada ao final do comando CALL, indica o


procedimento a ser executado pelo programa em caso de no conseguir executar o
subprograma, por algum problema de processamento ou ambiente.
CALL NOME-DO-PROGRAMA USING <PARAMETROS> ON OVERFLOW

GO TO FIM-PROGRAMA.

9.5 Exit Program


Comando utilizado para encerrar subprogramas e retornar ao programa
principal. No possui variaes e s deve ser utilizado em rotinas chamadas por
outros programas.

Os comandos relacionados a tratamento de arquivos, acesso e gravao


em banco de dados, sero vistos nas aulas especficas desses assuntos.

Com base na grande gama de informaes que obtivemos Nessa aula, a


respeito dos principais comandos do COBOL, convido voc a analisar um programa
um pouco mais extenso, utilizando vrios dos comandos bsicos, aritmticos e de
desvios mostrados. Para auxiliar no entendimento, entre as linhas de cdigo, os
comentrios esto feitos em outra cor, explicando as aes que o programa toma.
IDENTIFICATION DIVISION.
PROGRAM-ID.
PROG4.
AUTHOR.
SOCIESC.
*
* Programa Exemplo - Comandos Bsicos/Aritmticos/Desvios.
*
ENVIRONMENT DIVISION.
SPECIAL-NAMES.
DECIMAL-POINT IS COMMA.
DATA DIVISION.
WORKING-STORAGE SECTION.
01 VARIAVEIS-TEMPORARIAS.
03 DATA-SISTEMA
PIC
03 REDEFINES DATA-SISTEMA.
05 ANO-SISTEMA
PIC
05 MES-SISTEMA
PIC
05 DIA-SISTEMA
PIC

9(006).
9(002).
9(002).
9(002).

SOCIESC Sociedade Educacional de Santa Catarina

Programao Aplicada - Cobol

03 DATA-1
03 REDEFINES DATA-1.
05 DIA-1
05 MES-1
05 ANO-1
05 REDEFINES ANO-1.
07 ANO-FIXO
07 ANO-VARIAVEL
03 DATA-SISTEMA-EDIT
03 PERIODO-CURSO
88 SEMESTRAL
88 ANUAL
03 RESPOSTA
03 NOTAS.
05 NOTA1
05 NOTA2
05 NOTA3
05 NOTA4
05 MEDIA-GERAL

73

PIC 9(008).
PIC 9(002).
PIC 9(002).
PIC 9(004).
PIC 9(002).
PIC 9(002).
PIC 99/99/9999.
PIC X(001).
VALUE "S".
VALUE "A".
PIC X(001).
PIC
PIC
PIC
PIC
PIC

9(002)V99.
9(002)V99.
9(002)V99.
9(002)V99.
9(002)V99.

PROCEDURE DIVISION.
INICIO.
DISPLAY ERASE AT 0101.
DISPLAY "SOCIESC *--- AVALIACAO DE NOTAS ---*" AT 0212
WITH HIGHLIGHT.
* A prxima sentena vai executar uma seo para buscar
* a data do sistema
PERFORM DATA-SISTEMA-SECT.
CURSO.
* A prxima sentena vai perguntar na tela ao usurio se o
* Perodo do Curso Semestral ou Anual, guardando a
* informao na varivel PERIODO-CURSO. Caso o usurio
* tecle ENTER sem informar nada (SPACE), o programa ser
* desviado com GO TO para um pargrafo FIM-PROGRAMA
*
DISPLAY "Perodo Curso: (S)emestral ou (A)nual - " AT 0520.
ACCEPT PERIODO-CURSO AT 0561.
IF PERIODO-CURSO = SPACE
GO TO FIM-PROGRAMA
END-IF
* A prxima sentena no permite que o usurio informe nada
* diferente do exigido pelo programa no caso S para semestral
* ou A para Anual informando algo diferente, volta ao pargrafo
* CURSO, at que seja dado um ENTER ou informada a opo correta.
IF

*
*

*
*
*
*
*
*
*
*
*

PERIODO-CURSO <> "S" AND "A"


GO TO CURSO
END-IF
A prxima sentena executa uma seo ou outra de acordo com o
contedo da varivel PERIODO-CURSO
IF PERIODO-CURSO = "S"
PERFORM NOTAS-SEMESTRE-SECT
ELSE
PERFORM NOTAS-ANO-SECT
END-IF.
Ao final, o programa pergunta ao usurio se ele deseja efetuar
nova avaliao, guardando o resultado na varivel RESPOSTA
Se RESPOSTA for S, algumas variveis so limpas com o comando
INITIALIZE e o programa desviado para o pargrafo INICIO
onde ser novamente executada toda sua lgica.
Qualquer outro caracter diferente de S na varivel RESPOSTA
faz com que o programa no execute os procedimentos do IF,
continuando a execuo aps o END-IF, onde o programa exibe
mensagem FIM DE EXECUCAO e termina.
DISPLAY "Outra Avaliao? (S)im - " AT 2020.
ACCEPT RESPOSTA AT 2046.
IF RESPOSTA = "S"
INITIALIZE PERIODO-CURSO NOTAS

SOCIESC Sociedade Educacional de Santa Catarina

Programao Aplicada - Cobol

74

GO TO INICIO
END-IF.
FIM-PROGRAMA.
DISPLAY FIM DE EXECUCAO! AT 2330 WITH REVERSE-VIDEO.
STOP RUN.
DATA-SISTEMA-SECT SECTION.
DATA-INICIO.
ACCEPT DATA-SISTEMA FROM DATE.
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*

Atravs do comando acima, pegamos a Data da Maquina e


armazenamos na varivel DATA-SISTEMA, no formato AAMMDD
(esta verso do Compilador trabalha com apenas 2 dgitos
para o Ano Corrente).
Exemplo: Caso a data da maquina seja 25.12.2007, nossa varivel
foi capturada com 071225
Para apresentarmos a data capturada no formato 25/12/2007, temos
que efetuar duas operaes:
1) Transferir o contedo de DATA-SISTEMA (com 6 dgitos) para a
varivel DATA-1, que possui 8 dgitos
Porem, como a varivel DATA-SISTEMA est invertida (Ano, Mes
e Dia) devemos mover seu contedo pelos itens redefinidos,
conforme as sentenas abaixo:
MOVE
MOVE
MOVE
MOVE

*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*

DIA-SISTEMA
MES-SISTEMA
20
ANO-SISTEMA

TO
TO
TO
TO

DIA-1
MES-1
ANO-FIXO
ANO-VARIAVEL

Note que a varivel redefinida DATA-1 tem no item ANO-1 outra


redefinio, para compor o ano de 4 dgitos
Conforme o exemplo, movemos 20 para os dois primeiros caracteres
de ANO-1 (atravs da redefinio ANO-FIXO) e movemos em seguida
a varivel ANO-SISTEMA para os dois ltimos caracteres de ANO-1
redefinidos como ANO-VARIAVEL
ANO-SISTEMA = 07

ANO-1 = 0000

ANO-FIXO ANO-VARIAVEL

Movemos 20 para ANO-FIXO


Movemos 07 para ANO-VARIAVEL
Consequentemente, temos ANO-1 = 2007

ANO-FIXO ANO-VARIAVEL
2) Transferimos agora o contedo de DATA-1 para a varivel
Editada DATA-SISTEMA-EDIT
MOVE DATA-1 TO DATA-SISTEMA-EDIT.
DISPLAY DATA-SISTEMA-EDIT AT 0249 WITH REVERSE-VIDEO.
DATA-FIM.
EXIT.

*
* A declarao EXIT indica fim da seo - o Controle do Programa
* retorna para o ponto de partida, na linha seguinte ao comando
* PERFORM DATA-SISTEMA-SECT (pargrafo CURSO, neste caso).
*
NOTAS-SEMESTRE-SECT SECTION.
NOTAS-SEM.
DISPLAY "Informe a Nota 1 - " AT 0820
ACCEPT NOTA1 AT 0839.
IF NOTA1 > 10
GO TO NOTAS-SEM

SOCIESC Sociedade Educacional de Santa Catarina

Programao Aplicada - Cobol

END-IF.
NOTAS-SEM-2.
DISPLAY "Informe a Nota 2 - " AT 0920
ACCEPT NOTA2 AT 0939.
IF NOTA2 > 10
GO TO NOTAS-SEM-2
END-IF
COMPUTE MEDIA-GERAL = (NOTA1 + NOTA2) / 2
PERFORM EXIBE-MENSAGEM-SECT.
NOTAS-SEM-FIM.
EXIT.
*
*
*
*
*

A seo acima NOTAS-SEMESTRE pede duas notas na tela (NOTA1 e NOTA2)


e em seguida calcula a MEDIA-GERAL, executando uma outra seo
para exibir o resultado. Aps o comando EXIT, o controle do programa
retorna ao ponto de partida.
NOTAS-ANO-SECT SECTION.
NOTAS-ANO.
DISPLAY "Informe a Nota 1 - " AT 0820
ACCEPT NOTA1 AT 0839.
IF NOTA1 > 10
GO TO NOTAS-ANO
END-IF.
NOTAS-ANO-2.
DISPLAY "Informe a Nota 2 - " AT 0920
ACCEPT NOTA2 AT 0939.
IF NOTA2 > 10
GO TO NOTAS-ANO-2
END-IF.
NOTAS-ANO-3.
DISPLAY "Informe a Nota 3 - " AT 1020
ACCEPT NOTA3 AT 1039.
IF NOTA3 > 10
GO TO NOTAS-ANO-3
END-IF.
NOTAS-ANO-4.
DISPLAY "Informe a Nota 4 - " AT 1120
ACCEPT NOTA4 AT 1139.
IF NOTA4 > 10
GO TO NOTAS-ANO-4
END-IF
COMPUTE MEDIA-GERAL = (NOTA1 + NOTA2 + NOTA3 + NOTA4) / 4
PERFORM EXIBE-MENSAGEM-SECT.
NOTAS-ANO-FIM.
EXIT.

*
*
*
*
*
*
*
*
*
*
*

A seo acima NOTAS-ANO semelhante seo NOTAS-SEMESTRE


o que muda basicamente que so solicitadas 4 notas ao invs de 2
em seguida tambm calculada a MEDIA-GERAL, e executada seo
que exibe o resultado. Aps o comando EXIT, o controle do programa
retorna ao ponto de partida.
Notem que as duas sees (NOTAS-SEMESTRE e NOTAS-ANO) executam a mesma
seo EXIBE-MENSAGEM ou seja, estamos j iniciando a economizar na
escrita de linhas de cdigo pois a mensagem a mesma nos dois casos
EXIBE-MENSAGEM-SECT SECTION.
EXIBE-INICIO.
IF MEDIA-GERAL < 4
DISPLAY "CARO ALUNO! VC REPROVOU - MEDIA = " AT 1520
DISPLAY MEDIA-GERAL AT 1554
ELSE
IF MEDIA-GERAL < 7
DISPLAY "CARO ALUNO! RECUPERACAO - MEDIA = " AT 1520
DISPLAY MEDIA-GERAL AT 1553
ELSE

SOCIESC Sociedade Educacional de Santa Catarina

75

Programao Aplicada - Cobol

76

DISPLAY "ALUNO APROVADO! MEDIA = " AT 1520


DISPLAY MEDIA-GERAL AT 1544
END-IF
END-IF.
EXIBE-FIM.
EXIT.

Vejamos agora os exemplos do programa sendo executado, como mostram as


figuras 6 e 7:

Figura 6 Exemplo do PROG4 sendo executado com opo Semestral

Figura 7 Exemplo do PROG4 sendo executado com opo Anual


Vejamos agora a extenso do programa sem as linhas de comentrio entre as
linhas de cdigo:
IDENTIFICATION DIVISION.

SOCIESC Sociedade Educacional de Santa Catarina

Programao Aplicada - Cobol

PROGRAM-ID.
AUTHOR.

77

PROG4.
SOCIESC.

*
* Programa Exemplo com Comandos Bsicos, Aritmticos e de Desvios.
*
ENVIRONMENT DIVISION.
SPECIAL-NAMES.
DECIMAL-POINT IS COMMA.
DATA DIVISION.
WORKING-STORAGE SECTION.
01 VARIAVEIS-TEMPORARIAS.
03 DATA-SISTEMA

PIC 9(006).

03 REDEFINES DATA-SISTEMA.
05 ANO-SISTEMA

PIC 9(002).

05 MES-SISTEMA

PIC 9(002).

05 DIA-SISTEMA
03 DATA-1

PIC 9(002).
PIC 9(008).

03 REDEFINES DATA-1.
05 DIA-1

PIC 9(002).

05 MES-1

PIC 9(002).

05 ANO-1

PIC 9(004).

05 REDEFINES ANO-1.
07 ANO-FIXO

PIC 9(002).

07 ANO-VARIAVEL

PIC 9(002).

03 DATA-SISTEMA-EDIT

PIC 99/99/9999.

03 PERIODO-CURSO

PIC X(001).

88 SEMESTRAL

VALUE "S".

88 ANUAL

VALUE "A".

03 RESPOSTA

PIC X(001).

03 NOTAS.
05 NOTA1

PIC 9(002)V99.

05 NOTA2

PIC 9(002)V99.

05 NOTA3

PIC 9(002)V99.

05 NOTA4

PIC 9(002)V99.

05 MEDIA-GERAL

PIC 9(002)V99.

PROCEDURE DIVISION.
INICIO.
DISPLAY ERASE AT 0101.
DISPLAY "SOCIESC *--- AVALIACAO DE NOTAS ---*" AT 0212
WITH HIGHLIGHT.
PERFORM DATA-SISTEMA-SECT.
CURSO.
DISPLAY "Perodo Curso: (S)emestral ou (A)nual - " AT 0520.
ACCEPT PERIODO-CURSO AT 0561.

SOCIESC Sociedade Educacional de Santa Catarina

Programao Aplicada - Cobol

IF

78

PERIODO-CURSO = SPACE
GO TO FIM-PROGRAMA

END-IF
IF

PERIODO-CURSO <> "S" AND "A"


GO TO CURSO

END-IF
IF

PERIODO-CURSO = "S"
PERFORM NOTAS-SEMESTRE-SECT

ELSE
PERFORM NOTAS-ANO-SECT
END-IF.
DISPLAY "Outra Avaliao? (S)im - " AT 2020.
ACCEPT RESPOSTA AT 2046.
IF

RESPOSTA = "S"
INITIALIZE PERIODO-CURSO NOTAS
GO TO INICIO

END-IF.
FIM-PROGRAMA.
DISPLAY FIM DE EXECUCAO! AT 2330 WITH REVERSE-VIDEO.
STOP RUN.
DATA-SISTEMA-SECT SECTION.
DATA-INICIO.
ACCEPT DATA-SISTEMA FROM DATE.
MOVE DIA-SISTEMA TO DIA-1
MOVE MES-SISTEMA TO MES-1
MOVE 20

TO ANO-FIXO

MOVE ANO-SISTEMA TO ANO-VARIAVEL


MOVE DATA-1 TO DATA-SISTEMA-EDIT.
DISPLAY DATA-SISTEMA-EDIT AT 0249 WITH REVERSE-VIDEO.
DATA-FIM.
EXIT.
NOTAS-SEMESTRE-SECT SECTION.
NOTAS-SEM.
DISPLAY "Informe a Nota 1 - " AT 0820
ACCEPT NOTA1 AT 0839.
IF

NOTA1 > 10
GO TO NOTAS-SEM

END-IF.
NOTAS-SEM-2.
DISPLAY "Informe a Nota 2 - " AT 0920
ACCEPT NOTA2 AT 0939.
IF

NOTA2 > 10
GO TO NOTAS-SEM-2

END-IF

SOCIESC Sociedade Educacional de Santa Catarina

Programao Aplicada - Cobol

COMPUTE MEDIA-GERAL = (NOTA1 + NOTA2) / 2


PERFORM EXIBE-MENSAGEM-SECT.
NOTAS-SEM-FIM.
EXIT.
NOTAS-ANO-SECT SECTION.
NOTAS-ANO.
DISPLAY "Informe a Nota 1 - " AT 0820
ACCEPT NOTA1 AT 0839.
IF

NOTA1 > 10
GO TO NOTAS-ANO

END-IF.
NOTAS-ANO-2.
DISPLAY "Informe a Nota 2 - " AT 0920
ACCEPT NOTA2 AT 0939.
IF

NOTA2 > 10
GO TO NOTAS-ANO-2

END-IF.
NOTAS-ANO-3.
DISPLAY "Informe a Nota 3 - " AT 1020
ACCEPT NOTA3 AT 1039.
IF

NOTA3 > 10
GO TO NOTAS-ANO-3

END-IF.
NOTAS-ANO-4.
DISPLAY "Informe a Nota 4 - " AT 1120
ACCEPT NOTA4 AT 1139.
IF

NOTA4 > 10
GO TO NOTAS-ANO-4

END-IF
COMPUTE MEDIA-GERAL = (NOTA1 + NOTA2 + NOTA3 + NOTA4) / 4
PERFORM EXIBE-MENSAGEM-SECT.
NOTAS-ANO-FIM.
EXIT.
EXIBE-MENSAGEM-SECT SECTION.
EXIBE-INICIO.
IF

MEDIA-GERAL < 4
DISPLAY "CARO ALUNO! VC REPROVOU - MEDIA = " AT 1520
DISPLAY MEDIA-GERAL AT 1554

ELSE
IF

MEDIA-GERAL < 7
DISPLAY "CARO ALUNO! RECUPERACAO - MEDIA = " AT 1520
DISPLAY MEDIA-GERAL AT 1553

ELSE

SOCIESC Sociedade Educacional de Santa Catarina

79

Programao Aplicada - Cobol

80

DISPLAY "ALUNO APROVADO! MEDIA = " AT 1520


DISPLAY MEDIA-GERAL AT 1544
END-IF
END-IF.
EXIBE-FIM.
EXIT.

Sntese

Nessa aula aprendemos quais os principais comandos do COBOL, que


podem ser utilizados em praticamente todos os dialetos de COBOL existentes, com
variaes mnimas. Vimos tambm o formato padro (sintaxe) de cada um dos
comandos e como podemos aplic-los dentro de um programa COBOL.

Exerccios Propostos
1.

Assinale Verdadeiro (V) ou Falso (F) nas afirmaes abaixo:

) O Comando DISPLAY ERASE AT 0101 limpa a tela.

) O comando ACCEPT serve apenas para entrada de dados relativas a senha.

) No uso do comando MOVE, as variveis envolvidas podem ser de tipos de

dados diferentes.
(

) Os comandos para operao aritmticas so: ADD, SUBTRACT, DIVIDE,

MULTIPLY e COMPUTE.
(

) Os comandos condicionais so o IF e o EVALUATE.

2. Construa uma sentena IF, comparando a varivel IDADE-ALUNO, exibindo


mensagem ALUNO MAIOR DE IDADE ou ALUNO MENOR DE IDADE . A
comparao deve ser feita com base na idade legal do Brasil, 18 anos:

SOCIESC Sociedade Educacional de Santa Catarina

Programao Aplicada - Cobol

81

___________________________________________________________________
___________________________________________________________________
___________________________________________________________________
__
3. Complete as sentenas.
a)

A palavra que melhor traduz a declarao __________ seria EXECUTE.

b)

Recomenda-se o uso do comando ___________ apenas dentro da mesma

seo.
c)

O comando ________________ utilizado para chamar outros programas

dentro da aplicao atual.


4. No programa exemplo (PROG4), qual a linha do programa que solicita ao
usurio que digite o perodo do curso (Semestral ou Anual):
___________________________________________________________________
___________________________________________________________________
___________________________________________________________________
___
5. Cite um dos exemplos de comandos com operao aritmtica presentes no
PROG4:
___________________________________________________________________
___________________________________________________________________
___________________________________________________________________
___

SOCIESC Sociedade Educacional de Santa Catarina

Programao Aplicada - Cobol

Aula 6

COMPILAO E LINKEDIO
Objetivos da Aula
Ao final desta aula, voc dever ser capaz de:
 Utilizar o compilador COBOL MicroSoft 4.5, desde a configurao
das variveis de ambiente at a compilao dos programas e
gerao dos executveis.
Contedos da Aula
Acompanhe os assuntos desta aula, se preferir, ao
terminar, assinale o contedo j estudado.


Definio de Variveis de Ambiente

Diretrizes de Compilao e Linkedio

Rastreando Erros de Compilao

Animando Programas

Exerccios Propostos
Bem-vindo(a) a nossa sexta aula. Nessa aula vamos
conhecer o compilador do COBOL MicroSoft 4.5. Como

mencionamos no incio do nosso mdulo, construiremos os


programas usando o EDIT mdo MS-DOS que, por possuir
marcao de linha e coluna, vai nos auxiliar muito quando formos
ajustar, corrigir e testar os programas.
Alm do mais, o EDITOR est presente em qualquer verso do
Windows, o que pesou consideravelmente na deciso por esse
aplicativo.
Bons Estudos!

SOCIESC Sociedade Educacional de Santa Catarina

82

Programao Aplicada - Cobol

83

1 DEFINIO DE VARIVEIS DE AMBIENTE


normal que uma ferramenta de programao como o COBOL, para funcionar
adequadamente em qualquer equipamento, necessite que algumas parametrizaes
sejam estabelecidas, tanto em estaes com WIN98, NT, 2000 ou Windows XP.
Partiremos do princpio de que voc, aluno, j possui uma estao com o
compilador COBOL instalado e liberado para uso.
Sendo assim, voc poder observar que existe uma pasta principal C:\COBOL
em seu equipamento, dentro da qual, temos a pasta \BINR, e o arquivo NEWVARS.BAT. Vejamos essa estrutura na figura 8:

Figura 8 Exemplo do diretrio de instalao do COBOL, evidenciando a pasta BINR


e o arquivo NEW-VARS.BAT
Nesse arquivo esto contidas as configuraes para estabelecer o ambiente de
compilao do COBOL. Criaremos um atalho apontando para esse arquivo. Ao
acess-lo, ser aberta uma tela com o PROMPT do MS-DOS na pasta
C:\COBOL\BINR, a qual adotaremos como padro para armazenamento dos
programas fonte COBOL (gerados com extenso .CBL).
Vejamos agora o contedo do arquivo NEW-VARS.BAT, na figura 9:

SOCIESC Sociedade Educacional de Santa Catarina

Programao Aplicada - Cobol

84

Figura 9 Arquivo NEW-VARS.BAT, que prepara o ambiente para execuo do


MicroSoft COBOL 4.5

Se o seu equipamento possuir sistema operacional win98, substituir


cmd.exe por command.com na ltima linha do arquivo.
Se voc certificou-se de que o arquivo est com a configurao adequada,
basta agora criar um atalho na rea de Trabalho, conforme exemplo demonstrado
na figura 10:

Figura 10 Atalho para execuo do arquivo NEW-VARS.BAT.

SOCIESC Sociedade Educacional de Santa Catarina

Programao Aplicada - Cobol

85

Chamaremos o atalho de PROMT do COBOL. Basta execut-lo para estar com


o ambiente preparado para trabalhar com o COBOL. Veja a figura 11:

Figura 11 Ambiente preparado para trabalhar com o MicroSoft COBOL 4.5, j


posicionado no diretrio C:\COBOL\BINR
2 DIRETRIZES DE COMPILAO E LINKEDIO
Entende-se por compilao o processo que verifica a sintaxe das declaraes,
diretivas e comandos, checando possveis erros no programa. Esse o primeiro
processo, que transforma o programa fonte com extenso CBL num programa com
extenso OBJ, caso no possua erros. Para submeter um programa ao compilador,
devemos digitar o seguinte comando:
COBOL <NOME-DO-PROGRAMA.CBL>;

COBOL PROG1.CBL;

O smbolo ponto e vrgula ; faz com que a compilao seja direta, sem a
necessidade de entrada de outros parmetros. Vejamos o exemplo da compilao
na figura 12:

SOCIESC Sociedade Educacional de Santa Catarina

Programao Aplicada - Cobol

86

Figura 12 Prompt do COBOL depois da compilao de PROG1.CBL


Em destaque, no retngulo verde, o comando de compilao e os dados do
compilador - no retngulo amarelo a mensagem de compilao sem erros
(CHECKING COMPLETE WITH NO ERROS STARTING CODE GENERATION) e,
logo em seguida, a visualizao do arquivo gerado PROG1.OBJ.
Com relao Linkedio, podemos definir como o processo que transforma o
programa compilado (.OBJ) num programa executvel (.EXE) O Link s pode ser
executado num programa j compilado, nunca direto num programa fonte com
extenso CBL. Para linkar um programa devemos digitar o seguinte comando:
LINK/F NOME-PROGRAMA.OBJ+ADIS+ADISINIT+ADISKEY+EXTFH;

LINK/F PROG1.OBJ+ADIS+ADISINIT+ADISKEY+EXTFH;

Vejamos o exemplo da linkedio na figura 13:

Figura 13 Prompt do COBOL depois da linkedio de PROG1.OBJ


SOCIESC Sociedade Educacional de Santa Catarina

Programao Aplicada - Cobol

87

Em destaque, no retngulo verde, o comando de linkedio, cujos parmetros


de controle sero incorporados no programa e, logo em seguida, a visualizao do
arquivo gerado PROG1.EXE.
Executando agora o PROG1.EXE, teremos o resultado mostrado como
exemplo em nossa segunda aula.
Vimos que para gerar um executvel nessa verso do COBOL, precisamos
executar duas etapas: compilao e linkedio. Para facilitar as prximas
compilaes, criaremos um arquivo de lote (com extenso .BAT) que far, com um
nico comando, as duas coisas:
Abra um novo arquivo no EDIT e digite o seguinte contedo:
COBOL %1.CBL;
LINK/F %1.OBJ+ADIS+ADISINIT+ADISKEY+EXTFH;

Agora salve esse arquivo com o nome de COMPILA.BAT na pasta


C:\COBOL\BINR.
Note que o contedo do arquivo so as duas linhas necessrias para gerao
do programa executvel, com a diferena de que, ao invs do nome do programa,
temos um smbolo (%1) que representa substituio por um valor digitado (que
neste caso ser o nome do programa a ser compilado e linkado). Com esse arquivo,
a compilao agora fica simplificada com o comando abaixo:
COMPILA PROG1

(Lembrando que PROG1 ser substitudo no arquivo COMPILA.BAT, no local do


smbolo %1). Constatemos isso na figura 14:

SOCIESC Sociedade Educacional de Santa Catarina

Programao Aplicada - Cobol

88

Figura 14 Compilao e Linkedio processadas pelo arquivo COMPILA.BAT


3 RASTREANDO ERROS DE COMPILAO
At agora foi tudo muito bem, mas medida que seus programas forem ficando
mais extensos e complexos, nem sempre a compilao ser feita sem erros. E como
podemos fazer para encontrar os erros com agilidade em programas extensos?
Bem, o COBOL tem um recurso na forma de compilao para auxiliar nesses casos,
gerando um arquivo com extenso (LST) ou seja, listagem do Fonte, numerando
as linhas de forma seqencial e apontando onde o compilador encontrou os erros.
Lembram da rea Reservada do COBOL? Da coluna 01 at a 06? Justamente
esse um dos casos que o COBOL usa essa rea para numerar no arquivo LST as
linhas, facilitando ao programador descobrir onde esto os erros.
Para gerarmos um arquivo LST no podemos compilar o programa fonte com
; no final. Sendo assim, a compilao para os casos em que o programador
necessita do arquivo LST dever ser feita conforme mostra a figura 15:

SOCIESC Sociedade Educacional de Santa Catarina

Programao Aplicada - Cobol

89

Figura 15 Compilao para gerao do arquivo LST


Aps a compilao sem o ponto e vrgula, o compilador pedir trs informaes
qual o nome do arquivo .OBJ, caso o usurio queira que seja diferente do .CBL
qual o nome da listagem do fonte (Essa a informao que nos interessa e est em
destaque no retngulo vermelho), o nico campo que devemos preencher
(SOURCE LISTING), repetindo o nome do programa, como padro. Ele pedir
tambm o nome da listagem do objeto, informao que podemos ignorar com
ENTER. Ao final, com esse procedimento de compilao, gerado o PROG1.LST .
Vejamos o PROG1.LST na figura 16, para verificarmos a diferena com relao
ao PROG1.CBL:

Figura 16 Imagem do PROG1.LST

SOCIESC Sociedade Educacional de Santa Catarina

Programao Aplicada - Cobol

90

Podemos notar que esse arquivo semelhante ao programa fonte, porm com
uma srie de marcaes e controles da linguagem e, nas linhas vlidas, o contador
seqencial da Coluna 01 at a 06. Vamos agora simular um erro no PROG1.CBL,
para verificar a mensagem do compilador.
Caro Aluno, favor abrir o arquivo PROG1.CBL pelo EDIT e, na linha DISPLAY
ERASE AT 0101, informe DIPLAY ERAS AT 0101. Salve o arquivo e compile o
programa novamente.
O resultado ser o erro que mostrado na figura 17:

Figura 17 Exemplo de erro de compilao.


Veja que o compilador aponta o nmero da linha onde ocorreu o erro de
sintaxe, bem como descreve o contedo da linha e, abaixo, o motivo do erro.
Podemos verificar que o erro est na linha 12. Visualizando a imagem anterior
(PROG1.LST), constatamos que a linha 12 refere-se justamente linha que
mexemos propositalmente, deixando seu contedo incorreto.
4 ANIMANDO PROGRAMAS
Muitas vezes, apesar do programa ser compilado com sucesso e no possuir
erros de sintaxe (declaraes), possui os chamados erros de execuo, ou seja,
sua lgica no est funcionando de acordo com sua proposio. O COBOL possui
uma ferramenta para DEBUG, que permite rastrear o programa em tempo de
execuo, linha por linha, possibilitando ao programador testar o funcionamento de
seu programa e corrigir eventuais falhas de lgica o ANIMATE.EXE.
Para compilar um programa para animao, a sintaxe a seguinte:
COBOL PROG1 ANIM;

Logo em seguida, deve ser executado o LINK.


LINK PROG1;

Finalmente, para animar o programa, executa-se o seguinte comando:

SOCIESC Sociedade Educacional de Santa Catarina

Programao Aplicada - Cobol

91

ANIMATE PROG1

Agora voc dever digitar o programa abaixo no EDIT e salv-lo com o nome
externo PROG3.CBL, na pasta C:\COBOL\BINR esse programa servir de base
para executarmos o ANIMATE.EXE, pois o mesmo no apresentar erros de
compilao. Existe, porm, uma sentena mal formulada no meio da rotina,
provocando erro no resultado final apresentado.

No esquea de atentar s posies das colunas, para sees,


pargrafos, variveis e comandos.
*
*...5....0....5....0....5....0....5....0....5....0....5....0....5....0
*
IDENTIFICATION DIVISION.
PROGRAM-ID.
AUTHOR.

PROG3.
SOCIESC.

*
* Programa Exemplo de uso do DISPLAY/ACCEPT/MOVE
*
DATA DIVISION.
WORKING-STORAGE SECTION.
01

01

TABELA-MESES.
03

FILLER

PIC X(009) VALUE "JANEIRO".

03

FILLER

PIC X(009) VALUE "FEVEREIRO".

03

FILLER

PIC X(009) VALUE "MARCO".

03

FILLER

PIC X(009) VALUE "ABRIL".

03

FILLER

PIC X(009) VALUE "MAIO".

03

FILLER

PIC X(009) VALUE "JUNHO".

03

FILLER

PIC X(009) VALUE "JULHO".

03

FILLER

PIC X(009) VALUE "AGOSTO".

03

FILLER

PIC X(009) VALUE "SETEMBRO".

03

FILLER

PIC X(009) VALUE "OUTUBRO".

03

FILLER

PIC X(009) VALUE "NOVEMBRO".

03

FILLER

PIC X(009) VALUE "DEZEMBRO".

REDEFINES TABELA-MESES.
03

MES-EXTENSO

01

DATA1

01

REDEFINES DATA1.

PIC X(009) OCCURS 12 TIMES.


PIC 9(008).

SOCIESC Sociedade Educacional de Santa Catarina

Programao Aplicada - Cobol

01

92

03

DIA

PIC 9(002).

03

MES

PIC 9(002).

03

ANO

PIC 9(004).

DATA-EDIT

PIC 99/99/9999.

PROCEDURE DIVISION.
INICIO-SECTION.
DISPLAY ERASE AT 0101.
DISPLAY "Digite a Data (DD/MM/AAAA) - " AT 1010.
CAMPO-DATA.
ACCEPT DATA1 AT 1040 ON ESCAPE
DISPLAY "VC TECLOU ESC" AT 2460 WITH BLINK
GO TO FIM.
IF

MES > 01 OR < 12


GO TO CAMPO-DATA

END-IF.
DISPLAY MES-EXTENSO(MES) AT 1510.
MOVE DATA1 TO DATA-EDIT.
DISPLAY DATA-EDIT AT 1530.
DISPLAY SPACES AT 1601.
FIM.
STOP RUN.

Aps a digitao do programa, vamos submet-lo, primeiramente, ao nosso


mtodo tradicional de compilao. Caso voc no tenha cometido nenhum erro na
digitao do programa, a compilao ter o resultado conforme mostra a figura 18:

Figura 18 Compilao do PROG3.CBL aps digitao no EDIT.

SOCIESC Sociedade Educacional de Santa Catarina

Programao Aplicada - Cobol

93

O objetivo do programa mostrar o ms por extenso e a data digitada pelo


usurio em formato Editado. A sentena abaixo, apesar de estar escrita
corretamente, do ponto de vista da lgica est equivocada. Vejamos:
IF

MES > 01 OR < 12


GO TO CAMPO-DATA

END-IF.

Em outras palavras, a consistncia diz que se o ms for maior que 01 ou menor


que 12, o programa deve retornar ao pargrafo CAMPO-DATA para pedir nova data,
como se qualquer ms neste intervalo no fosse vlido. Na realidade, a sentena
deveria estar escrita com os operadores invertidos.
Formato Correto:
IF

MES < 01 OR > 12


GO TO CAMPO-DATA

END-IF.

Sendo assim, como o erro est na lgica, podemos nos valer da animao para
encontr-lo de forma mais rpida. Vamos compilar o PROG3 e anim-lo, conforme
mostramos nas linhas abaixo.
COBOL PROG3 ANIM;
LINK PROG3;
ANIMATE PROG3

Aps a execuo do comando, o programa ser exibido em estado de


animao (DEBUG), na primeira linha da PROCEDURE DIVISION. Veja a figura 19:

Figura 19 Tela de exemplo animando PROG3.CBL


SOCIESC Sociedade Educacional de Santa Catarina

Programao Aplicada - Cobol

94

O utilitrio de animao possui uma srie de recursos. Vamos ver os principais:


F2 Mostra, durante o processo de animao, como est a sua tela,
durante a execuo do programa. Pressionando essa tecla uma vez,
voc ver a tela de seu programa e, pressionando-a pela segunda vez,
voc retorna tela com as linhas do seu programa fonte.
Step Pressionando a tecla S, o seu programa ser executado linha
por linha. Certamente a tecla que mais se usa na animao dos
programas.
ESC Abandona a animao.
Query e Cursor-Name Pressionando a tecla Q, voc poder
consultar o valor de uma varivel na linha que o programa est
executando. Pressionando logo aps a tecla C , o utilitrio de
animao permite exibir o valor de qualquer varivel que esteja na
posio do cursor.
Agora que voc est no incio da animao do programa, pressione por duas
vezes a tecla S (sero executadas duas linhas) e seu cursor estar agora na linha
39, no campo ACCEPT, conforme mostra a figura 20.

Figura 20 Animao do PROG3, com duas linhas executadas.

SOCIESC Sociedade Educacional de Santa Catarina

Programao Aplicada - Cobol

95

Ao teclar S novamente, ser executada a linha do ACCEPT, conforme


exemplo mostrado na figura 21:

Figura 21 Animao do Prog3 pedindo campo data na tela.


Vejamos agora uma ltima animao, na figura 22, mostrando claramente onde
est a linha com o erro na sentena:

Figura 22 Animao do PROG3 caindo de forma incorreta na clusula Statement


do IF, voltando ao pargrafo CAMPO-DATA.

SOCIESC Sociedade Educacional de Santa Catarina

Programao Aplicada - Cobol

96

Vamos agora inverter os sinais da sentena, submeter nosso programa


PROG3.CBL ao compilador e, logo em seguida execut-lo, informando a mesma
data - 16012007. Veja a figura 23:

Figura 23 Animao do PROG3


Veja agora, nas figuras 24 e 25, as funcionalidades das teclas Q e C para
visualizar o contedo de variveis durante a animao. Note, na ltima linha da
figura 24, no canto inferior esquerdo, o valor da varivel MS (01)

Figura 24 Animao do PROG3 teclando Q (Query)

SOCIESC Sociedade Educacional de Santa Catarina

Programao Aplicada - Cobol

97

Figura 25 Animao do PROG3 teclando C (Cursor-name), aps termos teclado


Q.
Voc dever agora digitar o programa da aula anterior (PROG4.CBL) e salv-lo
na pasta padro. Na seqncia, efetue a compilao e verifique eventuais erros de
sintaxe. Quando a compilao ocorrer sem erros, execute o programa para testar
sua lgica.

Sntese
Nessa aula aprendemos a configurar o ambiente para execuo do COBOL
MicroSoft. Tambm aprendemos como compilar e linkar os programas, bem como
tambm vimos o recurso para depurao de erros disponvel na ferramenta.

SOCIESC Sociedade Educacional de Santa Catarina

Programao Aplicada - Cobol

98

Exerccios Propostos
1.

Com base em PROG3.CBL e PROG4.CBL, crie um novo programa

PROG5.CBL, com as seguintes especificaes:


a) O programa dever pedir na tela a Idade do Aluno. Se for menor de 16 ou
maior de 70, dever exibir mensagem afirmando que as Datas esto fora do
limite permitido para cursar a faculdade.
b) O programa dever pedir na tela a informao sobre o Estado Civil do Aluno
(solteiro, casado, divorciado), testando a primeira letra de cada situao (S, C,
ou D). Qualquer parmetro que no atenda essa especificao, o sistema no
dever seguir em frente.
c) Os campos pedidos na tela devero ter a possibilidade de deixar o usurio sair
teclando ESC
d) Quando o Estado Civil for Divorciado, se a idade do aluno for > 40 no aceitar.
Voltar o programa ao seu incio.
e) Para os outros casos, exibir mensagem PARABENS, SEU PERFIL FOI
APROVADO! na ltima linha da tela e finalizar o programa.

SOCIESC Sociedade Educacional de Santa Catarina

Programao Aplicada - Cobol

Aula 7

INTERFACE COM USURIO

Objetivos da Aula
Ao final da aula, voc dever ser capaz de:
 Definir a forma de construo e aplicao de telas no COBOL;
 Alterar os atributos de cores das telas.

Contedos da Aula
Acompanhe os assuntos desta aula, se preferir, ao
terminar, assinale o contedo j estudado.


Definio e Programa Exemplo

Principais Itens de uma Screen Section

Exerccios Propostos

Bem-vindo (a) a nossa stima aula. Nessa aula


veremos a chamada Interface com o usurio. No nos
aprofundaremos muito na metodologia de construo de telas em
ambiente caracter, pois no esse o propsito maior de nosso
mdulo. Contudo, como no estudaremos nenhuma interface
grfica em COBOL, em virtude da grande variao de dialetos
entre as ferramentas de desenvolvimento COBOL para ambiente
grfico, necessrio que voc adquira uma noo bsica sobre a
construo de interfaces, pois no desenvolvimento de qualquer
aplicao, seja grfica ou caracter, a interface um dos principais
pontos a serem considerados.
Bons Estudos!

SOCIESC Sociedade Educacional de Santa Catarina

99

Programao Aplicada - Cobol

100

1 DEFINIO E PROGRAMA EXEMPLO


Nesta seo, so especificadas as propriedades de tela a serem utilizadas pelo
programa, para interagir com o usurio. Vejamos o programa exemplo a seguir,
atentando principalmente estrutura da SCREEN SECTION:

IDENTIFICATION DIVISION.
PROGRAM-ID.
AUTHOR.

MENU.
SOCIESC.

* Menu para Cadastro de Alunos


*
DATA DIVISION.
WORKING-STORAGE SECTION.
01

OPCAO

PIC 9(001) VALUE ZERO.

SCREEN SECTION.
01 TELA-PRINCIPAL.
02 BLANK SCREEN.
02 LINE 01 COL 21 VALUE "*----------------------------------*".
02 LINE 02 COL 21 VALUE "*

*".

02 LINE 03 COL 21 VALUE "* MANUTENCAO ALUNOS-Menu Principal *".


02 LINE 04 COL 21 VALUE "*

*".

02 LINE 05 COL 21 VALUE "*----------------------------------*".


02 LINE 06 COL 21 VALUE "*

*".

02 LINE 07 COL 21 VALUE "*

*".

02 LINE 08 COL 21 VALUE "*

1 - Inclusao

*".

02 LINE 09 COL 21 VALUE "*

2 - Alteracao

*".

02 LINE 10 COL 21 VALUE "*

3 - Exclusao

*".

02 LINE 11 COL 21 VALUE "*

4 - Consulta

*".

02 LINE 12 COL 21 VALUE "*

5 - Relatorio

*".

02 LINE 13 COL 21 VALUE "*

6 - Sair

*".

02 LINE 14 COL 21 VALUE "*


02 LINE 15 COL 21 VALUE "*

*".
Opcao: ( )

*".

02 LINE 16 COL 21 VALUE "*

*".

02 LINE 17 COL 21 VALUE "*

*".

02 LINE 18 COL 21 VALUE "*----------------------------------*".


PROCEDURE DIVISION.
INICIO.
DISPLAY TELA-PRINCIPAL.
ACCEPT OPCAO AT 1541 WITH AUTO.
IF

OPCAO < 1 OR > 6

SOCIESC Sociedade Educacional de Santa Catarina

Programao Aplicada - Cobol

101

INITIALIZE OPCAO
GO TO INICIO
END-IF
EVALUATE OPCAO
WHEN 1
WHEN 2
WHEN 3 CALL "CADALUNO" USING OPCAO ON OVERFLOW
PERFORM MENSAGEM-SECT
WHEN 4 CALL "CONALUNO" ON OVERFLOW
PERFORM MENSAGEM-SECT
WHEN 5 CALL "RELALUNO" ON OVERFLOW
PERFORM MENSAGEM-SECT
WHEN 6 GO TO FIM-PROGRAMA
END-EVALUATE.
FIM-PROGRAMA.
DISPLAY "FIM DE EXECUCAO" AT 2335 WITH REVERSE-VIDEO.
STOP RUN.
MENSAGEM-SECT SECTION.
MENSAGEM.
DISPLAY "Rotinas nao Disponiveis!" AT 2230 WITH HIGHLIGHT.
STOP " ".
MENSAGEM-FIM.
EXIT.

O resultado desse programa, quando executado, tal qual o que mostramos


na figura 26:

Figura 26 Resultado da execuo do programa MENU

SOCIESC Sociedade Educacional de Santa Catarina

Programao Aplicada - Cobol

102

Note que o programa no inicia com o tradicional DISPLAY ERASE AT 0101


O DISPLAY feito diretamente na tela definida na SCREEN SECTION. Alm de
exibir a tela, o programa fez um ACCEPT. Se verificarmos o cdigo-fonte existe a
seguinte linha:
ACCEPT OPCAO AT 1541 WITH AUTO.

Isso far com que o programa transfira o que for digitado para OPCAO, dessa
forma, o programa poder identificar o que foi digitado pelo usurio.
A descrio de uma tela na SCREEN SECTION possui a mesma estrutura de
um item de grupo (iniciando no nvel 01), onde se especifica linha a linha o que vai
ser exibido e o que vai ser solicitado ao usurio. Todavia, a SCREEN SECTION
um recurso opcional para montagem de telas, ausente em nossos outros programas,
como podemos constatar. A montagem da tela pode ser confeccionada diretamente
na PROCEDURE DIVISION, com o uso de comandos ACCEPT e DISPLAY logo,
a utilizao ou no da seo fica a critrio do programador.
Principais itens de uma SCREEN SECTION:
BLANK SCREEN Limpa a tela. Equivale ao DISPLAY ERASE AT
0101. A diferena que o DISPLAY um comando direto da
PROCEDURE, enquanto essa clusula s pode ser usada na definio
de uma tela via SCREEN SECTION.
LINE / COL Clusulas que especificam a linha e coluna do contedo
declarado aps a especificao VALUE.
02 LINE 03 COL 21 VALUE "* MANUTENCAO ALUNOS-Menu Principal *".

HIGHLIGHT / REVERSE-VIDEO Clusulas que podem ser utilizadas


tanto na SCREEN SECTION como em conjunto com o comando
DISPLAY, conforme temos em nosso programa exemplo (figura 27). A
primeira exibe a mensagem num tom de cor mais claro e a segunda faz
inverso entre a cor de fundo da tela e a cor dos caracteres.

SOCIESC Sociedade Educacional de Santa Catarina

Programao Aplicada - Cobol

103

DISPLAY "FIM DE EXECUCAO" AT 2335 WITH REVERSE-VIDEO.


DISPLAY "Rotinas no Disponveis!" AT 2230 WITH HIGHLIGHT.

Figura 27 Exemplo do Resultado do DISPLAY com clusula HIGHLIGHT e


REVERSE-VIDEO.
FOREGROUND-COLOR e BACKGROUND-COLOR Atravs dessas
clusulas, possvel especificar quais cores o programa deve utilizar,
conforme a tabela 8 estabelece:
Tabela 8 Cores utilizadas nos programas
0

Preto

Azul

Verde

Ciano

Vermelho

Magenta

Marrom ou Amarelo

Branco

Salve agora o programa MENU.CBL em seu diretrio de trabalho. Depois


salve-o novamente com o nome MENUCOR.CBL e faa as seguintes adaptaes,
em destaque na cor azul:

PROGRAM-ID.

MENUCOR.

02 BLANK SCREEN BACKGROUND-COLOR 4 FOREGROUND-COLOR 7.

SOCIESC Sociedade Educacional de Santa Catarina

Programao Aplicada - Cobol

104

Compile o programa e execute-o. O resultado dever ser tal qual mostramos na


figura 28:

Figura 28 Exemplo da Tela com a execuo do programa MENUCOR.


Conforme a tabela de cores, a tela foi exibida com fundo vermelho (cor 4) e
caracteres brancos (cor 7).
As cores tambm podem ser variveis, ou seja, voc pode criar uma interface
na qual o prprio usurio defina suas cores.

02 BLANK SCREEN BACKGROUND-COLOR COR-F FOREGROUND-COLOR COR-C.

COR-F ser a varivel com a cor do fundo da tela e COR-C, a cor de frente, ou
seja, dos caracteres da tela.

Sntese

Nessa aula conhecemos os conceitos para construo de interfaces no Microsoft


COBOL 4.5, destacando a tabela de cores e o uso da Screen Section. Verificamos
tambm que possvel construir as interfaces diretamente pela PROCEDURE

SOCIESC Sociedade Educacional de Santa Catarina

Programao Aplicada - Cobol

105

DIVISION do programa, com comandos DISPLAY e ACCEPT, vai depender da


padronizao adotada pelo programador.

Exerccios Propostos

1.

Modifique o programa MENUCOR para que, antes de exibir a TELAPRINCIPAL, solicite no incio duas variveis, uma para cor de fundo e outra para
cor dos caracteres, de forma que, a cada execuo, o programa possa vir com
cores diferenciadas.

Dica  Crie para o exerccio acima duas variveis numricas na


WORKING-STORAGE, uma com nome COR-F (tamanho 1) e outra com nome
COR-C (tambm com tamanho 1). O resultado dever ser semelhante ao dos
exemplos que mostramos nas figuras 29, 30, 31 e 32.

Figura 29 Exemplo 1 do Programa MENUCOR com escolha das cores pelo


usurio

SOCIESC Sociedade Educacional de Santa Catarina

Programao Aplicada - Cobol

106

Figura 30 Exemplo 1 da exibio da Tela do programa MENUCOR com a seleo


de cores anterior

Figura 31 Exemplo 2 do Programa MENUCOR com escolha das cores pelo


usurio

SOCIESC Sociedade Educacional de Santa Catarina

Programao Aplicada - Cobol

107

Figura 32 Exemplo 2 da exibio da Tela do programa MENUCOR com a


segunda seleo de cores do usurio

SOCIESC Sociedade Educacional de Santa Catarina

Programao Aplicada - Cobol

Aula 8

COMUNICAO ENTRE PROGRAMAS


Objetivos da Aula
Ao final desta aula, voc dever ser capaz de:
 Definir as regras e recursos disponveis na comunicao entre
programas;
 Aplicar o recurso de comunicao entre programas usando a
Linkage Section.
Contedos da Aula
Acompanhe os assuntos desta aula, se preferir, ao
terminar, assinale o contedo j estudado.


Definio de Programa Principal e Subprogramas

Linkage Section

Exerccios Propostos

Bem-vindo(a) a nossa oitava aula. Nessa aula veremos


como funciona a comunicao entre programas COBOL.
O processo de um programa chamar outro ou vrios outros
programas, no particularidade em nenhuma linguagem na
realidade, um processo indispensvel na construo de
qualquer sistema. Os analistas e programadores dividem os
programas por reas, mdulos (RH, Controladoria, Industrial, etc.),
sempre com o objetivo de facilitar a construo dos programas, a
manuteno peridica e o desempenho de execuo nos clientes.
Bons Estudos!

SOCIESC Sociedade Educacional de Santa Catarina

108

Programao Aplicada - Cobol

109

1 DEFINIO DE PROGRAMA PRINCIPAL E SUBPROGRAMA


Na maioria das linguagens, a definio de programa bem simples. Em
COBOL no diferente. O Programa Principal aquele que termina com STOP
RUN, normalmente o Menu Principal de um Sistema. por meio dele que todas as
outras rotinas do sistema sero chamadas. O programa MENU.CBL da aula anterior,
o que melhor define um programa principal. J um subprograma nada mais do
que outro programa chamado, a partir do programa principal ou de outro
subprograma que esteja sendo executado no momento.
O subprograma termina com a clusula EXIT PROGRAM, retornando o
controle para o programa que o chamou. O objetivo da utilizao de subprogramas
a reduo nas linhas de cdigo do sistema. Imagine um sistema financeiro, em que o
programador precise validar a data de vrios programas. Uma rotina de validao de
data completa, inclusive com a consistncia do ano bissexto, no possui menos do
que 60 linhas de cdigo. Sendo assim, se o programador tivesse que validar 10
programas com datas no sistema financeiro, teria que escrever as 60 linhas 10
vezes? evidente que no. Cria-se um subprograma para validar a data e retornar
um status, se a data vlida ou no.
2 LINKAGE SECTION
a rea de comunicao entre os programas, cujas definies de variveis,
recebidas de outro programa ou enviadas ao programa que o chamou. O formato
semelhante ao da WORKING-STORAGE SECTION. Vamos verificar no exemplo
abaixo:

LINKAGE SECTION.
01 AREA-TESTE-DATA.
03 DATA-TESTE

PIC 9(008).

03 STATUS-DATA

PIC X(001).

88 DATA-VALIDA

VALUE S.

88 DATA-INVALIDA VALUE N.

A PROCEDURE DIVISION de um programa que contenha a LINKAGE


SECTION dever ter uma complementao em sua declarao:

SOCIESC Sociedade Educacional de Santa Catarina

Programao Aplicada - Cobol

110

PROCEDURE DIVISION USING <ITEM-1, ITEM-2, ...ITEM-99>.


LINKAGE SECTION.
01 AREA-TESTE-DATA.
03 DATA-TESTE

PIC 9(008).

03 STATUS-DATA

PIC X(001).

88 DATA-VALIDA

VALUE S.

88 DATA-INVALIDA VALUE N.

PROCEDURE DIVISION USING AREA-TESTE-DATA.

A clusula USING s poder estar presente no subprograma que foi chamado


com a declarao CALL pelo programa chamador. As declaraes vindas aps a
clusula USING devem ser as mesmas definidas na Linkage Section do programa.
Como especificado no formato original, podem ser utilizados vrios itens na
comunicao.

LINKAGE SECTION.
01 AREA-TESTE-DATA.
03 DATA-TESTE

PIC 9(008).

03 STATUS-DATA

PIC X(001).

88 DATA-VALIDA

VALUE S.

88 DATA-INVALIDA VALUE N.
01 SENHA-ALUNO

PIC X(010).

PROCEDURE DIVISION USING AREA-TESTE-DATA, SENHA-ALUNO.

Vamos nos ater chamada com um item, de acordo com o primeiro exemplo.
Supondo que o nome do programa de validao de datas seja VALDATA.CBL,
qualquer programa chamador que necessite testar a data, dever cham-lo da
seguinte forma:
CALL VALDATA USING AREA-TESTE-DATA.

Com base nesse contexto, utilizaremos como parmetro para construo do


exemplo prtico, o programa PROG3.CBL especificado na aula 3 deste livro. Como

SOCIESC Sociedade Educacional de Santa Catarina

Programao Aplicada - Cobol

111

j aprendemos uma srie de novos recursos desde aquela aula, faremos algumas
adaptaes, mas a principal delas ser a demonstrao da chamada do
subprograma VALDATA, que vai testar a data e retornar um campo com o status da
operao (data vlida ou invlida).
Programa PROG3.CBL modificado com relao aula 3, as modificaes
esto destacadas em azul e tudo que envolve a comunicao com o subprograma,
em vermelho.
*
*...5....0....5....0....5....0....5....0....5....0....5....0....5....0..
*
IDENTIFICATION DIVISION.
PROGRAM-ID.
AUTHOR.

PROG3.
SOCIESC.

*
* Programa Exemplo chamando SUBPROGRAMAS
*
DATA DIVISION.
WORKING-STORAGE SECTION.
01

01

TABELA-MESES.
03

FILLER

PIC X(009) VALUE "JANEIRO".

03

FILLER

PIC X(009) VALUE "FEVEREIRO".

03

FILLER

PIC X(009) VALUE "MARCO".

03

FILLER

PIC X(009) VALUE "ABRIL".

03

FILLER

PIC X(009) VALUE "MAIO".

03

FILLER

PIC X(009) VALUE "JUNHO".

03

FILLER

PIC X(009) VALUE "JULHO".

03

FILLER

PIC X(009) VALUE "AGOSTO".

03

FILLER

PIC X(009) VALUE "SETEMBRO".

03

FILLER

PIC X(009) VALUE "OUTUBRO".

03

FILLER

PIC X(009) VALUE "NOVEMBRO".

03

FILLER

PIC X(009) VALUE "DEZEMBRO".

REDEFINES TABELA-MESES.
03

MES-EXTENSO

01

DATA1

01

REDEFINES DATA1.

01

PIC X(009) OCCURS 12 TIMES.


PIC 9(008).

03

DIA

PIC 9(002).

03

MES

PIC 9(002).

03

ANO

PIC 9(004).

DATA-EDIT

PIC 99/99/9999.

SOCIESC Sociedade Educacional de Santa Catarina

Programao Aplicada - Cobol

01

112

AREA-TESTE-DATA.
03

DATA-TESTE

PIC 9(008).

03

STATUS-DATA

PIC X(001).

88

DATA-VALIDA

VALUE "S".

88

DATA-INVALIDA

VALUE "N".

SCREEN SECTION.
01

TELA-PRINCIPAL.

02 BLANK SCREEN FOREGROUND-COLOR 0 BACKGROUND-COLOR 3.


02 LINE 03 COL 20 VALUE "+-------------------------------------"----+".
02 LINE 04 COL 20 VALUE "|
-"

SOCIESC - Teste com Subprogramas

|".
02 LINE 05 COL 20 VALUE "+-------------------------------------

-"----+".
02 LINE 06 COL 20 VALUE "|
-"

|".
02 LINE 07 COL 20 VALUE "|

-"

|".
02 LINE 08 COL 20 VALUE "|

-"

|".
02 LINE 09 COL 20 VALUE "|

-"

|".
02 LINE 10 COL 20 VALUE "|

-"

Data (DD/MM/AAAA) -

|".
02 LINE 11 COL 20 VALUE "|

-"

|".
02 LINE 12 COL 20 VALUE "|

-"

|".
02 LINE 13 COL 20 VALUE "|

-"

|".
02 LINE 14 COL 20 VALUE "|

-"

|".
02 LINE 15 COL 20 VALUE "|

-"

|".
02 LINE 16 COL 20 VALUE "|--------------- MENSAGEM ------------

-"----|".
02 LINE 17 COL 20 VALUE "|
-"

|".
02 LINE 18 COL 20 VALUE "+-------------------------------------

-"----+".
PROCEDURE DIVISION.
INICIO.
DISPLAY TELA-PRINCIPAL.

SOCIESC Sociedade Educacional de Santa Catarina

Programao Aplicada - Cobol

113

ACCEPT DATA1 AT 1046 ON ESCAPE GO TO FIM-PROGRAMA.


INITIALIZE AREA-TESTE-DATA.
MOVE DATA1 TO DATA-TESTE.
CALL "VALDATA" USING AREA-TESTE-DATA ON OVERFLOW
DISPLAY "PROGRAMA VALDATA.EXE NAO ENCONTRADO!"
AT 1723 WITH REVERSE-VIDEO
STOP " "
GO TO FIM-PROGRAMA.
IF

STATUS-DATA = "N"
DISPLAY "DATA DIGITADA NAO E VALIDA!" AT 1723
STOP " "
GO TO INICIO

END-IF
DISPLAY MES-EXTENSO(MES) AT 1327 WITH REVERSE-VIDEO.
MOVE DATA1 TO DATA-EDIT.
DISPLAY DATA-EDIT AT 1341 WITH REVERSE-VIDEO.
DISPLAY "TECLE <ENTER> PARA ENCERRAR" AT 1727
WITH REVERSE-VIDEO.
STOP " ".
FIM-PROGRAMA.
DISPLAY "FIM DA ROTINA!" AT 2430 WITH REVERSE-VIDEO.
STOP RUN.

Entendendo o que est em vermelho, relativo rea de comunicao:


Na WORKING-STORAGE SECTION
01

AREA-TESTE-DATA.
03

DATA-TESTE

PIC 9(008).

03

STATUS-DATA

PIC X(001).

88

DATA-VALIDA

VALUE "S".

88

DATA-INVALIDA

VALUE "N".

Sempre teremos declarado na WORKING-STORAGE SECTION do programa


chamador (nesse caso PROG3) a mesma rea que estar na linkage do
subprograma chamado (nesse caso VALDATA).

SOCIESC Sociedade Educacional de Santa Catarina

Programao Aplicada - Cobol

114

imprescindvel que a rea de comunicao do programa chamador


seja exatamente igual declarada na Linkage do subprograma chamado.
Na PROCEDURE DIVISION
CALL "VALDATA" USING AREA-TESTE-DATA ON OVERFLOW
DISPLAY "PROGRAMA VALDATA.EXE NAO ENCONTRADO!"
AT 1723 WITH REVERSE-VIDEO
STOP " "
GO TO FIM-PROGRAMA.
IF

STATUS-DATA = "N"
DISPLAY "DATA DIGITADA NAO E VALIDA!" AT 1723
STOP " "
GO TO INICIO

END-IF

Sempre que vamos efetuar uma chamada a um subprograma, bom inicializar


a rea de comunicao, para evitar problemas com valores carregados de outros
programas, evitando erros de processamento.
O programa faz isso na primeira linha relativa ao procedimento de
comunicao:
INITIALIZE AREA-TESTE-DATA.

Logo na seqncia, movemos a varivel que o usurio digitou DATA1 para a


varivel da rea de comunicao DATA-TESTE.
MOVE DATA1 TO DATA-TESTE.

Realizamos, na seqncia, a chamada ao programa VALDATA (com a


declarao CALL), passando como parmetro (atravs do USING) a rea de
comunicao AREA-TESTE-DATA.
CALL "VALDATA" USING AREA-TESTE-DATA ON OVERFLOW
DISPLAY "PROGRAMA VALDATA.EXE NAO ENCONTRADO!"
AT 1723 WITH REVERSE-VIDEO
STOP " "
GO TO FIM-PROGRAMA.

A clusula ON OVERFLOW ser executada caso o programa VALDATA no


seja encontrado ou no consiga ser executado. No caso de nosso programa

SOCIESC Sociedade Educacional de Santa Catarina

Programao Aplicada - Cobol

115

PROG3, existem trs sentenas declaradas junto esta clusula (DISPLAY, STOP
e GO TO) at que o programa encontre o ponto, indicando o final da sentena ON
OVERFLOW.
CALL "VALDATA" USING AREA-TESTE-DATA ON OVERFLOW
DISPLAY "PROGRAMA VALDATA.EXE NAO ENCONTRADO!"
AT 1723 WITH REVERSE-VIDEO
STOP " "
GO TO FIM-PROGRAMA.

No final da sentena CALL, caso seja executada com sucesso, quando o


controle retorna ao PROG3, testamos o segundo campo da rea de comunicao
AREA-TESTE-DATA (campo STATUS-DATA). Caso tenha retornado com valor N,
significa que a data no valida o programa exibe a mensagem e aguarda o
usurio teclar ENTER, retornando ao incio da rotina, pedindo a data novamente.
IF

STATUS-DATA = "N"
DISPLAY "DATA DIGITADA NAO E VALIDA!" AT 1723
STOP " "
GO TO INICIO

END-IF

Caro Aluno!
hora de digitar PROG3.CBL e compil-lo. O resultado dever ser o o que
mostramos na figura 33, enquanto no desenvolvermos o subprograma
VALDATA:

SOCIESC Sociedade Educacional de Santa Catarina

Programao Aplicada - Cobol

116

Figura 33 Imagem de prog3 executado sem desenvolvimento do subprograma


VALDATA.
Podemos notar que o programa exibiu a mensagem vinculada clusula ON
OVERFLOW da chamada CALL VALDATA, pois ainda no desenvolvemos a
rotina de validao de datas, que ser nosso prximo passo.
Subprograma VALDATA.CBL as clusulas relativas comunicao estaro
com destaque em vermelho. Para facilitar o entendimento da rotina, entre as linhas
de cdigo haver comentrios sobre a lgica desenvolvida:
*
*...5....0....5....0....5....0....5....0....5....0....5....0....5....0..
*
IDENTIFICATION DIVISION.
PROGRAM-ID.

VALDATA.

AUTHOR.

SOCIESC.

*
* Rotina que Valida Datas
*
DATA DIVISION.
WORKING-STORAGE SECTION.
01

RESULTADO

01

REDEFINES RESULTADO.

PIC 9(003)V99 VALUE ZEROS.

03

VALOR-INTEIRO

PIC 9(003).

03

RESTO

PIC 9(002).

01

DATA-1

01

REDEFINES DATA-1.
03

DIA-1

PIC 9(008)
PIC 9(002).

SOCIESC Sociedade Educacional de Santa Catarina

VALUE ZEROS.

Programao Aplicada - Cobol

01

117

03

MES-1

PIC 9(002).

03

ANO-1

PIC 9(004).

ANO-BISSEXTO

PIC X(001)

88

E-ANO-BISSEXTO

VALUE "S".

88

NAO-E-ANO-BISSEXTO

VALUE "N".

VALUE SPACE.

LINKAGE SECTION.
01

AREA-TESTE-DATA.
03

DATA-TESTE

PIC 9(008).

03

STATUS-DATA

PIC X(001).

88

DATA-VALIDA

VALUE "S".

88

DATA-INVALIDA

7 "N".

PROCEDURE DIVISION USING AREA-TESTE-DATA.


INICIO.
MOVE DATA-TESTE TO DATA-1
*
* INICIAMOS O SUBPROGRAMA MOVENDO A VARIVEL QUE NOS FOI PASSADA
* PELO PROGRAMA CHAMADOR PROG3 VIA LINKAGE (DATA-TESTE) E
* TRANSFERIMOS SEU CONTEDO PARA DATA-1, QUE UTILIZAREMOS PARA
* VERIFICAR AS CONSISTNCIAS COM RELAO A DIA, MS E ANO.
*
IF

MES-1 = 02
PERFORM TESTA-BISSEXTO-SECT

END-IF.
*
* DESVIAMOS A ROTINA ACIMA QUANDO O MS FOR FEVEREIRO PARA A SEO
* TESTA-BISSEXTO-SECT, QUE DIR SE O ANO INFORMADO OU NO
* BISSEXTO. A INFORMAO SER ARMAZENADA NA VARIVEL DA WORKING
* ANO-BISSEXTO (QUE FICAR COM CONTEDO S OU N).
*
VALIDA-MES.
IF

MES-1 < 01 OR > 12


MOVE "N" TO STATUS-DATA
GO TO FIM-ROTINA

END-IF.
*
* ACIMA, EFETUAMOS A VALIDAO DO MS ENTRE 01 E 12
* CASO ESTEJA INCORRETO, CARREGAMOS A VARIVEL DA LINKAGE
* STATUS-DATA COM N (DATA INVALIDA)
*
VALIDA-DIA.
IF

DIA-1 < 1
MOVE "N" TO STATUS-DATA

SOCIESC Sociedade Educacional de Santa Catarina

Programao Aplicada - Cobol

118

GO TO FIM-ROTINA
END-IF.
*
* ACIMA, EFETUAMOS A VALIDAO DO DIA = 0
* CASO ESTEJA INCORRETO, CARREGAMOS A VARIVEL DA LINKAGE
* STATUS-DATA COM N (DATA INVALIDA)
*
EVALUATE MES-1
WHEN 01
WHEN 03
WHEN 05
WHEN 07
WHEN 08
WHEN 10
WHEN 12 IF DIA-1 > 31
MOVE "N" TO STATUS-DATA
GO TO FIM-ROTINA
END-IF
WHEN 04
WHEN 06
WHEN 09
WHEN 11 IF DIA-1 > 30
MOVE "N" TO STATUS-DATA
GO TO FIM-ROTINA
END-IF
WHEN 02 IF

ANO-BISSEXTO = "S"
IF

DIA-1 > 29
MOVE "N" TO STATUS-DATA
GO TO FIM-ROTINA

END-IF
ELSE
IF

DIA-1 > 28
MOVE "N" TO STATUS-DATA
GO TO FIM-ROTINA

END-IF
END-IF
END-EVALUATE.
*
* ACIMA, VALIDAMOS O DIA FINAL DE CADA MS DO ANO
* CASO ESTEJA INCORRETO, CARREGAMOS A VARIVEL DA LINKAGE
* STATUS-DATA COM N (DATA INVALIDA)
*
VALIDA-ANO.
IF

ANO-1 < 1900


MOVE "N" TO STATUS-DATA
GO TO FIM-ROTINA

SOCIESC Sociedade Educacional de Santa Catarina

Programao Aplicada - Cobol

119

END-IF
*
* ACIMA, VALIDAMOS O ANO DE 1900 EM DIANTE
* CASO ESTEJA INCORRETO, CARREGAMOS A VARIVEL DA LINKAGE
* STATUS-DATA COM N (DATA INVALIDA)
*
MOVE "S" TO STATUS-DATA.
*
* POR FIM, SE DIA, MS E ANO FORAM VALIDADOS, CARREGAMOS A
* VARIVEL DA LINKAGE STATUS-DATA COM S (DATA VALIDA)
*
FIM-ROTINA.
EXIT PROGRAM.
TESTA-BISSEXTO-SECT SECTION.
TESTA.
COMPUTE RESULTADO = ANO-1 / 4
IF

RESTO = ZEROS
MOVE "S" TO ANO-BISSEXTO

ELSE
MOVE "N" TO ANO-BISSEXTO
END-IF.
TESTA-FIM.
EXIT.
*
* PARA SABERMOS SE O ANO EM QUESTAO BISSEXTO,
* DIVIDIMOS POR 4, GUARDANDO O RESULTADO EM
* OUTRA VARIAVEL REDEFINIDA COM VALORES INTEIROS E DECIMAIS.
*
*

COMPUTE RESULTADO = ANO-1 / 4

*
* SE FOSSE 2003, FICARIA RESULTADO = 2003 / 4
* RESULTADO = 50075 REDEFINIDO EM VALOR-INTEIRO = 500
*

RESTO

75

*
* SE FOSSE 2004, FICARIA RESULTADO = 2004 / 4
* RESULTADO = 50100 REDEFINIDO EM VALOR-INTEIRO = 501
*

RESTO

00

*
* SE O RESULTADO DA DIVISAO TIVER RESTO = ZERO, ENTAO
* O ANO BISSEXTO. CASO CONTRARIO, NO BISSEXTO.
*

Se observarmos as linhas destacadas em vermelho, veremos a diferena desse


subprograma para um programa principal:
SOCIESC Sociedade Educacional de Santa Catarina

Programao Aplicada - Cobol

120

Um programa principal no possui LINKAGE SECTION.


Um programa principal no tem a clusula USING em sua
PROCEDURE DIVISION.
Um programa principal no termina com EXIT PROGRAM.
Vejamos agora na figura 34, o resultado da execuo de PROG3, aps a
compilao de VALDATA.CBL:

Figura 34 1 Execuo do programa chamador PROG3, com o subprograma


VALDAT compilado.
Podemos observar que agora a rotina j est consistente, pois em 2003 no
temos dia 2902. Vejamos um segundo exemplo com uma data correta:

Figura 35 2 Execuo do programa chamador PROG3, com o subprograma


VALDATA compilado.

SOCIESC Sociedade Educacional de Santa Catarina

Programao Aplicada - Cobol

121

Nesse segundo exemplo, como a data vlida, o programa listou o ms por


extenso e a data digitada no formato editado DD/MM/AAAA.
Se analisarmos o nmero de linhas de cdigo do programa VALDATA.CBL
(quase 100 linhas vlidas), podemos ter idia da otimizao obtida com o
desenvolvimento de subprogramas dentro de um sistema. Imagine que, alm do
sistema financeiro do exemplo inicial, o programador tenha que testar datas num
sistema de vendas, de folha de pagamento, de controladoria, etc. Basta que utilize o
subprograma VALDATA em seus programas e teste o retorno da varivel STATUSDATA.
muito comum que rotinas de validao de inscries (CPF e CNPJ, por
exemplo) sejam subprogramas, pois esses dois tipos de inscrio normalmente so
os mais utilizados em qualquer tipo de sistema, sendo solicitados numa gama muito
grande de programas diferentes.

Sntese
Nessa aula conceituamos programa principal e subprogramas. Aprendemos
tambm que podemos passar e receber informaes entre os programas, usando a
rea de comunicao do COBOL, a Linkage Section. Ficou evidenciado que a
construo de subprogramas, como os de validao, por exemplo, otimizam a
construo de um aplicativo.

Exerccios Propostos
1)

Com base na estrutura dos programas PROG3.CBL e VALDATA.CBL, crie

um programa chamador e um subprograma para atender seguinte situao:

SOCIESC Sociedade Educacional de Santa Catarina

Programao Aplicada - Cobol

a)

122

O programa chamador dever pedir na tela um cdigo de cor vlido da


tabela de cores do MicroSoft COBOL 4.5 (que pode variar de 0 a 7). No
deixe o usurio informar nenhum valor fora da faixa permitida.

b)

O programa chamador dever passar o parmetro do cdigo da cor para o


subprograma, que devolver a descrio da cor tal informao dever ser
exibida no programa principal, antes de sua finalizao.

DICAS:
a) A rea de comunicao dos programas dever ser a seguinte:
01 AREA-CORES.
03 CODIGO-COR

PIC 9(001).

03 DESCRICAO-COR

PIC X(020).

b) Sugesto de nome para o programa chamador: EXERC8.CBL


c) Sugesto de nome para o subprograma: PROGCOR.CBL

ATENO!
No ser permitida a exibio da cor diretamente pelo programa chamador. A
informao dever voltar atualizada do subprograma, conforme o exemplo
visto Nessa aula.

SOCIESC Sociedade Educacional de Santa Catarina

Programao Aplicada - Cobol

Aula 9

TRATAMENTO COM ARQUIVOS


NATIVOS
Objetivos da Aula
Ao final desta aula, voc dever ser capaz de:
 Definir a estrutura adequada para cada tipo de arquivo;
 Criar arquivos nativos do COBOL;
 Fazer manuteno de arquivos nativos do COBOL.

Contedos da Aula
Acompanhe os assuntos desta aula, se preferir, ao
terminar, assinale o contedo j estudado.


Tipos Arquivos

Definio da Estrutura (Select e FD)

Declarao COPY

Comandos para Tratamento de Arquivos

Tratamento Multi-usurio

Criando um programa com arquivo

Exerccios Propostos
Bem-vindo(a) a nossa nona aula, para estudarmos as
regras que envolvem o tratamento de entrada e sada de

dados, com os tipos de arquivos nativos do COBOL. Quando


falamos em arquivos nativos, nos referimos aos formatos
suportados diretamente pelo COBOL, sem a necessidade de um
driver de conexo.
Voc aprender a criar arquivos, gravar e atualizar
informaes, bem como excluir informaes quando necessrio.
Bons Estudos!

SOCIESC Sociedade Educacional de Santa Catarina

123

Programao Aplicada - Cobol

124

1 TIPOS DE ARQUIVOS
Os tipos de arquivos que podem ser gerados diretamente pelo COBOL so:
Arquivos Seqenciais
Arquivos Relativos
Arquivos de Linhas Seqenciais
Arquivos Indexados
Estudaremos Nessa aula os dois ltimos tipos, atualmente so os formatos
mais utilizados nas aplicaes COBOL que trabalham com sistema de arquivos.
2 DEFINIO DA ESTRUTURA
Para utilizarmos arquivos nos programas COBOL, temos duas regras bsicas,
vlidas para qualquer verso:
a) Devemos declarar o arquivo utilizado na seo INPUT-OUTPUT
SECTION da ENVIRONMENT DIVISION, aps a clusula FILECONTROL. Tal declarao feita com a diretiva SELECT.
b) Devemos definir a estrutura do arquivo utilizado na DATA DIVISION,
dentro da seo FILE SECTION, com a diretiva FD (FILE
DESCRIPTION).
Vejamos, agora, o formato geral da clusula SELECT:
INPUT-OUTPUT SECTION.
FILE-CONTROL.
SELECT

nome-arquivo

ASSIGN TO nome-externo

ORGANIZATION

IS

ACCESS

IS {SEQUENTIAL,DYNAMIC}

MODE

{LINE SEQUENTIAL,INDEXED}

RECORD KEY IS nome-chave-primaria

SOCIESC Sociedade Educacional de Santa Catarina

Programao Aplicada - Cobol

125

ALTERNATE RECORD KEY IS nome-chave-secundaria


WITH
FILE STATUS IS

DUPLICATES

nome-campo-file-status

Definies de cada campo destacado na sentena acima:


SELECT nome-arquivo Indica o nome que ser referenciado
internamente pelo programa.
nome-externo Indica onde os dados sero gravados. Caso seja
especificada a palavra reservada DISK, o nome-externo dever ser
especificado na FD (veremos mais adiante). Caso seja especificada a
palavra reservada PRINTER, o arquivo ser aberto para impresso de
um relatrio.
ORGANIZATION IS Especifica a estrutura lgica do arquivo. Uma
vez criada, no pode mais ser alterada.
o LINE SEQUENTIAL indica que o arquivo ser gerado em linhas
seqenciais, no formato texto, ou seja, poder ser aberto por
qualquer editor de textos.
o INDEXED indica que os registros so identificados pelo
contedo dos campos denominados chaves (primria ou
alternativa), e so armazenados em qualquer ordem na criao
do registro, mas na leitura, obedecem ordem da chave e o
mtodo de acesso.
ACESS MODE IS Indica o modo de acesso ao arquivo.
o SEQUENTIAL

ser

utilizado

seqenciais.

SOCIESC Sociedade Educacional de Santa Catarina

para

arquivos

de

linhas

Programao Aplicada - Cobol

126

o DYNAMIC ser
permitem

acesso

utilizado

para arquivos indexados,

seqencial

ou

randmico,

que

conforme

necessidade do programador.
RECORD KEY IS especifica a chave primria (campo nico
identificador do registro) em um arquivo de organizao indexada.
Pode conter um ou mais campos.
ALTERNATE RECORD KEY IS especifica a chave secundria em
um arquivo de organizao indexada. Essa clusula no obrigatria e
possui a opo de aceitar valores duplicados (WITH DUPLICATES).
FILE STATUS IS varivel utilizada para indicar o retorno de qualquer
operao ocorrida com o arquivo (gravao, leitura, excluso, etc).
Deve ser definida na WORKING-STORAGE SECTION (tabela 9), com
duas posies alfanumricas PIC X(002).

Tabela 9 Cdigos de status mais comuns no COBOL


VALOR DESCRIO
00
Comando executado com sucesso
02

Comando arquivo c/chave duplicada executado com sucesso

10

Fim de arquivo

21

Erro de seqncia na gravao de arquivo seqencial

22

Chave principal duplicada

23

Registro no encontrado

24

Espao em disco est cheio

30/35

Arquivo no encontrado

91

Erro na estrutura do arquivo

94

Registro ou arquivo sendo utilizado por outro programa

Vejamos agora um exemplo da estrutura do SELECT para organizao LINE


SEQUENTIAL:

SOCIESC Sociedade Educacional de Santa Catarina

Programao Aplicada - Cobol

127

SELECT DEPBANCO ASSIGN TO BANCO999.TXT


ORGANIZATION IS LINE SEQUENTIAL
ACCESS MODE

IS SEQUENTIAL

FILE STATUS

IS SIT-ARQUIVO.

Vejamos agora um exemplo da estrutura do SELECT para organizao INDEXED:

SELECT CAD-ALUNO ASSIGN TO ALUNOS.DAT


ORGANIZATION IS INDEXED
ACCESS MODE

IS DYNAMIC

RECORD KEY

IS CODIGO-ALUNO

ALTERNATE RECORD KEY

IS NOME-ALUNO WITH DUPLICATES

FILE STATUS

IS SIT-ARQUIVO.

No caso de arquivos indexados, alm do arquivo principal declarado


no SELECT (ALUNOS.DAT) ser criado sempre um segundo arquivo
com o mesmo nome do primeiro, mas com extenso IDX, que o chamado
arquivo de ndices, responsvel pela busca rpida das informaes gravadas
no arquivo principal. Para cada arquivo indexado criado, sempre existir outro
arquivo de ndices com o mesmo nome, com extenso IDX.
:
ALUNOS.DAT

LIVROS.DAT

ALUNOS.IDX

LIVROS.IDX

Vejamos agora o formato geral da FILE SECTION:


DATA DIVISION.
FILE SECTION.

FD nome-arquivo
LABEL RECORD

IS

{OMITTED, STANDARD}

SOCIESC Sociedade Educacional de Santa Catarina

Programao Aplicada - Cobol

128

VALUE OF FILE-ID nome-identificao-arquivo.


01 nome-de-registro-arquivo.
numero-nivel

nome-campo ou FILLER

PIC tipo(tamanho).

REDEFINES nome-campo

Vamos s definies de cada campo destacado na sentena acima:

FD nome-arquivo clusula que identifica o incio da declarao da


estrutura de um arquivo. Ser sempre seguida do nome do arquivo,
que foi declarado na SELECT.
LABEL RECORD Especifica se existe rtulo presente no arquivo.
o OMITTED especifica que no existe rtulo (utilizado para arquivos
de impresso).
o STANDARD especifica que existem rtulos e esto conforme as
especificaes do sistema operacional (clusula opcional).

VALUE OF FILE-ID Identifica o nome do arquivo no meio externo.


obrigatrio apenas nos casos em que na SELECT do arquivo foi
utilizada a clusula ASSIGN TO DISK - caso contrrio, torna-se
opcional.

Vejamos agora um exemplo de declarao da FD, para um arquivo LINE


SEQUENTIAL. (utilizaremos o mesmo arquivo declarado no exemplo da estrutura
SELECT para arquivos de linha seqenciais).

FD

DEPBANCO.

01

DEP-REGISTRO.
03

DEP-CODIGO-BANCO

PIC 9(003).

03

DEP-CODIGO-AGE

PIC 9(004).

03

DEP-CODIGO-CONTA

PIC 9(009).

03

DEP-VALOR-DEPOSITO

PIC 9(009)V99.

03

DEP-DATA-DEPOSITO.

PIC 9(008).

SOCIESC Sociedade Educacional de Santa Catarina

Programao Aplicada - Cobol

03

129

REDEFINES DEP-DATA-DEPOSITO.
05

DEP-DIA-DEPOSITO

PIC 9(002).

05

DEP-MES-DEPOSITO

PIC 9(002).

05

DEP-ANO-DEPOSITO

PIC 9(004).

Note que no utilizamos as clusulas LABEL RECORD IS e VALUE OF FILEID. A primeira, porque no sendo um arquivo de relatrio, torna-se opcional e a
segunda, porque nosso SELECT no usou a diretiva ASSIGN TO DISK.
Vejamos agora um exemplo de declarao da FD, para um arquivo INDEXED
(utilizaremos o mesmo arquivo declarado no exemplo da estrutura SELECT para
arquivos indexados).
FD

CAD-ALUNO.

01

ALU-REGISTRO.
03

CODIGO-ALUNO

PIC 9(007).

03

NOME-ALUNO

PIC X(050).

03

DATA-NASC-ALUNO

PIC 9(008).

03

REDEFINES DATA-NASC-ALUNO.

03

03

05

DIA-NASC

PIC 9(002).

05

MES-NASC

PIC 9(002).

05

ANO-NASC

PIC 9(004).

TIPO-CURSO
88

SISTEMAS-INFORMACAO

VALUE I.

88

MECANICA

VALUE M.

88

CIENCIAS-CONTABEIS

VALUE C.

88

ECONOMIA

VALUE E.

TIPO-TURMA

PIC X(001).

88

SEMESTRAL

VALUE S.

88

ANUAL

VALUE A.

03

NUM-PERIODO-ATUAL

03

CONTATOS.

PIC 9(002).

05

TELEF-RESID-ALUNO

05

REDEFINES TELEF-RESID-ALUNO.

PIC 9(010).

07

DDD-RESID-ALUNO

PIC 9(002).

07

FONE-RESID-ALUNO PIC 9(008).

05

TELEF-CEL-ALUNO

05

REDEFINES TELEF-CEL-ALUNO.

05
03

PIC X(001).

PIC 9(010).

07

DDD-CEL-ALUNO

PIC 9(002).

07

FONE-CEL-ALUNO

PIC 9(008).

EMAIL-ALUNO

PIC X(070) OCCURS 2 TIMES.

FILLER

PIC X(100).

SOCIESC Sociedade Educacional de Santa Catarina

Programao Aplicada - Cobol

130

De forma semelhante ao arquivo seqencial DEPBANCO, tambm no


utilizamos as clusulas LABEL RECORD IS e VALUE OF FILE-ID para o arquivo
indexado CAD-ALUNO. Vamos agora visualizar as duas estruturas juntas (SELECT
e FD), num trecho vlido de um programa, para que voc entenda essa estrutura, ao
definir arquivos nos programas COBOL:

ENVIRONMENT DIVISION.
INPUT-OUTPUT SECTION.
FILE-CONTROL.
SELECT CAD-ALUNO ASSIGN TO ALUNOS.DAT
ORGANIZATION IS INDEXED
ACCESS MODE

IS DYNAMIC

RECORD KEY

IS CODIGO-ALUNO

ALTERNATE RECORD KEY IS NOME-ALUNO WITH DUPLICATES


FILE STATUS

IS SIT-ARQUIVO.

DATA DIVISION.
FILE SECTION.
FD

CAD-ALUNO.

01

ALU-REGISTRO.
03

CODIGO-ALUNO

PIC 9(007).

03

NOME-ALUNO

PIC X(050).

03

DATA-NASC-ALUNO

PIC 9(008).

03

REDEFINES DATA-NASC-ALUNO.

03

03

05

DIA-NASC

05

MES-NASC

PIC 9(002).

05

ANO-NASC

PIC 9(004).

TIPO-CURSO

PIC 9(002).

PIC X(001).

88

SISTEMAS-INFORMACAO

VALUE I.

88

MECANICA

VALUE M.

88

CIENCIAS-CONTABEIS

VALUE C.

88

ECONOMIA

VALUE E.

TIPO-TURMA

PIC X(001).

88

SEMESTRAL

VALUE S.

88

ANUAL

VALUE A.

03

NUM-PERIODO-ATUAL

03

CONTATOS.

PIC 9(002).

05

TELEF-RESID-ALUNO

PIC 9(010).

05

REDEFINES TELEF-RESID-ALUNO.

SOCIESC Sociedade Educacional de Santa Catarina

Programao Aplicada - Cobol

131

07

DDD-RESID-ALUNO

PIC 9(002).

07

FONE-RESID-ALUNO PIC 9(008).

05

TELEF-CEL-ALUNO

05

REDEFINES TELEF-CEL-ALUNO.

05
03

PIC 9(010).

07

DDD-CEL-ALUNO

PIC 9(002).

07

FONE-CEL-ALUNO

PIC 9(008).

EMAIL-ALUNO

PIC X(070) OCCURS 2 TIMES.

FILLER

PIC X(100).

Os campos CODIGO-ALUNO e NOME-ALUNO, esto em evidncia, pois so,


respectivamente, chaves primria e alternativa do arquivo, definidas na clusula
SELECT. O campo NOME-ALUNO ainda tem a clusula WITH DUPLICATES, pois
podemos ter dois alunos com o mesmo nome.

Para cada arquivo a ser utilizado pelo programa, dever haver sempre
uma clusula SELECT e uma clusula FD.

FILE-CONTROL

SELECT ARQUIVO-1
...
SELECT ARQUIVO-2
...

FILE SECTION.

FD ARQUIVO-1
...
FD ARQUIVO-2
...

SOCIESC Sociedade Educacional de Santa Catarina

Programao Aplicada - Cobol

132

3 A DECLARAO COPY
comum que um sistema com vrios programas, que execute as mais
variadas rotinas, tenha alguns blocos repetitivos, seja na declarao de variveis
temporrias, na declarao das estruturas de arquivos (SELECT e FD) ou mesmo na
lgica desenvolvida na PROCEDURE DIVISION. Imagine um sistema de folha de
pagamento, composto por 300 programas aproximadamente. Os arquivos mais
acessados, com certeza, sero o de funcionrios e o de movimento mensal, em
cerca de 90% dos programas. O programador certamente teria muitas dificuldades e
perderia muito tempo se tivesse que declarar em 270 programas a SELECT e a FD
desses arquivos.
Felizmente existe o recurso da declarao COPY, permitindo que um bloco
de instrues ou variveis seja inserido no programa a partir de um arquivo texto
externo, que contenha as regras e sintaxes da Linguagem COBOL. A insero de
um arquivo com COPY deve ocorrer a partir da posio que as instrues nele
contidas se encaixem na lgica do programa.
Vamos tomar como exemplo a SELECT e a FD do arquivo CAD-ALUNO. Na
prtica, poderamos salvar o contedo do SELECT num arquivo externo chamado
ALUNOS.SEL e o contedo da FD num arquivo chamado ALUNOS.FD para inserilos em nosso programa, teramos a seguinte declarao:
SELECT DIRETO NO PROGRAMA:
ENVIRONMENT DIVISION.
INPUT-OUTPUT SECTION.
FILE-CONTROL.
SELECT CAD-ALUNO ASSIGN TO ALUNOS.DAT
ORGANIZATION IS INDEXED
ACCESS MODE

IS DYNAMIC

RECORD KEY

IS CODIGO-ALUNO

ALTERNATE RECORD KEY IS NOME-ALUNO WITH DUPLICATES


FILE STATUS

IS SIT-ARQUIVO.

SOCIESC Sociedade Educacional de Santa Catarina

Programao Aplicada - Cobol

133

SELECT INCLUIDO NO PROGRAMA PELA DECLARAO COPY:


ENVIRONMENT DIVISION.
INPUT-OUTPUT SECTION.
FILE-CONTROL.
COPY ALUNOS.SEL.

Podemos fazer o mesmo procedimento com a FD do arquivo: Vejamos a


declarao completa da SELECT e FD do arquivo CAD-ALUNO, com a incluso do
COPY:

ENVIRONMENT DIVISION.
INPUT-OUTPUT SECTION.
FILE-CONTROL.
COPY ALUNOS.SEL.
DATA DIVISION.
FILE SECTION.
COPY ALUNOS.FD.

Imagine agora um programa de um sistema de faturamento, que trabalha com


5 arquivos (clientes, notas fiscais, duplicatas, impostos e pedidos). Usando a
declarao COPY, teramos as seguintes linhas de cdigo:

ENVIRONMENT DIVISION.
INPUT-OUTPUT SECTION.
FILE-CONTROL.
COPY CLIENTES.SEL.
COPY NOTAS.SEL.
COPY DUPLICATAS.SEL.
COPY IMPOSTOS.SEL.
COPY PEDIDOS.SEL.
DATA DIVISION.
FILE SECTION.
COPY CLIENTES.FD.
COPY NOTAS.FD.

SOCIESC Sociedade Educacional de Santa Catarina

Programao Aplicada - Cobol

134

COPY DUPLICATAS.FD.
COPY IMPOSTOS.FD.
COPY PEDIDOS.FD.

Certamente, aqui economizamos muitas linhas de cdigo e otimizamos o


programa. Isso vai auxiliar em futuras manutenes que o programa venha a sofrer e
vai reduzir a margem de erros de compilao, pois o cdigo fonte fica mais enxuto,
como os programadores costumam dizer. O fato de que essas mesmas declaraes
possam ser usadas por uma srie de outros programas, refora a importncia da
clusula COPY dentro do ambiente de desenvolvimento COBOL.
Concluindo a explanao sobre essa declarao: ela tem status de comando,
por essa razo, deve ser inserida na coluna 12. Outra caracterstica que podemos
us-la em qualquer parte ou diviso do programa fonte. At na SCREEN SECTION,
onde definimos a interface com o usurio, na aula 7, poderamos tirar a tela do
programa principal

e deixar num arquivo externo, incluindo-o no programa com

COPY.
Vejamos pela figura 36, o programa da aula 7 novamente, com a clusula
COPY sendo utilizada em dois locais diferentes, evidenciados em azul:

Figura 36 Programa Menu com Declarao COPY na SCREEN SECTION e na


ltima Seo da PROCEDURE DIVISION MENSAGEM-SECT

SOCIESC Sociedade Educacional de Santa Catarina

Programao Aplicada - Cobol

135

Se compararmos a quantidade de linhas do programa MENU da aula 7 com


este, veremos uma considervel reduo no nmero de linhas digitadas.
Nos arquivos MENU.TEL e MENSAGEM.PRO esto as linhas de cdigo originais,
como veremos nas figuras 37 e 38:

Figura 37 Contedo do arquivo MENU.TEL

Figura 38 Contedo do arquivo MENSAGEM.PRO

SOCIESC Sociedade Educacional de Santa Catarina

Programao Aplicada - Cobol

136

Importante! No h regras para os nomes dos arquivos externos. Cada


empresa adota um padro para diferenciar os tipos de blocos inseridos.
Ser adotado o seguinte padro:
a) Para arquivos que armazenam SELECT, utilizaremos extenso .SEL
b) Para arquivos que armazenam FD, utilizaremos extenso .FD
c) Para arquivos que armazenam telas, utilizaremos extenso .TEL
d) Para arquivos que armazenam blocos de lgicas da PROCEDURE,
utilizaremos extenso .PRO.
4 COMANDOS PARA TRATAMENTO DE ARQUIVOS
Veja os comandos para tratamento de arquivos:
4.1 Comando Open
O Comando OPEN o responsvel pela Abertura de arquivos.
4.1.2 Formato Do Open
OPEN {MODO ABERTURA} nome-arquivo

4.1.3 Modos De Abertura


INPUT Abre o arquivo somente para Leitura.
OUTPUT Abre o arquivo somente para gravao ou cria o arquivo
zerado, caso ainda no exista.
I-O Abre o arquivo para leitura, gravao, excluso e atualizao.
EXTENDED Abre um arquivo de formato LINE SEQUENTIAL (texto)
para gravao, preservando seu contedo original, ou seja, as
gravaes ocorrero aps a ltima linha vlida.
OPEN OUTPUT CAD-ALUNO.
OPEN I-O CAD-ALUNO.

(Abre o arquivo para gravao)

(Abre o arquivo para leitura/gravao)

SOCIESC Sociedade Educacional de Santa Catarina

Programao Aplicada - Cobol

OPEN OUTPUT DEPBANCO.


OPEN INPUT DEPBANCO.

137

(Abre o arquivo para gravao)

(Abre o arquivo para leitura)

OPEN EXTENDED DEPBANCO.

(Abre o arquivo para gravao a partir da prxima

linha aps o ltimo movimento gravado)


Obs.: No permitido usar EXTENDED para arquivos indexados.
4.2 Comando Close
O Comando CLOSE o responsvel pelo fechamento dos arquivos.
4.2.1 Formato Do Close
CLOSE nome-arquivo

No possui variaes, mas permitido fechar todos os arquivos numa nica


declarao do Comando.
Exemplos:
CLOSE CAD-ALUNO.
CLOSE DEPBANCO.
CLOSE CAD-ALUNO DEPBANCO.

4.3 Comando Read


Comando que efetua a leitura dos registros existentes no arquivo.
4.3.1 Formato Do Read
Existem dois formatos para o uso do comando READ, um para arquivos de
linhas seqenciais e outro para arquivos indexados.
4.3.1.1 Formato Do Read Para Arquivos De Linha Seqenciais

SOCIESC Sociedade Educacional de Santa Catarina

Programao Aplicada - Cobol

138

READ nome-arquivo NEXT AT END


<SENTENA>

A clusula AT END define que, quando no existirem mais registros a serem


lidos, ou seja, o arquivo chegou ao final, o que estiver estipulado em <SENTENA>
seja executado:
READ DEPBANCO NEXT AT END
GO TO FIM-PROGRAMA

A clusula AT END pode no ser utilizada. Vai depender do programador e do


padro adotado pela empresa. Podemos testar diretamente o STATUS da leitura
(definido na SELECT do arquivo). Vamos relembrar a SELECT e mostrar o exemplo
da leitura testando o FILE-STATUS:

SELECT DEPBANCO ASSIGN TO BANCO999.TXT


ORGANIZATION IS LINE SEQUENTIAL
ACCESS MODE

IS SEQUENTIAL

FILE STATUS

IS SIT-ARQUIVO.

...
...
READ DEPBANCO NEXT.
IF SIT-ARQUIVO = 10 (VER TABELA DE CDIGOS. 10 =FIM ARQUIVO).
GO TO FIM-PROGRAMA
END-IF.

4.3.1.2 Formato do Read Para Arquivos Indexados


READ nome-arquivo {NEXT, PREVIOUS, RECORD}.

Onde se l:
NEXT L seqencialmente sempre o prximo registro.
PREVIOUS L seqencialmente o registro anterior.
RECORD Utilizado para leitura randmica (direta), quando carregamos a chave
primria do registro antes do READ.

SOCIESC Sociedade Educacional de Santa Catarina

Programao Aplicada - Cobol

139

READ CAD-ALUNO NEXT. (L O PRXIMO REGISTRO DE ALUNOS).


READ CAD-ALUNO PREVIOUS. (L O REGISTRO ANTERIOR DE ALUNOS).
READ CAD-ALUNO RECORD. (L O REGISTRO DE FORMA DIRETA).

Nas leituras randmicas ou diretas, necessrio que a chave primria


sempre seja carregada antes da execuo do READ. Lembrando que esse tipo
de leitura s poder ser utilizada no arquivo indexado, pois cria um ndice para
busca rpida de informaes, se voc tiver um arquivo de alunos com 10.000
registros e necessite resgatar os dados do aluno de cdigo 9.700, no necessrio
efetuar a leitura seqencial at chegar nesse cdigo. Isso demandaria muito tempo
de processamento. Basta que voc carregue a chave principal com o cdigo
desejado e efetue a leitura direta. Vejamos o exemplo abaixo:

INITIALIZE ALU-REGISTRO.
MOVE 9700 TO CODIGO-ALUNO.
READ CAD-ALUNO RECORD.
IF SIT-ARQUIVO = 00
DISPLAY LEITURA DO ALUNO 9700 OK AT 1010
ELSE
IF SIT-ARQUIVO = 23
DISPLAY Cdigo no Cadastrado! AT 1010
END-IF
END-IF.

4.4 Comando Write


Comando responsvel pela gravao dos registros nos arquivos.
4.4.1 Formato Do Write
WRITE nome-registro FROM campo {AFTER,BEFORE} {PAGE,nr-linhas}

SOCIESC Sociedade Educacional de Santa Catarina

Programao Aplicada - Cobol

140

Existem dois formatos para o uso do comando WRITE, um para arquivos de


impresso e outro para arquivos dados.
4.4.2 Formato Do Write Para Arquivos De Dados
WRITE nome-registro

WRITE DEP-REGISTRO.
WRITE ALU-REGISTRO.

4.5 Comando Rewrite


o comando responsvel pela regravao (atualizao) dos registros nos
arquivos.
4.5.1 Formato Do Rewrite
REWRITE nome-registro
REWRITE ALU-REGISTRO.

4.6 Comando Delete


o comando que remove o ltimo registro lido do arquivo.
4.6.1 Formato Do Delete
DELETE nome-arquivo RECORD.

DELETE CAD-ALUNO RECORD.

Importante!
Para utilizar os comandos WRITE, REWRITE e DELETE, o

arquivo

no pode estar aberto apenas com INPUT (leitura) dever estar aberto com
opo I-O (Leitura e Gravao).

SOCIESC Sociedade Educacional de Santa Catarina

Programao Aplicada - Cobol

141

4.7 Comando Start


O Comando START posiciona um arquivo indexado para leitura, a partir de
determinado ponto, de acordo com o valor da chave especificada.
4.7.1 Formato do Start
START nome-arquivo KEY IS {operador-aritmtico} {chave-acesso}.

4.7.1 Operador Aritmtico


Especifica o tipo de operao que vai posicionar o arquivo: maior que (>)
menor que (<) igual (=) menor ou igual (<=) maior ou igual (>=).
4.7.1 Chave-Acesso
Especifica a chave (primria ou alternativa) que ser utilizada para posicionar o
arquivo. Se

quisermos

ler

o cadastro de alunos por

ordem

seqencialmente, basta posicionarmos o arquivo pela chave alternativa.

MOVE SPACES TO NOME-ALUNO.


START CAD-ALUNO KEY IS >= NOME-ALUNO.

*
* Nesse START, posicionamos o arquivo de alunos para leitura pela
* chave alternativa NOME-ALUNO.
PERFORM LEITURA-ALUNOS-SECT.
...
...
STOP RUN.

*
*
INITIALIZE ALU-REGISTRO.
MOVE 5000 TO CODIGO-ALUNO.
START CAD-ALUNO KEY IS > CODIGO-ALUNO.

SOCIESC Sociedade Educacional de Santa Catarina

alfabtica,

Programao Aplicada - Cobol

142

* Nesse START, posicionamos o arquivo de alunos para leitura pela


* chave principal, CODIGO-ALUNO, a partir do cdigo maior que 5000. Ou seja,
* quando o programa fizer a primeira leitura seqencial, dever trazer o
* primeiro registro superior a 5000.
PERFORM LEITURA-ALUNOS-SECT.
...
...
...
LEITURA-ALUNOS-SECT SECTION.
LEITURA.
READ CAD-ALUNO NEXT AT END
GO TO LEITURA-FIM.
LEITURA-FIM.
EXIT.

Podemos notar que a seo de leitura, aps o START, a mesma para os dois
exemplos. Significa que o READ vai efetuar as leituras de acordo com o
posicionamento realizado no arquivo anteriormente, independente de qual seja.
Essa outra regra bsica para trabalho com arquivos em COBOL. Um comando
READ seqencial (seja NEXT ou PREVIOUS) independe de como o START foi
executado (se pela chave principal, ou pela chave alternativa). claro que o
posicionamento realizado com o START no deve possuir erros de lgica, seno o
READ no vai encontrar nenhum registro.
Vejamos um exemplo de START incorreto na lgica, no na sintaxe:

MOVE ZEROS TO COD-ALUNO.


START CAD-ALUNO KEY IS < COD-ALUNO.
READ CAD-ALUNO PREVIOUS.

No exemplo, o usurio esqueceu de carregar a chave CODIGO-ALUNO com o


valor inicial, sobre o qual gostaria de posicionar o arquivo menor que < esse valor.
Como o campo ficou zerado, esse START no vai encontrar nenhum cdigo menor
que zero, o READ vai retornar um STATUS de erro.
MOVE 5000 TO COD-ALUNO.
START CAD-ALUNO KEY IS < COD-ALUNO.

SOCIESC Sociedade Educacional de Santa Catarina

Programao Aplicada - Cobol

143

READ CAD-ALUNO PREVIOUS.

Executando o exemplo acima, agora o START vai posicionar o arquivo de


alunos no primeiro registro menor que < 5000. A leitura vai partir desse ponto para
os registros anteriores (PREVIOUS).
5. TRATAMENTO MULTI-USURIO
Quando utilizamos um sistema desenvolvido em COBOL, que acessa arquivos
em rede, onde vrios usurios esto trabalhando com os arquivos simultaneamente,
o programador dever ter alguns cuidados adicionais, testando sempre se o registro
que est sendo lido no momento no est em uso por outra estao de rede.
Imagine ento um usurio alterando dados no cadastro de alunos, no cdigo 9700.
Se nesse mesmo instante, de outra estao, outro usurio tentar alterar dados no
mesmo cdigo, o programa no poderia permitir tal alterao at que a primeira
pessoa que acessou o registro o libere.
Esse o conceito de tratamento multi-usurio, ou seja, testar sempre o status
do registro, verificando se no se encontra bloqueado (em uso) no momento da
leitura.
Esse processo s funciona para arquivos indexados. No possvel tratar
bloqueios e desbloqueios em arquivos-texto (seqenciais).

Formato do READ para travar o registro na leitura:


READ nome-arquivo {NEXT, PREVIOUS, RECORD} WITH KEPT LOCK.

Inserindo na leitura a clusula WITH KEPT LOCK, caso o registro esteja


disponvel, o COBOL trava-o para uso nessa estao de trabalho que o requisitou.

Para destravar/liberar o registro, utilizamos o seguinte comando:


UNLOCK nome-arquivo RECORD.

SOCIESC Sociedade Educacional de Santa Catarina

Programao Aplicada - Cobol

144

Importante!
Quando trabalhamos com acesso a banco de dados, o tipo de tratamento
gerenciado pelo prprio banco, no sendo necessrio seu controle pelo
programa COBOL.

6 CRIANDO UM PROGRAMA COM ARQUIVO


Para finalizarmos a nossa aula, vamos agora criar um programa que far o
tratamento de um arquivo simplificado de cursos. O arquivo ser indexado e a chave
principal ser o cdigo do curso, que possibilitar a incluso, alterao e excluso
de cursos. Com esse programa, voc ter uma excelente base para construo de
fontes que trabalhem com arquivos.
Digite o programa abaixo e salve-o com o nome de CADCURSO.CBL. em
nossa pasta de trabalho, C:\COBOL\BINR:

Programa CADCURSO.CBL:
IDENTIFICATION DIVISION.
PROGRAM-ID.

CADCURSO.

AUTHOR.

SOCIESC.

*
* Programa Exemplo - Trabalhando com Arquivos
*
ENVIRONMENT DIVISION.
INPUT-OUTPUT SECTION.
FILE-CONTROL.
SELECT CURSOS

ASSIGN TO "CURSOS.DAT"
ORGANIZATION IS INDEXED
ACCESS MODE

IS DYNAMIC

RECORD KEY

IS CURSO-CHAVE

= CODIGO-CURSO

ALTERNATE RECORD KEY IS CURSO-CHAVE-1 = DESCR-CURSO


WITH DUPLICATES
FILE STATUS

IS SIT-ARQUIVO.

DATA DIVISION.
FILE SECTION.
FD

CURSOS.

SOCIESC Sociedade Educacional de Santa Catarina

Programao Aplicada - Cobol

01

145

CURSO-REGISTRO.
03

CODIGO-CURSO

PIC 9(005).

03

DESCR-CURSO

PIC X(030).

03

PERIODO-CURSO PIC X(001).


88 MANHA

VALUE "M".

88 TARDE

VALUE "T".

88 NOITE

VALUE "N".

WORKING-STORAGE SECTION.
01

CODIGO-EDIT

PIC ZZZZ9

VALUE ZEROS.

77

SIT-ARQUIVO

PIC X(002) VALUE SPACE.

77

RESPOSTA

PIC X(001) VALUE SPACE.

77

MENSAGEM

PIC X(032) VALUE SPACE.

SCREEN SECTION.
01 TELA-CURSOS.
02 BLANK SCREEN FOREGROUND-COLOR 1 REVERSE-VIDEO
BACKGROUND-COLOR 7 HIGHLIGHT.
02 LINE 05 COL 20 VALUE "+---------------------------------+".
02 LINE 06 COL 20 VALUE "|

SOCIESC - CADASTRO DE CURSOS

|".

02 LINE 07 COL 20 VALUE "+---------------------------------+".


02 LINE 08 COL 20 VALUE "| Codigo:

|".

02 LINE 09 COL 20 VALUE "|

|".

02 LINE 10 COL 20 VALUE "|

|".

02 LINE 11 COL 20 VALUE "| Descricao:

|".

02 LINE 12 COL 20 VALUE "|

|".

02 LINE 13 COL 20 VALUE "|

|".

02 LINE 14 COL 20 VALUE "| Periodo Curso:

|".

02 LINE 15 COL 20 VALUE "|

|".

02 LINE 16 COL 20 VALUE "|

|".

02 LINE 17 COL 20 VALUE "+----------- MENSAGEM ------------+".


02 LINE 18 COL 20 VALUE "|

|".

02 LINE 19 COL 20 VALUE "+---------------------------------+".


PROCEDURE DIVISION.
INICIO.
DISPLAY ERASE AT 0101.
DISPLAY "*--- ARQUIVO DE CURSOS ---*" AT 0130
WITH REVERSE-VIDEO.
ABRE-ARQUIVO.
OPEN INPUT CURSOS.
IF

SIT-ARQUIVO = "30" OR "35"

SOCIESC Sociedade Educacional de Santa Catarina

Programao Aplicada - Cobol

146

DISPLAY "Criar Arquivo de Cursos ? (S/N) - " AT 0520


WITH HIGHLIGHT
ACCEPT RESPOSTA AT 0554
IF

RESPOSTA NOT EQUAL "S"


GO TO FIM-PROGRAMA

END-IF
OPEN OUTPUT CURSOS
CLOSE CURSOS
OPEN I-O CURSOS
GO TO ACESSO
ELSE
IF

SIT-ARQUIVO = "00" OR "05"


DISPLAY SPACES AT 0520
DISPLAY "Arquivo CURSOS.DAT Aberto com Sucesso!"
AT 0520 WITH HIGHLIGHT
STOP " "
DISPLAY SPACES AT 0520
CLOSE CURSOS
OPEN I-O CURSOS
GO TO ACESSO

ELSE
DISPLAY "Erro na Abertura de CURSOS.DAT - " AT 0520
DISPLAY SIT-ARQUIVO AT 0553
STOP RUN
END-IF
END-IF.
ACESSO.
INITIALIZE RESPOSTA.
DISPLAY "Deseja Acessar o Cadastro ? (S/N) - " AT 0520
WITH HIGHLIGHT.
ACCEPT RESPOSTA AT 0556 WITH HIGHLIGHT AUTO-SKIP.
IF

RESPOSTA = "S"
PERFORM CADASTRO-SECT

END-IF.
FECHA-ARQUIVO.
CLOSE CURSOS.
FIM-PROGRAMA.
DISPLAY "FIM DA ROTINA" AT 2430 WITH HIGHLIGHT.
STOP RUN.
CADASTRO-SECT SECTION.
CADASTRO.
INITIALIZE CURSO-REGISTRO CODIGO-EDIT MENSAGEM RESPOSTA.
DISPLAY TELA-CURSOS.
ACCEPT CODIGO-EDIT AT 0922 WITH REVERSE-VIDEO ON ESCAPE
GO TO CADASTRO-FIM.

SOCIESC Sociedade Educacional de Santa Catarina

Programao Aplicada - Cobol

147

MOVE CODIGO-EDIT TO CODIGO-CURSO.


IF

CODIGO-CURSO = ZEROS
GO TO CADASTRO

END-IF.
CA100-LEITURA.
READ CURSOS RECORD.
IF

SIT-ARQUIVO = "00"
PERFORM MANUTENCAO-CURSO-SECT
GO TO CADASTRO

ELSE
IF

SIT-ARQUIVO = "23"
MOVE "CODIGO NAO EXISTE, INCLUIR? - " TO MENSAGEM
DISPLAY MENSAGEM AT 1822 WITH HIGHLIGHT
ACCEPT RESPOSTA
IF

AT 1852 WITH HIGHLIGHT AUTO-SKIP

RESPOSTA = "S"
PERFORM INCLUSAO-CURSO-SECT

END-IF
END-IF
END-IF
GO TO CADASTRO.
CADASTRO-FIM.
EXIT.
MANUTENCAO-CURSO-SECT SECTION.
MANUTENCAO.
DISPLAY DESCR-CURSO

AT 1222 WITH REVERSE-VIDEO.

DISPLAY PERIODO-CURSO AT 1522 WITH REVERSE-VIDEO.


OPCAO.
MOVE "(A)lterar (E)xcluir (V)oltar - " TO MENSAGEM.
DISPLAY MENSAGEM AT 1822 WITH HIGHLIGHT.
ACCEPT RESPOSTA

AT 1853 WITH HIGHLIGHT AUTO-SKIP.

MOVE SPACES TO MENSAGEM


DISPLAY MENSAGEM AT 1822 WITH HIGHLIGHT.
EVALUATE RESPOSTA
WHEN "A"

PERFORM ALTERACAO-CURSO-SECT

WHEN "E"

PERFORM EXCLUSAO-CURSO-SECT

WHEN "V"

GO TO MANUTENCAO-FIM

WHEN OTHER GO TO OPCAO


END-EVALUATE.
MANUTENCAO-FIM.
EXIT.
INCLUSAO-CURSO-SECT SECTION.
INCLUSAO.
MOVE "Incluindo Registro..." TO MENSAGEM.
DISPLAY MENSAGEM AT 1822 WITH HIGHLIGHT.

SOCIESC Sociedade Educacional de Santa Catarina

Programao Aplicada - Cobol

148

ACCEPT DESCR-CURSO AT 1222 WITH REVERSE-VIDEO ON ESCAPE


GO TO INCLUSAO-FIM.
IF

DESCR-CURSO = SPACES
GO TO INCLUSAO

END-IF.
PERIODO.
DISPLAY PERIODO-CURSO AT 1522 WITH REVERSE-VIDEO.
MOVE "(M)anha (T)arde (N)oite" TO MENSAGEM.
DISPLAY MENSAGEM AT 1822 WITH HIGHLIGHT.
ACCEPT PERIODO-CURSO

AT 1522 WITH REVERSE-VIDEO AUTO-SKIP


ON ESCAPE GO TO INCLUSAO-FIM.

IF

PERIODO-CURSO NOT EQUAL "M" AND "T" AND "N"


GO TO PERIODO

END-IF.
CONFIRMACAO.
INITIALIZE RESPOSTA MENSAGEM.
MOVE "Confirma Inclusao ? (S)im - " TO MENSAGEM
DISPLAY MENSAGEM AT 1822 WITH HIGHLIGHT.
ACCEPT RESPOSTA
IF

AT 1850 WITH HIGHLIGHT AUTO-SKIP.

RESPOSTA NOT EQUAL "S"


GO TO INCLUSAO

END-IF.
GRAVAR.
WRITE CURSO-REGISTRO.
IF

SIT-ARQUIVO = "00"
MOVE "Inclusao OK !" TO MENSAGEM
PERFORM MOSTRA-MSG-SECT

ELSE
MOVE SPACES TO MENSAGEM
STRING "ERRO na Inclusao: Status= "
SIT-ARQUIVO
DELIMITED BY SIZE
INTO MENSAGEM
END-STRING
PERFORM MOSTRA-MSG-SECT
STOP RUN
END-IF.
INCLUSAO-FIM.
EXIT.
ALTERACAO-CURSO-SECT SECTION.
ALTERACAO.
MOVE "Alterando Registro..." TO MENSAGEM.
DISPLAY MENSAGEM AT 1822 WITH HIGHLIGHT.
ACCEPT DESCR-CURSO AT 1222 WITH REVERSE-VIDEO
ON ESCAPE GO TO ALTERACAO-FIM.

SOCIESC Sociedade Educacional de Santa Catarina

Programao Aplicada - Cobol

IF

149

DESCR-CURSO = SPACES
GO TO ALTERACAO

END-IF.
PERIODO.
DISPLAY PERIODO-CURSO AT 1522 WITH REVERSE-VIDEO.
MOVE "(M)anha (T)arde (N)oite" TO MENSAGEM.
DISPLAY MENSAGEM AT 1822 WITH HIGHLIGHT.
ACCEPT PERIODO-CURSO AT 1522

WITH REVERSE-VIDEO AUTO


ON ESCAPE GO TO ALTERACAO-FIM.

IF

PERIODO-CURSO NOT EQUAL "M" AND "T" AND "N"


INITIALIZE PERIODO-CURSO
GO TO PERIODO

END-IF.
CONFIRMACAO.
INITIALIZE RESPOSTA.
MOVE "Confirma Alteracao ? (S)im - " TO MENSAGEM
DISPLAY MENSAGEM AT 1822 WITH HIGHLIGHT.
ACCEPT RESPOSTA
IF

AT 1851 WITH HIGHLIGHT AUTO-SKIP.

RESPOSTA NOT EQUAL "S"


GO TO ALTERACAO

END-IF.
REGRAVAR.
REWRITE CURSO-REGISTRO.
IF

SIT-ARQUIVO = "00"
MOVE "Alteracao OK !" TO MENSAGEM
PERFORM MOSTRA-MSG-SECT

ELSE
MOVE SPACES TO MENSAGEM
STRING "ERRO na Alteracao: Status= "
SIT-ARQUIVO
DELIMITED BY SIZE
INTO MENSAGEM
END-STRING
PERFORM MOSTRA-MSG-SECT
STOP RUN
END-IF.
ALTERACAO-FIM.
EXIT.
EXCLUSAO-CURSO-SECT SECTION.
EXCLUSAO.
DELETE CURSOS RECORD
IF

SIT-ARQUIVO = "00"
MOVE "Exclusao OK !" TO MENSAGEM
PERFORM MOSTRA-MSG-SECT

ELSE

SOCIESC Sociedade Educacional de Santa Catarina

Programao Aplicada - Cobol

150

MOVE SPACES TO MENSAGEM


STRING "ERRO na Exclusao: Status= "
SIT-ARQUIVO
DELIMITED BY SIZE
INTO MENSAGEM
END-STRING
PERFORM MOSTRA-MSG-SECT
STOP RUN
END-IF.
EXCLUSAO-FIM.
EXIT.
MOSTRA-MSG-SECT SECTION.
MOSTRA.
DISPLAY MENSAGEM AT 1822 WITH HIGHLIGHT.
STOP " ".
MOSTRA-FIM.
EXIT.

Aps digitar e salvar o programa, vamos compil-lo. Se voc digitou todas as


linhas e sentenas de acordo, a compilao dever ser gerada sem erros, conforme
mostra a figura 39:

Figura 39 Imagem de CADCURSO.CBL compilado sem erros


6.1 Diretrizes Bsicas Do Programa
Para que o programa seja compilado e funcione perfeitamente, devem seguir
as seguintes diretrizes:

SOCIESC Sociedade Educacional de Santa Catarina

Programao Aplicada - Cobol

1.

151

Ser criado um arquivo indexado chamado CURSO.DAT ( por conseqncia


CURSO.IDX) na sua pasta de trabalho C:\COBOL\BINR, logo que voc execute
o programa pela primeira vez, pois o programa inicia abrindo o arquivo CURSOS
em modo leitura (INPUT) para testar se ele existe ou no. Como ainda no
existe, o retorno do status ser 30 ou 35.
OPEN INPUT CURSOS.
IF

SIT-ARQUIVO = "30" OR "35"


DISPLAY "Criar Arquivo de Cursos ? (S/N) - " AT 0520
WITH HIGHLIGHT
ACCEPT RESPOSTA AT 0554

Vejamos o resultado na figura 40:

Figura 40 Execuo de CADCURSO at a pausa para resposta sobre a


criao do arquivo de CURSOS
2.

O usurio confirmando a criao do arquivo, o programa executar as


seguintes linhas para cri-lo:
OPEN OUTPUT CURSOS
CLOSE CURSOS
OPEN I-O CURSOS
GO TO ACESSO
...
...

3.

Aps a criao (feita com OUTPUT), o arquivo fechado e aberto novamente


no modo I-O (leitura e gravao). Logo em seguida, o programa desviado para
o pargrafo ACESSO, onde efetua nova pergunta para o usurio. Em caso de
resposta afirmativa, o programa executa a seo CADASTRO-SECT.

SOCIESC Sociedade Educacional de Santa Catarina

Programao Aplicada - Cobol

152

ACESSO.
INITIALIZE RESPOSTA.
DISPLAY "Deseja Acessar o Cadastro ? (S/N) - " AT 0520
WITH HIGHLIGHT.
ACCEPT RESPOSTA AT 0556 WITH HIGHLIGHT AUTO-SKIP.
IF

RESPOSTA = "S"
PERFORM CADASTRO-SECT

END-IF.

Vejamos o resultado na figura 41:

Figura 41 Execuo de CADCURSO at a pausa para resposta sobre acessar o


Cadastro de Cursos
4.

Agora, j na seo CADASTRO-SECT SECTION, o programa inicializa o


registro do curso e algumas variveis temporrias, depois exibe a tela principal e
pede que o usurio insira o cdigo do curso, na varivel editada CODIGO-EDIT:
INITIALIZE CURSO-REGISTRO CODIGO-EDIT MENSAGEM RESPOSTA.
DISPLAY TELA-CURSOS.
ACCEPT CODIGO-EDIT AT 0922 WITH REVERSE-VIDEO ON ESCAPE
GO TO CADASTRO-FIM.

Vejamos o resultado na figura 42:

SOCIESC Sociedade Educacional de Santa Catarina

Programao Aplicada - Cobol

153

Figura 42 Execuo de CADCURSO exibindo a tela principal de cadastro e


manuteno de cursos, aguardando o usurio entrar com o Cdigo
5.

Se o usurio teclar ESC, o sistema vai ser desviado para o final da seo e o
programa ser finalizado. Se o usurio digitar ZERO no cdigo, no ser aceito
e aguardar um valor vlido. Quando for digitado um valor vlido, o programa
transfere o seu contedo (que est numa varivel editada) para o campo da
chave primria do cadastro de cursos (CODIGO-CURSO) para efetuar a leitura,
verificando se um registro com essa chave j existe no arquivo ou no. Caso j
exista o registro (status 00) o programa desviado para a seo
MANUTENCAO-CURSO-SECT, onde sero apresentadas ao usurio as opes
Alterao, Excluso ou Voltar. Caso o registro no exista (status 23), o
programa questiona o usurio, se deseja cri-lo. Em caso afirmativo, o programa
desviado para a seo INCLUSAO-CURSO-SECT.

MOVE CODIGO-EDIT TO CODIGO-CURSO.


IF

CODIGO-CURSO = ZEROS
GO TO CADASTRO

END-IF.
CA100-LEITURA.
READ CURSOS RECORD.
IF

SIT-ARQUIVO = "00"
PERFORM MANUTENCAO-CURSO-SECT
GO TO CADASTRO

ELSE
IF

SIT-ARQUIVO = "23"

SOCIESC Sociedade Educacional de Santa Catarina

Programao Aplicada - Cobol

154

MOVE "CODIGO NAO EXISTE, INCLUIR? - " TO MENSAGEM


DISPLAY MENSAGEM AT 1822 WITH HIGHLIGHT
ACCEPT RESPOSTA
IF

AT 1852 WITH HIGHLIGHT AUTO-SKIP

RESPOSTA = "S"
PERFORM INCLUSAO-CURSO-SECT

END-IF
END-IF
END-IF

Vejamos o resultado nas figuras 43 e 44:

Figura 43 Execuo de CADCURSO quando o resultado da leitura indica que o


registro ainda no est cadastrado

SOCIESC Sociedade Educacional de Santa Catarina

Programao Aplicada - Cobol

155

Figura 44 Execuo de CADCURSO quando o resultado da leitura indica que o


registro j existe e o programa sugere as opes exibidas na rea de MENSAGEM

6.

Na seo de incluso, solicitado ao usurio que informe a descrio do curso


e o perodo (manh, tarde ou noite). Quando as informaes so validadas, o
programa pede confirmao para ratificar a incluso do registro no arquivo. O
usurio confirmando a incluso, o programa mostra uma mensagem, no caso da
operao ter sido realizada com sucesso:
INCLUSAO-CURSO-SECT SECTION.
INCLUSAO.
MOVE "Incluindo Registro..." TO MENSAGEM.
DISPLAY MENSAGEM AT 1822 WITH HIGHLIGHT.
ACCEPT DESCR-CURSO AT 1222 WITH REVERSE-VIDEO ON ESCAPE
GO TO INCLUSAO-FIM.
IF

DESCR-CURSO = SPACES
GO TO INCLUSAO

END-IF.
PERIODO.
DISPLAY PERIODO-CURSO AT 1522 WITH REVERSE-VIDEO.
MOVE "(M)anha (T)arde (N)oite" TO MENSAGEM.
DISPLAY MENSAGEM AT 1822 WITH HIGHLIGHT.
ACCEPT PERIODO-CURSO

AT 1522 WITH REVERSE-VIDEO AUTO-SKIP


ON ESCAPE GO TO INCLUSAO-FIM.

IF

PERIODO-CURSO NOT EQUAL "M" AND "T" AND "N"


GO TO PERIODO

END-IF.
CONFIRMACAO.
INITIALIZE RESPOSTA MENSAGEM.

SOCIESC Sociedade Educacional de Santa Catarina

Programao Aplicada - Cobol

156

MOVE "Confirma Inclusao ? (S)im - " TO MENSAGEM


DISPLAY MENSAGEM AT 1822 WITH HIGHLIGHT.
ACCEPT RESPOSTA
IF

AT 1850 WITH HIGHLIGHT AUTO-SKIP.

RESPOSTA NOT EQUAL "S"


GO TO INCLUSAO

END-IF.
GRAVAR.
WRITE CURSO-REGISTRO.
IF

SIT-ARQUIVO = "00"
MOVE "Inclusao OK !" TO MENSAGEM
PERFORM MOSTRA-MSG-SECT

ELSE
MOVE SPACES TO MENSAGEM
STRING "ERRO na Inclusao: Status= "
SIT-ARQUIVO
DELIMITED BY SIZE
INTO MENSAGEM
END-STRING
PERFORM MOSTRA-MSG-SECT
STOP RUN
END-IF.
INCLUSAO-FIM.
EXIT.

Vejamos o resultado na figura 45:

Figura 45 Execuo de CADCURSO quando o status da incluso foi bem


sucedido

SOCIESC Sociedade Educacional de Santa Catarina

Programao Aplicada - Cobol

7.

157

Na seo de alterao, tambm solicitado ao usurio que informe o que


mudou - a nova descrio do curso ou o novo perodo. Quando as informaes
so validadas, o programa pede confirmao para ratificar a alterao do
registro no arquivo. O usurio confirmando a alterao, o programa mostra uma
mensagem, no caso da operao ter sido realizada com sucesso:
ALTERACAO-CURSO-SECT SECTION.
ALTERACAO.
MOVE "Alterando Registro..." TO MENSAGEM.
DISPLAY MENSAGEM AT 1822 WITH HIGHLIGHT.
ACCEPT DESCR-CURSO AT 1222 WITH REVERSE-VIDEO
ON ESCAPE GO TO ALTERACAO-FIM.
IF

DESCR-CURSO = SPACES
GO TO ALTERACAO

END-IF.
PERIODO.
DISPLAY PERIODO-CURSO AT 1522 WITH REVERSE-VIDEO.
MOVE "(M)anha (T)arde (N)oite" TO MENSAGEM.
DISPLAY MENSAGEM AT 1822 WITH HIGHLIGHT.
ACCEPT PERIODO-CURSO AT 1522

WITH REVERSE-VIDEO AUTO


ON ESCAPE GO TO ALTERACAO-FIM.

IF

PERIODO-CURSO NOT EQUAL "M" AND "T" AND "N"


INITIALIZE PERIODO-CURSO
GO TO PERIODO

END-IF.
CONFIRMACAO.
INITIALIZE RESPOSTA.
MOVE "Confirma Alteracao ? (S)im - " TO MENSAGEM
DISPLAY MENSAGEM AT 1822 WITH HIGHLIGHT.
ACCEPT RESPOSTA
IF

AT 1851 WITH HIGHLIGHT AUTO-SKIP.

RESPOSTA NOT EQUAL "S"


GO TO ALTERACAO

END-IF.
REGRAVAR.
REWRITE CURSO-REGISTRO.
IF

SIT-ARQUIVO = "00"
MOVE "Alteracao OK !" TO MENSAGEM
PERFORM MOSTRA-MSG-SECT

ELSE
MOVE SPACES TO MENSAGEM
STRING "ERRO na Alteracao: Status= "
SIT-ARQUIVO
DELIMITED BY SIZE
INTO MENSAGEM

SOCIESC Sociedade Educacional de Santa Catarina

Programao Aplicada - Cobol

158

END-STRING
PERFORM MOSTRA-MSG-SECT
STOP RUN
END-IF.
ALTERACAO-FIM.
EXIT.

Vejamos o resultado na figura 46:

Figura 46 Execuo de CADCURSO quando o status da alterao foi bem


sucedido
8.

Como ltima operao relevante, quando o registro j existe e o usurio


seleciona que deseja exclu-lo, o programa executa, dentro da seo de
excluso, o comando para eliminao do registro do arquivo. Como padro, esse
programa exibe uma mensagem, no caso da operao ter sido realizada com
sucesso:
EXCLUSAO-CURSO-SECT SECTION.
EXCLUSAO.
DELETE CURSOS RECORD
IF

SIT-ARQUIVO = "00"
MOVE "Exclusao OK !" TO MENSAGEM
PERFORM MOSTRA-MSG-SECT

ELSE
MOVE SPACES TO MENSAGEM
STRING "ERRO na Exclusao: Status= "
SIT-ARQUIVO
DELIMITED BY SIZE

SOCIESC Sociedade Educacional de Santa Catarina

Programao Aplicada - Cobol

159

INTO MENSAGEM
END-STRING
PERFORM MOSTRA-MSG-SECT
STOP RUN
END-IF.
EXCLUSAO-FIM.
EXIT.

Vejamos o resultado na figura 47:

Figura 47 Execuo de CADCURSO quando o status da excluso foi bem


sucedido
Por fim, quando alguma dessas sees executada via PERFORM e o
controle retorna para a seo CADASTRO-SECT, h na ltima linha, o comando GO
TO, que leva o programa ao incio do processo, solicitando nova entrada de dados
no cdigo do curso:
GO TO CADASTRO.
CADASTRO-FIM.
EXIT.

Se verificarmos agora nosso diretrio de trabalho, veremos que existem dois


novos arquivos: CURSOS.DAT e CURSOS.IDX, conforme mostra a figura 48:

SOCIESC Sociedade Educacional de Santa Catarina

Programao Aplicada - Cobol

160

Figura 48 Imagem dos arquivos criados pelo CADCURSO, na pasta de trabalho


C:\COBOL\BINR.

Caro Aluno!
Compile esse programa com as diretivas de animao e execute-o linha por
linha, utilizando a tecla S (Step) e a tecla F2 (para mostrar a tela). Assim voc
poder entender ainda mais toda a lgica do programa CADCURSO. Voc pode
repetir o processo quantas vezes achar necessrio.
Vamos relembrar as diretivas de compilao para animao de programas:
COBOL CADCURSO.CBL ANIM;
LINK CARCURSO.OBJ;
ANIMATE CADCURSO

Teremos a seguinte apresentao que mostra a figura 49:

SOCIESC Sociedade Educacional de Santa Catarina

Programao Aplicada - Cobol

161

Figura 49 Programa CADCURSO animado, j posicionado na linha evidenciada


em amarelo, aps a tecla S ser pressionada duas vezes

Sntese
Nessa aula aprendemos a trabalhar com arquivos nativos do COBOL.
Evidenciamos os dois tipos mais utilizados, o arquivo texto (seqencial) e o arquivo
indexado. Tambm descrevemos detalhadamente as sintaxes dos comandos para
manipulao dos dados, desde a criao do arquivo, passando pelos comandos de
leitura, gravao, excluso, posicionamento do arquivo para consultas e relatrios,
finalizando com a definio do tratamento multi-usurio dos registros, necessrio
para o controle dos dados em ambientes de rede.

SOCIESC Sociedade Educacional de Santa Catarina

Programao Aplicada - Cobol

162

Exerccios Propostos
1. Monte uma SELECT para um arquivo de Livros. O cdigo do livro deve ser a
chave principal e o nome do livro a chave alternativa. O nome externo do arquivo
ser "LIVROS.DAT" e a varivel de controle do STATUS dever ser LIV-STATUS.
___________________________________________________________________
___________________________________________________________________
___________________________________________________________________
___
2. Monte a FD do arquivo Livros com os seguintes campos (os tamanhos dos
campos esto definidos entre os parnteses):
Cdigo Livro (07) - Nome Livro (50) - Data Edio (08) - Gnero Livro (1)
Sendo que:
a) A data dever ser desmembrada em dia, ms e ano.
b) O Gnero poder assumir os valores: I=INFORMATICA F=FICCAO
e

S=SOCIOLOGIA, que sero expressos na FD.

___________________________________________________________________
___________________________________________________________________
___________________________________________________________________
___
3.Complete as frases:
a) Para cada arquivo a ser utilizado pelo programa, haver sempre uma clusula
_________ e __________.
b) A declarao ______ permite que um bloco de ____________ ou variveis seja
inserido no programa a partir de um _____________
linguagem COBOL.
4.Assinale Verdadeiro ou Falso:

SOCIESC Sociedade Educacional de Santa Catarina

que contenha as regras da

Programao Aplicada - Cobol

163

) As clusulas inseridas no programa atravs da declarao COPY, no podem

ser usadas em vrios programas.


(

) O comando OPEN abre os arquivos do COBOL, sejam indexados ou

seqenciais.
(

) CLOSE ARQUIVO1 ARQUIVO2 ARQUIVO3 no suportado pelo COBOL.

) OPEN I-O ARQUIVO significa que estamos abrindo o arquivo para leitura e

gravao de dados.
(

) Para efetuarmos a leitura de um registro diretamente, carregamos a chave

primria antes da execuo do READ.


5.Descreva a linha do programa CADCURSO que realiza as seguintes aes:
a) Grava um Curso -___________________.
b) Regrava um Curso - ____________________
c) Exclui um Curso - _____________________________
d) L o Curso digitado pelo usurio - ________________________.
e) Exibe a Tela do programa - ___________________.
6.Na seo CADASTRO-SECT, a mensagem "CODIGO NAO EXISTE, INCLUIR?"
exibida em razo de qual sentena? E o que significa?
___________________________________________________________________
___________________________________________________________________
___________________________________________________________________
___
7.Quando o programa pede o perodo do curso, no precisamos teclar ENTER para
o programa continuar. Ele pula automaticamente para a prxima sentena. A que
clusula atribumos isso no ACCEPT ?
___________________________________________________________________
___________________________________________________________________
__
8.Analisando a sentena "IF

DESCR-CURSO = SPACES GO TO INCLUSAO",

qual o resumo que fazemos ?

SOCIESC Sociedade Educacional de Santa Catarina

Programao Aplicada - Cobol

Aula 10

CRIANDO UMA APLICAO


Objetivo da Aula
Ao final desta aula, voc dever ser capaz de:
 Desenvolver uma aplicao na linguagem COBOL utilizando
o conhecimento repassado nas aulas anteriores.

Contedos da Aula
Acompanhe os assuntos desta aula, se preferir, ao
terminar, assinale o contedo j estudado.


Estrutura do Arquivo

Definindo o Menu Principal

Compilao para subprogramas

Criando Programa de Manuteno

Criando Programa de Consulta

Criando Programa de Relatrio

Exerccios Propostos
Bem-vindo (a) a nossa dcima aula. Nessa aula vamos
procurar repassar como se desenvolve uma aplicao

completa na prtica. Desenvolver uma aplicao muito mais


abrangente do que desenvolver apenas um ou outro programa
isolado como vnhamos fazendo at agora. Para construirmos
nossa aplicao usaremos como base num arquivo de clientes de
uma empresa.
Bons Estudos!

SOCIESC Sociedade Educacional de Santa Catarina

164

Programao Aplicada - Cobol

165

1 ESTRUTURA DO ARQUIVO
Nosso arquivo de clientes ter nome externo CLIENTES.DAT, sua chave
principal ser o Cdigo do Cliente e a chave alternativa ser o Nome do Cliente.
Vejamos como ficou a declarao SELECT:
SELECT CLIENTES ASSIGN

TO "CLIENTES.DAT"

ORGANIZATION IS INDEXED
ACCESS MODE

IS DYNAMIC

RECORD KEY

IS CLI-CHAVE

= COD-CLIENTE

ALTERNATE RECORD KEY IS CLI-CHAVE-1 = NOME-CLIENTE


WITH DUPLICATES
FILE STATUS

IS SIT-ARQUIVO.

Esse SELECT dever ser salvo em nossa pasta de trabalho, com o nome
CLIENTES.SEL, pois ser utilizado em outros programas de nossa aplicao.
Vejamos agora a definio dos campos de nosso arquivo de clientes na FD:
*
* Declarao dos Dados do Arquivo de Clientes
*
FD

CLIENTES.

01

REGISTRO-CLIENTE.
03

COD-CLIENTE

PIC 9(007).

03

NOME-CLIENTE

PIC X(040).

03

DATA-NASC-CLIENTE

PIC 9(008).

03

REDEFINES DATA-NASC-CLIENTE.

03

03

05

DIA-NASC

PIC 9(002).

05

MES-NASC

PIC 9(002).

05

ANO-NASC

PIC 9(004).

EST-CIVIL-CLIENTE

PIC X(001).

88

SOLTEIRO

VALUE "S".

88

CASADO

VALUE "C".

88

DIVORCIADO

VALUE "D".

DADOS-DE-RESIDENCIA.
05

ENDERECO-CLIENTE

PIC X(050).

05

BAIRRO-CLIENTE

PIC X(030).

05

CIDADE-CLIENTE

PIC X(030).

05

ESTADO-CLIENTE

PIC X(002).

05

TELEFONE-CLIENTE

PIC 9(010).

05

REDEFINES TELEFONE-CLIENTE.
07

NUM-DDD

PIC 9(002).

07

NUM-FONE

PIC 9(008).

SOCIESC Sociedade Educacional de Santa Catarina

Programao Aplicada - Cobol

05

166

EMAIL-CLIENTE

PIC X(050).

03

DATA-1A-COMPRA-CLIENTE

PIC 9(008).

03

REDEFINES DATA-1A-COMPRA-CLIENTE.
05

DIA-1A-COMPRA

PIC 9(002).

05

MES-1A-COMPRA

PIC 9(002).

05

ANO-1A-COMPRA

PIC 9(004).

FILLER

PIC X(050).

03

Essa FD dever ser salva em nossa pasta de trabalho, com o nome


CLIENTES.FD, pois ser utilizada em vrios programas de nossa aplicao.
2 DEFININDO O MENU PRINCIPAL
Normalmente,

quando

definimos

uma

aplicao,

iniciamos

seu

desenvolvimento a partir de um menu principal. A partir desse menu, os programas


da aplicao so executados. Em nosso caso no ser diferente. Criaremos um
menu com base no programa MENU.CBL, que vimos algumas aulas atrs, e dever
ser salvo em nossa pasta de trabalho com o nome MENUCLI.CBL.
Programa MENUCLI.CBL
*
*...5....0....5....0....5....0....5....0....5....0....5....0....5....0..
*
IDENTIFICATION DIVISION.
PROGRAM-ID.

MENUCLI.

AUTHOR.

SOCIESC.

*
* Menu Principal da Aplicao de Clientes
*
DATA DIVISION.
WORKING-STORAGE SECTION.
01

OPCAO-MENU

PIC Z(001).

01

OPCAO

PIC 9(001) VALUE ZERO.

SCREEN SECTION.
01 TELA-PRINCIPAL.
02 BLANK SCREEN.
02 LINE 05 COL 21 VALUE "*----------------------------------*".

SOCIESC Sociedade Educacional de Santa Catarina

Programao Aplicada - Cobol

167

02 LINE 06 COL 21 VALUE "*


02 LINE 07 COL 21 VALUE "*

*".
CLIENTES - MENU PRINCIPAL

02 LINE 08 COL 21 VALUE "*

*".
*".

02 LINE 09 COL 21 VALUE "*----------------------------------*".


02 LINE 10 COL 21 VALUE "*

*".

02 LINE 11 COL 21 VALUE "*

*".

02 LINE 12 COL 21 VALUE "*

1 - Inclusao

*".

02 LINE 13 COL 21 VALUE "*

2 - Alteracao

*".

02 LINE 14 COL 21 VALUE "*

3 - Exclusao

*".

02 LINE 15 COL 21 VALUE "*

4 - Consulta

*".

02 LINE 16 COL 21 VALUE "*

5 - Relatorio

*".

02 LINE 17 COL 21 VALUE "*

6 - Sair

*".

02 LINE 18 COL 21 VALUE "*

*".

02 LINE 19 COL 21 VALUE "*

Opcao: ( )

*".

02 LINE 20 COL 21 VALUE "*

*".

02 LINE 21 COL 21 VALUE "*

*".

02 LINE 22 COL 21 VALUE "*----------------------------------*".

PROCEDURE DIVISION.
INICIO.
DISPLAY TELA-PRINCIPAL.
ACCEPT OPCAO-MENU AT 1941 WITH AUTO-SKIP.
MOVE OPCAO-MENU TO OPCAO
IF

OPCAO < 1 OR > 6


INITIALIZE OPCAO
GO TO INICIO

END-IF
EVALUATE OPCAO
WHEN 1
WHEN 2
WHEN 3 CALL "CADCLI" USING OPCAO ON OVERFLOW
PERFORM MENSAGEM-SECT
WHEN 4 CALL "CONCLI" ON OVERFLOW
PERFORM MENSAGEM-SECT
WHEN 5 CALL "RELCLI" ON OVERFLOW
PERFORM MENSAGEM-SECT
WHEN 6 GO TO FIM-PROGRAMA
END-EVALUATE.
INITIALIZE OPCAO-MENU.
GO TO INICIO.
FIM-PROGRAMA.
DISPLAY "FIM DE EXECUCAO" AT 2335 WITH REVERSE-VIDEO.
STOP RUN.

SOCIESC Sociedade Educacional de Santa Catarina

Programao Aplicada - Cobol

168

MENSAGEM-SECT SECTION.
MENSAGEM.
DISPLAY "Rotinas nao Disponiveis!" AT 2230 WITH HIGHLIGHT.
STOP " ".
MENSAGEM-FIM.
EXIT.

2.1 Entendendo o Programa Principal Menucli.Cbl


a. O programa exibe um menu com 6 opes. As trs primeiras (Incluso,
Alterao e Excluso) sero tratadas pelo subprograma CADCLI.
b. A opo 4 (Consulta) ser tratada pelo subprograma CONCLI.
c. A opo 5 (Relatrio) ser tratada pelo subprograma RELCLI.
d. A opo 6 (Sair) encerra a execuo da aplicao.
Esse ser o nico programa da aplicao que compilaremos com nosso
arquivo COMPILA.BAT No prximo tpico vamos explicar essa afirmao.

Caro aluno!
Antes de prosseguirmos, compile o programa MENUCLI.CBL com nosso modo
habitual de compilao.
A compilao ocorrendo sem erros, execute o mesmo. O resultado dever
ser o que mostra na figura 50:

SOCIESC Sociedade Educacional de Santa Catarina

Programao Aplicada - Cobol

169

Figura 50 Execuo do Programa MENUCLI


3 COMPILAO PARA SUBPROGRAMAS
At agora compilamos e linkamos a maioria de nossos programas da mesma
forma, usando o arquivo de lote COMPILA.BAT: isso significa, na prtica, que todos
os programas receberam as diretivas apontadas na execuo do LINK. Vamos
relembrar:
LINK/F<NOME-PROGRAMA.OBJ>+ADIS+ADISINI+ADISKEY+EXTFH

Quando deixamos de trabalhar com programas isolados e construmos uma


aplicao, apenas o programa principal deve ser linkado com a sintaxe. Os demais
programas devem ser linkados num formato mais leve, garantindo que durante o
processamento da aplicao no ocorram problemas com alocao ou estouro de
memria.
Alm disso, para a linguagem COBOL, basta que o programa principal seja
linkado com essas diretivas, para que todos os subprogramas chamados a partir do
programa principal compartilhem dos recursos.
Vejamos agora como vamos compilar e linkar os demais programas da
aplicao e, logo em seguida, a figura 51 demonstrando a compilao na prtica:
COBOL NOME-PROGRAMA.CBL;

SOCIESC Sociedade Educacional de Santa Catarina

Programao Aplicada - Cobol

LINK

170

NOME-PROGRAMA;

Figura 51 Exemplo de compilao para subprogramas, quando construmos uma


aplicao.
4 CRIANDO PROGRAMA DE MANUTENO
Como nossa aplicao vai gerenciar um cadastro de clientes, iniciamos o
desenvolvimento pelo programa de manuteno, que vai permitir cadastramento,
alterao e excluso de clientes. Vejamos como ficou a definio da tela desse
programa:

01 TELA-CLIENTE.
02 BLANK SCREEN.
02 LINE 2 COL 2 BACKGROUND-COLOR 1 HIGHLIGHT VALUE "+----------"----------------------------------------------------------------"-+".
02 LINE 3 COL 2 BACKGROUND-COLOR 1 HIGHLIGHT VALUE "|
-"

MANUTENCAO DE CLIENTES

-" |".
02 LINE 4 COL 2 BACKGROUND-COLOR 1 HIGHLIGHT VALUE "+----------"----------------------------------------------------------------"-+".
02 LINE 5 COL 2 HIGHLIGHT VALUE "|".
02 COL 78 HIGHLIGHT VALUE "|".
02 LINE 6 COL 2 HIGHLIGHT VALUE "|".
02 COL 12 HIGHLIGHT VALUE "Codigo:".
02 COL 78 HIGHLIGHT VALUE "|".
02 LINE 7 COL 2 HIGHLIGHT VALUE "|".

SOCIESC Sociedade Educacional de Santa Catarina

Programao Aplicada - Cobol

02 COL 14 HIGHLIGHT VALUE "Nome:".


02 COL 78 HIGHLIGHT VALUE "|".
02 LINE 8 COL 2 HIGHLIGHT VALUE "|".
02 COL 8 HIGHLIGHT VALUE "Data".
02 COL 13 HIGHLIGHT VALUE "Nasc.:".
02 COL 78 HIGHLIGHT VALUE "|".
02 LINE 9 COL 2 HIGHLIGHT VALUE "|".
02 COL 6 HIGHLIGHT VALUE "Estado".
02 COL 13 HIGHLIGHT VALUE "Civil:".
02 COL 78 HIGHLIGHT VALUE "|".
02 LINE 10 COL 2 HIGHLIGHT VALUE "|".
02 COL 78 HIGHLIGHT VALUE "|".
02 LINE 11 COL 2 HIGHLIGHT VALUE "|".
02 COL 10 HIGHLIGHT VALUE "Endereco:".
02 COL 78 HIGHLIGHT VALUE "|".
02 LINE 12 COL 2 HIGHLIGHT VALUE "|".
02 COL 12 HIGHLIGHT VALUE "Bairro:".
02 COL 78 HIGHLIGHT VALUE "|".
02 LINE 13 COL 2 HIGHLIGHT VALUE "|".
02 COL 12 HIGHLIGHT VALUE "Cidade:".
02 COL 51 HIGHLIGHT VALUE "UF:".
02 COL 58 HIGHLIGHT VALUE "Fone:".
02 COL 66 HIGHLIGHT VALUE "-".
02 COL 78 HIGHLIGHT VALUE "|".
02 LINE 14 COL 2 HIGHLIGHT VALUE "|".
02 COL 12 HIGHLIGHT VALUE "E-mail:".
02 COL 78 HIGHLIGHT VALUE "|".
02 LINE 15 COL 2 HIGHLIGHT VALUE "|".
02 COL 78 HIGHLIGHT VALUE "|".
02 LINE 16 COL 2 HIGHLIGHT VALUE "|".
02 COL 4 HIGHLIGHT VALUE "Data".
02 COL 9 HIGHLIGHT VALUE "1".
02 COL 12 HIGHLIGHT VALUE "Compra:".
02 COL 78 HIGHLIGHT VALUE "|".
02 LINE 17 COL 2 HIGHLIGHT VALUE "|".
02 COL 78 HIGHLIGHT VALUE "|".
02 LINE 18 COL 2 HIGHLIGHT VALUE "+----------------------------"-----------------------------------------------+".
02 LINE 19 COL 2 HIGHLIGHT VALUE "|".
02 COL 4 FOREGROUND-COLOR 1 HIGHLIGHT VALUE "MENSAGEM:".
02 COL 78 HIGHLIGHT VALUE "|".
02 LINE 20 COL 2 HIGHLIGHT VALUE "+----------------------------"-----------------------------------------------+".

SOCIESC Sociedade Educacional de Santa Catarina

171

Programao Aplicada - Cobol

172

Visto que a tela possui muitas informaes e tem partes definidas com cores
diferenciadas, a mesma j se encontra disponvel em sua pasta de trabalho com o
nome CLIENTES.TEL, para insero em nosso programa atravs da declarao
COPY.
Os campos solicitados na tela so os mesmos da FD CLIENTES.
Vejamos agora o programa de manuteno do arquivo de clientes, que dever
ser salvo em nossa pasta de trabalho com o nome CADCLI.CBL.
Programa CADCLI.CBL
IDENTIFICATION DIVISION.
PROGRAM-ID.

CADCLI.

AUTHOR.

SOCIESC.

*
* Manuteno do Arquivo de Cliente
*
ENVIRONMENT DIVISION.
INPUT-OUTPUT SECTION.
FILE-CONTROL.
COPY CLIENTES.SEL.
DATA DIVISION.
FILE SECTION.
COPY CLIENTES.FD.
WORKING-STORAGE SECTION.
01

01

VARIAVEIS-TEMPORARIAS.
03

CODIGO-EDIT

PIC ZZZZZZ9.

03

DATA-NASC-EDIT

PIC 99/99/9999.

03

DATA-1COMPRA-EDIT

PIC 99/99/9999.

03

RESPOSTA

PIC X(001).

03

MENSAGEM

PIC X(064).

AREA-TESTE-DATA.
03

DATA-TESTE

PIC 9(008).

03

STATUS-DATA

PIC X(001).

88

DATA-VALIDA

VALUE "S".

88

DATA-INVALIDA

VALUE "N".

SOCIESC Sociedade Educacional de Santa Catarina

Programao Aplicada - Cobol

77

MENSAGEM-INCLUSAO

173

PIC X(064) VALUE

"Informe o Codigo para INCLUSAO do novo Cliente !!!".


77

MENSAGEM-ALTERACAO

PIC X(064) VALUE

"Informe o Codigo do Cliente que deseja Alterar !!!".


77

MENSAGEM-EXCLUSAO

PIC X(064) VALUE

"Informe o Codigo do Cliente que deseja Excluir !!!".


77

SIT-ARQUIVO

PIC X(002)

VALUE SPACE.

LINKAGE SECTION.
01

OPCAO

PIC 9(001).

SCREEN SECTION.
COPY CLIENTES.TEL.
PROCEDURE DIVISION USING OPCAO.
INICIO.
DISPLAY ERASE AT 0101.
PERFORM ABRE-ARQUIVO-SECT.
INITIALIZE VARIAVEIS-TEMPORARIAS
*
* PODEMOS NOTAR QUE LOGO NO INCIO, O PROGRAMA
* J EXECUTA UMA SEO PARA ABRIR O ARQUIVO DE CLIENTES...
* NA SEQUENCIA, LOGO ABAIXO, ELE TESTA A OPO PASSADA
* VIA LINKAGE SECTION PELO PROGRAMA PRINCIPAL
* DEPOIS DE EXECUTAR A SEO CONFORME A OPCAO
* O PROGRAMA FECHA O ARQUIVO DE CLIENTES
* E RETORNA PARA O PROGRAMA CHAMADOR, ATRAVS DO EXIT PROGRAM
*
EVALUATE OPCAO
WHEN 1 PERFORM INCLUSAO-SECT
WHEN 2 PERFORM ALTERACAO-SECT
WHEN 3 PERFORM EXCLUSAO-SECT
END-EVALUATE
CLOSE CLIENTES.
EXIT PROGRAM.
INCLUSAO-SECT SECTION.
INCLUSAO.
INITIALIZE REGISTRO-CLIENTE VARIAVEIS-TEMPORARIAS.
DISPLAY ERASE AT 0101.
DISPLAY TELA-CLIENTE.

SOCIESC Sociedade Educacional de Santa Catarina

Programao Aplicada - Cobol

174

DISPLAY MENSAGEM-INCLUSAO AT 1914


ACCEPT CODIGO-EDIT AT 0620 WITH HIGHLIGHT ON ESCAPE
GO TO INCLUSAO-FIM.
MOVE CODIGO-EDIT TO COD-CLIENTE.
IF

COD-CLIENTE = ZEROS
GO TO INCLUSAO-FIM

END-IF.
LEITURA-ARQUIVO.
READ CLIENTES RECORD.
IF

SIT-ARQUIVO = "00"
MOVE "Cliente ja Existe-Tente outro codigo." TO MENSAGEM
PERFORM EXIBE-MSG-SECT
GO TO INCLUSAO

ELSE
IF

SIT-ARQUIVO = "23"
PERFORM ENTRADA-DADOS-SECT
IF

RESPOSTA EQUAL "C"


GO TO INCLUSAO

END-IF
END-IF
END-IF.
GRAVAR.
MOVE SPACES TO MENSAGEM
MOVE "Confirma Inclusao ? (S)im - " TO MENSAGEM
DISPLAY MENSAGEM AT 1914
ACCEPT RESPOSTA
IF

AT 1942 WITH AUTO-SKIP

RESPOSTA NOT EQUAL "S"


GO TO INCLUSAO

END-IF.
WRITE REGISTRO-CLIENTE.
IF

SIT-ARQUIVO = "00"
MOVE "Inclusao efetuada com Sucesso !" TO MENSAGEM
PERFORM EXIBE-MSG-SECT

ELSE
MOVE SPACES TO MENSAGEM
STRING "ERRO na Inclusao: Status= "
SIT-ARQUIVO
DELIMITED BY SIZE
INTO MENSAGEM
END-STRING
PERFORM EXIBE-MSG-SECT
STOP RUN
END-IF.
GO TO INCLUSAO.
INCLUSAO-FIM.

SOCIESC Sociedade Educacional de Santa Catarina

Programao Aplicada - Cobol

175

EXIT.
ALTERACAO-SECT SECTION.
ALTERACAO.
INITIALIZE REGISTRO-CLIENTE VARIAVEIS-TEMPORARIAS.
DISPLAY ERASE AT 0101.
DISPLAY TELA-CLIENTE.
DISPLAY MENSAGEM-ALTERACAO AT 1914
ACCEPT CODIGO-EDIT AT 0620 WITH HIGHLIGHT ON ESCAPE
GO TO ALTERACAO-FIM.
MOVE CODIGO-EDIT TO COD-CLIENTE.
IF

COD-CLIENTE = ZEROS
GO TO ALTERACAO-FIM

END-IF.
LEITURA-ARQUIVO.
READ CLIENTES RECORD.
IF

SIT-ARQUIVO = "23"
MOVE "Cliente nao Cadastrado !!!" TO MENSAGEM
PERFORM EXIBE-MSG-SECT
GO TO ALTERACAO

ELSE
IF

SIT-ARQUIVO = "00"
PERFORM MOSTRA-DADOS-SECT
PERFORM ENTRADA-DADOS-SECT
IF

RESPOSTA EQUAL "C"


GO TO ALTERACAO

END-IF
END-IF
END-IF.
REGRAVAR.
MOVE SPACES TO MENSAGEM, RESPOSTA
MOVE "Confirma Alteracao ? (S)im - " TO MENSAGEM
DISPLAY MENSAGEM AT 1914
ACCEPT RESPOSTA
IF

AT 1943 WITH AUTO-SKIP

RESPOSTA NOT EQUAL "S"


GO TO ALTERACAO

END-IF.
REWRITE REGISTRO-CLIENTE.
IF

SIT-ARQUIVO = "00"
MOVE "Alteracao efetuada com Sucesso !" TO MENSAGEM
PERFORM EXIBE-MSG-SECT

ELSE
MOVE SPACES TO MENSAGEM
STRING "ERRO na Inclusao: Status= "
SIT-ARQUIVO
DELIMITED BY SIZE

SOCIESC Sociedade Educacional de Santa Catarina

Programao Aplicada - Cobol

176

INTO MENSAGEM
END-STRING
PERFORM EXIBE-MSG-SECT
STOP RUN
END-IF.
GO TO ALTERACAO.
ALTERACAO-FIM.
EXIT.
*
* PODEMOS NOTAR QUE TANTO A SECAO DE INCLUSAO COMO A DE ALTERACAO,
* UTILIZAM A SEO ABAIXO, QUE FAZ A ENTRADA DOS DADOS NA TELA
*
* NA SEO ABAIXO, A TECLA ESC FAZ COM QUE O PROGRAMA RETORNE
* SEMPRE DO CAMPO ATUAL PARA O CAMPO ANTERIOR AT QUE ESTEJA NO
* PRIMEIRO CAMPO DA TELA ONDE ENTO ELE ABANDONA A ROTINA
*
* OUTRA CARACTERSTICA DESSE PROGRAMA A UTILIZAO
* DO SUBPROGRAMA VALDATA, PARA VALIDAO DE DATAS
*
ENTRADA-DADOS-SECT SECTION.
ENTRADA.
MOVE SPACES TO RESPOSTA.
ACCEPT NOME-CLIENTE AT 0720 WITH HIGHLIGHT
ON ESCAPE
MOVE "C" TO RESPOSTA
GO TO ENTRADA-FIM.
IF

NOME-CLIENTE = SPACES
GO TO ENTRADA

END-IF.
NASCIMENTO.
MOVE SPACES TO MENSAGEM.
DISPLAY MENSAGEM AT 1914
ACCEPT DATA-NASC-EDIT AT 0820 WITH HIGHLIGHT AUTO-SKIP
ON ESCAPE
GO TO ENTRADA.
MOVE DATA-NASC-EDIT TO DATA-TESTE
CALL "VALDATA" USING AREA-TESTE-DATA
IF

STATUS-DATA EQUAL "N"


MOVE "Data Nascimento Invalida!" TO MENSAGEM
DISPLAY MENSAGEM AT 1914
STOP " "
GO TO NASCIMENTO

END-IF.
MOVE DATA-TESTE TO DATA-NASC-CLIENTE.
ESTADOCIVIL.

SOCIESC Sociedade Educacional de Santa Catarina

Programao Aplicada - Cobol

177

MOVE "S=Solteiro C=Casado D=Divorciado" TO MENSAGEM.


DISPLAY MENSAGEM AT 1914.
ACCEPT EST-CIVIL-CLIENTE AT 0920 WITH HIGHLIGHT AUTO-SKIP
ON ESCAPE
GO TO NASCIMENTO.
IF

EST-CIVIL-CLIENTE NOT EQUAL "S" AND "C" AND "D"


GO TO NASCIMENTO

END-IF.
ENDERECO.
MOVE SPACES TO MENSAGEM.
DISPLAY MENSAGEM AT 1914.
ACCEPT ENDERECO-CLIENTE AT 1120 WITH HIGHLIGHT
ON ESCAPE
GO TO ESTADOCIVIL.
BAIRRO.
ACCEPT BAIRRO-CLIENTE AT 1220 WITH HIGHLIGHT
ON ESCAPE
GO TO ENDERECO.
CIDADE.
ACCEPT CIDADE-CLIENTE AT 1320 WITH HIGHLIGHT
ON ESCAPE
GO TO BAIRRO.
ESTADO.
ACCEPT ESTADO-CLIENTE AT 1355 WITH HIGHLIGHT AUTO-SKIP
ON ESCAPE
GO TO CIDADE.
DDD.
ACCEPT NUM-DDD AT 1364 WITH HIGHLIGHT AUTO-SKIP
ON ESCAPE
GO TO ESTADO.
FONE.
ACCEPT NUM-FONE AT 1368 WITH HIGHLIGHT AUTO-SKIP
ON ESCAPE
GO TO DDD.
EMAIL.
ACCEPT EMAIL-CLIENTE AT 1420 WITH HIGHLIGHT
ON ESCAPE
GO TO FONE.
PRIMEIRACOMPRA.
MOVE SPACES TO MENSAGEM.
DISPLAY MENSAGEM AT 1914.
ACCEPT DATA-1COMPRA-EDIT AT 1620 WITH HIGHLIGHT AUTO-SKIP
ON ESCAPE
GO TO EMAIL.
MOVE DATA-1COMPRA-EDIT TO DATA-TESTE
CALL "VALDATA" USING AREA-TESTE-DATA

SOCIESC Sociedade Educacional de Santa Catarina

Programao Aplicada - Cobol

IF

178

STATUS-DATA EQUAL "N"


MOVE "Data 1.Compra Invalida!" TO MENSAGEM
DISPLAY MENSAGEM AT 1914
STOP " "
GO TO PRIMEIRACOMPRA

END-IF.
MOVE DATA-TESTE TO DATA-1A-COMPRA-CLIENTE.
ENTRADA-FIM.
EXIT.
*
* A SEO ABAIXO EXIBE OS DADOS NA TELA QUANDO O CLIENTE
* J EST CADASTRADO, E UTILIZADA POR DUAS SEES: ALTERACAO E
* EXCLUSO
*
MOSTRA-DADOS-SECT SECTION.
MOSTRA.
MOVE DATA-NASC-CLIENTE

TO DATA-NASC-EDIT

MOVE DATA-1A-COMPRA-CLIENTE TO DATA-1COMPRA-EDIT


DISPLAY NOME-CLIENTE

AT 0720

DISPLAY DATA-NASC-EDIT

AT 0820

DISPLAY EST-CIVIL-CLIENTE AT 0920


DISPLAY ENDERECO-CLIENTE

AT 1120

DISPLAY BAIRRO-CLIENTE

AT 1220

DISPLAY CIDADE-CLIENTE

AT 1320

DISPLAY ESTADO-CLIENTE

AT 1355

DISPLAY NUM-DDD

AT 1364

DISPLAY NUM-FONE

AT 1368

DISPLAY EMAIL-CLIENTE

AT 1420

DISPLAY DATA-1COMPRA-EDIT AT 1620.


MOSTRA-FIM.
EXIT.
EXCLUSAO-SECT SECTION.
EXCLUSAO.
INITIALIZE REGISTRO-CLIENTE VARIAVEIS-TEMPORARIAS.
DISPLAY ERASE AT 0101.
DISPLAY TELA-CLIENTE.
DISPLAY MENSAGEM-EXCLUSAO AT 1914
ACCEPT CODIGO-EDIT AT 0620 WITH HIGHLIGHT ON ESCAPE
GO TO EXCLUSAO-FIM.
MOVE CODIGO-EDIT TO COD-CLIENTE.
IF

COD-CLIENTE = ZEROS
GO TO EXCLUSAO-FIM

END-IF.
LEITURA-ARQUIVO.
READ CLIENTES RECORD.

SOCIESC Sociedade Educacional de Santa Catarina

Programao Aplicada - Cobol

IF

179

SIT-ARQUIVO = "23"
MOVE "Cliente nao Cadastrado !!!" TO MENSAGEM
PERFORM EXIBE-MSG-SECT
GO TO EXCLUSAO

ELSE
IF

SIT-ARQUIVO = "00"
PERFORM MOSTRA-DADOS-SECT

END-IF
END-IF.
EXCLUIR.
MOVE SPACES TO MENSAGEM, RESPOSTA
MOVE "Confirma Exclusao ? (S)im - " TO MENSAGEM
DISPLAY MENSAGEM AT 1914
ACCEPT RESPOSTA
IF

AT 1942 WITH AUTO-SKIP

RESPOSTA NOT EQUAL "S"


GO TO EXCLUSAO

END-IF.
DELETE CLIENTES RECORD
IF

SIT-ARQUIVO = "00"
MOVE "Exclusao efetuada com Sucesso !" TO MENSAGEM
PERFORM EXIBE-MSG-SECT

ELSE
MOVE SPACES TO MENSAGEM
STRING "ERRO na Exclusao: Status= "
SIT-ARQUIVO
DELIMITED BY SIZE
INTO MENSAGEM
END-STRING
PERFORM EXIBE-MSG-SECT
STOP RUN
END-IF.
GO TO EXCLUSAO.
EXCLUSAO-FIM.
EXIT.
EXIBE-MSG-SECT SECTION.
EXIBE.
DISPLAY MENSAGEM AT 1914.
STOP " ".
EXIBE-FIM.
EXIT.
*
* AQUI TEMOS A SEO QUE ABRE O ARQUIVO. SE ELE NO EXISTE,
* CRIADO (OPEN OUTPUT) E DEPOIS ABERTO NOVAMENTE NO MODO
* I-O (INPUT / OUTPUT), OU SEJA, PARA LEITURA E GRAVAO.

SOCIESC Sociedade Educacional de Santa Catarina

Programao Aplicada - Cobol

180

*
ABRE-ARQUIVO-SECT SECTION.
ABRE.
OPEN INPUT CLIENTES.
IF

SIT-ARQUIVO = "30" OR "35"


OPEN OUTPUT CLIENTES
CLOSE CLIENTES

ELSE
IF

SIT-ARQUIVO = "00"
CLOSE CLIENTES

ELSE
DISPLAY "Erro na Abertura de CLIENTES.DAT - " AT 0520
DISPLAY SIT-ARQUIVO AT 0555
STOP RUN
END-IF
END-IF.
OPEN I-O CLIENTES.
ABRE-FIM.
EXIT.

Caro aluno, vamos agora compilar o programa CADCLI.CBL sem as


diretivas no link:
COBOL CADCLI.CBL;
LINK CADCLI;

Como se trata de um subprograma, no momento que a compilao ocorrer sem


erros, no pode ser executado diretamente. Devemos executar o programa principal
MENUCLI e selecionar as opes de 1 a 3, previstas em nosso programa CADCLI.
Ao executar uma das trs opes, ser mostrada a tela, conforme mostramos na
figura 52:

SOCIESC Sociedade Educacional de Santa Catarina

Programao Aplicada - Cobol

181

Figura 52 Execuo do programa CADCLI.

Antes de prosseguirmos, insira alguns clientes nesse cadastro (no


mnimo 10), de acordo com sua escolha. Os registros sero teis no decorrer
de nossa aula, nos programas que ainda esto por vir (consulta e relatrio). A
nica recomendao que voc procure diversificar bastante os dados para
cada cliente includo, o que vai evidenciar melhor os dados na consulta e no
relatrio.
5 CRIANDO PROGRAMA DE CONSULTA
Agora que temos 10 clientes cadastrados, uma boa hora para consultarmos o
cadastro. Vejamos como ficou a definio da tela desse programa:
01 TELA-CONSULTA.
02 BLANK SCREEN.
02 LINE 2 COL 2 BACKGROUND-COLOR 1 HIGHLIGHT VALUE "+----------"----------------------------------------------------------------"-+".
02 LINE 3 COL 2 BACKGROUND-COLOR 1 HIGHLIGHT VALUE "|
-"

CONSULTA CADASTRO DE CLIENTES

-" |".
02 LINE 4 COL 2 BACKGROUND-COLOR 1 HIGHLIGHT VALUE "+----------"----------------------------------------------------------------"-+".
02 LINE 5 COL 2 HIGHLIGHT VALUE "|".
02 COL 78 HIGHLIGHT VALUE "|".
02 LINE 6 COL 2 HIGHLIGHT VALUE "|".

SOCIESC Sociedade Educacional de Santa Catarina

Programao Aplicada - Cobol

02 COL 5 HIGHLIGHT VALUE "Consultar".


02 COL 15 HIGHLIGHT VALUE "por".
02 COL 19 HIGHLIGHT VALUE "(C)odigo".
02 COL 28 HIGHLIGHT VALUE "ou".
02 COL 31 HIGHLIGHT VALUE "(N)ome".
02 COL 38 HIGHLIGHT VALUE "-".
02 COL 44 HIGHLIGHT VALUE "Consultar".
02 COL 54 HIGHLIGHT VALUE "a".
02 COL 56 HIGHLIGHT VALUE "partir".
02 COL 63 HIGHLIGHT VALUE "da".
02 COL 66 HIGHLIGHT VALUE "Letra".
02 COL 72 HIGHLIGHT VALUE "-".
02 COL 78 HIGHLIGHT VALUE "|".
02 LINE 7 COL 2 HIGHLIGHT VALUE "|".
02 COL 78 HIGHLIGHT VALUE "|".
02 LINE 8 COL 2 HIGHLIGHT VALUE "|".
02 COL 6 HIGHLIGHT VALUE "Codigo".
02 COL 13 HIGHLIGHT VALUE "Nome".
02 COL 54 HIGHLIGHT VALUE "Dt.Nascto.".
02 COL 65 HIGHLIGHT VALUE "Est.Civil".
02 COL 78 HIGHLIGHT VALUE "|".
02 LINE 9 COL 2 HIGHLIGHT VALUE "|".
02 COL 78 HIGHLIGHT VALUE "|".
02 LINE 10 COL 2 HIGHLIGHT VALUE "|".
02 COL 78 HIGHLIGHT VALUE "|".
02 LINE 11 COL 2 HIGHLIGHT VALUE "|".
02 COL 78 HIGHLIGHT VALUE "|".
02 LINE 12 COL 2 HIGHLIGHT VALUE "|".
02 COL 78 HIGHLIGHT VALUE "|".
02 LINE 13 COL 2 HIGHLIGHT VALUE "|".
02 COL 78 HIGHLIGHT VALUE "|".
02 LINE 14 COL 2 HIGHLIGHT VALUE "|".
02 COL 78 HIGHLIGHT VALUE "|".
02 LINE 15 COL 2 HIGHLIGHT VALUE "|".
02 COL 78 HIGHLIGHT VALUE "|".
02 LINE 16 COL 2 HIGHLIGHT VALUE "|".
02 COL 78 HIGHLIGHT VALUE "|".
02 LINE 17 COL 2 HIGHLIGHT VALUE "|".
02 COL 78 HIGHLIGHT VALUE "|".
02 LINE 18 COL 2 HIGHLIGHT VALUE "+----------------------------"-----------------------------------------------+".
02 LINE 19 COL 2 HIGHLIGHT VALUE "|".
02 COL 4 FOREGROUND-COLOR 1 HIGHLIGHT VALUE "MENSAGEM:".
02 COL 78 HIGHLIGHT VALUE "|".
02 LINE 20 COL 2 HIGHLIGHT VALUE "+----------------------------"-----------------------------------------------+".

SOCIESC Sociedade Educacional de Santa Catarina

182

Programao Aplicada - Cobol

183

Essa tela tambm est disponvel em sua pasta de trabalho com o nome
CONCLI.TEL, para insero em nosso programa atravs da declarao COPY.
Nosso programa de consulta dever ser salvo na pasta de trabalho, com o
nome CONCLI.CBL.
Programa CONCLI.CBL
IDENTIFICATION DIVISION.
PROGRAM-ID.
AUTHOR.

CONCLI.
SOCIESC.

*
* Consulta Arquivos de Clientes
*
ENVIRONMENT DIVISION.
INPUT-OUTPUT SECTION.
FILE-CONTROL.
COPY CLIENTES.SEL.
DATA DIVISION.
FILE SECTION.
COPY CLIENTES.FD.
WORKING-STORAGE SECTION.
01

77

VARIAVEIS-TEMPORARIAS.
03

CODIGO-EDIT

03

DATA-NASC-EDIT

PIC 99/99/9999.

03

DESCR-EST-CIVIL

PIC X(010).

03

MENSAGEM

PIC X(064).

03

LINHA-EM-BRANCO

PIC X(075).

03

LINHAS-POR-TELA

PIC 9(001).

03

NUM-LIN

PIC 9(002).

03

RESPOSTA

PIC X(001).

03

TPO-CONSULTA

PIC X(001).

03

LETRA-CONSULTA

PIC X(001).

SIT-ARQUIVO

PIC ZZZZZZ9.

PIC X(002)

VALUE SPACE.

SCREEN SECTION.
COPY CONCLI.TEL.
PROCEDURE DIVISION.

SOCIESC Sociedade Educacional de Santa Catarina

Programao Aplicada - Cobol

184

INICIO.
DISPLAY ERASE AT 0101.
INITIALIZE VARIAVEIS-TEMPORARIAS
OPEN INPUT CLIENTES.
IF

SIT-ARQUIVO = "00"
PERFORM CONSULTA-CLIENTES-SECT

END-IF
CLOSE CLIENTES
EXIT PROGRAM.
CONSULTA-CLIENTES-SECT SECTION.
CONSULTA.
INITIALIZE REGISTRO-CLIENTE VARIAVEIS-TEMPORARIAS.
DISPLAY ERASE AT 0101.
DISPLAY TELA-CONSULTA.
ACCEPT TPO-CONSULTA AT 0640 WITH AUTO-SKIP HIGHLIGHT
ON ESCAPE GO TO CONSULTA-FIM.
IF

TPO-CONSULTA = SPACES
GO TO CONSULTA-FIM

END-IF.
IF

TPO-CONSULTA NOT = "C" AND "N"


GO TO CONSULTA

END-IF.
IF

TPO-CONSULTA = "C"
GO TO POSICIONA-ARQUIVO

END-IF.
INICONSULTA.
ACCEPT LETRA-CONSULTA AT 0674 WITH AUTO-SKIP HIGHLIGHT
ON ESCAPE GO TO CONSULTA.
POSICIONA-ARQUIVO.
*
* O PROGRAMA PERMITE A CONSULTA POR ORDEM NUMRICA OU
* ALFABTICA. DE ACORDO COM A ESCOLHA DO USURIO, O
* ARQUIVO DE CLIENTES POSICIONADO PELA CHAVE PRIMARIA
* (CODIGO CLIENTE) OU PELA ALTERNATIVA (NOME-CLIENTE)
* AS DEFINIES DE CLI-CHAVE E CLI-CHAVE-1 ESTO NA SELECT
* DO ARQUIVO DE CLIENTES
*
IF

TPO-CONSULTA = "C"
START CLIENTES KEY IS >= CLI-CHAVE

ELSE
MOVE LETRA-CONSULTA TO NOME-CLIENTE
START CLIENTES KEY IS >= CLI-CHAVE-1
END-IF
MOVE 8 TO NUM-LIN
PERFORM CARREGA-CONSULTA-SECT.

SOCIESC Sociedade Educacional de Santa Catarina

Programao Aplicada - Cobol

185

CONSULTA-FIM.
EXIT.
CARREGA-CONSULTA-SECT SECTION.
CARREGA.
READ CLIENTES NEXT.
IF

SIT-ARQUIVO NOT = "00" AND 02


MOVE "FIM DE ARQUIVO !!!" TO MENSAGEM
DISPLAY MENSAGEM AT 1914
STOP " "
GO TO CARREGA-FIM

END-IF.
*
* A CONSULTA LIMITA 8 CLIENTES POR TELA, CONTROLADA PELA
* VARIVEL LINHAS-POR-TELA SE EXISTIREM MAIS QUE 8
* REGISTROS, O PROGRAMA AGUARDA O USURIO ESCOLHER A PROXIMA
* AO - <ENTER>=CONTINUA <A>=ABANDONA)
*
* EM CASO DO USURIO ESCOLHER CONTINUAR, A VARIVEL LINHAS-POR-TELA
* VOLTA A TER VALOR 1, E A TELA SER LIMPA PARA APRESENTACAO DE
* MAIS OITO REGISTROS NA CONSULTA, OU AT QUE TERMINEM OS REGISTROS.
*
ADD 1 TO LINHAS-POR-TELA NUM-LIN.
IF

LINHAS-POR-TELA > 8
DISPLAY "<ENTER>=CONTINUA <A>=ABANDONA" AT 1914
ACCEPT RESPOSTA AT 1945
IF

RESPOSTA = "A"
GO TO CARREGA-FIM

END-IF
MOVE 1 TO LINHAS-POR-TELA
MOVE 9 TO NUM-LIN
PERFORM LIMPA-TELA-SECT 8 TIMES
MOVE 9 TO NUM-LIN
END-IF.
PERFORM MOSTRA-DADOS-SECT.
GO TO CARREGA.
CARREGA-FIM.
EXIT.
MOSTRA-DADOS-SECT SECTION.
MOSTRA.
MOVE COD-CLIENTE

TO CODIGO-EDIT

MOVE DATA-NASC-CLIENTE

TO DATA-NASC-EDIT

EVALUATE EST-CIVIL-CLIENTE
WHEN "S" MOVE "Solteiro"

TO DESCR-EST-CIVIL

WHEN "C" MOVE "Casado"

TO DESCR-EST-CIVIL

SOCIESC Sociedade Educacional de Santa Catarina

Programao Aplicada - Cobol

186

WHEN "D" MOVE "Divorciado" TO DESCR-EST-CIVIL


END-EVALUATE
DISPLAY CODIGO-EDIT

AT LINE NUM-LIN COL 05

DISPLAY NOME-CLIENTE

AT LINE NUM-LIN COL 13

DISPLAY DATA-NASC-EDIT

AT LINE NUM-LIN COL 54

DISPLAY DESCR-EST-CIVIL

AT LINE NUM-LIN COL 65.

MOSTRA-FIM.
EXIT.
LIMPA-TELA-SECT SECTION.
LIMPA.
MOVE SPACES TO LINHA-EM-BRANCO.
DISPLAY LINHA-EM-BRANCO AT LINE NUM-LIN COL 03.
ADD 1 TO NUM-LIN.
LIMPA-FIM.
EXIT.

Vamos agora compilar o programa CONCLI.CBL sem as diretivas no link:


COBOL CONCLI.CBL;
LINK CONCLI;

Como se trata de um subprograma, no momento que a compilao ocorrer sem


erros, no pode ser executado diretamente. Devemos executar o programa principal
MENUCLI. Ao selecionarmos a opo 4, ser mostrada a tela, conforme a figura 53:

Figura 53 Execuo do programa CONCLI.

SOCIESC Sociedade Educacional de Santa Catarina

Programao Aplicada - Cobol

187

Podemos selecionar a consulta por cdigo ou nome e ainda, quando a


consulta for por nome, podemos iniciar a partir de determinada letra. Vejamos o
resultado da consulta por nome, conforme mostra a figura 54.

Figura 54 Execuo de CONCLI com opo por nome, sem definio de letra
inicial.
Como temos 10 clientes cadastrados, podemos notar que apenas os 8
primeiros vieram para a tela, conforme foi definido na lgica do programa. Se o
usurio teclar ENTER, a tela ser limpa e os outros dois sero carregados. Voc
pode verificar isto teclando ENTER no seu programa.
Vejamos agora o resultado da consulta por nome, iniciando a partir da letra P
como mostra a figura 55:

SOCIESC Sociedade Educacional de Santa Catarina

Programao Aplicada - Cobol

188

Figura 55 Execuo de CONCLI com opo por nome, iniciando a partir da letra
P.
6 CRIANDO PROGRAMA DE RELATRIO
Existem muitas formas de se gerar relatrios em COBOL. Nas verses mais
atualizadas, como o NETEXPRESS da MicroFocus, temos como construir relatrios
grficos diretamente pelo COBOL ou podemos integrar o COBOL com vrios
geradores de relatrios existentes no mercado, atravs de DLLs. Essa situao vai
variar muito de empresa para empresa, e de aplicao para aplicao.
Vamos demonstrar aqui uma forma muito comum de gerao de relatrio, que
a gravao do mesmo em formato TXT. Ou seja, ao invs de enviar o relatrio
diretamente para a impressora, gravamos o mesmo em disco.
Quando se trata da gerao de relatrios em COBOL, acessando arquivos,
existe uma declarao que auxilia muito os programadores a criarem suas listagens,
classificando as informaes nos formatos mais variados a declarao SORT.
Ento, antes de apresentarmos o programa RELCLI.CBL, vamos conhecer
essa declarao e o que ela pode fazer.
6.1 Declarao Sort
Normalmente, quando trabalhamos com arquivos indexados, podemos
classificar as informaes de forma direta, apenas pelos campos definidos como
chave primria e chave alternativa.
Nosso programa anterior de consulta mostra bem essa situao, posicionando
o arquivo de clientes para leitura, hora pela chave principal CLI-CHAVE, hora pela
chave alternativa CLI-CHAVE-1.
E se surgir a necessidade de gerar algum relatrio classificado por um campo
do arquivo que no conste na definio das chaves? No programa que veremos a
seguir, temos a opo de listar os clientes por ordem de UF. Mas como podemos
fazer isso, se as chaves do arquivo contemplam apenas COD-CLIENTE e NOMECLIENTE? nessa hora que usamos o recurso da declarao SORT, um utilitrio
do COBOL que serve para que seja possvel classificar as informaes de um
arquivo em qualquer formato, tanto em Ordem Crescente como Decrescente.
SOCIESC Sociedade Educacional de Santa Catarina

Programao Aplicada - Cobol

189

Vamos exemplificar no programa RELCLI um SORT para arquivos indexados


(ele tambm pode operar para tabelas definidas na WORKING).
6.2 Utilizando um Arquivo Sort
Para utilizar um arquivo SORT devemos seguir a seguinte seqncia:
1. Primeiramente definimos uma SELECT e uma FD para o arquivo
SORT. Na SELECT, ao invs de usarmos FILE STATUS, usamos
SORT STATUS. Na FILE SECTION, ao invs de FD, usamos SD.
Assim, o compilador reconhece que se trata de um arquivo de
classificao (SORT). O arquivo SORT de controle do COBOL, ou
seja, ser aberto e fechado automaticamente pelo compilador, o
programador no precisa efetuar nenhum comando OPEN ou CLOSE.
Veja o exemplo abaixo da definio do arquivo SORT, que utilizaremos
no programa RELCLI:
SELECT CLIESTADO

ASSIGN

TO DISK

SORT STATUS IS SIT-ARQUIVO.


...
...
...
SD

CLIESTADO.

01

SCLI-REGISTRO.
03

SCLI-ESTADO

PIC X(002).

03

SCLI-CODIGO

PIC 9(007).

03

SCLI-NOME

PIC X(040).

03

SCLI-DATA-NASC

PIC 9(008).

2. Na PROCEDURE DIVISION, declaramos a utilizao do arquivo SORT


com a seguinte sintaxe:
SORT NOME-ARQUIVO ON ASCENDING

KEY IS <CAMPO-1,CAMPO-2,...>

DESCENDING KEY IS <CAMPO-1,CAMPO-2,...>


INPUT-PROCEDURE

IS <SEO-DE-CLASSIFICAO>

OUTPUT-PROCEDURE IS <SEO-DE-IMPRESSO>.

SOCIESC Sociedade Educacional de Santa Catarina

Programao Aplicada - Cobol

190

Aps definir o tipo de ordenao (ASCENDING ou DESCENDING) e quais


campos sero usados para classificar o arquivo, devem ser declaradas duas sees:
a primeira, que grava o arquivo SORT na ordem especificada e a segunda que vai
imprimir o que foi classificado na primeira.
Na seo INPUT-PROCEDURE, no gravamos dados no arquivo SORT com o
comando WRITE, usamos o comando RELEASE.
Na seo OUTPUT-PROCEDURE, no lemos dados do arquivo SORT com
READ, usamos o comando RETURN.
Veja agora o exemplo abaixo da chamada funo SORT, dentro do programa
RELCLI:
SORT CLIESTADO ON ASCENDING KEY SCLI-ESTADO
INPUT PROCEDURE

IS CLASSIFICA-SORT-SECT

OUTPUT PROCEDURE IS EMITE-SORT-SECT

Dados os devidos esclarecimentos sobre essa importante declarao do


COBOL, vamos ao programa de gerao de relatrios, que dever ser salvo na
pasta de trabalho, com o nome RELCLI.CBL.
Vejamos como ficou a tela de nosso programa:
01 TELA-RELATORIO.
02 BLANK SCREEN.
02 LINE 2 COL 2 BACKGROUND-COLOR 1 HIGHLIGHT VALUE "+----------"---------------------------------------------------------+".
02 LINE 3 COL 2 BACKGROUND-COLOR 1 HIGHLIGHT VALUE "|
-"

RELATORIO DE CLIENTES

|".

02 LINE 4 COL 2 BACKGROUND-COLOR 1 HIGHLIGHT VALUE "+----------"---------------------------------------------------------+".


02 LINE 5 COL 2 HIGHLIGHT VALUE "|".
02 COL 70 HIGHLIGHT VALUE "|".
02 LINE 6 COL 2 HIGHLIGHT VALUE "|".
02 COL 5 HIGHLIGHT VALUE "Listar".
02 COL 12 HIGHLIGHT VALUE "por".
02 COL 16 HIGHLIGHT VALUE "(C)odigo".
02 COL 25 HIGHLIGHT VALUE "-".
02 COL 27 HIGHLIGHT VALUE "(N)ome".
02 COL 34 HIGHLIGHT VALUE "-".
02 COL 36 HIGHLIGHT VALUE "(E)stado".
02 COL 45 HIGHLIGHT VALUE "-".

SOCIESC Sociedade Educacional de Santa Catarina

Programao Aplicada - Cobol

191

02 COL 70 HIGHLIGHT VALUE "|".


02 LINE 7 COL 2 HIGHLIGHT VALUE "|".
02 COL 70 HIGHLIGHT VALUE "|".
02 LINE 8 COL 2 HIGHLIGHT VALUE "|".
02 COL 70 HIGHLIGHT VALUE "|".
02 LINE 9 COL 2 HIGHLIGHT VALUE "+-----------------------------"--------------------------------------+".
02 LINE 10 COL 2 HIGHLIGHT VALUE "|".
02 COL 4 FOREGROUND-COLOR 1 HIGHLIGHT VALUE "MENSAGEM:".
02 COL 70 HIGHLIGHT VALUE "|".
02 LINE 11 COL 2 HIGHLIGHT VALUE "+----------------------------"---------------------------------------+".

Caro Aluno!
A tela tambm est disponvel em sua pasta de trabalho com o nome
RELCLI.TEL, para insero em nosso programa atravs da declarao COPY.
Programa RELCLI.CBL
IDENTIFICATION DIVISION.
PROGRAM-ID.
AUTHOR.

RELCLI.
SOCIESC.

*
* Relatorio do Cadastro de Clientes
*
ENVIRONMENT DIVISION.
INPUT-OUTPUT SECTION.
FILE-CONTROL.
COPY CLIENTES.SEL.
SELECT RELAT

ASSIGN

TO "CLIENTES.TXT"

ORGANIZATION IS LINE SEQUENTIAL

SELECT CLIESTADO

FILE STATUS

IS SIT-ARQUIVO.

ASSIGN

TO DISK

SORT STATUS IS SIT-ARQUIVO.


DATA DIVISION.
FILE SECTION.
COPY CLIENTES.FD.

SOCIESC Sociedade Educacional de Santa Catarina

Programao Aplicada - Cobol

FD

RELAT.

01

RELAT-REGISTRO.
03

FILLER

SD

CLIESTADO.

01

SCLI-REGISTRO.

192

PIC X(080).

03

SCLI-ESTADO

PIC X(002).

03

SCLI-CODIGO

PIC 9(007).

03

SCLI-NOME

PIC X(040).

03

SCLI-DATA-NASC

PIC 9(008).

WORKING-STORAGE SECTION.
01

77

VARIAVEIS-TEMPORARIAS.
03

CODIGO-EDIT

PIC ZZZZZZ9.

03

DATA-NASC-EDIT

PIC 99/99/9999.

03

MENSAGEM

PIC X(050).

03

RESPOSTA

PIC X(001).

03

TPO-RELATORIO

PIC X(001).

03

LINHAS-IMPRESSAS

PIC 9(002).

SIT-ARQUIVO

PIC X(002)

VALUE SPACES.

*
* OS GRUPOS DE VARIVEIS ABAIXO QUE COMEAM COM A PALAVRA LINHA,
* ESTO DEFININDO O LAYOUT DE NOSSO RELATRIO.
* LINHA-CABECALHO-1 E LINHA-CABECALHO-2 SERO UTILIZADOS NO
* CABECALHO DE NOSSO RELATORIO. LINHA-DETALHE A LINHA
* USADA PARA IMPRESSO DOS DADOS DOS CLIENTES.
*
01

LINHA-CABECALHO-1.
03

FILLER

PIC X(010)

VALUE SPACES.

03

FILLER

PIC X(040)

VALUE

"SOCIESC - RELATORIO DE CLIENTES - ORDEM ".


03
03
01

LIN-TPO-RELATORIO
FILLER

PIC X(010).
PIC X(020)

VALUE SPACES.

PIC X(015)

VALUE

PIC X(036)

VALUE SPACES.

PIC X(029)

VALUE

LINHA-CABECALHO-2.
03
"

FILLER
Codigo

Nome ".

03

FILLER

03

FILLER

" Data Nasc.

Estado ".

SOCIESC Sociedade Educacional de Santa Catarina

Programao Aplicada - Cobol

01

193

LINHA-DETALHE.
03
03

FILLER
LIN-COD-CLIENTE

03
03

FILLER
LIN-NOME-CLIENTE

03
03

FILLER
LIN-DATA-NASC

03
03

FILLER
LIN-ESTADO

PIC X(001)

VALUE SPACE.

PIC ZZZZZZ9.
PIC X(002)

VALUE SPACE.

PIC X(040).
PIC X(002)

VALUE SPACE.

PIC 99/99/9999.
PIC X(005)

VALUE SPACE.

PIC X(002).

SCREEN SECTION.
COPY RELCLI.TEL.
PROCEDURE DIVISION.
INICIO.
DISPLAY ERASE AT 0101.
INITIALIZE VARIAVEIS-TEMPORARIAS
OPEN INPUT CLIENTES.
IF

SIT-ARQUIVO = "00"
PERFORM IMPRIME-CLIENTES-SECT

END-IF
CLOSE CLIENTES
EXIT PROGRAM.
IMPRIME-CLIENTES-SECT SECTION.
IMPRIME.
INITIALIZE REGISTRO-CLIENTE VARIAVEIS-TEMPORARIAS.
DISPLAY ERASE AT 0101.
DISPLAY TELA-RELATORIO.
ACCEPT TPO-RELATORIO AT 0647 WITH AUTO-SKIP HIGHLIGHT
ON ESCAPE GO TO IMPRIME-FIM.
IF

TPO-RELATORIO = SPACES
GO TO IMPRIME-FIM

END-IF.
IF

TPO-RELATORIO NOT = "C" AND "N" AND "E"


GO TO IMPRIME

END-IF.
ARQUIVO-RELATORIO.
*
* LOGO ABAIXO, O PROGRAMA VAI CRIAR O ARQUIVO TXT DO RELATRIO,
* COM OUTPUT EM SEGUIDA, O PROGRAMA DESVIADO
* PARA UMA SEO ONDE SER MONTADO O CABECALHO.
* ACONSELHVEL QUE SE TENHA SEMPRE A SECAO DE CABECALHO
* SEPARADA, POIS A CADA QUEBRA DE PGINA O CABECALHO
* SERA NOVAMENTE IMPRESSO.

SOCIESC Sociedade Educacional de Santa Catarina

Programao Aplicada - Cobol

194

*
OPEN OUTPUT RELAT.
PERFORM CABECALHO-SECT.
EVALUATE TPO-RELATORIO
WHEN "C" START CLIENTES KEY IS >= CLI-CHAVE
PERFORM LISTA-CLIENTES-SECT
WHEN "N" START CLIENTES KEY IS >= CLI-CHAVE-1
PERFORM LISTA-CLIENTES-SECT
WHEN "E" SORT CLIESTADO ON ASCENDING KEY SCLI-ESTADO
INPUT PROCEDURE

IS CLASSIFICA-SORT-SECT

OUTPUT PROCEDURE IS EMITE-SORT-SECT


END-EVALUATE
CLOSE RELAT.
IMPRIME-FIM.
EXIT.
*
* NA SEQNCIA ACIMA, DENTRO DO EVALUATE, CONFORME O CONTEDO
* DA VARIVEL TPO-RELATRIO, O PROGRAMA POSICIONA O ARQUIVO DE
* CLIENTES COM CLI-CHAVE OU CLI-CHAVE-1 E NA LTIMA OPCAO,
* EXECUTA O SORT PARA CLASSIFICAR AS INFORMAES PELA VARIVEL
* SCLI-ESTADO
*
LISTA-CLIENTES-SECT SECTION.
LISTA.
READ CLIENTES NEXT.
IF

SIT-ARQUIVO = "10"
MOVE "FIM DE EXECUCAO !!!" TO MENSAGEM
DISPLAY MENSAGEM AT 1014
STOP " "
IF

LINHAS-IMPRESSAS > 0
MOVE "RELATORIO GRAVADO NO ARQUIVO CLIENTES.TXT!"
TO MENSAGEM
DISPLAY MENSAGEM AT 1014
STOP " "

END-IF
GO TO LISTA-FIM
END-IF.
ADD 1 TO LINHAS-IMPRESSAS
*
* AQUI TEMOS A VARIVEL LINHAS-IMPRESSAS CONTROLANDO A QUANTIDADE
* DE LINHAS POSSVEIS POR PGINA NESTE PROGRAMA USAMOS 60 LINHAS
* POR PGINA COMO PADRO. QUANTO ESTE VALOR ESTOURAR, O PROGRAMA
* VAI GRAVAR UMA INSTRUO BEFORE PAGE E VAI LISTAR O CABECALHO
* NOVAMENTE.
*
IF

LINHAS-IMPRESSAS > 60

SOCIESC Sociedade Educacional de Santa Catarina

Programao Aplicada - Cobol

195

MOVE SPACES TO RELAT-REGISTRO


WRITE RELAT-REGISTRO BEFORE PAGE
PERFORM CABECALHO-SECT
END-IF.
MONTA-LINHA.
MOVE COD-CLIENTE

TO LIN-COD-CLIENTE.

MOVE NOME-CLIENTE

TO LIN-NOME-CLIENTE.

MOVE DATA-NASC-CLIENTE TO LIN-DATA-NASC.


MOVE ESTADO-CLIENTE

TO LIN-ESTADO.

MOVE LINHA-DETALHE

TO RELAT-REGISTRO.

WRITE RELAT-REGISTRO BEFORE 1.


*
* AQUI OS DADOS SO TRANSFERIDOS DOS CAMPOS DO REGISTRO DO CLIENTE
* PARA AS VARIVEIS DA LINHA DE IMPRESSAO (QUE TAMBM SO VARIVEIS
* EDITADAS, PARA APRESENTACAO NO RELATRIO).
*
GO TO LISTA.
LISTA-FIM.
EXIT.
CLASSIFICA-SORT-SECT SECTION.
CLASSIFICA.
READ CLIENTES NEXT.
IF

SIT-ARQUIVO = "10"
GO TO CLASSIFICA-FIM

END-IF.
INITIALIZE SCLI-REGISTRO.
MOVE ESTADO-CLIENTE

TO SCLI-ESTADO.

MOVE COD-CLIENTE

TO SCLI-CODIGO.

MOVE NOME-CLIENTE

TO SCLI-NOME.

MOVE DATA-NASC-CLIENTE TO SCLI-DATA-NASC.


RELEASE SCLI-REGISTRO.
*
* AQUI TEMOS A TROCA DO COMANDO WRITE PELO RELEASE, NO CASO
* DE ARQUIVO SORT
*
GO TO CLASSIFICA.
CLASSIFICA-FIM.
EXIT.
EMITE-SORT-SECT SECTION.
EMITE.
RETURN CLIESTADO.
*
* E AQUI TEMOS A LEITURA COM COMANDO RETURN, AO INVS DE READ, NO
* CASO DE ARQUIVO SORT

SOCIESC Sociedade Educacional de Santa Catarina

Programao Aplicada - Cobol

196

*
IF

SIT-ARQUIVO = "10"
MOVE "FIM DE EXECUCAO !!!" TO MENSAGEM
DISPLAY MENSAGEM AT 1014
STOP " "
IF

LINHAS-IMPRESSAS > 0
MOVE "RELATORIO GRAVADO NO ARQUIVO CLIENTES.TXT!"
TO MENSAGEM
DISPLAY MENSAGEM AT 1014
STOP " "

END-IF
GO TO EMITE-FIM
END-IF.
ADD 1 TO LINHAS-IMPRESSAS
IF

LINHAS-IMPRESSAS > 60
MOVE SPACES TO RELAT-REGISTRO
WRITE RELAT-REGISTRO BEFORE PAGE
PERFORM CABECALHO-SECT

END-IF.
MONTA-LINHA.
MOVE SCLI-CODIGO

TO LIN-COD-CLIENTE.

MOVE SCLI-NOME

TO LIN-NOME-CLIENTE.

MOVE SCLI-DATA-NASC

TO LIN-DATA-NASC.

MOVE SCLI-ESTADO

TO LIN-ESTADO.

MOVE LINHA-DETALHE

TO RELAT-REGISTRO.

WRITE RELAT-REGISTRO BEFORE 1.


GO TO EMITE.
EMITE-FIM.
EXIT.
CABECALHO-SECT SECTION.
CABECALHO.
EVALUATE TPO-RELATORIO
WHEN "C" MOVE "NUMERICA"

TO LIN-TPO-RELATORIO

WHEN "N" MOVE "ALFABETICA" TO LIN-TPO-RELATORIO


WHEN "E" MOVE "DE ESTADO"

TO LIN-TPO-RELATORIO

END-EVALUATE
MOVE LINHA-CABECALHO-1 TO RELAT-REGISTRO.
WRITE RELAT-REGISTRO BEFORE 1.
MOVE ALL "-" TO RELAT-REGISTRO.
WRITE RELAT-REGISTRO BEFORE 1.
MOVE LINHA-CABECALHO-2 TO RELAT-REGISTRO.
WRITE RELAT-REGISTRO BEFORE 1.

SOCIESC Sociedade Educacional de Santa Catarina

Programao Aplicada - Cobol

197

MOVE ALL "-" TO RELAT-REGISTRO.


WRITE RELAT-REGISTRO BEFORE 2.
MOVE 4 TO LINHAS-IMPRESSAS.
CABECALHO-FIM.
EXIT.

Caro aluno, vamos agora compilar o programa RELCLI.CBL sem as


diretivas no link:
COBOL RELCLI.CBL;
LINK RELCLI;
Como se trata de um subprograma, no momento que a compilao ocorrer sem
erros, no pode ser executado diretamente. Devemos executar o programa principal
MENUCLI. Ao selecionarmos a opo 5, ser mostrada a seguinte tela, conforme a
figura 56:

Figura 56 Execuo do programa RELCLI.


Vamos agora visualizar o arquivo clientes.txt, onde foi gravado o relatrio, com
as trs classificaes permitidas, como mostramos nas figuras 57, 58 e 59.

SOCIESC Sociedade Educacional de Santa Catarina

Programao Aplicada - Cobol

198

Figura 57 - Imagem do relatrio por ordem numrica, gravado no arquivo


clientes.txt.

Figura 58 Imagem do relatrio por ordem alfabtica, gravado no arquivo


clientes.txt.

Figura 59 Imagem do relatrio por ordem de estado, gravado no arquivo


clientes.txt.

SOCIESC Sociedade Educacional de Santa Catarina

Programao Aplicada - Cobol

199

Voc obter os resultados expostos acima, selecionando cada uma das opes
do relatrio e abrindo o arquivo cursos.txt via Editor de Textos.

Sntese
Nessa aula visualizamos a construo de uma aplicao completa, desde a
definio do programa principal (MENUCLI), seus subprogramas diretos (CADCLI,
CONCLI, RELCLI) e indiretos, como o validador de datas (VALDATA). Aplicamos
praticamente todo o conhecimento repassado at o momento, na montagem desta
aplicao.

Exerccios Propostos
1. Assinale as alternativas verdadeiras:
(

) O nico programa de nossa aplicao com linkage o VALDATA (validador de

datas).
(

) Numa aplicao em COBOL, no necessrio compilar subprogramas com as

mesmas diretivas compiladas no programa principal.


(

) A diretiva ON OVERFLOW ser executada, caso o programa constante na

chamada CALL no consiga ser executado.


( ) Utilizamos a declarao SORT para classificar os dados de um arquivo pela sua
chave primria ou alternativa.
2. No programa CADCLI, existem duas sees que so utilizadas mais de uma
vez, em momentos diferenciados do programa, evitando repetio de linhas de
cdigo. Identifique essas sees:
___________________________________________________________________
___________________________________________________________________
___________________________________________________________________
___

SOCIESC Sociedade Educacional de Santa Catarina

Programao Aplicada - Cobol

200

3. No programa CONCLI, para que serve a varivel LETRA-CONSULTA?


___________________________________________________________________
___________________________________________________________________
___________________________________________________________________
___
4. No programa CONCLI, quando o nmero de clientes excede a 8, o programa
efetua uma pausa e pergunta ao usurio se deseja continuar ou abandonar:
Cite a parte do programa que exibe essa mensagem e a que aguarda a opo
do usurio em continuar ou abandonar.
___________________________________________________________________
___________________________________________________________________
___________________________________________________________________
__
5. Cite as sees do PROGRAMA RELCLI que executam as seguintes rotinas:
a) Imprimem o Cabealho _________________.
b) Listam o Relatrio sem utilizar o SORT ___________________.
6. Cite os comandos do PROGRAMA RELCLI que executam as seguintes
aes:
a) Leitura do arquivo de clientes: __________________.
b) Gravao do Arquivo SORT: _____________________.
c) Incremento na quantidade de linhas impressas. __________________________.

SOCIESC Sociedade Educacional de Santa Catarina

Programao Aplicada - Cobol

Aula 11

TRABALHANDO COM BANCO DE


DADOS
Objetivos da Aula
Ao final desta aula, voc dever ser capaz de:
 Definir as diretrizes para trabalhar com Banco de Dados
usando o COBOL;
 Configurar um driver ODBC;
 Aplicar os comandos SQL num programa fonte COBOL.

Contedos da Aula
Acompanhe os assuntos desta aula, se preferir,
ao terminar, assinale o contedo j estudado.


O que SQL?

Conceituando ODBC

Configurando ODBC

Diretivas Especiais nos Fontes

Criando Tabela

Inserindo Dados na Tabela

Alterando Dados da Tabela

Excluindo Dados da Tabela

Selecionando Dados na Tabela

Excluindo Tabela

Exerccios Propostos

SOCIESC Sociedade Educacional de Santa Catarina

201

Programao Aplicada - Cobol

202

Bem-vindo (a) a nossa dcima primeira aula. Chegamos na ltima aula, na


qual quebraremos um grande paradigma, mostrando a facilidade de trabalhar com
banco de dados em COBOL..
Infelizmente no foi possvel desenvolver esta aula na prtica, pois nosso
compilador no suporta acesso a SQL. Para minimizar o fato, o contedo da aula foi
especialmente elaborado, com uma riqueza maior de detalhes, para que voc possa
entender as explicaes tericas com maior facilidade, como se estivesse
executando na prtica os programas que mencionaremos na seqncia. Para o
desenvolvimento dos programas que sero apresentados na aula, foi utilizada a
ferramenta NETEXPRESS Verso 3.0 (MicroFocus), acessando banco de dados
MYSQL 5.0.
importante frisar tambm que os exemplos desta aula consideram que o
Banco de Dados Mysql j se encontra instalado na mquina. Ns vamos estudar
apenas a partir da instalao do driver ODBC. Estamos considerando tambm que o
aluno j tenha conhecimento bsico em comandos SQL.
Bons Estudos!

SOCIESC Sociedade Educacional de Santa Catarina

Programao Aplicada - Cobol

203

1 O QUE SQL?
SQL (STRUCTURED QUERY LANGUAGE) uma linguagem estruturada para
consulta e manipulao de dados, que traz resultados rpidos e tem um formato
simples para uso. Seu surgimento data dos anos 80, em computadores de grande
porte. Gradativamente foi sendo introduzida nos ambientes de pequenas redes
(LANS) e desktops. Atualmente o padro para acesso a banco de dados mais
utilizado no mundo.
2 CONCEITUANDO ODBC
Os bancos de dados mais utilizados no mercado atualmente (Oracle, SQLServer, Postgree, Mysql, Firebird, etc.) podem ser acessados pelo COBOL, usando
de um driver ODBC. Voc sabe o que ODBC? Vamos conceituar o termo:
ODBC (OPEN DATA BASE CONNECTIVITY) uma tecnologia padro de
programao para acesso a banco de dados por meio de uma biblioteca de funes
pr-definida, criada pelo SQL Access Group. Basicamente, ODBC oferece uma
interface padronizada de funes ao programador (como uma API do Windows),
suportada por meio de um middleware apropriado alm de ser independente de
linguagem.
3 CONFIGURANDO ODBC
Como vamos trabalhar nos exemplos com banco de dados Mysql, vamos
verificar como configurar o ODBC do mesmo para que o COBOL (leia-se neste caso
NETEXPRESS) possa acess-lo sem problemas de comunicao.
Devemos acessar o Painel de Controle do Windows e, logo em seguida,
Ferramentas Administrativas. L teremos a opo para configurar o ODBC,
conforme podemos acompanhar na figura 60:

SOCIESC Sociedade Educacional de Santa Catarina

Programao Aplicada - Cobol

204

Figura 60 Destaque do Local no Windows onde se encontra a


opo para configurar o ODBC
Aps selecionarmos Fontes de Dados (ODBC), surgir a

janela que

mostraremos na figura 61

Figura 61 Em destaque o boto Adicionar, na aba Fonte de dados do sistema,


que dever ser clicado para a Configurao do driver ODBC do Mysql.

SOCIESC Sociedade Educacional de Santa Catarina

Programao Aplicada - Cobol

205

Aps clicar no boto Adicionar, surgir uma nova janela onde dever ser
escolhida qual nova fonte de dados ser criada. Vejamos na figura 62:

Figura 62 Seleo da fonte de dados MYSQL ODBC 3.51 Driver


Por fim, ser mostrada uma ltima tela, onde so colocadas as informaes
pertinentes ao Mysql. Vejamos a figura 63:

Figura 63 ltima tela para Configurao do Driver ODBC do Mysql

SOCIESC Sociedade Educacional de Santa Catarina

Programao Aplicada - Cobol

206

3.1 Campos da Tela de Configurao do Driver Odbc


DATA SOURCE NAME Nome da fonte de dados. atravs desse
nome que o programa COBOL vai efetuar a conexo no banco de
dados. Nesse exemplo ser TUPY.
SERVER Aqui informamos o nmero do IP do Servidor onde o banco
de dados est instalado. Quando o banco de dados local, ou seja,
no est em rede, o default utilizar a palavra localhost.
USER/PASSWORD usurio e senha para conexo com o banco de
dados. Essas duas informaes tambm sero utilizadas pelos
programas na conexo ao banco. Utilizaremos a senha padro do
Mysql (usurio=root e senha=root).
DATABASE identifica o nome do banco de dados onde criaremos e
manipularemos as tabelas. Em nosso caso ser SOCIESC.
Aps o preenchimento dessas informaes, sempre prudente que se clique
no boto Test, para verificar se a conexo com o banco foi estabelecida. A
mensagem de conexo efetuada com sucesso ser mostrada na figura 64:

Figura 64 Exemplo de conexo ao Mysql executada com sucesso,


atravs do boto Test.
SOCIESC Sociedade Educacional de Santa Catarina

Programao Aplicada - Cobol

207

Agora o ODBC do Mysql j est devidamente instalado e o programador pode


comear a executar programas que utilizem este banco de dados.
4 DIRETIVAS ESPECIAIS NOS FONTES
Para se usar comandos SQL no COBOL, mesmo em verses atualizadas como
no caso do NetExpress, algumas diretivas especiais devem ser declaradas nos
programas. Vamos verificar tais diretivas:
$SET SQL(dbman=odbc)
$SET SQL(autocommit)
IDENTIFICATION DIVISION.

As diretivas $SET SQL devem ser declaradas nas primeiras linhas do


programa, na coluna 07, antes mesmo da IDENTIFICATION DIVISION. Tais
diretivas avisam ao compilador que o programa receber comandos SQL. Sem as
diretivas declaradas, no possvel construir um programa COBOL usando
comandos SQL.
As sintaxes das declaraes SQL em COBOL, seja de variveis ou de
comandos executados na PROCEDURE DIVISION, devem ter o seguinte formato:
EXEC SQL
{declarao SQL}
END-EXEC

Entre as declaraes (EXEC SQL e END-EXEC) num fonte COBOL, s pode


haver comandos ou declaraes SQL.
Como vamos manipular dados no SQL usando o COBOL, precisamos definilos na WORKING-STORAGE SECTION.
WORKING-STORAGE SECTION.
EXEC SQL INCLUDE SQLCA END-EXEC

A declarao acima sempre obrigatria no fonte COBOL que vai trabalhar


com SQL. Dentro deste arquivo SQLCA ficam armazenadas uma srie de variveis
de controle do prprio SQL.
SOCIESC Sociedade Educacional de Santa Catarina

Programao Aplicada - Cobol

208

Para incluirmos outros blocos de variveis SQL na WORKING, utilizamos a


clusula DECLARE SECTION, conforme exemplo abaixo:
EXEC SQL BEGIN DECLARE SECTION END-EXEC
...
...
EXEC END DECLARE SECTION END-EXEC

Notem que essa clusula possui incio (BEGIN DECLARE) e fim (END
DECLARE). Entre as clusulas, devero ser declaradas as variveis para uso com
comandos SQL, como por exemplo, as variveis HOST.
Variveis HOST so variveis intermedirias, declaradas para uso pelo
COBOL, que recebem as informaes do banco de dados ou as transferem para o
banco de dados - pois o COBOL no consegue manipular diretamente um campo de
uma tabela do banco de dados. Para efetuar esta comunicao existem as variveis
HOST, como veremos mais adiante nos programas exemplo.
Estudaremos os comandos SQL mais utilizados. Temos um programa exemplo
para cada comando. Voc lembra do arquivo de cursos da aula nove? Pois bem.
Vamos trabalhar nessa aula tomando como base o mesmo arquivo de cursos, que
agora vai se tornar uma tabela de cursos dentro do Mysql, com os campos
Codigo_curso, Descr_curso e Per_curso.
Para visualizar os resultados prticos dos comandos SQL executados (criao
de tabelas, insero de registros, excluso de registros, etc.), utilizamos um software
gerenciador de banco de dados MYSQL.
5 CRIANDO TABELA
Vamos agora iniciar com o programa exemplo do comando CREATE TABLE.
Todas as sentenas e diretivas SQL estaro destacadas em azul.
Programa CREATE.CBL (criao da tabela de cursos).
$SET SQL(dbman=odbc)
$SET SQL(autocommit)
IDENTIFICATION DIVISION.
PROGRAM-ID.

CREATE.

SOCIESC Sociedade Educacional de Santa Catarina

Programao Aplicada - Cobol

AUTHOR.

209

SOCIESC.

DATE-WRITTEN.

20/04/07.

*
* Programa Exemplo para Criao de Tabelas no MYSQL
* NetExpress 3.0 - MicroFocus
*
WORKING-STORAGE SECTION.
EXEC SQL INCLUDE SQLCA END-EXEC
EXEC SQL BEGIN DECLARE SECTION END-EXEC
*
* LOGO ABAIXO ESTO DECLARADAS AS VARIVEIS HOST, QUE SERO
* UTILIZADAS NA COMUNICAO COM OS CAMPOS DA TABELA DE CURSOS
* CRIADA NO MYSQL
*
01

DCL-TABCUR.
03

HCODIGO-CURSO

PIC 9(005) COMP-3.

03

HDESCR-CURSO

PIC X(030).

03

HPER-CURSO

PIC X(001).

EXEC END DECLARE SECTION END-EXEC


PROCEDURE DIVISION.
INICIO.
EXEC SQL
CONNECT TO 'TUPY' USER 'root.root'
END-EXEC
*
* A SENTENA ACIMA EFETUA A CONEXO COM O BANCO DE DADOS
* PASSANDO O NOME DO DSN QUE CRIAMOS NA CONFIGURACAO DO ODBC (TUPY)
* E O USURIO E SENHA root - PADRO DO MYSQL
* LOGO ABAIXO TESTADO O STATUS DO COMANDO SQL EM SQLCODE,
* SEMELHANTE AO STATUS PARA OPERAES COM ARQUIVOS
*
IF

SQLCODE < 0
PERFORM TA000-ERRO-SECT

END-IF.
DISPLAY "CONEXAO AO BANCO OK!" AT 0510 WITH HIGHLIGHT.
CRIACAO-TABELA.
EXEC SQL
CREATE TABLE TABCUR (
CODIGO_CURSO NUMERIC (5,0) NOT NULL
,DESCR_CURSO

VARCHAR (30)

BINARY

SOCIESC Sociedade Educacional de Santa Catarina

Programao Aplicada - Cobol

,PER_CURSO

210

CHAR (1)

BINARY

,CONSTRAINT PK1_TABCUR PRIMARY KEY (CODIGO_CURSO)


)
END-EXEC
*
* ACIMA CRIAMOS A TABELA DE CURSOS COM O NOME TABCUR
* DEFININDO SEUS 3 CAMPOS E SUA CHAVE PRINCIPAL
*
IF

SQLCODE < 0 PERFORM TA000-ERRO-SECT.

DISPLAY "TABELA TABCUR CRIADA COM SUCESSO!" AT 1010


WITH HIGHLIGHT.
EXEC SQL
DISCONNECT CURRENT
END-EXEC
STOP RUN.
TA000-ERRO-SECT SECTION.
TA000-ERRO.
IF

SQLCODE < 0
DISPLAY ERASE AT 0101
DISPLAY "ERRO SQL - " AT 1010
DISPLAY SQLCODE AT 1021
STOP RUN

END-IF.
TA999-EXIT.
EXIT.

SOCIESC Sociedade Educacional de Santa Catarina

Programao Aplicada - Cobol

211

Vejamos a situao de nossa base de dados SOCIESC (figura 65) antes da


execuo deste programa:

Figura 65 Imagem da Base de Dados SOCIESC vazia no MYSQL.


Vejamos agora a execuo do programa CREATE (figura 66)

Figura 66 Execuo do programa CREATE realizada com sucesso.


A situao agora de nossa base de dados SOCIESC j mudou. Vejamos na
figura 67.

Figura 67 Imagem da Base de Dados SOCIESC aps execuo


do programa CREATE.

SOCIESC Sociedade Educacional de Santa Catarina

Programao Aplicada - Cobol

212

Podemos constatar agora que a tabela de cursos tabcur j se encontra


criada, com a definio das colunas e da chave primria tambm.
6 INSERINDO DADOS NA TABELA
Vamos agora acompanhar a insero de alguns registros na tabela tabcur,
usando o comando SQL Insert Table.
Programa INSERT.CBL (insero de registros na tabela de cursos).
$SET SQL(dbman=odbc)
$SET SQL(autocommit)
IDENTIFICATION DIVISION.
PROGRAM-ID.
AUTHOR.
DATE-WRITTEN.

INSERT.
SOCIESC.
20/04/07.

*
* Programa Exemplo para Insero de Registro no MYSQL
* atravs dos comandos SQL
* NetExpress 3.0 - MicroFocus
*
* OS REGISTROS QUE SERO INSERIDOS, SO OS QUE ESTO NO
* ARQUIVO CURSOS.TXT
*
ENVIRONMENT DIVISION.
INPUT-OUTPUT SECTION.
FILE-CONTROL.
*
SELECT ARQCUR ASSIGN

TO "CURSOS.TXT"

ORGANIZATION IS LINE SEQUENTIAL


FILE STATUS

IS SIT-ARQUIVO.

*
DATA DIVISION.
FILE SECTION.
FD ARQCUR.
01 TXT-REGISTRO.
03 TXT-COD-CURSO

PIC 9(005).

03 FILLER

PIC X(001).

03 TXT-DES-CURSO

PIC X(030).

03 FILLER

PIC X(001).

SOCIESC Sociedade Educacional de Santa Catarina

Programao Aplicada - Cobol

213

03 TXT-PER-CURSO

PIC X(001).

03 FILLER

PIC X(001).

WORKING-STORAGE SECTION.
77 SIT-ARQUIVO

PIC X(002) VALUE SPACE.

EXEC SQL INCLUDE SQLCA END-EXEC


EXEC SQL BEGIN DECLARE SECTION END-EXEC
01

DCL-TABCUR.
03

HCODIGO-CURSO

PIC 9(005) COMP-3.

03

HDESCR-CURSO

PIC X(030).

03

HPER-CURSO

PIC X(001).

EXEC END DECLARE SECTION END-EXEC


PROCEDURE DIVISION.
INICIO.
EXEC SQL
CONNECT TO 'TUPY' USER 'root.root'
END-EXEC
IF

SQLCODE < 0
PERFORM TA000-ERRO-SECT

END-IF.
DISPLAY "CONEXAO AO BANCO OK!" AT 0510 WITH HIGHLIGHT.
OPEN INPUT ARQCUR.
INSERCAO-TABELA.
READ ARQCUR NEXT.
IF

SIT-ARQUIVO = "10"
GO TO FINAL-PROGRAMA

END-IF
*
* LOGO ABAIXO UM EXEMPLO DE TRANSFERNCIA DOS DADOS
* DO ARQUIVO CURSOS.TXT PARA AS VARIVEIS HOST, QUE
* CRIAMOS INICIANDO COM A LETRA H PARA FACILITAR O
* ENTENDIMENTO. NOTE MAIS ABAIXO QUE DENTRO DO COMANDO
* INSERT, EXISTE A CLUSULA VALUES, QUE VAI GRAVAR
* ATUALIZAR OS DADOS NOS CAMPOS DA TABELA TABCUR.
* OS CAMPOS USADOS APS A DECLARAO VALUES SO TODOS
* VARIVEIS HOST
*
MOVE TXT-COD-CURSO TO HCODIGO-CURSO

SOCIESC Sociedade Educacional de Santa Catarina

Programao Aplicada - Cobol

214

MOVE TXT-DES-CURSO TO HDESCR-CURSO


MOVE TXT-PER-CURSO TO HPER-CURSO
IF

HCODIGO-CURSO > ZERO


EXEC SQL
INSERT INTO TABCUR (
CODIGO_CURSO
,DESCR_CURSO
,PER_CURSO
) VALUES
(:HCODIGO-CURSO
,:HDESCR-CURSO
,:HPER-CURSO
)
END-EXEC
IF

SQLCODE < 0
PERFORM TA000-ERRO-SECT

END-IF
END-IF
GO TO INSERCAO-TABELA.
FINAL-PROGRAMA.
DISPLAY "INSERCOES REALIZADAS COM SUCESSO!" AT 1010
WITH HIGHLIGHT.
CLOSE ARQCUR
EXEC SQL
DISCONNECT CURRENT
END-EXEC
STOP RUN.
TA000-ERRO-SECT SECTION.
TA000-ERRO.
IF

SQLCODE < 0
DISPLAY ERASE AT 0101
DISPLAY "ERRO SQL - " AT 1010
DISPLAY SQLCODE AT 1021
STOP RUN

END-IF.
TA999-EXIT.
EXIT.

Vejamos a situao de nosso banco de dados SOCIESC antes da execuo do


programa, fazendo uma consulta pelo SQLYOG (figura 68):

SOCIESC Sociedade Educacional de Santa Catarina

Programao Aplicada - Cobol

215

Figura 68 Base de Dados SOCIESC e tabcur sem registros, aps consulta.


Vejamos agora, na figura 69, o contedo do arquivo CURSOS.TXT, que o
programa INSERT estar lendo para executar as inseres na tabela tabcur:

Figura 69 Imagem do arquivo seqencial de linha CURSOS.TXT


Podemos notar que no arquivo temos 9 cursos. Aps a execuo do programa
INSERT, todos devem estar inseridos na tabela tabcur.
Vejamos agora a execuo do programa INSERT na figura 70.

SOCIESC Sociedade Educacional de Santa Catarina

Programao Aplicada - Cobol

216

Figura 70 Execuo do programa INSERT realizada com sucesso


Novamente a situao de nosso banco de dados SOCIESC mudou. Vejamos
como ficou na figura 71:

Figura 71 Imagem da Base de Dados SOCIESC aps execuo do programa


INSERT
Podemos constatar agora que nossa tabela tabcur est carregada com todos
os registros especificados no arquivo CURSOS.TXT
7 ALTERANDO DADOS NA TABELA
Vamos agora acompanhar a alterao de um registro na tabela tabcur,
usando o comando SQL UPDATE.

SOCIESC Sociedade Educacional de Santa Catarina

Programao Aplicada - Cobol

217

Programa ALTERAR.CBL (alterao de registro na tabela de cursos).


$SET SQL(dbman=odbc)
$SET SQL(autocommit)
IDENTIFICATION DIVISION.
PROGRAM-ID.

ALTERAR.

AUTHOR.

SOCIESC.

DATE-WRITTEN.

20/04/07.

*
* Programa Exemplo para Alterao de Registro no MYSQL
* atravs dos comandos SQL
* NetExpress 3.0 - MicroFocus
*
WORKING-STORAGE SECTION.
EXEC SQL INCLUDE SQLCA END-EXEC
EXEC SQL BEGIN DECLARE SECTION END-EXEC
01

DCL-TABCUR.
03

HCODIGO-CURSO

PIC 9(005) COMP-3.

03

HDESCR-CURSO

PIC X(030).

03

HPER-CURSO

PIC X(001).

EXEC END DECLARE SECTION END-EXEC


PROCEDURE DIVISION.
INICIO.
EXEC SQL
CONNECT TO 'TUPY' USER 'root.root'
END-EXEC
IF

SQLCODE < 0
PERFORM TA000-ERRO-SECT

END-IF.
DISPLAY "CONEXAO AO BANCO OK!" AT 0510 WITH HIGHLIGHT.
ALTERACAO-TABELA.
*
* VAMOS ALTERAR O NOME DO CURSO DE RECURSOS HUMANOS PARA
* CLCULOS TRABALHISTAS - E SEU PERODO DE "T" PARA "N"
* COMO O CDIGO DO CURSO 8, VAMOS CARREGAR A VARIVEL
* HOST (HCODIGO-CURSO) COM ESTE VALOR
*
MOVE 08

TO HCODIGO-CURSO

SOCIESC Sociedade Educacional de Santa Catarina

Programao Aplicada - Cobol

218

MOVE "CALCULOS TRABALHISTAS" TO HDESCR-CURSO


MOVE "N"

TO HPER-CURSO

EXEC SQL
UPDATE TABCUR SET
CODIGO_CURSO = :HCODIGO-CURSO
,DESCR_CURSO

= :HDESCR-CURSO

,PER_CURSO

= :HPER-CURSO

WHERE ( CODIGO_CURSO = :HCODIGO-CURSO )


END-EXEC
IF

SQLCODE < 0
PERFORM TA000-ERRO-SECT

END-IF.
FINAL-PROGRAMA.
DISPLAY "ALTERACAO REALIZADA COM SUCESSO!" AT 1010
WITH HIGHLIGHT.
EXEC SQL
DISCONNECT CURRENT
END-EXEC
STOP RUN.
TA000-ERRO-SECT SECTION.
TA000-ERRO.
IF

SQLCODE < 0
DISPLAY ERASE AT 0101
DISPLAY "ERRO SQL - " AT 1010
DISPLAY SQLCODE AT 1021
STOP RUN

END-IF.
TA999-EXIT.
EXIT.

Vejamos agora, na figura 72, a execuo do programa ALTERAR

Figura 72 Execuo do programa ALTERAR realizada com sucesso


Vejamos como ficou o resultado da alterao em tabcur, na figura 73.
SOCIESC Sociedade Educacional de Santa Catarina

Programao Aplicada - Cobol

219

Figura 73 Imagem da Base de Dados SOCIESC, aps execuo do programa


ALTERAR
Conforme destaque na figura, o curso de cdigo 8 sofreu as alteraes
descritas no programa.
8 EXCLUINDO DADOS NA TABELA
Vamos agora acompanhar a excluso de um registro na tabela tabcur,
usando o comando SQL DELETE.
Programa EXCLUIR.CBL (excluso de registro na tabela de cursos).
$SET SQL(dbman=odbc)
$SET SQL(autocommit)
IDENTIFICATION DIVISION.
PROGRAM-ID.

EXCLUIR.

AUTHOR.

SOCIESC.

DATE-WRITTEN.

20/04/07.

*
* Programa Exemplo para Exclusao de Registro no MYSQL
* atravs dos comandos SQL
* NetExpress 3.0 - MicroFocus
*
WORKING-STORAGE SECTION.

SOCIESC Sociedade Educacional de Santa Catarina

Programao Aplicada - Cobol

220

EXEC SQL INCLUDE SQLCA END-EXEC


EXEC SQL BEGIN DECLARE SECTION END-EXEC
01

DCL-TABCUR.
03

HCODIGO-CURSO

PIC 9(005) COMP-3.

03

HDESCR-CURSO

PIC X(030).

03

HPER-CURSO

PIC X(001).

EXEC END DECLARE SECTION END-EXEC


EXEC BEGIN DECLARE SECTION END-EXEC
01 SQL-TEXTO

PIC X(500).

EXEC END DECLARE SECTION END-EXEC


PROCEDURE DIVISION.
INICIO.
EXEC SQL
CONNECT TO 'TUPY' USER 'root.root'
END-EXEC
IF

SQLCODE < 0
PERFORM TA000-ERRO-SECT

END-IF.
DISPLAY "CONEXAO AO BANCO OK!" AT 0510 WITH HIGHLIGHT.
DELECAO-REGISTROS.
*
* ELIMINANDO O CURSO DE CDIGO = 4
*
MOVE 04 TO HCODIGO-CURSO
EXEC SQL
DELETE FROM TABCUR
WHERE ( CODIGO_CURSO = :HCODIGO-CURSO )
END-EXEC
IF

SQLCODE < 0
PERFORM TA000-ERRO-SECT

END-IF.
FINAL-PROGRAMA.
DISPLAY "EXCLUSAO REALIZADA COM SUCESSO!" AT 1010
WITH HIGHLIGHT.
EXEC SQL

SOCIESC Sociedade Educacional de Santa Catarina

Programao Aplicada - Cobol

221

DISCONNECT CURRENT
END-EXEC
STOP RUN.
TA000-ERRO-SECT SECTION.
TA000-ERRO.
IF

SQLCODE < 0
DISPLAY ERASE AT 0101
DISPLAY "ERRO SQL - " AT 1010
DISPLAY SQLCODE AT 1021
STOP RUN

END-IF.
TA999-EXIT.
EXIT.

Vejamos agora, na figura 74, como ficou a execuo do programa EXCLUIR.

Figura 74 Execuo do programa EXCLUIR realizada com sucesso


Vejamos,na figura 75 o resultado da excluso em tabcur:

Figura 75 Imagem da Base de Dados SOCIESC aps execuo do programa


EXCLUIR

SOCIESC Sociedade Educacional de Santa Catarina

Programao Aplicada - Cobol

222

9 SELECIONANDO DADOS NA TABELA


Vamos agora acompanhar a seleo de registros mltiplos na tabela tabcur,
usando o comando SQL SELECT. Para que tenhamos xito na leitura de um
SELECT que vai nos retornar vrios registros, precisamos declarar um cursor. Esta
declarao um recurso SQL para que as linguagens de programao possam
receber todas as linhas retornadas por um SELECT. Imagine um SELECT que
retorne para o programador 500 linhas. Um programa no teria como gerenciar
todos os retornos simultaneamente. Atravs de uma declarao de cursor, o
gerenciamento feito pelo prprio SQL, que vai efetuar o retorno dos 500 registros,
linha por linha, na ordem em que foram solicitados.
Programa SELECAO.CBL (select de vrios registros na tabela de cursos, em
ordem decrescente).
$SET SQL(dbman=odbc)
$SET SQL(autocommit)
IDENTIFICATION DIVISION.
PROGRAM-ID.

SELECAO.

AUTHOR.

SOCIESC.

DATE-WRITTEN.

20/04/07.

*
* Programa Exemplo para seleo de registro no MYSQL
* atraves de comandos SQL (a declarao do CURSOR estar em destaque)
* NetExpress 3.0 - MicroFocus
*
WORKING-STORAGE SECTION.
01 LINHA

PIC 9(002) VALUE ZEROS.

01 COLUNA

PIC 9(002) VALUE ZEROS.

EXEC SQL INCLUDE SQLCA END-EXEC


EXEC SQL BEGIN DECLARE SECTION END-EXEC
01

DCL-TABCUR.
03

HCODIGO-CURSO

PIC 9(005) COMP-3.

03

HDESCR-CURSO

PIC X(030).

03

HPER-CURSO

PIC X(001).

EXEC END DECLARE SECTION END-EXEC

SOCIESC Sociedade Educacional de Santa Catarina

Programao Aplicada - Cobol

223

EXEC BEGIN DECLARE SECTION END-EXEC


01 SQL-TEXTO

PIC X(500).

EXEC END DECLARE SECTION END-EXEC


01

REGISTRO-CURSO.
03

CODIGO-CURSO PIC 9(005).

03

DESCR-CURSO

PIC X(030).

03

PER-CURSO

PIC X(001).

PROCEDURE DIVISION.
AA000-INICIO-SECT SECTION.
AA000-INICIO.
EXEC SQL
CONNECT TO 'TUPY' USER 'root.root'
END-EXEC
IF

SQLCODE < 0
PERFORM TA000-ERRO-SECT

END-IF
DISPLAY ERASE AT 0101
EXEC SQL
DECLARE CURSOR-1 DYNAMIC CURSOR FOR DYNAMIC_SQL
END-EXEC
IF

SQLCODE < 0 PERFORM TA000-ERRO-SECT.

MOVE "SELECT * FROM TABCUR WHERE CODIGO_CURSO > 0 ORDER BY CO


-"DIGO_CURSO DESC" TO SQL-TEXTO
EXEC SQL
PREPARE DYNAMIC_SQL FROM :SQL-TEXTO
END-EXEC
EXEC SQL
OPEN CURSOR-1
END-EXEC
IF

SQLCODE < 0 PERFORM TA000-ERRO-SECT.

DISPLAY SQL-TEXTO AT 0501 WITH HIGHLIGHT


MOVE 08 TO LINHA
PERFORM UNTIL SQLCODE < 0 OR SQLCODE = +100
EXEC SQL

SOCIESC Sociedade Educacional de Santa Catarina

Programao Aplicada - Cobol

224

FETCH CURSOR-1 INTO


:HCODIGO-CURSO
,:HDESCR-CURSO
,:HPER-CURSO
END-EXEC
IF

SQLCODE = 0
MOVE HCODIGO-CURSO

TO CODIGO-CURSO

MOVE HDESCR-CURSO

TO DESCR-CURSO

MOVE HPER-CURSO

TO PER-CURSO

ADD

MOVE 10

TO LINHA
TO COLUNA

DISPLAY CODIGO-CURSO AT LINE LINHA COL COLUNA


WITH REVERSE-VIDEO
ADD 07

TO COLUNA

DISPLAY DESCR-CURSO

AT LINE LINHA COL COLUNA


WITH REVERSE-VIDEO

ADD 30

TO COLUNA

DISPLAY PER-CURSO

AT LINE LINHA COL COLUNA


WITH REVERSE-VIDEO

END-IF
END-PERFORM
IF

SQLCODE < 0 PERFORM TA000-ERRO-SECT.

EXEC SQL
CLOSE CURSOR-1
END-EXEC
EXEC SQL
DISCONNECT CURRENT
END-EXEC
STOP RUN.
AA999-EXIT.
EXIT.
TA000-ERRO-SECT SECTION.
TA000-ERRO.
IF

SQLCODE < 0
DISPLAY ERASE AT 0101
DISPLAY "ERRO SQL - " AT 1010
DISPLAY SQLCODE AT 1021
STOP RUN

END-IF.
TA999-EXIT.
EXIT.

Vejamos agora a execuo do programa SELECAO, mostrado na figura 76;

SOCIESC Sociedade Educacional de Santa Catarina

Programao Aplicada - Cobol

225

Figura 76 Execuo do programa SELECAO, listando os cursos em tela, por


ordem decrescente, conforme instrues do COMANDO SELECT
Programa SELECAO1.CBL (select de vrios registros na tabela de cursos, em
ordem alfabtica).
$SET SQL(dbman=odbc)
$SET SQL(autocommit)
IDENTIFICATION DIVISION.
PROGRAM-ID.

SELECAO1.

AUTHOR.

SOCIESC.

DATE-WRITTEN.

20/04/07.

*
* Programa Exemplo para seleo de registro no MYSQL
* atraves de comandos SQL
* NetExpress 3.0 - MicroFocus
*
WORKING-STORAGE SECTION.
01 LINHA

PIC 9(002) VALUE ZEROS.

01 COLUNA

PIC 9(002) VALUE ZEROS.

EXEC SQL INCLUDE SQLCA END-EXEC


EXEC SQL BEGIN DECLARE SECTION END-EXEC
01

DCL-TABCUR.
03

HCODIGO-CURSO

PIC 9(005) COMP-3.

03

HDESCR-CURSO

PIC X(030).

03

HPER-CURSO

PIC X(001).

EXEC END DECLARE SECTION END-EXEC


EXEC BEGIN DECLARE SECTION END-EXEC

SOCIESC Sociedade Educacional de Santa Catarina

Programao Aplicada - Cobol

226

01 SQL-TEXTO

PIC X(500).

EXEC END DECLARE SECTION END-EXEC


01

REGISTRO-CURSO.
03

CODIGO-CURSO PIC 9(005).

03

DESCR-CURSO

PIC X(030).

03

PER-CURSO

PIC X(001).

PROCEDURE DIVISION.
AA000-INICIO-SECT SECTION.
AA000-INICIO.
EXEC SQL
CONNECT TO 'TUPY' USER 'root.root'
END-EXEC
IF

SQLCODE < 0
PERFORM TA000-ERRO-SECT

END-IF
DISPLAY ERASE AT 0101
EXEC SQL
DECLARE CURSOR-1 DYNAMIC CURSOR FOR DYNAMIC_SQL
END-EXEC
IF

SQLCODE < 0 PERFORM TA000-ERRO-SECT.

MOVE "SELECT * FROM TABCUR WHERE CODIGO_CURSO > 0 ORDER BY DE


-"SCR_CURSO ASC" TO SQL-TEXTO
EXEC SQL
PREPARE DYNAMIC_SQL FROM :SQL-TEXTO
END-EXEC
EXEC SQL
OPEN CURSOR-1
END-EXEC
IF

SQLCODE < 0 PERFORM TA000-ERRO-SECT.

DISPLAY SQL-TEXTO AT 0501 WITH HIGHLIGHT


MOVE 08 TO LINHA
PERFORM UNTIL SQLCODE < 0 OR SQLCODE = +100
EXEC SQL
FETCH CURSOR-1 INTO
:HCODIGO-CURSO
,:HDESCR-CURSO

SOCIESC Sociedade Educacional de Santa Catarina

Programao Aplicada - Cobol

227

,:HPER-CURSO
END-EXEC
IF

SQLCODE = 0
MOVE HCODIGO-CURSO

TO CODIGO-CURSO

MOVE HDESCR-CURSO

TO DESCR-CURSO

MOVE HPER-CURSO

TO PER-CURSO

ADD

TO LINHA

MOVE 10

TO COLUNA

DISPLAY CODIGO-CURSO AT LINE LINHA COL COLUNA


WITH REVERSE-VIDEO
ADD 07

TO COLUNA

DISPLAY DESCR-CURSO

AT LINE LINHA COL COLUNA


WITH REVERSE-VIDEO

ADD 30

TO COLUNA

DISPLAY PER-CURSO

AT LINE LINHA COL COLUNA


WITH REVERSE-VIDEO

END-IF
END-PERFORM
IF

SQLCODE < 0 PERFORM TA000-ERRO-SECT.

EXEC SQL
CLOSE CURSOR-1
END-EXEC
EXEC SQL
DISCONNECT CURRENT
END-EXEC
STOP RUN.
AA999-EXIT.
EXIT.
TA000-ERRO-SECT SECTION.
TA000-ERRO.
IF

SQLCODE < 0
DISPLAY ERASE AT 0101
DISPLAY "ERRO SQL - " AT 1010
DISPLAY SQLCODE AT 1021
STOP RUN

END-IF.
TA999-EXIT.
EXIT.

Vejamos o que mostra a figura 77, aps a execuo do programa SELECAO1

SOCIESC Sociedade Educacional de Santa Catarina

Programao Aplicada - Cobol

228

Figura 77 Execuo do programa SELECAO1, listando os cursos em tela, por


ordem alfabtica, conforme instrues do COMANDO SELECT
importante salientar que a ordenao dos dois programas (SELECAO e
SELECAO1) foi realizada pela clusula ORDER BY, que pode ser usada em
conjunto com o comando SELECT, sempre que for necessrio ordenar o retorno das
linhas de uma consulta SQL.

Quando o SELECT for executado com inteno de obter apenas uma


linha de retorno, no necessria a declarao de um cursor. Pode ser feito
um SELECT simples, como mostra a figura 78:

Figura 78 Imagem de um SELECT Simples executado, retornando apenas uma


linha, de acordo com a especificao da clusula WHERE (CODIGO_CURSO =
7).

SOCIESC Sociedade Educacional de Santa Catarina

Programao Aplicada - Cobol

229

10 EXCLUINDO TABELA
Vamos agora acompanhar a excluso da tabela tabcur, usando o comando
SQL DROP TABLE.
Programa DROP.CBL (excluso da tabela de cursos).
$SET SQL(dbman=odbc)
$SET SQL(autocommit)
IDENTIFICATION DIVISION.
PROGRAM-ID.

DROP.

AUTHOR.

SOCIESC.

DATE-WRITTEN.

20/04/07.

*
*

Programa Exemplo para Exclusao de Tabelas no MYSQL

NetExpress 3.0 - MicroFocus

*
WORKING-STORAGE SECTION.
EXEC SQL INCLUDE SQLCA END-EXEC
EXEC SQL BEGIN DECLARE SECTION END-EXEC
01

DCL-TABCUR.
03

HCODIGO-CURSO

PIC 9(005) COMP-3.

03

HDESCR-CURSO

PIC X(030).

03

HPER-CURSO

PIC X(001).

EXEC END DECLARE SECTION END-EXEC


PROCEDURE DIVISION.
INICIO.
EXEC SQL
CONNECT TO 'TUPY' USER 'root.root'
END-EXEC
IF

SQLCODE < 0
PERFORM TA000-ERRO-SECT

END-IF.
DISPLAY "CONEXAO AO BANCO OK!" AT 0510 WITH HIGHLIGHT.
EXEC SQL
DROP TABLE TABCUR

SOCIESC Sociedade Educacional de Santa Catarina

Programao Aplicada - Cobol

230

END-EXEC
IF

SQLCODE < 0 PERFORM TA000-ERRO-SECT.

DISPLAY "TABELA TABCUR EXCLUIDA COM SUCESSO!" AT 1010


WITH HIGHLIGHT.
EXEC SQL
DISCONNECT CURRENT
END-EXEC
STOP RUN.
TA000-ERRO-SECT SECTION.
TA000-ERRO.
IF

SQLCODE < 0
DISPLAY ERASE AT 0101
DISPLAY "ERRO SQL - " AT 1010
DISPLAY SQLCODE AT 1021
STOP RUN

END-IF.
TA999-EXIT.
EXIT.

Vejamos o que mostra a figura 79, aps o resultado da execuo do programa


DROP

Figura 79 Execuo do programa DROP

SOCIESC Sociedade Educacional de Santa Catarina

Programao Aplicada - Cobol

231

Todos os comandos SQL, demonstrados nessa aula, podem ser utilizados em


qualquer outra linguagem de programao com acesso a Banco de Dados via driver
ODBC.

Sntese
Nessa aula vimos como efetuar a comunicao do COBOL com banco de
dados, fazendo conexo com o driver ODBC. Evidenciamos tambm o uso de
clusulas especiais declaradas no programa fonte COBOL, para que o compilador
reconhea o uso de comando SQL.

Exerccios Propostos
1. Assinale Verdadeiro ou Falso:
(

) A tecnologia ODBC no tem um padro estabelecido, varia de linguagem para

linguagem e de acordo com o banco de dados utilizado.


(

) A configurao de um driver ODBC feita usando a opo Painel de Controle,

Ferramentas Administrativas.
(

) Ao trmino da instalao do driver ODBC, o nome que colocamos em Data

Source Name serve apenas como comentrio no ser utilizado em nenhum lugar
pela linguagem de programao.
(

) Para um programa COBOL reconhecer a linguagem SQL, diretiva $SET SQL

deve ser inserida no incio do programa.

SOCIESC Sociedade Educacional de Santa Catarina

Programao Aplicada - Cobol

232

2. Qual o formato padro das declaraes SQL dentro do COBOL?


___________________________________________________________________
___________________________________________________________________
___________________________________________________________________
___

3. Cite qual a linha de comando que efetuou a conexo com o banco de dados,
em todos os nossos programas de exemplo:
___________________________________________________________________
___________________________________________________________________
___________________________________________________________________
___

4. No programa CREATE.CBL, qual a linha que especifica a definio da chave


primria da tabela de cursos?
___________________________________________________________________
___________________________________________________________________
___________________________________________________________________
___
5. No programa EXCLUIR.CBL, exclumos o curso de cdigo 4 da tabela de
cursos. Refaa a sentena, como se fosse excluir o curso 100 (Odontologia) e
a descreva logo abaixo:
___________________________________________________________________
___________________________________________________________________
___________________________________________________________________
___
6. Quantas e quais linhas retornariam da seguinte consulta SQL em nossa
tabela de cursos:
SELECT * FROM TABCUR WHERE PER_CURSO = T

SOCIESC Sociedade Educacional de Santa Catarina

Programao Aplicada - Cobol

233

___________________________________________________________________
___________________________________________________________________
___________________________________________________________________
___

CONCLUSO
A linguagem de programao COBOL, criada na chamada terceira gerao
(anos 60), continua sendo largamente utilizada no mercado.
Muitas pessoas desinformadas e preconceituosas tecem comentrios com
base em informaes de 15, 20 anos atrs, mas tampouco sabem que existem
verses do COBOL que fazem o que qualquer linguagem mais nova pode fazer.
Nosso ltimo estudo, acerca do acesso a banco de dados via COBOL,
comprova bem esta tese. Muitas so as linguagens que pararam no tempo ou
realmente morreram, mas o COBOL continua evoluindo.
Acessando na INTERNET o site do grupo AMBEV, por exemplo, quem
arriscaria dizer que foi construdo com a utilizao da ferramenta NetExpress da
MicroFocus?

isso mesmo. Um grupo gigantesco como esse, tem seu site

desenvolvido em uma ferramenta COBOL, assim como tantas outras empresas tm


seus sistemas de gesto todos sobre COBOL. Essa grande quantidade de empresas
e programadores utilizando COBOL nos faz concluir que eles confiam na
estabilidade e velocidade de processamento da ferramenta, no querendo arriscar a
migrao de seus sistemas por outra linguagem que amanh pode nem existir mais.
Com base nessa viso, este livro didtico procurou abordar o COBOL de
forma genrica, explicando sua estrutura geral, os principais comandos e formatos
que voc provavelmente vai encontrar em qualquer compilador COBOL, disponvel
no mercado.
Lembre-se: a melhor ferramenta de desenvolvimento aquela que voc
domina (Carvalho, 1991). Essa a premissa bsica dos programadores COBOL.
Por isso, creio que ele no deixar de ser utilizado to cedo, continuando seu legado
por muitos anos.

SOCIESC Sociedade Educacional de Santa Catarina

Programao Aplicada - Cobol

234

REFERNCIAS
CARVALHO, Jos Eduardo M. de. Microsoft COBOL 4.0 Microsoft COBOL 3.0
Microsoft COBOL 2.2 COBOL. So Paulo, 1991 Makron Books.
Clube do COBOL
Disponvel em: < http//www.clubecobol.com.br >
Acesso em: 06 abr 2007 s 21 h.
Infonet Manual de COBOL
Disponvel em: < http//www.infonet.com.br/users.htm >
Acesso em: 05 abr 2007 s 20 h.
Linguagem de Programao COBOL
Disponvel em: <http//www.lcobol.com.br
Acesso em: 04 abrl 2007 21 h.
MICROFOCUS, Apostila de Treinamento NETEXPRESS 3.1. DTS Latin Amrica
Software, 1999.
____________, Apostila de Treinamento NETEXPRESS 3.1 INTERNET /
INTRANET. DTS Latin Amrica Software, 2000.
Portal Software
Disponvel em: < http//www.portal.inf.br/COBOL.htm >
Acesso em: 30 mar 2007 s 13 h.
PRICE, Wilson. Elements of COBOL Web Programing. Orinda-California, 1999
Object-Z Publishing.
SOUZA, Marcos Antonio de. NETEXPRESS 3.1 Dialog System Florianpolis,
2002 Visual Books.
TASCA, Joo Carlos. UMA ANLISE DA EVOLUO DA LINGUAGEM COBOL.
SOCIESC Sociedade Educacional de Santa Catarina

Programao Aplicada - Cobol

235

Joinville, UTESC, 2004 - Monografia (diplomao).

Soluo dos Exerccios


Aula 1
1) Baseando-se no fato do COBOL ser uma linguagem de programao um
pouco antiga, explique o motivo desta ainda ser muito utilizada:
Ele estruturado, robusto, estvel e de simples aprendizado.
2) Qual foi o principal fator que fez com que a linguagem de programao
COBOL deixasse de ser algo restrito, deixando de ser empregado apenas em
sistemas de grande porte?
A prpria MicroFocus passou a distribuir seu COBOL a partir de 1990,
quando a MicroSoft se desinteressou por em divulgar plenamente essa
linguagem, pois distribua outras linguagens de programao.
3) Cite quais so os principais compiladores atuais do COBOL:
NETEXPRESS, ACUCOBOL, POWERCOBOL, RMCOBOL.
4) Cite os principais recursos oferecidos pelos compiladores COBOL.
Interface Grfica para desenvolvimento de aplicaes WINDOWS.
Orientao a Objetos e Eventos.
Ferramentas que permitem criao de aplicaes WEB e arquivos no
formato XML
Suporte a Automao OLE, que permite interagir com outras aplicaes
Windows (Planilhas, Editores, Programas de e-mail, etc.).
Suporte a Banco de Dados via ODBC
Integrao com outras linguagens atravs de DLL.

SOCIESC Sociedade Educacional de Santa Catarina

Programao Aplicada - Cobol

236

Aula 2
1.

Cite no mnimo cinco smbolos suportados pelo COBOL, alm das letras e

nmeros:
+ - * / = $ < > . ( ) :
2.

Qual o tamanho mximo das PALAVRAS EM COBOL? E qual a particularidade

com o sinal de menos ( ) na definio destas palavras?


30 caracteres. O sinal de menos ( -- ) pode compor palavras, exceto como
primeiro e ltimo caracter da palavra.
3.

Assinale Verdadeiro (V) ou Falso (F) nas afirmaes abaixo:


( V ) IDENTIFICATION DIVISION ou identification division representa a mesma
coisa para o COBOL.
( F ) total-horas- ou TOTAL-HORAS- so palavras vlidas para o COBOL.
( V ) Para representar o numero 0, podemos digitar ZERO ou ZEROS.
( F ) Toda linha de programao COBOL dever estar entre a coluna 08 e 72.

4.

Explique sinteticamente como funciona a codificao de um Fonte COBOL:


rea reservada: Colunas de 1 a 6 de um Fonte COBOL, reservadas para a
linguagem, no podem ser usadas pelo programador, a no ser para
incluso de comentrios.
rea de Indicao: a coluna 7 do Fonte COBOL. Um hfen nesta coluna
indica que haver continuao do comando da linha anterior.
reas A e B: Na rea A so especificadas todas as declaraes de
divises, sees e pargrafos do COBOL. Na rea B so definidos os
comandos e lgica de programao.

Aula 3
1.

Cite em poucas palavras, a funo da DATA DIVISION e da PROCEDURE

DIVISION:

SOCIESC Sociedade Educacional de Santa Catarina

Programao Aplicada - Cobol

237

Data Division = Diviso responsvel pela definio de todos os dados a serem


processados ou manipulados pelo programa, durante seu processamento
Procedure Division= Diviso responsvel pelo desenvolvimento da lgica do
programa.
2.

Especifique o significado da clusula SPECIAL-NAMES e de sua principal

diretiva:
3.

Especifica uma srie de parmetros, como, sinal monetrio, tipo de

ponto decimal, e adaptao para comunicao do COBOL com outras


linguagens. A declarao mais conhecida utilizada nessa clusula
DECIMAL POINT IS COMMA (ponto decimal vrgula), em virtude de que no
Brasil utilizamos a vrgula e no o ponto como separador decimal.
4.

No programa Exemplo desta Aula, cite o nome dos 3 pargrafos existentes:

ABRE-ARQUIVO
LEITURA.
FINAL.
5.

obrigatrio iniciar a PROCEDURE DIVISION com uma seo? Explique:

No obrigatrio iniciar a PROCEDURE DIVISION com uma seo. Pode ser


iniciada com um pargrafo, dependendo da lgica empregada no programa.
Aula 4
1.

Explique o nvel especial 77:

O nmero de nvel especial

77 utilizado para definir variveis de dados

independentes, que no possuem relao com nenhum item elementar ou de


grupo.
2.

Crie dois exemplos para cada tipo de varivel (numrica, alfanumrica e

alfabtica) especificando o tamanho de cada uma:


Numricas: CODIGO-ALUNO PIC 9(007) CPF-ALUNO PIC 9(011)
Alfanumricas: EMAIL-ALUNO PIC X(050) BAIRRO-ALUNO PIC X(030)
Alfabticas: UF-ALUNO PIC A(002) SENHA-ALFABETICA PIC A(003)
SOCIESC Sociedade Educacional de Santa Catarina

Programao Aplicada - Cobol

3.

238

O que se define pela clusula PIC?

O tipo de dado e seu tamanho em bytes.


4.

Para que serve a clusula VALUE na definio de variveis?

Para que possamos atribuir um valor inicial para a varivel.


5.

Crie uma varivel chamada NACIONALIDADE-ALUNO, que poder assumir o

valor B para Brasileiro ou E para Estrangeiro, definindo os dados no nvel


especial 88 (veja o exemplo da varivel ESTADO-CIVIL):
01 NACIONALIDADE-ALUNO

6.

PIC X(001).

88 BRASILEIRO

VALUE B.

88 ESTRANGEIRO

VALUE E.

O que so Variveis Editadas?

So variveis utilizadas para melhorar a apresentao de valores em


consultas e relatrios.
7.

Cite dois exemplos de utilizao para as Variveis Editadas


Campo Data 01012007 para mostrar 01/01/2007
Campo CPF 11111111111 para mostrar 111.111.111.11
Campo Valor 13152080 para mostrar 131.520,80

8.

Explique a Clusula Redefines:

Permite a redefinio de qualquer varivel, subdividindo-a em nveis menores


ao da varivel que est sendo redefinida.
9.

Explique a importncia da utilizao da clusula OCCURS na construo de

um programa:
Essa clusula elimina a necessidade de descries separadas para sentenas
repetitivas. Em outras palavras, especifica o nmero de vezes que um item se
repete com o mesmo formato.

SOCIESC Sociedade Educacional de Santa Catarina

Programao Aplicada - Cobol

239

Aula 5

1. Assinale Verdadeiro (V) ou Falso (F) nas afirmaes abaixo:


(V) O Comando DISPLAY ERASE AT 0101 limpa a tela.
(F) O comando ACCEPT serve apenas para entrada de dados relativas
senha.
(F) No uso do comando MOVE, as variveis envolvidas podem ser de tipos de
dados diferentes.
(V) Os comandos para operaes aritmticas so: ADD, SUBTRACT, DIVIDE,
MULTIPLY e COMPUTE.
(V) Os comandos condicionais so o IF e o EVALUATE.
2. Construa uma sentena IF, comparando a varivel IDADE-ALUNO, exibindo
mensagem ALUNO MAIOR DE IDADE

ou ALUNO MENOR DE IDADE . A

comparao deve ser feita com base na idade legal do Brasil, 18 anos.
IF IDADE-ALUNO < 18
DISPLAY ALUNO MENOR DE IDADE
ELSE
DISPLAY ALUNO MAIOR DE IDADE
END-IF.
3. Complete as sentenas.
a)A palavra que melhor traduz a declarao PERFORM seria EXECUTE.
b)Recomenda-se o uso do comando GO TO apenas dentro da mesma seo.
c)O comando CALL utilizado para chamar outros programas dentro da
aplicao atual.
4. No programa exemplo (PROG4), qual a linha do programa que solicita ao usurio
que digite o perodo do curso (Semestral ou Anual):
ACCEPT PERIODO-CURSO AT 0561.

5. Cite um dos exemplos de comandos com operao aritmtica presentes no


PROG4:
SOCIESC Sociedade Educacional de Santa Catarina

Programao Aplicada - Cobol

240

COMPUTE MEDIA-GERAL = (NOTA1 + NOTA2) / 4 ou


COMPUTE MEDIA-GERAL = (NOTA1 + NOTA2 + NOTA3 + NOTA4) / 4

Aula 6
1. Com base em PROG3.CBL e PROG4.CBL, crie um novo programa
PROG5.CBL, com as seguintes especificaes:
a) O programa dever pedir na tela a Idade do Aluno. Se for menor de 16 ou
maior de 70, dever exibir mensagem afirmando que as Datas esto fora do
limite permitido para cursar a faculdade.
b) O programa dever pedir na tela a informao sobre o Estado Civil do Aluno
(solteiro, casado, divorciado), testando a primeira letra de cada situao (S, C, ou
D). Qualquer parmetro que no atenda essa especificao, o sistema no
dever seguir em frente.
c) Os campos pedidos na tela devero ter a possibilidade de deixar o usurio sair
teclando ESC
d) Quando o Estado Civil for Divorciado, se a idade do aluno for > 40 no aceitar.
Voltar o programa ao seu incio.
e) Para os outros casos, exibir mensagem PARABENS, SEU PERFIL FOI
APROVADO! na ltima linha da tela e finalizar o programa.
IDENTIFICATION DIVISION.
PROGRAM-ID.
AUTHOR.

EXERC6.
SOCIESC.

*
* Programa Exemplo - Resposta da Aula 06
*
ENVIRONMENT DIVISION.
SPECIAL-NAMES.
DECIMAL-POINT IS COMMA.
DATA DIVISION.
WORKING-STORAGE SECTION.
01

VARIAVEIS-TEMPORARIAS.

SOCIESC Sociedade Educacional de Santa Catarina

Programao Aplicada - Cobol

241

03

ESTADO-CIVIL

PIC X(001).

03

IDADE-ALUNO

PIC 9(002).

PROCEDURE DIVISION.
INICIO.
DISPLAY ERASE AT 0101.
CAMPO-IDADE.
DISPLAY "Idade do Aluno - " AT 0520.
ACCEPT IDADE-ALUNO AT 0537 ON ESCAPE
GO TO FIM-PROGRAMA.
IF

IDADE-ALUNO < 16 OR > 70


DISPLAY "Idade nao permite cursar a faculdade!" AT 1001
GO TO FIM-PROGRAMA

END-IF.
CAMPO-EC.
DISPLAY "Estado Civil: (S) (C) (D) - " AT 0720.
ACCEPT ESTADO-CIVIL AT 0748 ON ESCAPE
GO TO FIM-PROGRAMA.
IF

ESTADO-CIVIL NOT EQUAL "S" AND "C" AND "D"


GO TO CAMPO-EC

END-IF
IF

ESTADO-CIVIL EQUAL "D"

AND IDADE-ALUNO > 40


DISPLAY "Divorciados acima de 40 anos nao permitidos!"
AT 1001
GO TO FIM-PROGRAMA
END-IF.
DISPLAY "PARABENS, SEU PERFIL FOI APROVADO!" AT 1001.
FIM-PROGRAMA.
DISPLAY "FIM DE EXECUCAO!" AT 2330 WITH REVERSE-VIDEO.
STOP RUN.

Aula 7
1.

Modifique o programa MENUCOR para que, antes de exibir a TELA-

PRINCIPAL, solicite no incio duas variveis, uma para cor de fundo e outra para cor
dos caracteres, de forma que, a cada execuo o programa possa vir com cores
diferenciadas.
IDENTIFICATION DIVISION.
PROGRAM-ID.

MENUCOR.

AUTHOR.

SOCIESC.

DATA DIVISION.
WORKING-STORAGE SECTION.
01

OPCAO

PIC 9(001) VALUE ZERO.

SOCIESC Sociedade Educacional de Santa Catarina

Programao Aplicada - Cobol

242

01

COR-F

PIC 9(001) VALUE ZERO.

01

COR-C

PIC 9(001) VALUE ZERO.

SCREEN SECTION.
01 TELA-PRINCIPAL.
02 BLANK SCREEN BACKGROUND-COLOR COR-F FOREGROUND-COLOR COR-C.
02 LINE 01 COL 21 VALUE "*----------------------------------*".
02 LINE 02 COL 21 VALUE "*

*".

02 LINE 03 COL 21 VALUE "* MANUTENCAO ALUNOS-Menu Principal *".


02 LINE 04 COL 21 VALUE "*

*".

02 LINE 05 COL 21 VALUE "*----------------------------------*".


02 LINE 06 COL 21 VALUE "*

*".

02 LINE 07 COL 21 VALUE "*

*".

02 LINE 08 COL 21 VALUE "*

1 - Inclusao

*".

02 LINE 09 COL 21 VALUE "*

2 - Alteracao

*".

02 LINE 10 COL 21 VALUE "*

3 - Exclusao

*".

02 LINE 11 COL 21 VALUE "*

4 - Consulta

*".

02 LINE 12 COL 21 VALUE "*

5 - Relatorio

*".

02 LINE 13 COL 21 VALUE "*

6 - Sair

*".

02 LINE 14 COL 21 VALUE "*


02 LINE 15 COL 21 VALUE "*

*".
Opcao: ( )

*".

02 LINE 16 COL 21 VALUE "*

*".

02 LINE 17 COL 21 VALUE "*

*".

02 LINE 18 COL 21 VALUE "*----------------------------------*".


PROCEDURE DIVISION.
INICIO.
PERFORM CORES-SECT.
DISPLAY TELA-PRINCIPAL.
ACCEPT OPCAO AT 1541 WITH AUTO.
IF

OPCAO < 1 OR > 6


INITIALIZE OPCAO
GO TO INICIO

END-IF
EVALUATE OPCAO
WHEN 1
WHEN 2
WHEN 3 CALL "CADALUNO" USING OPCAO ON OVERFLOW
PERFORM MENSAGEM-SECT
WHEN 4 CALL "CONALUNO" ON OVERFLOW
PERFORM MENSAGEM-SECT
WHEN 5 CALL "RELALUNO" ON OVERFLOW
PERFORM MENSAGEM-SECT
WHEN 6 GO TO FIM-PROGRAMA
END-EVALUATE.
FIM-PROGRAMA.

SOCIESC Sociedade Educacional de Santa Catarina

Programao Aplicada - Cobol

243

DISPLAY "FIM DE EXECUCAO" AT 2335 WITH REVERSE-VIDEO.


STOP RUN.
CORES-SECT SECTION.
CORES.
DISPLAY ERASE AT 0101.
DISPLAY "Cor de Fundo - " AT 1020.
DISPLAY "Cor de Caracter - " AT 1120.
ACCEPT COR-F AT 1035.
DISPLAY "Cor de Caracter - " AT 1120.
ACCEPT COR-C AT 1138.
CORES-FIM.
EXIT.
MENSAGEM-SECT SECTION.
MENSAGEM.
DISPLAY "Rotinas nao Disponiveis!" AT 2230 WITH HIGHLIGHT.
STOP " ".
MENSAGEM-FIM.
EXIT.

Aula 8
1.

Com base na estrutura dos programas PROG3.CBL e VALDATA.CBL, crie

um programa chamador e um subprograma para atender seguinte situao:


a) O programa chamador dever pedir na tela um cdigo de cor vlido da
tabela de cores do MicroSoft COBOL 4.5 (que pode variar de 0 a 7). No
deixe o usurio informar nenhum valor fora da faixa permitida.
b) O programa chamador dever passar o parmetro do cdigo da cor
para o subprograma, que devolver a descrio da cor tal informao
dever ser exibida no programa principal, antes de sua finalizao.
IDENTIFICATION DIVISION.
PROGRAM-ID.
AUTHOR.

EXERC8.
SOCIESC.

* Programa Exemplo Resoluo Exerccio AULA 08


DATA DIVISION.
WORKING-STORAGE SECTION.
01 AREA-CORES.
03 CODIGO-COR

PIC 9(001).

SOCIESC Sociedade Educacional de Santa Catarina

Programao Aplicada - Cobol

03 DESCRICAO-COR

244

PIC X(020).

PROCEDURE DIVISION.
INICIO.
INITIALIZE AREA-CORES.
DISPLAY ERASE AT 0101.
DISPLAY "Informe o Codigo da COR - " AT 0510.
ACCEPT CODIGO-COR AT 0536 ON ESCAPE GO TO FIM-PROGRAMA.
IF

CODIGO-COR > 7
GO TO INICIO

END-IF
CALL "PROGCOR" USING AREA-CORES ON OVERFLOW
DISPLAY "PROGRAMA PROGCOR.EXE NAO ENCONTRADO!"
AT 2010 WITH HIGHLIGHT
STOP " "
GO TO FIM-PROGRAMA.
DISPLAY DESCRICAO-COR AT 1520 WITH REVERSE-VIDEO.
FIM-PROGRAMA.
DISPLAY "FIM DA ROTINA!" AT 2130 WITH HIGHLIGHT.
STOP RUN.

IDENTIFICATION DIVISION.
PROGRAM-ID.

PROGCOR.

AUTHOR.

SOCIESC.

* Programa que devolve a descrio das cores


DATA DIVISION.
WORKING-STORAGE SECTION.
LINKAGE SECTION.
01 AREA-CORES.
03 CODIGO-COR

PIC 9(001).

03 DESCRICAO-COR

PIC X(020).

PROCEDURE DIVISION USING AREA-CORES.


INICIO.
EVALUATE CODIGO-COR
WHEN 0 MOVE "PRETO"

TO DESCRICAO-COR

WHEN 1 MOVE "AZUL"

TO DESCRICAO-COR

WHEN 2 MOVE "VERDE"

TO DESCRICAO-COR

WHEN 3 MOVE "CIANO"

TO DESCRICAO-COR

WHEN 4 MOVE "VERMELHO"

TO DESCRICAO-COR

WHEN 5 MOVE "MAGENTA"

TO DESCRICAO-COR

WHEN 6 MOVE "MARROM/AMARELO" TO DESCRICAO-COR


WHEN 7 MOVE "BRANCO"

TO DESCRICAO-COR

END-EVALUATE.
FIM-ROTINA.

SOCIESC Sociedade Educacional de Santa Catarina

Programao Aplicada - Cobol

245

EXIT PROGRAM.

Aula 9
1. Monte uma SELECT para um arquivo de Livros. O cdigo do livro deve ser a
chave principal e o nome do livro a chave alternativa. O nome externo do arquivo
ser "LIVROS.DAT" e a varivel de controle do STATUS dever ser LIV-STATUS.
SELECT LIVROS ASSING TO "LIVROS.DAT"
ORGANIZATION

IS INDEXED

ACCESS MODE

IS DYNAMIC

RECORD KEY

IS CODIGO-LIVRO

ALTERNATE RECORD KEY

IS NOME-LIVRO WITH DUPLICATES

FILE STATUS

IS LIV-STATUS.

2. Monte a FD do arquivo Livros com os seguintes campos (os tamanhos dos


campos esto definidos entre os parnteses):
Cdigo Livro (07) - Nome Livro (50) - Data Edio (08) - Gnero Livro (1)
Sendo que:
a)A data dever ser desmembrada em dia, ms e ano.
b)O

Gnero

poder

assumir

os

valores:

S=SOCIOLOGIA, que sero expressos na FD.


FD LIVRO.
01

LIV-REGISTRO.
03

CODIGO-LIVRO

PIC 9(007).

03

NOME-LIVRO

PIC X(050).

03

DATA-EDICAO

PIC 9(008).

03

REDEFINES DATA-EDICAO.

03

05

DIA-EDICAO

PIC 9(002).

05

MES-EDICAO

PIC 9(002).

05

ANO-EDICAO

PIC 9(004).

GENERO-LIVRO

PIC X(001).

88

INFORMATICA

VALUE "I".

88

FICCAO

VALUE "F".

SOCIESC Sociedade Educacional de Santa Catarina

I=INFORMATICA

F=FICCAO

Programao Aplicada - Cobol

88

SOCIOLOGIA

246

VALUE "S".

3.Complete as frases:
a) Para cada arquivo a ser utilizado pelo programa, haver sempre uma clusula
SELECT e FD.
b) A declarao COPY permite que um bloco de instrues ou variveis seja
inserido no programa a partir de um arquivo texto que contenha as regras da
linguagem COBOL.

4.Assinale Verdadeiro ou Falso:


(F) As clusulas inseridas no programa atravs da declarao COPY, no podem
ser usadas em vrios programas.
(V) O comando OPEN abre os arquivos do COBOL, sejam indexados ou
seqenciais.
(F) CLOSE ARQUIVO1 ARQUIVO2 ARQUIVO3 no suportado pelo COBOL.
(V) OPEN I-O ARQUIVO significa que estamos abrindo o arquivo para leitura e
gravao de dados.
(V) Para efetuarmos a leitura de um registro diretamente, carregamos a chave
primria antes da execuo do READ.
5. Descreva a linha do programa CADCURSO que realiza as seguintes aes:
a) Grava um Curso - WRITE CURSO-REGISTRO.
b) Regrava um Curso - REWRITE CURSO-REGISTRO.
c) Exclui um Curso - DELETE CURSOS RECORD.
d) L o Curso digitado pelo usurio - READ CURSOS RECORD.
e) Exibe a Tela do programa - DISPLAY TELA-CURSOS.
6.Na seo CADASTRO-SECT, a mensagem "CODIGO NAO EXISTE, INCLUIR?"
exibida em razo de qual sentena? E o que significa?

SOCIESC Sociedade Educacional de Santa Catarina

Programao Aplicada - Cobol

247

IF SIT-ARQUIVO = "23".
Significa que o registro lido nao foi encontrado.
7.Quando o programa pede o perodo do curso, no precisamos teclar ENTER para
o programa continuar. Ele pula automaticamente para a prxima sentena. A que
clusula atribumos isso no ACCEPT ?
AUTO-SKIP
8.Analisando a sentena "IF

DESCR-CURSO = SPACES GO TO INCLUSAO",

qual o resumo que fazemos ?


O programa nao permite incluir um curso com a descrio em branco.

Aula 10

1. Assinale as alternativas verdadeiras:


(

) O nico programa de nossa aplicao com linkage o VALDATA (validador de

datas).
( X ) Numa aplicao em COBOL, no necessrio compilar subprogramas com as
mesmas diretivas compiladas no programa principal.
( X ) A diretiva ON OVERFLOW ser executada, caso o programa constante na
chamada CALL no consiga ser executada.
(

) Utilizamos a declarao SORT para classificar os dados de um arquivo pela sua

chave primria ou alternativa.


2. No programa CADCLI, existem duas sees que so utilizadas mais de uma vez,
em momentos diferenciados do programa, evitando repetio de linhas de cdigo.
Identifique essas sees:
ENTRADA-DADOS-SECT
MOSTRA-DADOS-SECT
3. No programa CONCLI, para que serve a varivel LETRA-CONSULTA.?
Para que o usurio possa iniciar a consulta dos clientes a partir de

SOCIESC Sociedade Educacional de Santa Catarina

Programao Aplicada - Cobol

248

determinada letra do alfabeto.


4. No programa CONCLI, quando o nmero de clientes excede a 8, o programa
efetua uma pausa e pergunta ao usurio se deseja continuar ou abandonar: Cite a
parte do programa que exibe essa mensagem e a que aguarda a opo do usurio
em continuar ou abandonar.
IF

LINHAS-POR-TELA > 8
DISPLAY "<ENTER>=CONTINUA <A>=ABANDONA" AT 1914
ACCEPT RESPOSTA AT 1945
IF

RESPOSTA = "A"
GO TO CARREGA-FIM

END-IF

5. Cite as sees do PROGRAMA RELCLI que executam as seguintes rotinas:


a) Imprimem o Cabealho CABEALHO-SECT
b) Listam o Relatrio sem utilizar o SORT LISTA-CLIENTES-SECT
6. Cite os comandos do PROGRAMA RELCLI que executam as seguintes aes:
a) Leitura do arquivo de clientes: READ CLIENTES NEXT.
b) Gravao do Arquivo SORT: RELEASE SCLI-REGISTRO.
c) Incremento na quantidade de linhas impressas. ADD 1 TO

LINHAS-

IMPRESSAS.
Aula 11
1. Assinale Verdadeiro ou Falso:
( F ) A tecnologia ODBC no tem um padro estabelecido, varia de linguagem para
linguagem e de acordo com o banco de dados utilizado.
( V ) A configurao de um driver ODBC feita usando a opo Painel de Controle,
Ferramentas Administrativas.

SOCIESC Sociedade Educacional de Santa Catarina

Programao Aplicada - Cobol

249

( F ) Ao trmino da instalao do driver ODBC, o nome que colocamos em Data


Source Name serve apenas como comentrio no ser utilizado em nenhum lugar
pela linguagem de programao.
( V ) Para um programa COBOL reconhecer a linguagem SQL, a diretiva $SET SQL
deve ser inserida no incio do programa.
2. Qual o formato padro das declaraes SQL dentro do COBOL?
EXEC SQL <declarao> END-EXEC
3. Cite qual a linha de comando que efetuou a conexo com o banco de dados, em
todos os nossos programas de exemplo:
CONNECT TO TUPY USER root.root
4. No programa CREATE.CBL, qual a linha que especifica a definio da chave
primria da tabela de cursos?
CONSTRAINT PK1_TABCUR PRIMARY KEY (CODIGO_CURSO)
5. No programa EXCLUIR.CBL, exclumos o curso de cdigo 4 da tabela de cursos.
Refaa a sentena, como se fosse excluir o curso 100 (Odontologia) e a descreva
logo abaixo:
MOVE 100 TO HCODIGO-CURSO
EXEC SQL
DELETE FROM TABCUR
WHERE ( CODIGO_CURSO = :HCODIGO-CURSO )
END-EXEC

6. Quantas e quais linhas retornariam da seguinte consulta SQL em nossa tabela de


cursos:
SELECT * FROM TABCUR WHERE PER_CURSO = T

00002 MECANICA INDUSTRIAL T


00005 TURISMO E HOTELARIA T

SOCIESC Sociedade Educacional de Santa Catarina

Você também pode gostar