Vous êtes sur la page 1sur 256

Curso de Cobol Básico

Curso de Cobol Básico


Apostila de Lições
4ª Edição - 1ª Revisão

FromSoft Home Page: www.fromsoft.com.br


Av. dos Andradas, 2.287 Sl 1204 - Sta Efigênia E-mail: comercial@fromsoft.com.br
Belo Horizonte - MG - CEP 30.120-010 Fone (31) 3241.6882

FromSoft – Todos os direitos reservados – http://www.fromsoft.com.br Página 1


Curso de Cobol Básico

Índice
LIÇÃO 1 ..................................................................................................................................................................... 8
LIÇÃO 1 - CONCEITOS ............................................................................................................................................... 8
1.1 - Programação .............................................................................................................................................. 8
1.1.1. Diferenças entre Lógica e Programação ................................................................................................................... 8
1.1.2 - Histórico do COBOL .............................................................................................................................................. 8
1.1.3 - Evolução – Perspectivas Tecnológicas.................................................................................................................... 8
1.2 - Plataformas e Sistemas Operacionais......................................................................................................... 8
1.2.1 - Dialetos do Cobol: Padrão ANSI ............................................................................................................................ 9
1.3 - Programa: Dados e Comandos................................................................................................................... 9
1.4 - Programa-Fonte, Compilação e Linkedição ............................................................................................... 9
1.4.1 - Programa-Fonte....................................................................................................................................................... 9
1.4.2 - Compilação ............................................................................................................................................................. 9
1.4.3 - Códigos gerados após a compilação:....................................................................................................................... 9
1.4.4 - Linkedição ............................................................................................................................................................ 10
1.4.5 - Configurações do Compilador para o ambiente de desenvolvimento.................................................................... 10
1.5 - Edição: Linguagem de Programação, Estrutura, Regras de Escrita........................................................ 11
1.5.1 - ESTRUTURA....................................................................................................................................................... 11
1.5.1.1 - IDENTIFICATION DIVISION..................................................................................................................... 11
1.5.1.2 - ENVIRONMENT DIVISION ....................................................................................................................... 11
1.5.1.3 - DATA DIVISION ......................................................................................................................................... 11
1.5.1.4 - PROCEDURE DIVISION............................................................................................................................. 11
1.5.2 - Seções e Parágrafos............................................................................................................................................... 11
1.5.3 – Estrutura da Data Division ................................................................................................................................... 12
1.5.3.1 - File Section.................................................................................................................................................... 12
1.5.3.2 - Working-Storage Section .............................................................................................................................. 12
1.5.3.3 - Linkage Section............................................................................................................................................. 12
1.5.3.4 - Screen Section ............................................................................................................................................... 12
1.5.3.5 - Report Section ............................................................................................................................................... 12
1.5.4 – Declaração de Dados: Constantes e Variáveis...................................................................................................... 12
1.5.4.1 – Estrutura da Declaração................................................................................................................................ 12
Parei aqui..................................................................................................................................................................... 13
1.5.3 - Declaração de variáveis ........................................................................................................................................ 13
1.5.4 - Constantes figurativas ........................................................................................................................................... 16
1.5.5 – Inicialização de variáveis. .................................................................................................................................... 16
1.5.6 - Cláusula FILLER .................................................................................................................................................. 16
1.6 - Comandos ................................................................................................................................................. 16
1.6.1 - DISPLAY ............................................................................................................................................................. 16
1.6.2 - ACCEPT ............................................................................................................................................................... 18
1.6.3 - STOP RUN ........................................................................................................................................................... 18
Lição 1 – Exemplo 1.......................................................................................................................................... 18
Lição 1 - Exercícios........................................................................................................................................... 18
LIÇÃO 2 ................................................................................................................................................................... 20
LIÇÃO 2 - CONCEITOS ............................................................................................................................................. 20
2.1 - ACCEPT (avançados) ............................................................................................................................... 20
2.2 - DISPLAY (avancados) .............................................................................................................................. 22
2.3 - Comando COPY ........................................................................................................................................ 24
Lição 2 - Exercícios........................................................................................................................................... 24
LIÇÃO 3 ................................................................................................................................................................... 25
LIÇÃO 3 - CONCEITOS ............................................................................................................................................. 25
3.1 - Fluxos de Controle.................................................................................................................................... 25
3.1.1 - Comando condicional IF ....................................................................................................................................... 25
3.1.2 - Agrupamentos e Prioridades. ................................................................................................................................ 27
3.2 - Paragrafos ................................................................................................................................................ 28
3.2.1 - Procedure Names .................................................................................................................................................. 28
3.3 - Comando GO TO ...................................................................................................................................... 28
3.4 - Comando MOVE ....................................................................................................................................... 29
3.5 – Inicialização de variáveis......................................................................................................................... 30

FromSoft – Todos os direitos reservados – http://www.fromsoft.com.br Página 2


Curso de Cobol Básico

3.5.1 - Comando INITIALIZE ......................................................................................................................................... 30


3.6 - Cláusula DECIMAL-POINT IS COMMA ................................................................................................. 30
3.6.1 - Máscara de edição................................................................................................................................................. 31
3.6.2 - Como trabalhar com máscaras de edição. ............................................................................................................. 31
3.7 - Comando STOP......................................................................................................................................... 31
3.7.1 - Modo de se parar a tela sem o uso do STOP ......................................................................................................... 32
3.8 - Trabalhando com Teclas Especiais........................................................................................................... 32
Lição 3 - Exemplo 1........................................................................................................................................... 33
Lição 3 - Exemplo 2........................................................................................................................................... 35
Lição 3 - Exemplo 3........................................................................................................................................... 35
Lição 3 - Exemplo 4........................................................................................................................................... 36
Lição 3 - Exercícios........................................................................................................................................... 37
LIÇÃO 4 ................................................................................................................................................................... 39
LIÇÃO 4 - CONCEITOS ............................................................................................................................................. 39
4.1 - Screen Section ........................................................................................................................................... 39
4.1.1 Como usar. .............................................................................................................................................................. 39
4.1.2 Cláusula LINE......................................................................................................................................................... 39
4.1.3 Cláusula COLUMN................................................................................................................................................. 39
4.1.4 Cláusula BLANK SCREEN. ................................................................................................................................... 39
4.2 - Ferramenta SCREENS .............................................................................................................................. 39
4.2.1 - Interface e menu inicial do SCREENS.................................................................................................................. 40
4.2.2 - Teclas de Atalho do SCREENS ............................................................................................................................ 40
4.2.3 - Sub-menu ALT (opções relativas a personalização de Forms).............................................................................. 42
4.2.4 - Sub-menu CTRL (opções relativas a criação de Forms) ....................................................................................... 42
4.2.5 - Trabalhando com o SCREENS ............................................................................................................................. 43
4.2.5.1 - Criação de Forms: ......................................................................................................................................... 43
4.2.5.2 - Escolha de cores para os Forms..................................................................................................................... 43
4.2.5.3 - Desenhar Forms............................................................................................................................................. 44
4.2.5.4 - Copiar, Recortar e Colar Campos de forms ................................................................................................... 44
4.2.5.5 - Criação de variáveis, opções de preenchimento e mascaramento de variáveis .............................................. 44
4.2.5.6 - Abertura de Forms......................................................................................................................................... 45
4.2.5.7 - Gravação de Forms........................................................................................................................................ 45
4.2.5.8 - Geração de arquivos (copybooks) para uso na Screen Section ...................................................................... 46
4.2.5.9 - Resumo do Screens - procedimentos básicos para criação de Forms (telas):................................................. 47
4.2.5.10 - Executando no Screens, passo a passo: ....................................................................................................... 47
Lição 4 - Exemplo 1........................................................................................................................................... 48
Lição 4 - Exemplo 2........................................................................................................................................... 48
Lição 4 - Exercícios........................................................................................................................................... 49
LIÇÃO 5 ................................................................................................................................................................... 51

LIÇÃO 5 - CONCEITOS........................................................................................................................................ 51
5.1 - Comando ADD.......................................................................................................................................... 51
5.2 - Comando SUBTRACT............................................................................................................................... 51
5.3 - Comando MULTIPLY................................................................................................................................ 52
5.4 - Comando DIVIDE..................................................................................................................................... 53
5.4.1 - Clausula ON SIZE ERROR. ................................................................................................................................. 54
5.5 - Comando COMPUTE ............................................................................................................................... 54
5.6 - Considerações sobre cálculos ................................................................................................................... 55
Lição 5 - Exemplo 1........................................................................................................................................... 55
5.8 - Comando EVALUATE............................................................................................................................... 55
Lição 5 – Exemplo 2.......................................................................................................................................... 55
Lição 5 - Exemplo 3........................................................................................................................................... 56
Lição 5 - Exercícios........................................................................................................................................... 57
LIÇÃO 6 ................................................................................................................................................................... 59
LIÇÃO 6 - CONCEITOS ............................................................................................................................................. 59
6 - Estruturas de Repetição ............................................................................................................................... 59
6.1 - Comando PERFORM................................................................................................................................ 59

FromSoft – Todos os direitos reservados – http://www.fromsoft.com.br Página 3


Curso de Cobol Básico

6.2 - Comando EXIT.......................................................................................................................................... 62


6.3 - Variação de posições de ACCEPT/DISPLAY............................................................................................ 62
Lição 6 - Exemplo 1........................................................................................................................................... 63
Lição 6 - Exemplo 2........................................................................................................................................... 64
Lição 6 - Exemplo 3........................................................................................................................................... 64
Lição 6 - Exercícios........................................................................................................................................... 65
LIÇÃO 7 ................................................................................................................................................................... 67
LIÇÃO 7 - CONCEITOS ............................................................................................................................................. 67
7.1 - Vetor.......................................................................................................................................................... 67
7.2. Ocorrências ................................................................................................................................................ 67
7.3 - Índice......................................................................................................................................................... 67
7.4 - Cláusula OCCURS.................................................................................................................................... 67
7.5 - Inicialização de Vetores/Tabelas. ............................................................................................................. 68
Lição 7 - Exemplo 1........................................................................................................................................... 68
Lição 7 - Exemplo 2........................................................................................................................................... 68
Lição 7 – Exemplo 3.......................................................................................................................................... 68
Lição 7 - Exemplo 4........................................................................................................................................... 69
Lição 7 - Exemplo 5........................................................................................................................................... 69
7.6 - Matriz........................................................................................................................................................ 70
7.6.1 - Definindo uma Matriz........................................................................................................................................... 70
7.6.2 – Inicialização de Matriz ......................................................................................................................................... 70
7.6.3 – Desenvolvimento de Matrizes .............................................................................................................................. 70
Lição 7 - Exemplo 6........................................................................................................................................... 70
Lição 7 - Exercícios........................................................................................................................................... 72
LIÇÃO 8 ................................................................................................................................................................... 76
LIÇÃO 8 - CONCEITOS ............................................................................................................................................. 76
8.1 - MENU ....................................................................................................................................................... 76
8.1.1 - Decidindo qual programa chamar ......................................................................................................................... 76
Lição 8 - Exemplo 1........................................................................................................................................... 76
Lição 8 – Exemplo 2.......................................................................................................................................... 77
8.2 - Ligação entre Programas.......................................................................................................................... 77
8.2.1 - Comando CALL.................................................................................................................................................... 77
Lição 8 – Exemplo 3.......................................................................................................................................... 77
8.2.2 - Comando CANCEL .............................................................................................................................................. 78
Lição 8 – Exemplo 4.......................................................................................................................................... 78
8.2.3 - Comando CHAIN ................................................................................................................................................. 79
Lição 8 – Exemplo 5.......................................................................................................................................... 79
8.2.4 - Comando EXIT PROGRAM ................................................................................................................................ 80
8.3 – Passagem de Parâmetros ......................................................................................................................... 80
8.3.1 – Atributo USING ................................................................................................................................................... 80
Lição 8 - Exemplo 6........................................................................................................................................... 81
8.4 - O parâmetro ON OVERFLOW.................................................................................................................. 81
Lição 8 - Exercícios........................................................................................................................................... 82
LIÇÃO 9 ................................................................................................................................................................... 84
LIÇÃO 9 - CONCEITOS ............................................................................................................................................. 84
9.1 - Armazenamento de Dados......................................................................................................................... 84
9.2 – Operações com arquivos .......................................................................................................................... 84
9.2.1 – Criação do arquivo ............................................................................................................................................... 84
9.2.2 – Abertura do arquivo.............................................................................................................................................. 85
9.2.3 – Atualização de dados no arquivo.......................................................................................................................... 85
9.2.4 – Extração de dados do arquivo............................................................................................................................... 85
9.2.5 – Fechamento do arquivo ........................................................................................................................................ 85
9.3 – Tipos de arquivos nativos Cobol .............................................................................................................. 85
9.4 – Definição de arquivos Cobol.................................................................................................................... 86
9.4.1 – Definição da estrutura do arquivo......................................................................................................................... 86
9.4.1.1 – Input-Output section. File-Control................................................................................................................ 86
9.4.1.2 - Cláusula SELECT ......................................................................................................................................... 87

FromSoft – Todos os direitos reservados – http://www.fromsoft.com.br Página 4


Curso de Cobol Básico

9.4.2 – Leiaute dos registros do arquivo........................................................................................................................... 89


9.4.2.1 – DATA DIVISION. FILE SECTION............................................................................................................. 89
9.4.2.2 - Cláusula FD................................................................................................................................................... 89
9.4.2.3 – Cláusula VALUE OF FILE-ID. .................................................................................................................... 90
9.4.2.4 – Uso de Copybooks (COPY) na definição de leiautes.................................................................................... 90
9.5 – Comandos para manuseio de arquivo (executar operações).................................................................... 91
9.5.1 – Comando OPEN................................................................................................................................................... 91
9.5.2 – Comando READ .................................................................................................................................................. 92
9.5.3 - Comando WRITE ................................................................................................................................................. 92
9.5.4 – Comando REWRITE............................................................................................................................................ 92
9.5.5 - Comando DELETE............................................................................................................................................... 92
9.5.6 – Comando CLOSE................................................................................................................................................. 93
9.6 - Eventos em manuseamento em arquivos. .................................................................................................. 93
Lição 9 – Exemplo 1.......................................................................................................................................... 93
Lição 9 - Exercícios........................................................................................................................................... 97
LIÇÃO 10 ................................................................................................................................................................. 99
LIÇÃO 10 - CONCEITOS ........................................................................................................................................... 99
10.1 - Trabalhando com arquivos: Arquivo SEQUENTIAL .............................................................................. 99
10.2 - Comandos usados em um arquivo SEQUENTIAL................................................................................... 99
10.2.1 - Modo de acesso................................................................................................................................................... 99
10.2.2 - O comando OPEN com cláusula INPUT ............................................................................................................ 99
10.2.3 - O comando OPEN com cláusula OUTPUT ........................................................................................................ 99
10.2.4 - O comando OPEN com cláusula EXTEND ........................................................................................................ 99
10.2.5 - O comando OPEN com cláusula I-O................................................................................................................... 99
10.2.6 – O comando READ com clausula AT END/NOT AT END ................................................................................ 99
10.3 - Demonstração de um arquivo SEQUENTIAL ......................................................................................... 99
10.4 - Como ler um arquivo SEQUENTIAL .................................................................................................... 100
Lição 10 – Exemplo 1 – Cadastro de Usuarios ............................................................................................... 101
Lição 10 – Exemplo 2 – Consulta de Usuarios presentes em Cadastro .......................................................... 107
Lição 10 – Exemplo 3 – Alteração de Usuarios presentes em Cadastro......................................................... 110
Lição 10 – Exercícios ...................................................................................................................................... 118
LIÇÃO 11 ............................................................................................................................................................... 120
LIÇÃO 11 - CONCEITOS ......................................................................................................................................... 120
11.1 - Trabalhando com arquivos: Arquivo LINE SEQUENTIAL .................................................................. 120
11.2 - Comandos usados em um arquivo LINE SEQUENTIAL....................................................................... 120
11.2.1 - Modo de acesso................................................................................................................................................. 120
11.2.2 - O comando OPEN com cláusula INPUT .......................................................................................................... 120
11.2.3 - O comando OPEN com cláusula OUTPUT ...................................................................................................... 120
11.2.4 - O comando OPEN com cláusula EXTEND ...................................................................................................... 120
11.2.5 - O comando OPEN com cláusula I-O................................................................................................................. 120
11.2.6 – O comando READ com clausula AT END/NOT AT END .............................................................................. 120
11.3 - Demonstração de um arquivo LINE SEQUENTIAL ............................................................................. 120
11.4 - Como ler um arquivo LINE SEQUENTIAL........................................................................................... 121
Lição 11 – Exemplo 1 – Cadastro de Usuários. .............................................................................................. 122
Lição 11 – Exemplo 2 – Consulta de Usuários. .............................................................................................. 129
Lição 11 – Exemplo 3 – Alteração de Usuários .............................................................................................. 132
Lição 11 - Exercícios....................................................................................................................................... 139
LIÇÃO 12 ............................................................................................................................................................... 141
LIÇÃO 12 - CONCEITOS ......................................................................................................................................... 141
12.1 - Trabalhando com arquivos: Arquivo RELATIVE.................................................................................. 141
12.1.1 - Modo de acesso................................................................................................................................................. 141
12.1.2 - Controle de acesso ............................................................................................................................................ 141
12.1.3 - Chave para acesso ............................................................................................................................................. 141
12.2 - Comandos usados em um arquivo RELATIVE ...................................................................................... 141
12.2.1 - O comando OPEN com cláusula INPUT .......................................................................................................... 141
12.2.2 - O comando OPEN com cláusula OUTPUT ....................................................................................... 141
12.2.3 - O comando OPEN com cláusula I-O................................................................................................................. 141
12.2.4 - O comando READ com cláusula NEXT ........................................................................................................... 142

FromSoft – Todos os direitos reservados – http://www.fromsoft.com.br Página 5


Curso de Cobol Básico

12.2.5 - Cláusula INVALID KEY.................................................................................................................................. 142


12.2.6 - Chaves Secundárias .......................................................................................................................................... 142
12.3 - Demonstração de um arquivo RELATIVE............................................................................................. 142
12.4 - Como ler um arquivo RELATIVE.......................................................................................................... 143
12.5 - Vantagens do arquivo relativo em relação aos arquivos Sequencial e Texto. ...................................... 144
Lição 12 – Exemplo 1 – Cadastro de Usuários ............................................................................................... 144
Lição 12 – Exemplo 2 – Consulta de Usuários presentes em Cadastro. ......................................................... 151
Lição 12 – Exemplo 3 – Alteração de Usuários presentes em Cadastro......................................................... 154
Lição 12 – Exemplo 4 – Exclusão de Usuários presentes em Cadastro. ......................................................... 161
Lição 12 - Exercícios....................................................................................................................................... 165
LIÇÃO 13 ............................................................................................................................................................... 166
LIÇÃO 13 - CONCEITOS ......................................................................................................................................... 166
13.1 - Trabalhando com arquivos: Arquivo Indexado..................................................................................... 166
13.1.1 - Modo de acesso................................................................................................................................................. 166
13.1.2 - Controle de acesso ............................................................................................................................................ 166
13.1.3 - Chave para acesso ............................................................................................................................................. 166
13.2 - Comandos usados em um arquivo INDEXED....................................................................................... 166
13.2.1 - O comando OPEN com cláusula INPUT .......................................................................................................... 166
13.2.2 - O comando OPEN com cláusula OUTPUT ...................................................................................................... 166
13.2.3 - O comando OPEN com cláusula I-O................................................................................................................. 166
13.2.4 - O comando READ com cláusula NEXT ........................................................................................................... 167
13.2.5 - Cláusula INVALID KEY.................................................................................................................................. 167
13.2.6 - Declaração da(s) chave(s): ................................................................................................................................ 167
13.2.7 - Chaves Secundárias .......................................................................................................................................... 167
13.2.8 – O comando START.......................................................................................................................................... 167
13.2.9 - Cláusula INVALID KEY (no START)............................................................................................................. 168
13.3 - Demonstração de um arquivo INDEXED ............................................................................................. 168
13.4 - Como ler um arquivo INDEXED........................................................................................................... 169
13.5 - Vantagens do arquivo relativo em relação aos arquivo Relativo.......................................................... 170
13.6 - Observações .......................................................................................................................................... 170
Lição 13 – Exemplo 1 – Cadastro de Usuarios. .............................................................................................. 170
Lição 13 – Exemplo 2 – Consulta de Usuarios presentes em Cadastro. ......................................................... 177
Lição 13 – Exemplo 3 – Alteração de Usuarios presentes em Cadastro......................................................... 180
Lição 13 – Exemplo 4 – Alteração de Usuarios presentes em Cadastro......................................................... 187
Lição 13 - Exercícios....................................................................................................................................... 192
LIÇÃO 14 ............................................................................................................................................................... 193
LIÇÃO 14 - CONCEITOS ......................................................................................................................................... 193
14.1 - Arquivo de relatório: imprimindo o que foi guardado.......................................................................... 193
14.2 – Declaração do arquivo de relatório ..................................................................................................... 193
14.3 – Declaração das linhas do relatório ...................................................................................................... 193
14.4 - Constante figurativa ALL...................................................................................................................... 193
14.5 – Impressão do relatório ......................................................................................................................... 194
Lição 14 – Exemplo 1 – Impressão de fichas .................................................................................................. 194
Lição 14 – Exemplo 2 – Impressão de lista ..................................................................................................... 199
Lição 14 - Exercícios....................................................................................................................................... 202
LIÇÃO 15 ............................................................................................................................................................... 204
LIÇÃO 15 - CONCEITOS ......................................................................................................................................... 204
Lição 15 – Comandos Avançados de programação ........................................................................................ 204
15.1 - Trabalhando com data do sistema com 8 dígitos (DDMMAAAA)......................................................... 204
Lição 15 – Exemplo 1 – Usando Function Current-Date................................................................................ 204
15.2 - Habilitando teclas especiais: setas ....................................................................................................... 204
15.3 - Rotinas Call-By-Number ....................................................................................................................... 204
15.3.1 – Rotina Call-By-Number – “AF”....................................................................................................................... 205
Lição 15 – Exemplo 2 – Usando o Call X”AF”............................................................................................... 205
Lição 15 – Exemplo 3– Usando setas através de Rotinas Call-By-Number .................................................... 205
15.3.2 - Rotina X”AF” ................................................................................................................................................... 207
15.4 - Ordenação de dados ............................................................................................................................. 209

FromSoft – Todos os direitos reservados – http://www.fromsoft.com.br Página 6


Curso de Cobol Básico

15.4.1 - Cláusula SD ...................................................................................................................................................... 209


15.4.2 - O comando SORT............................................................................................................................................. 209
15.4.3 - O comando RELEASE...................................................................................................................................... 209
15.4.4 - O comando RETURN ....................................................................................................................................... 210
Lição 15 – Exemplo 4 ...................................................................................................................................... 210
Lição 15 - Exercícios....................................................................................................................................... 213
SISNF...................................................................................................................................................................... 215
CONSTRUÇÃO DE UM APLICATIVO: CONTROLE E EMISSÃO DE NOTA FISCAL ......................................................... 215
Interface com o Usuário.................................................................................................................................. 216
Programação................................................................................................................................................... 216
Dicas ............................................................................................................................................................... 217
Criação das Pastas para o desenvolvimento do SISNF................................................................................... 218
Especificações para a criação dos programas................................................................................................ 218
Sisnf – Criação do Menu .................................................................................................................................220
Montagem dos Menus do Sistema de Notas Fiscais....................................................................................................... 220
Sisnfcli - Manutenção de Clientes ................................................................................................................... 230
Manuseamento do Programa .......................................................................................................................................... 231
Funcionamento do Programa.......................................................................................................................................... 231
Operações realizadas pelo SISNFCLI ............................................................................................................................ 232
Dicas .............................................................................................................................................................................. 235
Criando o Programa................................................................................................................................................... 235
Desenvolvendo .......................................................................................................................................................... 235
Dicas para desenvolver o programa........................................................................................................................... 235
Sisnfpro - Manutenção de Produtos ................................................................................................................ 237
Manuseamento do Programa .......................................................................................................................................... 237
Funcionamento do Programa.......................................................................................................................................... 238
Operações realizadas pelo SISNFPRO........................................................................................................................... 238
Sisnfnf - Manutenção de Notas Fiscais ........................................................................................................... 242
Manuseamento do Programa .......................................................................................................................................... 243
Funcionamento do Programa.......................................................................................................................................... 243
Operações realizadas pelo SISNFNF ............................................................................................................................. 244
Relgeral - Relatório Geral............................................................................................................................... 249
Relindiv - Relatório Individual........................................................................................................................ 250
Relpper - Relatório Por Período. .................................................................................................................... 252
Relpvend – Relatório por Venda. .................................................................................................................... 254
Sisnfsob - Sobre ............................................................................................................................................... 255

FromSoft – Todos os direitos reservados – http://www.fromsoft.com.br Página 7


Curso de Cobol Básico

Lição 1

Lição 1 - Conceitos

1.1 - Programação

Programar é descrever o que queremos que o computador faça e como ele deve proceder. É
organizar as tarefas que fazemos manualmente de modo que o computador possa executá-las de forma
mais rápida e repetitiva.

1.1.1. Diferenças entre Lógica e Programação

A diferença básica entre a Lógica de Programação e a Programação COBOL propriamente dita


é que a Lógica de Programação é uma linguagem de símbolos, que tem como objetivo auxiliar o
raciocínio do programador, para que quando ele começar a desenvolver o programa em uma linguagem,
já tenha definido o raciocínio de como o programa deverá proceder. Com uma linguagem, tudo irá
mudar, apenas o raciocínio irá permanecer igual. Você continuará a declarar variáveis, realizar laços de
repetição, realizar condições, chamar procedimentos e funções, criar estruturas escolha. Só que de um
modo diferente.

1.1.2 - Histórico do COBOL

Definição: Common Business Oriented Language - Linguagem Orientada para Negócios em Comum.

A Linguagem COBOL surgiu no ano de 1959, a partir de exigência do Pentágono americano em


relação aos vários fornecedores de computadores (IBM, BURROUGHS, RCA, UNIVAC, GE) para
continuarem a participar de licitações deveriam definir uma linguagem de programação comum a todos
e com sintaxe bastante próxima ao idioma inglês. Dessa forma, em agosto de 1961, surgiu a primeira
versão utilizável da linguagem COBOL, que é um acrônimo de COmmon Business Oriented Language,
ou seja, Linguagem Orientada para Negócios em Comum, possuindo um conjunto restrito de comandos
fáceis de utilizar por qualquer programador e de alta portabilidade (independente de máquina).
Uma das principais responsáveis pela ascensão da linguagem é Grace Murray Hopper, uma
oficial da marinha norte-americana. Ela é considerada a mãe do COBOL.

1.1.3 - Evolução – Perspectivas Tecnológicas.

As ferramentas atuais de desenvolvimento voltadas para a linguagem Cobol apresentam hoje o


que há de mais moderno: ambiente integrado de desenvolvimento, plataforma gráfica, desenvolvimento
visual, filosofia de projetos, integração com as melhores ferramentas de controle de fontes, ferrametas
CASE, geradores de relatórios e consultas.
Os compiladores permitem ao desenvolvedor construir programa no conceito procedural
tradicional, no conceito de orientação a eventos ou no que há de mais novo que é o conceito de
orientação a objetos.
Os produtos (programas) podem ser desenvolvidos para atender aos desafios atuais do
mercado: aplicações cliente-servidor, ambientes multi-plataforma, data-warehousing, ambientes de rede
homogêneas e/ou heterogêneas, portabilidade, uso de bancos de dados (SGBDs),
Internet/Intranet/Extranet, etc.

1.2 - Plataformas e Sistemas Operacionais

Os ambientes operacionais são classificados em dois tipos de plataforma: plataforma alta, cujos
computadores são denominados “mainframes” e baixa, os chamados “micro-computadores”. Além disso,
encontramos nesses equipamentos vários tipos de sistemas operacionais: Windows, DOS, Unix, Linux,
AIX, HP-UX, VM, OS/2, VMS, entre outros, que são programas que têm a função de controlar as várias
partes do equipamento (memória, discos, impressoras, drivers, etc.) e controlar também os programas
aplicativos que irão ser executados.

FromSoft – Todos os direitos reservados – http://www.fromsoft.com.br Página 8


Curso de Cobol Básico

1.2.1 - Dialetos do Cobol: Padrão ANSI

Uma das principais, talvez a principal vantagem que a COBOL trouxe foi uma padronização, ou
uniformização entre os fabricantes de computadores (Padrão ANSI). Antes da linguagem COBOL, se
uma empresa quisesse mudar de um computador de uma determinada marca para um de outra marca,
teria de re-escrever todos os seus programas. Com o advento da linguagem COBOL, a padronização
citada permitiu que qualquer programa escrito nessa linguagem fosse executado, com pequenas
alterações, em vários computadores diferentes.
A Linguagem COBOL possui diversos “dialetos” ou, em outras palavras, diversas versões,
praticamente compatíveis entre si, surgidas em decorrência das máquinas para as quais foram
projetadas. Assim temos, por exemplo, IBM VS COBOL, COBOL ANSI 74 e 85, MICROSOFT COBOL
5.0, MICROFOCUS COBOL, RM COBOL, POWERCOBOL, etc.

1.3 - Programa: Dados e Comandos

Definição de Programa: Seqüência lógica de instruções e comandos, em uma determinada


linguagem, conforme sua sintaxe e suas regras, visando atingir o objetivo final.
Para tanto, deve haver as entradas de informações ou dados, que serão submetidos a um
determinado procedimento ou processo para fornecerem outras informações ou dados como resultado.

1.4 - Programa-Fonte, Compilação e Linkedição

1.4.1 - Programa-Fonte

O Programa fonte é o arquivo aonde se escreve os comandos COBOL. Por padrão, deve-se ter
a extensão CBL ou COB.
PROG01.CBL.
PROG01.COB.

1.4.2 - Compilação

Para executar um programa criado com qualquer linguagem de programação, é necessário que
você faça o computador entender o que o programa está dizendo em suas linhas. O computador
entende apenas o que estiver escrito em binário. Mas então como passaremos nosso fonte COBOL
para binário? Para isso, existe o compilador, que irá transformar nosso código COBOL em código
binário.

Para se compilar um programa, deve-se indicar o comando do compilador seguido do nome do


programa.
COBOL NOME-DO-PROGRAMA;

Se você colocar o ponto-e-virgula, ele irá compilar com as propriedades padrão. Se você não colocar o
ponto-e-virgula, ele irá lhe perguntar as propriedades da compilação. São estas:

Object file-name: [.OBJ]: Nome do programa objeto a ser gerado


Source listing: [NUL] : Nome do arquivo de listagem do fonte,
normalmente usado para documentação.
Object listing: [NUL]: Nome do arquivo de listagem do objeto.

As indicações que tiverem a extensão NUL, vem de NULL (Nulo) significam que são opcionais, e a
indicação que tiver o atributo .OBJ, informa o arquivo resultante.

1.4.3 - Códigos gerados após a compilação:

Como falado acima, após a compilação é gerado um arquivo intermediário. Este arquivo intermediário,
pode ter as seguintes formas:

FromSoft – Todos os direitos reservados – http://www.fromsoft.com.br Página 9


Curso de Cobol Básico

OBJ – Objeto: o arquivo objeto é o arquivo mais simples de todos. O compilador apenas o transforma
em linguagem de máquina, Entretanto deve ser linkeditado (será ensinado posteriormente) para ser
usado.
COBOL NOME-DO-PROGRAMA;

LST – Listagem: o arquivo de listagem é um arquivo onde as linhas do fonte são numeradas e mostra
todo as ramificações que o seu programa está usando. Também mostra erros encontrados na
compilação, apresentando asteriscos e mensagens na linha do erro.
COBOL NOME-DO-PROGRAMA LIST(NOME-DO-PROGRAMA.LST);

IDY – Animação: o arquivo IDY é um arquivo específico para animação, pois ele é compilado com
parâmetros que identificam seções, procedimentos e variáveis do programa fonte a ser compilado. Ele é
usado apenas para quando se for animar um programa.
COBOL NOME-DO-PROGRAMA ANIM;

1.4.4 - Linkedição

Após a compilação do programa objeto (OBJ), devemos juntar a este arquivo algumas
bibliotecas do sistema operacional e outras específicas do COBOL, gerando um arquivo executável
(.EXE).
LINK PROGRAMA;

O Link se encarrega somente das bibliotecas do sistema operacional. Então devemos adicionar
algumas bibliotecas que serão usadas pelo programa COBOL, uma seguida da outra unidas através de
um mais “+” . Estas bibliotecas fazem parte de uma biblioteca mestre denominada Run-Time. Em alguns
dialetos do COBOL, o Run-time é cobrado em separado do compilador COBOL, pois ele faz funções
especiais que não fazem parte do padrão ANSI. As bibliotecas que serão informadas aqui serão as
usadas no curso básico, embora existem outras bibliotecas, e são ensinadas em cursos mais
avançados.

ADIS - Modulo principal de suporte para ACCEPT e DISPLAY


ADISINIT - Módulo de inicialização, usado somente quando a sintaxe do primeiro ACCEPT
ou DISPLAY for ativada.
ADISKEY - Módulo de manuseamento de teclado
ADISDYNA - Módulo da sintaxe do ACCEPT e do DISPLAY com respeito a atributos dinâmicos
EXTFH - Necessário para uso de arquivos indexados.
COBINTFN - Necessário para uso de funções intrínsecas (diretamente da memória).
LINK PROGRAMA+ADIS+ADISKEY+ADISINIT+ADISDYNA+EXTFH+COBINTFN;

1.4.5 - Configurações do Compilador para o ambiente de desenvolvimento.

Para que a execução dos programas gerados pelo compilador sejam feitas com sucesso
quando você for enviar sua aplicação para uso, deve-se ter algumas bibliotecas em seu diretório
corrente para que ele possa fazer todas as funções necessárias. São os seguintes arquivos:

ADISCTRL – Arquivo responsável pela configuração de ACCEPT e DISPLAY.


COBLIB.DLE – Arquivo responsável pela configuração de bibliotecas intrínsecas usadas pelos
programas COBOL.
O arquivo ADISCTRL, fica presente no diretório C:\COBOL\BIN, mas o mesmo deve ser configurado.
Dentro do diretório C:\COBOL\BIN possui também o ADISCF, que é o utilitário responsável pela
configuração do ADISCTRL.

O arquivo COBLIB.DLE fica presente no diretorio C:\COBOL\BIN e o mesmo não precisa ser
configurado.

FromSoft – Todos os direitos reservados – http://www.fromsoft.com.br Página 10


Curso de Cobol Básico

1.5 - Edição: Linguagem de Programação, Estrutura, Regras de Escrita

Em qualquer língua falada que se utilize, estamos presos à sua sintaxe, ortografia e regras para
sermos entendidos por outras pessoas. Uma linguagem de computador não foge disso. Forçosamente
você tem de se sujeitar às regras da linguagem que deseja utilizar como forma de expressar seu
objetivo, para que a máquina execute exatamente o que você quer.

1.5.1 - ESTRUTURA

Além das regras de escrita, normalmente um programa em COBOL é dividido em quatro partes:

1.5.1.1 - IDENTIFICATION DIVISION

Divisão de identificação do programa. Aqui é informado todos os parâmetros de documentação


do programa, como nome, autor, data de criação, data de compilação, instalação e comentários.

1.5.1.2 - ENVIRONMENT DIVISION

Relaciona o programa ao equipamento onde ele está rodando. Aqui é informado todos os
parametros de identificação do uso do programa fonte com o computador, como tipo de ponto decimal,
tipo de computador, seção de identificação de arquivos, etc.

1.5.1.3 - DATA DIVISION

Nesta divisão, composta de várias seções, são descritos todos os dados envolvidos no
processamento do programa. Aqui é informado todos os dados usados no programa e todos os dados
usados nos arquivos declarados na environment division.

1.5.1.4 - PROCEDURE DIVISION

Onde são colocados todos os procedimentos necessários para especificar as operações a


serem executadas com os dados descritos na DATA DIVISION. Aqui é informado todos os
procedimentos que o programa irá fazer. Desde a primeira exibição em tela até a última, tanto quanto os
outros comandos.

1.5.2 - Seções e Parágrafos

Cada divisão de um programa COBOL é organizada em seções, que por sua vez são divididas
em parágrafos, que são constituídos por sentenças.
Uma linha de programa COBOL tradicionalmente é composta por 80 colunas, divididas da
seguinte maneira:
Colunas 1 a 6.......: Números (seqüenciais) das linhas. Somente um número indicativo,
durante a compilação, para orientar as mensagens de erro do programa. Você não precisa digitar esses
números - eles são gerados durante a compilação.
Coluna 7..............: Nesta coluna são aceitos somente alguns caracteres que são conhecidos como
indicadores de área.
Exemplos:
* - Indica ao compilador que a linha em questão é linha de comentários. Este indicador pode ocorrer em
qualquer divisão do programa.
- - Indica que o conteúdo desta linha é continuação da linha anterior.
/ - Faz com que, caso haja impressão do programa (durante a compilação), a impressora salte para a
próxima página.
Colunas 8 a 11.....: identificam uma área referenciada como Área A.
Exemplos:
- Divisões do COBOL (Identification Division/ Environment Division, etc).
- Declaração de Variáveis (Níveis 66, 77, 78, 88, 01).
- Procedure Names.

FromSoft – Todos os direitos reservados – http://www.fromsoft.com.br Página 11


Curso de Cobol Básico

Obrigatoriamente os nomes de divisões, seções e parágrafos devem ser iniciados na


área A, seguidos por um ponto.
Indicadores de níveis FD, SD, CD, 01, 77 obrigatoriamente iniciam na área A seguidos pela
respectiva descrição na área B.
Exemplos:
- Todos os procedimentos usados na programação COBOL.
Colunas 12 a 72...: identificam uma área referenciada como Área B.
Exemplos:
− Comandos Cobol
Colunas 73 a 80...: área para preenchimento com comentários.
Exemplos:
- Comentários
Obs.: a partir do padrão ANSI/97 foi abolida esta estruturação de colunas, passando o programa Cobol
a ter formato livre.

1.5.3 – Estrutura da Data Division

A Data Division é dividida em seções, nas quais os dados são declarados com objetivos pré-
definidos.

1.5.3.1 - File Section

Seção que trata da declaração de dados em arquivos, suas características e estruturas.

1.5.3.2 - Working-Storage Section

Seção usada para definir variáveis gerais de trabalho.

1.5.3.3 - Linkage Section

Onde são declaradas as variáveis que são passadas entre programas, de uso comum entre
eles.

1.5.3.4 - Screen Section

Reune as variáveis e constantes a serem apresentadas em tela, de forma estruturada.

1.5.3.5 - Report Section

Onde são declaradas as estruturas de relatórios.

1.5.4 – Declaração de Dados: Constantes e Variáveis

• Constantes: são dados que não variam. Podem ser numéricas, alfanuméricas ou alfabéticas.
• Variáveis: também denominadas de campos, são dados que na maioria das vezes irão mudar seu
conteúdo, podendo ser numéricas ou alfanuméricas.

1.5.4.1 – Estrutura da Declaração

Na declaração de uma variável ou constante na Data Division, utilizamos a seguinte estrutura


básica:
• Número de Nivel
• Nome da Variável
• PICTURE ou PIC
• Tipo da Variável / Constante
• Tamanho

a) Nivel da Variável

FromSoft – Todos os direitos reservados – http://www.fromsoft.com.br Página 12


Curso de Cobol Básico

O Nivel permite individualizar ou identificar o agrupamento de variáveis e constantes.

Nível 01: define campo individual (Item Elementar) ou um grupo de campos, quando então é
denominado Item de Grupo. Um Subnível da variável pode ser indicado como um valor subsequente do
mesmo, podendo variar de 02 até 49.
Nível 66: Nivel que reagrupa itens de dados, dando-lhes um novo nome
Nível 77: Nível que define uma variável individual, também denominado Item Elementar.
Nível 88: Nível que permite associar um nome a um valor ou conjunto de valores.

b) Nome da Variável

Identificação da variável. Na declaração do nome o programador deve procurar um nome


intuitivo (explicativo), o que facilita em muito a leitura e manutenção do programa. Na declaração do
nome devem ser observadas as sequintes regras:
• Utilizar apenas letras, números e o caracter “-“ (traço)
• Obrigatoriamente o nome deve começar com uma letra
• O nome deve ter um máximo de 30 caracteres
• Não usar acentos ou espaços (usar o “-“ para ligar palavras que compõem o nome).

c) PICTURE ou PIC

Palavras reservadas, sendo de uso obrigatório na declaração.

d) Tipo

Determina o tipo da variável /constante, ou seja, como deve ser considerada para o seu uso em
comandos. Os tipos básicos são:

• 9 : define uma variável numérica. Pode conter apenas números.


• X : define uma variável alfanumérica. Pode conter letras, números e caracteres especiais (símbolos,
sinais, etc.)

e) Tamanho

Além de informar o tipo de variável que está sendo declarada, deve-se também informar o
tamanho da mesma, podento-se declarar o tamanho (numero de repetições) entre parênteses ou
simplesmente repetir o tipo tantas vezes quanto seja o tamanho.

Parei aqui

1.5.3 - Declaração de variáveis

Para se declarar variáveis, informa-se:


a) O nível da variável, que pode ser:

66 - Variável que reagrupa itens de dados.


66 NOME-CLIENTE RENAMES NOME.
77 - Variáveis simples, com dados normais.
77 NOME PIC X(50).
78 - Variável que se associa a um valor.
78 NOME VALUE “N”.
01 - Variável grupo. Pode armazenar uma série de outras variáveis. E as mesmas são consideradas
itens de um grupo. Estes ítens estão em um subnível, do grupo, que possui um número subsequente ao
primeiro. O Nível da variável grupo é sempre 01 ???, mas suas variáveis, possuem um numero
subsequente a ele (02, 03, 04, ..., até 49), e estes podem variar de acordo com o desenvolvimento do
programador.
01 ENDERECO.
03 RUA PIC X(050) VALUE SPACES.

FromSoft – Todos os direitos reservados – http://www.fromsoft.com.br Página 13


Curso de Cobol Básico

01 REGISTRO.
03 NOME PIC X(050) VALUE SPACES.
03 ENDERECO.
05 RUA PIC X(050) VALUE SPACES.
05 NUMERO PIC 9(010) VALUE ZEROS.

88 - Variável que associa um nome a um valor ou conjunto de valores. Deve estar declarada sempre
dentro de uma variável grupo.
01 FILLER PIC X(001) VALUE SPACES.
88 SEXO-MASCULINO VALUE “M”.

Detalhe Importante: Podemos ter variáveis grupo dentro de uma variável grupo. No caso do exemplo
acima as variáveis de nível 03 são diretamente declaradas para a variável grupo Registro. Enquanto que
as variáveis de nivel 05 são diretamente declaradas para a variável grupo Endereço, que,
consequentemente, é diretamente declarada para a variável grupo Registro.

FromSoft – Todos os direitos reservados – http://www.fromsoft.com.br Página 14


Curso de Cobol Básico

b) O Nome da variável:
Como declarar uma variável no cobol:
1. Sem acentuação
2. Sem espaços
3. Sem caracteres especiais.
77 NOME-USUARIO PIC X(50).
77 ENDERECO PIC 9(15).

c) O tipo da variável ou sua PICTURE.


Picture significa a imagem da variável na memória.
X - String ou Alfanumérica.
PIC X(2) ou PIC XX
A - Alfabética ou Caracter.
PIC A(2) ou PIC AA
( A define uma variável alfabética )
9 - Numérica ou inteira.
PIC 9(02) ou PIC 99.
Z - Máscara de Edição (veremos sobre mascaras de edição mais adiante).
PIC ZZ/ZZ/ZZZZ ou PIC ZZZZZZZZ ou PIC ZZZ,ZZZ,ZZZ,99
(Z indica um campo numérico mas com característica de supressão de zeros à esquerda
(Mascara de Edição).)
S - Possui sinal.
PIC S9(05)
Detalhe Importante – Numa máscara de edição, pode-se também inserir sinal, no início ou final
da PIC. Então, quando o valor atribuído a variável for negativo, ele irá mostrar o sinal de
negativo, quando não for ele não mostra nenhum sinal.
PIC ZZ.ZZ9-.
V - Determina a parte decimal de uma variável de valor.
PIC S(05)V99.
$ - Determina símbolo monetário.
PIC $S(05)V99.

d) O tamanho da variável:
• O mesmo deve estar entre parênteses, para que seja identificado como o tamanho da
variável.
77 NOME-USUARIO PIC X(50)

e) Atributos da picture

Os atributos da variável declarada podem ser dos seguintes tipos:

- Valor inicial de um campo: Com a cláusula VALUE, podemos declarar um campo com um valor
inicial, como por exemplo declarar um campo numérico com zeros ou um campo alfabético em
branco.
- Constantes Figurativas.
- Redefinição de Variáveis.
- Mudança de nome de Variáveis.

e) Parâmetros opcionais:

- VALUE: Permite atribuir um valor inicial para variável.


77 NOME-EMPRESA PIC X(50) VALUE “FromSoft”.
- FROM: Permite a associação de variáveis para carga automática do valor de uma na outra..
77 NOME-EMPRESA PIC X(50) VALUE “FromSoft”.
77 TELA-NOME-EMPRESA PIC X(50) FROM NOME-EMPRESA.
- TO: Permite a associação de variáveis para guarda automática do valor de uma na outra.
77 TELA-NOME-EMPRESA PIC X(50) TO NOME-EMPRESA.
77 NOME-EMPRESA PIC X(50).
- USING: Permite a associação de variáveis para carga/guarda automática do valor de uma na outra..
77 NOME-EMPRESA PIC X(50).
77 EMPRESA PIC X(50) USING NOME-EMPRESA.
- RENAMES: Permite a mudança da variável para outro nome.

FromSoft – Todos os direitos reservados – http://www.fromsoft.com.br Página 15


Curso de Cobol Básico

66 NOME-EMPRESA RENAMES NOME.


- REDEFINES: Permite a redefinição do valor da variável por um valor de outra variável.
01 DATA-MES-REDEFINIDA PIC ZZ/ZZ/ZZZZ REDEFINES DATA-MES.
01 DATA-MES.
03 DATA-DIA. PIC 99 VALUE ZEROS.
03 DATA-MES PIC 99 VALUE ZEROS.
03 ANO-MES PIC 9999 VALUE ZEROS.

01 SALARIO PIC 9(11) VALUE ZEROS.


01 SALARIO-REDEFINIDO PIC ZZZ.ZZZ.ZZZ,99 REDEFINES SALARIO.
- COMP: Define uma variável binária. Pode ser também definida como BINARY.
77 DATA-SISTEMA PIC X(08) COMP.
77 DATA-SISTEMA PIC X(08) BINARY.

- COMP-3: Define uma variável compactada.


77 DATA-COMPACTADA PIC X(08) COMP-3.
- COMP-5: Define uma variável destinada para melhor performance em dados aritiméticos.
77 TIMEOUT PIC X(05) COMP-5.

1.5.4 - Constantes figurativas

Conceito: a linguagem Cobol possui algumas constantes especiais, que podem ser utilizadas na
declaração de variáveis na DATA DIVISION em conjunto com a cláusula VALUE ou como parte de
comandos declarados na PROCEDURE DIVISION (vide o item Constantes Figurativas na apostila Cobol
Básico). As principais constantes figurativas são:

Zeros: Atribui o valor para a variável igual a zero


Spaces: Atribui o valor para a variável igual a espaços
Low-Value: Atribui o menor valor possível para a variável
High-Value: Atribui o maior valor possível para a variável

77 ULTIMO-CODIGO PIC XX VALUE HIGH-VALUE.


77 PRIMEIRO-CODIGO PIC XX VALUE LOW-VALUE.
77 CONTADOR PIC 99 VALUE ZEROS.
77 NOME PIC XX VALUE SPACES.

1.5.5 – Inicialização de variáveis.

A Inicialização de variáveis é muito importante no desenvolvimento de um sistema, pois irá


mostrar o que há nas variáveis. Para inicializar uma variável basta em seu atributo value, inserir o
parametro de zeros para campos numéricos ou então spaces para campos alfanuméricos/alfabéticos.
Caso você não inicie as variáveis, pode dar erros do tipo 163 (Illegal caracter in numeric field),
principalmente em máscaras de edição.

77 NOME PIC XX VALUE SPACES.

1.5.6 - Cláusula FILLER

Conceito: Podemos declarar uma variável genérica, se chamada FILLER. O FILLER é um


preenchimento declarado na working-storage section que você cria para marcar um determinado
espaço, ou então quando se quer mostrar apenas alguma coisa em tela ou relatório.
01 DATA-MES PIC 9(08) VALUE ZEROS.
01 FILLER REDEFINES DATA-MES PIC 99/99/9999.

1.6 - Comandos

1.6.1 - DISPLAY

Semelhante ao comando TELA na lógica de programação, no Cobol usamos o comando


DISPLAY para mostrar dados na tela.:
DISPLAY NOME
DISPLAY "Nome:"

FromSoft – Todos os direitos reservados – http://www.fromsoft.com.br Página 16


Curso de Cobol Básico

Onde:
DISPLAY : Comando para mostrar valores.
NOME : Variável.
"Nome" : Valor

FromSoft – Todos os direitos reservados – http://www.fromsoft.com.br Página 17


Curso de Cobol Básico

1.6.2 - ACCEPT

Semelhante ao comando TECLADO na lógica de programação, no Cobol usamos o comando


ACCEPT para receber dados do usuário, via teclado:
ACCEPT NOME

Onde:
ACCEPT : Comando para receber valores pelo teclado.
NOME : Variável.

1.6.3 - STOP RUN

Semelhante ao comando FIM na lógica de programação, o STOP RUN é usado para parar a
execução do programa. No final de cada programa, deve-se inserir o comando STOP RUN.
STOP RUN.

Lição 1 – Exemplo 1

000010 IDENTIFICATION DIVISION.


000020 PROGRAM-ID. EXEMPLO.
000030*Identificacao do programa
000040 ENVIRONMENT DIVISION.
000050*Identificacao do computador.
000060 DATA DIVISION.
000070 WORKING-STORAGE SECTION.
000080*Divisao Responsavel pela declaracao de Variaveis.
000090 77 NOME PIC X(30) VALUE SPACES. Var.Nome.
000100 77 ENDERECO PIC X(50) VALUE SPACES. Var.End.
000110 77 CIDADE PIC X(30) VALUE SPACES. Var.Cid.
000120 77 ESTADO PIC AA VALUE SPACES. Var.Cep.
000130 01 CEP.
000140 03 CEP1 PIC 9(05) VALUE ZEROS.
000150 03 CEP2 PIC 999 VALUE ZEROS.
000160 PROCEDURE DIVISION.
000170*Divisao Responsavel pela declaracao de Procedimentos.
000180 DISPLAY "Este e o nosso programa principal, veja que
000200- "estas linhas nao tera aspas pois ela tem
000210- "continuacao e indica-se na coluna 7 com o
000220- "hifen (-)".
000230 DISPLAY "Nome: ".
000240 DISPLAY "Endereco: ".
000250 DISPLAY "Cidade: ".
000260 DISPLAY "Estado: ".
000270 DISPLAY "Cep: -".
000280 ACCEPT NOME.
000290 ACCEPT ENDERECO.
000300 ACCEPT CIDADE.
000310 ACCEPT ESTADO.
000320 ACCEPT CEP1.
000330 ACCEPT CEP2.
000340 STOP RUN.

Lição 1 - Exercícios

1. Crie o algoritmo de um programa (usar um editor de texto qualquer) com nome PROG01.TXT que
solicite na tela: nome, endereço, cidade, estado e cep, conforme exemplo acima;

2. Edite um programa (arquivo) com nome PROG01.CBL codificando em Cobol o algoritmo criado,
conforme exemplo acima;

3. Compile este programa com a seguinte linha de comando no DOS:


COBOL PROG01;

Caso apresente erros (mensagem “checking complete with errors”), repita o item 1 (verificando os
erros) e o item 2 até que a mensagem seja “checking complete with no errors”. Recorra aos

FromSoft – Todos os direitos reservados – http://www.fromsoft.com.br Página 18


Curso de Cobol Básico

conceitos dessa lição e à apostila Cobol Básico caso tenha dúvidas sobre as definições e
comandos;

4. Linkedite este programa para gerar o executável (.EXE) com a seguinte linha de comando no DOS:
LINK PROG01 + ADIS + ADISKEY + ADISDYNA + ADISINIT;

5. Execute o programa com a seguinte linha de comando no DOS:


PROG01

FromSoft – Todos os direitos reservados – http://www.fromsoft.com.br Página 19


Curso de Cobol Básico

Lição 2

Lição 2 - Conceitos

2.1 - ACCEPT (avançados)

Conceito: Nas lição anterior aprendemos os comandos do ACCEPT e do DISPLAY. Agora iremos
aprender comandos avançados, para que possamos utilizá-los melhor.

1º Formato ACCEPT: Determinação de linha e coluna para entrada de dados.

No ambiente caracter, o limite de tela para largura é de 80 colunas e para altura é de 25 linhas. Então,
para determinarmos qual a linha e a coluna que podemos fazer a entrada de dados, indicamos o
parametro AT, seguido da linha e da coluna.

WORKING-STORAGE SECTION.
77 NOME PIC X(30) VALUE SPACES.

PROCEDURE DIVISION.
ACCEPT NOME AT 1015.
STOP RUN.

Também podemos substituir o valor da linha e da coluna por uma variável grupo.

WORKING-STORAGE SECTION.
77 NOME PIC X(30) VALUE SPACES.
01 POSICAO.
03 LINHA PIC 9(02) VALUE 10.
03 COLUNA PIC 9(02) VALUE 15.

PROCEDURE DIVISION.
ACCEPT NOME AT POSICAO.
STOP RUN.

2º Formato ACCEPT: Entrada de dados via teclado com opções mais elaboradas.

Estes são os atributos mais usados. Consulte a apostila de comandos para saber mais comandos:

AUTO: muda de campo automaticamente.


PROMPT: oferece uma linha de prompt, do início ao final do campo. É usado para definir visualmente o
tamanho do campo.
UPPER: para o usuário informar apenas palavras maiúsculas.
NO-ECHO: ao se digitar algo no campo, não mostra os caracteres na tela e sim, asteriscos. É muito
usada em campos para digitar senhas.
BACKGROUND-COLOR: cor de fundo.
FOREGROUND-COLOR: cor da letra.
BLINK: Faz o lugar selecionado ficar “piscando”

Lista de cores: (foreground-color e background-color):


0 - Preto 1 - Azul 2 - Verde 3 - Cyan
4 - Vermelho 5 - Magenta 6 - Marrom 7 - Branco

WORKING-STORAGE SECTION.
77 NOME PIC X(30) VALUE SPACES.
01 POSICAO.
03 LINHA PIC 9(02) VALUE 10.
03 COLUNA PIC 9(02) VALUE 15.

PROCEDURE DIVISION.
ACCEPT NOME AT 1015 WITH AUTO PROMPT UPPER BACKGROUND-COLOR 0
FOREGROUND-COLOR 7.
STOP RUN.

FromSoft – Todos os direitos reservados – http://www.fromsoft.com.br Página 20


Curso de Cobol Básico

3º Formato ACCEPT: Torna disponível alguns dados fornecidos pelo sistema operacional:

ACCEPT <Data-Sistema> FROM TIME. (pega a hora do sistema operacional)


ACCEPT <Hora-Sistema> FROM DATE. (pega a data do sistema operacional)

Detalhe Importante: O padrão americano de datas é invertido em relação ao brasileiro. Portanto,


quando for usar a data e/ou hora do sistema operacional, as mesmas virão invertidas. O exemplo a
seguir mostra como usar a data do sistema operacional.

Para trabalhar a data do sistema operacional:


WORKING-STORAGE SECTION.
01 DATA-SISTEMA.
03 ANO-SISTEMA PIC 9(02).
03 MES-SISTEMA PIC 9(02).
03 DIA-SISTEMA PIC 9(02).

PROCEDURE DIVISION.
ACCEPT DATA-SISTEMA FROM DATE.
DISPLAY DIA-SISTEMA AT 1015.
DISPLAY "/" AT 1017.
DISPLAY MES-SISTEMA AT 1018.
DISPLAY "/" AT 1020.
DISPLAY ANO-SISTEMA AT 1021.
STOP RUN.

Observações:
• Repare que a variável grupo está sendo declarada invertida, para que, quando você for usar o
ACCEPT FROM DATE, ele já receber os campos nos lugares certos. Depois é só dar o display nas
variáveis, como no exemplo.
• Repare também que este comando é para compor variáveis com o ano de dois dígitos, brevemente
iremos aprender uma função para buscar o ano com quatro dígitos.

Para trabalhar a hora do sistema operacional:

WORKING-STORAGE SECTION.
01 HORA-SISTEMA.
03 HORA PIC 9(02).
03 MINUTO PIC 9(02).

PROCEDURE DIVISION.
ACCEPT HORA-SISTEMA FROM TIME.
DISPLAY HORA AT 1215
DISPLAY ":" AT 1217
DISPLAY MINUTO AT 1218.
STOP RUN.

4º Formato ACCEPT: Entrada de dados via teclado em itens definidos na SCREEN SECTION.
Veremos mais detalhes mais adiante, no capítulo 4.

WORKING-STORAGE SECTION.
77 ARQUIVO-NOME PIC X(30) VALUE SPACES.
SCREEN SECTION.
01 TELA-CADASTRO.
03 BLANK SCREEN.
03 LINE 10 COLUMN 15 VALUE "Tela-Cadastro"
BACKGROUND-COLOR 0 FOREGROUND-COLOR 7.
03 TELA-NOME PIC X(30) LINE 10 COLUMN 30
USING ARQUIVO-NOME.

PROCEDURE DIVISION.
DISPLAY TELA-CADASTRO.
ACCEPT TELA-CADASTRO ON EXCEPTION GO TO FIM.
FIM.
STOP RUN.

FromSoft – Todos os direitos reservados – http://www.fromsoft.com.br Página 21


Curso de Cobol Básico

5º Formato ACCEPT: Para uso de teclas de função. Veremos mais detalhes mais adiante, no capitulo
3.

WORKING-STORAGE SECTION.
77 NOME PIC X(30) VALUE SPACES.
77 TECLA PIC XX VALUE SPACES.
77 PARA-TELA PIC X VALUE SPACES.

PROCEDURE DIVISION.
PEGA-NOME.
ACCEPT NOME AT 1015 WITH AUTO UPPER PROMPT.
ACCEPT TECLA FROM ESCAPE KEY
IF TECLA EQUAL 01
THEN
GO TO FIM
END-IF
IF NOME EQUAL SPACES
THEN
DISPLAY "Nome Invalido" AT 2402
ACCEPT PARA-TELA AT 2479 WITH AUTO NO-ECHO
GO TO PEGA-NOME
END-IF.
FIM.
STOP RUN.

2.2 - DISPLAY (avancados)

1º Formato DISPLAY: Determinação de linha e coluna para saida de dados.

Semelhante ao ACCEPT, para determinarmos qual a linha e a coluna que podemos fazer a saida de
dados, indicamos o parametro AT, seguido da linha e da coluna.

WORKING-STORAGE SECTION.
77 NOME PIC X(30) VALUE "Curso de COBOL".

PROCEDURE DIVISION.
DISPLAY NOME AT 1015.
STOP RUN.

Também podemos substituir o valor da linha e da coluna por uma variável grupo.

WORKING-STORAGE SECTION.
77 NOME PIC X(30) VALUE "Curso de COBOL".
01 POSICAO.
03 LINHA PIC 9(02) VALUE 10.
03 COLUNA PIC 9(02) VALUE 15.

PROCEDURE DIVISION.
DISPLAY NOME AT POSICAO.
STOP RUN.

2º Formato DISPLAY: Exibe na tela informações com opções mais elaboradas.

WORKING-STORAGE SECTION.
77 NOME PIC X(30) VALUE "Curso de COBOL".

PROCEDURE DIVISION.
DISPLAY NOME AT 1015 WITH PROMPT BACKGROUND-COLOR 0
FOREGROUND-COLOR 7 BLINK.
STOP RUN.

Estes são os atributos mais usados. Consulte a apostila de comandos para saber mais comandos.

BACKGROUND-COLOR: cor de fundo.


FOREGROUND-COLOR: cor da letra:
BLINK: Faz o lugar selecionado ficar “piscando”
ERASE- Faz a limpeza da tela, de acordo com os seguintes atributos:

FromSoft – Todos os direitos reservados – http://www.fromsoft.com.br Página 22


Curso de Cobol Básico

EOL – End of Line. – Limpa campos até o final da linha


EOS - End of Screen – Limpa campos até o final da tela.

Exemplo de EOS.

WORKING-STORAGE SECTION.
77 NOME PIC X(30) VALUE "Curso de COBOL".

PROCEDURE DIVISION.
DISPLAY " " AT 0101 WITH ERASE EOS BACKGROUND-COLOR 1
FOREGROUND-COLOR 7.
DISPLAY NOME AT 1015 WITH AUTO PROMPT BACKGROUND-COLOR 0
FOREGROUND-COLOR 7 BLINK.
STOP RUN.

Exemplo de EOL.

WORKING-STORAGE SECTION.
77 NOME PIC X(30) VALUE "Curso de COBOL".

PROCEDURE DIVISION.
DISPLAY " " AT 0101 WITH ERASE EOL BACKGROUND-COLOR 1
FOREGROUND-COLOR 7
DISPLAY NOME AT 1015 WITH AUTO PROMPT BACKGROUND-COLOR 0
FOREGROUND-COLOR 7 BLINK.
STOP RUN.

Lista de cores: (foreground-color e background-color):


0 - Preto 1 - Azul 2 - Verde 3 - Cyan
4 - Vermelho 5 - Magenta 6 - Marrom 7 - Branco

3º Formato DISPLAY: Exibe na tela informações definidas na SCREEN SECTION (onde o nome
da tela será informado como um campo grupo na Screen Section). Veremos detalhes mais adiante
na lição 4.
WORKING-STORAGE SECTION.
77 ARQUIVO-NOME PIC X(30) VALUE SPACES.
SCREEN SECTION.
01 TELA-CADASTRO.
03 BLANK SCREEN.
03 LINE 10 COLUMN 15 VALUE "Tela-Cadastro"
BACKGROUND-COLOR 0 FOREGROUND-COLOR 7.

PROCEDURE DIVISION.
DISPLAY TELA-CADASTRO
STOP RUN.

FromSoft – Todos os direitos reservados – http://www.fromsoft.com.br Página 23


Curso de Cobol Básico

2.3 - Comando COPY

Conceito: este comando nos permite utilizar no nosso programa um trecho de código que esteja em
outro arquivo físico. É muito comum utilizarmos o COPY quando temos um código que será usado por
vários programas, evitando-se que tenhamos que escrever o mesmo código em todos eles. Este tipo de
arquivo é também denominado copybook. Se você compilar e rodar este programa, não verá nenhuma
diferença, então gere uma compilação com atributo de lista e verá a diferença.

IDENTIFICATION DIVISION.
PROGRAM-ID. L02EX14.
AUTHOR. FROMSOFT.

COPY "COMENTA.TXT".

PROCEDURE DIVISION.
STOP RUN.

Lição 2 - Exercícios

1 - A partir do programa PROG01.CBL, criar o PROG02.CBL e nele alterar para que o ACCEPT e
DISPLAY sejam determinados via linha / coluna.

2 - A partir do programa PROG02.CBL, criar o PROG03.CBL e nele alterar para que o ACCEPT e
DISPLAY tenham preenchimentos de tela.

a) Para o ACCEPT: Atributos, AUTO (Em todos os campos), UPPER (Nas variáveis
alfanuméricas/alfabéticas), BLINK (No nome e na cidade), PROMPT (Nas variáveis alfanuméricas).
b) Para o DISPLAY: Atributos, BACKGROUND-COLOR (Com cor Azul), FOREGROUND-COLOR(Com
cor Branca), ERASE (Parametro EOS, antes do primeiro ACCEPT).

3 - Criar o programa PROG04.CBL e nele fazer a exibição da data e da hora do sistema.

4 - Criar o programa PROG05.CBL e nele fazer o uso do COPY com o arquivo comenta.txt. No arquivo
comenta.txt coloque os dados que se pede.

FromSoft – Todos os direitos reservados – http://www.fromsoft.com.br Página 24


Curso de Cobol Básico

Lição 3

Lição 3 - Conceitos

3.1 - Fluxos de Controle

3.1.1 - Comando condicional IF

Conceito: Semelhante ao comando SE da lógica de programação, podemos ter comandos na


procedure que só serão executados se for satisfeita ou não a condição indicada numa cláusula IF. Esse
comando avalia uma condição existente em sua sintaxe e faz com que o programa execute uma
determinada ação dependendo do resultado dessa avaliação. Em outras palavras, podemos dizer que
se uma condição for verdadeira, executa uma alternativa, ou então, executa outra alternativa. END-IF,
ou um ponto fecham a condição. Podemos ter também IF aninhados, ou seja, um IF dentro de outro. O
THEN é equivalente ao simbolo ENTAO, que usamos na lógica de programação e o mesmo é
facultativo.
WORKING-STORAGE SECTION.
77 OPCAO PIC X VALUE SPACES.
77 TECLA PIC XX VALUE SPACES.
77 PARA-TELA PIC X VALUE SPACES.

PROCEDURE DIVISION.
INICIO.
DISPLAY "DIGITE UMA LETRA (Aa - Gg)" AT 1015
ACCEPT OPCAO AT 1041 WITH AUTO PROMPT
ACCEPT TECLA FROM ESCAPE KEY
IF TECLA EQUAL "01"
THEN
GO TO FIM
END-IF
IF OPCAO = "a"
THEN
IF OPCAO <> "A"
THEN
DISPLAY "OPCAO DIFERENTE DE A, PRESSIONE UMA TECLA"
AT 1215
ACCEPT PARA-TELA AT 2479 WITH AUTO NO-ECHO
GO TO INICIO
END-IF
END-IF.

IF OPCAO = "b"
THEN
DISPLAY "OPCAO IGUAL A b, PRESSIONE UMA TECLA" AT 1215
ACCEPT PARA-TELA AT 2479 WITH AUTO NO-ECHO
GO TO INICIO
END-IF.

IF OPCAO EQUAL "B"


THEN
DISPLAY "OPCAO IGUAL A B, PRESSIONE UMA TECLA" AT 1215
ACCEPT PARA-TELA AT 2479 WITH AUTO NO-ECHO
GO TO INICIO
ELSE
CONTINUE
END-IF.

IF OPCAO < "D"


THEN
DISPLAY "OPCAO MENOR QUE D, PRESSIONE UMA TECLA" AT 1215
ACCEPT PARA-TELA AT 2479 WITH AUTO NO-ECHO
GO TO INICIO
END-IF

IF OPCAO LESS "d"


THEN
DISPLAY "OPCAO MENOR QUE d, PRESSIONE UMA TECLA" AT 1215
ACCEPT PARA-TELA AT 2479 WITH AUTO NO-ECHO
GO TO INICIO

FromSoft – Todos os direitos reservados – http://www.fromsoft.com.br Página 25


Curso de Cobol Básico

END-IF

IF OPCAO > "E"


THEN
DISPLAY "OPCAO MAIOR QUE E, PRESSIONE UMA TECLA" AT 1215
ACCEPT PARA-TELA AT 2479 WITH AUTO NO-ECHO
GO TO INICIO
END-IF

IF OPCAO GREATER "e"


THEN
DISPLAY "OPCAO MAIOR QUE e, PRESSIONE UMA TECLA" AT 1215
ACCEPT PARA-TELA AT 2479 WITH AUTO NO-ECHO
GO TO INICIO
END-IF

IF OPCAO <= "F"


THEN
DISPLAY "OPCAO MENOR OU IGUAL A F, PRESSIONE UMA TECLA" AT 1215
ACCEPT PARA-TELA AT 2479 WITH AUTO NO-ECHO
GO TO INICIO
END-IF

IF OPCAO LESS OR EQUAL "f"


THEN
DISPLAY "OPCAO MENOR OU IGUAL A f, PRESSIONE UMA TECLA" AT 1215
ACCEPT PARA-TELA AT 2479 WITH AUTO NO-ECHO
GO TO INICIO
END-IF

IF OPCAO >= "G"


THEN
DISPLAY "OPCAO MAIOR OU IGUAL A G, PRESSIONE UMA TECLA" AT 1215
ACCEPT PARA-TELA AT 2479 WITH AUTO NO-ECHO
GO TO INICIO
END-IF

IF OPCAO GREATER OR EQUAL "g"


THEN
DISPLAY "OPCAO MAIOR OU IGUAL A g, PRESSIONE UMA TECLA" AT 1215
ACCEPT PARA-TELA AT 2479 WITH AUTO NO-ECHO
GO TO INICIO
END-IF

IF OPCAO NOT EQUAL "C"


THEN
DISPLAY "OPCAO DIFERENTE DE C, PRESSIONE UMA TECLA"
AT 1215
ACCEPT PARA-TELA AT 2479 WITH AUTO NO-ECHO
GO TO INICIO
ELSE
IF OPCAO EQUAL "c"
THEN
DISPLAY "OPCAO IGUAL A C, PRESSIONE UMA TECLA" AT 1215
ACCEPT PARA-TELA AT 2479 WITH AUTO NO-ECHO
GO TO INICIO
END-IF.

IF OPCAO NOT EQUAL "a" OR "A" OR "b" OR "B" OR "c" OR "C"


OR "d" OR "D" OR "e" OR "E" OR "f"
OR "F" OR "g" OR "G"
THEN
DISPLAY "OPCAO DIFERENTE DE A ATE G, PRESSIONE UMA TECLA"
AT 1215
ACCEPT PARA-TELA AT 2479 WITH AUTO NO-ECHO
GO TO INICIO
END-IF

IF OPCAO <> "a" OR "A" OR "b" OR "B" OR "c" OR "C"


OR "d" OR "D" OR "e" OR "E" OR "f"
OR "F" OR "g" OR "G"
THEN
DISPLAY "OPCAO DIFERENTE DE A ATE G, PRESSIONE UMA TECLA"
AT 1215
ACCEPT PARA-TELA AT 2479 WITH AUTO NO-ECHO

FromSoft – Todos os direitos reservados – http://www.fromsoft.com.br Página 26


Curso de Cobol Básico

GO TO INICIO
END-IF.

FIM.
STOP RUN

Com o IF, pode-se comparar variáveis e/ou constantes, tanto numéricas, alfabéticas ou alfanuméricas.

Diferença Numérica.
WORKING-STORAGE SECTION.
77 VALOR-1 PIC 9(01) VALUE ZEROS.
77 VALOR-2 PIC 9(01) VALUE ZEROS.

PROCEDURE DIVISION.
MOVE 1 TO VALOR-1
MOVE 2 TO VALOR-2

IF VALOR-1 < VALOR-2


THEN
DISPLAY "Maior:" VALOR-2 AT 1011
DISPLAY "Menor:" VALOR-1 AT 1111
ELSE
DISPLAY "Maior:" VALOR-1 AT 1011
DISPLAY "Menor:" VALOR-2 AT 1111
END-IF.
STOP RUN.

Diferença Alfanumérica.
WORKING-STORAGE SECTION.
77 NOME-1 PIC X(08) VALUE SPACES.
77 NOME-2 PIC X(08) VALUE SPACES.

PROCEDURE DIVISION.
MOVE "FromSoft" TO NOME-1
MOVE "APS" TO NOME-2

IF NOME-1 > NOME-2


THEN
DISPLAY "Maior:" NOME-1 AT 1011
DISPLAY "Menor:" NOME-2 AT 1111
ELSE
DISPLAY "Maior:" NOME-2 AT 1011
DISPLAY "Menor:" NOME-1 AT 1111
END-IF.
STOP RUN.

3.1.2 - Agrupamentos e Prioridades.

Em Algumas situações, devemos testar mais de uma variável com mais de um único valor,
então em nossas condições podemos fazer agrupamentos com as condições em questão. Para facilitar
o entendimento usaremos duas formas de exibição, uma usando a logica de programação e a outra
usando comandos COBOL.

FromSoft – Todos os direitos reservados – http://www.fromsoft.com.br Página 27


Curso de Cobol Básico

Logica de Programação

SE (VAR-1 = CONDICAO1 OU CONDICAO2 OU CONDICAO3) E (VAR-2 <> CONDICAO1) E (VAR-3 = VAR-2)


ENTAO
<RESULTADO1>
SENAO
<RESULTADO2>
FIM-SE.

Para o agrupamento das condições é usado parênteses entre elas.

Comandos Cobol

IF (VAR-1 = CONDICAO1 OU CONDICAO2 OU CONDICAO3) AND


(VAR-2 <> CONDICAO1) AND (VAR-3 = VAR-2)
THEN
DISPLAY “Resultado 1”
ELSE
DISPLAY “Resultado 2”
END-IF

3.2 - Paragrafos

3.2.1 - Procedure Names

Conceito: Podemos organizar os comandos (procedimentos) declarados na Procedure Division


em grupos, que dão maior clareza à leitura do programa. Esta facilidade que a linguagem permite é
denominada Procedure Name, Label ou nome-de-procedimento e facilita em muito a documentação de
um programa. Também é necessária a criação de um nome-de-procedimento se quisermos modificar o
fluxo (seqüência de comandos), que como já vimos segue um esquema top-down. O nome criado pelo
programador deve ser bastante intuitivo, ou seja, deve expressar realmente qual o objetivo do conjunto
de comandos nele definidos.

OBS: Os procedure-names devem ser digitados na coluna 08. E sempre tem um ponto ao seu
final (e na linha anterior se tiver algum comando que o anteceda).

WORKING-STORAGE SECTION.
77 PARA-TELA PIC X(01) VALUE SPACES.

PROCEDURE DIVISION.
FIM.
DISPLAY " " AT 0101 WITH ERASE EOS BACKGROUND-COLOR 1
FOREGROUND-COLOR 7
DISPLAY "ESTE COMANDO FAZ PARTE DO PROCEDURE-NAME FIM"
AT 1015.
ACCEPT PARA-TELA AT 2479 WITH AUTO NO-ECHO.
DISPLAY " " AT 0101 WITH ERASE EOS BACKGROUND-COLOR 0
FOREGROUND-COLOR 7.
STOP RUN.

3.3 - Comando GO TO

Conceito: Este comando desvia o fluxo do programa para o nome-de-procedimento


especificado, ou seja, transfere o controle do processamento para outra parte do programa .

WORKING-STORAGE SECTION.
77 PARA-TELA PIC X(01) VALUE SPACES.

PROCEDURE DIVISION.
FIM.
DISPLAY " " AT 0101 WITH ERASE EOS BACKGROUND-COLOR 1
FOREGROUND-COLOR 7
DISPLAY "ESTE COMANDO FAZ PARTE DO PROCEDURE-NAME FIM"
AT 1015.
ACCEPT PARA-TELA AT 2479 WITH AUTO NO-ECHO.
GO TO ENCERRA-PROGRAMA.

FromSoft – Todos os direitos reservados – http://www.fromsoft.com.br Página 28


Curso de Cobol Básico

ENCERRA-PROGRAMA.
DISPLAY " " AT 0101 WITH ERASE EOS BACKGROUND-COLOR 0
FOREGROUND-COLOR 7.
STOP RUN.

3.4 - Comando MOVE

Conceito: este comando nos permite compor o conteúdo de uma variável (campo) com o valor
de outra variável ou alguma constante, obedecendo algumas regras:
• quem define a forma como será o preenchimento é o campo receptor.
• se o receptor for um campo numérico, o preenchimento se dará da direita para a esquerda e,
se o campo receptor for maior que o emissor, haverá o preenchimento com zeros à
esquerda, se o campo receptor for menor que o emissor, haverá a perda (truncamento) dos
dígitos excedentes à esquerda.
• se o receptor for um campo alfabético ou alfanumérico, o preenchimento se dará da
esquerda para a direita e, se o campo receptor for maior que o emissor, haverá o
preenchimento com brancos à direita, se o campo receptor for menor que o emissor, haverá
a perda (truncamento) dos caracteres excedentes à direita.
• um item de grupo é considerado como alfanumérico pelo compilador.
• Pode-se mover itens elementares como itens de grupo.
• Pode-se mover um item de grupo para outro item de grupo, mesmo que ambos (ou apenas
um deles) possuam sub-níveis.
WORKING-STORAGE SECTION.
77 PARA-TELA PIC X(01) VALUE SPACES.
77 NOME-1 PIC X(10) VALUE SPACES.
77 NOME-2 PIC X(10) VALUE SPACES.
77 NOME-WS PIC X(10) VALUES SPACES.

PROCEDURE DIVISION.
DISPLAY " " AT 0101 WITH ERASE EOS BACKGROUND-COLOR 1
FOREGROUND-COLOR 7
DISPLAY "Digite dois nomes" AT 0330.
DISPLAY "Primeiro Nome:" at 0715
ACCEPT NOME-1 AT 0735 WITH AUTO UPPER
DISPLAY "Segundo Nome:" at 0815
ACCEPT NOME-2 AT 0835 WITH AUTO UPPER
DISPLAY "PRESSIONE UMA TECLA" AT 2410 WITH BLINK
ACCEPT PARA-TELA AT 2479 WITH AUTO NO-ECHO.
MOVE NOME-1 TO NOME-WS
MOVE NOME-2 TO NOME-1
MOVE NOME-WS TO NOME-2
DISPLAY "Nomes Mudados" at 1232.
DISPLAY "Primeiro Nome:" at 1615
DISPLAY NOME-1 AT 1635
DISPLAY "Segundo Nome:" at 1715
DISPLAY NOME-2 AT 1735
DISPLAY "PRESSIONE UMA TECLA" AT 2410 WITH BLINK
ACCEPT PARA-TELA AT 2479 WITH AUTO NO-ECHO.
GO TO ENCERRA-PROGRAMA.

ENCERRA-PROGRAMA.
DISPLAY " " AT 0101 WITH ERASE EOS BACKGROUND-COLOR 0
FOREGROUND-COLOR 7.
STOP RUN.

FromSoft – Todos os direitos reservados – http://www.fromsoft.com.br Página 29


Curso de Cobol Básico

3.5 – Inicialização de variáveis.

A Inicialização de variáveis é muito importante no desenvolvimento de um sistema, pois irá


mostrar o que há nas variáveis. Foi ensinado o modo de inicialização de variáveis na própria declaração
da variável, mas também pode-se inicializar uma variável nos procedimentos do programa.

WORKING-STORAGE SECTION.
77 NOME PIC X(08) VALUE "FromSoft".
77 PARA-TELA PIC X VALUE SPACES.

PROCEDURE DIVISION.
DISPLAY "Nome com valor: " at 1015
DISPLAY NOME at 1035
ACCEPT PARA-TELA AT 2379 WITH AUTO NO-ECHO.
MOVE SPACES TO NOME.
DISPLAY "Nome inicializado:" at 1115
DISPLAY NOME at 1135
STOP RUN.

3.5.1 - Comando INITIALIZE

Conceito: Compõe um campo ou um conjunto de campos pertencentes a um item de grupo


com: zeros para campos numéricos ou numéricos editados e brancos para campos alfabéticos ou
alfanuméricos. Facilita a inicialização de variáveis.
WORKING-STORAGE SECTION.
77 NOME PIC X(08) VALUE "FromSoft".
77 PARA-TELA PIC X VALUE SPACES.

PROCEDURE DIVISION.
DISPLAY "Nome com valor: " at 1015
DISPLAY NOME at 1035
ACCEPT PARA-TELA AT 2379 WITH AUTO NO-ECHO.
INITIALIZE NOME.
DISPLAY "Nome inicializado:" at 1115
DISPLAY NOME at 1135
STOP RUN.

3.6 - Cláusula DECIMAL-POINT IS COMMA

Conceito: Esta cláusula, inserida na ENVIRONMENT DIVISION e acompanhada pelo atributo


SPECIAL-NAMES, permite a mudança do padrão americano de apresentação de valores (vírgula para
separação de milhares de dólares e ponto para separação de centavos) para o padrão brasileiro (ponto
para separação de milhares de reais e vírgula para separação de centavos).

IDENTIFICATION DIVISION.
PROGRAM-ID. L03EX09.
AUTHOR. FROMSOFT.
ENVIRONMENT DIVISION.
SPECIAL-NAMES.
DECIMAL-POINT IS COMMA.
WORKING-STORAGE SECTION.
PROCEDURE DIVISION.
DISPLAY "Veja a SPECIAL-NAMES na Environment Division".
DISPLAY "Dentro da SPECIAL-NAMES, veja o decimal-point is".
DISPLAY "comma, que e responsavel pela virgula em literais".
DISPLAY "numericos".
STOP RUN.

FromSoft – Todos os direitos reservados – http://www.fromsoft.com.br Página 30


Curso de Cobol Básico

3.6.1 - Máscara de edição

Conceito: Para melhorar a apresentação de valores ou datas na tela ou relatório, podemos


utilizar de máscaras de edição (vide a cláusula PICTURE na apostila Cobol Básico). Imagine, por
exemplo, se ao mostrarmos um valor na tela, o fizermos apresentando os zeros não significativos à
esquerda de um número, ou apresentarmos uma data sem a separação de dia/mês/ano com as barras.
Portanto as máscaras de edição melhoram o visual de apresentação de dados.

OBS: As Máscaras de Edição tem como objetivo APENAS a exibição de valores em tela. As
mesmas não tem funcionalidade para fazer operações aritméticas, comparações, nem servir de
parâmetros para outros programas. Então para usar variáveis numéricas deve-se receber o valor
da variável na variável do tipo máscara e em seguida mover o valor da variável máscara para a
variável numérica.

IDENTIFICATION DIVISION.
PROGRAM-ID. L03EX10.
AUTHOR. FROMSOFT.
ENVIRONMENT DIVISION.
SPECIAL-NAMES.
DECIMAL-POINT IS COMMA.
WORKING-STORAGE SECTION.
77 DATA-FUNCIONARIO PIC 9(08) VALUE ZEROS.
77 DATA-FUNCIONARIO-MASCARA PIC ZZ/ZZ/ZZZZ.
77 SALARIO PIC 9(07) VALUE ZEROS.
77 SALARIO-MASCARA PIC ZZ.ZZ9,99.
PROCEDURE DIVISION.
STOP RUN.

3.6.2 - Como trabalhar com máscaras de edição.

a) Defina a cláusula de pontos decimais (SPECIAL-NAMES) na ENVIRONMENT DIVISION


b) Declare as variáveis numéricas e as máscaras de edição.
c) Receba o valor na variável máscara de edição
d) Mova o valor da máscara de edição para a variável numérica

IDENTIFICATION DIVISION.
PROGRAM-ID. L03EX11.
AUTHOR. FROMSOFT.
ENVIRONMENT DIVISION.
SPECIAL-NAMES.
DECIMAL-POINT IS COMMA.
WORKING-STORAGE SECTION.
77 DATA-NUMERICA PIC 9(08) VALUE ZEROS.
77 DATA-MASCARA PIC ZZ/ZZ/ZZZZ.

PROCEDURE DIVISION.
ACCEPT DATA-MASCARA AT 1015 WITH AUTO.
MOVE DATA-MASCARA TO DATA-NUMERICA.
DISPLAY DATA-NUMERICA AT 1115.
STOP RUN.

3.7 - Comando STOP

Conceito: Este comando suspende temporariamente o programa, até que se tecle ENTER.

WORKING-STORAGE SECTION.
77 NOME-QUALQUER PIC X(10).

PROCEDURE DIVISION.
PEGA-NOME-QUALQUER.
DISPLAY "DIGITE UM NOME QUALQUER" AT 1015.
ACCEPT NOME-QUALQUER AT 1050 WITH AUTO UPPER PROMPT.
IF NOME-QUALQUER EQUAL SPACES
THEN
STOP "NOME INVALIDO"
GO TO PEGA-NOME-QUALQUER
END-IF.

FromSoft – Todos os direitos reservados – http://www.fromsoft.com.br Página 31


Curso de Cobol Básico

STOP RUN.

3.7.1 - Modo de se parar a tela sem o uso do STOP

Conceito: A desvantagem do STOP é que após o seu uso, pode-se apenas sair dele com a
tecla ENTER, inviabilizando seu uso, pois o usuário pode digitar outras teclas. Uma outra maneira é
declarar uma variável de uma posição apenas, e quando for mostrar a mensagem, dar o DISPLAY para
a mensagem e depois dar o ACCEPT da variável declarada (de uma posição) com parametros AUTO e
NO-ECHO em uma posição da tela que o usuário não irá perceber.
WORKING-STORAGE SECTION.
77 PARA-TELA PIC X. -> Veja que aqui
esta sendo
declarado a
variavel com uma
posicao.
77 NOME-QUALQUER PIC X(10).

PROCEDURE DIVISION.
PEGA-NOME-QUALQUER.
DISPLAY "DIGITE UM NOME QUALQUER" AT 1015
ACCEPT NOME-QUALQUER AT 1050 WITH AUTO UPPER PROMPT.
IF NOME-QUALQUER EQUAL SPACES
THEN
DISPLAY "NOME INVALIDO" AT 1115
ACCEPT PARA-TELA AT 2479 WITH AUTO NO-ECHO
GO TO PEGA-NOME-QUALQUER
END-IF.
STOP RUN.

OBS: Após o DISPLAY, é dado o ACCEPT da variável PARA-TELA (A que declaramos com 1 posição)
na linha 24 e na coluna 79, que é bem ao extremo do programa, praticamente sendo de pouca visão
para o usuário, e sendo bem útil, pois com o parâmetro AUTO a resposta irá ser automática, seja com
qualquer tecla, e com o parâmetro NO-ECHO, que irá mostrar ao invés das letras, asteriscos, evitando
sujeira na tela.

3.8 - Trabalhando com Teclas Especiais

Conceito: Para se trabalhar com teclas de escape, se usa o ACCEPT FROM ESCAPE KEY.

ACCEPT <VARIAVEL> FROM ESCAPE KEY

Esta variável deve ter o tamanho de duas posições e ser alfanumérica, pois os valores das
teclas podem ser de qualquer valor, tanto numérico como alfabético. Este tipo de ACCEPT deve ser
informado depois de um ACCEPT normal, e ele retorna o código da tecla que terminou o ACCEPT. Este
formato é fundamental para determinar teclas de atalho no Cobol, sendo que as principais teclas de
atalho são:

ESC – 01 F1 - 02 F2 - 03 F3 - 04
F4 - 05 F5 - 06 F6 - 07 F7 - 08
F8 - 09 F9 - 10 F10 - 11 PgUp – 55
PgDown - 56

Se quisermos criar uma tecla de escape usando a tecla ESC, devemos testar o valor da tecla ESC com:
WORKING-STORAGE SECTION.
77 TECLA PIC XX VALUE SPACES.
77 NOME PIC X(30) VALUE SPACES.

PROCEDURE DIVISION.
PEGA-NOME.
ACCEPT NOME AT 1015 WITH AUTO PROMPT.
ACCEPT TECLA FROM ESCAPE KEY
IF TECLA EQUAL "01"
THEN
GO TO FIM

FromSoft – Todos os direitos reservados – http://www.fromsoft.com.br Página 32


Curso de Cobol Básico

END-IF.
FIM.
STOP RUN.

Neste caso, a variável TECLA foi declarada como nível 77 e tem tipo e tamanho de PIC XX.

Detalhe importante: o ACCEPT FROM ESCAPE KEY somente deve ser usado depois de dado um
ACCEPT normal.

Lição 3 - Exemplo 1

WORKING-STORAGE SECTION.
77 TECLA PIC X(02) VALUE SPACES.
77 REGIAO PIC X(05) VALUE SPACES.
77 OPCAO PIC X(01) VALUE SPACES.
77 CIDADE PIC X(20) VALUE SPACES.
77 PARA-TELA PIC X(01) VALUE SPACES.

PROCEDURE DIVISION.
INICIO.
INITIALIZE TECLA REGIAO OPCAO CIDADE PARA-TELA.
PEGA-REGIAO.
DISPLAY "INFORME A REGIAO DO CLIENTE: " AT 1010.
ACCEPT REGIAO AT 1039.
ACCEPT TECLA FROM ESCAPE KEY.
IF TECLA EQUAL "01"
THEN
DISPLAY "Voce deseja sair?" AT 2310
ACCEPT OPCAO AT 2330 WITH AUTO UPPER
IF OPCAO = "S"
THEN
STOP "PRESSIONE NOVAMENTE PARA SAIR"
GO TO FIM
ELSE
GO TO PEGA-REGIAO
END-IF
END-IF
IF REGIAO = "SUL"
THEN
GO TO MOSTRA-CADASTRO-SUL
ELSE
IF REGIAO = "NORTE"
THEN
GO TO MOSTRA-CADASTRO-NORTE
ELSE
IF REGIAO = "LESTE"
THEN
GO TO MOSTRA-CADASTRO-LESTE
ELSE
IF REGIAO = "OESTE"
THEN
GO TO MOSTRA-CADASTRO-OESTE
ELSE
DISPLAY "REGIAO INVALIDA, SUL, NORTE, LESTE OU OESTE"
AT 2379
ACCEPT PARA-TELA WITH AUTO NO-ECHO
GO TO PEGA-REGIAO
END-IF.

MOSTRA-CADASTRO-NORTE.
DISPLAY "INFORME UMA CIDADE DA REGIAO NORTE" AT 1110
ACCEPT CIDADE AT 1146
ACCEPT TECLA FROM ESCAPE KEY
IF TECLA EQUAL "01"
THEN
GO TO PEGA-REGIAO
END-IF
IF CIDADE EQUAL SPACES
THEN
DISPLAY "CIDADE INVALIDA" AT 2379
ACCEPT PARA-TELA AT 2379 WITH AUTO NO-ECHO
GO TO MOSTRA-CADASTRO-NORTE

FromSoft – Todos os direitos reservados – http://www.fromsoft.com.br Página 33


Curso de Cobol Básico

END-IF.
GO TO INICIO.

MOSTRA-CADASTRO-SUL.
DISPLAY "INFORME UMA CIDADE DA REGIAO SUL" AT 1110
ACCEPT CIDADE AT 1146
ACCEPT TECLA FROM ESCAPE KEY
IF TECLA EQUAL "01"
THEN
GO TO PEGA-REGIAO
END-IF
IF CIDADE EQUAL SPACES
THEN
DISPLAY "CIDADE INVALIDA" AT 2379
ACCEPT PARA-TELA AT 2379 WITH AUTO NO-ECHO
GO TO MOSTRA-CADASTRO-SUL
END-IF.
GO TO INICIO.

MOSTRA-CADASTRO-LESTE.
DISPLAY "INFORME UMA CIDADE DA REGIAO LESTE" AT 1110
ACCEPT CIDADE AT 1146
ACCEPT TECLA FROM ESCAPE KEY
IF TECLA EQUAL "01"
THEN
GO TO PEGA-REGIAO
END-IF
IF CIDADE EQUAL SPACES
THEN
DISPLAY "CIDADE INVALIDA" AT 2379
ACCEPT PARA-TELA AT 2379 WITH AUTO NO-ECHO
GO TO MOSTRA-CADASTRO-LESTE
END-IF.
GO TO INICIO.

MOSTRA-CADASTRO-OESTE.
DISPLAY "INFORME UMA CIDADE DA REGIAO OESTE" AT 1110
ACCEPT CIDADE AT 1146
ACCEPT TECLA FROM ESCAPE KEY
IF TECLA EQUAL "01"
THEN
GO TO PEGA-REGIAO
END-IF
IF CIDADE EQUAL SPACES
THEN
DISPLAY "CIDADE INVALIDA" AT 2379
ACCEPT PARA-TELA AT 2379 WITH AUTO NO-ECHO
GO TO MOSTRA-CADASTRO-OESTE
END-IF.
GO TO INICIO.

FIM.
STOP RUN.

FromSoft – Todos os direitos reservados – http://www.fromsoft.com.br Página 34


Curso de Cobol Básico

Lição 3 - Exemplo 2

IDENTIFICATION DIVISION.
PROGRAM-ID. L03EX17.
AUTHOR. FROMSOFT.

ENVIRONMENT DIVISION.
CONFIGURATION SECTION.
SPECIAL-NAMES.
DECIMAL-POINT IS COMMA.

DATA DIVISION.
WORKING-STORAGE SECTION.
77 SALARIO-NUMERICO PIC 9(09)V99.
77 SALARIO-MASCARA PIC ZZZ.ZZZ.ZZ9,99.
77 TECLA-DE-ESCAPE PIC XX VALUE SPACES.
77 PARA-TELA PIC X VALUE SPACES.

PROCEDURE DIVISION.
PEGA-SALARIO.
INITIALIZE SALARIO-NUMERICO SALARIO-MASCARA
DISPLAY "Salario do funcionario" at 1015
ACCEPT SALARIO-MASCARA at 1037
ACCEPT TECLA-DE-ESCAPE FROM ESCAPE KEY
IF TECLA-DE-ESCAPE EQUAL "01"
THEN
GO TO FIM
END-IF
MOVE SALARIO-MASCARA TO SALARIO-NUMERICO
IF SALARIO-NUMERICO EQUAL ZEROS
THEN
DISPLAY "Salario Invalido" at 2310
ACCEPT PARA-TELA at 2479 WITH AUTO NO-ECHO
DISPLAY " " AT 2310
GO TO PEGA-SALARIO
END-IF.

FIM.
STOP RUN.

Lição 3 - Exemplo 3

IDENTIFICATION DIVISION.
PROGRAM-ID. L03EX18.
AUTHOR. FROMSOFT.
ENVIRONMENT DIVISION.
SPECIAL-NAMES.
DECIMAL-POINT IS COMMA.

WORKING-STORAGE SECTION.
77 DATA-MASCARA PIC ZZ/ZZ/ZZ.
01 DATA-DESEJADA.
03 DD-CORRENTE PIC 9(02) VALUE ZEROS.
03 FILLER PIC X(01) VALUE "/".
03 MM-CORRENTE PIC 9(02) VALUE ZEROS.
03 FILLER PIC X(01) VALUE "/".
03 AA-CORRENTE PIC 9(02) VALUE ZEROS.

PROCEDURE DIVISION.
INICIO.
INITIALIZE DATA-MASCARA DD-CORRENTE MM-CORRENTE AA-CORRENTE.
DISPLAY "DIGITE A DATA DESEJADA" AT 1015
ACCEPT DATA-MASCARA AT 1040 WITH AUTO
MOVE DATA-MASCARA TO DATA-DESEJADA
IF DD-CORRENTE LESS 10 OR 20 OR 30 AND NOT EQUAL ZEROS
THEN
IF (DD-CORRENTE = 10 OR 20 OR 30) AND
(MM-CORRENTE = 6 OR 12)
THEN
IF (DD-CORRENTE = 10) AND (MM-CORRENTE = 6)
THEN
DISPLAY "DIA 10 DE JUNHO" AT 1520
ELSE

FromSoft – Todos os direitos reservados – http://www.fromsoft.com.br Página 35


Curso de Cobol Básico

IF (DD-CORRENTE = 20) AND (MM-CORRENTE = 6)


THEN
DISPLAY "DIA 20 DE JUNHO" AT 1520
ELSE
IF (DD-CORRENTE = 30) AND (MM-CORRENTE = 6)
THEN
DISPLAY "DIA 30 DE JUNHO" AT 1520
ELSE
IF (DD-CORRENTE = 10) AND
(MM-CORRENTE = 12)
THEN
DISPLAY "DIA 10 DE DEZEMBRO" AT 1520
ELSE
IF (DD-CORRENTE = 20) AND
(MM-CORRENTE = 12)
THEN
DISPLAY "DIA 20 DE DEZEMBRO"
AT 1520
ELSE
IF (DD-CORRENTE = 30) AND
(MM-CORRENTE = 12)
THEN
DISPLAY "DIA 30 DE DEZEMBRO"
AT 1520
ELSE
GO TO FIM
END-IF
END-IF
END-IF
END-IF
END-IF
END-IF
END-IF
ELSE
GO TO INICIO
END-IF.
FIM.
STOP RUN.

Obs.: Neste primeiro IF, a condição é se a variável DD-CORRENTE for menor a 10 ou 20 ou 30, e,
no segundo IF, a condição é se a variável DD-CORRENTE é igual a 10 ou 20 ou 30 e a variável
MM-CORRENTE for igual a 6 ou 12. Isto é um caso de IF’s aninhados, uma solução bem útil para
quando for fazer testes mais complexos.

Lição 3 - Exemplo 4

IDENTIFICATION DIVISION.
PROGRAM-ID. L03EX17.
AUTHOR. FROMSOFT.

ENVIRONMENT DIVISION.
CONFIGURATION SECTION.
SPECIAL-NAMES.
DECIMAL-POINT IS COMMA.

DATA DIVISION.
WORKING-STORAGE SECTION.
77 SALARIO-NUMERICO PIC 9(09)V99.
77 SALARIO-MASCARA PIC ZZZ.ZZZ.ZZ9,99.
77 TECLA-DE-ESCAPE PIC XX VALUE SPACES.
77 PARA-TELA PIC X VALUE SPACES.

PROCEDURE DIVISION.
PEGA-SALARIO.
INITIALIZE SALARIO-NUMERICO SALARIO-MASCARA
DISPLAY "Salario do funcionario" at 1015
ACCEPT SALARIO-MASCARA at 1037
ACCEPT TECLA-DE-ESCAPE FROM ESCAPE KEY
IF TECLA-DE-ESCAPE EQUAL "01"
THEN
GO TO FIM
END-IF
MOVE SALARIO-MASCARA TO SALARIO-NUMERICO

FromSoft – Todos os direitos reservados – http://www.fromsoft.com.br Página 36


Curso de Cobol Básico

IF SALARIO-NUMERICO EQUAL ZEROS


THEN
DISPLAY "Salario Invalido" at 2310
ACCEPT PARA-TELA at 2479 WITH AUTO NO-ECHO
DISPLAY " " AT 2310
GO TO PEGA-SALARIO
END-IF.

FIM.
STOP RUN.

Lição 3 - Exercícios

1. Faça um exercício de nome PROG06.CBL que o usuário digite um valor numérico em uma variável
numérica, de 10 posições, e após digitar, mostre o valor em uma variável de máscara de edição, de
10 posições.
2. Faça um exercício de nome PROG07.CBL que o usuário digite um valor numérico em uma variável
numérica, e após digitar, inicialize a variável usando o comando INITIALIZE e depois mostre na tela
a variável inicializada.
3. Copie o programa PROG03.CBL com o nome de PROG08.CBL e faça as regras de validação para
todos os campos, fazendo procedure-names e usando o IF/ELSE e o GO TO.
4. Copie o PROG08.CBL com o nome de PROG08A.CBL e implemente nele o uso de teclas de
escape, testando a tecla ESC, se for no campo NOME, ele termina o programa, mas se for em um
outro campo, ele volta para o campo anterior.
5. Fazer um programa de nome PROG09.CBL para digitação de um cadastro de candidatos, com a
seguinte tela.
HORA: 99:99 CADASTRO DE CANDIDATOS DATA: 99/99/99

NOME..............: AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA

ENDEREÇO..........:
RUA........: XXXXXXXXXXXXXXXXXXXXXXXXX
NUMERO.....: ZZZZZ
COMPLEMENTO: XXXXXXXXXX
BAIRRO.....: XXXXXXXXXXXXXXXXXXXX

SALÁRIO...........: ZZZ.ZZ9,99

DATA DE NASCIMENTO: 99/99/99

TELEFONE..........: XXXXXXXXXXXXXXX

MENSAGENS: INFORME XXXXXXXXXXXX

Onde:
- A tela deve Ter cor de fundo(background) azul e cor de letra(foreground) branca

- Deve ser mostrado na tela a Hora e a Data do sistema.

- as posições com “A” indicam que o campo deve ser alfabético, com “X” indicam campo alfanumérico,
“9” indicam campo numérico e “Z” campo numérico com supressão de zeros e a quantidade de
repetições da letra indica o tamanho do campo.

- na linha 24 foi colocada uma linha de mensagens, onde devera ser mostrado o nome do campo a ser
informado (ex.: INFORME NOME). Então a medida que você for digitando os campos, deve-se mostrar
em tela uma mensagem informando qual o campo em questão.

- Fazer a validação de todos os campos (zeros/espaços), ou seja, você não pode deixar o usuário
passar para o próximo campo, sem antes digitar qualquer valor no campo anterior. (dicas: use
procedure names). A cada vez que houver uma validação, parar a tela e mostrar uma mensagem para o
usuário, indicando o que ele deve fazer.

FromSoft – Todos os direitos reservados – http://www.fromsoft.com.br Página 37


Curso de Cobol Básico

- Deve-se implementar o uso da tecla ESC para todos os campos. Se o usuário digitar ESC no campo
NOME, ele sai do programa, entretanto, se ele digitar ESC nos outros campos, ele volta para o campo
anterior.

- A Tela deve ser mostrada primeiro, depois deve-se recolher os dados do usuario. Deve-se dar todos
os display's, e depois, todos os accept's.

- Depois de Digitar todos os Dados, deve-se perguntar ao usuario, "Deseja Cadastrar outro? (S/N). Se o
usuario digitar S, ele volta ao inicio do programa, Se o usuario digitar N, ele sai do programa. Se o
usuario digitar alguma outra tecla, ele volta para perguntar a opcao. Se o usuario pressionar ESC ele
volta para recolher o Telefone.

- Quando for sair do programa, deve-se limpar a tela antes.

FromSoft – Todos os direitos reservados – http://www.fromsoft.com.br Página 38


Curso de Cobol Básico

Lição 4

Lição 4 - Conceitos

4.1 - Screen Section

Conceito: forma avançada de se trabalhar com telas, onde se define toda uma tela (podendo
inclusive englobar características) e se executa operações também no conjunto, como ACCEPT e
DISPLAY em toda a tela (SCREEN). A mesma fica após a WORKING-STORAGE SECTION.

4.1.1 Como usar.

Para se usar a SCREEN SECTION, deve-se criar uma variável grupo e dentro desta ir inserindo
variáveis, cada uma determinando parte da tela do programa. E inicialmente na PROCEDURE
DIVISION, dar o DISPLAY desta variável.

4.1.2 Cláusula LINE.

Conceito: Comando que determina a linha que você irá mostrar um determinado valor.

01 VARIAVEL-1.
03 LINE 05 COLUMN 10 VALUE "Nome".

4.1.3 Cláusula COLUMN.

Conceito: Comando que determina a coluna que você irá mostrar um determinado valor.

01 VARIAVEL-2.
03 LINE 05 COLUMN 10 VALUE "Nome".

4.1.4 Cláusula BLANK SCREEN.

Conceito: Comando que determina a limpeza imediata da tela (semelhante ao atributo ERASE
EOS).

01 VARIAVEL-3.
03 BLANK SCREEN.

4.2 - Ferramenta SCREENS

Conceito: Ferramenta que facilita o desenho de telas, que além de trabalhar de forma visual
(monta-se as telas de forma visual), gera também o código Cobol para declaração na Screen Section e
pode gerar também o esqueleto do programa para trabalhar com essa tela.
Desenha-se o leiaute da tela limitado a 25 linhas e 80 colunas, grava-se um arquivo gerado pela
ferramenta com o código da SCREEN e adiciona-se um COPY no programa que irá utilizar a tela, na
SCREEN SECTION.

A seguir, apresentamos os comandos da ferramenta, baseando-se na sua estrutura de


menus. Lembramos que não é necessário aprender tudo da ferramenta de uma só vez, pois a
partir desse exercício iremos construir todas as telas com o SCREENS.

FromSoft – Todos os direitos reservados – http://www.fromsoft.com.br Página 39


Curso de Cobol Básico

4.2.1 - Interface e menu inicial do SCREENS


+----------------------------------------------------------------------------------+
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| New form----Attribute--------------------------Row:01-Col:01-Ins-Caps-Num-Scroll |
|F1=help F2=mark/unmark F3=field F4=group F5=paint-attribute F6=attribute-roll |
|F7=cut-to-block F8=copy-to-block F9=restore-block F10=field-order Alt Ctl Escape |
+----------------------------------------------------------------------------------+

O Screens possui uma interface de entrada muito simples e objetiva. A tela do Screens é
coordenada por teclas de atalho, que variam de F1 a F10, Teclas ALT, CTRL e ESC. Para navegação e
manutenção de telas criadas pelo Screens pode-se usar as teclas Insert, Capslock, Num-lock e
Scroll-Lock.

4.2.2 - Teclas de Atalho do SCREENS

F1 - Help - Tela de Ajuda em todos os campos. Mostra uma única tela de socorro
F2 - Mark/Unmark – Marca ou desmarca a opcão de marcar um bloco ou trecho da tela. Pressionando-
se uma vez esta tecla, tem-se a opção de marcar um objeto ou um bloco, pressionando outra vez,
tem-se a opção de desmarcar um objeto ou um bloco
F3 - Field - Criação/manutenção de campos. Permite colar campos quando desmarcado. Quando
marcado define atributos ao campo que está marcado. Há três tipos de atributos e sub-atributos
para uso:

1. Using - Quando o campo da tela vai estar diretamente relacionado com um campo da Data Division,
tanto em ACCEPT como DISPLAY.

Auto - Atributo que, quando o campo for preenchido completamente, salta para outro campo
automaticamente
Full - Atributo que necessita de total preenchimento ou nenhum preenchimento. Só é usado
para campos de leitura ou de atualização. Se houver atualização neste campo e o mesmo for
um campo de grupo, os subcampos serão atualizados também.
Prompt - Atributo que define qual caracter preencherá toda a parte do campo que ainda não
estiver preenchida (usado para definir visualmente o tamanho do campo)
Required - Campo de preenchimento obrigatório.
echo - Atributo que preenche o campo com asteriscos (mais
usados em campos relativos a senhas)
Zero Fill - Preenche campos vazios com zeros
Blank When Zero - Atributo que preenche o campo com zeros ou
brancos
Justified Right - Alinha campos alfanuméricos à direita (o padrão é a esquerda) na variavel,
não é visto pelo usuário esta alteração. É mudado somente no campo do programa.
Size - Atributo que especifica o tamanho corrente do item tela
Bell - Atributo que envia sinal sonoro

2. From - Quando o campo vai oferecer um atributo para um campo

FromSoft – Todos os direitos reservados – http://www.fromsoft.com.br Página 40


Curso de Cobol Básico

Blank When Zero - Atributo que preenche o campo com zeros ou brancos
Justified Right - Alinha campos alfanuméricos à direita (o padrão é a esquerda) na
variavel, não é visto pelo usuário esta alteração. É mudado somente no campo do
programa.
Size - Atributo que especifica o tamanho corrente do item tela
Bell - Atributo que envia sinal sonoro

3. To - Quando o campo vai direcionar um atributo para um atributo

Auto - Atributo que, quando o campo for preenchido completamente, salta para outro campo
automaticamente
Full - Atributo que necessita de total preenchimento ou nenhum preenchimento. Só é usado
para campos de leitura ou de atualização. Se houver atualização neste campo e o mesmo for
um campo de grupo, os subcampos serão atualizados também.
Prompt - Atributo que define qual caracter preencherá toda a parte do campo que ainda não
estiver preenchida (usado para definir visualmente o tamanho do campo)
Required - Campo de preenchimento obrigatório.
No echo - Atributo que preenche o campo com asteriscos (mais
usados em campos relativos a senhas)
Zero Fill - Preenche campos vazios com zeros
Blank When Zero - Atributo que preenche o campo com zeros ou brancos
Justified Right - Alinha campos alfanuméricos à direita (o padrão é a esquerda) na variavel,
não é visto pelo usuário esta alteração. É mudado somente no campo do programa.
Size - Atributo que especifica o tamanho corrente do item tela
Bell - Atributo que envia sinal sonoro

Teclas de Função usadas no F3:


F3 + F1 - Help/Ajuda
F3 + F2 - Select/Deselect Clause - Seleciona e deseleciona Atributos
F3 + F3 - Edit Clause - Oferece opção de escolha para determinados campos e
determinados atributos
F3 + F4 - Numeric/Alphanumeric - Seleciona opcao Numérica ou Alfanumérica.

F4 - Group - Quando marcado sobre campos da tela, permite a formação de grupo (item grupo) que irá
englobar os campos marcados (itens elementares). O bloco ou grupo deve ser selecionado
primeiramente antes de pressionada a tecla F4.

Teclas de Função do F4:


F4 + F1 - Help/Ajuda
F4 + F2 - Assign Properties/Aplica Atributos(Propriedades)
Auto - Atributo que, quando o campo for preenchido completamente, salta para outro campo
automaticamente
Full - Atributo que necessita de total preenchimento ou nenhum preenchimento.
Só é usado para campos de leitura ou de atualização. Se houver atualização neste campo e o
mesmo for um campo de grupo, os subcampos serão atualizados também.
Prompt - Atributo que define qual caracter preencherá toda a parte do ampo que ainda não estiver
preenchida (usado para definir visualmente o tamanho do campo)
Required - Campo de preenchimento obrigatório.
No echo - Atributo que preenche o campo com asteriscos (mais usados em campos relativos a
senhas)
Zero Fill - Preenche campos vazios com zeros
F4 + F3 - Repeat Horizontally - Copia o espaco selecionado e cola na horizontal
F4 + F4 - Repeat Vertically - Copia o espaço selecionado e cola na vertical
F4 + F5 - Delete Horizontally - Deleta o espaco selecionado(parte) horizontalmente
F4 + F6 - Delete Vertically - Deleta o espaco selecionado(parte) verticalmente

Tecla F5 - Paint-Attribute – Pinta a área marcada com a cor selecionada pelo desenvolvedor.

FromSoft – Todos os direitos reservados – http://www.fromsoft.com.br Página 41


Curso de Cobol Básico

Tecla F6 - Attribute-Roll - Coluna de cores personalizadas. Para cores, o screens guarda até 05 cores
(subdesenvolvidas em F2, F3, F4, F5 e F6 para escolher no menu de escolha), escolhidas pelo
desenvolvedor, e acionadas quando é teclada a função F6, mudando de cor, de acordo com a cor que
ele escolheu. F7 define a tela toda como a cor de fundo Padrão.
Tecla F7 - Cut-to-block - Função que quando marcada, move campos selecionados pelo usuário e os
confirma com F3. Disponibiliza também visualização do menu de blocos.

Teclas de função do F7:


F7 + F2 - Paste Block / Cola Bloco Selecionado
F7 + F3 - Copy From Block / Copia Bloco selecionado para lugar selecionado
F7 + F4 - Store Block / Exclui Bloco Selecionado

F8 - Copy-to-block - Função que quando marcada, copia campos selecionados pelo usuário e os cola
com F3. Permite também visualização do menu de blocos.

Teclas de função do F8:


F8 + F2 - Paste Block / Cola Bloco Selecionado
F8 + F3 - Copy From Block / Copia Bloco selecionado para lugar selecionado
F8 + F4 - Store Block / Exclui Bloco Selecionado

F9 - Restore-Block – Recupera o último bloco armazenado

Teclas de Função do F9:


F9 + F2 - Paste Block / Cola(Retorna) Bloco Selecionado
F9 + F3 - Copy From Block / Copia(Retorna) Bloco selecionado para lugar selecionado
F9 + F4 - Store Block / Exclui(Retorna) Bloco Selecionado

F10 - Field-Order - Função que permite o travamento das teclas alfabéticas e numéricas do teclado, das
subtelas de ALT e CTRL. A função principal desta tecla, é mostrar a ordem do Accept corrente e permitir
alterações neste ordem, colocando o cursor sobre os campos e selecionando números ou letras

4.2.3 - Sub-menu ALT (opções relativas a personalização de Forms)

ALT + F1 = Help/Ajuda. Mostra uma única tela de socorro.


ALT + F2 = Attribute on/off / Atributos da tela - Ativa ou desativa os atributos da tela
ALT + F3 = Load form / Carrega um arquivo já existente
ALT + F4 = Save form / Salva arquivos com o formato *.srn (screen – tela)
ALT + F5 = Generate Cobol / Gera o arquivo Cobol, a qual será lido na screen section para
a exibição da tela. Disponibiliza opções de gravação; O esqueleto do
programa(*.cbl *.wks) usando a tecla F3 ou unicamente a tela (*.ss), usando F2
ALT + F6 = Clear / apaga toda a tela criada.
ALT + F7 = Delete line/ Apaga linha aonde está o cursor
ALT + F8 = Insert Line / Insere linha aonde está o cursor e o move para baixo, descendo
todas as posições do cursor de linha
ALT + F9 = Attribute pallete / Paleta de atributos de cores. Nesta posição você deve
selecionar até 05 cores (Variando de F2 A F6), F7 define o atributo default a
ser utilizado (define a cor de fundo da tela) pela tela.
ALT + F10 = Screen Name / Nome da Tela. Este nome será utilizado para gravação de
todos os arquivos do utilitário.

4.2.4 - Sub-menu CTRL (opções relativas a criação de Forms)

CTRL + F1 = Help/Ajuda
CTRL + F2 = text/edit -> Faz a criação de
CTRL + F3 = Char left/ Move a seta de escolha de caracteres especiais ASCII para a
esquerda

CTRL + F4 = Char Right / Move a seta de escolha de caracteres especiais ASCII para a

FromSoft – Todos os direitos reservados – http://www.fromsoft.com.br Página 42


Curso de Cobol Básico

direita
CTRL + F5 = Select Char / Exibe caracter selecionado
CTRL + F6 = Draw / Desenhar tela
F2 – Opção que permite:
• Desenhar
• Mover o cursor sem desenhar
• Apagar desenho sobre o cursor
F3 – Opção que permite a criação de linhas simples ou duplas.
F4 – Opção que permite a escolha de cores mediante paleta de atributos (ALT + F9)

CTRL + F7 = Read Char -> Opção que seleciona o caractere que está sob o cursor;
elegendo-o como caractere especial
CTRL + F8 = Read Attribute -> Opção que lê o atributo da posição sob o cursor e o elege
como atributo corrente
CTRL+ F9= Delete Field definition -> Exclui Definição de campo criada em posição
selecionada
CTRL + F10 = Delete group definition -> Exclui Definição de Grupo no Screens

4.2.5 - Trabalhando com o SCREENS

4.2.5.1 - Criação de Forms:

Toda vez que você acessa o Screens, automaticamente ele já é iniciado com um novo form, para você
já poder iniciar o trabalho.

+----------------------------------------------------------------------------------+
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
|Newform ------Attribute-------------------------Row:01-Col:01-Ins-Caps-Num-Scroll |
|F1=help F2=mark/unmark F3=field F4=group F5=paint-attribute F6=attribute-roll |
|F7=cut-to-block F8=copy-to-block F9=restore-block F10=field-order Alt Ctl Escape |
+----------------------------------------------------------------------------------+

Para acesssar o Screens, basta escrever no prompt do ms-dos Screens

C:\> screens

Caso esteja usando o Parametro XM em suas Aplicações, deve-se escrever antes da palavra
Screens
C:\> xm screens

4.2.5.2 - Escolha de cores para os Forms

Para você poder escolher cores para os seus forms, basta você usar o comando Attribute Pallete,
pressionando a tecla ALT + F9. Ele irá lhe mostrar uma gama de cores a sua escolha, para escolher,
você deve pressionar as teclas F2, F3, F4, F5 e F6 para escolher. Para mudar a cor quando estiver

FromSoft – Todos os direitos reservados – http://www.fromsoft.com.br Página 43


Curso de Cobol Básico

desenhando, basta pressionar a tecla F6 (Comando Attribute Roll). As Cores que o Screens trabalha
são:

Paleta de cores (foreground-color e background-color):


0 - Preto 1 - Azul 2 - Verde 3 - Cyan
4 - Vermelho 5 - Magenta 6 - Marrom 7 - Branco

Inclui-se também um atributo chamado highlight que clareia a cor. Exemplo, se eu tiver um item
de cor vermelho, ele vai ficar rosa ao usar juntamente o highlight, se eu usar um item de cor verde, ele
vai ficar verde claro.

4.2.5.3 - Desenhar Forms

Para desenhar forms, basta você usar o comando Draw pressionando as teclas CTRL + F6. Dentro
dele, você pode desenhar, excluir, andar sobre o form (F2 - Comando Draw/Erase/Move), desenhar
linhas simples ou duplas (F3 - Comando Single/Double) e mudar a cor de uso do form (F4 - Comando
Atribute-Roll)

4.2.5.4 - Copiar, Recortar e Colar Campos de forms

Para copiar campos, você deve grifar os campos selecionados com F2 (Comando Mark/Unmark),
pressionar F8 (Comando copy-to-block) para copiar ou F7 (Comando cut-to-block) para recortar e
pressionar F3 (Paste-to-block)

4.2.5.5 - Criação de variáveis, opções de preenchimento e mascaramento de variáveis

O Screens permite a criação de variáveis em seu ambiente de trabalho. Você pode criá-las e usar
efeitos de preenchimento como AUTO, FULL, NOECHO, ZEROFILL, e mascaramento, como datas
editadas, campos com supressão de zeros, cifras e outros.
Para usar dessas atribuições você deve preencher o tamanho do campo desejado com Acentos
Circunflexo ( ^ ). O Screens identificará assim o seu campo e o respectivo tamanho.
Você pode optar por três tipos de preenchimento, o preenchimento no respectivo campo, em um
respectivo campo e para um respectivo campo. Para trabalhar deste modo o Screens, para cada
variável que ele cria, ele atribui uma bandeira, que aponta para a respectiva variável, que é criada por
ele. Você pode também criar máscaras para variáveis, basta você inserir o desenho quando atribui seus
preenchimentos.
Tipos de preenchimento de Variáveis: (USING / FROM / TO)
Criação de Variáveis Independentes (Field)
Criação de Variáveis Grupo (Group)

FromSoft – Todos os direitos reservados – http://www.fromsoft.com.br Página 44


Curso de Cobol Básico

4.2.5.6 - Abertura de Forms

Para Abrir uma Interface ou um Form já existente, deve-se usar o comando Load, pressionando a tecla
ALT + F3 O Screens irá lhe perguntar a unidade, o nome e o diretório do form. Basta você preencher e o
Screens irá disparar o form selecionado.
+----------------------------------------------------------------------------------+
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
|Load form------Attribute-------------------------Row:01-Col:01-Ins-Caps-Num-Scroll|
|F1=help F2=directory Escape |
|File C:\ _-+ Ctrl|
+----------------------------------------------------------------------------------+

O Screens faz a leitura do arquivo e depois o dispara para a visualização. Para acessar arquivos
diretamente no prompt do ms-dos sem usar o comando load, antes de iniciar o screens escrever o nome
do arquivo desejado depois da palavra screens.

C:\> Screens Nome do Arquivo

Se você usa o parametro XM para suas aplicações, então fazer do mesmo modo, mas colocar o
parametro XM antes da palavra screens.

C:\> xm screens Nome do arquivo.

4.2.5.7 - Gravação de Forms

Para fazer a gravação de um form no screens, deve-se usar o comando save, pressionando as teclas
ALT + F4.

FromSoft – Todos os direitos reservados – http://www.fromsoft.com.br Página 45


Curso de Cobol Básico

+----------------------------------------------------------------------------------+
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
|Save form-----Attribute--------------------------Row:01-Col:01-Ins-Caps-Num-Scroll|
|F1=help F2=directory Escape |
|File C:\ _-+ |Ctrl|
+----------------------------------------------------------------------------------+

Após isto, deve-se informar a unidade, o diretório e o nome do form a ser gravado. Feito estas
operações ele irá salvar o arquivo com extensão .srn (*.screen). Este arquivo é o arquivo criado para a
visualização do desenvolvedor. Este arquivo não é lido pelo programa cobol. A partir desta visualização
que é criado o arquivo que é lido pelo compilador.

4.2.5.8 - Geração de arquivos (copybooks) para uso na Screen Section

Para a geração do arquivo Screen Section (*.ss), deve-se ter já o arquivo criado e salvo (*.srn). Após
isto deve-se usar o comando Generate COBOL pressionando a tecla ALT + F5
+----------------------------------------------------------------------------------+
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
|Generate COBOL-Attribute-------------------------Row:01-Col:01-Ins-Caps-Num-Scroll|
|F1=help F2=directory Escape |
|File C:\ _-+ Ctrl|
+----------------------------------------------------------------------------------+

A geração do arquivo *.ss (screen section) é destinado para a leitura e visualização do compilador
Cobol. Ele gera o arquivo *.ss e este arquivo *.ss são as linhas e colunas já declaradas e escritas pelo
Screens. Este arquivo deve ser inserido na Screen Section com a instrução: Copy + nome do form +
extensão. E deve ser disparado usando o comando DISPLAY + NOME DO FORM na Procedure
Division

Detalhe Importante: Caso você não tenha determinado um nome para o seu form, o screens
automaticamente o batizará de G-(nome-do-arquivo-screen)

IDENTIFICATION DIVISION.

FromSoft – Todos os direitos reservados – http://www.fromsoft.com.br Página 46


Curso de Cobol Básico

ENVIRONMENT DIVISION.
DATA DIVISION.
WORKING STORAGE SECTION.
SCREEN SECTION.
COPY "TESTE.SS".
PROCEDURE DIVISION.
DISPLAY G-TESTE.

Depois da geração do arquivo ScreenSection, ele oferece opções de escolha de geração:

ALT+F5+F2 - Data Descriptions - Gera o arquivo *.ss unicamente


ALT+F5+F3 - Skeleton Program - Cria um arquivo .cbl especialmente para o form, e ou um arquivo
de working storage section (.wks)
ALT+F5+F4 - Monochrome/Color - Gera um form com monitor monocromático ou colorido
ALT+F5+F5 - Index-Program - Gera um arquivo indexado ISAM.

4.2.5.9 - Resumo do Screens - procedimentos básicos para criação de Forms (telas):

1 – Acessar o Screens
2 – Informar o nome da tela
3 – Definir cores que a tela irá possuir (cor de frente e fundo)
4 – Desenhar a tela:
Selecionar linha simples ou dupla
Escolher atributos de cores
Moldar a tela (iniciar o desenho)
5 – Gravação da tela
6 – Geração do Arquivo SCREEN (SRN)
7 – Geração do Arquivo ScreenSection(SS)
6 – Inclusão do COPY da tela no programa Cobol.

4.2.5.10 - Executando no Screens, passo a passo:

1 – Digitar no Prompt do MS-DOS o comando: XM SCREENS ou então SCREENS


2 – Pressionar ALT + F10 para escolher o nome da tela
3 – Pressionar ALT + F9 para escolher as cores que a tela irá possuir.
4 – Pressionar F7 para definir a cor de fundo padrão.
5 – Pressionar F2, F3, F4, F5 ou F6, para definir cor de letra e cor de fundo de cada caracter. Para sair
do modo de escolha, pressione ESC
6 – Pressionar CTRL + F6 para fazer bordas em sua tela se necessário. Se não for necessario desenhe
os outros atributos de tela para o usuario, como nome, endereço, telefone, etc. Caso seja necessário
desenhar bordas, pressionar uma única vez F2, aciona o modo de desenho com o cursor. Pressionando
outra vez F2, aciona o modo de limpeza com o cursor, pressionando mais uma vez F2, aciona o modo
de movimentação com o cursor. F3 permite desenhar tanto linhas simples quanto linhas duplas. F4
permite fazer a escolha das cores selecionadas na paleta de atributos (ALT + F9)
7 – Pressionar ALT + F4 para salvar um arquivo. Este arquivo será salvo com extensão *.srn (Arquivo
Screen – Arquivo Tela). Este arquivo é a tela que será visualizada pelo usuário e que o screens vai
mostrar na hora que você estiver desenhando sua tela.
8 – Pressione ALT + F5 para gerar o código COBOL. Caso você queira limpar a tela antes que ela seja
exibida, pressione F6 e habilite-o usando on, caso não queira, pressione F6 e habilite-o usando off.
Depois, pressionar F2 para criar o arquivo (*.ss - Screen Section) unicamente.
9 – Inserir o form no programa que irá usar a mesma, usando o comando COPY, na Screen Section.
Para mostrar o form na tela, usar a declaração DISPLAY + nome da tela.

FromSoft – Todos os direitos reservados – http://www.fromsoft.com.br Página 47


Curso de Cobol Básico

Lição 4 - Exemplo 1
IDENTIFICATION DIVISION.
PROGRAM-ID. L04EX01.
AUTHOR. FROMSOFT.
WORKING-STORAGE SECTION.
77 PARA PIC XX VALUE SPACES.
SCREEN SECTION.
01 TELA.
03 BLANK SCREEN BACKGROUND-COLOR 1 FOREGROUND-COLOR 7.
05 LINE 02 COLUMN 24 VALUE "CADASTRO DE CLIENTES".
05 LINE 05 COLUMN 10 VALUE "NOME...............:".
PROCEDURE DIVISION.
DISPLAY TELA.
ACCEPT PARA AT 2479 WITH AUTO NO-ECHO.
STOP RUN.

Lição 4 - Exemplo 2
IDENTIFICATION DIVISION.
PROGRAM-ID. L04EX02.
AUTHOR. FROMSOFT.
ENVIRONMENT DIVISION.
CONFIGURATION SECTION.
SPECIAL-NAMES.
DECIMAL-POINT IS COMMA.
DATA DIVISION.
WORKING-STORAGE SECTION.
77 NOME PIC X(30) VALUE SPACES.
77 RUA PIC X(30) VALUE SPACES.
77 NUMERO-NUMERICO PIC 9(05) VALUE ZEROS.
77 NUMERO-MASCARA PIC Z(05) VALUE SPACES.
77 COMPLEMENTO PIC X(20) VALUE SPACES.
77 BAIRRO PIC X(20) VALUE SPACES.
77 TELEFONE PIC X(15) VALUE SPACES.
77 TECLA PIC X(02) VALUE SPACES.
01 DATA-SISTEMA.
03 ANO PIC 9(02) VALUE ZEROS.
03 MES PIC 9(02) VALUE ZEROS.
03 DIA PIC 9(02) VALUE ZEROS.
SCREEN SECTION.
01 TELA.
03 BLANK SCREEN BACKGROUND-COLOR 1 FOREGROUND-COLOR 7.
05 LINE 02 COLUMN 24 VALUE "CADASTRO DE CLIENTES".
05 LINE 05 COLUMN 10 VALUE "NOME...............:".
05 LINE 07 COLUMN 10 VALUE "ENDERECO...........:".
05 LINE 08 COLUMN 17 VALUE "RUA.........:".
05 LINE 09 COLUMN 17 VALUE "NUMERO......:".
05 LINE 10 COLUMN 17 VALUE "COMPLEMENTO.:".
05 LINE 11 COLUMN 17 VALUE "BAIRRO......:".
05 LINE 17 COLUMN 10 VALUE "TELEFONE...........: -".
PROCEDURE DIVISION.
DISPLAY TELA.
INITIALIZE NUMERO-MASCARA.
ACCEPT DATA-SISTEMA FROM DATE.
DISPLAY DIA AT 0260.
DISPLAY "/" AT 0262.
DISPLAY "/" AT 0262.
DISPLAY MES AT 0263.
DISPLAY "/" AT 0265.
DISPLAY ANO AT 0266.
PEGA-NOME.
ACCEPT NOME AT 0530 WITH PROMPT UPPER.
ACCEPT TECLA FROM ESCAPE KEY
IF TECLA EQUAL "01"
THEN
GO TO FIM
END-IF.
IF NOME EQUAL SPACES
THEN
GO TO PEGA-NOME
END-IF.
PEGA-RUA.
ACCEPT RUA AT 0830 WITH PROMPT.

FromSoft – Todos os direitos reservados – http://www.fromsoft.com.br Página 48


Curso de Cobol Básico

ACCEPT TECLA FROM ESCAPE KEY


IF TECLA EQUAL "01"
THEN
GO TO PEGA-NOME
END-IF.
IF RUA EQUAL SPACES
THEN
GO TO PEGA-RUA
END-IF.
PEGA-NUMERO.
ACCEPT NUMERO-MASCARA AT 0930 WITH AUTO-SKIP.
ACCEPT TECLA FROM ESCAPE KEY
IF TECLA EQUAL "01"
THEN
GO TO PEGA-RUA
END-IF.
MOVE NUMERO-MASCARA TO NUMERO-NUMERICO
IF NUMERO-NUMERICO EQUAL ZEROS
THEN
GO TO PEGA-NUMERO
END-IF.
PEGA-COMPLEMENTO.
ACCEPT COMPLEMENTO AT 1030 WITH PROMPT
IF TECLA EQUAL "01"
THEN
GO TO PEGA-NUMERO
END-IF.
IF COMPLEMENTO EQUAL SPACES
THEN
GO TO PEGA-COMPLEMENTO
END-IF.
PEGA-BAIRRO.
ACCEPT BAIRRO AT 1130 WITH PROMPT
IF TECLA EQUAL "01"
THEN
GO TO PEGA-COMPLEMENTO
END-IF.
IF BAIRRO EQUAL SPACES
THEN
GO TO PEGA-BAIRRO
END-IF.
PEGA-TELEFONE.
ACCEPT TELEFONE AT 1730 WITH PROMPT
IF TECLA EQUAL "01"
THEN
GO TO PEGA-BAIRRO
END-IF.
IF TELEFONE EQUAL SPACES
THEN
GO TO PEGA-TELEFONE
END-IF.
FIM.
DISPLAY " " AT 0101 WITH BACKGROUND-COLOR 1
FOREGROUND-COLOR 7 HIGHLIGHT
STOP RUN.

Lição 4 - Exercícios

1 - Criar o programa PROG10.CBL a partir do PROG09.CBL, agora utilizando Screen Section, ou seja
declarando cada variável na SCREEN SECTION. (BLANK SCREEN, LINE, COLUMN).

2 - Criar o programa PROG11.CBL a partir do PROG10.CBL, agora utilizando a mesma tela, mas a que
foi criada no SCREENS.

3 - Montar a tela abaixo no SCREENS, gerar o código Cobol para a Screen Section e modificar o
PROG11.CBL, criando o programa PROG12.CBL para trabalhar com essa Screen, criando os campos
correspondentes aos dados mostrados na tela.
+------------------------------------------------------------------------------+
¦______________________________________________________________________________¦
¦______________________+---------------------------+___________________________¦
¦______________________¦ CADASTRO DE CANDIDATOS ¦_____Data: 99/99/99________¦

FromSoft – Todos os direitos reservados – http://www.fromsoft.com.br Página 49


Curso de Cobol Básico

¦______________________+---------------------------+____ Hora: 99:99 ________¦


¦______________________________________________________________________________¦
¦_+--------------------------------------------------------------------------+_¦
¦_¦ Nome.........: XXXXXXXXXXXXXXXXXXXXXXXXXXXXXX Estado...: XX ¦_¦
¦_¦ Rua..........: XXXXXXXXXXXXXXXXXXXXXXXXXXXXXX CPF......: XXXXXXXXXXXXXXX ¦_¦
¦_¦ Numero.......: 99999 Ident....: XXXXXXXXXXXXXXX ¦_¦
¦_¦ Complemento..: XXXXXXXXXX Filial...: XXXXXXXXXXXXXXX ¦_¦
¦_¦ Bairro.......: XXXXXXXXXXXXXXXXXXXX Admissão.: 99/99/99 ¦_¦
¦_¦ Salario......: 999999V99 Sexo.....: X ¦_¦
¦_¦ Data Nasci...: 99/99/99 Horas/dia: 99 ¦_¦
¦_¦ Data Pagam...: 99/99/99 Telefone.: XXXXXXXXXXXXXXX ¦_¦
¦_¦ Escolaridade.: XXXXXXXXXXXXXXXXXXXX ¦_¦
¦_¦ Naturalidade.: XXXXXXXXXXXXXXXXXXXX ¦_¦
¦_¦ Nacionalidade: XXXXXXXXXXXXXXXXXXXX ¦_¦
¦_+--------------------------------------------------------------------------+_¦
¦______________________________________________________________________________¦
¦______________________________________________________________________________¦
¦------------------------------------------------------------------------------¦
¦ Mensagens: XXXXXXXXXXXXXXXXXXXXXXXXXXXXXX ESC - Voltar/Sair ¦
+------------------------------------------------------------------------------+

Obs.: O PROG13.CBL deverá ter como atributos necessários


- Tela de fundo Azul (Fundo de tela)
- Tela de fonte Branca (Cor da Letra)
- Usar linhas simples.
- A Tela deve ser criada ate a linha 24, deve-se deixar a linha 25 em branco, pois é uma linha de
prompt do Ms-Dos/Unix.
- Veja que na tela, tem um quadrado, com os dados a serem digitados. Fora deste quadro, no
screens, quando for desenhar a tela, use o Caracter 176/B0h pressionando as teclas CTRL+F4
(Avancar Caracteres) ou CTRL+F3 (Retornar Caracteres) você vai encontrar o caracter desejado
olhando a sua esquerda e para desenha-lo na tela, pressione CTRL + F5. É facultativo este
preenchimento de tela.
- Na Linha mensagens, ao dar o accept no campo, mostre antes uma descrição do campo a ser
digitado.
- Data e hora do sistema operacional
- Máscaras de edição para as variáveis numéricas.
- Inicialização de variáveis, para não dar erros de variáveis de máscara de edição
- Validação de todos os campos.
- Validação da tecla ESC para todos os campos, se for usado a tecla ESC no campo nome ele sai do
programa, caso contrário, volta para o campo anterior.

FromSoft – Todos os direitos reservados – http://www.fromsoft.com.br Página 50


Curso de Cobol Básico

Lição 5

Lição 5 - Conceitos

5.1 - Comando ADD

Conceito: Através deste comando podemos somar dois ou mais itens numéricos e armazenar o
resultado. São dois os formatos possíveis para este comando:

1º Formato: ADD <valor-1> TO <valor-2>

Neste formato, os itens <valor-1> e <valor-2> são somados e o resultado é armazenado em (valor-2) .

2º Formato : ADD <valor-1> TO <valor-2> GIVING <resultado>

Neste formato, <valor-1> é somado a <valor-2> e o resultado é armazenado na variável indicada por
<resultado>, devido ao atributo GIVING, presente no comando.

IDENTIFICATION DIVISION.
PROGRAM-ID. L05EX01.
ENVIRONMENT DIVISION.
SPECIAL-NAMES.
DECIMAL-POINT IS COMMA.
DATA DIVISION.
WORKING-STORAGE SECTION.
77 VALOR-1 PIC 9(05) VALUE ZEROS.
77 VALOR-2 PIC 9(05) VALUE ZEROS.
77 CONTADOR PIC 9(05) VALUE 10.
77 CONTADOR-ED PIC Z(05) VALUE ZEROS.
77 RESULTADO PIC Z(05) VALUE ZEROS.
PROCEDURE DIVISION.
MOVE 1 TO VALOR-1.
MOVE 2 TO VALOR-2.
ADD 1 TO CONTADOR.
ADD VALOR-1 TO VALOR-2 GIVING RESULTADO.
DISPLAY RESULTADO AT 1015.
MOVE CONTADOR TO CONTADOR-ED.
DISPLAY CONTADOR-ED AT 1115.
STOP RUN.

5.2 - Comando SUBTRACT

Conceito: Com este comando podemos subtrair dois ou mais itens numéricos e armazenar o resultado.

1º Formato: SUBTRACT <valor-2> FROM <valor-1>

Neste formato, o item <valor-2> e subtraído de <valor-1> e o resultado é armazenado em <valor-1>.

2º Formato: SUBTRACT <valor-2> FROM <valor-1> GIVING <resultado>

Neste formato, <valor-1> é subtraído de <valor-2> e o resultado é armazenado na variável indicada por
<resultado>. GIVING indica para a operação que o resultado será copiado para a variável posterior, no
caso, Resultado.

IDENTIFICATION DIVISION.
PROGRAM-ID. L05EX02.
ENVIRONMENT DIVISION.
SPECIAL-NAMES.
DECIMAL-POINT IS COMMA.
DATA DIVISION.
WORKING-STORAGE SECTION.
77 VALOR-1 PIC 9(05) VALUE ZEROS.
77 VALOR-2 PIC 9(05) VALUE ZEROS.
77 CONTADOR PIC 9(05) VALUE 10.
77 CONTADOR-ED PIC Z(05) VALUE ZEROS.
77 RESULTADO PIC Z(05) VALUE ZEROS.

FromSoft – Todos os direitos reservados – http://www.fromsoft.com.br Página 51


Curso de Cobol Básico

PROCEDURE DIVISION.
MOVE 1 TO VALOR-1.
MOVE 2 TO VALOR-2.
SUBTRACT VALOR-2 FROM VALOR-1 GIVING RESULTADO
SUBTRACT 1 FROM CONTADOR.
DISPLAY RESULTADO AT 1015.
MOVE CONTADOR TO CONTADOR-ED.
DISPLAY CONTADOR-ED AT 1115.
STOP RUN.

5.3 - Comando MULTIPLY

Conceito: Permite a multiplicação de dois itens numéricos:

MULTIPLY <valor-1> BY <valor-2> GIVING <resultado> [ROUNDED]

Onde: <valor-1> é multiplicado por <valor-2> e o resultado é armazenado na variável <resultado>. Se for
utilizado ROUNDED o resultado será arredondado para menos.

IDENTIFICATION DIVISION.
PROGRAM-ID. L05EX03.
ENVIRONMENT DIVISION.
SPECIAL-NAMES.
DECIMAL-POINT IS COMMA.
DATA DIVISION.
WORKING-STORAGE SECTION.
77 VALOR-1-ED PIC Z(05) VALUE ZEROS.
77 VALOR-2-ED PIC ZZ9,99.
77 VALOR-1 PIC 9(05) VALUE ZEROS.
77 VALOR-2 PIC 999V99 VALUE ZEROS.
77 CONTADOR PIC 9(05) VALUE 10.
77 CONTADOR-ED PIC Z(05) VALUE ZEROS.
77 RESULTADO PIC ZZ9,99.
PROCEDURE DIVISION.
MOVE 1 TO VALOR-1-ED
MOVE 0,5 TO VALOR-2-ED
MOVE VALOR-1-ED TO VALOR-1
MOVE VALOR-2-ED TO VALOR-2
MULTIPLY VALOR-1 BY VALOR-2 GIVING RESULTADO
MULTIPLY 2 BY CONTADOR
DISPLAY RESULTADO AT 1015.
MOVE CONTADOR TO CONTADOR-ED.
DISPLAY CONTADOR-ED AT 1115.
STOP RUN.

Valor do Resultado: 0,5.

IDENTIFICATION DIVISION.
PROGRAM-ID. L05EX04.
ENVIRONMENT DIVISION.
SPECIAL-NAMES.
DECIMAL-POINT IS COMMA.
DATA DIVISION.
WORKING-STORAGE SECTION.
77 VALOR-1-ED PIC Z(05) VALUE ZEROS.
77 VALOR-2-ED PIC ZZ9,999.
77 VALOR-1 PIC 9(05) VALUE ZEROS.
77 VALOR-2 PIC 999V999 VALUE ZEROS.
77 CONTADOR PIC 9(05) VALUE 10.
77 CONTADOR-ED PIC Z(05) VALUE ZEROS.
77 RESULTADO PIC 999V999 VALUE ZEROS.
77 RESULTADO-ARRED PIC 999V999 VALUE ZEROS.
77 RESULTADO-ED PIC ZZ9,999.
77 RESULTADO-ED-ARRED PIC ZZ9,999.
PROCEDURE DIVISION.
INITIALIZE RESULTADO RESULTADO-ARRED.
MOVE 2 TO VALOR-1-ED
MOVE 0,796 TO VALOR-2-ED
MOVE VALOR-1-ED TO VALOR-1
MOVE VALOR-2-ED TO VALOR-2
MULTIPLY VALOR-1 BY VALOR-2 GIVING RESULTADO
MOVE RESULTADO TO RESULTADO-ED.

FromSoft – Todos os direitos reservados – http://www.fromsoft.com.br Página 52


Curso de Cobol Básico

DISPLAY "Resultado Normal" AT 1015 RESULTADO-ED.


MULTIPLY VALOR-1 BY VALOR-2 GIVING RESULTADO-ARRED ROUNDED.
MOVE RESULTADO-ARRED TO RESULTADO-ED-ARRED.
DISPLAY "Resultado Arredondado" AT 1115 RESULTADO-ED-ARRED.
MULTIPLY 2 BY CONTADOR
MOVE CONTADOR TO CONTADOR-ED.
DISPLAY "Contador" AT 1215 CONTADOR-ED.
STOP RUN.

Valor do Resultado: 1,592


Valor do Resultado Arredondado: 1,592.

5.4 - Comando DIVIDE

Conceito: Permite a divisão de dois itens numéricos:

DIVIDE <valor-1> BY <valor-2> GIVING <resultado> [REMAINDER <resto>]

Onde: <valor-1> é dividido por <valor-2> e o resultado é armazenado na variável <resultado>. Se for
utilizado REMAINDER a variável <resultado> receberá só o valor inteiro e a variável <resto> receberá o
resto da divisão.

IDENTIFICATION DIVISION.
PROGRAM-ID. L05EX05.
ENVIRONMENT DIVISION.
SPECIAL-NAMES.
DECIMAL-POINT IS COMMA.
DATA DIVISION.
WORKING-STORAGE SECTION.
77 VALOR-1-ED PIC Z(05) VALUE ZEROS.
77 VALOR-2-ED PIC ZZ9,999.
77 VALOR-1 PIC 9(05) VALUE ZEROS.
77 VALOR-2 PIC 999V999 VALUE ZEROS.
77 CONTADOR PIC 9(05) VALUE 10.
77 CONTADOR-ED PIC Z(05) VALUE ZEROS.
77 RESULTADO PIC 999V999 VALUE ZEROS.
77 RESULTADO-ED PIC ZZ9,999.
PROCEDURE DIVISION.
INITIALIZE RESULTADO.
MOVE 1 TO VALOR-1-ED
MOVE 0,5 TO VALOR-2-ED
MOVE VALOR-1-ED TO VALOR-1
MOVE VALOR-2-ED TO VALOR-2
DIVIDE VALOR-1 BY VALOR-2 GIVING RESULTADO
MOVE RESULTADO TO RESULTADO-ED.
DISPLAY RESULTADO-ED AT 1015.
DIVIDE 2 BY CONTADOR GIVING CONTADOR.
MOVE CONTADOR TO CONTADOR-ED.
DISPLAY CONTADOR-ED AT 1215.
STOP RUN.

O Valor da variável RESULTADO será 2.

FromSoft – Todos os direitos reservados – http://www.fromsoft.com.br Página 53


Curso de Cobol Básico

5.4.1 - Clausula ON SIZE ERROR.

Conceito: A Cláusula ON SIZE ERROR é usada quando há erro na divisão. Ex: Divisao por
zeros. Ela e usada depois do divide. Existe tambem a clausula NOT ON SIZE ERROR, que e usada
quando nao ha erro na divisao.

IDENTIFICATION DIVISION.
PROGRAM-ID. L05EX06.
ENVIRONMENT DIVISION.
SPECIAL-NAMES.
DECIMAL-POINT IS COMMA.
DATA DIVISION.
WORKING-STORAGE SECTION.
77 VALOR-1-ED PIC Z(05) VALUE ZEROS.
77 VALOR-2-ED PIC ZZ9,999.
77 VALOR-1 PIC 9(05) VALUE ZEROS.
77 VALOR-2 PIC 999V999 VALUE ZEROS.
77 CONTADOR PIC 9(05) VALUE 10.
77 CONTADOR-ED PIC Z(05) VALUE ZEROS.
77 RESULTADO PIC 999V999 VALUE ZEROS.
77 RESULTADO-ED PIC ZZ9,999.
77 RESTO PIC 9(05) VALUE ZEROS.
PROCEDURE DIVISION.
INITIALIZE RESULTADO-ED VALOR-2-ED.
MOVE 1 TO VALOR-1-ED
MOVE 0,5 TO VALOR-2-ED
MOVE VALOR-1-ED TO VALOR-1
MOVE VALOR-2-ED TO VALOR-2
DIVIDE VALOR-1 BY VALOR-2 GIVING RESULTADO REMAINDER RESTO
MOVE RESULTADO TO RESULTADO-ED.
DISPLAY "Resultado" AT 1015 RESULTADO-ED.
DISPLAY "Resto " AT 1115 RESTO.
DIVIDE 50 BY CONTADOR GIVING CONTADOR
ON SIZE ERROR
DISPLAY "CONTADOR NAO PODE SER IGUAL A ZERO"
NOT ON SIZE ERROR
MOVE CONTADOR TO CONTADOR-ED
END-DIVIDE.
DISPLAY "Contador " AT 1215 CONTADOR-ED.
STOP RUN.

O Valor da variável RESULTADO será 2 e o resto da divisão (1) será lançado na variável RESTO.

5.5 - Comando COMPUTE

Conceito: Esta declaração associa um ou mais itens ao valor de uma expressão aritmética.

IDENTIFICATION DIVISION.
PROGRAM-ID. L05EX07.
ENVIRONMENT DIVISION.
SPECIAL-NAMES.
DECIMAL-POINT IS COMMA.
DATA DIVISION.
WORKING-STORAGE SECTION.
77 VALOR-1-ED PIC Z(05) VALUE ZEROS.
77 VALOR-2-ED PIC ZZ9,999.
77 VALOR-1 PIC 9(05) VALUE ZEROS.
77 VALOR-2 PIC 999V999 VALUE ZEROS.
77 CONTADOR PIC 9(05) VALUE 10.
77 CONTADOR-ED PIC Z(05) VALUE ZEROS.
77 RESULTADO PIC 999V999 VALUE ZEROS.
77 RESULTADO-ED PIC ZZ9,999.
PROCEDURE DIVISION.
INITIALIZE RESULTADO-ED VALOR-2-ED.
MOVE 1 TO VALOR-1-ED
MOVE 0,5 TO VALOR-2-ED
MOVE VALOR-1-ED TO VALOR-1
MOVE VALOR-2-ED TO VALOR-2
COMPUTE RESULTADO = VALOR-1 / VALOR-2.
MOVE RESULTADO TO RESULTADO-ED.
DISPLAY "Resultado" AT 1015 RESULTADO-ED.

FromSoft – Todos os direitos reservados – http://www.fromsoft.com.br Página 54


Curso de Cobol Básico

COMPUTE CONTADOR = 50 / CONTADOR


MOVE CONTADOR TO CONTADOR-ED.
DISPLAY "Contador " AT 1215 CONTADOR-ED.
STOP RUN.

5.6 - Considerações sobre cálculos

Conceitos: as operações só podem ser executadas com campos numéricos. Além disso, encontramos
algumas observações importantes:
• As várias cláusulas USAGE que definem campos numéricos, permitem-nos trabalhar com variáveis
adequadas para cada situação, por exemplo, a USAGE COMP é mais adequada para declaração
de índices, enquanto que COMP-3 otimiza o armazenamento em arquivos, etc.
• Quando necessitamos usar variáveis que permitirão armazenar valores positivos e negativos, estas
variáveis devem ser declaradas do seguinte modo:
• Variável numérica normal: adicionar um “S” a sua declaração, sendo que ele ocupa uma
posição como um campo normal. Ex.:

77 VARIAVEL-NEGATIVA PIC S9(09)V99.


ou
77 VARIAVEL-NEGATIVA PIC 9(09)V99S.

• Variável com Máscara de Edição: deve-se adicionar um "-" a sua declaração,


sendo que ele ocupa uma posição como um campo normal. Ex.:
77 VARIAVEL-MASCARA-NEGATIVA PIC -ZZ.ZZZ.ZZ9,99
ou
77 VARIAVEL-MASCARA-NEGATIVA PIC ZZ.ZZZ.ZZ9,99-

Lição 5 - Exemplo 1
IDENTIFICATION DIVISION.
PROGRAM-ID. L05EX08.
AUTHOR. FROMSOFT.
ENVIRONMENT DIVISION.
CONFIGURATION SECTION.
SPECIAL-NAMES.
DECIMAL-POINT IS COMMA.
WORKING-STORAGE SECTION.
77 VARIAVEL-NUMERICA-NEGATIVA PIC S9(08)V99.
77 VARIAVEL-MASCARA-NEGATIVA PIC -Z.ZZZ.ZZ9,99.
PROCEDURE DIVISION.
display " " at 0101 with erase eos.
DISPLAY "Digite um numero seja ele positivo ou negativo".
DISPLAY "Caso queira digitar numeros negativos use o '-'".
ACCEPT VARIAVEL-MASCARA-NEGATIVA AT 1015
MOVE VARIAVEL-MASCARA-NEGATIVA TO VARIAVEL-NUMERICA-NEGATIVA
MOVE VARIAVEL-NUMERICA-NEGATIVA TO VARIAVEL-MASCARA-NEGATIVA
DISPLAY VARIAVEL-MASCARA-NEGATIVA AT 1115.
STOP RUN.

5.8 - Comando EVALUATE

Conceito: Comando estruturado que permite “avaliar” o conteúdo de uma variável e, através de decisões
múltiplas baseadas no resultado dessa avaliação, executar comandos diferenciados.

EVALUATE OPCAO
WHEN “Valor/Item”
<Comandos>
WHEN OTHER
<Comandos>
END-EVALUATE.

Lição 5 – Exemplo 2
IDENTIFICATION DIVISION.

FromSoft – Todos os direitos reservados – http://www.fromsoft.com.br Página 55


Curso de Cobol Básico

PROGRAM-ID. L05EX09.
ENVIRONMENT DIVISION.
CONFIGURATION SECTION.
SPECIAL-NAMES.
DECIMAL-POINT IS COMMA.
DATA DIVISION.
WORKING-STORAGE SECTION.
77 OPCAO PIC 9 VALUE ZEROS.
77 OPCAO-ED PIC Z.
PROCEDURE DIVISION.
INITIALIZE OPCAO-ED.
INICIO.
DISPLAY "INFORME QUAL OPCAO VOCE QUER MOSTRAR:" AT 1010.
ACCEPT OPCAO-ED AT 1049 WITH AUTO.
MOVE OPCAO-ED TO OPCAO
EVALUATE OPCAO
WHEN 1
DISPLAY "PRIMEIRA OPCAO " AT 1051
WHEN 2
DISPLAY "SEGUNDA OPCAO " AT 1051
WHEN 3
DISPLAY "TERCEIRA OPCAO " AT 1051
WHEN OTHER
GO TO FIM
END-EVALUATE.
STOP "Pressione Enter".
GO TO INICIO.

FIM.
STOP RUN.

Lição 5 - Exemplo 3
WORKING-STORAGE SECTION.
01 CAMPOS-AUXILIARES.
03 MESES PIC 9(02) COMP.
03 ANOS PIC 9(04) COMP.
03 RESULTADO PIC 9(02) COMP.
03 RESTO PIC 9(02) COMP.
03 BISSEXTO PIC X(01).

PROCEDURE DIVISION.
INITIALIZE CAMPOS-AUXILIARES.
ADD 7 TO MESES.
IF MESES GREATER 12
SUBTRACT 12 FROM MESES
ADD 1 TO ANOS.
DIVIDE ANOS BY 4 GIVING RESULTADO REMAINDER RESTO.
IF RESTO = ZERO
MOVE "S" TO BISSEXTO.
DISPLAY "ANO BISSESTO" AT 1015.
STOP RUN.

FromSoft – Todos os direitos reservados – http://www.fromsoft.com.br Página 56


Curso de Cobol Básico

Lição 5 - Exercícios

1 - Usando os comandos ADD, SUBTRACT, DIVIDE E MULTIPLY e o IF, fazer um programa de nome
PROG13.CBL para executar operações aritméticas, com a seguinte tela: Se achar necessário, crie a
lógica de programação com o nome de PROG13.TXT

CALCULOS ARITMETICOS

Digite o 1º Número: -ZZ.ZZZ.ZZ9,99

Digite o 2º Número: -ZZ.ZZZ.ZZ9,99

Opção (+ - / *)...: X

Resultado.........: -ZZ.ZZZ.ZZ9,99

Onde:
- as posições com “A” indicam que o campo deve ser alfabético, com “X” indicam campo alfanumérico,
“9” indicam campo numérico e “Z” campo numérico com supressão de zeros a quantidade de repetições
da letra indica o tamanho do campo. As máscaras de edição devem possuir também atributo de
negatividade, tanto quanto as variáveis numéricas.
- a linha 24 continua sendo a linha de mensagens, ou seja, caso o programa precise enviar uma
mensagem para o operador, deverá utilizar essa linha.
- a operação deve ser executada de acordo com o sinal de operação digitado. Portanto, precisamos
verificar se foi digitado um sinal válido e fazer a operação solicitada pelo sinal com os números
informados.
- Usar mascaras de edição em campos numéricos
- Se o valor de algum resultado for negativo, mostrar o sinal na tela. Deve-se fazer cálculos negativos.
- Deve-se ter o testes das teclas, se o usuário pressionar ESC na Opção, deve-se voltar para a digitação
do segundo número, se o usuário pressionar ESC na Segunda Opção, deve-se voltar para a digitação
do primeiro numero, e se o usuário pressionar ESC na Primeira Opção ele sai do programa
- Apos mostrar o resultado, deve-se parar a tela, e após o usuario pressionar qualquer tecla ele volta
para o inicio do programa, pedindo o primeiro numero.
Dica: Faça a lógica de programação primeiro e depois da lógica pronta, evolua para a programação.

2 - A partir do programa PROG13.CBL, criar o PROG14.CBL, mas usar o COMPUTE ao invés dos
comandos ADD, SUBTRACT, DIVIDE E MULTIPLY e o EVALUATE ao invés do IF.

Obs: Agora na divisão, antes de fazer a divisão você deve fazer o teste do segundo numero. Se ele for
igual a zeros, você mostra a mensagem de erro da divisão, se nao for igual a zeros, você faz a divisão
dos valores. O Motivo disso é que o COMPUTE não possui a clausula ON SIZE ERROR.

FromSoft – Todos os direitos reservados – http://www.fromsoft.com.br Página 57


Curso de Cobol Básico

3 - Usando o IF, criar um Menu com o nome de PROG15.CBL, de documentação com o nome de todos
os programas feitos até agora no curso. Com a seguinte tela:
+------------------------------------------------------------------------------+
¦ ¦
¦ +-------------------+ ¦
¦ ¦ MENU OPCOES ¦ ¦
¦ +-------------------+ ¦
¦ ¦
¦ +------------------------------------------------------------------+ ¦
¦ ¦ 01 - Prog01 02 - Prog02 03 - Prog03 04 - Prog04 05 - Prog05 ¦ ¦
¦ ¦ 06 - Prog06 07 - Prog07 08 - Prog08 09 - Prog09 10 - Prog10 ¦ ¦
¦ ¦ 11 - Prog11 12 - Prog12 13 - Prog13 14 - Prog14 ¦ ¦
¦ +------------------------------------------------------------------+ ¦
¦ ¦
¦ ¦
¦ +--------------+ +----------+ ¦
¦ ¦ ESC - SAIR ¦ ¦ OPCAO: ¦ ¦
¦ +--------------+ +----------+ ¦
¦ ¦
¦ ¦
¦ +--------------------------------------+ ¦
¦ ¦ Programa Chamado: XXXXXXXX.CBL ¦ ¦
¦ +--------------------------------------+ ¦
¦ ¦
¦ ¦
+------------------------------------------------------------------------------+

Cada um com uma determinada opção.

Opção 01 - PROG01.CBL Opção 02 - PROG02.CBL Opção 03 - PROG03.CBL


Opção 04 - PROG04.CBL Opção 05 - PROG05.CBL Opção 06 - PROG06.CBL
Opção 07 - PROG07.CBL Opção 08 - PROG08.CBL Opção 09 - PROG09.CBL
Opção 10 - PROG10.CBL Opção 11 - PROG11.CBL Opção 12 - PROG12.CBL
Opção 13 - PROG13.CBL Opção 14 - PROG14.CBL

- Se o usuário pressionar ESC, ele sai do programa.


- A cada opção que ele escolher ele deve mostrar o nome do programa mais sua extensão (.CBL) no
item PROGRAMA CHAMADO.
- Deve-se fazer todos os testes condicionais usando o EVALUATE.

FromSoft – Todos os direitos reservados – http://www.fromsoft.com.br Página 58


Curso de Cobol Básico

Lição 6

Lição 6 - Conceitos

6 - Estruturas de Repetição

Conceito: Em alguns programas, necessitamos que uma seqüência de comandos sejam


repetidos por um determinado tempo. Estas seqüências são chamadas de estruturas de repetição.
Dentro das estruturas de repetição, fazem parte os laços de repetição e os contadores, as quais
conhecemos no estudo da lógica de programação.

6.1 - Comando PERFORM

Conceito: Equivalente, aos laços de repetição na lógica de programação, este comando


provoca a execução de uma seqüência de comandos declarada sob um nome-de-procedimento, ou
declarada anexo ao comando, e depois continua o fluxo normal do programa após essa execução.

1º Formato: PERFORM <procedimento-1>

Este formato é semelhante as funções existentes na lógica de programação. Nesse formato desviamos
o controle do programa para um trecho específico que, depois de executado, retornará para a linha logo
após o PERFORM.

IDENTIFICATION DIVISION.
PROGRAM-ID. L06EX01.
DATA DIVISION.
WORKING-STORAGE SECTION.
77 NOME PIC X(30) VALUE SPACES.
77 CONTADOR PIC 9(05) VALUE ZEROS.

PROCEDURE DIVISION.
PERFORM PEGA-NOME.
FIM.
STOP RUN.

PEGA-NOME.
DISPLAY "NOME" AT 1015
ACCEPT NOME AT 1020 WITH AUTO.
IF NOME EQUAL SPACES
THEN
GO TO PEGA-NOME
END-IF.

2º Formato: PERFORM <procedimento-1> THRU <procedimento-2>

Neste formato, desviamos o controle do programa para um trecho específico, executando todos os
comandos desde <procedimento-1> até <procedimento-2> (inclusive todos os comandos deste),
retornando para a linha logo após o PERFORM. Estes itens marcados com sinais <procedimento-1> e
<procedimento-2> são representados por procedure-names.

IDENTIFICATION DIVISION.
PROGRAM-ID. L06EX02.
DATA DIVISION.
WORKING-STORAGE SECTION.
77 NOME PIC X(30) VALUE SPACES.
77 CONTADOR PIC 9(05) VALUE ZEROS.

PROCEDURE DIVISION.
PERFORM PEGA-NOME THRU FIM-PEGA-NOME.
FIM.
STOP RUN.

PEGA-NOME.
DISPLAY "NOME" AT 1015
ACCEPT NOME AT 1020 WITH AUTO.
IF NOME EQUAL SPACES

FromSoft – Todos os direitos reservados – http://www.fromsoft.com.br Página 59


Curso de Cobol Básico

THEN
GO TO PEGA-NOME
END-IF.
FIM-PEGA-NOME. EXIT.

3º Formato: PERFORM <procedimento-1> THRU <procedimento-2> <literal> TIMES

Este procedimento é semelhante ao comando REPETIR na lógica de programação. Os procedimentos


são executados um número conhecido de vezes, indicado em <literal>.

IDENTIFICATION DIVISION.
PROGRAM-ID. L06EX03.
DATA DIVISION.
WORKING-STORAGE SECTION.
77 NOME PIC X(30) VALUE SPACES.
77 CONTADOR PIC 9(05) VALUE ZEROS.

PROCEDURE DIVISION.
PERFORM PEGA-NOME THRU FIM-PEGA-NOME 11 TIMES.
FIM.
STOP RUN.

PEGA-NOME.
DISPLAY "NOME" AT 1015
ACCEPT NOME AT 1020 WITH AUTO.
IF NOME EQUAL SPACES
THEN
GO TO PEGA-NOME
END-IF.
FIM-PEGA-NOME. EXIT.

4º Formato: PERFORM <procedimento-1> THRU <procedimento-2> VARYING <variável numérica)>


FROM <valor-1> BY <valor-2> UNTIL <condição>

Este formato é semelhante ao comando PARA, na lógica de programação. Nesse formato, poderíamos
dizer: EXECUTE <procedimento-1> ATÉ <procedimento-2> VARIANDO <variável numérica)> DE
<valor-1> EM <valor-2> ATÉ <condição>

IDENTIFICATION DIVISION.
PROGRAM-ID. L06EX04.
DATA DIVISION.
WORKING-STORAGE SECTION.
77 NOME PIC X(30) VALUE SPACES.
77 CONTADOR PIC 9(05) VALUE ZEROS.

PROCEDURE DIVISION.
PERFORM VARYING CONTADOR FROM 1 BY 1 UNTIL CONTADOR >= 11
PERFORM PEGA-NOME THRU FIM-PEGA-NOME
END-PERFORM.
FIM.
STOP RUN.

PEGA-NOME.
DISPLAY "NOME" AT 1015
ACCEPT NOME AT 1020 WITH AUTO.
IF NOME EQUAL SPACES
THEN
GO TO PEGA-NOME
END-IF.
FIM-PEGA-NOME. EXIT.

Ou Então.

IDENTIFICATION DIVISION.
PROGRAM-ID. L06EX05.
DATA DIVISION.
WORKING-STORAGE SECTION.
77 NOME PIC X(30) VALUE SPACES.
77 CONTADOR PIC 9(05) VALUE ZEROS.

FromSoft – Todos os direitos reservados – http://www.fromsoft.com.br Página 60


Curso de Cobol Básico

PROCEDURE DIVISION.
PERFORM PEGA-NOME THRU FIM-PEGA-NOME VARYING CONTADOR
FROM 1 BY 1 UNTIL CONTADOR >= 11.
FIM.
STOP RUN.

PEGA-NOME.
DISPLAY "NOME" AT 1015
ACCEPT NOME AT 1020 WITH AUTO.
IF NOME EQUAL SPACES
THEN
GO TO PEGA-NOME
END-IF.
FIM-PEGA-NOME. EXIT.

5º Formato: PERFORM <procedimento-1> THRU <procedimento-2> UNTIL <variavel> <condição>


<variavel ou valor>

É equivalente ao comando ENQUANTO na lógica de programação.

IDENTIFICATION DIVISION.
PROGRAM-ID. L06EX06.
DATA DIVISION.
WORKING-STORAGE SECTION.
77 CONTADOR PIC 9(05) VALUE ZEROS.
77 NOME PIC X(30) VALUE SPACES.

PROCEDURE DIVISION.
PERFORM UNTIL CONTADOR >= 11
PERFORM PEGA-NOME THRU FIM-PEGA-NOME
END-PERFORM.
FIM.
STOP RUN.
PEGA-NOME.
DISPLAY "NOME" AT 1015
ACCEPT NOME AT 1020 WITH AUTO.
IF NOME EQUAL SPACES
THEN
GO TO PEGA-NOME
ELSE
ADD 1 TO CONTADOR
END-IF.
FIM-PEGA-NOME. EXIT.

Ou Então

IDENTIFICATION DIVISION.
PROGRAM-ID. L06EX07.
DATA DIVISION.
WORKING-STORAGE SECTION.
77 CONTADOR PIC 9(05) VALUE ZEROS.
77 NOME PIC X(30) VALUE SPACES.

PROCEDURE DIVISION.
PERFORM PEGA-NOME THRU FIM-PEGA-NOME UNTIL CONTADOR >= 11.
FIM.
STOP RUN.
PEGA-NOME.
DISPLAY "NOME" AT 1015
ACCEPT NOME AT 1020 WITH AUTO.
IF NOME EQUAL SPACES
THEN
GO TO PEGA-NOME
ELSE
ADD 1 TO CONTADOR
END-IF.
FIM-PEGA-NOME. EXIT.

Nota: evitar utilizar comandos GO TO dentro de procedimentos que serão executados com comandos
PERFORM, pois, dependendo do procedimento, o programa pode entrar em repetição continua.

FromSoft – Todos os direitos reservados – http://www.fromsoft.com.br Página 61


Curso de Cobol Básico

6.2 - Comando EXIT

Conceito: Esta declaração proporciona o fim de um ou uma série de procedimentos.

IDENTIFICATION DIVISION.
PROGRAM-ID. EXEMPLO.
DATA DIVISION.
WORKING-STORAGE SECTION.
77 NOME PIC X(30) VALUE SPACES.

PROCEDURE-DIVISION.

PERFORM PEGA-NOME THRU FIM-PEGA-NOME.

FIM.
STOP RUN.

PEGA-NOME.
DISPLAY "NOME " AT 2410
ACCEPT NOME AT 0732.
IF NOME EQUAL SPACES
THEN
GO TO PEGA-NOME
END-IF.
FIM-PEGA-NOME. EXIT.

6.3 - Variação de posições de ACCEPT/DISPLAY

Para se numerar e/ou variar uma linha ou coluna durante o ACCEPT/DISPLAY, devemos usar
um laço de repetição que permita variações (PERFORM VARYING). Além disso, o contador deste laço,
deve ser representado pelo valor da linha que está sendo usado para fazer o ACCEPT/DISPLAY das
variáveis do programa.

WORKING-STORAGE SECTION.
77 NOME PIC X(50).
77 LETRA PIC X.
77 TECLA PIC XX VALUE SPACES.

a) Definimos a variável TECLA para usar ACCEPT com ESCAPE KEY, e as variáveis NOME e TECLA
para serem as variáveis de trabalho do programa.
01 P0SICAO.
03 LINHA PIC 9(02) VALUE ZEROS.
03 COLUNA PIC 9(02) VALUE ZEROS.

b) Definimos a variável POSICAO para indicar a linha e a coluna onde deverão ser apresentadas as
variáveis em comandos ACCEPT e DISPLAY
77 PARA-TELA PIC X VALUE SPACES.

c) Definimos a variável PARA-TELA para permitir ao usuário tomar uma decisão.


PROCEDURE DIVISION.
PERFORM VARYING LINHA FROM 1 BY 1 UNTIL CONTADOR <= 11
PERFORM PEGA-NOME THRU FIM-PEGA-NOME
PERFORM PEGA-LETRA THRU FIM-PEGA-LETRA
END-PERFORM.

d) Com os comandos acima, montamos um laço de repetição para fazer a variação da linha da tabela e
mais dois outros laços para pegar e validar o nome digitado pelo usuário. Como o laço será variado 10
vezes, será recolhido 10 nomes e 10 letras.
FIM.
DISPLAY SPACES AT 0101 WITH ERASE EOS BACKGROUND-COLOR 0 FOREGROUND-COLOR 7.
STOP RUN.
PEGA-NOME.
MOVE 05 TO COLUNA
DISPLAY ”DIGITE SEU NOME” AT POSICAO

FromSoft – Todos os direitos reservados – http://www.fromsoft.com.br Página 62


Curso de Cobol Básico

MOVE 25 TO COLUNA
ACCEPT NOME AT POSICAO WITH AUTO UPPER PROMPT
ACCEPT TECLA FROM ESCAPE KEY
IF TECLA EQUAL “01”
GO TO FIM.
IF NOME EQUAL SPACES
GO TO PEGA-NOME
END-IF.
FIM-PEGA-NOME. EXIT.

PEGA-LETRA.
MOVE 57 TO COLUNA
DISPLAY “DIGITE UMA LETRA” AT POSICAO
MOVE 75 TO COLUNA
ACCEPT LETRA AT POSICAO WITH AUTO UPPER
ACCEPT TECLA FROM ESCAPE KEY
IF TECLA EQUAL “01”
GO TO FIM.
IF LETRA EQUAL SPACES
GO TO PEGA-LETRA
END-IF.
FIM-PEGA-LETRA. EXIT.

e) Com os comandos acima, montamos um procedure-name para variar a linha e a coluna de


posicionamento para a exibição do nome digitado pelo usuário. A variável POSICAO é a responsável
pela variação da linha e a coluna dos valores mostrados. Ela é um item grupo com dois dígitos para a
linha e dois dígitos para a coluna, então quando é usado um comando, o valor que está em
posição(LINHA/COLUNA) é mostrado em tela. Deduz-se que além de estar variando a ocorrência da
tabela, esta variando também a linha, de um em um, aonde será mostrado o nome.

Lição 6 - Exemplo 1
IDENTIFICATION DIVISION.
PROGRAM-ID. L06EX09.
ENVIRONMENT DIVISION.
CONFIGURATION SECTION.
SPECIAL-NAMES.
DECIMAL-POINT IS COMMA.
DATA DIVISION.
WORKING-STORAGE SECTION.
77 MES-ATUAL PIC 9(02) VALUE ZEROS.
77 SALARIO-MES PIC 9(05)V99.
77 SALARIO-MEDIO PIC 9(05)V99.
77 INDICE-MES PIC 9(02) COMP VALUE ZEROS.
77 SALARIO-ED PIC ZZZ.ZZ9,99.
77 MES-ATUAL-ED PIC Z(05).
PROCEDURE DIVISION.
INITIALIZE SALARIO-ED MES-ATUAL-ED.
APURACAO-SALARIO.
PERFORM VARYING INDICE-MES FROM 1 BY 1 UNTIL INDICE-MES >= 13
PERFORM PEGA-DADOS THRU FIM-PEGA-DADOS
IF MES-ATUAL EQUAL ZEROS
THEN
PERFORM FINALIZA-PROGRAMA
ELSE
PERFORM ACUMULA-MES THRU FIM-ACUMULA-MES
END-IF
END-PERFORM.
PERFORM CALCULA-MEDIA THRU FIM-CALCULA-MEDIA.

FINALIZA-PROGRAMA.
STOP RUN.

PEGA-DADOS.
DISPLAY "Mes Atual" at 1005
ACCEPT MES-ATUAL-ED AT 1015 WITH AUTO
MOVE MES-ATUAL-ED TO MES-ATUAL
DISPLAY "Salario:" at 1105
INITIALIZE SALARIO-ED
ACCEPT SALARIO-ED AT 1115 WITH AUTO
MOVE SALARIO-ED TO SALARIO-MES
DISPLAY "Salario Medio por Mes:" at 1205
INITIALIZE SALARIO-ED

FromSoft – Todos os direitos reservados – http://www.fromsoft.com.br Página 63


Curso de Cobol Básico

ACCEPT SALARIO-ED AT 1228 WITH AUTO


MOVE SALARIO-ED TO SALARIO-MEDIO.
FIM-PEGA-DADOS. EXIT.

ACUMULA-MES.
ADD SALARIO-MES TO SALARIO-MEDIO.
FIM-ACUMULA-MES. EXIT.

CALCULA-MEDIA.
COMPUTE SALARIO-MEDIO = SALARIO-MEDIO / MES-ATUAL.
FIM-CALCULA-MEDIA. EXIT.

Lição 6 - Exemplo 2

IDENTIFICATION DIVISION.
PROGRAM-ID. L06EX08.
ENVIRONMENT DIVISION.
CONFIGURATION SECTION.
SPECIAL-NAMES.
DECIMAL-POINT IS COMMA.
WORKING-STORAGE SECTION.
77 SALARIO-MES-ED PIC ZZZ.ZZ9,99.
77 SALARIO-MES PIC 9(05)V99.
PROCEDURE DIVISION.
INITIALIZE SALARIO-MES.
PERFORM PEGA-SALARIO THRU FIM-PEGA-SALARIO 13 TIMES.
FIM.
DISPLAY SPACES AT 0101 WITH BACKGROUND-COLOR 0
FOREGROUND-COLOR 7.
STOP RUN.
PEGA-SALARIO.
DISPLAY "DIGITE O SALARIO" AT 1015.
ACCEPT SALARIO-MES-ED AT 1050 WITH AUTO
MOVE SALARIO-MES-ED TO SALARIO-MES
IF SALARIO-MES EQUAL ZEROS
GO TO PEGA-SALARIO
END-IF.
FIM-PEGA-SALARIO. EXIT.

Lição 6 - Exemplo 3

WORKING-STORAGE SECTION.
77 NOME-FUNCIONARIO PIC X(20) VALUE SPACES.
77 TECLA PIC X(01) VALUE SPACES.
77 PAGINA PIC 9(02) VALUE ZEROS.
01 POSICAO.
02 LINHA PIC 9(02) VALUE ZEROS.
02 COLUNA PIC 9(02) VALUE ZEROS.

PROCEDURE DIVISION.
DISPLAY SPACES AT 0101 WITH BACKGROUND-COLOR 1
FOREGROUND-COLOR 7.
PERFORM VARYING PAGINA FROM 1 BY 1 UNTIL PAGINA >= 10
PERFORM VARYING LINHA FROM 1 BY 1 UNTIL LINHA >= 11
PERFORM PEGA-NOME THRU FIM-PEGA-NOME
PERFORM MOSTRA-NOME THRU FIM-MOSTRA-NOME
END-PERFORM
END-PERFORM.

FINALIZA-PROGRAMA.
DISPLAY SPACES AT 0101 WITH BACKGROUND-COLOR 0
FOREGROUND-COLOR 7.
STOP RUN.

PEGA-NOME.
MOVE 05 TO COLUNA
DISPLAY "Nome: " at POSICAO
MOVE 15 TO COLUNA
ACCEPT NOME-FUNCIONARIO AT POSICAO
ACCEPT TECLA FROM ESCAPE KEY
IF TECLA EQUAL 01
SUBTRACT 1 FROM LINHA
GO TO PEGA-NOME
END-IF

FromSoft – Todos os direitos reservados – http://www.fromsoft.com.br Página 64


Curso de Cobol Básico

IF NOME-FUNCIONARIO EQUAL SPACES


GO TO PEGA-NOME
END-IF.
FIM-PEGA-NOME. EXIT.

MOSTRA-NOME.
MOVE 55 TO COLUNA
DISPLAY NOME-FUNCIONARIO AT POSICAO.
FIM-MOSTRA-NOME. EXIT.

Lição 6 - Exercícios

1. Criar o programa PROG16.CBL que faça o recolhimento do código, nome, data de nascimento e
salário de 20 pessoas. Criar a lógica de programação com o nome de PROG16.TXT

+------------------------------------------------------------------------------+
¦ ¦
¦ ¦
¦ +-----------------------+ ¦
¦ ¦ APRESENTACAO DE VETOR ¦ ¦
¦ +-----------------------+ ¦
¦ ¦
¦ ¦
¦ ¦
¦ +------------------------------------------+ ¦
¦ ¦ Codigo...: 99 ¦ ¦
¦ ¦ ¦ ¦
¦ ¦ Nome.....: AAAAAAAAAAAAAAAAAAAAAAAAAAAAAA¦ ¦
¦ ¦ ¦ ¦
¦ ¦ Data Nasc: 99/99/99 ¦ ¦
¦ ¦ ¦ ¦
¦ ¦ Salario..: ZZZ.ZZZ.ZZ9,99 ¦ ¦
¦ +------------------------------------------+ ¦
¦ ¦
¦ ¦
¦ ¦
¦ ¦
+------------------------------------------------------------------------------+
MENSAGENS:

Desenho
Cor de Fundo: Azul
Cor de Letra: Branca
Borda para desenho: Simples.
Preenchimentos de Tela
Inserir mascara de edição para variaveis numéricas
Fazer teste de Teclas, se pressionar ESC no campo sálario, voltar para o campo Data
Nascimento, se pressionar ESC no campo Data Nascimento, voltar para o campo Nome, se
pressionar ESC no campo Codigo, Sair do Programa
Mensagens:
A linha 24 continua sendo a linha de mensagens, ou seja, caso o programa precise enviar uma
mensagem para o operador, deverá utilizar essa linha.

2 - Criar um programa de nome PROG17.CBL que funcionará como uma Agenda Eletrônica, guardando
nome, endereço, data de nascimento e telefone de até 80 pessoas, informando-se 16 pessoas por tela,
em 5 telas com o seguinte leiaute (criar a lógica de programação com o nome de PROG17.TXT):

+------------------------------------------------------------------------------+
¦ Pagina: 9 AGENDA ELETRONICA 99/99/99 ¦
+------------------------------------------------------------------------------¦
¦NOME ¦ENDERECO ¦ DT. NASC ¦ TELEFONE ¦
+--------------------+------------------------------+----------+---------------¦
¦XXXXXXXXXXXXXXXXXXXX¦XXXXXXXXXXXXXXXXXXXXXXXXXXXXXX¦ 99/99/99 ¦XXXXXXXXXXXXXXX¦
¦ ¦ ¦ / / ¦ ¦
¦ ¦ ¦ / / ¦ ¦
¦ ¦ ¦ / / ¦ ¦
¦ ¦ ¦ / / ¦ ¦
¦ ¦ ¦ / / ¦ ¦

FromSoft – Todos os direitos reservados – http://www.fromsoft.com.br Página 65


Curso de Cobol Básico

¦ ¦ ¦ / / ¦ ¦
¦ ¦ ¦ / / ¦ ¦
¦ ¦ ¦ / / ¦ ¦
¦ ¦ ¦ / / ¦ ¦
¦ ¦ ¦ / / ¦ ¦
¦ ¦ ¦ / / ¦ ¦
¦ ¦ ¦ / / ¦ ¦
¦ ¦ ¦ / / ¦ ¦
¦ ¦ ¦ / / ¦ ¦
¦ ¦ ¦ / / ¦ ¦
¦ ¦ ¦ / / ¦ ¦
+------------------------------------------------------------------------------+
MENSAGENS:

Onde:
- DD/MM/AA: mostrar a data do sistema operacional
- o nome é obrigatório e os demais dados são opcionais
- ao preencher os 17 primeiros nomes (1ª pagina), abrir nova tela para preenchimento de outros 16,
mudando na linha de mensagens para 2ª pagina, e assim sucessivamente até um máximo de 5 páginas
- se teclado ESC no primeiro nome, sair do programa; se teclado ESC nos outros nomes da página,
voltar para o nome anterior.
- observar que deverão ser usados nesta lição:
- máscaras de edição
- modos avançados de ACCEPT (tanto preenchimento, como teclas de escape)
- Procedure-names e nomes de variáveis intuitivas.

Dica: observe que o programa deve ter dois tipos de contadores, um para controlar a página da agenda
(que irá ter no máximo o valor de 5) e um outro contador para controlar a linha da agenda (que irá ter o
valor de no máximo 17). E o mesmo usa teclas para voltar o campo. É necessário fazer a variação da
linha e da coluna para poder variar as linhas da agenda.
Faça a lógica de programação primeiro e depois da lógica pronta, evolua para a programação.

FromSoft – Todos os direitos reservados – http://www.fromsoft.com.br Página 66


Curso de Cobol Básico

Lição 7

Lição 7 - Conceitos

7.1 - Vetor

Conceito: Utilizamos na linguagem Cobol, o nome Vetor para definir um conjunto de itens que
têm o mesmo formato e o mesmo numero de bytes.

7.2. Ocorrências

Conceito: Um vetor é um conjunto de ocorrências. Uma ocorrência é uma posição da tabela,


armazenada na memória, consequentemente, uma ocorrência é parte de um vetor.

7.3 - Índice

Conceito: Um elemento de uma tabela só pode ser acessado utilizando-se um índice, o qual irá
apontar para uma ocorrência da tabela, que se refere ao elemento/item escolhido para o usuário.
Portanto, é comum para o programador Cobol usar o termo INDICE, para designar o que em
Lógica de Programação referencia-se normalmente com os termos CONTADORES, APONTADORES
ou PONTEIROS. Um índice pode ser uma constante numérica ou uma variável numérica com tamanho
suficiente para comportar o número de ocorrências da tabela. As variáveis que fazem parte de uma
tabela possuem uma ocorrência, que é colocada entre parênteses ao seu lado direito em qualquer
operação onde forem usadas.

IDENTIFICATION DIVISION.
PROGRAM-ID. L07EX01.
DATA DIVISION.
WORKING-STORAGE SECTION.
77 INDICE-MES PIC 9(02) VALUE ZEROS.
77 MES PIC X(10) VALUE SPACES OCCURS 12 TIMES.
01 POSICAO.
03 LINHA PIC 9(02) VALUE 10.
03 COLUNA PIC 9(02) VALUE 15.

PROCEDURE DIVISION.
MOVE 6 TO INDICE-MES
MOVE "JUNHO" TO MES(INDICE-MES)
DISPLAY MES(INDICE-MES) AT POSICAO
ACCEPT MES(INDICE-MES) AT POSICAO
STOP RUN.

ONDE:
INDICE-MES: Índice da tabela.

Neste exemplo, os comandos DISPLAY, ACCEPT e MOVE, estão sendo usados


exclusivamente para o índice 6 da tabela, e não para a tabela toda. Cada ocorrência da tabela pode ter
um valor diferente, podendo-se variar a ocorrência, por exemplo, com um laço de repetição.

7.4 - Cláusula OCCURS

Conceito: A cláusula OCCURS define o número de ocorrências dos itens da tabela, podendo
ser declarada num item elementar (indicando que apenas o item é repetitivo) ou num item de grupo
(indicando que todos os campos do grupo são repetitivos).

IDENTIFICATION DIVISION.
PROGRAM-ID. L07EX02.
DATA DIVISION.
WORKING-STORAGE SECTION.
77 NOME-USUARIO PIC X(50) OCCURS 20 TIMES.
01 TABELA OCCURS 20 TIMES.
03 NOME PIC X(50).
03 ENDERECO PIC X(20).

FromSoft – Todos os direitos reservados – http://www.fromsoft.com.br Página 67


Curso de Cobol Básico

PROCEDURE DIVISION.
STOP RUN.

7.5 - Inicialização de Vetores/Tabelas.

Para inicializar uma variável de tabela/vetor, deve-se mover zeros ou espaços para ela, mas a
mesma deve estar sendo indicada para uma determinada ocorrência. Para que você não tenha que ficar
movendo espaços ou zeros para cada item de uma tabela, pode-se utilizar o artifício do exemplo 2.

Nota: Se você tentar inicializar uma variável de tabela cujo índice esteja com valor zero ou maior que o
número de ocorrências da tabela, ocorrerá o erro 153 (Subscript out of range), pois você está indicando
uma ocorrência não existente na memória.

Lição 7 - Exemplo 1
WORKING-STORAGE SECTION.
01 HISTORICO-ESCOLAR.
03 ANOS-ESCOLARES OCCURS 5 TIMES.
05 ANO-LETIVO PIC 9(04).

Lição 7 - Exemplo 2
IDENTIFICATION DIVISION.
PROGRAM-ID. L07EX04.
DATA DIVISION.
WORKING-STORAGE SECTION.
01 TABELA.
05 TAB-1 OCCURS 10 TIMES.
10 CODIGO PIC 9(005).
10 NOME PIC X(030).
01 FILLER REDEFINES TABELA.
05 FILLER PIC X(035).
05 TAB-2 PIC X(315).
PROCEDURE DIVISION.
MOVE ZEROS TO CODIGO(1)
MOVE SPACES TO NOME(1)
MOVE TABELA TO TAB-2.
STOP RUN.

Lição 7 – Exemplo 3
IDENTIFICATION DIVISION.
PROGRAM-ID. L07EX05.
AUTHOR. FROMSOFT.
DATA DIVISION.
WORKING-STORAGE SECTION.
77 MES PIC X(10) OCCURS 12 TIMES.
77 INDICE-MES PIC 9(02) VALUE ZEROS.
01 POSICAO.
05 LINHA PIC 9(02) VALUE ZEROS.
05 COLUNA PIC 9(02) VALUE ZEROS.
PROCEDURE DIVISION.
MOVE 1 TO INDICE-MES
MOVE "JANEIRO" TO MES(INDICE-MES)
MOVE "FEVEREIRO" TO MES(2)
MOVE 3 TO INDICE-MES
MOVE "MARCO" TO MES(INDICE-MES)
MOVE "ABRIL" TO MES(INDICE-MES + 1)
MOVE 5 TO INDICE-MES
MOVE "MAIO" TO MES(INDICE-MES)
ADD 1 TO INDICE-MES
MOVE "JUNHO" TO MES(INDICE-MES)
MOVE "JULHO" TO MES(7)
MOVE 8 TO INDICE-MES
MOVE "AGOSTO" TO MES(INDICE-MES)
MOVE "SETEMBRO" TO MES(9)
MOVE 10 TO INDICE-MES
MOVE "OUTUBRO" TO MES(INDICE-MES)
ADD 1 TO INDICE-MES
MOVE "NOVEMBRO" TO MES(INDICE-MES)

FromSoft – Todos os direitos reservados – http://www.fromsoft.com.br Página 68


Curso de Cobol Básico

MOVE "DEZEMBRO" TO MES(12)


MOVE 5 TO LINHA COLUNA
MOVE 1 TO INDICE-MES.
MOSTRA-VETOR.
DISPLAY MES(INDICE-MES) AT POSICAO
IF INDICE-MES = 12
GO TO FIM
ELSE
ADD 1 TO INDICE-MES LINHA
GO TO MOSTRA-VETOR
END-IF.
FIM.
STOP RUN.

Lição 7 - Exemplo 4
IDENTIFICATION DIVISION.
PROGRAM-ID. L07EX06.
AUTHOR. FROMSOFT.
ENVIRONMENT DIVISION.
CONFIGURATION SECTION.
SPECIAL-NAMES.
DECIMAL-POINT IS COMMA.
DATA DIVISION.
WORKING-STORAGE SECTION.
77 MES-ATUAL PIC 9(02) VALUE ZEROS.
77 INDICE-MES PIC 9(02) COMP VALUE ZEROS.
77 SALARIO-ED PIC ZZ.ZZ9,99.
01 CAMPOS-AUXILIARES.
03 SALARIO-MES PIC 9(05)V99 OCCURS 12 TIMES.
03 SALARIO-MEDIO PIC 9(05)V99 VALUE ZEROS.
PROCEDURE DIVISION.
APURACAO-SALARIO.
INITIALIZE SALARIO-ED.
PERFORM ACUMULA-VALORES
PERFORM ACUMULA-MES
IF MES-ATUAL EQUAL 12
PERFORM CALCULA-MEDIA THRU FIM-CALCULA-MEDIA
ELSE
GO TO APURACAO-SALARIO
END-IF.

FINALIZA-PROGRAMA.
STOP RUN.

ACUMULA-VALORES.
ADD 1 TO INDICE-MES
MOVE INDICE-MES TO MES-ATUAL
DISPLAY "Salario do Mes" at 1015
ACCEPT SALARIO-ED AT 1030 WITH AUTO
MOVE SALARIO-ED TO SALARIO-MES(INDICE-MES)
DISPLAY "Salario Medio" at 1115
INITIALIZE SALARIO-ED
ACCEPT SALARIO-ED AT 1130 WITH AUTO
MOVE SALARIO-ED TO SALARIO-MEDIO.

ACUMULA-MES.
ADD SALARIO-MES(INDICE-MES) TO SALARIO-MEDIO.

CALCULA-MEDIA.
COMPUTE SALARIO-MEDIO = SALARIO-MEDIO / INDICE-MES.
FIM-CALCULA-MEDIA. EXIT.

Lição 7 - Exemplo 5

IDENTIFICATION DIVISION.
PROGRAM-ID. L07EX07.
ENVIRONMENT DIVISION.
CONFIGURATION SECTION.
SPECIAL-NAMES.
DECIMAL-POINT IS COMMA.
WORKING-STORAGE SECTION.
77 INDICE-MES PIC 9(02) COMP VALUE ZEROS.
77 SALARIO-ED PIC ZZ.ZZ9,99.

FromSoft – Todos os direitos reservados – http://www.fromsoft.com.br Página 69


Curso de Cobol Básico

01 CAMPOS-AUXILIARES.
03 SALARIO-MES PIC 9(05)V99 OCCURS 12 TIMES.
03 SALARIO-MEDIO PIC 9(05)V99 VALUE ZEROS.

PROCEDURE DIVISION.
PERFORM VARYING INDICE-MES FROM 1 BY 1 UNTIL INDICE-MES >= 13
DISPLAY "Digite o salario" AT 1015
INITIALIZE SALARIO-ED
ACCEPT SALARIO-ED AT 1050 WITH AUTO
MOVE SALARIO-ED TO SALARIO-MES(INDICE-MES)
END-PERFORM.
MOVE 1 TO INDICE-MES
PERFORM UNTIL SALARIO-MES(INDICE-MES) NOT EQUAL ZEROS
MOVE SALARIO-MES(INDICE-MES) TO SALARIO-MEDIO
ADD 1 TO INDICE-MES
IF INDICE-MES EQUAL 13
GO TO FIM
END-IF
END-PERFORM.

FIM.
DISPLAY SPACES AT 0101 WITH BACKGROUND-COLOR 0
FOREGROUND-COLOR 7.
STOP RUN.

7.6 - Matriz

7.6.1 - Definindo uma Matriz

Conceito: Uma matriz é um conjunto de vetores, permitindo vários níveis, portanto pode-se
chamá-la também de vetor multidimensional. Podemos visualizar uma matriz como sendo uma planilha,
contendo linhas e colunas: nas linhas definimos “x” ocorrências de um assunto e nas colunas “y”
ocorrências de outro assunto.

7.6.2 – Inicialização de Matriz

Conceito: a inicialização de uma matriz é semelhante ao que vimos para a inicialização de


vetores, devendo-se preocupar apenas com a variação dos níveis, com um índice para cada nível.

7.6.3 – Desenvolvimento de Matrizes

Conceito: Na linguagem Cobol, podemos definir matrizes declarando uma tabela dentro de
outra como sub-nível, permitindo-se ter “n” níveis (depende do compilador), ou seja, “n” dimensões da
matriz. Cada nível necessita de um índice para acesso a seus elementos. Deve-se usar vários laços de
repetição para variar esses índices.

Lição 7 - Exemplo 6
IDENTIFICATION DIVISION.
PROGRAM-ID. L07EX08.
ENVIRONMENT DIVISION.
CONFIGURATION SECTION.
SPECIAL-NAMES.
DECIMAL-POINT IS COMMA.
DATA DIVISION.
WORKING-STORAGE SECTION.
77 ANO PIC 9(01) VALUE ZEROS.
77 MES PIC 9(01) VALUE ZEROS.
77 ANO-ATUAL PIC 9(04) VALUE ZEROS.
77 ANO-ATUAL-ED PIC Z(04) VALUE SPACES.
77 AVALIACAO-ED PIC Z(02) VALUE SPACES.
01 POSICAO.
03 LINHA PIC 9(02) VALUE 05.

FromSoft – Todos os direitos reservados – http://www.fromsoft.com.br Página 70


Curso de Cobol Básico

03 COLUNA PIC 9(02) VALUE ZEROS.


01 HISTORICO-ESCOLAR.
03 ANOS-ESCOLARES OCCURS 5 TIMES.
05 ANO-LETIVO PIC 9(04).
05 AVALIACAO-MENSAL-MATEMATICA PIC 99 OCCURS 10 TIMES.
05 AVALIACAO-MENSAL-PORTUGUES PIC 99 OCCURS 10 TIMES.
05 AVALIACAO-MENSAL-HISTORIA PIC 99 OCCURS 10 TIMES.
05 AVALIACAO-MENSAL-GEOGRAFIA PIC 99 OCCURS 10 TIMES.
05 AVALIACAO-MENSAL-QUIMICA PIC 99 OCCURS 10 TIMES.
05 AVALIACAO-MENSAL-FISICA PIC 99 OCCURS 10 TIMES.
05 AVALIACAO-MENSAL-BIOLOGIA PIC 99 OCCURS 10 TIMES.
05 AVALIACAO-MENSAL-INGLES PIC 99 OCCURS 10 TIMES.
05 AVALIACAO-MENSAL-ESPANHOL PIC 99 OCCURS 10 TIMES.
05 AVALIACAO-MENSAL-INFORMATICA PIC 99 OCCURS 10 TIMES.
PROCEDURE DIVISION.
DISPLAY " " AT 0101 WITH ERASE EOS BACKGROUND-COLOR 1
FOREGROUND-COLOR 7.
DISPLAY "Digite o ano" at 0105
INITIALIZE ANO-ATUAL-ED.
ACCEPT ANO-ATUAL-ED AT 0119 WITH AUTO.
MOVE ANO-ATUAL-ED TO ANO-ATUAL
PERFORM VARYING ANO FROM 1 BY 1 UNTIL ANO >= 6
DISPLAY "ANO " AT 0150 ANO-ATUAL-ED
PERFORM VARYING MES FROM 1 BY 1 UNTIL MES >= 11
PERFORM MATEMATICA THRU FIM-MATEMATICA 10 TIMES
PERFORM PORTUGUES THRU FIM-PORTUGUES 10 TIMES
PERFORM HISTORIA THRU FIM-HISTORIA 10 TIMES
PERFORM GEOGRAFIA THRU FIM-GEOGRAFIA 10 TIMES
PERFORM QUIMICA THRU FIM-QUIMICA 10 TIMES
PERFORM FISICA THRU FIM-FISICA 10 TIMES
PERFORM BIOLOGIA THRU FIM-BIOLOGIA 10 TIMES
PERFORM INGLES THRU FIM-INGLES 10 TIMES
PERFORM ESPANHOL THRU FIM-ESPANHOL 10 TIMES
PERFORM INFORMATICA THRU FIM-INFORMATICA 10 TIMES
END-PERFORM
MOVE ANO-ATUAL TO ANO-LETIVO(ANO)
ADD 1 TO ANO-ATUAL
END-PERFORM.

FINALIZA-PROGRAMA.
STOP RUN.

MATEMATICA.
INITIALIZE AVALIACAO-ED
MOVE 10 TO COLUNA
DISPLAY "NOTA DE MATEMATICA" AT POSICAO
MOVE 30 TO COLUNA
ACCEPT AVALIACAO-ED AT POSICAO
MOVE AVALIACAO-ED TO AVALIACAO-MENSAL-MATEMATICA(ANO, MES).
FIM-MATEMATICA. EXIT.

PORTUGUES.
INITIALIZE AVALIACAO-ED
MOVE 10 TO COLUNA
DISPLAY "NOTA DE PORTUGUES" AT POSICAO
MOVE 30 TO COLUNA
ACCEPT AVALIACAO-ED AT POSICAO
MOVE AVALIACAO-ED TO AVALIACAO-MENSAL-PORTUGUES(ANO, MES).
FIM-PORTUGUES. EXIT.

HISTORIA.
INITIALIZE AVALIACAO-ED
MOVE 10 TO COLUNA
DISPLAY "NOTA DE HISTORIA" AT POSICAO
MOVE 30 TO COLUNA
ACCEPT AVALIACAO-ED AT POSICAO
MOVE AVALIACAO-ED TO AVALIACAO-MENSAL-HISTORIA(ANO, MES).
FIM-HISTORIA. EXIT.

GEOGRAFIA.
INITIALIZE AVALIACAO-ED
MOVE 10 TO COLUNA
DISPLAY "NOTA DE GEOGRAFIA" AT POSICAO
MOVE 30 TO COLUNA
ACCEPT AVALIACAO-ED AT POSICAO

FromSoft – Todos os direitos reservados – http://www.fromsoft.com.br Página 71


Curso de Cobol Básico

MOVE AVALIACAO-ED TO AVALIACAO-MENSAL-GEOGRAFIA(ANO, MES).


FIM-GEOGRAFIA. EXIT.

QUIMICA.
INITIALIZE AVALIACAO-ED
MOVE 10 TO COLUNA
DISPLAY "NOTA DE QUIMICA" AT POSICAO
MOVE 30 TO COLUNA
ACCEPT AVALIACAO-ED AT POSICAO
MOVE AVALIACAO-ED TO AVALIACAO-MENSAL-QUIMICA(ANO, MES).
FIM-QUIMICA. EXIT.

FISICA.
INITIALIZE AVALIACAO-ED
MOVE 10 TO COLUNA
DISPLAY "NOTA DE FISICA" AT POSICAO
MOVE 30 TO COLUNA
ACCEPT AVALIACAO-ED AT POSICAO
MOVE AVALIACAO-ED TO AVALIACAO-MENSAL-FISICA(ANO, MES).
FIM-FISICA. EXIT.

BIOLOGIA.
INITIALIZE AVALIACAO-ED
MOVE 10 TO COLUNA
DISPLAY "NOTA DE BIOLOGIA" AT POSICAO
MOVE 30 TO COLUNA
ACCEPT AVALIACAO-ED AT POSICAO
MOVE AVALIACAO-ED TO AVALIACAO-MENSAL-BIOLOGIA(ANO, MES).
FIM-BIOLOGIA. EXIT.

INGLES.
INITIALIZE AVALIACAO-ED
MOVE 10 TO COLUNA
DISPLAY "NOTA DE INGLES" AT POSICAO
MOVE 30 TO COLUNA
ACCEPT AVALIACAO-ED AT POSICAO
MOVE AVALIACAO-ED TO AVALIACAO-MENSAL-INGLES(ANO, MES).
FIM-INGLES. EXIT.

ESPANHOL.
INITIALIZE AVALIACAO-ED
MOVE 10 TO COLUNA.
DISPLAY "NOTA DE ESPANHOL" AT POSICAO
MOVE 30 TO COLUNA
ACCEPT AVALIACAO-ED AT POSICAO
MOVE AVALIACAO-ED TO AVALIACAO-MENSAL-ESPANHOL(ANO, MES).
FIM-ESPANHOL. EXIT.

INFORMATICA.
INITIALIZE AVALIACAO-ED
MOVE 10 TO COLUNA.
DISPLAY "NOTA DE INFORMATICA" AT POSICAO
MOVE 30 TO COLUNA
ACCEPT AVALIACAO-ED AT POSICAO
MOVE AVALIACAO-ED TO AVALIACAO-MENSAL-INFORMATICA(ANO, MES).
FIM-INFORMATICA. EXIT.

Lição 7 - Exercícios

2. Copiar o programa PROG16.CBL e criar o programa PROG18.CBL que, a partir das informações
digitadas na TELA A, monte uma tabela de dados de 19 pessoas e depois permita montar a TELA
B. Criar a lógica de programação com o nome de PROG18.TXT

TELA A:
+------------------------------------------------------------------------------+
¦ ¦
¦ +-----------------------+ ¦
¦ ¦ Apresentação de Vetor ¦ ¦
¦ +-----------------------+ ¦
¦ ¦
¦------------------------------------------------------------------------------¦
¦ ¦
¦ ¦

FromSoft – Todos os direitos reservados – http://www.fromsoft.com.br Página 72


Curso de Cobol Básico

¦ ¦
¦ +--------------------------------+ ¦
¦ ¦Código...: 99 ¦ ¦
¦ ¦ ¦ ¦
¦ ¦Nome.....: AAAAAAAAAAAAAAAAAAAA ¦ ¦
¦ ¦ ¦ ¦
¦ ¦Data Nasc: 99/99/99 ¦ ¦
¦ ¦ ¦ ¦
¦ ¦Salário..: Z.ZZZ.ZZ9,99 ¦ ¦
¦ +--------------------------------+ ¦
¦ ¦
¦ ¦
¦ ¦
¦ ¦
+------------------------------------------------------------------------------+
MENSAGENS:

TELA B:
+------------------------------------------------------------------------------+
¦ Código ¦ Nome ¦ Data Nascimento ¦ Salário ¦
¦----------+----------------------+---------------------+----------------------¦
¦ 01 ¦ AAAAAAAAAAAAAAAAAAAA ¦ 99/99/99 ¦ Z.ZZZ.ZZ9,99 ¦
¦ 02 ¦ ¦ 00/00/00 ¦ 0,00 ¦
¦ 03 ¦ ¦ 00/00/00 ¦ 0,00 ¦
¦ 04 ¦ ¦ 00/00/00 ¦ 0,00 ¦
¦ 05 ¦ ¦ 00/00/00 ¦ 0,00 ¦
¦ 06 ¦ ¦ 00/00/00 ¦ 0,00 ¦
¦ 07 ¦ ¦ 00/00/00 ¦ 0,00 ¦
¦ 08 ¦ ¦ 00/00/00 ¦ 0,00 ¦
¦ 09 ¦ ¦ 00/00/00 ¦ 0,00 ¦
¦ 10 ¦ ¦ 00/00/00 ¦ 0,00 ¦
¦ 11 ¦ ¦ 00/00/00 ¦ 0,00 ¦
¦ 12 ¦ ¦ 00/00/00 ¦ 0,00 ¦
¦ 13 ¦ ¦ 00/00/00 ¦ 0,00 ¦
¦ 14 ¦ ¦ 00/00/00 ¦ 0,00 ¦
¦ 15 ¦ ¦ 00/00/00 ¦ 0,00 ¦
¦ 16 ¦ ¦ 00/00/00 ¦ 0,00 ¦
¦ 17 ¦ ¦ 00/00/00 ¦ 0,00 ¦
¦ 18 ¦ ¦ 00/00/00 ¦ 0,00 ¦
¦ 19 ¦ ¦ 00/00/00 ¦ 0,00 ¦
+------------------------------------------------------------------------------+
MENSAGENS:

Dica: Verifique nos exemplos que o programa está dividido em duas partes, uma parte para pegar os
dados e a outra parte para mostrar esses dados. Além disto, para fazer a exibição, há a variação de
linha e colunas em tempo de exibição. Faça a lógica de programação primeiro e depois da lógica pronta,
evolua para a programação.

2. Criar o programa PROG19.CBL que, receba nomes nos campos da coluna à esquerda
da tela abaixo montando uma tabela com esses nomes, coloque esses nomes em ordem
alfabética na tabela e mostre os nomes ordenados nos campos da coluna à direita da
tela. Criar a lógica de programação com o nome de PROG19.TXT

+------------------------------------------------------------------------------+
¦ ¦
¦ ORDENAÇÃO DE VETOR ¦
¦ ¦
¦ ¦
¦ ¦
¦ ¦
¦ DIGITE O 01º NOME : ____________________ 01º: ¦
¦ DIGITE O 02º NOME : 02º: ¦
¦ DIGITE O 03º NOME : 03º: ¦
¦ DIGITE O 04º NOME : 04º: ¦
¦ DIGITE O 05º NOME : 05º: ¦
¦ DIGITE O 06º NOME : 06º: ¦
¦ DIGITE O 07º NOME : 07º: ¦
¦ DIGITE O 08º NOME : 08º: ¦
¦ DIGITE O 09º NOME : 09º: ¦
¦ DIGITE O 10º NOME : 10º: ¦
¦ ¦
¦ ¦

FromSoft – Todos os direitos reservados – http://www.fromsoft.com.br Página 73


Curso de Cobol Básico

¦ ¦
¦ ¦
¦ ¦
¦ ¦
+------------------------------------------------------------------------------+
MENSAGENS:

Notas:
a) procure fazer funcionar a tela primeiro, só depois se preocupe com o algorítimo necessário para a
ordenação dos nomes.
b) se o algorítmo de ordenação estiver muito difícil, pense como você faria a ordenação de 10
nomes completos, com nome e sobrenome) manualmente. Provavelmente ao encontrar o primeiro
nome da ordem, você o transcreveria para a relação ordenada e o riscaria da relação original,
colocando um valor maior que o de todas as variáveis. Procure fazer o mesmo com a tabela.
c) Os programas desta lição deverão ter como atributos de tela:
• Máscaras de Edição
• Modos Avançados de ACCEPT (Tanto Preenchimento, como teclas de escape)
• Procedure-Names e nomes de variáveis intuitivas.

Dicas:
a) – Observe nos exemplos que o programa está dividido em três partes: a primeira parte para pegar os
dados, a segunda parte para ordenar os dados e a terceira parte para mostrar esses dados. Verifique
também que deverá haver duas tabelas e consequentemente dois contadores diferentes, pois uma
tabela é para os itens existentes, e a outra tabela é para os itens ordenados.
b) – Na hora da ordenação dos dados, você deve variar o laço inteiro, para encontrar o menor-nome.
Feito isto, mover o valor da ocorrência do menor-nome para a outra tabela e mover para a ocorrencia do
valor do menor-nome ele o maior valor possível para uma variável (high-value), para que o mesmo não
entre na comparação novamente. E assim sucessivamente até você ordenar todos os nomes.
c) - Na hora da ordenação dos dados, verifique os comandos avançados do IF (comparação de letra a
letra, devido a cada letra ter um valor hexadecimal – Lição 3). E que para fazer a exibição, há a variação
de linha e colunas em tempo de exibição.
d) - Faça a lógica de programação primeiro e depois da lógica pronta, evolua para a programação.
3 - Copiar o programa PROG17.CBL e criar um programa de nome PROG20.CBL que funcionará como
uma Agenda Eletrônica, guardando nome, endereço, data de nascimento e telefone de até 80 pessoas,
informando-se 16 pessoas por tela, em 5 telas com o seguinte leiaute (criar a lógica de programação
com o nome de PROG20.TXT): Entretanto, deve-se usar agora os vetores (para a página tanto quanto
para as linhas).

+------------------------------------------------------------------------------+
¦ Pagina: AGENDA ELETRONICA / / ¦
+------------------------------------------------------------------------------¦
¦NOME ¦ENDERECO ¦ DT. NASC ¦ TELEFONE ¦
+--------------------+------------------------------+----------+---------------¦
¦ ¦ ¦ / / ¦ ¦
¦ ¦ ¦ / / ¦ ¦
¦ ¦ ¦ / / ¦ ¦
¦ ¦ ¦ / / ¦ ¦
¦ ¦ ¦ / / ¦ ¦
¦ ¦ ¦ / / ¦ ¦
¦ ¦ ¦ / / ¦ ¦
¦ ¦ ¦ / / ¦ ¦
¦ ¦ ¦ / / ¦ ¦
¦ ¦ ¦ / / ¦ ¦
¦ ¦ ¦ / / ¦ ¦
¦ ¦ ¦ / / ¦ ¦
¦ ¦ ¦ / / ¦ ¦
¦ ¦ ¦ / / ¦ ¦
¦ ¦ ¦ / / ¦ ¦
¦ ¦ ¦ / / ¦ ¦
¦ ¦ ¦ / / ¦ ¦
+------------------------------------------------------------------------------+
MENSAGENS:

Onde:

FromSoft – Todos os direitos reservados – http://www.fromsoft.com.br Página 74


Curso de Cobol Básico

- DD/MM/AA: mostrar a data do sistema operacional


- o nome é obrigatório e os demais dados são opcionais
- ao preencher os 17 primeiros nomes (1ª pagina), abrir nova tela para preenchimento de outros 16,
mudando na linha de mensagens para 2ª pagina, e assim sucessivamente até um máximo de 5 páginas
- É necessário apenas o Nome, os restantes são opcionais.
- se teclado ESC no primeiro nome, sair do programa; se teclado ESC nos outros nomes da página,
voltar para o nome anterior.
- observar que deverão ser usados nesta lição:
- máscaras de edição
- modos avançados de ACCEPT (tanto preenchimento, como teclas de escape)
- Procedure-names e nomes de variáveis intuitivas.

Dica: observe que o programa deve ter dois tipos de vetores, um para controlar a página da agenda
(que irá ter 5 ocorrências) e um outro vetor para controlar a linha da agenda (que irá ter 16 ocorrências).
E o mesmo usa teclas para voltar o campo. É necessário fazer a variação da linha e da coluna para
poder variar as linhas da agenda.
Faça a lógica de programação primeiro e depois da lógica pronta, evolua para a programação.

FromSoft – Todos os direitos reservados – http://www.fromsoft.com.br Página 75


Curso de Cobol Básico

Lição 8

Lição 8 - Conceitos

8.1 - MENU

Conceito: Um programa que apresenta e controla as opções de um sistema. No programa de


menu normalmente são colocadas funções do tipo: apresentação e controle das telas de opções,
controle de acesso as opções do sistema (acesso por senha), controle de licença de uso, carga e envio
de parâmetros (mensagens, referencias, etc.). O conceito de menu é utilizado em construção de
sistemas modulares, onde cria-se programas (módulos) que fazem funções especificas e que são
controladas / solicitadas através do menu.

8.1.1 - Decidindo qual programa chamar

Conceito: Usamos o comando EVALUATE (Lição 3), que permite trabalhar no conceito de
programação estruturada, para “avaliar” o conteúdo da opção teclada pelo usuário e executar as
funções (módulos) desejadas.

Lição 8 - Exemplo 1
IDENTIFICATION DIVISION.
PROGRAM-ID. L08EX01.
ENVIRONMENT DIVISION.
CONFIGURATION SECTION.
SPECIAL-NAMES.
DECIMAL-POINT IS COMMA.
DATA DIVISION.
WORKING-STORAGE SECTION.
77 OPCAO-ED PIC Z VALUE SPACES.
77 OPCAO PIC 9 VALUE ZEROS.
PROCEDURE DIVISION.
INITIALIZE OPCAO-ED.
INICIO.
DISPLAY "INFORME QUAL PROGRAMA A CHAMAR:" AT 1010.
ACCEPT OPCAO-ED AT 1044
MOVE OPCAO-ED TO OPCAO
EVALUATE OPCAO
WHEN 1
CALL "PROGRAMA1"
CANCEL "PROGRAMA1"
WHEN 2
CALL "PROGRAMA2"
CANCEL "PROGRAMA2"
WHEN OTHER
GO TO FIM
END-EVALUATE.
GO TO INICIO.
FIM.
STOP RUN.

Notas:
a) Observe que os programas serão chamados de acordo com a opção do usuário.
b) O comando EVALUATE torna-se muito importante no desenvolvimento de programas, na clareza
dos mesmos, pois além de separar o programa/sistema em módulos/procedimentos, facilita a
visualização e compreensão do programa. Também com o objetivo de facilitar a compreensão do
programa, é muito importante usar nomes intuitivos (fáceis de entender) para variáveis e
procedimentos.
c) Pode-se usar também variáveis de nível 78 no programa, pois torna o EVALUATE muito mais
intuitivo.

FromSoft – Todos os direitos reservados – http://www.fromsoft.com.br Página 76


Curso de Cobol Básico

Lição 8 – Exemplo 2

IDENTIFICATION DIVISION.
PROGRAM-ID. L08EX02.
ENVIRONMENT DIVISION.
CONFIGURATION SECTION.
SPECIAL-NAMES.
DECIMAL-POINT IS COMMA.
DATA DIVISION.
WORKING-STORAGE SECTION.
77 OPCAO-ED PIC Z(01) VALUE SPACES.
77 OPCAO PIC 9(01) VALUE ZEROS.
77 PROGRAMA-A-CHAMAR PIC X(10) VALUE SPACES.
77 TECLA PIC X(02) VALUE SPACES.
78 OPCAO-1 VALUE 1.
78 OPCAO-2 VALUE 2.

PROCEDURE DIVISION.
INICIO.
DISPLAY "INFORME QUAL PROGRAMA A CHAMAR:" AT 1010.
INITIALIZE OPCAO-ED
ACCEPT OPCAO-ED AT 1044
MOVE OPCAO-ED TO OPCAO
ACCEPT TECLA FROM ESCAPE KEY
IF TECLA EQUAL 01
GO TO FIM.
EVALUATE OPCAO
WHEN OPCAO-1
Move "PROGRAMA1" TO PROGRAMA-A-CHAMAR
WHEN OPCAO-2
Move "PROGRAMA2" TO PROGRAMA-A-CHAMAR
WHEN OTHER
GO TO FIM
END-EVALUATE.
PERFORM CHAMAR-PROGRAMA THRU FIM-CHAMAR-PROGRAMA.
GO TO INICIO.

FIM.
STOP RUN.

CHAMAR-PROGRAMA.
CALL PROGRAMA-A-CHAMAR.
CANCEL PROGRAMA-A-CHAMAR.
FIM-CHAMAR-PROGRAMA. EXIT.

8.2 - Ligação entre Programas

8.2.1 - Comando CALL

Conceito: O comando CALL permite que se carregue um segundo programa na memória. Desta
forma, pode-se construir aplicações modulares, onde um programa com objetivos específicos será
carregado na memória somente quando for necessário, economizando-se recursos do sistema
operacional. O primeiro programa é denominado “chamante” e o segundo programa, denominado
“chamado”. Pode-se criar uma grande cadeia de programas chamantes e chamados, limitada apenas à
memória disponível. O comando CALL permite que se passe dados (parâmetros) entre os programas
chamante e chamado, como veremos mais adiante.

Lição 8 – Exemplo 3
IDENTIFICATION DIVISION.
PROGRAM-ID. L08EX03.
ENVIRONMENT DIVISION.
CONFIGURATION SECTION.
SPECIAL-NAMES.
DECIMAL-POINT IS COMMA.
DATA DIVISION.
WORKING-STORAGE SECTION.
77 OPCAO-ED PIC Z(01) VALUE SPACES.
77 OPCAO PIC 9(01) VALUE ZEROS.
77 PROGRAMA-A-CHAMAR PIC X(10) VALUE SPACES.

FromSoft – Todos os direitos reservados – http://www.fromsoft.com.br Página 77


Curso de Cobol Básico

77 TECLA PIC X(02) VALUE SPACES.


78 OPCAO-1 VALUE 1.
78 OPCAO-2 VALUE 2.

PROCEDURE DIVISION.
INICIO.
DISPLAY "INFORME QUAL PROGRAMA A CHAMAR:" AT 1010.
INITIALIZE OPCAO-ED
ACCEPT OPCAO-ED AT 1044
MOVE OPCAO-ED TO OPCAO
ACCEPT TECLA FROM ESCAPE KEY
IF TECLA EQUAL 01
GO TO FIM.
EVALUATE OPCAO
WHEN OPCAO-1
Move "PROGRAMA1" TO PROGRAMA-A-CHAMAR
WHEN OPCAO-2
Move "PROGRAMA2" TO PROGRAMA-A-CHAMAR
WHEN OTHER
GO TO FIM
END-EVALUATE.
PERFORM CHAMAR-PROGRAMA THRU FIM-CHAMAR-PROGRAMA.
GO TO INICIO.

FIM.
STOP RUN.

CHAMAR-PROGRAMA.
CALL PROGRAMA-A-CHAMAR.
FIM-CHAMAR-PROGRAMA. EXIT.

8.2.2 - Comando CANCEL

Conceito: Descarrega da memória um programa chamado (carregado) com o comando CALL.

Notas:
- Para se usar o CANCEL, o programa chamado deve ter sido carregado anteriormente com um
comando CALL
- O programa chamado deve ser finalizado com o comando EXIT PROGRAM (veremos mais
adiante) ao invés do STOP RUN.

Lição 8 – Exemplo 4
IDENTIFICATION DIVISION.
PROGRAM-ID. L08EX04.
ENVIRONMENT DIVISION.
CONFIGURATION SECTION.
SPECIAL-NAMES.
DECIMAL-POINT IS COMMA.
DATA DIVISION.
WORKING-STORAGE SECTION.
77 OPCAO-ED PIC Z(01) VALUE SPACES.
77 OPCAO PIC 9(01) VALUE ZEROS.
77 PROGRAMA-A-CHAMAR PIC X(10) VALUE SPACES.
77 TECLA PIC X(02) VALUE SPACES.
78 OPCAO-1 VALUE 1.
78 OPCAO-2 VALUE 2.

PROCEDURE DIVISION.
INICIO.
DISPLAY "INFORME QUAL PROGRAMA A CHAMAR:" AT 1010.
INITIALIZE OPCAO-ED
ACCEPT OPCAO-ED AT 1044
MOVE OPCAO-ED TO OPCAO
ACCEPT TECLA FROM ESCAPE KEY
IF TECLA EQUAL 01
GO TO FIM.
EVALUATE OPCAO
WHEN OPCAO-1
CALL "PROGRAMA1"
CANCEL "PROGRAMA1"
WHEN OPCAO-2

FromSoft – Todos os direitos reservados – http://www.fromsoft.com.br Página 78


Curso de Cobol Básico

CALL "PROGRAMA2"
CANCEL "PROGRAMA2"
WHEN OTHER
GO TO FIM
END-EVALUATE.
GO TO INICIO.

FIM.
STOP RUN.

8.2.3 - Comando CHAIN

Conceito: Comando que permite carregar um segundo programa sem retornar ao programa
chamante. Ao passar para o programa chamado, o programa chamante é automaticamente
descarregado da memória. Também o comando CHAIN permite que se passe dados (parâmetros) entre
os programas chamante e chamado.

Lição 8 – Exemplo 5
IDENTIFICATION DIVISION.
PROGRAM-ID. L08EX05.
ENVIRONMENT DIVISION.
CONFIGURATION SECTION.
SPECIAL-NAMES.
DECIMAL-POINT IS COMMA.
DATA DIVISION.
WORKING-STORAGE SECTION.
77 OPCAO-ED PIC Z(01) VALUE SPACES.
77 OPCAO PIC 9(01) VALUE ZEROS.
77 TECLA PIC X(02) VALUE SPACES.
78 OPCAO-1 VALUE 1.
78 OPCAO-2 VALUE 2.

PROCEDURE DIVISION.
INICIO.
DISPLAY "INFORME QUAL PROGRAMA A CHAMAR:" AT 1010.
INITIALIZE OPCAO-ED
ACCEPT OPCAO-ED AT 1044
MOVE OPCAO-ED TO OPCAO
ACCEPT TECLA FROM ESCAPE KEY
IF TECLA EQUAL 01
GO TO FIM.
EVALUATE OPCAO
WHEN OPCAO-1
CHAIN "PROGRAMA1"
WHEN OPCAO-2
CHAIN "PROGRAMA2"
WHEN OTHER
GO TO FIM
END-EVALUATE.
GO TO INICIO.

FIM.
STOP RUN.

FromSoft – Todos os direitos reservados – http://www.fromsoft.com.br Página 79


Curso de Cobol Básico

8.2.4 - Comando EXIT PROGRAM

Conceito: Este comando encerra um programa chamado por um programa anterior, retornando
o controle para o programa chamante. Normalmente este comando é usado em programas (módulos)
que são chamados pelo comando CALL.

IDENTIFICATION DIVISION.
PROGRAM-ID. L08EX06.
PROCEDURE DIVISION.
DISPLAY "EXEMPLO DE PROGRAMA QUE USA O EXIT PROGRAM - ENTER"
AT 1015.
STOP " ".
EXIT PROGRAM.

8.3 – Passagem de Parâmetros

8.3.1 – Atributo USING

Conceito: Passagem de parâmetros entre programas é a forma utilizada de comunicação entre


programas, permitindo que o programa chamante e o programa chamado tenham acesso ao conteúdo
de variáveis comuns aos dois (acesso às mesmas posições de memória). O programa chamante faz
uma chamada a outro programa passando as informações necessárias e o programa chamado recebe
essas informações em variáveis que devem ser declaradas com tipo, nivel e tamanho iguais. Na
passagem de parâmetros usa-se o atributo USING, que é o responsável pela indicação das variáveis de
comunicação, tanto na passagem de parâmetros do comando CALL como no recebimento de
parâmetros da PROCEDURE.

no programa chamante:

IDENTIFICATION DIVISION.
PROGRAM-ID. L08EX07.
ENVIRONMENT DIVISION.
CONFIGURATION SECTION.
SPECIAL-NAMES.
DECIMAL-POINT IS COMMA.
DATA DIVISION.
WORKING-STORAGE SECTION.
77 OPCAO-ED PIC Z(01) VALUE SPACES.
77 OPCAO PIC 9(01) VALUE ZEROS.
77 PARAMETRO-DE-LIGACAO PIC X(02) VALUE "OK".
77 TECLA PIC X(02) VALUE SPACES.
78 OPCAO-1 VALUE 1.

PROCEDURE DIVISION.
INICIO.
DISPLAY " " AT 0101 WITH ERASE EOS BACKGROUND-COLOR 1
FOREGROUND-COLOR 7.
DISPLAY "INFORME QUAL PROGRAMA A CHAMAR:" AT 1010.
INITIALIZE OPCAO-ED
ACCEPT OPCAO-ED AT 1044
MOVE OPCAO-ED TO OPCAO
ACCEPT TECLA FROM ESCAPE KEY
IF TECLA EQUAL 01
GO TO FIM.
EVALUATE OPCAO
WHEN OPCAO-1
CALL "EX08L08" USING PARAMETRO-DE-LIGACAO
CANCEL "EX08L08"
WHEN OTHER
GO TO FIM
END-EVALUATE.
GO TO INICIO.

FIM.
STOP RUN.

no programa chamado:

IDENTIFICATION DIVISION.

FromSoft – Todos os direitos reservados – http://www.fromsoft.com.br Página 80


Curso de Cobol Básico

PROGRAM-ID. L08EX08.
LINKAGE SECTION.
77 PARAMETRO-DE-LIGACAO PIC X(02).
PROCEDURE DIVISION USING PARAMETRO-DE-LIGACAO.
DISPLAY " " AT 0101 WITH ERASE EOS BACKGROUND-COLOR 1
FOREGROUND-COLOR 7.
IF PARAMETRO-DE-LIGACAO EQUAL "OK"
DISPLAY "PARAMETRO DE PROGRAMA CHAMADOR OK!" AT 1015
STOP " "
END-IF.
EXIT PROGRAM.

Lição 8 - Exemplo 6
IDENTIFICATION DIVISION.
PROGRAM-ID. L08EX10.
DATA DIVISION.
LINKAGE SECTION.
77 PARAMETRO PIC X(10) VALUE SPACES.

PROCEDURE DIVISION USING PARAMETRO.


INICIO.
DISPLAY "PARAMETRO PASSADO: " AT 1110 PARAMETRO.
STOP " ".
EXIT PROGRAM.

8.4 - O parâmetro ON OVERFLOW.

Conceito: Usando o parametro ON OVERFLOW apos o CALL, podemos mostrar uma mensagem para o
usuario caso o programa deu erro em sua chamada. Neste tipo de call, você vai terminá-lo com END-
CALL e não com CANCEL, pois o mesmo é um evento expresso na chamada CALL.
IDENTIFICATION DIVISION.
PROGRAM-ID. L08EX11.
DATA DIVISION.
WORKING-STORAGE SECTION.
77 OPCAO-ED PIC Z(01) VALUE SPACES.
77 OPCAO PIC 9(01) VALUE ZEROS.
77 PARAMETRO PIC X(10) VALUE SPACES.
77 PARA PIC X(02) VALUE SPACES.

PROCEDURE DIVISION.
INICIO.
DISPLAY " " AT 0101 WITH ERASE EOS BACKGROUND-COLOR 1
FOREGROUND-COLOR 7.
DISPLAY "INFORME O PARAMETRO" AT 0910
ACCEPT PARAMETRO AT 0930 WITH AUTO PROMPT
DISPLAY "INFORME QUAL PROGRAMA A CHAMAR:" AT 1010.
ACCEPT OPCAO-ED AT 1044
MOVE OPCAO-ED TO OPCAO
EVALUATE OPCAO
WHEN 1
CALL "EX10L08" USING PARAMETRO
ON OVERFLOW
DISPLAY "NAO FOI POSSIVEL CHAMAR O PROGRAMA" AT 2310
ACCEPT PARA AT 2579 WITH AUTO NO-ECHO
GO TO FIM
END-CALL
WHEN OTHER
GO TO FIM
END-EVALUATE.
GO TO INICIO.
FIM.
STOP RUN.

Observações:

Exit Program.

FromSoft – Todos os direitos reservados – http://www.fromsoft.com.br Página 81


Curso de Cobol Básico

O exit program, não termina o programa, ele apenas encerra a utilização do programa para o
programa que o chamou, este(o programa chamador) então tendo o controle da aplicação novamente.
Entretanto, se você não usar um programa chamador, ou então chamá-lo sozinho, ocorrerá problemas,
pois se você colocar o exit program no meio do programa, e ele for utilizado ele irá continuar a fazer os
outros procedimentos, consequentemente havendo um problema na execução do seu programa. Para
que isso seja corrigido deve-se inserir o stop run após o exit program, para que não haja problemas e
ele termine o programa.

Parametro On Overflow

O Parametro On overflow, se incluido em um programa chamado, deve-se usar o XM no


programa chamador. O XM é um programa que retira o seu programa da memória convencional e o
insere na memória alta do computador. É bem parecido com o EMM38E.EXE, entretanto ele é para
programas COBOL, que são compilados sobre o MS/MF-Cobol. Se nao for incluido o XM, todo
programa que for chamado por um call que tiver o parametro on overflow, será travado no terminal do
Ms-Dos/Windows, pois o mesmo será inserido na memória alta e não será retirado pelo programa
chamador e só saindo do terminal do Ms-dos e entrando novamente resolve-se o problema.
Lição 8 - Exercícios

1. Criar o programa PROG21.CBL que irá fazer a chamada de outros programas a partir da opção
indicada na tela, usando o comando EVALUATE para poder tomar a decisão de qual programa
chamar.
+------------------------------------------------------------------------------+
¦______________________________________________________________________________¦
¦______________________________+--------------+________________________________¦
¦______________________________¦Menu Principal¦________________________________¦
¦______________________________+--------------+________________________________¦
¦______________________________________________________________________________¦
¦______________________________________________________________________________¦
¦___________+--------------+___________________________________________________¦
¦___________¦ Programas ¦___________________________________________________¦
¦___________+--------------¦___________________________________________________¦
¦___________¦ 01 – PROG23 ¦___________________________________________________¦
¦___________¦ 02 – PROG23A ¦___________________________________________________¦
¦___________+--------------+___________________________________________________¦
¦______________________________________________________________________________¦
¦______________________________________________________________________________¦
¦______________________________________________________________________________¦
¦______________________________________________________________________________¦
¦___________________________________________+---------+________________________¦
¦___________________________________________¦Opção.:00¦________________________¦
¦___________________________________________+---------+________________________¦
¦______________________________________________________________________________¦
¦______________________________________________________________________________¦
¦______________________________________________________________________________¦
+------------------------------------------------------------------------------+
MENSAGENS: DIGITE UMA DAS OPCOES - [ESC] SAIR

Chamar os programas do seguinte modo:


- Prog23. – via CALL
- Prog23a – via CHAIN

2. Criar o programa PROG22.CBL que será um programa chamado por outro recebendo parâmetros,
portanto, definir 2 campos na Linkage Section:

LINKAGE SECTION.
01 DATA-PAR.
03 DIA-PAR PIC 99.
03 MES-PAR PIC 99.
03 ANO-PAR PIC 99.
77 VALIDA PIC X.

Na Procedure Division, indicar que o programa irá receber os 2 campos (DATA-PAR e FLAG-VALIDA).

FromSoft – Todos os direitos reservados – http://www.fromsoft.com.br Página 82


Curso de Cobol Básico

Fazer teste de data no campo DATA-PAR movendo “S” para o campo FLAG-VALIDA se tudo correto e
“N” se apresentar algum erro:
a) DIA-PAR > 00 e < 32, MES-PAR > 00 e < 13
b) se MES-PAR = 01 ou 03 ou 05 ou 07 ou 08 ou 10 ou 12 e DIA-PAR não pode ser maior que 31
c) se MES-PAR = 02, DIA-PAR não pode ser maior que 29.
d) Se MÊS-PAR = 04 ou 06 ou 09 ou 11 não pode ser maior que 30
Retornar ao programa chamante.

3. Criar o programa PROG23.CBL a partir do PROG12.CBL, fazendo as mesmas funções deste e


incrementando: após receber a Data de Nascimento, fazer chamada ao programa PROG22 (testa
validade de data) passando como parâmetros a Data de Nascimento e um campo FLAG-VALIDA de PIC
X. Ao retornar do PROG22, se o campo FLAG-VALIDA for “N”, pedir a data novamente. No Call usar o
evento ON OVERFLOW. (Será necessario chamar o prog21 usando o xm)

4. Criar o programa PROG23A.CBL a partir do PROG12.CBL,(sendo que este é chamado via CHAIN),
fazendo as mesmas funções deste e incrementando: após receber a Data de Nascimento, fazer
chamada ao programa PROG22 (testa validade de data - VIA CALL) passando como parâmetros a Data
de Nascimento e um campo FLAG-VALIDA de PIC X. Ao retornar do PROG22, se o campo FLAG-
VALIDA for “N”, pedir a data novamente. no CALL, usar o evento ON OVERFLOW. (Será necessario
chamar o prog21 usando o xm)

Obs.: os programas desta lição deverão ter como atributos de tela:


- Máscaras de edição
- Modos avançados de ACCEPT (tanto preenchimento, como teclas de escape)
- Procedure-Names e nomes de variáveis intuitivos.

FromSoft – Todos os direitos reservados – http://www.fromsoft.com.br Página 83


Curso de Cobol Básico

Lição 9

Lição 9 - Conceitos

9.1 - Armazenamento de Dados

Conceito: Para armazenar dados com a linguagem Cobol, utilizamos o conceito de arquivos,
semelhante ao manuseio de arquivos com pastas de documentos: para pegar um documento, você
precisa abrir o arquivo, procurar pela pasta onde ele está (normalmente as pastas são organizadas com
etiquetas) e ler o documento; da mesma forma, quando se vai guardar o documento é necessário
classificá-lo (determinar a que pasta se refere) e atualizar a pasta; quando encerradas as tarefas com o
arquivo, fecha-se o mesmo.
A linguagem Cobol é uma das poucas que possuem declarações e comandos nativos (naturais,
integrantes da linguagem) que permitem o armazenamento de dados.

Ex.: Para melhor entender o conceito de armazenamento de dados em arquivos, faremos analogia com
a situação real de um Departamento de Pessoal de uma empresa. Quando iniciamos uma empresa e
começamos a admitir funcionários, de imediato precisamos de um local onde guardar os documentos
fornecidos para registro e outros que sejam necessários durante a permanência do funcionário na
empresa. Chamaremos esse local de Arquivo de Funcionários, ou então de Escaninho de Funcionários
e o trataremos como:
físico – o arquivo real, onde serão guardados os documentos em papel, as anotações, etc., e lógico – o
arquivo com os dados correspondentes, retirados dos documentos e digitados no computador.

9.2 – Operações com arquivos

Conceito: As operações em arquivos com a linguagem englobam:

• Criar
• Abrir
• Atualizar
• Extrair
• Fechar

9.2.1 – Criação do arquivo

Conceito: Para se criar um arquivo, deve-se definir seu leiaute, o que deverá ser armazenado
nele (quais dados) e o modo de armazenamento e recuperação dos dados. Veremos um conjunto de
declarações e comandos que definirão a criação dos vários tipos de arquivos nativos Cobol.
Logicamente um arquivo deverá ser criado antes de serem armazenados dados no mesmo.

Ex.: Para montarmos nosso Arquivo de Funcionários físico, precisamos determinar qual o melhor tipo
antes de sairmos para comprá-lo na loja. Analisando o objetivo do arquivo, vemos o arquivo ideal com:
• Leiaute: o arquivo pode ser inicialmente apenas com uma gaveta, mas com um local na parte
externa onde se possa colocar uma etiqueta “Arquivo de Funcionários”
• Tipo: o arquivo deverá ser do tipo que comporta pastas suspensas, pois permite colocarmos uma
pasta para cada funcionário, facilita pegarmos a pasta de determinado funcionário para consultar ou
atualizar seus dados e permite retirar as pastas de funcionários que se desligarem da empresa
• Organização: as pastas deverão ser do tipo que permita colocar uma etiqueta com o número de
registro ou o nome do funcionário, para termos agilidade no momento em que precisarmos de
encontrar os dados de determinado funcionário
• Ordem: as pastas deverão ser arquivadas em ordem do número de registro ou do nome do
funcionário
• Acesso e restrição: os integrantes do Departamento de Pessoal deverão ser instruidos sobre as
normas de acesso ao arquivo e restrição, ou seja, quando alguém pegar uma pasta do arquivo,
deverá ser colocado um indicativo no lugar informando que aquela pasta está em uso.

FromSoft – Todos os direitos reservados – http://www.fromsoft.com.br Página 84


Curso de Cobol Básico

9.2.2 – Abertura do arquivo

Conceito: Também é bastante óbvio que, para guardar ou acessar dados em um arquivo,
devemos em primeiro lugar abrir o mesmo.

Ex.: Para que o pessoal possa guardar ou retirar as pastas do arquivo físico, é obvio que deverá abrir a
gaveta do mesmo.

9.2.3 – Atualização de dados no arquivo

Conceito: Os dados são organizados nos arquivos em estruturas denominadas registros.


Veremos a forma de declaração dessas estruturas e os comandos para gravar, atualizar e eliminar
(excluir) registros.

Ex.: os registros correspondem às pastas do arquivo físico, onde são guardados os papéis (dados).

9.2.4 – Extração de dados do arquivo

Conceito: Estaremos trabalhando algumas declarações e comandos que permitem localizar e


ler (recuperar) dados armazenados nos registros de um arquivo, podendo disponibilizá-los em vídeo,
impressora ou outro arquivo.

Ex.: corresponde ao pessoal guardando, lendo, analisando e atualizando as pastas no arquivo físico.

9.2.5 – Fechamento do arquivo

Conceito: Ao final dos trabalhos com um arquivo, o mesmo deverá ser fechado, completando o
conjunto de operações e deixando tudo em ordem, como se estivéssemos encerrando nossa
responsabilidade sobre os dados do arquivo.

Ex.: entre as normas para o pessoal, estaria a de manter o arquivo físico fechado após seu uso.

9.3 – Tipos de arquivos nativos Cobol

Conceito: Para implementar o conceito de arquivos em COBOL, precisamos inicialmente


determinar que tipo de arquivo ele será, ou seja, como os dados ficarão armazenados no mesmo. Os
tipos de arquivos nativos Cobol são:

• Seqüencial
• Texto
• Relativo
• Indexado

9.3.1 - Arquivo Seqüencial: declaramos um arquivo como Seqüencial quando nele armazenamos os
dados à medida que vão surgindo, em seqüência, sem intervalo de linhas. Quando precisamos extrair
dados de um arquivo Seqüencial, lemos registro a registro, até encontrarmos o que desejamos ou até o
fim do arquivo.

Ex.: Suponhamos que a empresa já esteja admitindo os funcionários, mas ainda não adquiriu o arquivo
ideal descrito anteriormente. O responsável pelo recrutamento começa a receber os documentos de
cada pessoa, confere se estão todos alí e vai colocando esses documentos agrupados em uma certa
ordem formando um conjunto com um clips (registros). Logo após, abre a gaveta da sua mesa (arquivo)
e guarda um conjunto sobre o outro, ficando assim o Funcionário-1, Funcionário-2, Funcionário-3,
Funcionário-4, ... Posteriormente, para buscar informações do Funcionário-X, abre a gaveta e começa a
analisar cada conjunto para identificar o funcionário e poder manipular seus documentos.

9.3.2 - Arquivo Texto: um arquivo texto é semelhante ao Seqüencial, com a diferença de que seu
formato é um formato padrão de arquivo (normalmente denominado arquivo TXT) que pode ser gerado,

FromSoft – Todos os direitos reservados – http://www.fromsoft.com.br Página 85


Curso de Cobol Básico

lido ou atualizado por outras linguagens ou aplicativos. Como exemplo, um arquivo texto pode ser
manuseado por qualquer editor de textos (Word, Edit do DOS, etc.). A cada registro incluido em um
arquivo texto, inclui-se uma nova linha no arquivo. Esta é a diferença principal entre o arquivo
Sequencial e o arquivo Texto.

Ex.: a aplicação do conceito “texto” no nosso arquivo fìsico, seria algo semelhante ao ato do
responsável pelo Departamento de Pessoal repassar aos demais a forma como estão organizados os
dados em cada conjunto.

9.3.3 - Arquivo Relativo: também semelhante ao arquivo Seqüencial, um arquivo relativo é gerado da
mesma forma, porém o acesso aos seus registros pode ser de forma seqüencial ou fazendo-se
referência ao número do seu registro no arquivo (1o, 2o, etc.), ou seja, seu número relativo no arquivo. A
partir deste arquivo, surge um novo conceito. O conceito de referência aos registros(chave).

Ex.: Se o responsável pelo recrutamento, além de conferir os documentos e guardar na gaveta, fizer
uma lista numerada para anotar os nomes das pessoas à medida que for admitindo e colocar esta lista
sobre sua mesa, será bem mais fácil localizar um funcionário quando for manusear seus dados. Eis o
modelo da relação:

Ordem Relativa Nome


1 Funcionário-1
2 Funcionário-2
3 Funcionário-3
4 .
5 .
6 .

9.3.4 - Arquivo Indexado: no arquivo indexado cada registro é gerado com uma ou mais referências
(índices) para acesso. Assim, quando precisarmos buscar os dados armazenados de um registro,
poderemos fazê-lo usando um de seus índices. Estes índices servem também para organizar os
registros em uma ou mais ordens, para facilitar o acesso ordenado em uma extração.

Ex.: Finalmente podemos montar nosso arquivo ideal, colocando nele uma pasta por funcionário, com
uma “orelha” (chave) em cada pasta na qual escrevemos o nome do funcionário. Isto facilitará na hora
de pegar a pasta de determinado funcionário, porque a pessoa precisará consultar apenas as “orelhas”.
Se as pastas estiverem arquivadas em ordem alfabética por exemplo (chave alternativa), a pessoa
encontrará a pasta pretendida muito mais rapidamente.

Índice Principal Índice Secundário


1 Funcionário-1
2 Funcionário-2
3 Funcionário-3
4 Funcionário-4

9.4 – Definição de arquivos Cobol

9.4.1 – Definição da estrutura do arquivo

Conceito: Na declaração de um arquivo definimos seu nome, seu tipo (organização), como
poderá ser acessado, suas chaves, sua indicação de status. As declarações a seguir nos permitem
definir a estrutura dos arquivos.

9.4.1.1 – Input-Output section. File-Control.

Conceito: É nesta seção que ficam agrupadas as informações relativas à declaração dos
arquivos. Ela faz parte da ENVIRONMENT DIVISION. Anexo à INPUT-OUTPUT SECTION, sempre
declara-se o FILE-CONTROL.

FromSoft – Todos os direitos reservados – http://www.fromsoft.com.br Página 86


Curso de Cobol Básico

ENVIRONMENT DIVISION.
INPUT-OUTPUT SECTION.
FILE-CONTROL.
SELECT FUNCIONARIO ASSIGN TO "ARQFUNC.DAT"
ORGANIZATION IS SEQUENTIAL.
FILE STATUS IS FILE-STATUS.

Obs.: o exemplo acima mostra a definição de um Arquivo de Funcionários lógico e do tipo “gaveta do
responsável com os papéis agrupados com um clips”.

9.4.1.2 - Cláusula SELECT

Conceito: Cláusula usada para declaração de cada arquivo. Na estrutura da cláusula SELECT,
definimos:

• Nome do arquivo: nome com o qual o arquivo será referenciado no programa. Segue os mesmos
princípios de declaração de nome de variáveis e procedimentos.

• ASSIGN TO <arquivo físico>: em <arquivo físico> define-se o nome físico (no qual pode-se definir
também a pasta do mesmo) do arquivo no disco ou indica-se que o arquivo se trata de uma
impressora (ASSIGN TO PRINTER). Em <arquivo físico> declara-se o nome do arquivo entre aspas
ou pode-se usar o nome de uma variável.

SELECT FD-DO-ARQUIVO ASSIGN TO “arquivo.dat”


SELECT FD-DO-ARQUIVO ASSIGN TO “ARQUIVOS\arquivo.dat”
SELECT FD-DO-ARQUIVO ASSIGN TO “ARQUIVOS/arquivo.dat”
SELECT FD-DO-ARQUIVO ASSIGN TO NOME-ARQUIVO
SELECT FD-DO-ARQUIVO ASSIGN TO PRINTER
SELECT FD-DO-ARQUIVO ASSIGN TO DISK

PRINTER - Impressão direta para a porta LPT1 da impressora


DISK - Impressao direta para o disco. Necessita de indicação de VALUE OF FILE-ID na FD.

• ORGANIZATION IS <organização do arquivo>: define-se o tipo do arquivo: SEQUENTIAL


(arquivo do tipo seqüencial), LINE SEQUENTIAL (arquivo texto), RELATIVE (arquivo relativo) e
INDEXED (arquivo indexado).

ORGANIZATION IS SEQUENTIAL
ORGANIZATION IS LINE SEQUENTIAL
ORGANIZATION IS INDEXED
ORGANIZATION IS RELATIVE

• ACCESS MODE IS <modo de acesso>: este parâmetro permite definir o modo de acesso ao
registro. Existem 3 modos de acesso, SEQUENTIAL(Sequencial), que é o acesso somente de
registro a registro, RANDOM(Randômico), que é o acesso somente a chave do registro e por último
o DYNAMIC(Dinâmico) que faz o acesso das duas formas. Entretanto, os três modos de acesso,
diferenciam-se também na velocidade.

ACCESS MODE IS SEQUENTIAL


ACCESS MODE IS RANDOM
ACCESS MODE IS DYNAMIC

• LOCK MODE IS <tipo de bloqueio>: opcional na maioria dos compiladores, este parâmetro
permite definir o bloqueio de arquivos ou registros, quanto ao acesso simultâneo. Muito usado para
sistemas multiusuário, onde vários usuários acessem ao mesmo tempo o mesmo arquivo/registro:
• Modo de bloqueio AUTOMATIC: faz o bloqueio dos registros, automaticamente, sem a
intervenção do programador
• Modo de bloqueio MANUAL: faz o bloqueio manual dos registros, sob o controle do
programador, especificado a cada operação.

FromSoft – Todos os direitos reservados – http://www.fromsoft.com.br Página 87


Curso de Cobol Básico

• Modo de bloqueio EXCLUSIVE: faz bloqueio exclusivo dos registros, ou seja, somente quem
abriu o arquivo pode trabalhar com ele.

LOCK MODE IS AUTOMATIC


LOCK MODE IS MANUAL
LOCK MODE IS EXCLUSIVE

Obs.: esta cláusula permite que coloquemos no arquivo lógico uma marca indicando que determinado
registro (pasta no arquivo físico) está sendo utilizado por outra pessoa, como vimos na descrição do
arquivo ideal.

• FILE STATUS IS <variável>: Com o FILE STATUS define-se qual campo irá conter o código de
retorno (status) das operações realizadas no arquivo. Esse campo deverá ser declarado com 2
bytes, que chamaremos aqui de STATUS KEY 1 e STATUS KEY 2.

FILE STATUS IS CODIGO-RETORNO.

WORKING-STORAGE SECTION.
01 FILE-STATUS.
03 STATUS-KEY-1 PIC X.
03 STATUS-KEY-2 PIC X.
Onde:

• STATUS KEY 1 pode assumir os seguintes valores:


“0” - A operação no arquivo foi executada com sucesso.
“1” - A declaração de leitura seqüencial não foi completada corretamente.
“2” - Chave Inválida. Houve uma das seguintes possibilidades: erro de seqüência, ou chave
duplicada ou registro não encontrado.
“3” - Erro permanente, causado por falha do sistema, erro de paridade ou transmissão.
“4” - Erro Lógico.
“9” - Mensagem de erro do sistema operacional.

• Se o STATUS KEY 1 contiver o valor “0”, o STATUS KEY 2 pode assumir os seguintes valores:
“0” - (todos os tipos de arquivo) - operação realizada com sucesso absoluto.
“2” - (arquivos indexados) - indica uma das duas possibilidades:
- após um comando de leitura, o valor da chave corrente de referência é igual ao valor da chave
do próximo registro.
- após um comando de escrita, o registro gravado criou uma duplicação de uma chave, para
pelo menos uma chave alternativa com a cláusula que permite duplicação de valores.
“4” - (todos os tipos de arquivo) - indica que o comprimento do registro especificado não está de
acordo com o arquivo.
• Se o STATUS KEY 1 contiver o valor “1”, o STATUS KEY 2 pode assumir os seguintes valores:
“0” - (todos os tipos de arquivo) - indica que não existe o próximo registro lógico.
• Se o STATUS KEY 1 contiver o valor “2”, o STATUS KEY 2 pose assumir os seguintes valores:
“1” - (arquivos indexados com acesso seqüencial) - indica um erro de seqüência. Pode indicar
alteração do valor da chave primária.
“2” - (arquivos indexados) - indica um valor de chave duplicada.
“3” - indica que nenhum registro foi encontrado.
• Se o STATUS KEY 1 contiver o valor “3”, o STATUS KEY 2 pose assumir os seguintes valores:
“0” - indica que não existe informação disponível para aquele tipo de erro.
“5” - (todos os tipos de arquivo) - indica que o arquivo não foi encontrado durante a
tentativa de abri-lo.
“7” - indica que se tentou abrir um arquivo de modo não permitido.
“8” - indica que se tentou abrir um arquivo travado.
“9” - indica que houve conflito entre os atributos do arquivo e os atributos do arquivo especificados
no programa.
• Se o STATUS KEY 1 contiver o valor “4”, o STATUS KEY 2 pode assumir os seguintes valores:
“1” - indica que se tentou abrir um arquivo que já estava aberto.
“2” - indica que se tentou fechar um arquivo que não está aberto.

FromSoft – Todos os direitos reservados – http://www.fromsoft.com.br Página 88


Curso de Cobol Básico

“3” - (arquivos com acesso seqüencial) - indica que a última operação com aquele arquivo, antes de
uma operação de exclusão ou atualização do registro não foi leitura. Em outras palavras, tentou-se
excluir ou atualizar um registro que não foi lido.
“4” - indica que o registro ou é maior que o maior registro do arquivo ou é menor que o menor
registro do arquivo, ou ainda que o registro não possui o mesmo tamanho que o registro do arquivo.
“6” - indica que a operação de leitura seqüencial não foi bem sucedida.
“7” - indica que se tentou uma operação de leitura ou início em um arquivo aberto de forma
incorreta.
“8” - indica que se tentou inserir um registro em um arquivo que foi aberto de forma a não permitir
esta operação.
“9” - indica que se tentou excluir ou atualizar um registro em um arquivo que foi aberto de forma a
não permitir essas operações.

Combinações de File Status mais comuns

00 – Operação realizada com sucesso


05 – Está tentando abrir um arquivo que não tem registros
10 – Está tentando ler seqüencialmente um arquivo após seu final
22 – Está tentando gravar um registro cuja chave primária já existe no arquivo
23 – Está tentando ler um registro cuja chave não existe no arquivo
35 – Está tentando abrir um arquivo inexistente
41 – Está tentando abrir um arquivo já aberto
42 – Está tentando fechar um arquivo já fechado

Nota importante: Após cada comando executado em um arquivo, é aconselhável fazer um teste
de FILE-STATUS para verificar se a operação foi realizada com sucesso, de preferência enviando
uma mensagem ao usuário caso tenha ocorrido alguma irregularidade.

IF FILE-STATUS EQUAL "23"


DISPLAY "REGISTRO DO ARQUIVO NAO EXISTE" AT 2410
END-IF.

IF FILE-STATUS EQUAL "35"


DISPLAY "ARQUIVO FISICO NAO EXISTE" AT 2410
END-IF.

IF FILE-STATUS EQUAL ZEROS


CONTINUE
END-IF.

9.4.2 – Leiaute dos registros do arquivo

Conceito: Na definição dos leiautes dos registros, determinamos quais serão os dados
armazenados em cada tipo de registro e como esses dados estarão organizados (ordem, tipo, tamanho,
etc.). As declarações a seguir nos permitem definir os leiautes dos registros.

Ex.: ao exemplificarmos sobre o tipo de arquivo LINE SEQUENTIAL no exemplo de um Arquivo de


Funcionários físico, dissemos que o responsável pelo arquivamento precisaria de ensinar para as outras
pessoas do departamento como os documentos de cada funcionário deveriam ser agrupados no
arquivo. Nessa hora ele estaria passando o “leiaute de arquivamento”, que poderia ser primeiro a Ficha
de Inscrição, depois cópia da Certidão de Nascimento, em seguida cópia da Carteira de Identidade, etc.

9.4.2.1 – DATA DIVISION. FILE SECTION.

Conceito: A FILE SECTION é a seção onde se define as estruturas dos registros dos arquivos,
sendo parte integrante da DATA DIVISION.

9.4.2.2 - Cláusula FD

FromSoft – Todos os direitos reservados – http://www.fromsoft.com.br Página 89


Curso de Cobol Básico

Conceito: Cláusula que trata da definição lógica dos arquivos, suas características e estrutura.
FD (abreviatura de File Description) é um indicador de nível (como o nível 77 e o nível 01) , que
identifica o início da descrição de um arquivo.

DATA DIVISION.
FILE SECTION.
FD ARQUIVO-CLIENTE.
01 REGISTRO-CLIENTE.
05 CODIGO-CLIENTE PIC 9(05).
05 NOME-CLIENTE PIC X(35).
05 ENDERECO-CLIENTE.
10 RUA-CLIENTE PIC X(25).
10 NUMERO-CLIENTE PIC 9(05).
10 COMP-CLIENTE PIC X(10).
05 CIDADE-CLIENTE PIC X(25).
05 ESTADO-CLIEMTE PIC A(02).

Nota: Verifique que para se criar o leiaute de um registro, deve-se criar uma variável-grupo de nível 01 e
os campos desse registro devem ser sub-níveis da variável-grupo.

9.4.2.3 – Cláusula VALUE OF FILE-ID.

Conceito: Cláusula que permite indicar o nome do arquivo, com diretórios associado a uma
variável, ou a um caminho específico. Ela fica dentro da File Description (FD) após a descrição da
mesma. Este tipo de definição é muito usada para sistemas cobol multiambiente (Sistemas COBOL
Unix/Linux/Novell/HP-UX/Sun, etc). Se for usado uma variável para a indicação do caminho do arquivo,
deve-se declará-la na Working-Storage Section do programa. Para usá-la deve-se indicar o parametro
ASSIGN TO como DISK.

ENVIRONMENT DIVISION.
INPUT-OUTPUT SECTION.
FILE-CONTROL.
SELECT FUNCIONARIO ASSIGN TO DISK
ORGANIZATION IS SEQUENTIAL.
FILE STATUS IS FILE-STATUS.

DATA DIVISION
VALUE OF FILE-ID IS "ARQUIVOS/ARQUIVO.DAT".
FILE SECTION.
FD ARQUIVO-CLIENTE.
01 REGISTRO-CLIENTE.
05 CODIGO-CLIENTE PIC 9(05).
05 NOME-CLIENTE PIC X(35).

Ou então:

ENVIRONMENT DIVISION.
INPUT-OUTPUT SECTION.
FILE-CONTROL.
SELECT FUNCIONARIO ASSIGN TO DISK
ORGANIZATION IS SEQUENTIAL
FILE STATUS IS FILE-STATUS.

DATA DIVISION
VALUE OF FILE-ID IS VARIAVEL-ARQUIVO.
FILE SECTION.
FD ARQUIVO-CLIENTE.
01 REGISTRO-CLIENTE.
05 CODIGO-CLIENTE PIC 9(05).
05 NOME-CLIENTE PIC X(35).

WORKING-STORAGE SECTION.
77 VARIAVEL-ARQUIVO PIC X(20) VALUE "ARQUIVOS/ARQUIVO.DAT".

9.4.2.4 – Uso de Copybooks (COPY) na definição de leiautes

Conceito: Como vimos anteriormente, podemos usar a cláusula COPY para inserir no nosso
programa fonte um trecho de código já escrito anteriormente e guardado em um arquivo, bastando

FromSoft – Todos os direitos reservados – http://www.fromsoft.com.br Página 90


Curso de Cobol Básico

declarar o COPY seguido do nome desse arquivo. Essa técnica é bastante útil quando se trabalha com
arquivos. Podemos, por exemplo, escrever o leiaute do registro de cliente do exemplo acima e guardá-lo
num arquivo de nome CLIENTE.CPY. A partir daí, todo programa que for usar o arquivo de clientes
poderá se privilegiar do uso da estrutura, bastando declarar o COPY na FILE SECTION.

DATA DIVISION.
FILE SECTION.
COPY "CLIENTE.CPY".

Nota: Observar que o COPY pode ser usado com qualquer trecho de código, portanto poderia ser
usado para a definição da SELECT do arquivo, bem como outros comandos repetitivos que veremos
daqui em diante. O COPY também facilita a manutenção, pois padroniza o nome de variáveis, otimiza
alterações (uma correção nas declarações de um COPY, será válida para todos os programas que o
usam) e reduz a escrita.

9.5 – Comandos para manuseio de arquivo (executar operações)

Conceito: A seguir veremos os comandos comuns para trabalhar com qualquer tipo de arquivo
Cobol.

Ex.: raciocinando como acontece num Departamento de Pessoal, o chefe poderia solicitar ao
responsável pelo recrutamento (que agora já virou arquivista também!!!) para registrar na ficha do
Funcionário-X que o mesmo é casado. O “arquivista” terá de executar várias operações: abrir o arquivo,
localizar a pasta do Funcionário-X, escrever o novo Estado Civil do mesmo, retornar a pasta para o
arquivo e fecha-lo.

9.5.1 – Comando OPEN

Conceito: Comando utilizado para a abertura de arquivos. Um arquivo deve ser aberto antes de se
executar qualquer outra ação (operação) com o mesmo. O comando OPEN posiciona o “ponteiro do
arquivo” no primeiro registro do arquivo. Pode-se abrir um arquivo dos seguintes modos:
• INPUT: somente para leitura
• OUTPUT: somente para criação+gravação (se já existir o arquivo no disco, irá destruir os dados do
mesmo, recriando-o)
• I-O (Input-Output): permite leitura e gravação
• EXTEND: permite estender um arquivo, ou seja, acrescentar registros em um arquivo já existente
(apenas em arquivos do tipo SEQUENTIAL E LINE SEQUENTIAL)
OPEN INPUT CLIENTE.
IF FILE-STATUS EQUAL "00"
CONTINUE
ELSE
DISPLAY "ERRO DE ABERTURA DO ARQUIVO CLIENTE" AT 2410
END-IF.

OPEN OUTPUT CLIENTE.


IF FILE-STATUS EQUAL "00"
CONTINUE
ELSE
DISPLAY "ERRO DE CRIACAO DO ARQUIVO CLIENTE" AT 2410
END-IF.

OPEN I-O CLIENTE.


IF FILE-STATUS EQUAL "00"
CONTINUE
ELSE
OPEN OUTPUT CLIENTE
IF FILE-STATUS EQUAL "00"
CONTINUE
ELSE

FromSoft – Todos os direitos reservados – http://www.fromsoft.com.br Página 91


Curso de Cobol Básico

DISPLAY "ERRO DE CRIACAO DO ARQUIVO CLIENTE" AT 2410


GO TO FIM
END-IF
GO TO INICIO
END-IF.

OPEN EXTEND CLIENTE.


IF FILE-STATUS EQUAL "00"
CONTINUE
ELSE
OPEN OUTPUT CLIENTE
IF FILE-STATUS EQUAL "00"
CONTINUE
ELSE
DISPLAY "ERRO DE CRIACAO DO ARQUIVO CLIENTE" AT 2410
GO TO FIM
END-IF
GO TO INICIO
END-IF.

9.5.2 – Comando READ

Conceito: Comando que efetua a leitura de um registro existente em um arquivo, tornando os


dados do registro disponíveis para manuseio. Nesse comando, faz-se referência ao nome do arquivo.

READ ARQUIVO-CLIENTE.
IF FILE-STATUS EQUAL "00"
CONTINUE
ELSE
DISPLAY "ERRO DE LEITURA NO ARQUIVO CLIENTE" AT 2410
END-IF.

9.5.3 - Comando WRITE

Conceito: Comando que efetua a gravação de um registro, ou seja, a inclusão de um novo


registro no arquivo. Nesse comando, faz-se referência ao nome do registro (nível 01).

WRITE REGISTRO-CLIENTE.
IF FILE-STATUS EQUAL "00"
CONTINUE
ELSE
DISPLAY "ERRO DE GRAVACAO NO ARQUIVO CLIENTE" AT 2410
END-IF.

9.5.4 – Comando REWRITE

Conceito: Comando que efetua a regravação de um registro no arquivo. Em outras palavras, a


regravação permite a atualização dos dados de um registro já existente no arquivo. Nesse comando,
faz-se referência ao nome do registro (nível 01).

REWRITE REGISTRO-CLIENTE.
IF FILE-STATUS EQUAL "00"
CONTINUE
ELSE
DISPLAY "ERRO DE REGRAVACAO NO ARQUIVO CLIENTE" AT 2410
END-IF.

9.5.5 - Comando DELETE

Conceito: Comando que apaga física e logicamente um registro em um arquivo, ou seja, retira o
registro do arquivo fisico. Nesse comando, faz-se referência ao nome do registro (nível 01).

DELETE REGISTRO-CLIENTE.
IF FILE-STATUS EQUAL "00"
CONTINUE
ELSE
DISPLAY "ERRO DE EXCLUSAO NO ARQUIVO CLIENTE" AT 2410

FromSoft – Todos os direitos reservados – http://www.fromsoft.com.br Página 92


Curso de Cobol Básico

END-IF.

9.5.6 – Comando CLOSE

Conceito: Comando usado para fechar o arquivo.

CLOSE CLIENTE.
IF FILE-STATUS EQUAL "00"
CONTINUE
ELSE
DISPLAY "ERRO DE FECHAMENTO DO ARQUIVO CLIENTE" AT 2410
END-IF.

Nota: Na maioria dos compiladores o fechamento de um arquivo não é obrigatório se você não for
reprocessá-lo no mesmo programa ou em um programa chamado pelo programa que o abriu, pois
quando um processo Cobol está para ser descarregado da memória (comando EXIT PROGRAM), ele
fecha automaticamente os arquivos que ainda estiverem abertos.

9.6 - Eventos em manuseamento em arquivos.

Conceito: Geralmente, quando usamos os comandos COBOL para manusearmos arquivos,


alguns eventos são comuns dentre eles:

- Fim ou Início de Arquivo - File Status 10.


- Chave Inválida - File Status 23.

Então para facilitar a vida do programador cobol foram criados algumas extensões de nome
para estes eventos.

AT END/NOT AT END: Significa início ou fim de arquivo


INVALID KEY/NOT INVALID KEY: Significa chave inválida ou não chave invalida (que é o
mesmo de chave válida).

Lição 9 – Exemplo 1
IDENTIFICATION DIVISION.
PROGRAM-ID. L09EX15.
AUTHOR. FROMSOFT.
ENVIRONMENT DIVISION.
CONFIGURATION SECTION.
SPECIAL-NAMES.
DECIMAL-POINT IS COMMA.
INPUT-OUTPUT SECTION.
SELECT ARQUIVO-CLIENTE ASSIGN TO DISK "CLIENTES.DAT"
ORGANIZATION IS SEQUENTIAL
ACCESS MODE IS SEQUENTIAL
FILE STATUS IS CODIGO-STATUS.
DATA DIVISION.
FILE SECTION.
FD ARQUIVO-CLIENTE.
01 REGISTRO-CLIENTE.
05 CODIGO-CLIENTE PIC 9(05).
05 NOME-CLIENTE PIC X(35).
05 ENDERECO-CLIENTE.
10 RUA-CLIENTE PIC X(25).
10 NUMERO-CLIENTE PIC 9(05).
10 COMP-CLIENTE PIC X(10).
05 CIDADE-CLIENTE PIC X(25).
05 ESTADO-CLIENTE PIC A(02).
WORKING-STORAGE SECTION.
77 CODIGO-STATUS PIC X(02) VALUE SPACES.
77 CODIGO-LEITURA PIC 9(05) VALUE ZEROS.
77 CODIGO-ED PIC Z(05) VALUE SPACES.
77 OPCAO PIC 9(01) VALUE ZEROS.
77 OPCAO-ED PIC Z(01) VALUE SPACES.
77 NUMERO-ED PIC Z(05) VALUE SPACES.
77 PARA-TELA PIC X(01) VALUE SPACES.

FromSoft – Todos os direitos reservados – http://www.fromsoft.com.br Página 93


Curso de Cobol Básico

77 TECLA PIC X(02) VALUE SPACES.

PROCEDURE DIVISION.
ESCOLHE-ROTINA.
DISPLAY " " AT 0101 WITH ERASE EOS BACKGROUND-COLOR 1
FOREGROUND-COLOR 7.
DISPLAY "1 - LEITURA DE DADOS EXISTENTES" AT 1115
DISPLAY "2 - ALTERACAO DE DADOS EXISTENTES " AT 1215
DISPLAY "3 - INCLUSAO DE DADOS NAO EXISTENTES" AT 1315
DISPLAY "4 - FECHAMENTO DO ARQUIVO" AT 1415
DISPLAY "5 - S A I R" AT 1515
DISPLAY "ESCOLHA O PROGRAMA A CHAMAR" AT 1615
ACCEPT OPCAO-ED AT 1644 WITH AUTO
MOVE OPCAO-ED TO OPCAO
EVALUATE OPCAO
WHEN 1
PERFORM ABRE-ARQUIVO-INPUT
PERFORM BUSCA-DADOS THRU FIM-BUSCA-DADOS
WHEN 2
PERFORM ABRE-ARQUIVO-I-O
PERFORM REGRAVA-CLIENTE
WHEN 3
PERFORM ABRE-ARQUIVO-EXTEND
PERFORM GRAVA-CLIENTE
WHEN 4
PERFORM ABRE-ARQUIVO-INPUT
PERFORM FECHA-CLIENTE
DISPLAY "ARQUIVO FECHADO!" AT 2220
ACCEPT PARA-TELA AT 2379 WITH AUTO NO-ECHO
DISPLAY " " AT 2220
WHEN 5
PERFORM FIM-DO-PROGRAMA
WHEN OTHER
PERFORM FIM-DO-PROGRAMA
END-EVALUATE.
GO TO ESCOLHE-ROTINA.

BUSCA-DADOS.
PERFORM MOSTRA-TELA
ACCEPT CODIGO-ED AT 0532
ACCEPT TECLA FROM ESCAPE KEY
IF TECLA EQUAL "01"
PERFORM FECHA-CLIENTE
GO TO ESCOLHE-ROTINA
END-IF
MOVE CODIGO-ED TO CODIGO-LEITURA
IF CODIGO-LEITURA EQUAL ZEROS
DISPLAY "INFORME UM DADO PARA SER BUSCADO" AT 2022
ACCEPT PARA-TELA AT 2379 WITH AUTO NO-ECHO
DISPLAY " " AT 2022
GO TO BUSCA-DADOS
END-IF.
LE-ARQUIVO.
READ ARQUIVO-CLIENTE AT END GO TO RESPOSTA.
IF CODIGO-CLIENTE EQUAL CODIGO-LEITURA
DISPLAY NOME-CLIENTE AT 0632
DISPLAY RUA-CLIENTE AT 0832
INITIALIZE NUMERO-ED
MOVE NUMERO-CLIENTE TO NUMERO-ED
DISPLAY NUMERO-ED AT 0932
DISPLAY COMP-CLIENTE AT 1032
DISPLAY CIDADE-CLIENTE AT 1132
DISPLAY ESTADO-CLIENTE AT 1232
ACCEPT PARA-TELA AT 2379 WITH AUTO NO-ECHO
GO TO BUSCA-DADOS
ELSE
GO TO LE-ARQUIVO
END-IF.
RESPOSTA.
DISPLAY "CODIGO INEXISTENTE" AT 2022
ACCEPT PARA-TELA AT 2379 WITH AUTO NO-ECHO
DISPLAY " " AT 2022
PERFORM FECHA-CLIENTE
PERFORM ABRE-ARQUIVO-INPUT
GO TO BUSCA-DADOS.

FromSoft – Todos os direitos reservados – http://www.fromsoft.com.br Página 94


Curso de Cobol Básico

FIM-BUSCA-DADOS. EXIT.

ALTERA-DADOS.
PERFORM MOSTRA-TELA
ACCEPT CODIGO-ED AT 0532
ACCEPT TECLA FROM ESCAPE KEY
IF TECLA EQUAL "01"
PERFORM FECHA-CLIENTE
GO TO ESCOLHE-ROTINA
END-IF
MOVE CODIGO-ED TO CODIGO-LEITURA
IF CODIGO-LEITURA EQUAL ZEROS
DISPLAY "INFORME UM DADO PARA SER BUSCADO" AT 2022
ACCEPT PARA-TELA AT 2379 WITH AUTO NO-ECHO
DISPLAY " " AT 2022
GO TO ALTERA-DADOS
END-IF.
LE-ARQUIVO-P-ALTERACAO.
READ ARQUIVO-CLIENTE AT END GO TO RESPOSTA-ALTERACAO.
IF CODIGO-CLIENTE EQUAL CODIGO-LEITURA
DISPLAY NOME-CLIENTE AT 0632
DISPLAY RUA-CLIENTE AT 0832
DISPLAY NUMERO-CLIENTE AT 0932
DISPLAY COMP-CLIENTE AT 1032
DISPLAY CIDADE-CLIENTE AT 1132
DISPLAY ESTADO-CLIENTE AT 1232
GO TO FIM-ALTERA-DADOS
ELSE
GO TO LE-ARQUIVO-P-ALTERACAO
END-IF.
RESPOSTA-ALTERACAO.
DISPLAY "CODIGO INEXISTENTE" AT 2022
ACCEPT PARA-TELA AT 2379 WITH AUTO NO-ECHO
DISPLAY " " AT 2022
PERFORM FECHA-CLIENTE
PERFORM ABRE-ARQUIVO-INPUT
GO TO ALTERA-DADOS.
FIM-ALTERA-DADOS. EXIT.

GRAVA-CLIENTE.
PERFORM MOSTRA-TELA
INITIALIZE REGISTRO-CLIENTE
PERFORM PEGA-DADOS THRU FIM-PEGA-DADOS
WRITE REGISTRO-CLIENTE
IF CODIGO-STATUS NOT EQUAL ZEROS
DISPLAY "ERRO NA GRAVACAO DO REGISTRO" AT 2220
ACCEPT PARA-TELA AT 2379 WITH AUTO NO-ECHO
DISPLAY " " AT 2220
GO TO FIM-DO-PROGRAMA
END-IF
PERFORM FECHA-CLIENTE.

REGRAVA-CLIENTE.
INITIALIZE REGISTRO-CLIENTE
PERFORM ALTERA-DADOS THRU FIM-ALTERA-DADOS
PERFORM PEGA-DADOS THRU FIM-PEGA-DADOS
REWRITE REGISTRO-CLIENTE
IF CODIGO-STATUS NOT EQUAL ZEROS
DISPLAY "ERRO NA REGRAVACAO DO REGISTRO" AT 2220
ACCEPT PARA-TELA AT 2379 WITH AUTO NO-ECHO
DISPLAY " " AT 2220
GO TO FIM-DO-PROGRAMA
END-IF
PERFORM FECHA-CLIENTE.

FECHA-CLIENTE.
CLOSE ARQUIVO-CLIENTE.
IF CODIGO-STATUS NOT EQUAL ZEROS
DISPLAY "ERRO NO FECHAMENTO DO ARQUIVO" AT 2220
ACCEPT PARA-TELA AT 2379 WITH AUTO NO-ECHO
DISPLAY " " AT 2220
GO TO FIM-DO-PROGRAMA
END-IF.

FIM-DO-PROGRAMA.

FromSoft – Todos os direitos reservados – http://www.fromsoft.com.br Página 95


Curso de Cobol Básico

DISPLAY " " AT 0101 WITH ERASE EOS BACKGROUND-COLOR 1


FOREGROUND-COLOR 7.
STOP RUN.

ABRE-ARQUIVO-EXTEND.
OPEN EXTEND ARQUIVO-CLIENTE
IF CODIGO-STATUS NOT EQUAL ZEROS
PERFORM ABRE-ARQUIVO-OUTPUT
END-IF.

ABRE-ARQUIVO-I-O.
OPEN I-O ARQUIVO-CLIENTE
IF CODIGO-STATUS NOT EQUAL ZEROS
PERFORM ABRE-ARQUIVO-OUTPUT
END-IF.

ABRE-ARQUIVO-OUTPUT.
OPEN OUTPUT ARQUIVO-CLIENTE
CLOSE ARQUIVO-CLIENTE
IF CODIGO-STATUS NOT EQUAL ZEROS
DISPLAY "ERRO NA ABERTURA DO ARQUIVO" AT 2520
GO TO FIM-DO-PROGRAMA
END-IF.

ABRE-ARQUIVO-INPUT.
OPEN INPUT ARQUIVO-CLIENTE
IF CODIGO-STATUS NOT EQUAL ZEROS
DISPLAY "ERRO NA ABERTURA DO ARQUIVO" AT 2520
GO TO FIM-DO-PROGRAMA
END-IF.

MOSTRA-TELA.
DISPLAY " " AT 0101 WITH ERASE EOS BACKGROUND-COLOR 1
FOREGROUND-COLOR 7
DISPLAY "Codigo.............:" at 0510
DISPLAY "Nome...............:" at 0610
DISPLAY "Endereco" at 0710
DISPLAY " Rua.........:" at 0810
DISPLAY " Numero......:" at 0910
DISPLAY " Complemento.:" at 1010
DISPLAY " Cidade......:" at 1110
DISPLAY " Estado......:" at 1210
DISPLAY "Mensagens: " at 2010.

PEGA-DADOS.
PEGA-CODIGO.
ACCEPT CODIGO-ED AT 0532 WITH AUTO
ACCEPT TECLA FROM ESCAPE KEY
IF TECLA EQUAL "01"
PERFORM FECHA-CLIENTE
GO TO ESCOLHE-ROTINA
END-IF
MOVE CODIGO-ED TO CODIGO-CLIENTE
IF CODIGO-CLIENTE EQUAL ZEROS
DISPLAY "CODIGO DO CLIENTE INVALIDO" AT 2022
ACCEPT PARA-TELA AT 2379 WITH AUTO NO-ECHO
DISPLAY " " AT 2022
GO TO PEGA-CODIGO
END-IF.

PEGA-NOME.
ACCEPT NOME-CLIENTE AT 0632 WITH AUTO
ACCEPT TECLA FROM ESCAPE KEY
IF TECLA EQUAL "01"
GO TO PEGA-CODIGO
END-IF
IF NOME-CLIENTE EQUAL SPACES
DISPLAY "NOME DO CLIENTE INVALIDO" AT 2022
ACCEPT PARA-TELA AT 2379 WITH AUTO NO-ECHO
DISPLAY " " AT 2022
GO TO PEGA-NOME
END-IF.

PEGA-RUA.
ACCEPT RUA-CLIENTE AT 0832 WITH AUTO

FromSoft – Todos os direitos reservados – http://www.fromsoft.com.br Página 96


Curso de Cobol Básico

ACCEPT TECLA FROM ESCAPE KEY


IF TECLA EQUAL "01"
GO TO PEGA-NOME
END-IF
IF RUA-CLIENTE EQUAL SPACES
DISPLAY "RUA DO CLIENTE INVALIDA" AT 2022
ACCEPT PARA-TELA AT 2379 WITH AUTO NO-ECHO
DISPLAY " " AT 2022
GO TO PEGA-RUA
END-IF.

PEGA-NUMERO.
INITIALIZE NUMERO-ED
ACCEPT NUMERO-ED AT 0932 WITH AUTO
MOVE NUMERO-ED TO NUMERO-CLIENTE
ACCEPT TECLA FROM ESCAPE KEY
IF TECLA EQUAL "01"
GO TO PEGA-NOME
END-IF
IF RUA-CLIENTE EQUAL SPACES
DISPLAY "NUMERO DO CLIENTE INVALIDA" AT 2022
ACCEPT PARA-TELA AT 2379 WITH AUTO NO-ECHO
DISPLAY " " AT 2022
GO TO PEGA-NUMERO
END-IF.

PEGA-COMPLEMENTO.
ACCEPT COMP-CLIENTE AT 1032 WITH AUTO
ACCEPT TECLA FROM ESCAPE KEY
IF TECLA EQUAL "01"
GO TO PEGA-NUMERO
END-IF
IF COMP-CLIENTE EQUAL SPACES
DISPLAY "COMPLEMENTO DO CLIENTE INVALIDO" AT 2022
ACCEPT PARA-TELA AT 2379 WITH AUTO NO-ECHO
DISPLAY " " AT 2022
GO TO PEGA-COMPLEMENTO
END-IF.

PEGA-CIDADE.
ACCEPT CIDADE-CLIENTE AT 1132 WITH AUTO
ACCEPT TECLA FROM ESCAPE KEY
IF TECLA EQUAL "01"
GO TO PEGA-COMPLEMENTO
END-IF
IF CIDADE-CLIENTE EQUAL SPACES
DISPLAY "CIDADE DO CLIENTE INVALIDO" AT 2022
ACCEPT PARA-TELA AT 2379 WITH AUTO NO-ECHO
DISPLAY " " AT 2022
GO TO PEGA-CIDADE
END-IF.

PEGA-ESTADO.
ACCEPT ESTADO-CLIENTE AT 1232 WITH AUTO
ACCEPT TECLA FROM ESCAPE KEY
IF TECLA EQUAL "01"
GO TO PEGA-CIDADE
END-IF
IF ESTADO-CLIENTE EQUAL SPACES
DISPLAY "ESTADO DO CLIENTE INVALIDO" AT 2022
ACCEPT PARA-TELA AT 2379 WITH AUTO NO-ECHO
DISPLAY " " AT 2022
GO TO PEGA-ESTADO
END-IF.
FIM-PEGA-DADOS. EXIT.

Lição 9 - Exercícios

1. Criar uma estrutura com os seguintes parâmetros: (Com o nome de estrutur.cpy. Geralmente,
chamamos a estrutura do arquivo de SELECT).
Nome da SELECT - ARQFUN
Nome do arquivo – Arqfun.dat

FromSoft – Todos os direitos reservados – http://www.fromsoft.com.br Página 97


Curso de Cobol Básico

Organização – Sequencial (SEQUENTIAL)


Modo de Acesso: Sequencial
Arquivo de File Status – FILE-STATUS

2. Criar um layout com os seguintes parâmetros: (Com o nome de layout.cpy. Geralmente, Chamamos
o layout do arquivo de FD)
Nome da FD - ARQFUN
Nome do Registro - Reg-Arqfun
Codigo – 5 posições numéricas
Nome – 30 posições alfanuméricas
Endereco – 30 posições alfanuméricas
Telefone – 15 posições numéricas

FromSoft – Todos os direitos reservados – http://www.fromsoft.com.br Página 98


Curso de Cobol Básico

Lição 10

Lição 10 - Conceitos

10.1 - Trabalhando com arquivos: Arquivo SEQUENTIAL

Conceito: Para declaração de um arquivo do tipo SEQUENTIAL, usamos no SELECT a cláusula


ORGANIZATION IS SEQUENTIAL. No COBOL, caso a clausula ORGANIZATION IS não for declarada,
assume que é do tipo SEQUENTIAL.

10.2 - Comandos usados em um arquivo SEQUENTIAL

10.2.1 - Modo de acesso

Conceito: Quando queremos ler dados de um arquivo, devemos definir na SELECT a forma como o
arquivo será acessado. Um Arquivo SEQUENTIAL só admite ACCESS MODE IS SEQUENTIAL..
Veremos outros modos de acesso em outros tipos de organização.

10.2.2 - O comando OPEN com cláusula INPUT

Conceito: Utilizamos o comando OPEN INPUT para abrir arquivos já existentes apenas para leitura.

10.2.3 - O comando OPEN com cláusula OUTPUT

Conceito: Utilizamos o comando OPEN OUTPUT para criar arquivos.

10.2.4 - O comando OPEN com cláusula EXTEND

Conceito: Quando queremos fazer complementação de registros em um arquivo seqüencial, é


necessário abri-lo com OPEN EXTEND.

10.2.5 - O comando OPEN com cláusula I-O

Conceito: quando queremos fazer leitura e gravação em um arquivo sequencial, indexado ou relativo,
primeiro é necessário abri-lo com o comando OPEN e cláusula I-O (Input - Output).

10.2.6 – O comando READ com clausula AT END/NOT AT END

Conceito: Quando todos os registros de um arquivo SEQUENTIAL forem lidos, pode ocorrer o evento
AT END, sendo executados os comandos que estiverem indicados após esta cláusula.

10.3 - Demonstração de um arquivo SEQUENTIAL

Se você editar um arquivo sequencial, provavelmente irá encontrar a seguinte estrutura: Este
arquivo em exemplo tem 3 registros.

00001FROMSOFT 01 01 89M3§ GRAU BELO HORIZONTE BRASILEIRA


001 001 001 01N/A AV DOS ANDRADAS 02287STA EFIGENIA BELO HORIZONTE
MG(31) 3357-4832 SALA 1204 00002APS 01 01 79M3§ GRAU
BELO HORIZONTE BRASILEIRA 001 001 001 01N/A AV DOS ANDRADAS 02287STA
EFIGENIA BELO HORIZONTE MG(31) 3357-4832 SALA 1204 00003MEUSAPLICATIVOS.COM
01 01 01M2§ GRAU BELO HORIZONTE BRASILEIRA 001 001 001 01N/A
AV DOS ANDRADAS 02287STA EFIGENIA BELO HORIZONTE MG(31) 3357-4832 SALA 1204

Veja que todos os seus dados vão sendo armazenados a medida que estão sendo gravados,
sem ter um espaçamento definido. Os espaços existentes são devido ao tamanho das variáveis. Se
você for olhar direito e for separar, vai ter 3 registros: um registro de nome FROMSOFT com um valor
antecedente de 00001, um segundo registro chamado APS com um valor antecedente de 00002 e um
terceiro registro chamado MEUSAPLICATIVOS.COM com um valor antecedente de 00003. Agora os
registros existentes no arquivo serão separados e você vai entender melhor: veja.

FromSoft – Todos os direitos reservados – http://www.fromsoft.com.br Página 99


Curso de Cobol Básico

Registro 1.
00001FROMSOFT 01 01 89M3§ GRAU BELO HORIZONTE BRASILEIRA
001 001 001 01N/A AV DOS ANDRADAS 02287STA EFIGENIA BELO HORIZONTE
MG(31) 3357-4832 SALA 1204

Registro 2

00002APS 01 01 79M3§ GRAU BELO HORIZONTE BRASILEIRA


001 001 001 01N/A AV DOS ANDRADAS 02287STA EFIGENIA BELO HORIZONTE
MG(31) 3357-4832 SALA 1204
Registro 3

00003MEUSAPLICATIVOS.COM 01 01 01M2§ GRAU BELO HORIZONTE BRASILEIRA


001 001 001 01N/A AV DOS ANDRADAS 02287STA EFIGENIA BELO HORIZONTE
MG(31) 3357-4832 SALA 1204

Como foi falado, veja que separados sao 3 registros mas dentro do arquivo, os dados vão
sendo armazenados a medida que estão sendo gravados, mediante o tamanho do registro. Então,
depois do último espaço gravado no programa é que o programa grava um novo registro.

10.4 - Como ler um arquivo SEQUENTIAL

O Modo de leitura sequencial não tem o conceito de código, ou seja, o conceito de chave. O
conceito existente em um arquivo sequencial é de sequencias, então quando ele vai gravar, ele grava
de sequencia a sequencia. Para ler um arquivo desse tipo, deve-se ler sequencia a sequencia, para que
possa se encontrar o registro desejado. Ex:

ABRE-ARQUIVO.
OPEN INPUT ARQFUNS
IF FILE-STATUS NOT EQUAL ZEROS
THEN
DISPLAY "ERRO DE ABERTURA DO ARQUIVO" AT 2419
GO TO FIM
END-IF.

LE-ARQUIVO-SEQUENCIAL.
READ ARQFUNS
AT END
GO TO RESPOSTA
NOT AT END
IF NOME EQUAL COD-NOME
THEN
PERFORM MOSTRA-DADOS
CLOSE ARQFUNS
IF FILE-STATUS NOT EQUAL ZEROS
THEN
DISPLAY "ERRO DE FECHAMENTO DO ARQUIVO" AT 2419
GO TO FIM
END-IF
GO TO ABRE-ARQUIVO
ELSE
GO TO LE-ARQUIVO-SEQUENCIAL
END-IF
END-READ.

RESPOSTA.
DISPLAY "NOME INVALIDO " AT 2419 WITH BLINK BACKGROUND-COLOR 1
FOREGROUND-COLOR 7
CLOSE ARQFUNS
GO TO ABRE-ARQUIVO.

P.S - Veja que ele tem que ler todo o arquivo, e se ir até o final (evento at end) ele vai para o procedure-
name resposta, veja que aqui ele irá fechar o arquivo e ir para o procedure name abre-arquivo, que irá
abrir o arquivo novamente. Para testar se o registro é igual, ele depois que lê, testa se o campo que o
usuário digitou é igual ao campo que tem no arquivo.

FromSoft – Todos os direitos reservados – http://www.fromsoft.com.br Página 100


Curso de Cobol Básico

Lição 10 – Exemplo 1 – Cadastro de Usuarios

IDENTIFICATION DIVISION.
PROGRAM-ID. L10EX01.
AUTHOR. FROMSOFT.
ENVIRONMENT DIVISION.
SPECIAL-NAMES.
DECIMAL-POINT IS COMMA.
FILE-CONTROL.
SELECT ARQFUN ASSIGN TO "ARQFUNS.DAT"
ORGANIZATION IS SEQUENTIAL
ACCESS MODE IS SEQUENTIAL
FILE STATUS IS FILE-STATUS.
DATA DIVISION.
FILE SECTION.
FD ARQFUN.
01 REG-ARQFUN.
03 CODIGO PIC 9(05).
03 NOME PIC X(30).
03 ENDERECO PIC X(30).
03 CIDADE PIC X(20).
03 ATIVIDADE PIC X(20).
03 SETOR PIC X(20).
03 SALARIO PIC 9(11).
03 DATA-PAGAMENTO.
05 DIA-PAGAMENTO PIC 9(02).
05 FILLER PIC X(01).
05 MES-PAGAMENTO PIC 9(02).
05 FILLER PIC X(01).
05 ANO-PAGAMENTO PIC 9(02).
03 DATA-NASCIMENTO.
05 DIA-NASCIMENTO PIC 9(02).
05 FILLER PIC X(01).
05 MES-NASCIMENTO PIC 9(02).
05 FILLER PIC X(01).
05 ANO-NASCIMENTO PIC 9(02).
03 ESCOLARIDADE PIC X(15).
03 NATURALIDADE PIC X(15).
03 NACIONALIDADE PIC X(15).
03 BAIRRO PIC X(20).
03 ESTADO PIC A(02).
03 CPF PIC 9(11).
03 IDENTIDADE PIC X(11).
03 FILIAL PIC X(10).
03 DATA-ADMISSAO.
05 DIA-ADMISSAO PIC 9(02).
05 FILLER PIC X(01).
05 MES-ADMISSAO PIC 9(02).
05 FILLER PIC X(01).
05 ANO-ADMISSAO PIC 9(02).
03 SEXO PIC A(01).
03 HORAS-TRABALHO PIC 9(02).

WORKING-STORAGE SECTION.
77 CODIGO-FUN PIC ZZZZZ VALUE SPACES.
77 SALARIO-FUN PIC ZZZ.ZZZ.ZZ9,99 VALUE SPACES.
77 CPF-FUN PIC ZZZZZZZZZ.ZZ VALUE SPACES.
77 HORAS-TRABALHO-FUN PIC ZZ VALUE SPACES.
77 MENSAGEM PIC X(30) VALUE ZEROS.
77 FLAG-VALIDA PIC X VALUE SPACE.
77 TECLA PIC XX VALUE SPACES.
77 FILE-STATUS PIC XX VALUE SPACES.
77 PARA PIC X VALUE SPACES.
01 DATA-PAR.
03 DIA-PAR PIC 9(02) VALUE ZEROS.
03 FILLER PIC X(01) VALUE "/".
03 MES-PAR PIC 9(02) VALUE ZEROS.
03 FILLER PIC X(01) VALUE "/".
03 ANO-PAR PIC 9(02) VALUE ZEROS.
SCREEN SECTION.
01 TELA-CADASTRO.
02 BACKGROUND-COLOR 1 FOREGROUND-COLOR 7.
03 BLANK SCREEN.
03 LINE 1 COL 1 HIGHLIGHT VALUE "ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

FromSoft – Todos os direitos reservados – http://www.fromsoft.com.br Página 101


Curso de Cobol Básico

-"ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿".
03 LINE 2 COL 1 HIGHLIGHT VALUE "ÃÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
-"ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ´".
03 LINE 3 COL 1 HIGHLIGHT VALUE "ÃÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄCA
-"DASTRO".
03 COL 37 HIGHLIGHT VALUE "DE".
03 COL 40 HIGHLIGHT VALUE "CANDIDATOSÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
-"ÄÄÄÄÄ´".
03 LINE 4 COL 1 HIGHLIGHT VALUE "ÃÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
-"ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ´".
03 LINE 5 COL 1 HIGHLIGHT VALUE "ÃÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
-"ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ´".
03 LINE 6 COL 1 HIGHLIGHT VALUE "ÃÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
-"ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ´".
03 LINE 7 COL 1 HIGHLIGHT VALUE "ÃÄ".
03 COL 4 HIGHLIGHT VALUE "CODIGO.............:".
03 COL 79 HIGHLIGHT VALUE "Ä´".
03 LINE 8 COL 1 HIGHLIGHT VALUE "ÃÄ".
03 COL 4 HIGHLIGHT VALUE "NOME...............:".
03 COL 79 HIGHLIGHT VALUE "Ä´".
03 LINE 9 COL 1 HIGHLIGHT VALUE "ÃÄ".
03 COL 4 HIGHLIGHT VALUE "ENDERECO...........:".
03 COL 79 HIGHLIGHT VALUE "Ä´".
03 LINE 10 COL 1 HIGHLIGHT VALUE "ÃÄ".
03 COL 4 HIGHLIGHT VALUE "CIDADE.............:".
03 COL 79 HIGHLIGHT VALUE "Ä´".
03 LINE 11 COL 1 HIGHLIGHT VALUE "ÃÄ".
03 COL 4 HIGHLIGHT VALUE "ATIVIDADE..........:".
03 COL 46 HIGHLIGHT VALUE "BAIRRO.....:".
03 COL 79 HIGHLIGHT VALUE "Ä´".
03 LINE 12 COL 1 HIGHLIGHT VALUE "ÃÄ".
03 COL 4 HIGHLIGHT VALUE "SETOR..............:".
03 COL 46 HIGHLIGHT VALUE "ESTADO.....:".
03 COL 79 HIGHLIGHT VALUE "Ä´".
03 LINE 13 COL 1 HIGHLIGHT VALUE "ÃÄ".
03 COL 4 HIGHLIGHT VALUE "SALARIO............:".
03 COL 46 HIGHLIGHT VALUE "CPF........:".
03 COL 79 HIGHLIGHT VALUE "Ä´".
03 LINE 14 COL 1 HIGHLIGHT VALUE "ÃÄ".
03 COL 4 HIGHLIGHT VALUE "DATA".
03 COL 9 HIGHLIGHT VALUE "DE".
03 COL 12 HIGHLIGHT VALUE "PAGAMENTO..:".
03 COL 27 HIGHLIGHT VALUE "/".
03 COL 30 HIGHLIGHT VALUE "/".
03 COL 46 HIGHLIGHT VALUE "IDENTIDADE.:".
03 COL 79 HIGHLIGHT VALUE "Ä´".
03 LINE 15 COL 1 HIGHLIGHT VALUE "ÃÄ".
03 COL 4 HIGHLIGHT VALUE "DATA".
03 COL 9 HIGHLIGHT VALUE "DE".
03 COL 12 HIGHLIGHT VALUE "NASCIMENTO.:".
03 COL 27 HIGHLIGHT VALUE "/".
03 COL 30 HIGHLIGHT VALUE "/".
03 COL 46 HIGHLIGHT VALUE "FILIAL.....:".
03 COL 79 HIGHLIGHT VALUE "Ä´".
03 LINE 16 COL 1 HIGHLIGHT VALUE "ÃÄ".
03 COL 4 HIGHLIGHT VALUE "ESCOLARIDADE.......:".
03 COL 46 HIGHLIGHT VALUE "ADMISSAO...:".
03 COL 61 HIGHLIGHT VALUE "/".
03 COL 64 HIGHLIGHT VALUE "/".
03 COL 79 HIGHLIGHT VALUE "Ä´".
03 LINE 17 COL 1 HIGHLIGHT VALUE "ÃÄ".
03 COL 4 HIGHLIGHT VALUE "NATURALIDADE.......:".
03 COL 46 HIGHLIGHT VALUE "SEXO.......:".
03 COL 79 HIGHLIGHT VALUE "Ä´".
03 LINE 18 COL 1 HIGHLIGHT VALUE "ÃÄ".
03 COL 4 HIGHLIGHT VALUE "NACIONALIDADE......:".
03 COL 46 HIGHLIGHT VALUE "HORAS/DIA..:".
03 COL 79 HIGHLIGHT VALUE "Ä´".
03 LINE 19 COL 1 HIGHLIGHT VALUE "ÃÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
-"ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ´".
03 LINE 20 COL 1 HIGHLIGHT VALUE "ÃÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
-"ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ´".
03 LINE 21 COL 1 HIGHLIGHT VALUE "ÃÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
-"ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ´".
03 LINE 22 COL 1 HIGHLIGHT VALUE "ÃÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

FromSoft – Todos os direitos reservados – http://www.fromsoft.com.br Página 102


Curso de Cobol Básico

-"ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ´".
03 LINE 23 COL 1 HIGHLIGHT VALUE "³INFORME".
03 COL 80 HIGHLIGHT VALUE "³".
03 LINE 24 COL 1 HIGHLIGHT VALUE "ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
-"ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ".
03 LINE 25 COL 1 BACKGROUND-COLOR 0 HIGHLIGHT VALUE "
-"
-" ".
PROCEDURE DIVISION.
ABRE-ARQUIVO.
OPEN EXTEND ARQFUN
IF FILE-STATUS NOT EQUAL ZEROS
IF FILE-STATUS EQUAL "05" OR "35"
OPEN OUTPUT ARQFUN
CLOSE ARQFUN
GO TO ABRE-ARQUIVO
ELSE
DISPLAY "ERRO DE ABERTURA NO ARQUIVO" AT 2310
ACCEPT PARA AT 2579 WITH AUTO NO-ECHO
GO TO FIM
END-IF
ELSE
CONTINUE
END-IF.

INICIO.
DISPLAY TELA-CADASTRO.
PERFORM LIMPA-TELA.
PEGA-CODIGO.
DISPLAY "CODIGO " AT 2310.
ACCEPT CODIGO-FUN AT 0725 WITH AUTO PROMPT
ACCEPT TECLA FROM ESCAPE KEY
IF TECLA EQUAL 01
GO TO FIM.
MOVE CODIGO-FUN TO CODIGO
IF CODIGO EQUAL ZEROS
DISPLAY "CODIGO INVALIDO" AT 2310
ACCEPT PARA AT 2579 WITH AUTO NO-ECHO
DISPLAY " " AT 2310
GO TO PEGA-CODIGO.
FIM-PEGA-CODIGO. EXIT.
PEGA-NOME.
DISPLAY "NOME " AT 2310
ACCEPT NOME AT 0825 WITH AUTO PROMPT.
ACCEPT TECLA FROM ESCAPE KEY
IF TECLA EQUAL 01
GO TO PEGA-CODIGO.
IF NOME EQUAL SPACES
DISPLAY "NOME INVALIDO" AT 2310
ACCEPT PARA AT 2579 WITH AUTO NO-ECHO
DISPLAY " " AT 2310
GO TO PEGA-NOME.
PEGA-ENDERECO.
DISPLAY "ENDERECO " AT 2310
ACCEPT ENDERECO AT 0925 WITH AUTO PROMPT.
ACCEPT TECLA FROM ESCAPE KEY
IF TECLA EQUAL 01
GO TO PEGA-NOME.
IF ENDERECO EQUAL SPACES
DISPLAY "ENDERECO INVALIDO" AT 2310
ACCEPT PARA AT 2579 WITH AUTO NO-ECHO
DISPLAY " " AT 2310
GO TO PEGA-ENDERECO.
PEGA-CIDADE.
DISPLAY "CIDADE " AT 2310
ACCEPT CIDADE AT 1025 WITH AUTO.
ACCEPT TECLA FROM ESCAPE KEY
IF TECLA EQUAL 01
GO TO PEGA-ENDERECO.
IF CIDADE EQUAL SPACES
DISPLAY "CIDADE INVALIDA" AT 2310
ACCEPT PARA AT 2579 WITH AUTO NO-ECHO
DISPLAY " " AT 2310
GO TO PEGA-CIDADE.
PEGA-ATIVIDADE.

FromSoft – Todos os direitos reservados – http://www.fromsoft.com.br Página 103


Curso de Cobol Básico

DISPLAY "ATIVIDADE " AT 2310


ACCEPT ATIVIDADE AT 1125 WITH AUTO PROMPT.
ACCEPT TECLA FROM ESCAPE KEY
IF TECLA EQUAL 01
GO TO PEGA-CIDADE.
IF ATIVIDADE EQUAL SPACES
DISPLAY "ATIVIDADE INVALIDA" AT 2310
ACCEPT PARA AT 2579 WITH AUTO NO-ECHO
DISPLAY " " AT 2310
GO TO PEGA-ATIVIDADE.
PEGA-SETOR.
DISPLAY "SETOR " AT 2310
ACCEPT SETOR AT 1225 WITH AUTO PROMPT.
ACCEPT TECLA FROM ESCAPE KEY
IF TECLA EQUAL 01
GO TO PEGA-ATIVIDADE.
IF SETOR EQUAL SPACES
DISPLAY "SETOR INVALIDO" AT 2310
ACCEPT PARA AT 2579 WITH AUTO NO-ECHO
DISPLAY " " AT 2310
GO TO PEGA-SETOR.
PEGA-SALARIO.
DISPLAY "SALARIO " AT 2310
ACCEPT SALARIO-FUN AT 1325 WITH AUTO.
ACCEPT TECLA FROM ESCAPE KEY
IF TECLA EQUAL 01
GO TO PEGA-SETOR.
MOVE SALARIO-FUN TO SALARIO
IF SALARIO EQUAL ZEROS
DISPLAY "SALARIO INVALIDO" AT 2310
ACCEPT PARA AT 2579 WITH AUTO NO-ECHO
DISPLAY " " AT 2310
GO TO PEGA-SALARIO.
PEGA-DATA-DE-PAGAMENTO.
DISPLAY "DATA DE PAGAMENTO " AT 2310
ACCEPT DATA-PAR AT 1425 WITH AUTO.
ACCEPT TECLA FROM ESCAPE KEY
IF TECLA EQUAL 01
GO TO PEGA-SALARIO.
PERFORM VALIDA-DATA
IF FLAG-VALIDA EQUAL "N"
DISPLAY "DATA DE PAGAMENTO INVALIDA" AT 2310
ACCEPT PARA AT 2579 WITH AUTO NO-ECHO
DISPLAY " " AT 2310
GO TO PEGA-DATA-DE-PAGAMENTO.
MOVE DATA-PAR TO DATA-PAGAMENTO.
PEGA-DATA-DE-NASCIMENTO.
DISPLAY "DATA DE NASCIMENTO " AT 2310
ACCEPT DATA-PAR AT 1525 WITH AUTO.
ACCEPT TECLA FROM ESCAPE KEY
IF TECLA EQUAL 01
GO TO PEGA-DATA-DE-PAGAMENTO.
PERFORM VALIDA-DATA
IF FLAG-VALIDA EQUAL "N"
DISPLAY "DATA DE NASCIMENTO INVALIDA" AT 2310
ACCEPT PARA AT 2579 WITH AUTO NO-ECHO
DISPLAY " " AT 2310
GO TO PEGA-DATA-DE-NASCIMENTO.
MOVE DATA-PAR TO DATA-NASCIMENTO.
PEGA-ESCOLARIDADE.
DISPLAY "ESCOLARIDADE " AT 2310
ACCEPT ESCOLARIDADE AT 1625 WITH AUTO.
ACCEPT TECLA FROM ESCAPE KEY
IF TECLA EQUAL 01
GO TO PEGA-DATA-DE-NASCIMENTO.
IF ESCOLARIDADE EQUAL SPACES
DISPLAY "ESCOLARIDADE INVALIDA" AT 2310
ACCEPT PARA AT 2579 WITH AUTO NO-ECHO
DISPLAY " " AT 2310
GO TO PEGA-ESCOLARIDADE.
PEGA-NATURALIDADE.
DISPLAY "NATURALIDADE " AT 2310
ACCEPT NATURALIDADE AT 1725 WITH AUTO.
ACCEPT TECLA FROM ESCAPE KEY
IF TECLA EQUAL 01

FromSoft – Todos os direitos reservados – http://www.fromsoft.com.br Página 104


Curso de Cobol Básico

GO TO PEGA-ESCOLARIDADE.
IF NATURALIDADE EQUAL SPACES
DISPLAY "NATURALIDADE INVALIDA" AT 2310
ACCEPT PARA AT 2579 WITH AUTO NO-ECHO
DISPLAY " " AT 2310
GO TO PEGA-NATURALIDADE.
PEGA-NACIONALIDADE.
DISPLAY "NACIONALIDADE " AT 2310
ACCEPT NACIONALIDADE AT 1825 WITH AUTO.
ACCEPT TECLA FROM ESCAPE KEY
IF TECLA EQUAL 01
GO TO PEGA-NATURALIDADE.
IF NACIONALIDADE EQUAL SPACES
DISPLAY "NACIONALIDADE INVALIDA" AT 2310
ACCEPT PARA AT 2579 WITH AUTO NO-ECHO
DISPLAY " " AT 2310
GO TO PEGA-NACIONALIDADE.
PEGA-BAIRRO.
DISPLAY "BAIRRO " AT 2310
ACCEPT BAIRRO AT 1159 WITH AUTO.
ACCEPT TECLA FROM ESCAPE KEY
IF TECLA EQUAL 01
GO TO PEGA-NACIONALIDADE.
IF BAIRRO EQUAL SPACES
DISPLAY "BAIRRO INVALIDO" AT 2310
ACCEPT PARA AT 2579 WITH AUTO NO-ECHO
DISPLAY " " AT 2310
GO TO PEGA-BAIRRO.
PEGA-ESTADO.
DISPLAY "ESTADO " AT 2310
ACCEPT ESTADO AT 1259 WITH AUTO.
ACCEPT TECLA FROM ESCAPE KEY
IF TECLA EQUAL 01
GO TO PEGA-BAIRRO.
IF ESTADO EQUAL SPACES
DISPLAY "ESTADO INVALIDO" AT 2310
ACCEPT PARA AT 2579 WITH AUTO NO-ECHO
DISPLAY " " AT 2310
GO TO PEGA-ESTADO.
PEGA-CPF.
DISPLAY "CPF " AT 2310
ACCEPT CPF-FUN AT 1359 WITH AUTO.
ACCEPT TECLA FROM ESCAPE KEY
IF TECLA EQUAL 01
GO TO PEGA-ESTADO.
MOVE CPF-FUN TO CPF
IF CPF EQUAL ZEROS
DISPLAY "CPF INVALIDO" AT 2310
ACCEPT PARA AT 2579 WITH AUTO NO-ECHO
DISPLAY " " AT 2310
GO TO PEGA-CPF.
PEGA-IDENTIDADE.
DISPLAY "IDENTIDADE " AT 2310
ACCEPT IDENTIDADE AT 1459 WITH AUTO.
ACCEPT TECLA FROM ESCAPE KEY
IF TECLA EQUAL 01
GO TO PEGA-CPF.
IF IDENTIDADE EQUAL SPACES
DISPLAY "IDENTIDADE INVALIDA" AT 2310
ACCEPT PARA AT 2579 WITH AUTO NO-ECHO
DISPLAY " " AT 2310
GO TO PEGA-IDENTIDADE.
PEGA-FILIAL.
DISPLAY "FILIAL " AT 2310
ACCEPT FILIAL AT 1559 WITH AUTO.
ACCEPT TECLA FROM ESCAPE KEY
IF TECLA EQUAL 01
GO TO PEGA-IDENTIDADE.
IF FILIAL EQUAL SPACES
DISPLAY "FILIAL INVALIDA" AT 2310
ACCEPT PARA AT 2579 WITH AUTO NO-ECHO
DISPLAY " " AT 2310
GO TO PEGA-FILIAL.
PEGA-DATA-DE-ADMISSAO.
DISPLAY "DATA DE ADMISSAO " AT 2310

FromSoft – Todos os direitos reservados – http://www.fromsoft.com.br Página 105


Curso de Cobol Básico

ACCEPT DATA-PAR AT 1659 WITH AUTO.


ACCEPT TECLA FROM ESCAPE KEY
IF TECLA EQUAL 01
GO TO PEGA-FILIAL.
PERFORM VALIDA-DATA
IF FLAG-VALIDA EQUAL "N"
DISPLAY "DATA DE ADMISSAO INVALIDA" AT 2310
ACCEPT PARA AT 2579 WITH AUTO NO-ECHO
DISPLAY " " AT 2310
GO TO PEGA-DATA-DE-ADMISSAO.
MOVE DATA-PAR TO DATA-ADMISSAO.
PEGA-SEXO.
DISPLAY "SEXO " AT 2310
ACCEPT SEXO AT 1759 WITH AUTO.
ACCEPT TECLA FROM ESCAPE KEY
IF TECLA EQUAL 01
GO TO PEGA-DATA-DE-ADMISSAO.
IF SEXO NOT EQUAL "S" AND SEXO NOT EQUAL "M"
DISPLAY "SEXO INVALIDO" AT 2310
ACCEPT PARA AT 2579 WITH AUTO NO-ECHO
DISPLAY " " AT 2310
GO TO PEGA-SEXO.
PEGA-HORAS.
DISPLAY "HORAS DE TRABALHO " AT 2310
ACCEPT HORAS-TRABALHO-FUN AT 1859 WITH AUTO.
ACCEPT TECLA FROM ESCAPE KEY
IF TECLA EQUAL 01
GO TO PEGA-SEXO.
MOVE HORAS-TRABALHO-FUN TO HORAS-TRABALHO
IF HORAS-TRABALHO EQUAL ZEROS
DISPLAY "HORAS DE TRABALHO INVALIDA" AT 2310
ACCEPT PARA AT 2579 WITH AUTO NO-ECHO
DISPLAY " " AT 2310
GO TO PEGA-HORAS.
GRAVA-REGISTRO.
WRITE REG-ARQFUN
IF FILE-STATUS EQUAL ZEROS
PERFORM LIMPA-TELA
GO TO INICIO
ELSE
DISPLAY "ERRO DE GRAVACAO NO ARQUIVO" AT 2310
ACCEPT PARA AT 2579 WITH AUTO NO-ECHO
GO TO FIM
END-IF.
FIM.
DISPLAY " " WITH ERASE EOS BACKGROUND-COLOR 0
FOREGROUND-COLOR 7.
STOP RUN.

LIMPA-TELA.
INITIALIZE CODIGO NOME ENDERECO CIDADE ATIVIDADE SETOR
SALARIO DIA-PAGAMENTO MES-PAGAMENTO ANO-PAGAMENTO
DIA-NASCIMENTO MES-NASCIMENTO ANO-NASCIMENTO
ESCOLARIDADE NATURALIDADE NACIONALIDADE BAIRRO
ESTADO CPF IDENTIDADE FILIAL DIA-ADMISSAO
MES-ADMISSAO ANO-ADMISSAO SEXO HORAS-TRABALHO
CODIGO-FUN CPF-FUN SALARIO-FUN HORAS-TRABALHO-FUN.

VALIDA-DATA.
IF DIA-PAR GREATER ZEROS AND DIA-PAR LESS 32
MOVE "S" TO FLAG-VALIDA
ELSE
MOVE "N" TO FLAG-VALIDA
END-IF
IF MES-PAR GREATER ZEROS AND MES-PAR LESS 13
IF MES-PAR EQUAL 01 OR MES-PAR EQUAL 03
OR MES-PAR EQUAL 05 OR MES-PAR EQUAL 07
OR MES-PAR EQUAL 08 OR MES-PAR EQUAL 10
OR MES-PAR EQUAL 12 AND DIA-PAR LESS 32
MOVE "S" TO FLAG-VALIDA
ELSE
IF MES-PAR EQUAL 02 AND DIA-PAR LESS 30
MOVE "S" TO FLAG-VALIDA
ELSE
IF MES-PAR EQUAL 04 OR MES-PAR EQUAL 06

FromSoft – Todos os direitos reservados – http://www.fromsoft.com.br Página 106


Curso de Cobol Básico

OR MES-PAR EQUAL 09 OR MES-PAR EQUAL 11


MOVE "S" TO FLAG-VALIDA
ELSE
MOVE "N" TO FLAG-VALIDA
END-IF
ELSE
MOVE "N" TO FLAG-VALIDA
END-IF.

Lição 10 – Exemplo 2 – Consulta de Usuarios presentes em Cadastro

IDENTIFICATION DIVISION.
PROGRAM-ID. L10EX02.
ENVIRONMENT DIVISION.
SPECIAL-NAMES.
DECIMAL-POINT IS COMMA.
FILE-CONTROL.
SELECT ARQFUN ASSIGN TO "ARQFUNS.DAT"
ORGANIZATION IS SEQUENTIAL
ACCESS MODE IS SEQUENTIAL
FILE STATUS IS FILE-STATUS.
DATA DIVISION.
FILE SECTION.
FD ARQFUN.
01 REG-ARQFUN.
03 CODIGO PIC 9(05).
03 NOME PIC X(30).
03 ENDERECO PIC X(30).
03 CIDADE PIC X(20).
03 ATIVIDADE PIC X(20).
03 SETOR PIC X(20).
03 SALARIO PIC 9(11).
03 DATA-PAGAMENTO.
05 DIA-PAGAMENTO PIC 9(02).
05 FILLER PIC X(01).
05 MES-PAGAMENTO PIC 9(02).
05 FILLER PIC X(01).
05 ANO-PAGAMENTO PIC 9(02).
03 DATA-NASCIMENTO.
05 DIA-NASCIMENTO PIC 9(02).
05 FILLER PIC X(01).
05 MES-NASCIMENTO PIC 9(02).
05 FILLER PIC X(01).
05 ANO-NASCIMENTO PIC 9(02).
03 ESCOLARIDADE PIC X(15).
03 NATURALIDADE PIC X(15).
03 NACIONALIDADE PIC X(15).
03 BAIRRO PIC X(20).
03 ESTADO PIC A(02).
03 CPF PIC 9(11).
03 IDENTIDADE PIC X(11).
03 FILIAL PIC X(10).
03 DATA-ADMISSAO.
05 DIA-ADMISSAO PIC 9(02).
05 FILLER PIC X(01).
05 MES-ADMISSAO PIC 9(02).
05 FILLER PIC X(01).
05 ANO-ADMISSAO PIC 9(02).
03 SEXO PIC A(01).
03 HORAS-TRABALHO PIC 9(02).
WORKING-STORAGE SECTION.
77 CODIGO-FUN PIC ZZZZZ VALUE SPACES.
77 CODIGO-AUX PIC 9(05) VALUE ZEROS.
77 SALARIO-FUN PIC ZZZ.ZZZ.ZZ9,99 VALUE SPACES.
77 CPF-FUN PIC ZZZZZZZZZ.ZZ VALUE SPACES.
77 HORAS-TRABALHO-FUN PIC ZZ VALUE SPACES.
77 DATA-FUN PIC ZZ/ZZ/ZZ VALUE SPACES.
77 MENSAGEM PIC X(30) VALUE ZEROS.
77 FLAG-VALIDA PIC X VALUE SPACE.
77 TECLA PIC XX VALUE SPACES.
77 FILE-STATUS PIC XX VALUE SPACES.
77 PARA PIC X VALUE SPACES.
01 DATA-PAR.
03 DIA-PAR PIC 9(02) VALUE ZEROS.

FromSoft – Todos os direitos reservados – http://www.fromsoft.com.br Página 107


Curso de Cobol Básico

03 FILLER PIC X(01) VALUE "/".


03 MES-PAR PIC 9(02) VALUE ZEROS.
03 FILLER PIC X(01) VALUE "/".
03 ANO-PAR PIC 9(02) VALUE ZEROS.
SCREEN SECTION.
01 TELA-CADASTRO.
02 BACKGROUND-COLOR 1 FOREGROUND-COLOR 7.
03 BLANK SCREEN.
03 LINE 1 COL 1 HIGHLIGHT VALUE "ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
-"ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿".
03 LINE 2 COL 1 HIGHLIGHT VALUE "ÃÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
-"ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ´".
03 LINE 3 COL 1 HIGHLIGHT VALUE "ÃÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄCA
-"DASTRO".
03 COL 37 HIGHLIGHT VALUE "DE".
03 COL 40 HIGHLIGHT VALUE "CANDIDATOSÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
-"ÄÄÄÄÄ´".
03 LINE 4 COL 1 HIGHLIGHT VALUE "ÃÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
-"ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ´".
03 LINE 5 COL 1 HIGHLIGHT VALUE "ÃÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
-"ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ´".
03 LINE 6 COL 1 HIGHLIGHT VALUE "ÃÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
-"ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ´".
03 LINE 7 COL 1 HIGHLIGHT VALUE "ÃÄ".
03 COL 4 HIGHLIGHT VALUE "CODIGO.............:".
03 COL 79 HIGHLIGHT VALUE "Ä´".
03 LINE 8 COL 1 HIGHLIGHT VALUE "ÃÄ".
03 COL 4 HIGHLIGHT VALUE "NOME...............:".
03 COL 79 HIGHLIGHT VALUE "Ä´".
03 LINE 9 COL 1 HIGHLIGHT VALUE "ÃÄ".
03 COL 4 HIGHLIGHT VALUE "ENDERECO...........:".
03 COL 79 HIGHLIGHT VALUE "Ä´".
03 LINE 10 COL 1 HIGHLIGHT VALUE "ÃÄ".
03 COL 4 HIGHLIGHT VALUE "CIDADE.............:".
03 COL 79 HIGHLIGHT VALUE "Ä´".
03 LINE 11 COL 1 HIGHLIGHT VALUE "ÃÄ".
03 COL 4 HIGHLIGHT VALUE "ATIVIDADE..........:".
03 COL 46 HIGHLIGHT VALUE "BAIRRO.....:".
03 COL 79 HIGHLIGHT VALUE "Ä´".
03 LINE 12 COL 1 HIGHLIGHT VALUE "ÃÄ".
03 COL 4 HIGHLIGHT VALUE "SETOR..............:".
03 COL 46 HIGHLIGHT VALUE "ESTADO.....:".
03 COL 79 HIGHLIGHT VALUE "Ä´".
03 LINE 13 COL 1 HIGHLIGHT VALUE "ÃÄ".
03 COL 4 HIGHLIGHT VALUE "SALARIO............:".
03 COL 46 HIGHLIGHT VALUE "CPF........:".
03 COL 79 HIGHLIGHT VALUE "Ä´".
03 LINE 14 COL 1 HIGHLIGHT VALUE "ÃÄ".
03 COL 4 HIGHLIGHT VALUE "DATA".
03 COL 9 HIGHLIGHT VALUE "DE".
03 COL 12 HIGHLIGHT VALUE "PAGAMENTO..:".
03 COL 27 HIGHLIGHT VALUE "/".
03 COL 30 HIGHLIGHT VALUE "/".
03 COL 46 HIGHLIGHT VALUE "IDENTIDADE.:".
03 COL 79 HIGHLIGHT VALUE "Ä´".
03 LINE 15 COL 1 HIGHLIGHT VALUE "ÃÄ".
03 COL 4 HIGHLIGHT VALUE "DATA".
03 COL 9 HIGHLIGHT VALUE "DE".
03 COL 12 HIGHLIGHT VALUE "NASCIMENTO.:".
03 COL 27 HIGHLIGHT VALUE "/".
03 COL 30 HIGHLIGHT VALUE "/".
03 COL 46 HIGHLIGHT VALUE "FILIAL.....:".
03 COL 79 HIGHLIGHT VALUE "Ä´".
03 LINE 16 COL 1 HIGHLIGHT VALUE "ÃÄ".
03 COL 4 HIGHLIGHT VALUE "ESCOLARIDADE.......:".
03 COL 46 HIGHLIGHT VALUE "ADMISSAO...:".
03 COL 61 HIGHLIGHT VALUE "/".
03 COL 64 HIGHLIGHT VALUE "/".
03 COL 79 HIGHLIGHT VALUE "Ä´".
03 LINE 17 COL 1 HIGHLIGHT VALUE "ÃÄ".
03 COL 4 HIGHLIGHT VALUE "NATURALIDADE.......:".
03 COL 46 HIGHLIGHT VALUE "SEXO.......:".
03 COL 79 HIGHLIGHT VALUE "Ä´".
03 LINE 18 COL 1 HIGHLIGHT VALUE "ÃÄ".
03 COL 4 HIGHLIGHT VALUE "NACIONALIDADE......:".

FromSoft – Todos os direitos reservados – http://www.fromsoft.com.br Página 108


Curso de Cobol Básico

03 COL 46 HIGHLIGHT VALUE "HORAS/DIA..:".


03 COL 79 HIGHLIGHT VALUE "Ä´".
03 LINE 19 COL 1 HIGHLIGHT VALUE "ÃÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
-"ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ´".
03 LINE 20 COL 1 HIGHLIGHT VALUE "ÃÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
-"ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ´".
03 LINE 21 COL 1 HIGHLIGHT VALUE "ÃÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
-"ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ´".
03 LINE 22 COL 1 HIGHLIGHT VALUE "ÃÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
-"ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ´".
03 LINE 23 COL 1 HIGHLIGHT VALUE "³INFORME".
03 COL 80 HIGHLIGHT VALUE "³".
03 LINE 24 COL 1 HIGHLIGHT VALUE "ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
-"ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ".
03 LINE 25 COL 1 BACKGROUND-COLOR 0 HIGHLIGHT VALUE "
-"
-" ".
PROCEDURE DIVISION.
INICIO.
DISPLAY TELA-CADASTRO.
PERFORM LIMPA-TELA.
PEGA-CODIGO.
PERFORM ABRE-ARQUIVO.
DISPLAY "CODIGO " AT 2310.
ACCEPT CODIGO-FUN AT 0725 WITH AUTO PROMPT
ACCEPT TECLA FROM ESCAPE KEY
IF TECLA EQUAL 01
GO TO FIM.
MOVE CODIGO-FUN TO CODIGO-AUX
IF CODIGO-AUX EQUAL ZEROS
DISPLAY "CODIGO INVALIDO" AT 2310
ACCEPT PARA AT 2579 WITH AUTO NO-ECHO
DISPLAY " " AT 2310
PERFORM FECHA-ARQUIVO
GO TO PEGA-CODIGO.
LE-ARQUIVO-SEQUENTIAL.
READ ARQFUN AT END GO TO RESPOSTA.
IF CODIGO-AUX EQUAL CODIGO
PERFORM MOSTRA-FUNCIONARIO THRU FIM-MOSTRA-FUNCIONARIO
ACCEPT PARA AT 2579 WITH AUTO NO-ECHO
PERFORM LIMPA-TELA
GO TO PEGA-CODIGO
ELSE
GO TO LE-ARQUIVO-SEQUENTIAL.
FIM-PEGA-CODIGO. EXIT.

MOSTRA-FUNCIONARIO.
DISPLAY NOME AT 0825
DISPLAY ENDERECO AT 0925
DISPLAY CIDADE AT 1025
DISPLAY ATIVIDADE AT 1125
DISPLAY SETOR AT 1225
MOVE SALARIO TO SALARIO-FUN
DISPLAY SALARIO-FUN AT 1325
MOVE DATA-PAGAMENTO TO DATA-FUN
DISPLAY DATA-PAGAMENTO AT 1425
MOVE DATA-NASCIMENTO TO DATA-FUN
DISPLAY DATA-NASCIMENTO AT 1525
DISPLAY ESCOLARIDADE AT 1625
DISPLAY NATURALIDADE AT 1725
DISPLAY NACIONALIDADE AT 1825
DISPLAY BAIRRO AT 1159
DISPLAY ESTADO AT 1259
MOVE CPF TO CPF-FUN
DISPLAY CPF-FUN AT 1359
DISPLAY IDENTIDADE AT 1459
DISPLAY FILIAL AT 1559
MOVE DATA-ADMISSAO TO DATA-FUN
DISPLAY DATA-ADMISSAO AT 1659
DISPLAY SEXO AT 1759
MOVE HORAS-TRABALHO TO HORAS-TRABALHO-FUN
DISPLAY HORAS-TRABALHO-FUN AT 1859
PERFORM FECHA-ARQUIVO.
FIM-MOSTRA-FUNCIONARIO. EXIT.

FromSoft – Todos os direitos reservados – http://www.fromsoft.com.br Página 109


Curso de Cobol Básico

FIM.
DISPLAY " " WITH ERASE EOS BACKGROUND-COLOR 0
FOREGROUND-COLOR 7.
STOP RUN.

LIMPA-TELA.
INITIALIZE CODIGO NOME ENDERECO CIDADE ATIVIDADE SETOR
SALARIO DIA-PAGAMENTO MES-PAGAMENTO ANO-PAGAMENTO
DIA-NASCIMENTO MES-NASCIMENTO ANO-NASCIMENTO
ESCOLARIDADE NATURALIDADE NACIONALIDADE BAIRRO
ESTADO CPF IDENTIDADE FILIAL DIA-ADMISSAO
MES-ADMISSAO ANO-ADMISSAO SEXO HORAS-TRABALHO
CODIGO-FUN CPF-FUN SALARIO-FUN HORAS-TRABALHO-FUN
DIA-PAR MES-PAR ANO-PAR
DISPLAY " " AT 0825
DISPLAY " " AT 0925
DISPLAY " " AT 1025
DISPLAY " " AT 1125
DISPLAY " " AT 1225
DISPLAY " " AT 1325
DISPLAY " / / " AT 1425
DISPLAY " / / " AT 1525
DISPLAY " " AT 1625
DISPLAY " " AT 1725
DISPLAY " " AT 1825
DISPLAY " " AT 1159
DISPLAY " " AT 1259
DISPLAY " " AT 1359
DISPLAY " " AT 1459
DISPLAY " " AT 1559
DISPLAY " / / " AT 1659
DISPLAY " " AT 1759
DISPLAY " " AT 1859.

RESPOSTA.
DISPLAY "CODIGO NAO CADASTRADO" AT 2310
ACCEPT PARA AT 2579 WITH AUTO NO-ECHO
DISPLAY " " AT 2310
PERFORM FECHA-ARQUIVO
PERFORM LIMPA-TELA
GO TO PEGA-CODIGO.

ABRE-ARQUIVO.
OPEN INPUT ARQFUN
IF FILE-STATUS EQUAL ZEROS
CONTINUE
ELSE
DISPLAY "ERRO DE ABERTURA NO ARQUIVO" AT 2310
ACCEPT PARA AT 2579 WITH AUTO NO-ECHO
GO TO FIM.

FECHA-ARQUIVO.
CLOSE ARQFUN
IF FILE-STATUS EQUAL ZEROS
NEXT SENTENCE
ELSE
DISPLAY "ERRO DE FECHAMENTO DO ARQUIVO" AT 2310
ACCEPT PARA AT 2579 WITH AUTO NO-ECHO
GO TO FIM.

Lição 10 – Exemplo 3 – Alteração de Usuarios presentes em Cadastro

IDENTIFICATION DIVISION.
PROGRAM-ID. L10EX03.
ENVIRONMENT DIVISION.
SPECIAL-NAMES.
DECIMAL-POINT IS COMMA.
FILE-CONTROL.
SELECT ARQFUN ASSIGN TO "ARQFUNS.DAT"
ORGANIZATION IS SEQUENTIAL
ACCESS MODE IS SEQUENTIAL
FILE STATUS IS FILE-STATUS.
DATA DIVISION.

FromSoft – Todos os direitos reservados – http://www.fromsoft.com.br Página 110


Curso de Cobol Básico

FILE SECTION.
FD ARQFUN.
01 REG-ARQFUN.
03 CODIGO PIC 9(05).
03 NOME PIC X(30).
03 ENDERECO PIC X(30).
03 CIDADE PIC X(20).
03 ATIVIDADE PIC X(20).
03 SETOR PIC X(20).
03 SALARIO PIC 9(11).
03 DATA-PAGAMENTO.
05 DIA-PAGAMENTO PIC 9(02).
05 FILLER PIC X(01).
05 MES-PAGAMENTO PIC 9(02).
05 FILLER PIC X(01).
05 ANO-PAGAMENTO PIC 9(02).
03 DATA-NASCIMENTO.
05 DIA-NASCIMENTO PIC 9(02).
05 FILLER PIC X(01).
05 MES-NASCIMENTO PIC 9(02).
05 FILLER PIC X(01).
05 ANO-NASCIMENTO PIC 9(02).
03 ESCOLARIDADE PIC X(15).
03 NATURALIDADE PIC X(15).
03 NACIONALIDADE PIC X(15).
03 BAIRRO PIC X(20).
03 ESTADO PIC A(02).
03 CPF PIC 9(11).
03 IDENTIDADE PIC X(11).
03 FILIAL PIC X(10).
03 DATA-ADMISSAO.
05 DIA-ADMISSAO PIC 9(02).
05 FILLER PIC X(01).
05 MES-ADMISSAO PIC 9(02).
05 FILLER PIC X(01).
05 ANO-ADMISSAO PIC 9(02).
03 SEXO PIC A(01).
03 HORAS-TRABALHO PIC 9(02).

WORKING-STORAGE SECTION.
77 CODIGO-FUN PIC ZZZZZ VALUE SPACES.
77 CODIGO-AUX PIC 9(05) VALUE ZEROS.
77 SALARIO-FUN PIC ZZZ.ZZZ.ZZ9,99 VALUE SPACES.
77 CPF-FUN PIC ZZZZZZZZZ.ZZ VALUE SPACES.
77 HORAS-TRABALHO-FUN PIC ZZ VALUE SPACES.
77 DATA-FUN PIC ZZ/ZZ/ZZ VALUE SPACES.
77 MENSAGEM PIC X(30) VALUE ZEROS.
77 FLAG-VALIDA PIC X VALUE SPACE.
77 TECLA PIC XX VALUE SPACES.
77 FILE-STATUS PIC XX VALUE SPACES.
77 PARA PIC X VALUE SPACES.
01 DATA-PAR.
03 DIA-PAR PIC 9(02) VALUE ZEROS.
03 FILLER PIC X(01) VALUE "/".
03 MES-PAR PIC 9(02) VALUE ZEROS.
03 FILLER PIC X(01) VALUE "/".
03 ANO-PAR PIC 9(02) VALUE ZEROS.
SCREEN SECTION.
01 TELA-CADASTRO.
02 BACKGROUND-COLOR 1 FOREGROUND-COLOR 7.
03 BLANK SCREEN.
03 LINE 1 COL 1 HIGHLIGHT VALUE "ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
-"ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿".
03 LINE 2 COL 1 HIGHLIGHT VALUE "ÃÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
-"ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ´".
03 LINE 3 COL 1 HIGHLIGHT VALUE "ÃÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄCA
-"DASTRO".
03 COL 37 HIGHLIGHT VALUE "DE".
03 COL 40 HIGHLIGHT VALUE "CANDIDATOSÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
-"ÄÄÄÄÄ´".
03 LINE 4 COL 1 HIGHLIGHT VALUE "ÃÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
-"ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ´".
03 LINE 5 COL 1 HIGHLIGHT VALUE "ÃÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
-"ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ´".
03 LINE 6 COL 1 HIGHLIGHT VALUE "ÃÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

FromSoft – Todos os direitos reservados – http://www.fromsoft.com.br Página 111


Curso de Cobol Básico

-"ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ´".
03 LINE 7 COL 1 HIGHLIGHT VALUE "ÃÄ".
03 COL 4 HIGHLIGHT VALUE "CODIGO.............:".
03 COL 79 HIGHLIGHT VALUE "Ä´".
03 LINE 8 COL 1 HIGHLIGHT VALUE "ÃÄ".
03 COL 4 HIGHLIGHT VALUE "NOME...............:".
03 COL 79 HIGHLIGHT VALUE "Ä´".
03 LINE 9 COL 1 HIGHLIGHT VALUE "ÃÄ".
03 COL 4 HIGHLIGHT VALUE "ENDERECO...........:".
03 COL 79 HIGHLIGHT VALUE "Ä´".
03 LINE 10 COL 1 HIGHLIGHT VALUE "ÃÄ".
03 COL 4 HIGHLIGHT VALUE "CIDADE.............:".
03 COL 79 HIGHLIGHT VALUE "Ä´".
03 LINE 11 COL 1 HIGHLIGHT VALUE "ÃÄ".
03 COL 4 HIGHLIGHT VALUE "ATIVIDADE..........:".
03 COL 46 HIGHLIGHT VALUE "BAIRRO.....:".
03 COL 79 HIGHLIGHT VALUE "Ä´".
03 LINE 12 COL 1 HIGHLIGHT VALUE "ÃÄ".
03 COL 4 HIGHLIGHT VALUE "SETOR..............:".
03 COL 46 HIGHLIGHT VALUE "ESTADO.....:".
03 COL 79 HIGHLIGHT VALUE "Ä´".
03 LINE 13 COL 1 HIGHLIGHT VALUE "ÃÄ".
03 COL 4 HIGHLIGHT VALUE "SALARIO............:".
03 COL 46 HIGHLIGHT VALUE "CPF........:".
03 COL 79 HIGHLIGHT VALUE "Ä´".
03 LINE 14 COL 1 HIGHLIGHT VALUE "ÃÄ".
03 COL 4 HIGHLIGHT VALUE "DATA".
03 COL 9 HIGHLIGHT VALUE "DE".
03 COL 12 HIGHLIGHT VALUE "PAGAMENTO..:".
03 COL 27 HIGHLIGHT VALUE "/".
03 COL 30 HIGHLIGHT VALUE "/".
03 COL 46 HIGHLIGHT VALUE "IDENTIDADE.:".
03 COL 79 HIGHLIGHT VALUE "Ä´".
03 LINE 15 COL 1 HIGHLIGHT VALUE "ÃÄ".
03 COL 4 HIGHLIGHT VALUE "DATA".
03 COL 9 HIGHLIGHT VALUE "DE".
03 COL 12 HIGHLIGHT VALUE "NASCIMENTO.:".
03 COL 27 HIGHLIGHT VALUE "/".
03 COL 30 HIGHLIGHT VALUE "/".
03 COL 46 HIGHLIGHT VALUE "FILIAL.....:".
03 COL 79 HIGHLIGHT VALUE "Ä´".
03 LINE 16 COL 1 HIGHLIGHT VALUE "ÃÄ".
03 COL 4 HIGHLIGHT VALUE "ESCOLARIDADE.......:".
03 COL 46 HIGHLIGHT VALUE "ADMISSAO...:".
03 COL 61 HIGHLIGHT VALUE "/".
03 COL 64 HIGHLIGHT VALUE "/".
03 COL 79 HIGHLIGHT VALUE "Ä´".
03 LINE 17 COL 1 HIGHLIGHT VALUE "ÃÄ".
03 COL 4 HIGHLIGHT VALUE "NATURALIDADE.......:".
03 COL 46 HIGHLIGHT VALUE "SEXO.......:".
03 COL 79 HIGHLIGHT VALUE "Ä´".
03 LINE 18 COL 1 HIGHLIGHT VALUE "ÃÄ".
03 COL 4 HIGHLIGHT VALUE "NACIONALIDADE......:".
03 COL 46 HIGHLIGHT VALUE "HORAS/DIA..:".
03 COL 79 HIGHLIGHT VALUE "Ä´".
03 LINE 19 COL 1 HIGHLIGHT VALUE "ÃÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
-"ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ´".
03 LINE 20 COL 1 HIGHLIGHT VALUE "ÃÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
-"ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ´".
03 LINE 21 COL 1 HIGHLIGHT VALUE "ÃÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
-"ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ´".
03 LINE 22 COL 1 HIGHLIGHT VALUE "ÃÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
-"ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ´".
03 LINE 23 COL 1 HIGHLIGHT VALUE "³INFORME".
03 COL 80 HIGHLIGHT VALUE "³".
03 LINE 24 COL 1 HIGHLIGHT VALUE "ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
-"ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ".
03 LINE 25 COL 1 BACKGROUND-COLOR 0 HIGHLIGHT VALUE "
-"
-" ".
PROCEDURE DIVISION.
INICIO.
DISPLAY TELA-CADASTRO.
PERFORM LIMPA-TELA.
PEGA-CODIGO.

FromSoft – Todos os direitos reservados – http://www.fromsoft.com.br Página 112


Curso de Cobol Básico

PERFORM ABRE-ARQUIVO.
DISPLAY "CODIGO " AT 2310.
ACCEPT CODIGO-FUN AT 0725 WITH AUTO PROMPT
ACCEPT TECLA FROM ESCAPE KEY
IF TECLA EQUAL 01
GO TO FIM.
MOVE CODIGO-FUN TO CODIGO-AUX
IF CODIGO-AUX EQUAL ZEROS
DISPLAY "CODIGO INVALIDO" AT 2310
ACCEPT PARA AT 2579 WITH AUTO NO-ECHO
DISPLAY " " AT 2310
PERFORM FECHA-ARQUIVO
GO TO PEGA-CODIGO.
LE-ARQUIVO-SEQUENTIAL.
READ ARQFUN AT END GO TO RESPOSTA.
IF CODIGO-AUX EQUAL CODIGO
PERFORM MOSTRA-FUNCIONARIO THRU FIM-MOSTRA-FUNCIONARIO
GO TO PEGA-NOME
ELSE
GO TO LE-ARQUIVO-SEQUENTIAL.
FIM-PEGA-CODIGO. EXIT.
PEGA-NOME.
DISPLAY "NOME " AT 2310
ACCEPT NOME AT 0825 WITH AUTO PROMPT.
ACCEPT TECLA FROM ESCAPE KEY
IF TECLA EQUAL 01
PERFORM FECHA-ARQUIVO
GO TO PEGA-CODIGO.
IF NOME EQUAL SPACES
DISPLAY "NOME INVALIDO" AT 2310
ACCEPT PARA AT 2579 WITH AUTO NO-ECHO
DISPLAY " " AT 2310
GO TO PEGA-NOME.
PEGA-ENDERECO.
DISPLAY "ENDERECO " AT 2310
ACCEPT ENDERECO AT 0925 WITH AUTO PROMPT.
ACCEPT TECLA FROM ESCAPE KEY
IF TECLA EQUAL 01
GO TO PEGA-NOME.
IF ENDERECO EQUAL SPACES
DISPLAY "ENDERECO INVALIDO" AT 2310
ACCEPT PARA AT 2579 WITH AUTO NO-ECHO
DISPLAY " " AT 2310
GO TO PEGA-ENDERECO.
PEGA-CIDADE.
DISPLAY "CIDADE " AT 2310
ACCEPT CIDADE AT 1025 WITH AUTO.
ACCEPT TECLA FROM ESCAPE KEY
IF TECLA EQUAL 01
GO TO PEGA-ENDERECO.
IF CIDADE EQUAL SPACES
DISPLAY "CIDADE INVALIDA" AT 2310
ACCEPT PARA AT 2579 WITH AUTO NO-ECHO
DISPLAY " " AT 2310
GO TO PEGA-CIDADE.
PEGA-ATIVIDADE.
DISPLAY "ATIVIDADE " AT 2310
ACCEPT ATIVIDADE AT 1125 WITH AUTO PROMPT.
ACCEPT TECLA FROM ESCAPE KEY
IF TECLA EQUAL 01
GO TO PEGA-CIDADE.
IF ATIVIDADE EQUAL SPACES
DISPLAY "ATIVIDADE INVALIDA" AT 2310
ACCEPT PARA AT 2579 WITH AUTO NO-ECHO
DISPLAY " " AT 2310
GO TO PEGA-ATIVIDADE.
PEGA-SETOR.
DISPLAY "SETOR " AT 2310
ACCEPT SETOR AT 1225 WITH AUTO PROMPT.
ACCEPT TECLA FROM ESCAPE KEY
IF TECLA EQUAL 01
GO TO PEGA-ATIVIDADE.
IF SETOR EQUAL SPACES
DISPLAY "SETOR INVALIDO" AT 2310
ACCEPT PARA AT 2579 WITH AUTO NO-ECHO

FromSoft – Todos os direitos reservados – http://www.fromsoft.com.br Página 113


Curso de Cobol Básico

DISPLAY " " AT 2310


GO TO PEGA-SETOR.
PEGA-SALARIO.
DISPLAY "SALARIO " AT 2310
ACCEPT SALARIO-FUN AT 1325 WITH AUTO.
ACCEPT TECLA FROM ESCAPE KEY
IF TECLA EQUAL 01
GO TO PEGA-SETOR.
MOVE SALARIO-FUN TO SALARIO
IF SALARIO EQUAL ZEROS
DISPLAY "SALARIO INVALIDO" AT 2310
ACCEPT PARA AT 2579 WITH AUTO NO-ECHO
DISPLAY " " AT 2310
GO TO PEGA-SALARIO.
PEGA-DATA-DE-PAGAMENTO.
DISPLAY "DATA DE PAGAMENTO " AT 2310
ACCEPT DATA-PAR AT 1425 WITH AUTO.
ACCEPT TECLA FROM ESCAPE KEY
IF TECLA EQUAL 01
GO TO PEGA-SALARIO.
PERFORM VALIDA-DATA
IF FLAG-VALIDA EQUAL "N"
DISPLAY "DATA DE PAGAMENTO INVALIDA" AT 2310
ACCEPT PARA AT 2579 WITH AUTO NO-ECHO
DISPLAY " " AT 2310
GO TO PEGA-DATA-DE-PAGAMENTO.
MOVE DATA-PAR TO DATA-PAGAMENTO.
PEGA-DATA-DE-NASCIMENTO.
DISPLAY "DATA DE NASCIMENTO " AT 2310
ACCEPT DATA-PAR AT 1525 WITH AUTO.
ACCEPT TECLA FROM ESCAPE KEY
IF TECLA EQUAL 01
GO TO PEGA-DATA-DE-PAGAMENTO.
PERFORM VALIDA-DATA
IF FLAG-VALIDA EQUAL "N"
DISPLAY "DATA DE NASCIMENTO INVALIDA" AT 2310
ACCEPT PARA AT 2579 WITH AUTO NO-ECHO
DISPLAY " " AT 2310
GO TO PEGA-DATA-DE-NASCIMENTO.
MOVE DATA-PAR TO DATA-NASCIMENTO.
PEGA-ESCOLARIDADE.
DISPLAY "ESCOLARIDADE " AT 2310
ACCEPT ESCOLARIDADE AT 1625 WITH AUTO.
ACCEPT TECLA FROM ESCAPE KEY
IF TECLA EQUAL 01
GO TO PEGA-DATA-DE-NASCIMENTO.
IF ESCOLARIDADE EQUAL SPACES
DISPLAY "ESCOLARIDADE INVALIDA" AT 2310
ACCEPT PARA AT 2579 WITH AUTO NO-ECHO
DISPLAY " " AT 2310
GO TO PEGA-ESCOLARIDADE.
PEGA-NATURALIDADE.
DISPLAY "NATURALIDADE " AT 2310
ACCEPT NATURALIDADE AT 1725 WITH AUTO.
ACCEPT TECLA FROM ESCAPE KEY
IF TECLA EQUAL 01
GO TO PEGA-ESCOLARIDADE.
IF NATURALIDADE EQUAL SPACES
DISPLAY "NATURALIDADE INVALIDA" AT 2310
ACCEPT PARA AT 2579 WITH AUTO NO-ECHO
DISPLAY " " AT 2310
GO TO PEGA-NATURALIDADE.
PEGA-NACIONALIDADE.
DISPLAY "NACIONALIDADE " AT 2310
ACCEPT NACIONALIDADE AT 1825 WITH AUTO.
ACCEPT TECLA FROM ESCAPE KEY
IF TECLA EQUAL 01
GO TO PEGA-NATURALIDADE.
IF NACIONALIDADE EQUAL SPACES
DISPLAY "NACIONALIDADE INVALIDA" AT 2310
ACCEPT PARA AT 2579 WITH AUTO NO-ECHO
DISPLAY " " AT 2310
GO TO PEGA-NACIONALIDADE.
PEGA-BAIRRO.
DISPLAY "BAIRRO " AT 2310

FromSoft – Todos os direitos reservados – http://www.fromsoft.com.br Página 114


Curso de Cobol Básico

ACCEPT BAIRRO AT 1159 WITH AUTO.


ACCEPT TECLA FROM ESCAPE KEY
IF TECLA EQUAL 01
GO TO PEGA-NACIONALIDADE.
IF BAIRRO EQUAL SPACES
DISPLAY "BAIRRO INVALIDO" AT 2310
ACCEPT PARA AT 2579 WITH AUTO NO-ECHO
DISPLAY " " AT 2310
GO TO PEGA-BAIRRO.
PEGA-ESTADO.
DISPLAY "ESTADO " AT 2310
ACCEPT ESTADO AT 1259 WITH AUTO.
ACCEPT TECLA FROM ESCAPE KEY
IF TECLA EQUAL 01
GO TO PEGA-BAIRRO.
IF ESTADO EQUAL SPACES
DISPLAY "ESTADO INVALIDO" AT 2310
ACCEPT PARA AT 2579 WITH AUTO NO-ECHO
DISPLAY " " AT 2310
GO TO PEGA-ESTADO.
PEGA-CPF.
DISPLAY "CPF " AT 2310
ACCEPT CPF-FUN AT 1359 WITH AUTO.
ACCEPT TECLA FROM ESCAPE KEY
IF TECLA EQUAL 01
GO TO PEGA-ESTADO.
MOVE CPF-FUN TO CPF
IF CPF EQUAL ZEROS
DISPLAY "CPF INVALIDO" AT 2310
ACCEPT PARA AT 2579 WITH AUTO NO-ECHO
DISPLAY " " AT 2310
GO TO PEGA-CPF.
PEGA-IDENTIDADE.
DISPLAY "IDENTIDADE " AT 2310
ACCEPT IDENTIDADE AT 1459 WITH AUTO.
ACCEPT TECLA FROM ESCAPE KEY
IF TECLA EQUAL 01
GO TO PEGA-CPF.
IF IDENTIDADE EQUAL SPACES
DISPLAY "IDENTIDADE INVALIDA" AT 2310
ACCEPT PARA AT 2579 WITH AUTO NO-ECHO
DISPLAY " " AT 2310
GO TO PEGA-IDENTIDADE.
PEGA-FILIAL.
DISPLAY "FILIAL " AT 2310
ACCEPT FILIAL AT 1559 WITH AUTO.
ACCEPT TECLA FROM ESCAPE KEY
IF TECLA EQUAL 01
GO TO PEGA-IDENTIDADE.
IF FILIAL EQUAL SPACES
DISPLAY "FILIAL INVALIDA" AT 2310
ACCEPT PARA AT 2579 WITH AUTO NO-ECHO
DISPLAY " " AT 2310
GO TO PEGA-FILIAL.
PEGA-DATA-DE-ADMISSAO.
DISPLAY "DATA DE ADMISSAO " AT 2310
ACCEPT DATA-PAR AT 1659 WITH AUTO.
ACCEPT TECLA FROM ESCAPE KEY
IF TECLA EQUAL 01
GO TO PEGA-FILIAL.
PERFORM VALIDA-DATA
IF FLAG-VALIDA EQUAL "N"
DISPLAY "DATA DE ADMISSAO INVALIDA" AT 2310
ACCEPT PARA AT 2579 WITH AUTO NO-ECHO
DISPLAY " " AT 2310
GO TO PEGA-DATA-DE-ADMISSAO.
MOVE DATA-PAR TO DATA-ADMISSAO.
PEGA-SEXO.
DISPLAY "SEXO " AT 2310
ACCEPT SEXO AT 1759 WITH AUTO.
ACCEPT TECLA FROM ESCAPE KEY
IF TECLA EQUAL 01
GO TO PEGA-DATA-DE-ADMISSAO.
IF SEXO NOT EQUAL "S" AND SEXO NOT EQUAL "M"
DISPLAY "SEXO INVALIDO" AT 2310

FromSoft – Todos os direitos reservados – http://www.fromsoft.com.br Página 115


Curso de Cobol Básico

ACCEPT PARA AT 2579 WITH AUTO NO-ECHO


DISPLAY " " AT 2310
GO TO PEGA-SEXO.
PEGA-HORAS.
DISPLAY "HORAS DE TRABALHO " AT 2310
ACCEPT HORAS-TRABALHO-FUN AT 1859 WITH AUTO.
ACCEPT TECLA FROM ESCAPE KEY
IF TECLA EQUAL 01
GO TO PEGA-SEXO.
MOVE HORAS-TRABALHO-FUN TO HORAS-TRABALHO
IF HORAS-TRABALHO EQUAL ZEROS
DISPLAY "HORAS DE TRABALHO INVALIDA" AT 2310
ACCEPT PARA AT 2579 WITH AUTO NO-ECHO
DISPLAY " " AT 2310
GO TO PEGA-HORAS.
GRAVA-REGISTRO.
REWRITE REG-ARQFUN
IF FILE-STATUS EQUAL ZEROS
PERFORM LIMPA-TELA
PERFORM FECHA-ARQUIVO
GO TO INICIO
ELSE
DISPLAY "ERRO DE GRAVACAO NO ARQUIVO" AT 2310
ACCEPT PARA AT 2579 WITH AUTO NO-ECHO
GO TO FIM
END-IF.
FIM.
DISPLAY " " WITH ERASE EOS BACKGROUND-COLOR 0
FOREGROUND-COLOR 7.
STOP RUN.

LIMPA-TELA.
INITIALIZE CODIGO NOME ENDERECO CIDADE ATIVIDADE SETOR
SALARIO DIA-PAGAMENTO MES-PAGAMENTO ANO-PAGAMENTO
DIA-NASCIMENTO MES-NASCIMENTO ANO-NASCIMENTO
ESCOLARIDADE NATURALIDADE NACIONALIDADE BAIRRO
ESTADO CPF IDENTIDADE FILIAL DIA-ADMISSAO
MES-ADMISSAO ANO-ADMISSAO SEXO HORAS-TRABALHO
CODIGO-FUN CPF-FUN SALARIO-FUN HORAS-TRABALHO-FUN
DIA-PAR MES-PAR ANO-PAR.
RESPOSTA.
DISPLAY "CODIGO NAO CADASTRADO" AT 2310
ACCEPT PARA AT 2579 WITH AUTO NO-ECHO
DISPLAY " " AT 2310
PERFORM FECHA-ARQUIVO
PERFORM LIMPA-TELA
GO TO PEGA-CODIGO.

ABRE-ARQUIVO.
OPEN I-O ARQFUN
IF FILE-STATUS NOT EQUAL ZEROS
IF FILE-STATUS EQUAL "05" OR "35"
OPEN OUTPUT ARQFUN
CLOSE ARQFUN
GO TO ABRE-ARQUIVO
ELSE
DISPLAY "ERRO DE ABERTURA NO ARQUIVO" AT 2310
ACCEPT PARA AT 2579 WITH AUTO NO-ECHO
GO TO FIM
END-IF
ELSE
CONTINUE
END-IF.

FECHA-ARQUIVO.
CLOSE ARQFUN
IF FILE-STATUS EQUAL ZEROS
NEXT SENTENCE
ELSE
DISPLAY "ERRO DE FECHAMENTO DO ARQUIVO" AT 2310
ACCEPT PARA AT 2579 WITH AUTO NO-ECHO
GO TO FIM.

MOSTRA-FUNCIONARIO.
DISPLAY NOME AT 0825

FromSoft – Todos os direitos reservados – http://www.fromsoft.com.br Página 116


Curso de Cobol Básico

DISPLAY ENDERECO AT 0925


DISPLAY CIDADE AT 1025
DISPLAY ATIVIDADE AT 1125
DISPLAY SETOR AT 1225
MOVE SALARIO TO SALARIO-FUN
DISPLAY SALARIO-FUN AT 1325
MOVE DATA-PAGAMENTO TO DATA-FUN
DISPLAY DATA-PAGAMENTO AT 1425
MOVE DATA-NASCIMENTO TO DATA-FUN
DISPLAY DATA-NASCIMENTO AT 1525
DISPLAY ESCOLARIDADE AT 1625
DISPLAY NATURALIDADE AT 1725
DISPLAY NACIONALIDADE AT 1825
DISPLAY BAIRRO AT 1159
DISPLAY ESTADO AT 1259
MOVE CPF TO CPF-FUN
DISPLAY CPF-FUN AT 1359
DISPLAY IDENTIDADE AT 1459
DISPLAY FILIAL AT 1559
MOVE DATA-ADMISSAO TO DATA-FUN
DISPLAY DATA-ADMISSAO AT 1659
DISPLAY SEXO AT 1759
MOVE HORAS-TRABALHO TO HORAS-TRABALHO-FUN
DISPLAY HORAS-TRABALHO-FUN AT 1859.
FIM-MOSTRA-FUNCIONARIO. EXIT.

VALIDA-DATA.
IF DIA-PAR GREATER ZEROS AND DIA-PAR LESS 32
MOVE "S" TO FLAG-VALIDA
ELSE
MOVE "N" TO FLAG-VALIDA
END-IF
IF MES-PAR GREATER ZEROS AND MES-PAR LESS 13
IF MES-PAR EQUAL 01 OR MES-PAR EQUAL 03
OR MES-PAR EQUAL 05 OR MES-PAR EQUAL 07
OR MES-PAR EQUAL 08 OR MES-PAR EQUAL 10
OR MES-PAR EQUAL 12 AND DIA-PAR LESS 32
MOVE "S" TO FLAG-VALIDA
ELSE
IF MES-PAR EQUAL 02 AND DIA-PAR LESS 30
MOVE "S" TO FLAG-VALIDA
ELSE
IF MES-PAR EQUAL 04 OR MES-PAR EQUAL 06
OR MES-PAR EQUAL 09 OR MES-PAR EQUAL 11
MOVE "S" TO FLAG-VALIDA
ELSE
MOVE "N" TO FLAG-VALIDA
END-IF
ELSE
MOVE "N" TO FLAG-VALIDA
END-IF.

FromSoft – Todos os direitos reservados – http://www.fromsoft.com.br Página 117


Curso de Cobol Básico

Lição 10 – Exercícios

1 – Deve-se criar os copybooks para os futuros programas a serem criados.


– Criar os Copybooks pedidos (estrutura e layout) de acordo com o seguinte leiaute:

Nome de arquivo: Arqfuns.


Nome de Arquivo Físico: arqfuns.dat
Organização: Sequencial
Modo de Acesso: Sequencial
Variavel de File Status: File-Status.
Nome de registro de FD: Reg-Arqfuns

Variável Tamanho Tipo


Codigo 5 9
Nome 30 X
Sexo 1 A
Rua 20 X
Numero 5 9
Complemento 20 X
Telefone 15 X
Bairro 20 X
Cidade 20 X
Estado 2 A
Data de Nascimento(Dia/Mês/Ano) Dia 02/Mês-02/Ano-02 9
Escolaridade 15 X
Naturalidade 15 X
Nacionalidade 15 X
CPF(Digito1/Digito2/Digito3/Serie) Digito1 03/Digito2 03/Digito3 03/Serie 02 9
Identidade 15 X

1.1 – Criar os respectivos Copybooks com os seguintes nomes:

earqseq.cpy – Estrutura do Arquivo Sequential.cpy


larqseq.cpy – Layout do Arquivo Sequential.cpy

FromSoft – Todos os direitos reservados – http://www.fromsoft.com.br Página 118


Curso de Cobol Básico

2. Criar um programa de nome PROG24.CBL que irá pegar os dados indicados na tela abaixo e gravar
um arquivo tipo SEQUENTIAL com esses dados.
+------------------------------------------------------------------------------+
¦ Data: 99/99/99 ¦ ESC - VOLTAR/SAIR F3 - SAIR ¦ ¦ CADASTRO ¦
¦------------------------------------------------+ +----------¦
¦ Codigo: 99999 Nome..: XXXXXXXXXXXXXXXXXXXXXXXXXXXXXX ¦
¦ ¦
¦+--- Dados do Cliente -------------------------------------------------------+¦
¦¦ +- Pessoais --------------------------+ +- Residenciais -----------------+ ¦¦
¦¦ ¦ ¦ ¦ ¦ ¦¦
¦¦ ¦ Data Nasc....: 99/99/99 Sexo: A ¦ ¦ Rua.....: XXXXXXXXXXXXXXXXXXXX ¦ ¦¦
¦¦ ¦ Escolaridade.: XXXXXXXXXXXXXXXXXXXX ¦ ¦ Numero..: 99999 ¦ ¦¦
¦¦ ¦ Naturalidade.: XXXXXXXXXXXXXXXXXXXX ¦ ¦ Bairro..: XXXXXXXXXXXXXXXXXXXX ¦ ¦¦
¦¦ ¦ Nacionalidade: XXXXXXXXXXXXXXXXXXXX ¦ ¦ Cidade..: XXXXXXXXXXXXXXXXXXXX ¦ ¦¦
¦¦ ¦ Cpf..........: XXXXXXXXXXXXXXX ¦ ¦ Estado..: AA ¦ ¦¦
¦¦ ¦ Identidade...: XXXXXXXXXXXXXXX ¦ ¦ Telefone: XXXXXXXXXXXXXXX ¦ ¦¦
¦¦ +-------------------------------------+ +--------------------------------+ ¦¦
¦¦ +- Opcionais -------------------------+ ¦¦
¦¦ ¦ ¦ ¦¦
¦¦ ¦ Comp. Rua....: XXXXXXXXXXXXXXXXXXXX ¦ ¦¦
¦¦ +-------------------------------------+ ¦¦
¦+----------------------------------------------------------------------------+¦
¦ ¦
¦------------------------------------------------------------------------------¦
¦ Mensagem: XXXXXXXXXXXXXXXXXXXXXXXXXXXXXX Hora: 99:99 ¦
+------------------------------------------------------------------------------+

Onde:
- lembrar que para sair do programa, o usuário deverá teclar ESC no campo Código.
- Fazer validação de Data usando o PROG22.CBL.

Após cadastrar alguns funcionários, fazer:


- editar o arquivo ARQFUNS.DAT (com o Edit do DOS ou outro editor de texto qualquer) e verificar
como os dados foram gravados.
- sair do programa, entrar novamente e cadastrar novos funcionários
- editar novamente o arquivo e verificar se acrescentou esses novos funcionários após os anteriores.

3. Criar um programa de nome PROG25.CBL que irá ler o arquivo gravado e gerado pelo PROG24.CBL,
mostrando os dados do registro que tiver o Código igual a um código informado na tela. Caso não exista
o código no arquivo, dar mensagem “CODIGO NÃO CADASTRADO”.

4. Criar um programa de nome PROG26.CBL que irá ler e alterar o arquivo gravado e gerado pelo
PROG25.CBL, mostrando os dados do registro que tiver o Código igual a um código informado na tela.
Caso não exista o código no arquivo, dar mensagem “CODIGO NÃO CADASTRADO”.

FromSoft – Todos os direitos reservados – http://www.fromsoft.com.br Página 119


Curso de Cobol Básico

Lição 11

Lição 11 - Conceitos

11.1 - Trabalhando com arquivos: Arquivo LINE SEQUENTIAL

Conceito: Para declaração de um arquivo do tipo LINE SEQUENTIAL, usamos no SELECT a


cláusula ORGANIZATION IS LINE SEQUENTIAL.

11.2 - Comandos usados em um arquivo LINE SEQUENTIAL

11.2.1 - Modo de acesso

Conceito: Quando queremos ler dados de um arquivo, devemos definir na SELECT a forma como o
arquivo será acessado. Um Arquivo LINE SEQUENTIAL só admite ACCESS MODE IS SEQUENTIAL.
Veremos outros modos de acesso em outros tipos de organização.

11.2.2 - O comando OPEN com cláusula INPUT

Conceito: Utilizamos o comando OPEN INPUT para abrir arquivos já existentes apenas para leitura.

11.2.3 - O comando OPEN com cláusula OUTPUT

Conceito: Utilizamos o comando OPEN OUTPUT para criar arquivos.

11.2.4 - O comando OPEN com cláusula EXTEND

Conceito: Quando queremos fazer complementação de registros em um arquivo texto, é necessário


abri-lo com OPEN EXTEND.

11.2.5 - O comando OPEN com cláusula I-O

Conceito: Quando queremos fazer leitura e gravação em um arquivo sequencial, indexado ou relativo,
primeiro é necessário abri-lo com o comando OPEN e cláusula I-O (Input - Output).

11.2.6 – O comando READ com clausula AT END/NOT AT END

Conceito: Quando todos os registros de um arquivo LINE SEQUENTIAL forem lidos, pode ocorrer o
evento AT END, sendo executados os comandos que estiverem indicados após esta cláusula.

11.3 - Demonstração de um arquivo LINE SEQUENTIAL

Se você editar um arquivo texto, provavelmente irá encontrar a seguinte estrutura: Este arquivo
em exemplo tem 3 registros.
00001FROMSOFT 01 01 01M3§ GRAU BELO HORIZONTE BRASILEIRA
001 001 001 01N/A AV DOS ANDRADAS 02287STA EFIGENIA BELO HORIZONTE
MG(31) 3241-6882 SALA 1205
00002APS 01 01 79M3§ GRAU BELO HORIZONTE BRASILEIRA
001 001 001 01N/A AV DOS ANDRADAS 02287STA EFIGENIA BELO HORIZONTE
MG(31) 3241-6882 SALA 1204
00003MEUSAPLICATIVOS.COM 01 01 01M2§ GRAU BELO HORIZONTE BRASILEIRA
001 001 001 01N/A AV DOS ANDRADAS 02287STA EFIGENIA BELO HORIZONTE
MG(31) 3241-6882 SALA 1204 X

Veja que este tipo de arquivo, já foi armazenado de forma diferente do arquivo sequencial. Se
você simplesmente pegar estas linhas do arquivo copiar e colar no bloco de notas, veja que cada um vai
ficar em uma linha, ou seja, o bloco de notas lê o arquivo texto da seguinte forma: Aonde ele encontrar o
caracter 0D0A(Embora nós não vemos este caracter), ele pula a linha. Este caracter chama-se carriage-

FromSoft – Todos os direitos reservados – http://www.fromsoft.com.br Página 120


Curso de Cobol Básico

return, que deriva-se de carro de retorno, onde o Carriage (CR) tem o valor de 0D e o Return (Que pode
se chamar também de Line Feed) tem o valor de 0A.
Lembra da máquina de datilografar? Quando você quer pular de linha, você pressiona um
botão(para as elétricas) ou então pressiona uma alavanca para baixo e depois a puxa para a sua direita.
Ele então pula para a linha posterior e volta para o início. Quem faz isso no teclado? O ENTER, que na
verdade chama-se RETURN. (Nos teclados americanos, foram eles que criaram o teclado). Então o
ENTER é uma combinação hexadecimal do tradicional carro de retorno da máquina de datilografar.

No arquivo texto, os dados vão sendo armazenados a cada linha, a medida que o programa
COBOL encontra no arquivo texto, o caracter 0D0A(Carriage Return), ele pula uma linha e realiza a
gravação das informações. Se você for olhar direito e for separar, vai ter 3 registros bem mais definidos
que o arquivo sequencial: um registro de nome FROMSOFT com um valor antecedente de 00001, um
segundo registro chamado APS com um valor antecedente de 00002 e um terceiro registro chamado
MEUSAPLICATIVOS.COM com um valor antecedente de 00003.

Agora os registros existentes no arquivo serão separados e você vai entender melhor: veja.
Veja também que eles são bem mais fáceis de visualizar:

Registro 1.

00001FROMSOFT 01 01 01M3§ GRAU BELO HORIZONTE BRASILEIRA


001 001 001 01N/A AV DOS ANDRADAS 02287STA EFIGENIA BELO HORIZONTE
MG(31) 3241-6882 SALA 1205

Registro 2.

BELO HORIZONTE MG(31) 3241-6882 SALA 1205


00002APS 01 01 79M3§ GRAU BELO HORIZONTE BRASILEIRA
001 001 001 01N/A AV DOS ANDRADAS 02287STA EFIGENIA

Registro 3.

00003MEUSAPLICATIVOS.COM 01 01 01M2§ GRAU BELO HORIZONTE BRASILEIRA


001 001 001 01N/A AV DOS ANDRADAS 02287STA EFIGENIA BELO HORIZONTE
MG(31) 3241-6882 SALA 1204 X

11.4 - Como ler um arquivo LINE SEQUENTIAL

O Modo de leitura texto não tem o conceito de código, ou seja, o conceito de chave. O Modo de
leitura texto é exatamente igual ao modo de leitura sequencial. O conceito existente em um arquivo texto
é de linhas sequenciais, ou seja, a cada registro incluído, é incluído dois bytes com o valor de "0D0A"
(Zero D, Zero A - Em hexadecimal, significa final de linha), então quando ele vai gravar, ele procura o
caracter 0D0A, depois de encontrado ele pula para a próxima linha e depois ele faz a gravação. Para ler
um arquivo desse tipo, deve-se ler igual ao arquivo sequencial, mas agora muda unicamente o
paradigma de sequencia para linha. Ex:

ABRE-ARQUIVO.
OPEN INPUT ARQFUNLS
IF FILE-STATUS NOT EQUAL ZEROS
THEN
DISPLAY "ERRO DE ABERTURA DO ARQUIVO" AT 2419
GO TO FIM
END-IF.

LE-ARQUIVO-TEXTO.
READ ARQFUNLS
AT END
GO TO RESPOSTA
NOT AT END
IF NOME EQUAL COD-NOME
THEN
PERFORM MOSTRA-DADOS
CLOSE ARQFUNS
IF FILE-STATUS NOT EQUAL ZEROS

FromSoft – Todos os direitos reservados – http://www.fromsoft.com.br Página 121


Curso de Cobol Básico

THEN
DISPLAY "ERRO DE FECHAMENTO DO ARQUIVO" AT 2419
GO TO FIM
END-IF
GO TO ABRE-ARQUIVO
ELSE
GO TO LE-ARQUIVO-TEXTO
END-IF
END-READ.

RESPOSTA.
DISPLAY "NOME INVALIDO " AT 2419 WITH BLINK BACKGROUND-COLOR 1
FOREGROUND-COLOR 7
CLOSE ARQFUNS
GO TO ABRE-ARQUIVO.

P.S - Veja que ele tem que ler todo o arquivo, e se ir até o final (evento at end) ele vai para o procedure-
name resposta, veja que aqui ele irá fechar o arquivo e ir para o procedure name abre-arquivo, que irá
abrir o arquivo novamente. Para testar se o registro é igual, ele depois que lê, testa se o campo que o
usuário digitou é igual ao campo que tem no arquivo.

Também os exemplos seriam semelhantes, mudando apenas a cláusula ORGANIZATION IS LINE


SEQUENTIAL:
SELECT INCLSEQ ASSIGN TO "INCLSEQ.DAT"
ORGANIZATION IS SEQUENTIAL
ACCESS MODE IS SEQUENTIAL
FILE STATUS IS FILE-STATUS.

Lição 11 – Exemplo 1 – Cadastro de Usuários.

IDENTIFICATION DIVISION.
PROGRAM-ID. L11EX01.
AUTHOR. FROMSOFT.
ENVIRONMENT DIVISION.
SPECIAL-NAMES.
DECIMAL-POINT IS COMMA.
FILE-CONTROL.
SELECT ARQFUN ASSIGN TO "ARQFUNLS.DAT"
ORGANIZATION IS LINE SEQUENTIAL
ACCESS MODE IS SEQUENTIAL
FILE STATUS IS FILE-STATUS.
DATA DIVISION.
FILE SECTION.
FD ARQFUN.
01 REG-ARQFUN.
03 CODIGO PIC 9(05).
03 NOME PIC X(30).
03 ENDERECO PIC X(30).
03 CIDADE PIC X(20).
03 ATIVIDADE PIC X(20).
03 SETOR PIC X(20).
03 SALARIO PIC 9(11).
03 DATA-PAGAMENTO.
05 DIA-PAGAMENTO PIC 9(02).
05 FILLER PIC X(01).
05 MES-PAGAMENTO PIC 9(02).
05 FILLER PIC X(01).
05 ANO-PAGAMENTO PIC 9(02).
03 DATA-NASCIMENTO.
05 DIA-NASCIMENTO PIC 9(02).
05 FILLER PIC X(01).
05 MES-NASCIMENTO PIC 9(02).
05 FILLER PIC X(01).
05 ANO-NASCIMENTO PIC 9(02).
03 ESCOLARIDADE PIC X(15).
03 NATURALIDADE PIC X(15).
03 NACIONALIDADE PIC X(15).
03 BAIRRO PIC X(20).
03 ESTADO PIC A(02).
03 CPF PIC 9(11).
03 IDENTIDADE PIC X(11).

FromSoft – Todos os direitos reservados – http://www.fromsoft.com.br Página 122


Curso de Cobol Básico

03 FILIAL PIC X(10).


03 DATA-ADMISSAO.
05 DIA-ADMISSAO PIC 9(02).
05 FILLER PIC X(01).
05 MES-ADMISSAO PIC 9(02).
05 FILLER PIC X(01).
05 ANO-ADMISSAO PIC 9(02).
03 SEXO PIC A(01).
03 HORAS-TRABALHO PIC 9(02).

WORKING-STORAGE SECTION.
77 CODIGO-FUN PIC ZZZZZ VALUE SPACES.
77 SALARIO-FUN PIC ZZZ.ZZZ.ZZ9,99 VALUE SPACES.
77 CPF-FUN PIC ZZZZZZZZZ.ZZ VALUE SPACES.
77 HORAS-TRABALHO-FUN PIC ZZ VALUE SPACES.
77 MENSAGEM PIC X(30) VALUE ZEROS.
77 FLAG-VALIDA PIC X VALUE SPACE.
77 TECLA PIC XX VALUE SPACES.
77 FILE-STATUS PIC XX VALUE SPACES.
77 PARA PIC X VALUE SPACES.
01 DATA-PAR.
03 DIA-PAR PIC 9(02) VALUE ZEROS.
03 FILLER PIC X(01) VALUE "/".
03 MES-PAR PIC 9(02) VALUE ZEROS.
03 FILLER PIC X(01) VALUE "/".
03 ANO-PAR PIC 9(02) VALUE ZEROS.
SCREEN SECTION.
01 TELA-CADASTRO.
02 BACKGROUND-COLOR 1 FOREGROUND-COLOR 7.
03 BLANK SCREEN.
03 LINE 1 COL 1 HIGHLIGHT VALUE "ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
-"ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿".
03 LINE 2 COL 1 HIGHLIGHT VALUE "ÃÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
-"ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ´".
03 LINE 3 COL 1 HIGHLIGHT VALUE "ÃÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄCA
-"DASTRO".
03 COL 37 HIGHLIGHT VALUE "DE".
03 COL 40 HIGHLIGHT VALUE "CANDIDATOSÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
-"ÄÄÄÄÄ´".
03 LINE 4 COL 1 HIGHLIGHT VALUE "ÃÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
-"ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ´".
03 LINE 5 COL 1 HIGHLIGHT VALUE "ÃÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
-"ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ´".
03 LINE 6 COL 1 HIGHLIGHT VALUE "ÃÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
-"ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ´".
03 LINE 7 COL 1 HIGHLIGHT VALUE "ÃÄ".
03 COL 4 HIGHLIGHT VALUE "CODIGO.............:".
03 COL 79 HIGHLIGHT VALUE "Ä´".
03 LINE 8 COL 1 HIGHLIGHT VALUE "ÃÄ".
03 COL 4 HIGHLIGHT VALUE "NOME...............:".
03 COL 79 HIGHLIGHT VALUE "Ä´".
03 LINE 9 COL 1 HIGHLIGHT VALUE "ÃÄ".
03 COL 4 HIGHLIGHT VALUE "ENDERECO...........:".
03 COL 79 HIGHLIGHT VALUE "Ä´".
03 LINE 10 COL 1 HIGHLIGHT VALUE "ÃÄ".
03 COL 4 HIGHLIGHT VALUE "CIDADE.............:".
03 COL 79 HIGHLIGHT VALUE "Ä´".
03 LINE 11 COL 1 HIGHLIGHT VALUE "ÃÄ".
03 COL 4 HIGHLIGHT VALUE "ATIVIDADE..........:".
03 COL 46 HIGHLIGHT VALUE "BAIRRO.....:".
03 COL 79 HIGHLIGHT VALUE "Ä´".
03 LINE 12 COL 1 HIGHLIGHT VALUE "ÃÄ".
03 COL 4 HIGHLIGHT VALUE "SETOR..............:".
03 COL 46 HIGHLIGHT VALUE "ESTADO.....:".
03 COL 79 HIGHLIGHT VALUE "Ä´".
03 LINE 13 COL 1 HIGHLIGHT VALUE "ÃÄ".
03 COL 4 HIGHLIGHT VALUE "SALARIO............:".
03 COL 46 HIGHLIGHT VALUE "CPF........:".
03 COL 79 HIGHLIGHT VALUE "Ä´".
03 LINE 14 COL 1 HIGHLIGHT VALUE "ÃÄ".
03 COL 4 HIGHLIGHT VALUE "DATA".
03 COL 9 HIGHLIGHT VALUE "DE".
03 COL 12 HIGHLIGHT VALUE "PAGAMENTO..:".
03 COL 27 HIGHLIGHT VALUE "/".
03 COL 30 HIGHLIGHT VALUE "/".

FromSoft – Todos os direitos reservados – http://www.fromsoft.com.br Página 123


Curso de Cobol Básico

03 COL 46 HIGHLIGHT VALUE "IDENTIDADE.:".


03 COL 79 HIGHLIGHT VALUE "Ä´".
03 LINE 15 COL 1 HIGHLIGHT VALUE "ÃÄ".
03 COL 4 HIGHLIGHT VALUE "DATA".
03 COL 9 HIGHLIGHT VALUE "DE".
03 COL 12 HIGHLIGHT VALUE "NASCIMENTO.:".
03 COL 27 HIGHLIGHT VALUE "/".
03 COL 30 HIGHLIGHT VALUE "/".
03 COL 46 HIGHLIGHT VALUE "FILIAL.....:".
03 COL 79 HIGHLIGHT VALUE "Ä´".
03 LINE 16 COL 1 HIGHLIGHT VALUE "ÃÄ".
03 COL 4 HIGHLIGHT VALUE "ESCOLARIDADE.......:".
03 COL 46 HIGHLIGHT VALUE "ADMISSAO...:".
03 COL 61 HIGHLIGHT VALUE "/".
03 COL 64 HIGHLIGHT VALUE "/".
03 COL 79 HIGHLIGHT VALUE "Ä´".
03 LINE 17 COL 1 HIGHLIGHT VALUE "ÃÄ".
03 COL 4 HIGHLIGHT VALUE "NATURALIDADE.......:".
03 COL 46 HIGHLIGHT VALUE "SEXO.......:".
03 COL 79 HIGHLIGHT VALUE "Ä´".
03 LINE 18 COL 1 HIGHLIGHT VALUE "ÃÄ".
03 COL 4 HIGHLIGHT VALUE "NACIONALIDADE......:".
03 COL 46 HIGHLIGHT VALUE "HORAS/DIA..:".
03 COL 79 HIGHLIGHT VALUE "Ä´".
03 LINE 19 COL 1 HIGHLIGHT VALUE "ÃÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
-"ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ´".
03 LINE 20 COL 1 HIGHLIGHT VALUE "ÃÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
-"ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ´".
03 LINE 21 COL 1 HIGHLIGHT VALUE "ÃÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
-"ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ´".
03 LINE 22 COL 1 HIGHLIGHT VALUE "ÃÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
-"ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ´".
03 LINE 23 COL 1 HIGHLIGHT VALUE "³INFORME".
03 COL 80 HIGHLIGHT VALUE "³".
03 LINE 24 COL 1 HIGHLIGHT VALUE "ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
-"ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ".
03 LINE 25 COL 1 BACKGROUND-COLOR 0 HIGHLIGHT VALUE "
-"
-" ".
PROCEDURE DIVISION.
ABRE-ARQUIVO.
OPEN EXTEND ARQFUN
IF FILE-STATUS NOT EQUAL ZEROS
IF FILE-STATUS EQUAL "05" OR "35"
OPEN OUTPUT ARQFUN
CLOSE ARQFUN
GO TO ABRE-ARQUIVO
ELSE
DISPLAY "ERRO DE ABERTURA NO ARQUIVO" AT 2310
ACCEPT PARA AT 2579 WITH AUTO NO-ECHO
GO TO FIM
END-IF
ELSE
CONTINUE
END-IF.

INICIO.
DISPLAY TELA-CADASTRO.
PERFORM LIMPA-TELA.
PEGA-CODIGO.
DISPLAY "CODIGO " AT 2310.
ACCEPT CODIGO-FUN AT 0725 WITH AUTO PROMPT
ACCEPT TECLA FROM ESCAPE KEY
IF TECLA EQUAL 01
GO TO FIM.
MOVE CODIGO-FUN TO CODIGO
IF CODIGO EQUAL ZEROS
DISPLAY "CODIGO INVALIDO" AT 2310
ACCEPT PARA AT 2579 WITH AUTO NO-ECHO
DISPLAY " " AT 2310
GO TO PEGA-CODIGO.
FIM-PEGA-CODIGO. EXIT.
PEGA-NOME.
DISPLAY "NOME " AT 2310
ACCEPT NOME AT 0825 WITH AUTO PROMPT.

FromSoft – Todos os direitos reservados – http://www.fromsoft.com.br Página 124


Curso de Cobol Básico

ACCEPT TECLA FROM ESCAPE KEY


IF TECLA EQUAL 01
GO TO PEGA-CODIGO.
IF NOME EQUAL SPACES
DISPLAY "NOME INVALIDO" AT 2310
ACCEPT PARA AT 2579 WITH AUTO NO-ECHO
DISPLAY " " AT 2310
GO TO PEGA-NOME.
PEGA-ENDERECO.
DISPLAY "ENDERECO " AT 2310
ACCEPT ENDERECO AT 0925 WITH AUTO PROMPT.
ACCEPT TECLA FROM ESCAPE KEY
IF TECLA EQUAL 01
GO TO PEGA-NOME.
IF ENDERECO EQUAL SPACES
DISPLAY "ENDERECO INVALIDO" AT 2310
ACCEPT PARA AT 2579 WITH AUTO NO-ECHO
DISPLAY " " AT 2310
GO TO PEGA-ENDERECO.
PEGA-CIDADE.
DISPLAY "CIDADE " AT 2310
ACCEPT CIDADE AT 1025 WITH AUTO.
ACCEPT TECLA FROM ESCAPE KEY
IF TECLA EQUAL 01
GO TO PEGA-ENDERECO.
IF CIDADE EQUAL SPACES
DISPLAY "CIDADE INVALIDA" AT 2310
ACCEPT PARA AT 2579 WITH AUTO NO-ECHO
DISPLAY " " AT 2310
GO TO PEGA-CIDADE.
PEGA-ATIVIDADE.
DISPLAY "ATIVIDADE " AT 2310
ACCEPT ATIVIDADE AT 1125 WITH AUTO PROMPT.
ACCEPT TECLA FROM ESCAPE KEY
IF TECLA EQUAL 01
GO TO PEGA-CIDADE.
IF ATIVIDADE EQUAL SPACES
DISPLAY "ATIVIDADE INVALIDA" AT 2310
ACCEPT PARA AT 2579 WITH AUTO NO-ECHO
DISPLAY " " AT 2310
GO TO PEGA-ATIVIDADE.
PEGA-SETOR.
DISPLAY "SETOR " AT 2310
ACCEPT SETOR AT 1225 WITH AUTO PROMPT.
ACCEPT TECLA FROM ESCAPE KEY
IF TECLA EQUAL 01
GO TO PEGA-ATIVIDADE.
IF SETOR EQUAL SPACES
DISPLAY "SETOR INVALIDO" AT 2310
ACCEPT PARA AT 2579 WITH AUTO NO-ECHO
DISPLAY " " AT 2310
GO TO PEGA-SETOR.
PEGA-SALARIO.
DISPLAY "SALARIO " AT 2310
ACCEPT SALARIO-FUN AT 1325 WITH AUTO.
ACCEPT TECLA FROM ESCAPE KEY
IF TECLA EQUAL 01
GO TO PEGA-SETOR.
MOVE SALARIO-FUN TO SALARIO
IF SALARIO EQUAL ZEROS
DISPLAY "SALARIO INVALIDO" AT 2310
ACCEPT PARA AT 2579 WITH AUTO NO-ECHO
DISPLAY " " AT 2310
GO TO PEGA-SALARIO.
PEGA-DATA-DE-PAGAMENTO.
DISPLAY "DATA DE PAGAMENTO " AT 2310
ACCEPT DATA-PAR AT 1425 WITH AUTO.
ACCEPT TECLA FROM ESCAPE KEY
IF TECLA EQUAL 01
GO TO PEGA-SALARIO.
PERFORM VALIDA-DATA
IF FLAG-VALIDA EQUAL "N"
DISPLAY "DATA DE PAGAMENTO INVALIDA" AT 2310
ACCEPT PARA AT 2579 WITH AUTO NO-ECHO
DISPLAY " " AT 2310

FromSoft – Todos os direitos reservados – http://www.fromsoft.com.br Página 125


Curso de Cobol Básico

GO TO PEGA-DATA-DE-PAGAMENTO.
MOVE DATA-PAR TO DATA-PAGAMENTO.
PEGA-DATA-DE-NASCIMENTO.
DISPLAY "DATA DE NASCIMENTO " AT 2310
ACCEPT DATA-PAR AT 1525 WITH AUTO.
ACCEPT TECLA FROM ESCAPE KEY
IF TECLA EQUAL 01
GO TO PEGA-DATA-DE-PAGAMENTO.
PERFORM VALIDA-DATA
IF FLAG-VALIDA EQUAL "N"
DISPLAY "DATA DE NASCIMENTO INVALIDA" AT 2310
ACCEPT PARA AT 2579 WITH AUTO NO-ECHO
DISPLAY " " AT 2310
GO TO PEGA-DATA-DE-NASCIMENTO.
MOVE DATA-PAR TO DATA-NASCIMENTO.
PEGA-ESCOLARIDADE.
DISPLAY "ESCOLARIDADE " AT 2310
ACCEPT ESCOLARIDADE AT 1625 WITH AUTO.
ACCEPT TECLA FROM ESCAPE KEY
IF TECLA EQUAL 01
GO TO PEGA-DATA-DE-NASCIMENTO.
IF ESCOLARIDADE EQUAL SPACES
DISPLAY "ESCOLARIDADE INVALIDA" AT 2310
ACCEPT PARA AT 2579 WITH AUTO NO-ECHO
DISPLAY " " AT 2310
GO TO PEGA-ESCOLARIDADE.
PEGA-NATURALIDADE.
DISPLAY "NATURALIDADE " AT 2310
ACCEPT NATURALIDADE AT 1725 WITH AUTO.
ACCEPT TECLA FROM ESCAPE KEY
IF TECLA EQUAL 01
GO TO PEGA-ESCOLARIDADE.
IF NATURALIDADE EQUAL SPACES
DISPLAY "NATURALIDADE INVALIDA" AT 2310
ACCEPT PARA AT 2579 WITH AUTO NO-ECHO
DISPLAY " " AT 2310
GO TO PEGA-NATURALIDADE.
PEGA-NACIONALIDADE.
DISPLAY "NACIONALIDADE " AT 2310
ACCEPT NACIONALIDADE AT 1825 WITH AUTO.
ACCEPT TECLA FROM ESCAPE KEY
IF TECLA EQUAL 01
GO TO PEGA-NATURALIDADE.
IF NACIONALIDADE EQUAL SPACES
DISPLAY "NACIONALIDADE INVALIDA" AT 2310
ACCEPT PARA AT 2579 WITH AUTO NO-ECHO
DISPLAY " " AT 2310
GO TO PEGA-NACIONALIDADE.
PEGA-BAIRRO.
DISPLAY "BAIRRO " AT 2310
ACCEPT BAIRRO AT 1159 WITH AUTO.
ACCEPT TECLA FROM ESCAPE KEY
IF TECLA EQUAL 01
GO TO PEGA-NACIONALIDADE.
IF BAIRRO EQUAL SPACES
DISPLAY "BAIRRO INVALIDO" AT 2310
ACCEPT PARA AT 2579 WITH AUTO NO-ECHO
DISPLAY " " AT 2310
GO TO PEGA-BAIRRO.
PEGA-ESTADO.
DISPLAY "ESTADO " AT 2310
ACCEPT ESTADO AT 1259 WITH AUTO.
ACCEPT TECLA FROM ESCAPE KEY
IF TECLA EQUAL 01
GO TO PEGA-BAIRRO.
IF ESTADO EQUAL SPACES
DISPLAY "ESTADO INVALIDO" AT 2310
ACCEPT PARA AT 2579 WITH AUTO NO-ECHO
DISPLAY " " AT 2310
GO TO PEGA-ESTADO.
PEGA-CPF.
DISPLAY "CPF " AT 2310
ACCEPT CPF-FUN AT 1359 WITH AUTO.
ACCEPT TECLA FROM ESCAPE KEY
IF TECLA EQUAL 01

FromSoft – Todos os direitos reservados – http://www.fromsoft.com.br Página 126


Curso de Cobol Básico

GO TO PEGA-ESTADO.
MOVE CPF-FUN TO CPF
IF CPF EQUAL ZEROS
DISPLAY "CPF INVALIDO" AT 2310
ACCEPT PARA AT 2579 WITH AUTO NO-ECHO
DISPLAY " " AT 2310
GO TO PEGA-CPF.
PEGA-IDENTIDADE.
DISPLAY "IDENTIDADE " AT 2310
ACCEPT IDENTIDADE AT 1459 WITH AUTO.
ACCEPT TECLA FROM ESCAPE KEY
IF TECLA EQUAL 01
GO TO PEGA-CPF.
IF IDENTIDADE EQUAL SPACES
DISPLAY "IDENTIDADE INVALIDA" AT 2310
ACCEPT PARA AT 2579 WITH AUTO NO-ECHO
DISPLAY " " AT 2310
GO TO PEGA-IDENTIDADE.
PEGA-FILIAL.
DISPLAY "FILIAL " AT 2310
ACCEPT FILIAL AT 1559 WITH AUTO.
ACCEPT TECLA FROM ESCAPE KEY
IF TECLA EQUAL 01
GO TO PEGA-IDENTIDADE.
IF FILIAL EQUAL SPACES
DISPLAY "FILIAL INVALIDA" AT 2310
ACCEPT PARA AT 2579 WITH AUTO NO-ECHO
DISPLAY " " AT 2310
GO TO PEGA-FILIAL.
PEGA-DATA-DE-ADMISSAO.
DISPLAY "DATA DE ADMISSAO " AT 2310
ACCEPT DATA-PAR AT 1659 WITH AUTO.
ACCEPT TECLA FROM ESCAPE KEY
IF TECLA EQUAL 01
GO TO PEGA-FILIAL.
PERFORM VALIDA-DATA
IF FLAG-VALIDA EQUAL "N"
DISPLAY "DATA DE ADMISSAO INVALIDA" AT 2310
ACCEPT PARA AT 2579 WITH AUTO NO-ECHO
DISPLAY " " AT 2310
GO TO PEGA-DATA-DE-ADMISSAO.
MOVE DATA-PAR TO DATA-ADMISSAO.
PEGA-SEXO.
DISPLAY "SEXO " AT 2310
ACCEPT SEXO AT 1759 WITH AUTO.
ACCEPT TECLA FROM ESCAPE KEY
IF TECLA EQUAL 01
GO TO PEGA-DATA-DE-ADMISSAO.
IF SEXO NOT EQUAL "S" AND SEXO NOT EQUAL "M"
DISPLAY "SEXO INVALIDO" AT 2310
ACCEPT PARA AT 2579 WITH AUTO NO-ECHO
DISPLAY " " AT 2310
GO TO PEGA-SEXO.
PEGA-HORAS.
DISPLAY "HORAS DE TRABALHO " AT 2310
ACCEPT HORAS-TRABALHO-FUN AT 1859 WITH AUTO.
ACCEPT TECLA FROM ESCAPE KEY
IF TECLA EQUAL 01
GO TO PEGA-SEXO.
MOVE HORAS-TRABALHO-FUN TO HORAS-TRABALHO
IF HORAS-TRABALHO EQUAL ZEROS
DISPLAY "HORAS DE TRABALHO INVALIDA" AT 2310
ACCEPT PARA AT 2579 WITH AUTO NO-ECHO
DISPLAY " " AT 2310
GO TO PEGA-HORAS.
GRAVA-REGISTRO.
WRITE REG-ARQFUN
IF FILE-STATUS EQUAL ZEROS
PERFORM LIMPA-TELA
GO TO INICIO
ELSE
DISPLAY "ERRO DE GRAVACAO NO ARQUIVO" AT 2310
ACCEPT PARA AT 2579 WITH AUTO NO-ECHO
GO TO FIM
END-IF.

FromSoft – Todos os direitos reservados – http://www.fromsoft.com.br Página 127


Curso de Cobol Básico

FIM.
DISPLAY " " WITH ERASE EOS BACKGROUND-COLOR 0
FOREGROUND-COLOR 7.
STOP RUN.

LIMPA-TELA.
INITIALIZE CODIGO NOME ENDERECO CIDADE ATIVIDADE SETOR
SALARIO DIA-PAGAMENTO MES-PAGAMENTO ANO-PAGAMENTO
DIA-NASCIMENTO MES-NASCIMENTO ANO-NASCIMENTO
ESCOLARIDADE NATURALIDADE NACIONALIDADE BAIRRO
ESTADO CPF IDENTIDADE FILIAL DIA-ADMISSAO
MES-ADMISSAO ANO-ADMISSAO SEXO HORAS-TRABALHO
CODIGO-FUN CPF-FUN SALARIO-FUN HORAS-TRABALHO-FUN.

VALIDA-DATA.
IF DIA-PAR GREATER ZEROS AND DIA-PAR LESS 32
MOVE "S" TO FLAG-VALIDA
ELSE
MOVE "N" TO FLAG-VALIDA
END-IF
IF MES-PAR GREATER ZEROS AND MES-PAR LESS 13
IF MES-PAR EQUAL 01 OR MES-PAR EQUAL 03
OR MES-PAR EQUAL 05 OR MES-PAR EQUAL 07
OR MES-PAR EQUAL 08 OR MES-PAR EQUAL 10
OR MES-PAR EQUAL 12 AND DIA-PAR LESS 32
MOVE "S" TO FLAG-VALIDA
ELSE
IF MES-PAR EQUAL 02 AND DIA-PAR LESS 30
MOVE "S" TO FLAG-VALIDA
ELSE
IF MES-PAR EQUAL 04 OR MES-PAR EQUAL 06
OR MES-PAR EQUAL 09 OR MES-PAR EQUAL 11
MOVE "S" TO FLAG-VALIDA
ELSE
MOVE "N" TO FLAG-VALIDA
END-IF
ELSE
MOVE "N" TO FLAG-VALIDA
END-IF.

FromSoft – Todos os direitos reservados – http://www.fromsoft.com.br Página 128


Curso de Cobol Básico

Lição 11 – Exemplo 2 – Consulta de Usuários.

IDENTIFICATION DIVISION.
PROGRAM-ID. L11EX02.
ENVIRONMENT DIVISION.
SPECIAL-NAMES.
DECIMAL-POINT IS COMMA.
FILE-CONTROL.
SELECT ARQFUN ASSIGN TO "ARQFUNLS.DAT"
ORGANIZATION IS LINE SEQUENTIAL
ACCESS MODE IS SEQUENTIAL
FILE STATUS IS FILE-STATUS.
DATA DIVISION.
FILE SECTION.
FD ARQFUN.
01 REG-ARQFUN.
03 CODIGO PIC 9(05).
03 NOME PIC X(30).
03 ENDERECO PIC X(30).
03 CIDADE PIC X(20).
03 ATIVIDADE PIC X(20).
03 SETOR PIC X(20).
03 SALARIO PIC 9(11).
03 DATA-PAGAMENTO.
05 DIA-PAGAMENTO PIC 9(02).
05 FILLER PIC X(01).
05 MES-PAGAMENTO PIC 9(02).
05 FILLER PIC X(01).
05 ANO-PAGAMENTO PIC 9(02).
03 DATA-NASCIMENTO.
05 DIA-NASCIMENTO PIC 9(02).
05 FILLER PIC X(01).
05 MES-NASCIMENTO PIC 9(02).
05 FILLER PIC X(01).
05 ANO-NASCIMENTO PIC 9(02).
03 ESCOLARIDADE PIC X(15).
03 NATURALIDADE PIC X(15).
03 NACIONALIDADE PIC X(15).
03 BAIRRO PIC X(20).
03 ESTADO PIC A(02).
03 CPF PIC 9(11).
03 IDENTIDADE PIC X(11).
03 FILIAL PIC X(10).
03 DATA-ADMISSAO.
05 DIA-ADMISSAO PIC 9(02).
05 FILLER PIC X(01).
05 MES-ADMISSAO PIC 9(02).
05 FILLER PIC X(01).
05 ANO-ADMISSAO PIC 9(02).
03 SEXO PIC A(01).
03 HORAS-TRABALHO PIC 9(02).
WORKING-STORAGE SECTION.
77 CODIGO-FUN PIC ZZZZZ VALUE SPACES.
77 CODIGO-AUX PIC 9(05) VALUE ZEROS.
77 SALARIO-FUN PIC ZZZ.ZZZ.ZZ9,99 VALUE SPACES.
77 CPF-FUN PIC ZZZZZZZZZ.ZZ VALUE SPACES.
77 HORAS-TRABALHO-FUN PIC ZZ VALUE SPACES.
77 DATA-FUN PIC ZZ/ZZ/ZZ VALUE SPACES.
77 MENSAGEM PIC X(30) VALUE ZEROS.
77 FLAG-VALIDA PIC X VALUE SPACE.
77 TECLA PIC XX VALUE SPACES.
77 FILE-STATUS PIC XX VALUE SPACES.
77 PARA PIC X VALUE SPACES.
01 DATA-PAR.
03 DIA-PAR PIC 9(02) VALUE ZEROS.
03 FILLER PIC X(01) VALUE "/".
03 MES-PAR PIC 9(02) VALUE ZEROS.
03 FILLER PIC X(01) VALUE "/".
03 ANO-PAR PIC 9(02) VALUE ZEROS.
SCREEN SECTION.
01 TELA-CADASTRO.
02 BACKGROUND-COLOR 1 FOREGROUND-COLOR 7.
03 BLANK SCREEN.
03 LINE 1 COL 1 HIGHLIGHT VALUE "ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

FromSoft – Todos os direitos reservados – http://www.fromsoft.com.br Página 129


Curso de Cobol Básico

-"ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿".
03 LINE 2 COL 1 HIGHLIGHT VALUE "ÃÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
-"ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ´".
03 LINE 3 COL 1 HIGHLIGHT VALUE "ÃÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄCA
-"DASTRO".
03 COL 37 HIGHLIGHT VALUE "DE".
03 COL 40 HIGHLIGHT VALUE "CANDIDATOSÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
-"ÄÄÄÄÄ´".
03 LINE 4 COL 1 HIGHLIGHT VALUE "ÃÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
-"ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ´".
03 LINE 5 COL 1 HIGHLIGHT VALUE "ÃÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
-"ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ´".
03 LINE 6 COL 1 HIGHLIGHT VALUE "ÃÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
-"ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ´".
03 LINE 7 COL 1 HIGHLIGHT VALUE "ÃÄ".
03 COL 4 HIGHLIGHT VALUE "CODIGO.............:".
03 COL 79 HIGHLIGHT VALUE "Ä´".
03 LINE 8 COL 1 HIGHLIGHT VALUE "ÃÄ".
03 COL 4 HIGHLIGHT VALUE "NOME...............:".
03 COL 79 HIGHLIGHT VALUE "Ä´".
03 LINE 9 COL 1 HIGHLIGHT VALUE "ÃÄ".
03 COL 4 HIGHLIGHT VALUE "ENDERECO...........:".
03 COL 79 HIGHLIGHT VALUE "Ä´".
03 LINE 10 COL 1 HIGHLIGHT VALUE "ÃÄ".
03 COL 4 HIGHLIGHT VALUE "CIDADE.............:".
03 COL 79 HIGHLIGHT VALUE "Ä´".
03 LINE 11 COL 1 HIGHLIGHT VALUE "ÃÄ".
03 COL 4 HIGHLIGHT VALUE "ATIVIDADE..........:".
03 COL 46 HIGHLIGHT VALUE "BAIRRO.....:".
03 COL 79 HIGHLIGHT VALUE "Ä´".
03 LINE 12 COL 1 HIGHLIGHT VALUE "ÃÄ".
03 COL 4 HIGHLIGHT VALUE "SETOR..............:".
03 COL 46 HIGHLIGHT VALUE "ESTADO.....:".
03 COL 79 HIGHLIGHT VALUE "Ä´".
03 LINE 13 COL 1 HIGHLIGHT VALUE "ÃÄ".
03 COL 4 HIGHLIGHT VALUE "SALARIO............:".
03 COL 46 HIGHLIGHT VALUE "CPF........:".
03 COL 79 HIGHLIGHT VALUE "Ä´".
03 LINE 14 COL 1 HIGHLIGHT VALUE "ÃÄ".
03 COL 4 HIGHLIGHT VALUE "DATA".
03 COL 9 HIGHLIGHT VALUE "DE".
03 COL 12 HIGHLIGHT VALUE "PAGAMENTO..:".
03 COL 27 HIGHLIGHT VALUE "/".
03 COL 30 HIGHLIGHT VALUE "/".
03 COL 46 HIGHLIGHT VALUE "IDENTIDADE.:".
03 COL 79 HIGHLIGHT VALUE "Ä´".
03 LINE 15 COL 1 HIGHLIGHT VALUE "ÃÄ".
03 COL 4 HIGHLIGHT VALUE "DATA".
03 COL 9 HIGHLIGHT VALUE "DE".
03 COL 12 HIGHLIGHT VALUE "NASCIMENTO.:".
03 COL 27 HIGHLIGHT VALUE "/".
03 COL 30 HIGHLIGHT VALUE "/".
03 COL 46 HIGHLIGHT VALUE "FILIAL.....:".
03 COL 79 HIGHLIGHT VALUE "Ä´".
03 LINE 16 COL 1 HIGHLIGHT VALUE "ÃÄ".
03 COL 4 HIGHLIGHT VALUE "ESCOLARIDADE.......:".
03 COL 46 HIGHLIGHT VALUE "ADMISSAO...:".
03 COL 61 HIGHLIGHT VALUE "/".
03 COL 64 HIGHLIGHT VALUE "/".
03 COL 79 HIGHLIGHT VALUE "Ä´".
03 LINE 17 COL 1 HIGHLIGHT VALUE "ÃÄ".
03 COL 4 HIGHLIGHT VALUE "NATURALIDADE.......:".
03 COL 46 HIGHLIGHT VALUE "SEXO.......:".
03 COL 79 HIGHLIGHT VALUE "Ä´".
03 LINE 18 COL 1 HIGHLIGHT VALUE "ÃÄ".
03 COL 4 HIGHLIGHT VALUE "NACIONALIDADE......:".
03 COL 46 HIGHLIGHT VALUE "HORAS/DIA..:".
03 COL 79 HIGHLIGHT VALUE "Ä´".
03 LINE 19 COL 1 HIGHLIGHT VALUE "ÃÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
-"ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ´".
03 LINE 20 COL 1 HIGHLIGHT VALUE "ÃÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
-"ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ´".
03 LINE 21 COL 1 HIGHLIGHT VALUE "ÃÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
-"ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ´".
03 LINE 22 COL 1 HIGHLIGHT VALUE "ÃÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

FromSoft – Todos os direitos reservados – http://www.fromsoft.com.br Página 130


Curso de Cobol Básico

-"ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ´".
03 LINE 23 COL 1 HIGHLIGHT VALUE "³INFORME".
03 COL 80 HIGHLIGHT VALUE "³".
03 LINE 24 COL 1 HIGHLIGHT VALUE "ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
-"ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ".
03 LINE 25 COL 1 BACKGROUND-COLOR 0 HIGHLIGHT VALUE "
-"
-" ".
PROCEDURE DIVISION.
INICIO.
DISPLAY TELA-CADASTRO.
PERFORM LIMPA-TELA.
PEGA-CODIGO.
PERFORM ABRE-ARQUIVO.
DISPLAY "CODIGO " AT 2310.
ACCEPT CODIGO-FUN AT 0725 WITH AUTO PROMPT
ACCEPT TECLA FROM ESCAPE KEY
IF TECLA EQUAL 01
GO TO FIM.
MOVE CODIGO-FUN TO CODIGO-AUX
IF CODIGO-AUX EQUAL ZEROS
DISPLAY "CODIGO INVALIDO" AT 2310
ACCEPT PARA AT 2579 WITH AUTO NO-ECHO
DISPLAY " " AT 2310
PERFORM FECHA-ARQUIVO
GO TO PEGA-CODIGO.
LE-ARQUIVO-LINE-SEQUENTIAL.
READ ARQFUN AT END GO TO RESPOSTA.
IF CODIGO-AUX EQUAL CODIGO
PERFORM MOSTRA-FUNCIONARIO THRU FIM-MOSTRA-FUNCIONARIO
ACCEPT PARA AT 2579 WITH AUTO NO-ECHO
PERFORM LIMPA-TELA
GO TO PEGA-CODIGO
ELSE
GO TO LE-ARQUIVO-LINE-SEQUENTIAL.
FIM-PEGA-CODIGO. EXIT.

MOSTRA-FUNCIONARIO.
DISPLAY NOME AT 0825
DISPLAY ENDERECO AT 0925
DISPLAY CIDADE AT 1025
DISPLAY ATIVIDADE AT 1125
DISPLAY SETOR AT 1225
MOVE SALARIO TO SALARIO-FUN
DISPLAY SALARIO-FUN AT 1325
MOVE DATA-PAGAMENTO TO DATA-FUN
DISPLAY DATA-PAGAMENTO AT 1425
MOVE DATA-NASCIMENTO TO DATA-FUN
DISPLAY DATA-NASCIMENTO AT 1525
DISPLAY ESCOLARIDADE AT 1625
DISPLAY NATURALIDADE AT 1725
DISPLAY NACIONALIDADE AT 1825
DISPLAY BAIRRO AT 1159
DISPLAY ESTADO AT 1259
MOVE CPF TO CPF-FUN
DISPLAY CPF-FUN AT 1359
DISPLAY IDENTIDADE AT 1459
DISPLAY FILIAL AT 1559
MOVE DATA-ADMISSAO TO DATA-FUN
DISPLAY DATA-ADMISSAO AT 1659
DISPLAY SEXO AT 1759
MOVE HORAS-TRABALHO TO HORAS-TRABALHO-FUN
DISPLAY HORAS-TRABALHO-FUN AT 1859
PERFORM FECHA-ARQUIVO.
FIM-MOSTRA-FUNCIONARIO. EXIT.

FIM.
DISPLAY " " WITH ERASE EOS BACKGROUND-COLOR 0
FOREGROUND-COLOR 7.
STOP RUN.

LIMPA-TELA.
INITIALIZE CODIGO NOME ENDERECO CIDADE ATIVIDADE SETOR
SALARIO DIA-PAGAMENTO MES-PAGAMENTO ANO-PAGAMENTO
DIA-NASCIMENTO MES-NASCIMENTO ANO-NASCIMENTO

FromSoft – Todos os direitos reservados – http://www.fromsoft.com.br Página 131


Curso de Cobol Básico

ESCOLARIDADE NATURALIDADE NACIONALIDADE BAIRRO


ESTADO CPF IDENTIDADE FILIAL DIA-ADMISSAO
MES-ADMISSAO ANO-ADMISSAO SEXO HORAS-TRABALHO
CODIGO-FUN CPF-FUN SALARIO-FUN HORAS-TRABALHO-FUN
DIA-PAR MES-PAR ANO-PAR
DISPLAY " " AT 0825
DISPLAY " " AT 0925
DISPLAY " " AT 1025
DISPLAY " " AT 1125
DISPLAY " " AT 1225
DISPLAY " " AT 1325
DISPLAY " / / " AT 1425
DISPLAY " / / " AT 1525
DISPLAY " " AT 1625
DISPLAY " " AT 1725
DISPLAY " " AT 1825
DISPLAY " " AT 1159
DISPLAY " " AT 1259
DISPLAY " " AT 1359
DISPLAY " " AT 1459
DISPLAY " " AT 1559
DISPLAY " / / " AT 1659
DISPLAY " " AT 1759
DISPLAY " " AT 1859.

RESPOSTA.
DISPLAY "CODIGO NAO CADASTRADO" AT 2310
ACCEPT PARA AT 2579 WITH AUTO NO-ECHO
DISPLAY " " AT 2310
PERFORM FECHA-ARQUIVO
PERFORM LIMPA-TELA
GO TO PEGA-CODIGO.

ABRE-ARQUIVO.
OPEN INPUT ARQFUN
IF FILE-STATUS EQUAL ZEROS
CONTINUE
ELSE
DISPLAY "ERRO DE ABERTURA NO ARQUIVO" AT 2310
ACCEPT PARA AT 2579 WITH AUTO NO-ECHO
GO TO FIM.

FECHA-ARQUIVO.
CLOSE ARQFUN
IF FILE-STATUS EQUAL ZEROS
NEXT SENTENCE
ELSE
DISPLAY "ERRO DE FECHAMENTO DO ARQUIVO" AT 2310
ACCEPT PARA AT 2579 WITH AUTO NO-ECHO
GO TO FIM.

Lição 11 – Exemplo 3 – Alteração de Usuários


IDENTIFICATION DIVISION.
PROGRAM-ID. L11EX03.
ENVIRONMENT DIVISION.
SPECIAL-NAMES.
DECIMAL-POINT IS COMMA.
FILE-CONTROL.
SELECT ARQFUN ASSIGN TO "ARQFUNLS.DAT"
ORGANIZATION IS LINE SEQUENTIAL
ACCESS MODE IS SEQUENTIAL
FILE STATUS IS FILE-STATUS.
DATA DIVISION.
FILE SECTION.
FD ARQFUN.
01 REG-ARQFUN.
03 CODIGO PIC 9(05).
03 NOME PIC X(30).
03 ENDERECO PIC X(30).
03 CIDADE PIC X(20).
03 ATIVIDADE PIC X(20).
03 SETOR PIC X(20).
03 SALARIO PIC 9(11).

FromSoft – Todos os direitos reservados – http://www.fromsoft.com.br Página 132


Curso de Cobol Básico

03 DATA-PAGAMENTO.
05 DIA-PAGAMENTO PIC 9(02).
05 FILLER PIC X(01).
05 MES-PAGAMENTO PIC 9(02).
05 FILLER PIC X(01).
05 ANO-PAGAMENTO PIC 9(02).
03 DATA-NASCIMENTO.
05 DIA-NASCIMENTO PIC 9(02).
05 FILLER PIC X(01).
05 MES-NASCIMENTO PIC 9(02).
05 FILLER PIC X(01).
05 ANO-NASCIMENTO PIC 9(02).
03 ESCOLARIDADE PIC X(15).
03 NATURALIDADE PIC X(15).
03 NACIONALIDADE PIC X(15).
03 BAIRRO PIC X(20).
03 ESTADO PIC A(02).
03 CPF PIC 9(11).
03 IDENTIDADE PIC X(11).
03 FILIAL PIC X(10).
03 DATA-ADMISSAO.
05 DIA-ADMISSAO PIC 9(02).
05 FILLER PIC X(01).
05 MES-ADMISSAO PIC 9(02).
05 FILLER PIC X(01).
05 ANO-ADMISSAO PIC 9(02).
03 SEXO PIC A(01).
03 HORAS-TRABALHO PIC 9(02).

WORKING-STORAGE SECTION.
77 CODIGO-FUN PIC ZZZZZ VALUE SPACES.
77 CODIGO-AUX PIC 9(05) VALUE ZEROS.
77 SALARIO-FUN PIC ZZZ.ZZZ.ZZ9,99 VALUE SPACES.
77 CPF-FUN PIC ZZZZZZZZZ.ZZ VALUE SPACES.
77 HORAS-TRABALHO-FUN PIC ZZ VALUE SPACES.
77 DATA-FUN PIC ZZ/ZZ/ZZ VALUE SPACES.
77 MENSAGEM PIC X(30) VALUE ZEROS.
77 FLAG-VALIDA PIC X VALUE SPACE.
77 TECLA PIC XX VALUE SPACES.
77 FILE-STATUS PIC XX VALUE SPACES.
77 PARA PIC X VALUE SPACES.
01 DATA-PAR.
03 DIA-PAR PIC 9(02) VALUE ZEROS.
03 FILLER PIC X(01) VALUE "/".
03 MES-PAR PIC 9(02) VALUE ZEROS.
03 FILLER PIC X(01) VALUE "/".
03 ANO-PAR PIC 9(02) VALUE ZEROS.
SCREEN SECTION.
01 TELA-CADASTRO.
02 BACKGROUND-COLOR 1 FOREGROUND-COLOR 7.
03 BLANK SCREEN.
03 LINE 1 COL 1 HIGHLIGHT VALUE "ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
-"ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿".
03 LINE 2 COL 1 HIGHLIGHT VALUE "ÃÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
-"ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ´".
03 LINE 3 COL 1 HIGHLIGHT VALUE "ÃÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄCA
-"DASTRO".
03 COL 37 HIGHLIGHT VALUE "DE".
03 COL 40 HIGHLIGHT VALUE "CANDIDATOSÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
-"ÄÄÄÄÄ´".
03 LINE 4 COL 1 HIGHLIGHT VALUE "ÃÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
-"ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ´".
03 LINE 5 COL 1 HIGHLIGHT VALUE "ÃÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
-"ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ´".
03 LINE 6 COL 1 HIGHLIGHT VALUE "ÃÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
-"ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ´".
03 LINE 7 COL 1 HIGHLIGHT VALUE "ÃÄ".
03 COL 4 HIGHLIGHT VALUE "CODIGO.............:".
03 COL 79 HIGHLIGHT VALUE "Ä´".
03 LINE 8 COL 1 HIGHLIGHT VALUE "ÃÄ".
03 COL 4 HIGHLIGHT VALUE "NOME...............:".
03 COL 79 HIGHLIGHT VALUE "Ä´".
03 LINE 9 COL 1 HIGHLIGHT VALUE "ÃÄ".
03 COL 4 HIGHLIGHT VALUE "ENDERECO...........:".
03 COL 79 HIGHLIGHT VALUE "Ä´".

FromSoft – Todos os direitos reservados – http://www.fromsoft.com.br Página 133


Curso de Cobol Básico

03 LINE 10 COL 1 HIGHLIGHT VALUE "ÃÄ".


03 COL 4 HIGHLIGHT VALUE "CIDADE.............:".
03 COL 79 HIGHLIGHT VALUE "Ä´".
03 LINE 11 COL 1 HIGHLIGHT VALUE "ÃÄ".
03 COL 4 HIGHLIGHT VALUE "ATIVIDADE..........:".
03 COL 46 HIGHLIGHT VALUE "BAIRRO.....:".
03 COL 79 HIGHLIGHT VALUE "Ä´".
03 LINE 12 COL 1 HIGHLIGHT VALUE "ÃÄ".
03 COL 4 HIGHLIGHT VALUE "SETOR..............:".
03 COL 46 HIGHLIGHT VALUE "ESTADO.....:".
03 COL 79 HIGHLIGHT VALUE "Ä´".
03 LINE 13 COL 1 HIGHLIGHT VALUE "ÃÄ".
03 COL 4 HIGHLIGHT VALUE "SALARIO............:".
03 COL 46 HIGHLIGHT VALUE "CPF........:".
03 COL 79 HIGHLIGHT VALUE "Ä´".
03 LINE 14 COL 1 HIGHLIGHT VALUE "ÃÄ".
03 COL 4 HIGHLIGHT VALUE "DATA".
03 COL 9 HIGHLIGHT VALUE "DE".
03 COL 12 HIGHLIGHT VALUE "PAGAMENTO..:".
03 COL 27 HIGHLIGHT VALUE "/".
03 COL 30 HIGHLIGHT VALUE "/".
03 COL 46 HIGHLIGHT VALUE "IDENTIDADE.:".
03 COL 79 HIGHLIGHT VALUE "Ä´".
03 LINE 15 COL 1 HIGHLIGHT VALUE "ÃÄ".
03 COL 4 HIGHLIGHT VALUE "DATA".
03 COL 9 HIGHLIGHT VALUE "DE".
03 COL 12 HIGHLIGHT VALUE "NASCIMENTO.:".
03 COL 27 HIGHLIGHT VALUE "/".
03 COL 30 HIGHLIGHT VALUE "/".
03 COL 46 HIGHLIGHT VALUE "FILIAL.....:".
03 COL 79 HIGHLIGHT VALUE "Ä´".
03 LINE 16 COL 1 HIGHLIGHT VALUE "ÃÄ".
03 COL 4 HIGHLIGHT VALUE "ESCOLARIDADE.......:".
03 COL 46 HIGHLIGHT VALUE "ADMISSAO...:".
03 COL 61 HIGHLIGHT VALUE "/".
03 COL 64 HIGHLIGHT VALUE "/".
03 COL 79 HIGHLIGHT VALUE "Ä´".
03 LINE 17 COL 1 HIGHLIGHT VALUE "ÃÄ".
03 COL 4 HIGHLIGHT VALUE "NATURALIDADE.......:".
03 COL 46 HIGHLIGHT VALUE "SEXO.......:".
03 COL 79 HIGHLIGHT VALUE "Ä´".
03 LINE 18 COL 1 HIGHLIGHT VALUE "ÃÄ".
03 COL 4 HIGHLIGHT VALUE "NACIONALIDADE......:".
03 COL 46 HIGHLIGHT VALUE "HORAS/DIA..:".
03 COL 79 HIGHLIGHT VALUE "Ä´".
03 LINE 19 COL 1 HIGHLIGHT VALUE "ÃÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
-"ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ´".
03 LINE 20 COL 1 HIGHLIGHT VALUE "ÃÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
-"ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ´".
03 LINE 21 COL 1 HIGHLIGHT VALUE "ÃÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
-"ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ´".
03 LINE 22 COL 1 HIGHLIGHT VALUE "ÃÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
-"ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ´".
03 LINE 23 COL 1 HIGHLIGHT VALUE "³INFORME".
03 COL 80 HIGHLIGHT VALUE "³".
03 LINE 24 COL 1 HIGHLIGHT VALUE "ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
-"ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ".
03 LINE 25 COL 1 BACKGROUND-COLOR 0 HIGHLIGHT VALUE "
-"
-" ".
PROCEDURE DIVISION.
INICIO.
DISPLAY TELA-CADASTRO.
PERFORM LIMPA-TELA.
PEGA-CODIGO.
PERFORM ABRE-ARQUIVO.
DISPLAY "CODIGO " AT 2310.
ACCEPT CODIGO-FUN AT 0725 WITH AUTO PROMPT
ACCEPT TECLA FROM ESCAPE KEY
IF TECLA EQUAL 01
GO TO FIM.
MOVE CODIGO-FUN TO CODIGO-AUX
IF CODIGO-AUX EQUAL ZEROS
DISPLAY "CODIGO INVALIDO" AT 2310
ACCEPT PARA AT 2579 WITH AUTO NO-ECHO

FromSoft – Todos os direitos reservados – http://www.fromsoft.com.br Página 134


Curso de Cobol Básico

DISPLAY " " AT 2310


PERFORM FECHA-ARQUIVO
GO TO PEGA-CODIGO.
LE-ARQUIVO-LINE-SEQUENTIAL.
READ ARQFUN AT END GO TO RESPOSTA.
IF CODIGO-AUX EQUAL CODIGO
PERFORM MOSTRA-FUNCIONARIO THRU FIM-MOSTRA-FUNCIONARIO
GO TO PEGA-NOME
ELSE
GO TO LE-ARQUIVO-LINE-SEQUENTIAL.
FIM-PEGA-CODIGO. EXIT.
PEGA-NOME.
DISPLAY "NOME " AT 2310
ACCEPT NOME AT 0825 WITH AUTO PROMPT.
ACCEPT TECLA FROM ESCAPE KEY
IF TECLA EQUAL 01
PERFORM FECHA-ARQUIVO
GO TO PEGA-CODIGO.
IF NOME EQUAL SPACES
DISPLAY "NOME INVALIDO" AT 2310
ACCEPT PARA AT 2579 WITH AUTO NO-ECHO
DISPLAY " " AT 2310
GO TO PEGA-NOME.
PEGA-ENDERECO.
DISPLAY "ENDERECO " AT 2310
ACCEPT ENDERECO AT 0925 WITH AUTO PROMPT.
ACCEPT TECLA FROM ESCAPE KEY
IF TECLA EQUAL 01
GO TO PEGA-NOME.
IF ENDERECO EQUAL SPACES
DISPLAY "ENDERECO INVALIDO" AT 2310
ACCEPT PARA AT 2579 WITH AUTO NO-ECHO
DISPLAY " " AT 2310
GO TO PEGA-ENDERECO.
PEGA-CIDADE.
DISPLAY "CIDADE " AT 2310
ACCEPT CIDADE AT 1025 WITH AUTO.
ACCEPT TECLA FROM ESCAPE KEY
IF TECLA EQUAL 01
GO TO PEGA-ENDERECO.
IF CIDADE EQUAL SPACES
DISPLAY "CIDADE INVALIDA" AT 2310
ACCEPT PARA AT 2579 WITH AUTO NO-ECHO
DISPLAY " " AT 2310
GO TO PEGA-CIDADE.
PEGA-ATIVIDADE.
DISPLAY "ATIVIDADE " AT 2310
ACCEPT ATIVIDADE AT 1125 WITH AUTO PROMPT.
ACCEPT TECLA FROM ESCAPE KEY
IF TECLA EQUAL 01
GO TO PEGA-CIDADE.
IF ATIVIDADE EQUAL SPACES
DISPLAY "ATIVIDADE INVALIDA" AT 2310
ACCEPT PARA AT 2579 WITH AUTO NO-ECHO
DISPLAY " " AT 2310
GO TO PEGA-ATIVIDADE.
PEGA-SETOR.
DISPLAY "SETOR " AT 2310
ACCEPT SETOR AT 1225 WITH AUTO PROMPT.
ACCEPT TECLA FROM ESCAPE KEY
IF TECLA EQUAL 01
GO TO PEGA-ATIVIDADE.
IF SETOR EQUAL SPACES
DISPLAY "SETOR INVALIDO" AT 2310
ACCEPT PARA AT 2579 WITH AUTO NO-ECHO
DISPLAY " " AT 2310
GO TO PEGA-SETOR.
PEGA-SALARIO.
DISPLAY "SALARIO " AT 2310
ACCEPT SALARIO-FUN AT 1325 WITH AUTO.
ACCEPT TECLA FROM ESCAPE KEY
IF TECLA EQUAL 01
GO TO PEGA-SETOR.
MOVE SALARIO-FUN TO SALARIO
IF SALARIO EQUAL ZEROS

FromSoft – Todos os direitos reservados – http://www.fromsoft.com.br Página 135


Curso de Cobol Básico

DISPLAY "SALARIO INVALIDO" AT 2310


ACCEPT PARA AT 2579 WITH AUTO NO-ECHO
DISPLAY " " AT 2310
GO TO PEGA-SALARIO.
PEGA-DATA-DE-PAGAMENTO.
DISPLAY "DATA DE PAGAMENTO " AT 2310
ACCEPT DATA-PAR AT 1425 WITH AUTO.
ACCEPT TECLA FROM ESCAPE KEY
IF TECLA EQUAL 01
GO TO PEGA-SALARIO.
PERFORM VALIDA-DATA
IF FLAG-VALIDA EQUAL "N"
DISPLAY "DATA DE PAGAMENTO INVALIDA" AT 2310
ACCEPT PARA AT 2579 WITH AUTO NO-ECHO
DISPLAY " " AT 2310
GO TO PEGA-DATA-DE-PAGAMENTO.
MOVE DATA-PAR TO DATA-PAGAMENTO.
PEGA-DATA-DE-NASCIMENTO.
DISPLAY "DATA DE NASCIMENTO " AT 2310
ACCEPT DATA-PAR AT 1525 WITH AUTO.
ACCEPT TECLA FROM ESCAPE KEY
IF TECLA EQUAL 01
GO TO PEGA-DATA-DE-PAGAMENTO.
PERFORM VALIDA-DATA
IF FLAG-VALIDA EQUAL "N"
DISPLAY "DATA DE NASCIMENTO INVALIDA" AT 2310
ACCEPT PARA AT 2579 WITH AUTO NO-ECHO
DISPLAY " " AT 2310
GO TO PEGA-DATA-DE-NASCIMENTO.
MOVE DATA-PAR TO DATA-NASCIMENTO.
PEGA-ESCOLARIDADE.
DISPLAY "ESCOLARIDADE " AT 2310
ACCEPT ESCOLARIDADE AT 1625 WITH AUTO.
ACCEPT TECLA FROM ESCAPE KEY
IF TECLA EQUAL 01
GO TO PEGA-DATA-DE-NASCIMENTO.
IF ESCOLARIDADE EQUAL SPACES
DISPLAY "ESCOLARIDADE INVALIDA" AT 2310
ACCEPT PARA AT 2579 WITH AUTO NO-ECHO
DISPLAY " " AT 2310
GO TO PEGA-ESCOLARIDADE.
PEGA-NATURALIDADE.
DISPLAY "NATURALIDADE " AT 2310
ACCEPT NATURALIDADE AT 1725 WITH AUTO.
ACCEPT TECLA FROM ESCAPE KEY
IF TECLA EQUAL 01
GO TO PEGA-ESCOLARIDADE.
IF NATURALIDADE EQUAL SPACES
DISPLAY "NATURALIDADE INVALIDA" AT 2310
ACCEPT PARA AT 2579 WITH AUTO NO-ECHO
DISPLAY " " AT 2310
GO TO PEGA-NATURALIDADE.
PEGA-NACIONALIDADE.
DISPLAY "NACIONALIDADE " AT 2310
ACCEPT NACIONALIDADE AT 1825 WITH AUTO.
ACCEPT TECLA FROM ESCAPE KEY
IF TECLA EQUAL 01
GO TO PEGA-NATURALIDADE.
IF NACIONALIDADE EQUAL SPACES
DISPLAY "NACIONALIDADE INVALIDA" AT 2310
ACCEPT PARA AT 2579 WITH AUTO NO-ECHO
DISPLAY " " AT 2310
GO TO PEGA-NACIONALIDADE.
PEGA-BAIRRO.
DISPLAY "BAIRRO " AT 2310
ACCEPT BAIRRO AT 1159 WITH AUTO.
ACCEPT TECLA FROM ESCAPE KEY
IF TECLA EQUAL 01
GO TO PEGA-NACIONALIDADE.
IF BAIRRO EQUAL SPACES
DISPLAY "BAIRRO INVALIDO" AT 2310
ACCEPT PARA AT 2579 WITH AUTO NO-ECHO
DISPLAY " " AT 2310
GO TO PEGA-BAIRRO.
PEGA-ESTADO.

FromSoft – Todos os direitos reservados – http://www.fromsoft.com.br Página 136


Curso de Cobol Básico

DISPLAY "ESTADO " AT 2310


ACCEPT ESTADO AT 1259 WITH AUTO.
ACCEPT TECLA FROM ESCAPE KEY
IF TECLA EQUAL 01
GO TO PEGA-BAIRRO.
IF ESTADO EQUAL SPACES
DISPLAY "ESTADO INVALIDO" AT 2310
ACCEPT PARA AT 2579 WITH AUTO NO-ECHO
DISPLAY " " AT 2310
GO TO PEGA-ESTADO.
PEGA-CPF.
DISPLAY "CPF " AT 2310
ACCEPT CPF-FUN AT 1359 WITH AUTO.
ACCEPT TECLA FROM ESCAPE KEY
IF TECLA EQUAL 01
GO TO PEGA-ESTADO.
MOVE CPF-FUN TO CPF
IF CPF EQUAL ZEROS
DISPLAY "CPF INVALIDO" AT 2310
ACCEPT PARA AT 2579 WITH AUTO NO-ECHO
DISPLAY " " AT 2310
GO TO PEGA-CPF.
PEGA-IDENTIDADE.
DISPLAY "IDENTIDADE " AT 2310
ACCEPT IDENTIDADE AT 1459 WITH AUTO.
ACCEPT TECLA FROM ESCAPE KEY
IF TECLA EQUAL 01
GO TO PEGA-CPF.
IF IDENTIDADE EQUAL SPACES
DISPLAY "IDENTIDADE INVALIDA" AT 2310
ACCEPT PARA AT 2579 WITH AUTO NO-ECHO
DISPLAY " " AT 2310
GO TO PEGA-IDENTIDADE.
PEGA-FILIAL.
DISPLAY "FILIAL " AT 2310
ACCEPT FILIAL AT 1559 WITH AUTO.
ACCEPT TECLA FROM ESCAPE KEY
IF TECLA EQUAL 01
GO TO PEGA-IDENTIDADE.
IF FILIAL EQUAL SPACES
DISPLAY "FILIAL INVALIDA" AT 2310
ACCEPT PARA AT 2579 WITH AUTO NO-ECHO
DISPLAY " " AT 2310
GO TO PEGA-FILIAL.
PEGA-DATA-DE-ADMISSAO.
DISPLAY "DATA DE ADMISSAO " AT 2310
ACCEPT DATA-PAR AT 1659 WITH AUTO.
ACCEPT TECLA FROM ESCAPE KEY
IF TECLA EQUAL 01
GO TO PEGA-FILIAL.
PERFORM VALIDA-DATA
IF FLAG-VALIDA EQUAL "N"
DISPLAY "DATA DE ADMISSAO INVALIDA" AT 2310
ACCEPT PARA AT 2579 WITH AUTO NO-ECHO
DISPLAY " " AT 2310
GO TO PEGA-DATA-DE-ADMISSAO.
MOVE DATA-PAR TO DATA-ADMISSAO.
PEGA-SEXO.
DISPLAY "SEXO " AT 2310
ACCEPT SEXO AT 1759 WITH AUTO.
ACCEPT TECLA FROM ESCAPE KEY
IF TECLA EQUAL 01
GO TO PEGA-DATA-DE-ADMISSAO.
IF SEXO NOT EQUAL "S" AND SEXO NOT EQUAL "M"
DISPLAY "SEXO INVALIDO" AT 2310
ACCEPT PARA AT 2579 WITH AUTO NO-ECHO
DISPLAY " " AT 2310
GO TO PEGA-SEXO.
PEGA-HORAS.
DISPLAY "HORAS DE TRABALHO " AT 2310
ACCEPT HORAS-TRABALHO-FUN AT 1859 WITH AUTO.
ACCEPT TECLA FROM ESCAPE KEY
IF TECLA EQUAL 01
GO TO PEGA-SEXO.
MOVE HORAS-TRABALHO-FUN TO HORAS-TRABALHO

FromSoft – Todos os direitos reservados – http://www.fromsoft.com.br Página 137


Curso de Cobol Básico

IF HORAS-TRABALHO EQUAL ZEROS


DISPLAY "HORAS DE TRABALHO INVALIDA" AT 2310
ACCEPT PARA AT 2579 WITH AUTO NO-ECHO
DISPLAY " " AT 2310
GO TO PEGA-HORAS.
GRAVA-REGISTRO.
REWRITE REG-ARQFUN
IF FILE-STATUS EQUAL ZEROS
PERFORM LIMPA-TELA
PERFORM FECHA-ARQUIVO
GO TO INICIO
ELSE
DISPLAY "ERRO DE GRAVACAO NO ARQUIVO" AT 2310
ACCEPT PARA AT 2579 WITH AUTO NO-ECHO
GO TO FIM
END-IF.
FIM.
DISPLAY " " WITH ERASE EOS BACKGROUND-COLOR 0
FOREGROUND-COLOR 7.
STOP RUN.

LIMPA-TELA.
INITIALIZE CODIGO NOME ENDERECO CIDADE ATIVIDADE SETOR
SALARIO DIA-PAGAMENTO MES-PAGAMENTO ANO-PAGAMENTO
DIA-NASCIMENTO MES-NASCIMENTO ANO-NASCIMENTO
ESCOLARIDADE NATURALIDADE NACIONALIDADE BAIRRO
ESTADO CPF IDENTIDADE FILIAL DIA-ADMISSAO
MES-ADMISSAO ANO-ADMISSAO SEXO HORAS-TRABALHO
CODIGO-FUN CPF-FUN SALARIO-FUN HORAS-TRABALHO-FUN
DIA-PAR MES-PAR ANO-PAR.
RESPOSTA.
DISPLAY "CODIGO NAO CADASTRADO" AT 2310
ACCEPT PARA AT 2579 WITH AUTO NO-ECHO
DISPLAY " " AT 2310
PERFORM FECHA-ARQUIVO
PERFORM LIMPA-TELA
GO TO PEGA-CODIGO.

ABRE-ARQUIVO.
OPEN I-O ARQFUN
IF FILE-STATUS NOT EQUAL ZEROS
IF FILE-STATUS EQUAL "05" OR "35"
OPEN OUTPUT ARQFUN
CLOSE ARQFUN
GO TO ABRE-ARQUIVO
ELSE
DISPLAY "ERRO DE ABERTURA NO ARQUIVO" AT 2310
ACCEPT PARA AT 2579 WITH AUTO NO-ECHO
GO TO FIM
END-IF
ELSE
CONTINUE
END-IF.

FECHA-ARQUIVO.
CLOSE ARQFUN
IF FILE-STATUS EQUAL ZEROS
NEXT SENTENCE
ELSE
DISPLAY "ERRO DE FECHAMENTO DO ARQUIVO" AT 2310
ACCEPT PARA AT 2579 WITH AUTO NO-ECHO
GO TO FIM.

MOSTRA-FUNCIONARIO.
DISPLAY NOME AT 0825
DISPLAY ENDERECO AT 0925
DISPLAY CIDADE AT 1025
DISPLAY ATIVIDADE AT 1125
DISPLAY SETOR AT 1225
MOVE SALARIO TO SALARIO-FUN
DISPLAY SALARIO-FUN AT 1325
MOVE DATA-PAGAMENTO TO DATA-FUN
DISPLAY DATA-PAGAMENTO AT 1425
MOVE DATA-NASCIMENTO TO DATA-FUN
DISPLAY DATA-NASCIMENTO AT 1525

FromSoft – Todos os direitos reservados – http://www.fromsoft.com.br Página 138


Curso de Cobol Básico

DISPLAY ESCOLARIDADE AT 1625


DISPLAY NATURALIDADE AT 1725
DISPLAY NACIONALIDADE AT 1825
DISPLAY BAIRRO AT 1159
DISPLAY ESTADO AT 1259
MOVE CPF TO CPF-FUN
DISPLAY CPF-FUN AT 1359
DISPLAY IDENTIDADE AT 1459
DISPLAY FILIAL AT 1559
MOVE DATA-ADMISSAO TO DATA-FUN
DISPLAY DATA-ADMISSAO AT 1659
DISPLAY SEXO AT 1759
MOVE HORAS-TRABALHO TO HORAS-TRABALHO-FUN
DISPLAY HORAS-TRABALHO-FUN AT 1859.
FIM-MOSTRA-FUNCIONARIO. EXIT.

VALIDA-DATA.
IF DIA-PAR GREATER ZEROS AND DIA-PAR LESS 32
MOVE "S" TO FLAG-VALIDA
ELSE
MOVE "N" TO FLAG-VALIDA
END-IF
IF MES-PAR GREATER ZEROS AND MES-PAR LESS 13
IF MES-PAR EQUAL 01 OR MES-PAR EQUAL 03
OR MES-PAR EQUAL 05 OR MES-PAR EQUAL 07
OR MES-PAR EQUAL 08 OR MES-PAR EQUAL 10
OR MES-PAR EQUAL 12 AND DIA-PAR LESS 32
MOVE "S" TO FLAG-VALIDA
ELSE
IF MES-PAR EQUAL 02 AND DIA-PAR LESS 30
MOVE "S" TO FLAG-VALIDA
ELSE
IF MES-PAR EQUAL 04 OR MES-PAR EQUAL 06
OR MES-PAR EQUAL 09 OR MES-PAR EQUAL 11
MOVE "S" TO FLAG-VALIDA
ELSE
MOVE "N" TO FLAG-VALIDA
END-IF
ELSE
MOVE "N" TO FLAG-VALIDA
END-IF.

Lição 11 - Exercícios

Arquivos Line Sequential


earqlseq.cpy – Estrutura do Arquivo Line Sequential.cpy
larqlseq.cpy – Layout do Arquivo Line Sequential.cpy

Nome de arquivo: Arqfunls.


Nome de Arquivo Físico: arqfunls.txt
Organização: Texto
Modo de Acesso: Sequencial
Variavel de File Status: File-Status.
Nome de registro de FD: Reg-Arqfunls

1. Copiar o PROG24.CBL criando um programa de nome PROG27.CBL alterando a estrutura e o layout


do programa para trabalhar com arquivos do tipo LINE SEQUENTIAL. Use os Layouts criados na lição
10.
- O nome externo do arquivo deverá ser “ARQFUNLS.TXT”

Após cadastrar alguns funcionários, fazer:


- editar o arquivo ARQFUNLS.TXT (com o Edit do DOS ou outro editor de texto qualquer) e verificar
como os dados foram gravados nele.
- sair do programa, entrar novamente e cadastrar novos funcionários
- editar novamente o arquivo e verificar se acrescentou esses novos funcionários após os anteriores.

FromSoft – Todos os direitos reservados – http://www.fromsoft.com.br Página 139


Curso de Cobol Básico

2. Copiar o PROG25.CBL criando um programa de nome PROG28.CBL alterando a estrutura e o layout


do programa para trabalhar com arquivos do tipo LINE SEQUENTIAL

3. Copiar o PROG26.CBL criando um programa de nome PROG29.CBL alterando a estrutura e o layout


do programa para trabalhar com arquivos do tipo LINE SEQUENTIAL.

FromSoft – Todos os direitos reservados – http://www.fromsoft.com.br Página 140


Curso de Cobol Básico

Lição 12

Lição 12 - Conceitos

12.1 - Trabalhando com arquivos: Arquivo RELATIVE

Conceito: Para declaração de um arquivo do tipo RELATIVE, usamos no SELECT a cláusula


ORGANIZATION IS RELATIVE e a cláusula RELATIVE KEY para definir qual o campo conterá o valor
da chave relativa do registro.

12.1.1 - Modo de acesso

Conceito: Quando queremos ler dados de um arquivo, devemos definir na SELECT a forma como o
arquivo será acessado pois além de otimizarmos a performance da aplicação, podemos restringir as
operações no arquivo.
Quando vamos emitir uma listagem do Cadastro de Funcionários, por exemplo, usamos a cláusula
ACCESS MODE IS SEQUENTIAL para indicar que o arquivo será lido de forma seqüencial, ou seja, na
ordem de seqüência das chaves. Podemos definir também ACCESS MODE IS RANDOM, quando
vamos buscar registros indicando a chave de acesso para o programa via RELATIVE KEY, ou ainda
ACCESS MODE IS DYNAMIC, que permite o acesso das duas formas acima, via READ NEXT ou via
READ com RELATIVE KEY.

12.1.2 - Controle de acesso

Conceito: Devemos também definir como ficará o acesso ao arquivo por outros usuários, utilizando a
cláusula LOCK MODE IS AUTOMATIC para indicar que o travamento deverá ser feito automaticamente
de acordo com o “default” definido para cada comando, ou LOCK MODE IS MANUAL quando se quer
indicar que o travamento deve ficar a cargo do programador. Pode-se usar também o LOCK MODE IS
EXCLUSIVE, que trava exclusivamente o registro para quem abriu o arquivo.

12.1.3 - Chave para acesso

Conceito: A Partir do Arquivo Relativo, implanta-se um novo conceito, o conceito de uma variável
mestre, denominada chave, que controla todo o registro. Com isso, ganha-se em performance e
produtividade. Geralmente essa chave é a variável Codigo, que é tanto usada em todos os sistemas
Comerciais.

12.2 - Comandos usados em um arquivo RELATIVE

12.2.1 - O comando OPEN com cláusula INPUT

Conceito: Utilizamos o comando OPEN INPUT para abrir arquivos já existentes apenas para leitura.

12.2.2 - O comando OPEN com cláusula OUTPUT

Conceito: Utilizamos o comando OPEN OUTPUT para criar arquivos.

12.2.3 - O comando OPEN com cláusula I-O

Conceito: Quando queremos fazer leitura e gravação em um arquivo sequencial, indexado ou relativo,
primeiro é necessário abri-lo com o comando OPEN e cláusula I-O (Input - Output).

FromSoft – Todos os direitos reservados – http://www.fromsoft.com.br Página 141


Curso de Cobol Básico

12.2.4 - O comando READ com cláusula NEXT

Conceito: Como vimos anteriormente na cláusula ACCESS MODE IS SEQUENTIAL, quando queremos
ler um arquivo de forma seqüencial, na ordem de seqüência das chaves, usamos o comando READ.
Para o arquivo relativo é da mesma forma, entretanto haverá uma modificação, pois poderemos ler o
próximo registro usando o atributo NEXT na expressão do comando READ, contudo deve-se indicar a
chave relativa do mesmo, se não for indicada a chave relativa, ele vai buscar o primeiro.
Este atributo (NEXT) os arquivos Sequencial e Texto não possuem, ele é usado apenas em arquivos
Relativos e arquivos Indexados. Para usar o evento NEXT, deve-se usar o ACCESS MODE IS
DYNAMIC, pois somente o ACCESS MODE IS DYNAMIC faz a leitura tanto sequencial(que é o caso do
atributo NEXT) como randômica.
Nesse comando, quando todos os registros já tiverem sido lidos, acontece o evento AT END, sendo
executados os comandos que estiverem indicados após essa cláusula. O evento AT END pode ser
usado tanto no ACCESS MODE IS DYNAMIC tanto como no ACCESS MODE IS RANDOM.

12.2.5 - Cláusula INVALID KEY

Conceito: Esta cláusula, quando utilizada no comando READ, só será aceita pelo compilador se estiver
declarado ACCESS MODE IS RANDOM ou DYNAMIC, tem como objetivo indicar que a chave
especificada não existe no arquivo ou o arquivo está com algum problema.
Quando indicada num comando WRITE, os comandos a ela relacionados serão executados quando
ocorrer uma falha na gravação do registro (por duplicidade de chave, falta de espaço no disco, entre
outros).
No caso de indicação em um comando REWRITE, as causas são semelhantes ao WRITE, só que
referentes a re-gravação e ao invés de duplicidade de chave, pode dar erro de inexistência da chave. Já
no DELETE a causa seria a inexistência da chave.

12.2.6 - Chaves Secundárias

Conceito: Ainda na SELECT podemos declarar chaves secundárias para o arquivo, com a cláusula
ALTERNATE RELATIVE KEY, sendo que estas podem ter duplicidade no arquivo, desde que seja
declarada a cláusula WITH DUPLICATES.

Ex.: Voltando a fazer analogia com o nosso Arquivo de Funcionários físico mais primitivo (agora nem
tanto) - gaveta do responsável com relação de funcionários sobre a mesa, cada funcionário ganharia um
número relativo quando seu grupo de documentos fosse colocado no arquivo e anotado na lista.
Quando o chefe pedisse ao “arquivista” para atualizar o Estado Civil do funcionário, este já sabendo que
teria que retirar o conjunto de documentos do mesmo colocando uma régua para marcar sua posição
(LOCK MODE IS EXCLUSIVE), abriria a gaveta pensando em atualizar (OPEN I-O) e procuraria o
conjunto olhando um a um (ACCESS MODE IS SEQUENTIAL e READ NEXT com cláusula AT END) ou
procuraria na lista a ordem do funcionário (RELATIVE KEY) e já pegaria diretamente seus dados
(ACCESS MODE IS RANDOM ou DYNAMIC e READ com cláusula INVALID KEY). Com os documentos
em mãos, atualizaria a informação de Estado Civil e guardaria os documentos novamente na gaveta no
lugar onde deixou a régua (REWRITE), liberando-a e os documentos para que outra pessoa pudesse
pegá-los.

12.3 - Demonstração de um arquivo RELATIVE

Se você editar um arquivo sequencial, provavelmente irá encontrar a seguinte estrutura: Este
arquivo em exemplo tem 3 registros.

00001FROMSOFT 01 01 89M3§ GRAU BELO HORIZONTE BRASILEIRA


001 001 001 01N/A AV DOS ANDRADAS 02287STA EFIGENIA BELO HORIZONTE
MG(31) 3241-6882 SALA 1205
00002APS 01 01 79M3§ GRAU BELO HORIZONTE BRASILEIRA
001 001 001 01N/A AV DOS ANDRADAS 02287STA EFIGENIA BELO HORIZONTE
MG(31) 3241-6882 SALA 1204
00003MEUSAPLICATIVOS.COM 01 01 01M2§ GRAU BELO HORIZONTE BRASILEIRA
001 001 001 01N/A AV DOS ANDRADAS 02287STA EFIGENIA BELO HORIZONTE
MG(31) 3241-6882 SALA 1204 X

FromSoft – Todos os direitos reservados – http://www.fromsoft.com.br Página 142


Curso de Cobol Básico

Veja que este arquivo é praticamente igual ao arquivo Line Sequential, entretanto tem algumas
pequenas diferenças:
1. A chave Relativa não é visualizada no arquivo físico.
2. Ele não faz a supressão de espaços no final do arquivo. Bom, quando você cria um arquivo Line
Sequential, ele grava todos os dados e joga o Caracter Carriage-Return no final dos dados. Entretanto,
se você tiver um filler, de por exemplo 100 caracteres(ou seja um preenchimento vazio), ele
simplesmente ignora este espaço, suprimindo estes espaços e jogando o carriage-return antes deles. O
Arquivo Relative não faz isto, ele insere o Carriage-Return somente depois dos espaços, que no caso do
nosso exemplo, depois dos 100 espaços vazios.

Agora os registros existentes no arquivo serão separados e você vai entender melhor: veja.
Veja também que eles são bem mais fáceis de visualizar:

Registro 1.

00001FROMSOFT 01 01 89M3§ GRAU BELO HORIZONTE BRASILEIRA


001 001 001 01N/A AV DOS ANDRADAS 02287STA EFIGENIA BELO HORIZONTE
MG(31) 3241-6882 SALA 1205

Registro 2.

00002APS 01 01 79M3§ GRAU BELO HORIZONTE BRASILEIRA


001 001 001 01N/A AV DOS ANDRADAS 02287STA EFIGENIA BELO HORIZONTE
MG(31) 3241-6882 SALA 1204

Registro 3.

00003MEUSAPLICATIVOS.COM 01 01 01M2§ GRAU BELO HORIZONTE BRASILEIRA


001 001 001 01N/A AV DOS ANDRADAS 02287STA EFIGENIA BELO HORIZONTE
MG(31) 3241-6882 SALA 1204 X

Veja que eles são iguais aos do arquivo line sequential. Mas o único detalhe visível e selecionando-os.
Simplesmente pegue os registros gerados no arquivo pelo seu programa e selecione-os da forma que
for aparecer, mas selecione todas a linha inteira. Veja que no dos arquivos line sequential, não terá
espaços depois da ultima variável do arquivo, mas no dos arquivos relative terá um espaço. Só
selecionando-os você vai ver isto. Então no próprio edit, ou então no Bloco de notas, faça este teste.

12.4 - Como ler um arquivo RELATIVE

O Modo de leitura relativa, consiste na Chave relativa. A chave relativa é uma chave que fica
declarada na working-storage section e que serve para fazer a leitura dos registros. Então para você ler
um registro relativo, você deve mover o valor do código que você quiser para a chave relativa, depois
então ler o arquivo.
O arquivo relativo, já tem o conceito de Chave, tanto que na inclusão, você pode barrar o
cadastro do usuário se por um acaso já existe um código igual no arquivo ao digitado. Veja que aqui
você não precisa ficar fechando e abrindo o arquivo para fazer a leitura do mesmo. Ex:

PEGA-CODIGO.
ACCEPT CODIGO-MASCARA AT 1015
MOVE CODIGO-MASCARA TO CHAVE-RELATIVA
READ ARQFUN INVALID KEY
CONTINUE
NOT INVALID KEY
DISPLAY "CODIGO JA CADASTRADO" AT 2310
ACCEPT PARA AT 2579 WITH AUTO NO-ECHO
DISPLAY " " AT 2310
PERFORM LIMPA-TELA
GO TO PEGA-CODIGO
END-READ.

P.S - Este exemplo pode ser bem usado na criação de um cadastro, veja que ele lê com o atributo de
invalid key (testando se a chave é invalida) se a chave for invalida, ou seja, a chave/código não existe,

FromSoft – Todos os direitos reservados – http://www.fromsoft.com.br Página 143


Curso de Cobol Básico

ele permite passar, caso seja not invalid key (chave não inválida), ou seja, a chave/codigo existe, ele
não permite passar mostrando para o usuário uma mensagem de "código já cadastrado" e voltando para
o procedure-name pega-codigo. Podemos usá-lo deste modo.
PEGA-CODIGO.
ACCEPT CODIGO-MASCARA AT 1015
MOVE CODIGO-MASCARA TO CHAVE-RELATIVA
READ ARQFUN INVALID KEY
DISPLAY "CODIGO JA CADASTRADO" AT 2310
ACCEPT PARA AT 2579 WITH AUTO NO-ECHO
DISPLAY " " AT 2310
PERFORM LIMPA-TELA
GO TO PEGA-CODIGO.
NOT INVALID KEY
DISPLAY NOME AT 1115
DISPLAY ENDERECO AT 1215
DISPLAY TELEFONE AT 1315
DISPLAY CEP AT 1415
DISPLAY CGC-CNPJ AT 1515
END-READ.

Veja que agora é ao contrário do exemplo anterior agora se for invalid key, ou seja
chave/código inválido ele mostra "Código inválido" e volta para o procedure-name pega-codigo. Se não
for chave inválida, ele mostra os dados daquele registro. Este tipo de rotina é muito usado em consultas
em geral.

12.5 - Vantagens do arquivo relativo em relação aos arquivos Sequencial e Texto.

- Chave de Acesso.
- Modo de Acesso mais rápido, pois você não tem que ler todo o cadastro para pegar o penúltimo
registro do arquivo

Lição 12 – Exemplo 1 – Cadastro de Usuários

IDENTIFICATION DIVISION.
PROGRAM-ID. L12EX01.
ENVIRONMENT DIVISION.
SPECIAL-NAMES.
DECIMAL-POINT IS COMMA.
FILE-CONTROL.
SELECT ARQFUN ASSIGN TO "ARQFUNR.DAT"
ORGANIZATION IS RELATIVE
ACCESS MODE IS DYNAMIC
RELATIVE KEY IS CODIGO-ED
FILE STATUS IS FILE-STATUS.
DATA DIVISION.
FILE SECTION.
FD ARQFUN.
01 REG-ARQFUN.
03 CODIGO PIC 9(05).
03 NOME PIC X(30).
03 ENDERECO PIC X(30).
03 CIDADE PIC X(20).
03 ATIVIDADE PIC X(20).
03 SETOR PIC X(20).
03 SALARIO PIC 9(11).
03 DATA-PAGAMENTO.
05 DIA-PAGAMENTO PIC 9(02).
05 FILLER PIC X(01).
05 MES-PAGAMENTO PIC 9(02).
05 FILLER PIC X(01).
05 ANO-PAGAMENTO PIC 9(02).
03 DATA-NASCIMENTO.
05 DIA-NASCIMENTO PIC 9(02).
05 FILLER PIC X(01).
05 MES-NASCIMENTO PIC 9(02).
05 FILLER PIC X(01).
05 ANO-NASCIMENTO PIC 9(02).
03 ESCOLARIDADE PIC X(15).
03 NATURALIDADE PIC X(15).

FromSoft – Todos os direitos reservados – http://www.fromsoft.com.br Página 144


Curso de Cobol Básico

03 NACIONALIDADE PIC X(15).


03 BAIRRO PIC X(20).
03 ESTADO PIC A(02).
03 CPF PIC 9(11).
03 IDENTIDADE PIC X(11).
03 FILIAL PIC X(10).
03 DATA-ADMISSAO.
05 DIA-ADMISSAO PIC 9(02).
05 FILLER PIC X(01).
05 MES-ADMISSAO PIC 9(02).
05 FILLER PIC X(01).
05 ANO-ADMISSAO PIC 9(02).
03 SEXO PIC A(01).
03 HORAS-TRABALHO PIC 9(02).

WORKING-STORAGE SECTION.
77 CODIGO-FUN PIC ZZZZZ VALUE SPACES.
77 CODIGO-ED PIC 9(05) VALUE ZEROS.
77 SALARIO-FUN PIC ZZZ.ZZZ.ZZ9,99 VALUE SPACES.
77 CPF-FUN PIC ZZZZZZZZZ.ZZ VALUE SPACES.
77 HORAS-TRABALHO-FUN PIC ZZ VALUE SPACES.
77 MENSAGEM PIC X(30) VALUE ZEROS.
77 FLAG-VALIDA PIC X VALUE SPACE.
77 TECLA PIC XX VALUE SPACES.
77 FILE-STATUS PIC XX VALUE SPACES.
77 PARA PIC X VALUE SPACES.
01 DATA-PAR.
03 DIA-PAR PIC 9(02) VALUE ZEROS.
03 FILLER PIC X(01) VALUE "/".
03 MES-PAR PIC 9(02) VALUE ZEROS.
03 FILLER PIC X(01) VALUE "/".
03 ANO-PAR PIC 9(02) VALUE ZEROS.
SCREEN SECTION.
01 TELA-CADASTRO.
02 BACKGROUND-COLOR 1 FOREGROUND-COLOR 7.
03 BLANK SCREEN.
03 LINE 1 COL 1 HIGHLIGHT VALUE "ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
-"ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿".
03 LINE 2 COL 1 HIGHLIGHT VALUE "ÃÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
-"ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ´".
03 LINE 3 COL 1 HIGHLIGHT VALUE "ÃÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄCA
-"DASTRO".
03 COL 37 HIGHLIGHT VALUE "DE".
03 COL 40 HIGHLIGHT VALUE "CANDIDATOSÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
-"ÄÄÄÄÄ´".
03 LINE 4 COL 1 HIGHLIGHT VALUE "ÃÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
-"ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ´".
03 LINE 5 COL 1 HIGHLIGHT VALUE "ÃÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
-"ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ´".
03 LINE 6 COL 1 HIGHLIGHT VALUE "ÃÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
-"ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ´".
03 LINE 7 COL 1 HIGHLIGHT VALUE "ÃÄ".
03 COL 4 HIGHLIGHT VALUE "CODIGO.............:".
03 COL 79 HIGHLIGHT VALUE "Ä´".
03 LINE 8 COL 1 HIGHLIGHT VALUE "ÃÄ".
03 COL 4 HIGHLIGHT VALUE "NOME...............:".
03 COL 79 HIGHLIGHT VALUE "Ä´".
03 LINE 9 COL 1 HIGHLIGHT VALUE "ÃÄ".
03 COL 4 HIGHLIGHT VALUE "ENDERECO...........:".
03 COL 79 HIGHLIGHT VALUE "Ä´".
03 LINE 10 COL 1 HIGHLIGHT VALUE "ÃÄ".
03 COL 4 HIGHLIGHT VALUE "CIDADE.............:".
03 COL 79 HIGHLIGHT VALUE "Ä´".
03 LINE 11 COL 1 HIGHLIGHT VALUE "ÃÄ".
03 COL 4 HIGHLIGHT VALUE "ATIVIDADE..........:".
03 COL 46 HIGHLIGHT VALUE "BAIRRO.....:".
03 COL 79 HIGHLIGHT VALUE "Ä´".
03 LINE 12 COL 1 HIGHLIGHT VALUE "ÃÄ".
03 COL 4 HIGHLIGHT VALUE "SETOR..............:".
03 COL 46 HIGHLIGHT VALUE "ESTADO.....:".
03 COL 79 HIGHLIGHT VALUE "Ä´".
03 LINE 13 COL 1 HIGHLIGHT VALUE "ÃÄ".
03 COL 4 HIGHLIGHT VALUE "SALARIO............:".
03 COL 46 HIGHLIGHT VALUE "CPF........:".
03 COL 79 HIGHLIGHT VALUE "Ä´".

FromSoft – Todos os direitos reservados – http://www.fromsoft.com.br Página 145


Curso de Cobol Básico

03 LINE 14 COL 1 HIGHLIGHT VALUE "ÃÄ".


03 COL 4 HIGHLIGHT VALUE "DATA".
03 COL 9 HIGHLIGHT VALUE "DE".
03 COL 12 HIGHLIGHT VALUE "PAGAMENTO..:".
03 COL 27 HIGHLIGHT VALUE "/".
03 COL 30 HIGHLIGHT VALUE "/".
03 COL 46 HIGHLIGHT VALUE "IDENTIDADE.:".
03 COL 79 HIGHLIGHT VALUE "Ä´".
03 LINE 15 COL 1 HIGHLIGHT VALUE "ÃÄ".
03 COL 4 HIGHLIGHT VALUE "DATA".
03 COL 9 HIGHLIGHT VALUE "DE".
03 COL 12 HIGHLIGHT VALUE "NASCIMENTO.:".
03 COL 27 HIGHLIGHT VALUE "/".
03 COL 30 HIGHLIGHT VALUE "/".
03 COL 46 HIGHLIGHT VALUE "FILIAL.....:".
03 COL 79 HIGHLIGHT VALUE "Ä´".
03 LINE 16 COL 1 HIGHLIGHT VALUE "ÃÄ".
03 COL 4 HIGHLIGHT VALUE "ESCOLARIDADE.......:".
03 COL 46 HIGHLIGHT VALUE "ADMISSAO...:".
03 COL 61 HIGHLIGHT VALUE "/".
03 COL 64 HIGHLIGHT VALUE "/".
03 COL 79 HIGHLIGHT VALUE "Ä´".
03 LINE 17 COL 1 HIGHLIGHT VALUE "ÃÄ".
03 COL 4 HIGHLIGHT VALUE "NATURALIDADE.......:".
03 COL 46 HIGHLIGHT VALUE "SEXO.......:".
03 COL 79 HIGHLIGHT VALUE "Ä´".
03 LINE 18 COL 1 HIGHLIGHT VALUE "ÃÄ".
03 COL 4 HIGHLIGHT VALUE "NACIONALIDADE......:".
03 COL 46 HIGHLIGHT VALUE "HORAS/DIA..:".
03 COL 79 HIGHLIGHT VALUE "Ä´".
03 LINE 19 COL 1 HIGHLIGHT VALUE "ÃÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
-"ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ´".
03 LINE 20 COL 1 HIGHLIGHT VALUE "ÃÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
-"ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ´".
03 LINE 21 COL 1 HIGHLIGHT VALUE "ÃÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
-"ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ´".
03 LINE 22 COL 1 HIGHLIGHT VALUE "ÃÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
-"ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ´".
03 LINE 23 COL 1 HIGHLIGHT VALUE "³INFORME".
03 COL 80 HIGHLIGHT VALUE "³".
03 LINE 24 COL 1 HIGHLIGHT VALUE "ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
-"ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ".
03 LINE 25 COL 1 BACKGROUND-COLOR 0 HIGHLIGHT VALUE "
-"
-" ".
PROCEDURE DIVISION.
ABRE-ARQUIVO.
OPEN I-O ARQFUN
IF FILE-STATUS NOT EQUAL ZEROS
IF FILE-STATUS EQUAL "05" OR "35"
OPEN OUTPUT ARQFUN
CLOSE ARQFUN
GO TO ABRE-ARQUIVO
ELSE
DISPLAY "ERRO DE ABERTURA NO ARQUIVO" AT 2310
ACCEPT PARA AT 2579 WITH AUTO NO-ECHO
GO TO FIM
END-IF
ELSE
CONTINUE
END-IF.

INICIO.
DISPLAY TELA-CADASTRO.
PERFORM LIMPA-TELA.
PEGA-CODIGO.
DISPLAY "CODIGO " AT 2310.
ACCEPT CODIGO-FUN AT 0725 WITH AUTO PROMPT
ACCEPT TECLA FROM ESCAPE KEY
IF TECLA EQUAL 01
GO TO FIM.
MOVE CODIGO-FUN TO CODIGO-ED
IF CODIGO-ED EQUAL ZEROS
DISPLAY "CODIGO INVALIDO" AT 2310
ACCEPT PARA AT 2579 WITH AUTO NO-ECHO

FromSoft – Todos os direitos reservados – http://www.fromsoft.com.br Página 146


Curso de Cobol Básico

DISPLAY " " AT 2310


GO TO PEGA-CODIGO.
READ ARQFUN INVALID KEY
CONTINUE
NOT INVALID KEY
DISPLAY "CODIGO JA CADASTRADO" AT 2310
ACCEPT PARA AT 2579 WITH AUTO NO-ECHO
DISPLAY " " AT 2310
PERFORM LIMPA-TELA
GO TO PEGA-CODIGO.
FIM-PEGA-CODIGO. EXIT.
PEGA-NOME.
DISPLAY "NOME " AT 2310
ACCEPT NOME AT 0825 WITH AUTO PROMPT.
ACCEPT TECLA FROM ESCAPE KEY
IF TECLA EQUAL 01
GO TO PEGA-CODIGO.
IF NOME EQUAL SPACES
DISPLAY "NOME INVALIDO" AT 2310
ACCEPT PARA AT 2579 WITH AUTO NO-ECHO
DISPLAY " " AT 2310
GO TO PEGA-NOME.
PEGA-ENDERECO.
DISPLAY "ENDERECO " AT 2310
ACCEPT ENDERECO AT 0925 WITH AUTO PROMPT.
ACCEPT TECLA FROM ESCAPE KEY
IF TECLA EQUAL 01
GO TO PEGA-NOME.
IF ENDERECO EQUAL SPACES
DISPLAY "ENDERECO INVALIDO" AT 2310
ACCEPT PARA AT 2579 WITH AUTO NO-ECHO
DISPLAY " " AT 2310
GO TO PEGA-ENDERECO.
PEGA-CIDADE.
DISPLAY "CIDADE " AT 2310
ACCEPT CIDADE AT 1025 WITH AUTO.
ACCEPT TECLA FROM ESCAPE KEY
IF TECLA EQUAL 01
GO TO PEGA-ENDERECO.
IF CIDADE EQUAL SPACES
DISPLAY "CIDADE INVALIDA" AT 2310
ACCEPT PARA AT 2579 WITH AUTO NO-ECHO
DISPLAY " " AT 2310
GO TO PEGA-CIDADE.
PEGA-ATIVIDADE.
DISPLAY "ATIVIDADE " AT 2310
ACCEPT ATIVIDADE AT 1125 WITH AUTO PROMPT.
ACCEPT TECLA FROM ESCAPE KEY
IF TECLA EQUAL 01
GO TO PEGA-CIDADE.
IF ATIVIDADE EQUAL SPACES
DISPLAY "ATIVIDADE INVALIDA" AT 2310
ACCEPT PARA AT 2579 WITH AUTO NO-ECHO
DISPLAY " " AT 2310
GO TO PEGA-ATIVIDADE.
PEGA-SETOR.
DISPLAY "SETOR " AT 2310
ACCEPT SETOR AT 1225 WITH AUTO PROMPT.
ACCEPT TECLA FROM ESCAPE KEY
IF TECLA EQUAL 01
GO TO PEGA-ATIVIDADE.
IF SETOR EQUAL SPACES
DISPLAY "SETOR INVALIDO" AT 2310
ACCEPT PARA AT 2579 WITH AUTO NO-ECHO
DISPLAY " " AT 2310
GO TO PEGA-SETOR.
PEGA-SALARIO.
DISPLAY "SALARIO " AT 2310
ACCEPT SALARIO-FUN AT 1325 WITH AUTO.
ACCEPT TECLA FROM ESCAPE KEY
IF TECLA EQUAL 01
GO TO PEGA-SETOR.
MOVE SALARIO-FUN TO SALARIO
IF SALARIO EQUAL ZEROS
DISPLAY "SALARIO INVALIDO" AT 2310

FromSoft – Todos os direitos reservados – http://www.fromsoft.com.br Página 147


Curso de Cobol Básico

ACCEPT PARA AT 2579 WITH AUTO NO-ECHO


DISPLAY " " AT 2310
GO TO PEGA-SALARIO.
PEGA-DATA-DE-PAGAMENTO.
DISPLAY "DATA DE PAGAMENTO " AT 2310
ACCEPT DATA-PAR AT 1425 WITH AUTO.
ACCEPT TECLA FROM ESCAPE KEY
IF TECLA EQUAL 01
GO TO PEGA-SALARIO.
PERFORM VALIDA-DATA
IF FLAG-VALIDA EQUAL "N"
DISPLAY "DATA DE PAGAMENTO INVALIDA" AT 2310
ACCEPT PARA AT 2579 WITH AUTO NO-ECHO
DISPLAY " " AT 2310
GO TO PEGA-DATA-DE-PAGAMENTO.
MOVE DATA-PAR TO DATA-PAGAMENTO.
PEGA-DATA-DE-NASCIMENTO.
DISPLAY "DATA DE NASCIMENTO " AT 2310
ACCEPT DATA-PAR AT 1525 WITH AUTO.
ACCEPT TECLA FROM ESCAPE KEY
IF TECLA EQUAL 01
GO TO PEGA-DATA-DE-PAGAMENTO.
PERFORM VALIDA-DATA
IF FLAG-VALIDA EQUAL "N"
DISPLAY "DATA DE NASCIMENTO INVALIDA" AT 2310
ACCEPT PARA AT 2579 WITH AUTO NO-ECHO
DISPLAY " " AT 2310
GO TO PEGA-DATA-DE-NASCIMENTO.
MOVE DATA-PAR TO DATA-NASCIMENTO.
PEGA-ESCOLARIDADE.
DISPLAY "ESCOLARIDADE " AT 2310
ACCEPT ESCOLARIDADE AT 1625 WITH AUTO.
ACCEPT TECLA FROM ESCAPE KEY
IF TECLA EQUAL 01
GO TO PEGA-DATA-DE-NASCIMENTO.
IF ESCOLARIDADE EQUAL SPACES
DISPLAY "ESCOLARIDADE INVALIDA" AT 2310
ACCEPT PARA AT 2579 WITH AUTO NO-ECHO
DISPLAY " " AT 2310
GO TO PEGA-ESCOLARIDADE.
PEGA-NATURALIDADE.
DISPLAY "NATURALIDADE " AT 2310
ACCEPT NATURALIDADE AT 1725 WITH AUTO.
ACCEPT TECLA FROM ESCAPE KEY
IF TECLA EQUAL 01
GO TO PEGA-ESCOLARIDADE.
IF NATURALIDADE EQUAL SPACES
DISPLAY "NATURALIDADE INVALIDA" AT 2310
ACCEPT PARA AT 2579 WITH AUTO NO-ECHO
DISPLAY " " AT 2310
GO TO PEGA-NATURALIDADE.
PEGA-NACIONALIDADE.
DISPLAY "NACIONALIDADE " AT 2310
ACCEPT NACIONALIDADE AT 1825 WITH AUTO.
ACCEPT TECLA FROM ESCAPE KEY
IF TECLA EQUAL 01
GO TO PEGA-NATURALIDADE.
IF NACIONALIDADE EQUAL SPACES
DISPLAY "NACIONALIDADE INVALIDA" AT 2310
ACCEPT PARA AT 2579 WITH AUTO NO-ECHO
DISPLAY " " AT 2310
GO TO PEGA-NACIONALIDADE.
PEGA-BAIRRO.
DISPLAY "BAIRRO " AT 2310
ACCEPT BAIRRO AT 1159 WITH AUTO.
ACCEPT TECLA FROM ESCAPE KEY
IF TECLA EQUAL 01
GO TO PEGA-NACIONALIDADE.
IF BAIRRO EQUAL SPACES
DISPLAY "BAIRRO INVALIDO" AT 2310
ACCEPT PARA AT 2579 WITH AUTO NO-ECHO
DISPLAY " " AT 2310
GO TO PEGA-BAIRRO.
PEGA-ESTADO.
DISPLAY "ESTADO " AT 2310

FromSoft – Todos os direitos reservados – http://www.fromsoft.com.br Página 148


Curso de Cobol Básico

ACCEPT ESTADO AT 1259 WITH AUTO.


ACCEPT TECLA FROM ESCAPE KEY
IF TECLA EQUAL 01
GO TO PEGA-BAIRRO.
IF ESTADO EQUAL SPACES
DISPLAY "ESTADO INVALIDO" AT 2310
ACCEPT PARA AT 2579 WITH AUTO NO-ECHO
DISPLAY " " AT 2310
GO TO PEGA-ESTADO.
PEGA-CPF.
DISPLAY "CPF " AT 2310
ACCEPT CPF-FUN AT 1359 WITH AUTO.
ACCEPT TECLA FROM ESCAPE KEY
IF TECLA EQUAL 01
GO TO PEGA-ESTADO.
MOVE CPF-FUN TO CPF
IF CPF EQUAL ZEROS
DISPLAY "CPF INVALIDO" AT 2310
ACCEPT PARA AT 2579 WITH AUTO NO-ECHO
DISPLAY " " AT 2310
GO TO PEGA-CPF.
PEGA-IDENTIDADE.
DISPLAY "IDENTIDADE " AT 2310
ACCEPT IDENTIDADE AT 1459 WITH AUTO.
ACCEPT TECLA FROM ESCAPE KEY
IF TECLA EQUAL 01
GO TO PEGA-CPF.
IF IDENTIDADE EQUAL SPACES
DISPLAY "IDENTIDADE INVALIDA" AT 2310
ACCEPT PARA AT 2579 WITH AUTO NO-ECHO
DISPLAY " " AT 2310
GO TO PEGA-IDENTIDADE.
PEGA-FILIAL.
DISPLAY "FILIAL " AT 2310
ACCEPT FILIAL AT 1559 WITH AUTO.
ACCEPT TECLA FROM ESCAPE KEY
IF TECLA EQUAL 01
GO TO PEGA-IDENTIDADE.
IF FILIAL EQUAL SPACES
DISPLAY "FILIAL INVALIDA" AT 2310
ACCEPT PARA AT 2579 WITH AUTO NO-ECHO
DISPLAY " " AT 2310
GO TO PEGA-FILIAL.
PEGA-DATA-DE-ADMISSAO.
DISPLAY "DATA DE ADMISSAO " AT 2310
ACCEPT DATA-PAR AT 1659 WITH AUTO.
ACCEPT TECLA FROM ESCAPE KEY
IF TECLA EQUAL 01
GO TO PEGA-FILIAL.
PERFORM VALIDA-DATA
IF FLAG-VALIDA EQUAL "N"
DISPLAY "DATA DE ADMISSAO INVALIDA" AT 2310
ACCEPT PARA AT 2579 WITH AUTO NO-ECHO
DISPLAY " " AT 2310
GO TO PEGA-DATA-DE-ADMISSAO.
MOVE DATA-PAR TO DATA-ADMISSAO.
PEGA-SEXO.
DISPLAY "SEXO " AT 2310
ACCEPT SEXO AT 1759 WITH AUTO.
ACCEPT TECLA FROM ESCAPE KEY
IF TECLA EQUAL 01
GO TO PEGA-DATA-DE-ADMISSAO.
IF SEXO NOT EQUAL "S" AND SEXO NOT EQUAL "M"
DISPLAY "SEXO INVALIDO" AT 2310
ACCEPT PARA AT 2579 WITH AUTO NO-ECHO
DISPLAY " " AT 2310
GO TO PEGA-SEXO.
PEGA-HORAS.
DISPLAY "HORAS DE TRABALHO " AT 2310
ACCEPT HORAS-TRABALHO-FUN AT 1859 WITH AUTO.
ACCEPT TECLA FROM ESCAPE KEY
IF TECLA EQUAL 01
GO TO PEGA-SEXO.
MOVE HORAS-TRABALHO-FUN TO HORAS-TRABALHO
IF HORAS-TRABALHO EQUAL ZEROS

FromSoft – Todos os direitos reservados – http://www.fromsoft.com.br Página 149


Curso de Cobol Básico

DISPLAY "HORAS DE TRABALHO INVALIDA" AT 2310


ACCEPT PARA AT 2579 WITH AUTO NO-ECHO
DISPLAY " " AT 2310
GO TO PEGA-HORAS.
GRAVA-REGISTRO.
WRITE REG-ARQFUN
IF FILE-STATUS EQUAL ZEROS
PERFORM LIMPA-TELA
GO TO INICIO
ELSE
DISPLAY "ERRO DE GRAVACAO NO ARQUIVO" AT 2310
ACCEPT PARA AT 2579 WITH AUTO NO-ECHO
GO TO FIM
END-IF.
FIM.
DISPLAY " " WITH ERASE EOS BACKGROUND-COLOR 0
FOREGROUND-COLOR 7.
STOP RUN.

LIMPA-TELA.
INITIALIZE CODIGO NOME ENDERECO CIDADE ATIVIDADE SETOR
SALARIO DIA-PAGAMENTO MES-PAGAMENTO ANO-PAGAMENTO
DIA-NASCIMENTO MES-NASCIMENTO ANO-NASCIMENTO
ESCOLARIDADE NATURALIDADE NACIONALIDADE BAIRRO
ESTADO CPF IDENTIDADE FILIAL DIA-ADMISSAO
MES-ADMISSAO ANO-ADMISSAO SEXO HORAS-TRABALHO
CODIGO-FUN CPF-FUN SALARIO-FUN HORAS-TRABALHO-FUN.

VALIDA-DATA.
IF DIA-PAR GREATER ZEROS AND DIA-PAR LESS 32
MOVE "S" TO FLAG-VALIDA
ELSE
MOVE "N" TO FLAG-VALIDA
END-IF
IF MES-PAR GREATER ZEROS AND MES-PAR LESS 13
IF MES-PAR EQUAL 01 OR MES-PAR EQUAL 03
OR MES-PAR EQUAL 05 OR MES-PAR EQUAL 07
OR MES-PAR EQUAL 08 OR MES-PAR EQUAL 10
OR MES-PAR EQUAL 12 AND DIA-PAR LESS 32
MOVE "S" TO FLAG-VALIDA
ELSE
IF MES-PAR EQUAL 02 AND DIA-PAR LESS 30
MOVE "S" TO FLAG-VALIDA
ELSE
IF MES-PAR EQUAL 04 OR MES-PAR EQUAL 06
OR MES-PAR EQUAL 09 OR MES-PAR EQUAL 11
MOVE "S" TO FLAG-VALIDA
ELSE
MOVE "N" TO FLAG-VALIDA
END-IF
ELSE
MOVE "N" TO FLAG-VALIDA
END-IF.

FromSoft – Todos os direitos reservados – http://www.fromsoft.com.br Página 150


Curso de Cobol Básico

Lição 12 – Exemplo 2 – Consulta de Usuários presentes em Cadastro.


IDENTIFICATION DIVISION.
PROGRAM-ID. L12EX02.
ENVIRONMENT DIVISION.
SPECIAL-NAMES.
DECIMAL-POINT IS COMMA.
FILE-CONTROL.
SELECT ARQFUN ASSIGN TO "ARQFUNR.DAT"
ORGANIZATION IS RELATIVE
ACCESS MODE IS DYNAMIC
RELATIVE KEY IS CODIGO-ED
FILE STATUS IS FILE-STATUS.
DATA DIVISION.
FILE SECTION.
FD ARQFUN.
01 REG-ARQFUN.
03 CODIGO PIC 9(05).
03 NOME PIC X(30).
03 ENDERECO PIC X(30).
03 CIDADE PIC X(20).
03 ATIVIDADE PIC X(20).
03 SETOR PIC X(20).
03 SALARIO PIC 9(11).
03 DATA-PAGAMENTO.
05 DIA-PAGAMENTO PIC 9(02).
05 FILLER PIC X(01).
05 MES-PAGAMENTO PIC 9(02).
05 FILLER PIC X(01).
05 ANO-PAGAMENTO PIC 9(02).
03 DATA-NASCIMENTO.
05 DIA-NASCIMENTO PIC 9(02).
05 FILLER PIC X(01).
05 MES-NASCIMENTO PIC 9(02).
05 FILLER PIC X(01).
05 ANO-NASCIMENTO PIC 9(02).
03 ESCOLARIDADE PIC X(15).
03 NATURALIDADE PIC X(15).
03 NACIONALIDADE PIC X(15).
03 BAIRRO PIC X(20).
03 ESTADO PIC A(02).
03 CPF PIC 9(11).
03 IDENTIDADE PIC X(11).
03 FILIAL PIC X(10).
03 DATA-ADMISSAO.
05 DIA-ADMISSAO PIC 9(02).
05 FILLER PIC X(01).
05 MES-ADMISSAO PIC 9(02).
05 FILLER PIC X(01).
05 ANO-ADMISSAO PIC 9(02).
03 SEXO PIC A(01).
03 HORAS-TRABALHO PIC 9(02).

WORKING-STORAGE SECTION.
77 CODIGO-FUN PIC ZZZZZ VALUE SPACES.
77 CODIGO-ED PIC 9(05) VALUE ZEROS.
77 SALARIO-FUN PIC ZZZ.ZZZ.ZZ9,99 VALUE SPACES.
77 CPF-FUN PIC ZZZZZZZZZ.ZZ VALUE SPACES.
77 HORAS-TRABALHO-FUN PIC ZZ VALUE ZEROS.
77 DATA-FUN PIC ZZ/ZZ/ZZ VALUE SPACES.
77 MENSAGEM PIC X(30) VALUE ZEROS.
77 FLAG-VALIDA PIC X VALUE SPACE.
77 TECLA PIC XX VALUE SPACES.
77 FILE-STATUS PIC XX VALUE SPACES.
77 PARA PIC X VALUE SPACES.
01 DATA-PAR.
03 DIA-PAR PIC 9(02) VALUE ZEROS.
03 FILLER PIC X(01) VALUE "/".
03 MES-PAR PIC 9(02) VALUE ZEROS.
03 FILLER PIC X(01) VALUE "/".
03 ANO-PAR PIC 9(02) VALUE ZEROS.
SCREEN SECTION.
01 TELA-CADASTRO.
02 BACKGROUND-COLOR 1 FOREGROUND-COLOR 7.
03 BLANK SCREEN.

FromSoft – Todos os direitos reservados – http://www.fromsoft.com.br Página 151


Curso de Cobol Básico

03 LINE 1 COL 1 HIGHLIGHT VALUE "ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ


"ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿".
03 LINE 2 COL 1 HIGHLIGHT VALUE "ÃÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
"ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ´".
03 LINE 3 COL 1 HIGHLIGHT VALUE "ÃÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄCA
"DASTRO".
03 COL 37 HIGHLIGHT VALUE "DE".
03 COL 40 HIGHLIGHT VALUE "CANDIDATOSÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
"ÄÄÄÄÄ´".
03 LINE 4 COL 1 HIGHLIGHT VALUE "ÃÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
"ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ´".
03 LINE 5 COL 1 HIGHLIGHT VALUE "ÃÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
"ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ´".
03 LINE 6 COL 1 HIGHLIGHT VALUE "ÃÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
"ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ´".
03 LINE 7 COL 1 HIGHLIGHT VALUE "ÃÄ".
03 COL 4 HIGHLIGHT VALUE "CODIGO.............:".
03 COL 79 HIGHLIGHT VALUE "Ä´".
03 LINE 8 COL 1 HIGHLIGHT VALUE "ÃÄ".
03 COL 4 HIGHLIGHT VALUE "NOME...............:".
03 COL 79 HIGHLIGHT VALUE "Ä´".
03 LINE 9 COL 1 HIGHLIGHT VALUE "ÃÄ".
03 COL 4 HIGHLIGHT VALUE "ENDERECO...........:".
03 COL 79 HIGHLIGHT VALUE "Ä´".
03 LINE 10 COL 1 HIGHLIGHT VALUE "ÃÄ".
03 COL 4 HIGHLIGHT VALUE "CIDADE.............:".
03 COL 79 HIGHLIGHT VALUE "Ä´".
03 LINE 11 COL 1 HIGHLIGHT VALUE "ÃÄ".
03 COL 4 HIGHLIGHT VALUE "ATIVIDADE..........:".
03 COL 46 HIGHLIGHT VALUE "BAIRRO.....:".
03 COL 79 HIGHLIGHT VALUE "Ä´".
03 LINE 12 COL 1 HIGHLIGHT VALUE "ÃÄ".
03 COL 4 HIGHLIGHT VALUE "SETOR..............:".
03 COL 46 HIGHLIGHT VALUE "ESTADO.....:".
03 COL 79 HIGHLIGHT VALUE "Ä´".
03 LINE 13 COL 1 HIGHLIGHT VALUE "ÃÄ".
03 COL 4 HIGHLIGHT VALUE "SALARIO............:".
03 COL 46 HIGHLIGHT VALUE "CPF........:".
03 COL 79 HIGHLIGHT VALUE "Ä´".
03 LINE 14 COL 1 HIGHLIGHT VALUE "ÃÄ".
03 COL 4 HIGHLIGHT VALUE "DATA".
03 COL 9 HIGHLIGHT VALUE "DE".
03 COL 12 HIGHLIGHT VALUE "PAGAMENTO..:".
03 COL 27 HIGHLIGHT VALUE "/".
03 COL 30 HIGHLIGHT VALUE "/".
03 COL 46 HIGHLIGHT VALUE "IDENTIDADE.:".
03 COL 79 HIGHLIGHT VALUE "Ä´".
03 LINE 15 COL 1 HIGHLIGHT VALUE "ÃÄ".
03 COL 4 HIGHLIGHT VALUE "DATA".
03 COL 9 HIGHLIGHT VALUE "DE".
03 COL 12 HIGHLIGHT VALUE "NASCIMENTO.:".
03 COL 27 HIGHLIGHT VALUE "/".
03 COL 30 HIGHLIGHT VALUE "/".
03 COL 46 HIGHLIGHT VALUE "FILIAL.....:".
03 COL 79 HIGHLIGHT VALUE "Ä´".
03 LINE 16 COL 1 HIGHLIGHT VALUE "ÃÄ".
03 COL 4 HIGHLIGHT VALUE "ESCOLARIDADE.......:".
03 COL 46 HIGHLIGHT VALUE "ADMISSAO...:".
03 COL 61 HIGHLIGHT VALUE "/".
03 COL 64 HIGHLIGHT VALUE "/".
03 COL 79 HIGHLIGHT VALUE "Ä´".
03 LINE 17 COL 1 HIGHLIGHT VALUE "ÃÄ".
03 COL 4 HIGHLIGHT VALUE "NATURALIDADE.......:".
03 COL 46 HIGHLIGHT VALUE "SEXO.......:".
03 COL 79 HIGHLIGHT VALUE "Ä´".
03 LINE 18 COL 1 HIGHLIGHT VALUE "ÃÄ".
03 COL 4 HIGHLIGHT VALUE "NACIONALIDADE......:".
03 COL 46 HIGHLIGHT VALUE "HORAS/DIA..:".
03 COL 79 HIGHLIGHT VALUE "Ä´".
03 LINE 19 COL 1 HIGHLIGHT VALUE "ÃÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
"ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ´".
03 LINE 20 COL 1 HIGHLIGHT VALUE "ÃÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
"ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ´".
03 LINE 21 COL 1 HIGHLIGHT VALUE "ÃÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
"ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ´".

FromSoft – Todos os direitos reservados – http://www.fromsoft.com.br Página 152


Curso de Cobol Básico

03 LINE 22 COL 1 HIGHLIGHT VALUE "ÃÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ


"ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ´".
03 LINE 23 COL 1 HIGHLIGHT VALUE "³INFORME".
03 COL 80 HIGHLIGHT VALUE "³".
03 LINE 24 COL 1 HIGHLIGHT VALUE "ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
"ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ".
03 LINE 25 COL 1 BACKGROUND-COLOR 0 HIGHLIGHT VALUE "
"
" ".
PROCEDURE DIVISION.
PERFORM ABRE-ARQUIVO.
INICIO.
DISPLAY TELA-CADASTRO.
PERFORM LIMPA-TELA.
PEGA-CODIGO.
DISPLAY "CODIGO " AT 2310.
ACCEPT CODIGO-FUN AT 0725 WITH AUTO PROMPT
ACCEPT TECLA FROM ESCAPE KEY
IF TECLA EQUAL 01
GO TO FIM.
MOVE CODIGO-FUN TO CODIGO-ED
IF CODIGO-ED EQUAL ZEROS
DISPLAY "CODIGO INVALIDO" AT 2310
ACCEPT PARA AT 2579 WITH AUTO NO-ECHO
DISPLAY " " AT 2310
PERFORM FECHA-ARQUIVO
GO TO PEGA-CODIGO.
READ ARQFUN INVALID KEY
DISPLAY "CODIGO NAO CADASTRADO" AT 2310
ACCEPT PARA AT 2579 WITH AUTO NO-ECHO
DISPLAY " " AT 2310
PERFORM LIMPA-TELA
GO TO PEGA-CODIGO
NOT INVALID KEY
PERFORM MOSTRA-FUNCIONARIO THRU FIM-MOSTRA-FUNCIONARIO
ACCEPT PARA AT 2579 WITH AUTO NO-ECHO
PERFORM LIMPA-TELA
GO TO PEGA-CODIGO.
FIM-PEGA-CODIGO. EXIT.

MOSTRA-FUNCIONARIO.
DISPLAY NOME AT 0825
DISPLAY ENDERECO AT 0925
DISPLAY CIDADE AT 1025
DISPLAY ATIVIDADE AT 1125
DISPLAY SETOR AT 1225
MOVE SALARIO TO SALARIO-FUN
DISPLAY SALARIO-FUN AT 1325
MOVE DATA-PAGAMENTO TO DATA-FUN
DISPLAY DATA-PAGAMENTO AT 1425
MOVE DATA-NASCIMENTO TO DATA-FUN
DISPLAY DATA-NASCIMENTO AT 1525
DISPLAY ESCOLARIDADE AT 1625
DISPLAY NATURALIDADE AT 1725
DISPLAY NACIONALIDADE AT 1825
DISPLAY BAIRRO AT 1159
DISPLAY ESTADO AT 1259
MOVE CPF TO CPF-FUN
DISPLAY CPF-FUN AT 1359
DISPLAY IDENTIDADE AT 1459
DISPLAY FILIAL AT 1559
MOVE DATA-ADMISSAO TO DATA-FUN
DISPLAY DATA-ADMISSAO AT 1659
DISPLAY SEXO AT 1759
MOVE HORAS-TRABALHO TO HORAS-TRABALHO-FUN
DISPLAY HORAS-TRABALHO-FUN AT 1859.
FIM-MOSTRA-FUNCIONARIO. EXIT.

FIM.
PERFORM FECHA-ARQUIVO
DISPLAY " " WITH ERASE EOS BACKGROUND-COLOR 0
FOREGROUND-COLOR 7.
STOP RUN.

LIMPA-TELA.

FromSoft – Todos os direitos reservados – http://www.fromsoft.com.br Página 153


Curso de Cobol Básico

INITIALIZE CODIGO NOME ENDERECO CIDADE ATIVIDADE SETOR


SALARIO DIA-PAGAMENTO MES-PAGAMENTO ANO-PAGAMENTO
DIA-NASCIMENTO MES-NASCIMENTO ANO-NASCIMENTO
ESCOLARIDADE NATURALIDADE NACIONALIDADE BAIRRO
ESTADO CPF IDENTIDADE FILIAL DIA-ADMISSAO
MES-ADMISSAO ANO-ADMISSAO SEXO HORAS-TRABALHO
CODIGO-FUN CPF-FUN SALARIO-FUN HORAS-TRABALHO-FUN
DIA-PAR MES-PAR ANO-PAR
DISPLAY " " AT 0825
DISPLAY " " AT 0925
DISPLAY " " AT 1025
DISPLAY " " AT 1125
DISPLAY " " AT 1225
DISPLAY " " AT 1325
DISPLAY " / / " AT 1425
DISPLAY " / / " AT 1525
DISPLAY " " AT 1625
DISPLAY " " AT 1725
DISPLAY " " AT 1825
DISPLAY " " AT 1159
DISPLAY " " AT 1259
DISPLAY " " AT 1359
DISPLAY " " AT 1459
DISPLAY " " AT 1559
DISPLAY " / / " AT 1659
DISPLAY " " AT 1759
DISPLAY " " AT 1859.

ABRE-ARQUIVO.
OPEN INPUT ARQFUN
IF FILE-STATUS EQUAL ZEROS
CONTINUE
ELSE
DISPLAY "ERRO DE ABERTURA NO ARQUIVO" AT 2310
ACCEPT PARA AT 2579 WITH AUTO NO-ECHO
GO TO FIM.

FECHA-ARQUIVO.
CLOSE ARQFUN
IF FILE-STATUS EQUAL ZEROS
NEXT SENTENCE
ELSE
DISPLAY "ERRO DE FECHAMENTO DO ARQUIVO" AT 2310
ACCEPT PARA AT 2579 WITH AUTO NO-ECHO
GO TO FIM.

Lição 12 – Exemplo 3 – Alteração de Usuários presentes em Cadastro.

IDENTIFICATION DIVISION.
PROGRAM-ID. L12EX03.
ENVIRONMENT DIVISION.
SPECIAL-NAMES.
DECIMAL-POINT IS COMMA.
FILE-CONTROL.
SELECT ARQFUN ASSIGN TO "ARQFUNR.DAT"
ORGANIZATION IS RELATIVE
ACCESS MODE IS DYNAMIC
RELATIVE KEY IS CODIGO-ED
FILE STATUS IS FILE-STATUS.
DATA DIVISION.
FILE SECTION.
FD ARQFUN.
01 REG-ARQFUN.
03 CODIGO PIC 9(05).
03 NOME PIC X(30).
03 ENDERECO PIC X(30).
03 CIDADE PIC X(20).
03 ATIVIDADE PIC X(20).
03 SETOR PIC X(20).
03 SALARIO PIC 9(11).
03 DATA-PAGAMENTO.
05 DIA-PAGAMENTO PIC 9(02).
05 FILLER PIC X(01).
05 MES-PAGAMENTO PIC 9(02).

FromSoft – Todos os direitos reservados – http://www.fromsoft.com.br Página 154


Curso de Cobol Básico

05 FILLER PIC X(01).


05 ANO-PAGAMENTO PIC 9(02).
03 DATA-NASCIMENTO.
05 DIA-NASCIMENTO PIC 9(02).
05 FILLER PIC X(01).
05 MES-NASCIMENTO PIC 9(02).
05 FILLER PIC X(01).
05 ANO-NASCIMENTO PIC 9(02).
03 ESCOLARIDADE PIC X(15).
03 NATURALIDADE PIC X(15).
03 NACIONALIDADE PIC X(15).
03 BAIRRO PIC X(20).
03 ESTADO PIC A(02).
03 CPF PIC 9(11).
03 IDENTIDADE PIC X(11).
03 FILIAL PIC X(10).
03 DATA-ADMISSAO.
05 DIA-ADMISSAO PIC 9(02).
05 FILLER PIC X(01).
05 MES-ADMISSAO PIC 9(02).
05 FILLER PIC X(01).
05 ANO-ADMISSAO PIC 9(02).
03 SEXO PIC A(01).
03 HORAS-TRABALHO PIC 9(02).

WORKING-STORAGE SECTION.
77 CODIGO-FUN PIC ZZZZZ VALUE SPACES.
77 CODIGO-ED PIC 9(05) VALUE ZEROS.
77 SALARIO-FUN PIC ZZZ.ZZZ.ZZ9,99 VALUE SPACES.
77 CPF-FUN PIC ZZZZZZZZZ.ZZ VALUE SPACES.
77 HORAS-TRABALHO-FUN PIC ZZ VALUE SPACES.
77 DATA-FUN PIC ZZ/ZZ/ZZ VALUE SPACES.
77 MENSAGEM PIC X(30) VALUE ZEROS.
77 FLAG-VALIDA PIC X VALUE SPACE.
77 TECLA PIC XX VALUE SPACES.
77 FILE-STATUS PIC XX VALUE SPACES.
77 PARA PIC X VALUE SPACES.
01 DATA-PAR.
03 DIA-PAR PIC 9(02) VALUE ZEROS.
03 FILLER PIC X(01) VALUE "/".
03 MES-PAR PIC 9(02) VALUE ZEROS.
03 FILLER PIC X(01) VALUE "/".
03 ANO-PAR PIC 9(02) VALUE ZEROS.
SCREEN SECTION.
01 TELA-CADASTRO.
02 BACKGROUND-COLOR 1 FOREGROUND-COLOR 7.
03 BLANK SCREEN.
03 LINE 1 COL 1 HIGHLIGHT VALUE "ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
-"ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿".
03 LINE 2 COL 1 HIGHLIGHT VALUE "ÃÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
-"ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ´".
03 LINE 3 COL 1 HIGHLIGHT VALUE "ÃÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄCA
-"DASTRO".
03 COL 37 HIGHLIGHT VALUE "DE".
03 COL 40 HIGHLIGHT VALUE "CANDIDATOSÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
-"ÄÄÄÄÄ´".
03 LINE 4 COL 1 HIGHLIGHT VALUE "ÃÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
-"ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ´".
03 LINE 5 COL 1 HIGHLIGHT VALUE "ÃÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
-"ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ´".
03 LINE 6 COL 1 HIGHLIGHT VALUE "ÃÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
-"ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ´".
03 LINE 7 COL 1 HIGHLIGHT VALUE "ÃÄ".
03 COL 4 HIGHLIGHT VALUE "CODIGO.............:".
03 COL 79 HIGHLIGHT VALUE "Ä´".
03 LINE 8 COL 1 HIGHLIGHT VALUE "ÃÄ".
03 COL 4 HIGHLIGHT VALUE "NOME...............:".
03 COL 79 HIGHLIGHT VALUE "Ä´".
03 LINE 9 COL 1 HIGHLIGHT VALUE "ÃÄ".
03 COL 4 HIGHLIGHT VALUE "ENDERECO...........:".
03 COL 79 HIGHLIGHT VALUE "Ä´".
03 LINE 10 COL 1 HIGHLIGHT VALUE "ÃÄ".
03 COL 4 HIGHLIGHT VALUE "CIDADE.............:".
03 COL 79 HIGHLIGHT VALUE "Ä´".
03 LINE 11 COL 1 HIGHLIGHT VALUE "ÃÄ".

FromSoft – Todos os direitos reservados – http://www.fromsoft.com.br Página 155


Curso de Cobol Básico

03 COL 4 HIGHLIGHT VALUE "ATIVIDADE..........:".


03 COL 46 HIGHLIGHT VALUE "BAIRRO.....:".
03 COL 79 HIGHLIGHT VALUE "Ä´".
03 LINE 12 COL 1 HIGHLIGHT VALUE "ÃÄ".
03 COL 4 HIGHLIGHT VALUE "SETOR..............:".
03 COL 46 HIGHLIGHT VALUE "ESTADO.....:".
03 COL 79 HIGHLIGHT VALUE "Ä´".
03 LINE 13 COL 1 HIGHLIGHT VALUE "ÃÄ".
03 COL 4 HIGHLIGHT VALUE "SALARIO............:".
03 COL 46 HIGHLIGHT VALUE "CPF........:".
03 COL 79 HIGHLIGHT VALUE "Ä´".
03 LINE 14 COL 1 HIGHLIGHT VALUE "ÃÄ".
03 COL 4 HIGHLIGHT VALUE "DATA".
03 COL 9 HIGHLIGHT VALUE "DE".
03 COL 12 HIGHLIGHT VALUE "PAGAMENTO..:".
03 COL 27 HIGHLIGHT VALUE "/".
03 COL 30 HIGHLIGHT VALUE "/".
03 COL 46 HIGHLIGHT VALUE "IDENTIDADE.:".
03 COL 79 HIGHLIGHT VALUE "Ä´".
03 LINE 15 COL 1 HIGHLIGHT VALUE "ÃÄ".
03 COL 4 HIGHLIGHT VALUE "DATA".
03 COL 9 HIGHLIGHT VALUE "DE".
03 COL 12 HIGHLIGHT VALUE "NASCIMENTO.:".
03 COL 27 HIGHLIGHT VALUE "/".
03 COL 30 HIGHLIGHT VALUE "/".
03 COL 46 HIGHLIGHT VALUE "FILIAL.....:".
03 COL 79 HIGHLIGHT VALUE "Ä´".
03 LINE 16 COL 1 HIGHLIGHT VALUE "ÃÄ".
03 COL 4 HIGHLIGHT VALUE "ESCOLARIDADE.......:".
03 COL 46 HIGHLIGHT VALUE "ADMISSAO...:".
03 COL 61 HIGHLIGHT VALUE "/".
03 COL 64 HIGHLIGHT VALUE "/".
03 COL 79 HIGHLIGHT VALUE "Ä´".
03 LINE 17 COL 1 HIGHLIGHT VALUE "ÃÄ".
03 COL 4 HIGHLIGHT VALUE "NATURALIDADE.......:".
03 COL 46 HIGHLIGHT VALUE "SEXO.......:".
03 COL 79 HIGHLIGHT VALUE "Ä´".
03 LINE 18 COL 1 HIGHLIGHT VALUE "ÃÄ".
03 COL 4 HIGHLIGHT VALUE "NACIONALIDADE......:".
03 COL 46 HIGHLIGHT VALUE "HORAS/DIA..:".
03 COL 79 HIGHLIGHT VALUE "Ä´".
03 LINE 19 COL 1 HIGHLIGHT VALUE "ÃÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
-"ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ´".
03 LINE 20 COL 1 HIGHLIGHT VALUE "ÃÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
-"ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ´".
03 LINE 21 COL 1 HIGHLIGHT VALUE "ÃÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
-"ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ´".
03 LINE 22 COL 1 HIGHLIGHT VALUE "ÃÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
-"ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ´".
03 LINE 23 COL 1 HIGHLIGHT VALUE "³INFORME".
03 COL 80 HIGHLIGHT VALUE "³".
03 LINE 24 COL 1 HIGHLIGHT VALUE "ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
-"ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ".
03 LINE 25 COL 1 BACKGROUND-COLOR 0 HIGHLIGHT VALUE "
-"
-" ".
PROCEDURE DIVISION.
PERFORM ABRE-ARQUIVO.
INICIO.
DISPLAY TELA-CADASTRO.
PERFORM LIMPA-TELA.
PEGA-CODIGO.
DISPLAY "CODIGO " AT 2310.
ACCEPT CODIGO-FUN AT 0725 WITH AUTO PROMPT
ACCEPT TECLA FROM ESCAPE KEY
IF TECLA EQUAL 01
GO TO FIM.
MOVE CODIGO-FUN TO CODIGO-ED
IF CODIGO-ED EQUAL ZEROS
DISPLAY "CODIGO INVALIDO" AT 2310
ACCEPT PARA AT 2579 WITH AUTO NO-ECHO
DISPLAY " " AT 2310
GO TO PEGA-CODIGO.
LE-ARQUIVO-RELATIVE.
READ ARQFUN INVALID KEY

FromSoft – Todos os direitos reservados – http://www.fromsoft.com.br Página 156


Curso de Cobol Básico

DISPLAY "CODIGO NAO CADASTRADO" AT 2310


ACCEPT PARA AT 2579 WITH AUTO NO-ECHO
DISPLAY " " AT 2310
PERFORM LIMPA-TELA
GO TO PEGA-CODIGO
NOT INVALID KEY
PERFORM MOSTRA-FUNCIONARIO THRU FIM-MOSTRA-FUNCIONARIO
GO TO PEGA-NOME.
FIM-PEGA-CODIGO. EXIT.
PEGA-NOME.
DISPLAY "NOME " AT 2310
ACCEPT NOME AT 0825 WITH AUTO PROMPT.
ACCEPT TECLA FROM ESCAPE KEY
IF TECLA EQUAL 01
GO TO PEGA-CODIGO.
IF NOME EQUAL SPACES
DISPLAY "NOME INVALIDO" AT 2310
ACCEPT PARA AT 2579 WITH AUTO NO-ECHO
DISPLAY " " AT 2310
GO TO PEGA-NOME.
PEGA-ENDERECO.
DISPLAY "ENDERECO " AT 2310
ACCEPT ENDERECO AT 0925 WITH AUTO PROMPT.
ACCEPT TECLA FROM ESCAPE KEY
IF TECLA EQUAL 01
GO TO PEGA-NOME.
IF ENDERECO EQUAL SPACES
DISPLAY "ENDERECO INVALIDO" AT 2310
ACCEPT PARA AT 2579 WITH AUTO NO-ECHO
DISPLAY " " AT 2310
GO TO PEGA-ENDERECO.
PEGA-CIDADE.
DISPLAY "CIDADE " AT 2310
ACCEPT CIDADE AT 1025 WITH AUTO.
ACCEPT TECLA FROM ESCAPE KEY
IF TECLA EQUAL 01
GO TO PEGA-ENDERECO.
IF CIDADE EQUAL SPACES
DISPLAY "CIDADE INVALIDA" AT 2310
ACCEPT PARA AT 2579 WITH AUTO NO-ECHO
DISPLAY " " AT 2310
GO TO PEGA-CIDADE.
PEGA-ATIVIDADE.
DISPLAY "ATIVIDADE " AT 2310
ACCEPT ATIVIDADE AT 1125 WITH AUTO PROMPT.
ACCEPT TECLA FROM ESCAPE KEY
IF TECLA EQUAL 01
GO TO PEGA-CIDADE.
IF ATIVIDADE EQUAL SPACES
DISPLAY "ATIVIDADE INVALIDA" AT 2310
ACCEPT PARA AT 2579 WITH AUTO NO-ECHO
DISPLAY " " AT 2310
GO TO PEGA-ATIVIDADE.
PEGA-SETOR.
DISPLAY "SETOR " AT 2310
ACCEPT SETOR AT 1225 WITH AUTO PROMPT.
ACCEPT TECLA FROM ESCAPE KEY
IF TECLA EQUAL 01
GO TO PEGA-ATIVIDADE.
IF SETOR EQUAL SPACES
DISPLAY "SETOR INVALIDO" AT 2310
ACCEPT PARA AT 2579 WITH AUTO NO-ECHO
DISPLAY " " AT 2310
GO TO PEGA-SETOR.
PEGA-SALARIO.
DISPLAY "SALARIO " AT 2310
ACCEPT SALARIO-FUN AT 1325 WITH AUTO.
ACCEPT TECLA FROM ESCAPE KEY
IF TECLA EQUAL 01
GO TO PEGA-SETOR.
MOVE SALARIO-FUN TO SALARIO
IF SALARIO EQUAL ZEROS
DISPLAY "SALARIO INVALIDO" AT 2310
ACCEPT PARA AT 2579 WITH AUTO NO-ECHO
DISPLAY " " AT 2310

FromSoft – Todos os direitos reservados – http://www.fromsoft.com.br Página 157


Curso de Cobol Básico

GO TO PEGA-SALARIO.
PEGA-DATA-DE-PAGAMENTO.
DISPLAY "DATA DE PAGAMENTO " AT 2310
ACCEPT DATA-PAR AT 1425 WITH AUTO.
ACCEPT TECLA FROM ESCAPE KEY
IF TECLA EQUAL 01
GO TO PEGA-SALARIO.
PERFORM VALIDA-DATA
IF FLAG-VALIDA EQUAL "N"
DISPLAY "DATA DE PAGAMENTO INVALIDA" AT 2310
ACCEPT PARA AT 2579 WITH AUTO NO-ECHO
DISPLAY " " AT 2310
GO TO PEGA-DATA-DE-PAGAMENTO.
MOVE DATA-PAR TO DATA-PAGAMENTO.
PEGA-DATA-DE-NASCIMENTO.
DISPLAY "DATA DE NASCIMENTO " AT 2310
ACCEPT DATA-PAR AT 1525 WITH AUTO.
ACCEPT TECLA FROM ESCAPE KEY
IF TECLA EQUAL 01
GO TO PEGA-DATA-DE-PAGAMENTO.
PERFORM VALIDA-DATA
IF FLAG-VALIDA EQUAL "N"
DISPLAY "DATA DE NASCIMENTO INVALIDA" AT 2310
ACCEPT PARA AT 2579 WITH AUTO NO-ECHO
DISPLAY " " AT 2310
GO TO PEGA-DATA-DE-NASCIMENTO.
MOVE DATA-PAR TO DATA-NASCIMENTO.
PEGA-ESCOLARIDADE.
DISPLAY "ESCOLARIDADE " AT 2310
ACCEPT ESCOLARIDADE AT 1625 WITH AUTO.
ACCEPT TECLA FROM ESCAPE KEY
IF TECLA EQUAL 01
GO TO PEGA-DATA-DE-NASCIMENTO.
IF ESCOLARIDADE EQUAL SPACES
DISPLAY "ESCOLARIDADE INVALIDA" AT 2310
ACCEPT PARA AT 2579 WITH AUTO NO-ECHO
DISPLAY " " AT 2310
GO TO PEGA-ESCOLARIDADE.
PEGA-NATURALIDADE.
DISPLAY "NATURALIDADE " AT 2310
ACCEPT NATURALIDADE AT 1725 WITH AUTO.
ACCEPT TECLA FROM ESCAPE KEY
IF TECLA EQUAL 01
GO TO PEGA-ESCOLARIDADE.
IF NATURALIDADE EQUAL SPACES
DISPLAY "NATURALIDADE INVALIDA" AT 2310
ACCEPT PARA AT 2579 WITH AUTO NO-ECHO
DISPLAY " " AT 2310
GO TO PEGA-NATURALIDADE.
PEGA-NACIONALIDADE.
DISPLAY "NACIONALIDADE " AT 2310
ACCEPT NACIONALIDADE AT 1825 WITH AUTO.
ACCEPT TECLA FROM ESCAPE KEY
IF TECLA EQUAL 01
GO TO PEGA-NATURALIDADE.
IF NACIONALIDADE EQUAL SPACES
DISPLAY "NACIONALIDADE INVALIDA" AT 2310
ACCEPT PARA AT 2579 WITH AUTO NO-ECHO
DISPLAY " " AT 2310
GO TO PEGA-NACIONALIDADE.
PEGA-BAIRRO.
DISPLAY "BAIRRO " AT 2310
ACCEPT BAIRRO AT 1159 WITH AUTO.
ACCEPT TECLA FROM ESCAPE KEY
IF TECLA EQUAL 01
GO TO PEGA-NACIONALIDADE.
IF BAIRRO EQUAL SPACES
DISPLAY "BAIRRO INVALIDO" AT 2310
ACCEPT PARA AT 2579 WITH AUTO NO-ECHO
DISPLAY " " AT 2310
GO TO PEGA-BAIRRO.
PEGA-ESTADO.
DISPLAY "ESTADO " AT 2310
ACCEPT ESTADO AT 1259 WITH AUTO.
ACCEPT TECLA FROM ESCAPE KEY

FromSoft – Todos os direitos reservados – http://www.fromsoft.com.br Página 158


Curso de Cobol Básico

IF TECLA EQUAL 01
GO TO PEGA-BAIRRO.
IF ESTADO EQUAL SPACES
DISPLAY "ESTADO INVALIDO" AT 2310
ACCEPT PARA AT 2579 WITH AUTO NO-ECHO
DISPLAY " " AT 2310
GO TO PEGA-ESTADO.
PEGA-CPF.
DISPLAY "CPF " AT 2310
ACCEPT CPF-FUN AT 1359 WITH AUTO.
ACCEPT TECLA FROM ESCAPE KEY
IF TECLA EQUAL 01
GO TO PEGA-ESTADO.
MOVE CPF-FUN TO CPF
IF CPF EQUAL ZEROS
DISPLAY "CPF INVALIDO" AT 2310
ACCEPT PARA AT 2579 WITH AUTO NO-ECHO
DISPLAY " " AT 2310
GO TO PEGA-CPF.
PEGA-IDENTIDADE.
DISPLAY "IDENTIDADE " AT 2310
ACCEPT IDENTIDADE AT 1459 WITH AUTO.
ACCEPT TECLA FROM ESCAPE KEY
IF TECLA EQUAL 01
GO TO PEGA-CPF.
IF IDENTIDADE EQUAL SPACES
DISPLAY "IDENTIDADE INVALIDA" AT 2310
ACCEPT PARA AT 2579 WITH AUTO NO-ECHO
DISPLAY " " AT 2310
GO TO PEGA-IDENTIDADE.
PEGA-FILIAL.
DISPLAY "FILIAL " AT 2310
ACCEPT FILIAL AT 1559 WITH AUTO.
ACCEPT TECLA FROM ESCAPE KEY
IF TECLA EQUAL 01
GO TO PEGA-IDENTIDADE.
IF FILIAL EQUAL SPACES
DISPLAY "FILIAL INVALIDA" AT 2310
ACCEPT PARA AT 2579 WITH AUTO NO-ECHO
DISPLAY " " AT 2310
GO TO PEGA-FILIAL.
PEGA-DATA-DE-ADMISSAO.
DISPLAY "DATA DE ADMISSAO " AT 2310
ACCEPT DATA-PAR AT 1659 WITH AUTO.
ACCEPT TECLA FROM ESCAPE KEY
IF TECLA EQUAL 01
GO TO PEGA-FILIAL.
PERFORM VALIDA-DATA
IF FLAG-VALIDA EQUAL "N"
DISPLAY "DATA DE ADMISSAO INVALIDA" AT 2310
ACCEPT PARA AT 2579 WITH AUTO NO-ECHO
DISPLAY " " AT 2310
GO TO PEGA-DATA-DE-ADMISSAO.
MOVE DATA-PAR TO DATA-ADMISSAO.
PEGA-SEXO.
DISPLAY "SEXO " AT 2310
ACCEPT SEXO AT 1759 WITH AUTO.
ACCEPT TECLA FROM ESCAPE KEY
IF TECLA EQUAL 01
GO TO PEGA-DATA-DE-ADMISSAO.
IF SEXO NOT EQUAL "S" AND SEXO NOT EQUAL "M"
DISPLAY "SEXO INVALIDO" AT 2310
ACCEPT PARA AT 2579 WITH AUTO NO-ECHO
DISPLAY " " AT 2310
GO TO PEGA-SEXO.
PEGA-HORAS.
DISPLAY "HORAS DE TRABALHO " AT 2310
ACCEPT HORAS-TRABALHO-FUN AT 1859 WITH AUTO.
ACCEPT TECLA FROM ESCAPE KEY
IF TECLA EQUAL 01
GO TO PEGA-SEXO.
MOVE HORAS-TRABALHO-FUN TO HORAS-TRABALHO
IF HORAS-TRABALHO EQUAL ZEROS
DISPLAY "HORAS DE TRABALHO INVALIDA" AT 2310
ACCEPT PARA AT 2579 WITH AUTO NO-ECHO

FromSoft – Todos os direitos reservados – http://www.fromsoft.com.br Página 159


Curso de Cobol Básico

DISPLAY " " AT 2310


GO TO PEGA-HORAS.
REGRAVA-REGISTRO.
REWRITE REG-ARQFUN
IF FILE-STATUS EQUAL ZEROS
PERFORM LIMPA-TELA
GO TO INICIO
ELSE
DISPLAY "ERRO DE REGRAVACAO NO ARQUIVO" AT 2310
ACCEPT PARA AT 2579 WITH AUTO NO-ECHO
GO TO FIM
END-IF.
FIM.
PERFORM FECHA-ARQUIVO
DISPLAY " " WITH ERASE EOS BACKGROUND-COLOR 0
FOREGROUND-COLOR 7.
STOP RUN.

LIMPA-TELA.
INITIALIZE CODIGO NOME ENDERECO CIDADE ATIVIDADE SETOR
SALARIO DIA-PAGAMENTO MES-PAGAMENTO ANO-PAGAMENTO
DIA-NASCIMENTO MES-NASCIMENTO ANO-NASCIMENTO
ESCOLARIDADE NATURALIDADE NACIONALIDADE BAIRRO
ESTADO CPF IDENTIDADE FILIAL DIA-ADMISSAO
MES-ADMISSAO ANO-ADMISSAO SEXO HORAS-TRABALHO
CODIGO-FUN CPF-FUN SALARIO-FUN HORAS-TRABALHO-FUN
DIA-PAR MES-PAR ANO-PAR.

ABRE-ARQUIVO.
OPEN I-O ARQFUN
IF FILE-STATUS NOT EQUAL ZEROS
IF FILE-STATUS EQUAL "05" OR "35"
OPEN OUTPUT ARQFUN
CLOSE ARQFUN
GO TO ABRE-ARQUIVO
ELSE
DISPLAY "ERRO DE ABERTURA NO ARQUIVO" AT 2310
ACCEPT PARA AT 2579 WITH AUTO NO-ECHO
GO TO FIM
END-IF
ELSE
CONTINUE
END-IF.

FECHA-ARQUIVO.
CLOSE ARQFUN
IF FILE-STATUS EQUAL ZEROS
NEXT SENTENCE
ELSE
DISPLAY "ERRO DE FECHAMENTO DO ARQUIVO" AT 2310
ACCEPT PARA AT 2579 WITH AUTO NO-ECHO
GO TO FIM.

MOSTRA-FUNCIONARIO.
DISPLAY NOME AT 0825
DISPLAY ENDERECO AT 0925
DISPLAY CIDADE AT 1025
DISPLAY ATIVIDADE AT 1125
DISPLAY SETOR AT 1225
MOVE SALARIO TO SALARIO-FUN
DISPLAY SALARIO-FUN AT 1325
MOVE DATA-PAGAMENTO TO DATA-FUN
DISPLAY DATA-PAGAMENTO AT 1425
MOVE DATA-NASCIMENTO TO DATA-FUN
DISPLAY DATA-NASCIMENTO AT 1525
DISPLAY ESCOLARIDADE AT 1625
DISPLAY NATURALIDADE AT 1725
DISPLAY NACIONALIDADE AT 1825
DISPLAY BAIRRO AT 1159
DISPLAY ESTADO AT 1259
MOVE CPF TO CPF-FUN
DISPLAY CPF-FUN AT 1359
DISPLAY IDENTIDADE AT 1459
DISPLAY FILIAL AT 1559

FromSoft – Todos os direitos reservados – http://www.fromsoft.com.br Página 160


Curso de Cobol Básico

MOVE DATA-ADMISSAO TO DATA-FUN


DISPLAY DATA-ADMISSAO AT 1659
DISPLAY SEXO AT 1759
MOVE HORAS-TRABALHO TO HORAS-TRABALHO-FUN
DISPLAY HORAS-TRABALHO-FUN AT 1859.
FIM-MOSTRA-FUNCIONARIO. EXIT.

VALIDA-DATA.
IF DIA-PAR GREATER ZEROS AND DIA-PAR LESS 32
MOVE "S" TO FLAG-VALIDA
ELSE
MOVE "N" TO FLAG-VALIDA
END-IF
IF MES-PAR GREATER ZEROS AND MES-PAR LESS 13
IF MES-PAR EQUAL 01 OR MES-PAR EQUAL 03
OR MES-PAR EQUAL 05 OR MES-PAR EQUAL 07
OR MES-PAR EQUAL 08 OR MES-PAR EQUAL 10
OR MES-PAR EQUAL 12 AND DIA-PAR LESS 32
MOVE "S" TO FLAG-VALIDA
ELSE
IF MES-PAR EQUAL 02 AND DIA-PAR LESS 30
MOVE "S" TO FLAG-VALIDA
ELSE
IF MES-PAR EQUAL 04 OR MES-PAR EQUAL 06
OR MES-PAR EQUAL 09 OR MES-PAR EQUAL 11
MOVE "S" TO FLAG-VALIDA
ELSE
MOVE "N" TO FLAG-VALIDA
END-IF
ELSE
MOVE "N" TO FLAG-VALIDA.
Lição 12 – Exemplo 4 – Exclusão de Usuários presentes em Cadastro.

IDENTIFICATION DIVISION.
PROGRAM-ID. L12EX04.
ENVIRONMENT DIVISION.
SPECIAL-NAMES.
DECIMAL-POINT IS COMMA.
FILE-CONTROL.
SELECT ARQFUN ASSIGN TO "ARQFUNR.DAT"
ORGANIZATION IS RELATIVE
ACCESS MODE IS DYNAMIC
RELATIVE KEY IS CODIGO-ED
FILE STATUS IS FILE-STATUS.
DATA DIVISION.
FILE SECTION.
FD ARQFUN.
01 REG-ARQFUN.
03 CODIGO PIC 9(05).
03 NOME PIC X(30).
03 ENDERECO PIC X(30).
03 CIDADE PIC X(20).
03 ATIVIDADE PIC X(20).
03 SETOR PIC X(20).
03 SALARIO PIC 9(11).
03 DATA-PAGAMENTO.
05 DIA-PAGAMENTO PIC 9(02).
05 FILLER PIC X(01).
05 MES-PAGAMENTO PIC 9(02).
05 FILLER PIC X(01).
05 ANO-PAGAMENTO PIC 9(02).
03 DATA-NASCIMENTO.
05 DIA-NASCIMENTO PIC 9(02).
05 FILLER PIC X(01).
05 MES-NASCIMENTO PIC 9(02).
05 FILLER PIC X(01).
05 ANO-NASCIMENTO PIC 9(02).
03 ESCOLARIDADE PIC X(15).
03 NATURALIDADE PIC X(15).
03 NACIONALIDADE PIC X(15).
03 BAIRRO PIC X(20).
03 ESTADO PIC A(02).
03 CPF PIC 9(11).
03 IDENTIDADE PIC X(11).

FromSoft – Todos os direitos reservados – http://www.fromsoft.com.br Página 161


Curso de Cobol Básico

03 FILIAL PIC X(10).


03 DATA-ADMISSAO.
05 DIA-ADMISSAO PIC 9(02).
05 FILLER PIC X(01).
05 MES-ADMISSAO PIC 9(02).
05 FILLER PIC X(01).
05 ANO-ADMISSAO PIC 9(02).
03 SEXO PIC A(01).
03 HORAS-TRABALHO PIC 9(02).

WORKING-STORAGE SECTION.
77 CODIGO-FUN PIC ZZZZZ VALUE SPACES.
77 CODIGO-ED PIC 9(05) VALUE ZEROS.
77 SALARIO-FUN PIC ZZZ.ZZZ.ZZ9,99 VALUE SPACES.
77 CPF-FUN PIC ZZZZZZZZZ.ZZ VALUE SPACES.
77 HORAS-TRABALHO-FUN PIC ZZ VALUE ZEROS.
77 DATA-FUN PIC ZZ/ZZ/ZZ VALUE SPACES.
77 MENSAGEM PIC X(30) VALUE ZEROS.
77 FLAG-VALIDA PIC X VALUE SPACE.
77 TECLA PIC XX VALUE SPACES.
77 FILE-STATUS PIC XX VALUE SPACES.
77 PARA PIC X VALUE SPACE.
77 OPCAO PIC X VALUE SPACE.
01 DATA-PAR.
03 DIA-PAR PIC 9(02) VALUE ZEROS.
03 FILLER PIC X(01) VALUE "/".
03 MES-PAR PIC 9(02) VALUE ZEROS.
03 FILLER PIC X(01) VALUE "/".
03 ANO-PAR PIC 9(02) VALUE ZEROS.
SCREEN SECTION.
01 TELA-CADASTRO.
02 BACKGROUND-COLOR 1 FOREGROUND-COLOR 7.
03 BLANK SCREEN.
03 LINE 1 COL 1 HIGHLIGHT VALUE "ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
-"ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿".
03 LINE 2 COL 1 HIGHLIGHT VALUE "ÃÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
-"ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ´".
03 LINE 3 COL 1 HIGHLIGHT VALUE "ÃÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄCA
-"DASTRO".
03 COL 37 HIGHLIGHT VALUE "DE".
03 COL 40 HIGHLIGHT VALUE "CANDIDATOSÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
-"ÄÄÄÄÄ´".
03 LINE 4 COL 1 HIGHLIGHT VALUE "ÃÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
-"ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ´".
03 LINE 5 COL 1 HIGHLIGHT VALUE "ÃÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
-"ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ´".
03 LINE 6 COL 1 HIGHLIGHT VALUE "ÃÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
-"ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ´".
03 LINE 7 COL 1 HIGHLIGHT VALUE "ÃÄ".
03 COL 4 HIGHLIGHT VALUE "CODIGO.............:".
03 COL 79 HIGHLIGHT VALUE "Ä´".
03 LINE 8 COL 1 HIGHLIGHT VALUE "ÃÄ".
03 COL 4 HIGHLIGHT VALUE "NOME...............:".
03 COL 79 HIGHLIGHT VALUE "Ä´".
03 LINE 9 COL 1 HIGHLIGHT VALUE "ÃÄ".
03 COL 4 HIGHLIGHT VALUE "ENDERECO...........:".
03 COL 79 HIGHLIGHT VALUE "Ä´".
03 LINE 10 COL 1 HIGHLIGHT VALUE "ÃÄ".
03 COL 4 HIGHLIGHT VALUE "CIDADE.............:".
03 COL 79 HIGHLIGHT VALUE "Ä´".
03 LINE 11 COL 1 HIGHLIGHT VALUE "ÃÄ".
03 COL 4 HIGHLIGHT VALUE "ATIVIDADE..........:".
03 COL 46 HIGHLIGHT VALUE "BAIRRO.....:".
03 COL 79 HIGHLIGHT VALUE "Ä´".
03 LINE 12 COL 1 HIGHLIGHT VALUE "ÃÄ".
03 COL 4 HIGHLIGHT VALUE "SETOR..............:".
03 COL 46 HIGHLIGHT VALUE "ESTADO.....:".
03 COL 79 HIGHLIGHT VALUE "Ä´".
03 LINE 13 COL 1 HIGHLIGHT VALUE "ÃÄ".
03 COL 4 HIGHLIGHT VALUE "SALARIO............:".
03 COL 46 HIGHLIGHT VALUE "CPF........:".
03 COL 79 HIGHLIGHT VALUE "Ä´".
03 LINE 14 COL 1 HIGHLIGHT VALUE "ÃÄ".
03 COL 4 HIGHLIGHT VALUE "DATA".
03 COL 9 HIGHLIGHT VALUE "DE".

FromSoft – Todos os direitos reservados – http://www.fromsoft.com.br Página 162


Curso de Cobol Básico

03 COL 12 HIGHLIGHT VALUE "PAGAMENTO..:".


03 COL 27 HIGHLIGHT VALUE "/".
03 COL 30 HIGHLIGHT VALUE "/".
03 COL 46 HIGHLIGHT VALUE "IDENTIDADE.:".
03 COL 79 HIGHLIGHT VALUE "Ä´".
03 LINE 15 COL 1 HIGHLIGHT VALUE "ÃÄ".
03 COL 4 HIGHLIGHT VALUE "DATA".
03 COL 9 HIGHLIGHT VALUE "DE".
03 COL 12 HIGHLIGHT VALUE "NASCIMENTO.:".
03 COL 27 HIGHLIGHT VALUE "/".
03 COL 30 HIGHLIGHT VALUE "/".
03 COL 46 HIGHLIGHT VALUE "FILIAL.....:".
03 COL 79 HIGHLIGHT VALUE "Ä´".
03 LINE 16 COL 1 HIGHLIGHT VALUE "ÃÄ".
03 COL 4 HIGHLIGHT VALUE "ESCOLARIDADE.......:".
03 COL 46 HIGHLIGHT VALUE "ADMISSAO...:".
03 COL 61 HIGHLIGHT VALUE "/".
03 COL 64 HIGHLIGHT VALUE "/".
03 COL 79 HIGHLIGHT VALUE "Ä´".
03 LINE 17 COL 1 HIGHLIGHT VALUE "ÃÄ".
03 COL 4 HIGHLIGHT VALUE "NATURALIDADE.......:".
03 COL 46 HIGHLIGHT VALUE "SEXO.......:".
03 COL 79 HIGHLIGHT VALUE "Ä´".
03 LINE 18 COL 1 HIGHLIGHT VALUE "ÃÄ".
03 COL 4 HIGHLIGHT VALUE "NACIONALIDADE......:".
03 COL 46 HIGHLIGHT VALUE "HORAS/DIA..:".
03 COL 79 HIGHLIGHT VALUE "Ä´".
03 LINE 19 COL 1 HIGHLIGHT VALUE "ÃÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
-"ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ´".
03 LINE 20 COL 1 HIGHLIGHT VALUE "ÃÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
-"ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ´".
03 LINE 21 COL 1 HIGHLIGHT VALUE "ÃÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
-"ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ´".
03 LINE 22 COL 1 HIGHLIGHT VALUE "ÃÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
-"ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ´".
03 LINE 23 COL 1 HIGHLIGHT VALUE "³INFORME".
03 COL 80 HIGHLIGHT VALUE "³".
03 LINE 24 COL 1 HIGHLIGHT VALUE "ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
-"ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ".
03 LINE 25 COL 1 BACKGROUND-COLOR 0 HIGHLIGHT VALUE "
-"
-" ".

PROCEDURE DIVISION.
PERFORM ABRE-ARQUIVO.
INICIO.
DISPLAY TELA-CADASTRO.
PERFORM LIMPA-TELA.
PEGA-CODIGO.
DISPLAY "CODIGO " AT 2310.
ACCEPT CODIGO-FUN AT 0725 WITH AUTO PROMPT
ACCEPT TECLA FROM ESCAPE KEY
IF TECLA EQUAL 01
GO TO FIM.
MOVE CODIGO-FUN TO CODIGO-ED
IF CODIGO-ED EQUAL ZEROS
DISPLAY "CODIGO INVALIDO" AT 2310
ACCEPT PARA AT 2579 WITH AUTO NO-ECHO
DISPLAY " " AT 2310
* PERFORM FECHA-ARQUIVO
GO TO PEGA-CODIGO.
READ ARQFUN INVALID KEY
DISPLAY "CODIGO NAO CADASTRADO" AT 2310
ACCEPT PARA AT 2579 WITH AUTO NO-ECHO
DISPLAY " " AT 2310
PERFORM LIMPA-TELA
GO TO PEGA-CODIGO
NOT INVALID KEY
PERFORM MOSTRA-FUNCIONARIO THRU FIM-MOSTRA-FUNCIONARIO
PERFORM LIMPA-TELA
GO TO PEGA-CODIGO.
FIM-PEGA-CODIGO. EXIT.

MOSTRA-FUNCIONARIO.
DISPLAY NOME AT 0825

FromSoft – Todos os direitos reservados – http://www.fromsoft.com.br Página 163


Curso de Cobol Básico

DISPLAY ENDERECO AT 0925


DISPLAY CIDADE AT 1025
DISPLAY ATIVIDADE AT 1125
DISPLAY SETOR AT 1225
MOVE SALARIO TO SALARIO-FUN
DISPLAY SALARIO-FUN AT 1325
MOVE DATA-PAGAMENTO TO DATA-FUN
DISPLAY DATA-PAGAMENTO AT 1425
MOVE DATA-NASCIMENTO TO DATA-FUN
DISPLAY DATA-NASCIMENTO AT 1525
DISPLAY ESCOLARIDADE AT 1625
DISPLAY NATURALIDADE AT 1725
DISPLAY NACIONALIDADE AT 1825
DISPLAY BAIRRO AT 1159
DISPLAY ESTADO AT 1259
MOVE CPF TO CPF-FUN
DISPLAY CPF-FUN AT 1359
DISPLAY IDENTIDADE AT 1459
DISPLAY FILIAL AT 1559
MOVE DATA-ADMISSAO TO DATA-FUN
DISPLAY DATA-ADMISSAO AT 1659
DISPLAY SEXO AT 1759
MOVE HORAS-TRABALHO TO HORAS-TRABALHO-FUN
DISPLAY HORAS-TRABALHO-FUN AT 1859
PERFORM EXCLUI-REGISTRO.
FIM-MOSTRA-FUNCIONARIO. EXIT.

FIM.
PERFORM FECHA-ARQUIVO
DISPLAY " " WITH ERASE EOS BACKGROUND-COLOR 0
FOREGROUND-COLOR 7.
STOP RUN.

LIMPA-TELA.
INITIALIZE CODIGO NOME ENDERECO CIDADE ATIVIDADE SETOR
SALARIO DIA-PAGAMENTO MES-PAGAMENTO ANO-PAGAMENTO
DIA-NASCIMENTO MES-NASCIMENTO ANO-NASCIMENTO
ESCOLARIDADE NATURALIDADE NACIONALIDADE BAIRRO
ESTADO CPF IDENTIDADE FILIAL DIA-ADMISSAO
MES-ADMISSAO ANO-ADMISSAO SEXO HORAS-TRABALHO
CODIGO-FUN CPF-FUN SALARIO-FUN HORAS-TRABALHO-FUN
DIA-PAR MES-PAR ANO-PAR
DISPLAY " " AT 0825
DISPLAY " " AT 0925
DISPLAY " " AT 1025
DISPLAY " " AT 1125
DISPLAY " " AT 1225
DISPLAY " " AT 1325
DISPLAY " / / " AT 1425
DISPLAY " / / " AT 1525
DISPLAY " " AT 1625
DISPLAY " " AT 1725
DISPLAY " " AT 1825
DISPLAY " " AT 1159
DISPLAY " " AT 1259
DISPLAY " " AT 1359
DISPLAY " " AT 1459
DISPLAY " " AT 1559
DISPLAY " / / " AT 1659
DISPLAY " " AT 1759
DISPLAY " " AT 1859.

ABRE-ARQUIVO.
OPEN I-O ARQFUN
IF FILE-STATUS EQUAL ZEROS
CONTINUE
ELSE
DISPLAY "ERRO DE ABERTURA NO ARQUIVO" AT 2310
ACCEPT PARA AT 2579 WITH AUTO NO-ECHO
GO TO FIM.

FECHA-ARQUIVO.
CLOSE ARQFUN
IF FILE-STATUS EQUAL ZEROS

FromSoft – Todos os direitos reservados – http://www.fromsoft.com.br Página 164


Curso de Cobol Básico

NEXT SENTENCE
ELSE
DISPLAY "ERRO DE FECHAMENTO DO ARQUIVO" AT 2310
ACCEPT PARA AT 2579 WITH AUTO NO-ECHO
GO TO FIM.

EXCLUI-REGISTRO.
DISPLAY "VOCE DESEJA FAZER A EXCLUSAO?(S/N)" AT 2310
ACCEPT OPCAO AT 2344 WITH AUTO UPPER
IF OPCAO EQUAL "S"
DELETE ARQFUN
IF FILE-STATUS EQUAL ZEROS
CONTINUE
ELSE
DISPLAY "ERRO DE DELECAO DO REGISTRO" AT 2310
ACCEPT PARA AT 2579 WITH AUTO NO-ECHO
GO TO FIM
END-IF
ELSE
IF OPCAO EQUAL "N"
CONTINUE
END-IF.

Lição 12 - Exercícios

Arquivos Relativos.
larqrel.cpy – Estrutura do Arquivo Relativo.cpy
larqrel.cpy – Layout do Arquivo Relativo.cpy
P.S – A Relative key é o código.

Nome de arquivo: Arqfunr.


Nome de Arquivo Físico: arqfunr.dat
Organização: Relativo
Modo de Acesso: Randômico
Variavel de File Status: File-Status.
Nome de registro de FD: Reg-Arqfunr
Variável de Chave-Relativa na working-storage section: Codigo-Relativo.

1. Copiar o PROG24.CBL criando um programa de nome PROG30.CBL alterando a estrutura o layout e


a programação do programa para fazer inclusão de registros com arquivos do tipo RELATIVE. Use os
Layouts criados na lição 10.
- O nome externo do arquivo deverá ser “ARQFUNR.DAT”

Após cadastrar alguns funcionários, fazer:


- editar o arquivo ARQFUNR.DAT (com o Edit do DOS ou outro editor de texto qualquer) e verificar
como os dados foram gravados nele.
- sair do programa, entrar novamente e cadastrar novos funcionários
- editar novamente o arquivo e verificar se acrescentou esses novos funcionários após os anteriores.

2. Copiar o PROG25.CBL criando um programa de nome PROG31.CBL alterando a estrutura o layout e


a programação do programa para fazer consulta de registros com arquivos do tipo RELATIVE. Para
testar a leitura, lembrar que no arquivo RELATIVE você pede lê os registros pela sua posição relativa no
arquivo, ou seja, o 1o, o 10o, o 5o, etc., aquele que estiver sendo indicado no campo declarado como
RELATIVE KEY.

3. Copiar o PROG26.CBL criando um programa de nome PROG32.CBL alterando a estrutura o layout e


a programação do programa para fazer alteração de registros com arquivos do tipo RELATIVE.

4. Copiar o PROG25.CBL criando um programa de nome PROG33.CBL alterando a estrutura o layout e


a programação do programa para fazer exclusão com arquivos do tipo RELATIVE. Nota: O arquivo
PROG25.CBL é para fazer a consulta, então será necessário você adaptar o código para além de ele
fazer a consulta, ele fazer um prompt de exclusão "Deseja excluir o cliente?". Se sim ele exclui o
registro, Senão ele volta para o codigo do Funcionário.

FromSoft – Todos os direitos reservados – http://www.fromsoft.com.br Página 165


Curso de Cobol Básico

Lição 13

Lição 13 - Conceitos

13.1 - Trabalhando com arquivos: Arquivo Indexado

Conceito: Na construção de aplicações que utilizam o conceito “on-line”, ou seja, registro


imediato das informações e necessidade de recuperação instantânea dessas informações, o tipo de
arquivo ideal é o indexado. Isto porque, quando o usuário faz uma escolha numa lista ou informa uma
chave (um “índice”), podemos programar o aplicativo para acessar diretamente o registro
correspondente à escolha/chave solicitada, sabendo-se de imediato se existe ou não o registro no
arquivo e, caso exista, podermos manusear os dados desse registro (incluir, consultar, modificar ou
excluir).

13.1.1 - Modo de acesso

Conceito: Quando queremos ler dados de um arquivo, devemos definir na SELECT a forma como o
arquivo será acessado pois além de otimizarmos a performance da aplicação, podemos restringir as
operações no arquivo.
Quando vamos emitir uma listagem do Cadastro de Funcionários, por exemplo, usamos a cláusula
ACCESS MODE IS SEQUENTIAL para indicar que o arquivo será lido de forma seqüencial, ou seja, na
ordem de seqüência das chaves. Podemos definir também ACCESS MODE IS RANDOM, quando
vamos buscar registros indicando a chave de acesso para o programa via RELATIVE KEY, ou ainda
ACCESS MODE IS DYNAMIC, que permite o acesso das duas formas acima, via READ NEXT ou via
READ com RECORD KEY. É exatamente igual ao arquivo Relativo, só que agora, usa-se uma
RECORD KEY e não uma RELATIVE KEY.

13.1.2 - Controle de acesso

Conceito: Devemos também definir como ficará o acesso ao arquivo por outros usuários, utilizando a
cláusula LOCK MODE IS AUTOMATIC para indicar que o travamento deverá ser feito automaticamente
de acordo com o “default” definido para cada comando, ou LOCK MODE IS MANUAL quando se quer
indicar que o travamento deve ficar a cargo do programador. Pode-se usar também o LOCK MODE IS
EXCLUSIVE, que trava exclusivamente o registro para quem abriu o arquivo. É exatamente igual ao
arquivo Relativo.

13.1.3 - Chave para acesso

Conceito: Juntamente com o Arquivo Relativo, implanta-se um novo conceito, o conceito de uma
variável mestre, denominada chave, que controla todo o registro. Com isso, ganha-se em performance e
produtividade. Geralmente essa chave é a variável Codigo, que é tanto usada em todos os sistemas
Comerciais. A diferença entre o Arquivo Relativo e o Indexado, é que você tem no arquivo indexado
uma chave indexada, que você determina um indice, para acessar, enquanto no arquivo relativo, você
tem uma chave relativa, e o valor da chave relativa é a posição da chave no arquivo relativo e você não
pode mudar esta chave relativa.

13.2 - Comandos usados em um arquivo INDEXED

13.2.1 - O comando OPEN com cláusula INPUT

Conceito: utilizamos o comando OPEN INPUT para abrir arquivos já existentes apenas para leitura.

13.2.2 - O comando OPEN com cláusula OUTPUT

Conceito: utilizamos o comando OPEN OUTPUT para criar arquivos.

13.2.3 - O comando OPEN com cláusula I-O

FromSoft – Todos os direitos reservados – http://www.fromsoft.com.br Página 166


Curso de Cobol Básico

Conceito: quando queremos fazer leitura e gravação em um arquivo sequencial, indexado ou relativo,
primeiro é necessário abri-lo com o comando OPEN e cláusula I-O (Input - Output).

13.2.4 - O comando READ com cláusula NEXT

Conceito: O Arquivo Indexado reage exatamente igual ao Arquivo Relativo.

13.2.5 - Cláusula INVALID KEY

Conceito: O Arquivo Indexado reage exatamente igual ao Arquivo Relativo.

13.2.6 - Declaração da(s) chave(s):

Conceito: Devemos indicar para o arquivo qual a sua chave principal com a cláusula RECORD KEY IS
na SELECT. È obrigatória a definição em um arquivo indexado de uma chave principal, sendo que essa
chave será a identificação única para um registro no arquivo, ou seja, cada registro terá sua
identificação única informada nessa chave. Ao gravarmos um novo registro no arquivo, ele não poderá
ter a chave principal de outro gravado anteriormente.

13.2.7 - Chaves Secundárias

Conceito: Ainda na SELECT podemos declarar chaves secundárias para o arquivo, com a cláusula
ALTERNATE RECORD KEY, sendo que estas podem ter duplicidade no arquivo, desde que seja
declarada a cláusula WITH DUPLICATES.

13.2.8 – O comando START

Conceito: Comando que permite posicionar o ponteiro em uma determinada chave para que o
registro referente a essa chave possa ser lido posteriormente com um comando READ. Não pode ser
utilizado em arquivos de organização SEQUENTIAL ou LINE SEQUENTIAL. Pode ser usado com as
seguintes cláusulas:

KEY IS – indica que irá posicionar na chave escolhida


KEY IS GREATER – indica que irá posicionar na chave do primeiro registro que seja maior que
o informado.
KEY IS LESS – Indica que irá posicionar na chave do primeiro registro que seja menor que o
informado.
KEY IS NOT GREATER – Indica que irá posicionar na chave do ultimo registro que seja menor
ou igual que o informado. Pode ser substituído por KEY IS LESS OR EQUAL (ex: usado para buscar a
última chave do arquivo)
KEY IS NOT LESS – Indica que irá posicionar na chave do primeiro registro que seja maior ou
igual que o informado. Pode ser substituído por KEY IS GREATER OR EQUAL (ex: usado para buscar a
primeira chave do arquivo)

MOVE 5 TO CODIGO-FUNCIONARIO
START NOME-DO-ARQUIVO KEY IS CODIGO-FUNCIONARIO.
READ NOME-DO-ARQUIVO.

MOVE 5 TO CODIGO-FUNCIONARIO
START NOME-DO-ARQUIVO KEY IS GREATER CODIGO-FUNCIONARIO.
READ NOME-DO-ARQUIVO NEXT AT END ...

MOVE 2 TO CODIGO-FUNCIONARIO
START NOME-DO-ARQUIVO KEY IS LESS CODIGO-FUNCIONARIO.
READ NOME-DO-ARQUIVO PREVIOUS AT END ...

MOVE HIGH-VALUE TO CODIGO-FUNCIONARIO


START NOME-DO-ARQUIVO KEY IS NOT GREATER CODIGO-FUNCIONARIO.

MOVE LOW-VALUE TO CODIGO-FUNCIONARIO


START NOME-DO-ARQUIVO KEY IS NOT LESS CODIGO-FUNCIONARIO.

FromSoft – Todos os direitos reservados – http://www.fromsoft.com.br Página 167


Curso de Cobol Básico

MOVE HIGH-VALUE TO CODIGO-FUNCIONARIO


START NOME-DO-ARQUIVO KEY IS LESS OR EQUAL CODIGO-FUNCIONARIO.

MOVE LOW-VALUE TO CODIGO-FUNCIONARIO


START NOME-DO-ARQUIVO KEY IS GREATER OR EQUAL CODIGO-FUNCIONARIO.

13.2.9 - Cláusula INVALID KEY (no START)

Conceito: Esta cláusula, quando utilizada no comando START acontece quando a chave especificada
não encontra condição para satisfazer a cláusula apresentada no comando (ex.: <CHAVE> GREATER
<REFERENCIA>).

Ex.: Agora nossa analogia será com o nosso Arquivo de Funcionários físico definitivo – arquivo ideal,
organizado em pastas (registros) colocadas no arquivo em ordem alfabética (chave secundária).
Quando o chefe pedisse ao “arquivista” para atualizar o Estado Civil do funcionário, este poderia fazer
tudo conforme explanado na analogia anterior, só que agora teria acesso mais rápido à pasta do
funcionário, porque o arquivo está organizado em ordem alfabética. Além disso, se o funcionário se
chamar “José” e existirem vários funcionários no arquivo com nome “José”, ele pode ir direto na primeira
pasta com nome de José (START compondo a chave com “José”) e pesquisar pasta por pasta (READ
NEXT) até encontrar o interessado.

13.3 - Demonstração de um arquivo INDEXED

Se você editar um arquivo sequencial, provavelmente irá encontrar a seguinte estrutura: Este
arquivo em exemplo tem 3 registros.

Arquivo de Dados (*.dat)

0~ 0112212020280901122120202809 > ˆ ´ ë ë ¯
A •Ö @ë00001FROMSOFT 01 01 89M3§ GRAU BELO
HORIZONTE BRASILEIRA 001 001 001 01N/A AV DOS ANDRADAS 02287STA
EFIGENIA BELO HORIZONTE MG(31) 3241-6882 SALA 1204 @ë00002APS
01 01 79M3§ GRAU BELO HORIZONTE BRASILEIRA 001 001 001 01N/A
AV DOS ANDRADAS 02287STA EFIGENIA BELO HORIZONTE MG(31) 3241-6882 SALA 1205
@ë00003MEUSAPLICATIVOS.COM 01 01 01M2§ GRAU BELO HORIZONTE BRASILEIRA
001 001 001 01N/A AV DOS ANDRADAS 02287STA EFIGENIA BELO HORIZONTE
MG(31) 3241-6882 SALA 1205 X ë00004BLA 01 01 00MBLA
BLA BLA0 010 100 101 01BLA BLA; 00001BLA
BLA BLa BLA

Arquivo de Indices (*.idx)

3þ 0112212020280901122120280095 > ˆ ˜ ë ë ¯
˘A •ÖA •Ö • ¯@ˆˆ¯¯ ´ ˆ ¯ ˜þ

• ˚ ˘

ÿ~  
  

˜P12212020280901122120280095 > ˆ ˜ ë ë ¯
¯A •ÖA •Ö ¯@ˆˆ¯¯ ´ ˆ ¯ ˜þ

þÿ

Veja que agora é impossível visualizar os registros, pois o arquivo de indices tem uma
referência ao arquivo de dados e vice-versa. Tanto que nem é possível separar os registros.

FromSoft – Todos os direitos reservados – http://www.fromsoft.com.br Página 168


Curso de Cobol Básico

13.4 - Como ler um arquivo INDEXED.

O Modo de leitura indixado, consiste na chave do registro ou então chamada de record key. A
mesma é indicada na estrutura do arquivo. A chave do registro é uma chave que fica declarada dentro
da própria fd do arquivo e esta tem como objetivo fazer a leitura do registro. Então para você ler um
registro indexado, você deve indicar o valor do código que você quiser para a chave indexada, depois
então ler o arquivo. O arquivo indexado, tem o conceito de Chave, tanto que na inclusão, você pode
barrar o cadastro do usuário se por um acaso já existe um código igual no arquivo ao digitado. É o
arquivo mais usado pelos programadores COBOL, devido a sua velocidade em arquivos, é o mais
usado em bancos, empresas, etc e pode suportar até 4GB em apenas 1 Único Arquivo.(COBOL Micro
Focus). A sua filosofia é extremamente igual ao arquivo relativo, mas ele tem duas mudanças radicais:
- Não possui chave relativa e sim Indexada. A Chave relativa fica na working-storage section, enquanto
que a chave indexada fica dentro da fd do arquivo.
- O Arquivo indexado tem o conceito de índice. O índice é um melhoramento do conceito chave, pois a
partir de agora, há um arquivo específico de índices e um arquivo específicos de dados, enquanto que
antes não existia indices. (Arquivos de dados - *.dat) (Arquivos de Índices - *.idx), o que proporciona
uma maior velocidade, visto que a distribuição de informações irá ficar maior. Nos exemplos de arquivos
anteriores, você podia editar o arquivo e visualizar o seu conteúdo, mas a partir de agora você não pode
fazer isto mais, pois como o conteúdo de índice e o conteúdo de dados são separados, há uma
codificação específica para fazer este tipo de leitura.

O arquivo indexado, já tem o conceito de Chave, tanto que na inclusão, você pode barrar o cadastro do
usuário se por um acaso já existe um código igual no arquivo ao digitado. Veja que aqui você não
precisa ficar fechando e abrindo o arquivo para fazer a leitura do mesmo. E além disso você não precisa
Ter uma chave-relativa fora da sua fd. Ex:

PEGA-CODIGO.
ACCEPT CODIGO-MASCARA AT 1015
MOVE CODIGO-MASCARA TO CHAVE
READ ARQFUN INVALID KEY
CONTINUE
NOT INVALID KEY
DISPLAY "CODIGO JA CADASTRADO" AT 2310
ACCEPT PARA AT 2579 WITH AUTO NO-ECHO
DISPLAY " " AT 2310
PERFORM LIMPA-TELA
GO TO PEGA-CODIGO
END-READ.

P.S - Este exemplo pode ser bem usado na criação de um cadastro, veja que ele lê com o atributo de
invalid key (testando se a chave é invalida) se a chave for invalida, ou seja, a chave/código não existe,
ele permite passar, caso seja not invalid key (chave não inválida), ou seja, a chave/codigo existe, ele
não permite passar mostrando para o usuário uma mensagem de "código já cadastrado" e voltando para
o procedure-name pega-codigo. Podemos usá-lo deste modo.
PEGA-CODIGO.
ACCEPT CODIGO-MASCARA AT 1015
MOVE CODIGO-MASCARA TO CHAVE
READ ARQFUN INVALID KEY
DISPLAY "CODIGO JA CADASTRADO" AT 2310
ACCEPT PARA AT 2579 WITH AUTO NO-ECHO
DISPLAY " " AT 2310
PERFORM LIMPA-TELA
GO TO PEGA-CODIGO.
NOT INVALID KEY
DISPLAY NOME AT 1115
DISPLAY ENDERECO AT 1215
DISPLAY TELEFONE AT 1315
DISPLAY CEP AT 1415
DISPLAY CGC-CNPJ AT 1515
END-READ.

Veja que agora é ao contrário do exemplo anterior agora se for invalid key, ou seja
chave/código inválido ele mostra "Código inválido" e volta para o procedure-name pega-codigo. Se não

FromSoft – Todos os direitos reservados – http://www.fromsoft.com.br Página 169


Curso de Cobol Básico

for chave inválida, ele mostra os dados daquele registro. Este tipo de rotina é muito usado em consultas
em geral.

13.5 - Vantagens do arquivo relativo em relação aos arquivo Relativo.

- Chave Indexada
- Nao Ter uma Chave-Relativa fora da FD.
- Tamanho do Arquivo

13.6 - Observações

Para se usar arquivos indexados, deve-se linkar uma nova biblioteca: Chama-se extfh
(Extensible file handler). Quando for fazer o link, deve-se fazer o link com os seguintes parâmetros:

LINK NOME-DO-PROGRAMA+ADIS+ADISKEY+ADISINIT+ADISDYNA+EXTFH;

Lição 13 – Exemplo 1 – Cadastro de Usuarios.

IDENTIFICATION DIVISION.
PROGRAM-ID. L13EX08.
ENVIRONMENT DIVISION.
SPECIAL-NAMES.
DECIMAL-POINT IS COMMA.
FILE-CONTROL.
SELECT ARQFUN ASSIGN TO "ARQFUNI.DAT"
ORGANIZATION IS INDEXED
ACCESS MODE IS DYNAMIC
RECORD KEY IS CODIGO
ALTERNATE RECORD KEY IS NOME WITH DUPLICATES
FILE STATUS IS FILE-STATUS.
DATA DIVISION.
FILE SECTION.
FD ARQFUN.
01 REG-ARQFUN.
03 CODIGO PIC 9(05).
03 NOME PIC X(30).
03 ENDERECO PIC X(30).
03 CIDADE PIC X(20).
03 ATIVIDADE PIC X(20).
03 SETOR PIC X(20).
03 SALARIO PIC 9(11).
03 DATA-PAGAMENTO.
05 DIA-PAGAMENTO PIC 9(02).
05 FILLER PIC X(01).
05 MES-PAGAMENTO PIC 9(02).
05 FILLER PIC X(01).
05 ANO-PAGAMENTO PIC 9(02).
03 DATA-NASCIMENTO.
05 DIA-NASCIMENTO PIC 9(02).
05 FILLER PIC X(01).
05 MES-NASCIMENTO PIC 9(02).
05 FILLER PIC X(01).
05 ANO-NASCIMENTO PIC 9(02).
03 ESCOLARIDADE PIC X(15).
03 NATURALIDADE PIC X(15).
03 NACIONALIDADE PIC X(15).
03 BAIRRO PIC X(20).
03 ESTADO PIC A(02).
03 CPF PIC 9(11).
03 IDENTIDADE PIC X(11).
03 FILIAL PIC X(10).
03 DATA-ADMISSAO.
05 DIA-ADMISSAO PIC 9(02).
05 FILLER PIC X(01).
05 MES-ADMISSAO PIC 9(02).
05 FILLER PIC X(01).
05 ANO-ADMISSAO PIC 9(02).
03 SEXO PIC A(01).
03 HORAS-TRABALHO PIC 9(02).

FromSoft – Todos os direitos reservados – http://www.fromsoft.com.br Página 170


Curso de Cobol Básico

WORKING-STORAGE SECTION.
77 CODIGO-FUN PIC ZZZZZ VALUE SPACES.
77 SALARIO-FUN PIC ZZZ.ZZZ.ZZ9,99 VALUE SPACES.
77 CPF-FUN PIC ZZZZZZZZZ.ZZ VALUE SPACES.
77 HORAS-TRABALHO-FUN PIC ZZ VALUE SPACES.
77 MENSAGEM PIC X(30) VALUE ZEROS.
77 FLAG-VALIDA PIC X VALUE SPACE.
77 TECLA PIC XX VALUE SPACES.
77 FILE-STATUS PIC XX VALUE SPACES.
77 PARA PIC X VALUE SPACES.
01 DATA-PAR.
03 DIA-PAR PIC 9(02) VALUE ZEROS.
03 FILLER PIC X(01) VALUE "/".
03 MES-PAR PIC 9(02) VALUE ZEROS.
03 FILLER PIC X(01) VALUE "/".
03 ANO-PAR PIC 9(02) VALUE ZEROS.
SCREEN SECTION.
01 TELA-CADASTRO.
02 BACKGROUND-COLOR 1 FOREGROUND-COLOR 7.
03 BLANK SCREEN.
03 LINE 1 COL 1 HIGHLIGHT VALUE "ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
-"ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿".
03 LINE 2 COL 1 HIGHLIGHT VALUE "ÃÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
-"ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ´".
03 LINE 3 COL 1 HIGHLIGHT VALUE "ÃÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄCA
-"DASTRO".
03 COL 37 HIGHLIGHT VALUE "DE".
03 COL 40 HIGHLIGHT VALUE "CANDIDATOSÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
-"ÄÄÄÄÄ´".
03 LINE 4 COL 1 HIGHLIGHT VALUE "ÃÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
-"ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ´".
03 LINE 5 COL 1 HIGHLIGHT VALUE "ÃÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
-"ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ´".
03 LINE 6 COL 1 HIGHLIGHT VALUE "ÃÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
-"ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ´".
03 LINE 7 COL 1 HIGHLIGHT VALUE "ÃÄ".
03 COL 4 HIGHLIGHT VALUE "CODIGO.............:".
03 COL 79 HIGHLIGHT VALUE "Ä´".
03 LINE 8 COL 1 HIGHLIGHT VALUE "ÃÄ".
03 COL 4 HIGHLIGHT VALUE "NOME...............:".
03 COL 79 HIGHLIGHT VALUE "Ä´".
03 LINE 9 COL 1 HIGHLIGHT VALUE "ÃÄ".
03 COL 4 HIGHLIGHT VALUE "ENDERECO...........:".
03 COL 79 HIGHLIGHT VALUE "Ä´".
03 LINE 10 COL 1 HIGHLIGHT VALUE "ÃÄ".
03 COL 4 HIGHLIGHT VALUE "CIDADE.............:".
03 COL 79 HIGHLIGHT VALUE "Ä´".
03 LINE 11 COL 1 HIGHLIGHT VALUE "ÃÄ".
03 COL 4 HIGHLIGHT VALUE "ATIVIDADE..........:".
03 COL 46 HIGHLIGHT VALUE "BAIRRO.....:".
03 COL 79 HIGHLIGHT VALUE "Ä´".
03 LINE 12 COL 1 HIGHLIGHT VALUE "ÃÄ".
03 COL 4 HIGHLIGHT VALUE "SETOR..............:".
03 COL 46 HIGHLIGHT VALUE "ESTADO.....:".
03 COL 79 HIGHLIGHT VALUE "Ä´".
03 LINE 13 COL 1 HIGHLIGHT VALUE "ÃÄ".
03 COL 4 HIGHLIGHT VALUE "SALARIO............:".
03 COL 46 HIGHLIGHT VALUE "CPF........:".
03 COL 79 HIGHLIGHT VALUE "Ä´".
03 LINE 14 COL 1 HIGHLIGHT VALUE "ÃÄ".
03 COL 4 HIGHLIGHT VALUE "DATA".
03 COL 9 HIGHLIGHT VALUE "DE".
03 COL 12 HIGHLIGHT VALUE "PAGAMENTO..:".
03 COL 27 HIGHLIGHT VALUE "/".
03 COL 30 HIGHLIGHT VALUE "/".
03 COL 46 HIGHLIGHT VALUE "IDENTIDADE.:".
03 COL 79 HIGHLIGHT VALUE "Ä´".
03 LINE 15 COL 1 HIGHLIGHT VALUE "ÃÄ".
03 COL 4 HIGHLIGHT VALUE "DATA".
03 COL 9 HIGHLIGHT VALUE "DE".
03 COL 12 HIGHLIGHT VALUE "NASCIMENTO.:".
03 COL 27 HIGHLIGHT VALUE "/".
03 COL 30 HIGHLIGHT VALUE "/".
03 COL 46 HIGHLIGHT VALUE "FILIAL.....:".
03 COL 79 HIGHLIGHT VALUE "Ä´".

FromSoft – Todos os direitos reservados – http://www.fromsoft.com.br Página 171


Curso de Cobol Básico

03 LINE 16 COL 1 HIGHLIGHT VALUE "ÃÄ".


03 COL 4 HIGHLIGHT VALUE "ESCOLARIDADE.......:".
03 COL 46 HIGHLIGHT VALUE "ADMISSAO...:".
03 COL 61 HIGHLIGHT VALUE "/".
03 COL 64 HIGHLIGHT VALUE "/".
03 COL 79 HIGHLIGHT VALUE "Ä´".
03 LINE 17 COL 1 HIGHLIGHT VALUE "ÃÄ".
03 COL 4 HIGHLIGHT VALUE "NATURALIDADE.......:".
03 COL 46 HIGHLIGHT VALUE "SEXO.......:".
03 COL 79 HIGHLIGHT VALUE "Ä´".
03 LINE 18 COL 1 HIGHLIGHT VALUE "ÃÄ".
03 COL 4 HIGHLIGHT VALUE "NACIONALIDADE......:".
03 COL 46 HIGHLIGHT VALUE "HORAS/DIA..:".
03 COL 79 HIGHLIGHT VALUE "Ä´".
03 LINE 19 COL 1 HIGHLIGHT VALUE "ÃÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
-"ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ´".
03 LINE 20 COL 1 HIGHLIGHT VALUE "ÃÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
-"ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ´".
03 LINE 21 COL 1 HIGHLIGHT VALUE "ÃÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
-"ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ´".
03 LINE 22 COL 1 HIGHLIGHT VALUE "ÃÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
-"ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ´".
03 LINE 23 COL 1 HIGHLIGHT VALUE "³INFORME".
03 COL 80 HIGHLIGHT VALUE "³".
03 LINE 24 COL 1 HIGHLIGHT VALUE "ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
-"ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ".
03 LINE 25 COL 1 BACKGROUND-COLOR 0 HIGHLIGHT VALUE "
-"
-" ".

PROCEDURE DIVISION.
ABRE-ARQUIVO.
OPEN I-O ARQFUN
IF FILE-STATUS NOT EQUAL ZEROS
IF FILE-STATUS EQUAL "05" OR "35"
OPEN OUTPUT ARQFUN
CLOSE ARQFUN
GO TO ABRE-ARQUIVO
ELSE
DISPLAY "ERRO DE ABERTURA NO ARQUIVO" AT 2310
ACCEPT PARA AT 2579 WITH AUTO NO-ECHO
GO TO FIM
END-IF
ELSE
CONTINUE
END-IF.

INICIO.
DISPLAY TELA-CADASTRO.
PERFORM LIMPA-TELA.
PEGA-CODIGO.
DISPLAY "CODIGO " AT 2310.
ACCEPT CODIGO-FUN AT 0725 WITH AUTO PROMPT
ACCEPT TECLA FROM ESCAPE KEY
IF TECLA EQUAL 01
GO TO FIM.
MOVE CODIGO-FUN TO CODIGO
IF CODIGO EQUAL ZEROS
DISPLAY "CODIGO INVALIDO" AT 2310
ACCEPT PARA AT 2579 WITH AUTO NO-ECHO
DISPLAY " " AT 2310
GO TO PEGA-CODIGO.
READ ARQFUN INVALID KEY
NEXT SENTENCE
NOT INVALID KEY
DISPLAY "CODIGO JA CADASTRADO" AT 2310
ACCEPT PARA AT 2579 WITH AUTO NO-ECHO
DISPLAY " " AT 2310
PERFORM LIMPA-TELA
GO TO PEGA-CODIGO.
FIM-PEGA-CODIGO. EXIT.
PEGA-NOME.
DISPLAY "NOME " AT 2310
ACCEPT NOME AT 0825 WITH AUTO PROMPT.
ACCEPT TECLA FROM ESCAPE KEY

FromSoft – Todos os direitos reservados – http://www.fromsoft.com.br Página 172


Curso de Cobol Básico

IF TECLA EQUAL 01
GO TO PEGA-CODIGO.
IF NOME EQUAL SPACES
DISPLAY "NOME INVALIDO" AT 2310
ACCEPT PARA AT 2579 WITH AUTO NO-ECHO
DISPLAY " " AT 2310
GO TO PEGA-NOME.
PEGA-ENDERECO.
DISPLAY "ENDERECO " AT 2310
ACCEPT ENDERECO AT 0925 WITH AUTO PROMPT.
ACCEPT TECLA FROM ESCAPE KEY
IF TECLA EQUAL 01
GO TO PEGA-NOME.
IF ENDERECO EQUAL SPACES
DISPLAY "ENDERECO INVALIDO" AT 2310
ACCEPT PARA AT 2579 WITH AUTO NO-ECHO
DISPLAY " " AT 2310
GO TO PEGA-ENDERECO.
PEGA-CIDADE.
DISPLAY "CIDADE " AT 2310
ACCEPT CIDADE AT 1025 WITH AUTO.
ACCEPT TECLA FROM ESCAPE KEY
IF TECLA EQUAL 01
GO TO PEGA-ENDERECO.
IF CIDADE EQUAL SPACES
DISPLAY "CIDADE INVALIDA" AT 2310
ACCEPT PARA AT 2579 WITH AUTO NO-ECHO
DISPLAY " " AT 2310
GO TO PEGA-CIDADE.
PEGA-ATIVIDADE.
DISPLAY "ATIVIDADE " AT 2310
ACCEPT ATIVIDADE AT 1125 WITH AUTO PROMPT.
ACCEPT TECLA FROM ESCAPE KEY
IF TECLA EQUAL 01
GO TO PEGA-CIDADE.
IF ATIVIDADE EQUAL SPACES
DISPLAY "ATIVIDADE INVALIDA" AT 2310
ACCEPT PARA AT 2579 WITH AUTO NO-ECHO
DISPLAY " " AT 2310
GO TO PEGA-ATIVIDADE.
PEGA-SETOR.
DISPLAY "SETOR " AT 2310
ACCEPT SETOR AT 1225 WITH AUTO PROMPT.
ACCEPT TECLA FROM ESCAPE KEY
IF TECLA EQUAL 01
GO TO PEGA-ATIVIDADE.
IF SETOR EQUAL SPACES
DISPLAY "SETOR INVALIDO" AT 2310
ACCEPT PARA AT 2579 WITH AUTO NO-ECHO
DISPLAY " " AT 2310
GO TO PEGA-SETOR.
PEGA-SALARIO.
DISPLAY "SALARIO " AT 2310
ACCEPT SALARIO-FUN AT 1325 WITH AUTO.
ACCEPT TECLA FROM ESCAPE KEY
IF TECLA EQUAL 01
GO TO PEGA-SETOR.
MOVE SALARIO-FUN TO SALARIO
IF SALARIO EQUAL ZEROS
DISPLAY "SALARIO INVALIDO" AT 2310
ACCEPT PARA AT 2579 WITH AUTO NO-ECHO
DISPLAY " " AT 2310
GO TO PEGA-SALARIO.
PEGA-DATA-DE-PAGAMENTO.
DISPLAY "DATA DE PAGAMENTO " AT 2310
ACCEPT DATA-PAR AT 1425 WITH AUTO.
ACCEPT TECLA FROM ESCAPE KEY
IF TECLA EQUAL 01
GO TO PEGA-SALARIO.
PERFORM VALIDA-DATA
IF FLAG-VALIDA EQUAL "N"
DISPLAY "DATA DE PAGAMENTO INVALIDA" AT 2310
ACCEPT PARA AT 2579 WITH AUTO NO-ECHO
DISPLAY " " AT 2310
GO TO PEGA-DATA-DE-PAGAMENTO.

FromSoft – Todos os direitos reservados – http://www.fromsoft.com.br Página 173


Curso de Cobol Básico

MOVE DATA-PAR TO DATA-PAGAMENTO.


PEGA-DATA-DE-NASCIMENTO.
DISPLAY "DATA DE NASCIMENTO " AT 2310
ACCEPT DATA-PAR AT 1525 WITH AUTO.
ACCEPT TECLA FROM ESCAPE KEY
IF TECLA EQUAL 01
GO TO PEGA-DATA-DE-PAGAMENTO.
PERFORM VALIDA-DATA
IF FLAG-VALIDA EQUAL "N"
DISPLAY "DATA DE NASCIMENTO INVALIDA" AT 2310
ACCEPT PARA AT 2579 WITH AUTO NO-ECHO
DISPLAY " " AT 2310
GO TO PEGA-DATA-DE-NASCIMENTO.
MOVE DATA-PAR TO DATA-NASCIMENTO.
PEGA-ESCOLARIDADE.
DISPLAY "ESCOLARIDADE " AT 2310
ACCEPT ESCOLARIDADE AT 1625 WITH AUTO.
ACCEPT TECLA FROM ESCAPE KEY
IF TECLA EQUAL 01
GO TO PEGA-DATA-DE-NASCIMENTO.
IF ESCOLARIDADE EQUAL SPACES
DISPLAY "ESCOLARIDADE INVALIDA" AT 2310
ACCEPT PARA AT 2579 WITH AUTO NO-ECHO
DISPLAY " " AT 2310
GO TO PEGA-ESCOLARIDADE.
PEGA-NATURALIDADE.
DISPLAY "NATURALIDADE " AT 2310
ACCEPT NATURALIDADE AT 1725 WITH AUTO.
ACCEPT TECLA FROM ESCAPE KEY
IF TECLA EQUAL 01
GO TO PEGA-ESCOLARIDADE.
IF NATURALIDADE EQUAL SPACES
DISPLAY "NATURALIDADE INVALIDA" AT 2310
ACCEPT PARA AT 2579 WITH AUTO NO-ECHO
DISPLAY " " AT 2310
GO TO PEGA-NATURALIDADE.
PEGA-NACIONALIDADE.
DISPLAY "NACIONALIDADE " AT 2310
ACCEPT NACIONALIDADE AT 1825 WITH AUTO.
ACCEPT TECLA FROM ESCAPE KEY
IF TECLA EQUAL 01
GO TO PEGA-NATURALIDADE.
IF NACIONALIDADE EQUAL SPACES
DISPLAY "NACIONALIDADE INVALIDA" AT 2310
ACCEPT PARA AT 2579 WITH AUTO NO-ECHO
DISPLAY " " AT 2310
GO TO PEGA-NACIONALIDADE.
PEGA-BAIRRO.
DISPLAY "BAIRRO " AT 2310
ACCEPT BAIRRO AT 1159 WITH AUTO.
ACCEPT TECLA FROM ESCAPE KEY
IF TECLA EQUAL 01
GO TO PEGA-NACIONALIDADE.
IF BAIRRO EQUAL SPACES
DISPLAY "BAIRRO INVALIDO" AT 2310
ACCEPT PARA AT 2579 WITH AUTO NO-ECHO
DISPLAY " " AT 2310
GO TO PEGA-BAIRRO.
PEGA-ESTADO.
DISPLAY "ESTADO " AT 2310
ACCEPT ESTADO AT 1259 WITH AUTO.
ACCEPT TECLA FROM ESCAPE KEY
IF TECLA EQUAL 01
GO TO PEGA-BAIRRO.
IF ESTADO EQUAL SPACES
DISPLAY "ESTADO INVALIDO" AT 2310
ACCEPT PARA AT 2579 WITH AUTO NO-ECHO
DISPLAY " " AT 2310
GO TO PEGA-ESTADO.
PEGA-CPF.
DISPLAY "CPF " AT 2310
ACCEPT CPF-FUN AT 1359 WITH AUTO.
ACCEPT TECLA FROM ESCAPE KEY
IF TECLA EQUAL 01
GO TO PEGA-ESTADO.

FromSoft – Todos os direitos reservados – http://www.fromsoft.com.br Página 174


Curso de Cobol Básico

MOVE CPF-FUN TO CPF


IF CPF EQUAL ZEROS
DISPLAY "CPF INVALIDO" AT 2310
ACCEPT PARA AT 2579 WITH AUTO NO-ECHO
DISPLAY " " AT 2310
GO TO PEGA-CPF.
PEGA-IDENTIDADE.
DISPLAY "IDENTIDADE " AT 2310
ACCEPT IDENTIDADE AT 1459 WITH AUTO.
ACCEPT TECLA FROM ESCAPE KEY
IF TECLA EQUAL 01
GO TO PEGA-CPF.
IF IDENTIDADE EQUAL SPACES
DISPLAY "IDENTIDADE INVALIDA" AT 2310
ACCEPT PARA AT 2579 WITH AUTO NO-ECHO
DISPLAY " " AT 2310
GO TO PEGA-IDENTIDADE.
PEGA-FILIAL.
DISPLAY "FILIAL " AT 2310
ACCEPT FILIAL AT 1559 WITH AUTO.
ACCEPT TECLA FROM ESCAPE KEY
IF TECLA EQUAL 01
GO TO PEGA-IDENTIDADE.
IF FILIAL EQUAL SPACES
DISPLAY "FILIAL INVALIDA" AT 2310
ACCEPT PARA AT 2579 WITH AUTO NO-ECHO
DISPLAY " " AT 2310
GO TO PEGA-FILIAL.
PEGA-DATA-DE-ADMISSAO.
DISPLAY "DATA DE ADMISSAO " AT 2310
ACCEPT DATA-PAR AT 1659 WITH AUTO.
ACCEPT TECLA FROM ESCAPE KEY
IF TECLA EQUAL 01
GO TO PEGA-FILIAL.
PERFORM VALIDA-DATA
IF FLAG-VALIDA EQUAL "N"
DISPLAY "DATA DE ADMISSAO INVALIDA" AT 2310
ACCEPT PARA AT 2579 WITH AUTO NO-ECHO
DISPLAY " " AT 2310
GO TO PEGA-DATA-DE-ADMISSAO.
MOVE DATA-PAR TO DATA-ADMISSAO.
PEGA-SEXO.
DISPLAY "SEXO " AT 2310
ACCEPT SEXO AT 1759 WITH AUTO.
ACCEPT TECLA FROM ESCAPE KEY
IF TECLA EQUAL 01
GO TO PEGA-DATA-DE-ADMISSAO.
IF SEXO NOT EQUAL "S" AND SEXO NOT EQUAL "M"
DISPLAY "SEXO INVALIDO" AT 2310
ACCEPT PARA AT 2579 WITH AUTO NO-ECHO
DISPLAY " " AT 2310
GO TO PEGA-SEXO.
PEGA-HORAS.
DISPLAY "HORAS DE TRABALHO " AT 2310
ACCEPT HORAS-TRABALHO-FUN AT 1859 WITH AUTO.
ACCEPT TECLA FROM ESCAPE KEY
IF TECLA EQUAL 01
GO TO PEGA-SEXO.
MOVE HORAS-TRABALHO-FUN TO HORAS-TRABALHO
IF HORAS-TRABALHO EQUAL ZEROS
DISPLAY "HORAS DE TRABALHO INVALIDA" AT 2310
ACCEPT PARA AT 2579 WITH AUTO NO-ECHO
DISPLAY " " AT 2310
GO TO PEGA-HORAS.
GRAVA-REGISTRO.
WRITE REG-ARQFUN
IF FILE-STATUS EQUAL ZEROS
PERFORM LIMPA-TELA
GO TO INICIO
ELSE
DISPLAY "ERRO DE GRAVACAO NO ARQUIVO" AT 2310
ACCEPT PARA AT 2579 WITH AUTO NO-ECHO
GO TO FIM
END-IF.
FIM.

FromSoft – Todos os direitos reservados – http://www.fromsoft.com.br Página 175


Curso de Cobol Básico

DISPLAY " " WITH ERASE EOS BACKGROUND-COLOR 0


FOREGROUND-COLOR 7.
STOP RUN.

LIMPA-TELA.
INITIALIZE CODIGO NOME ENDERECO CIDADE ATIVIDADE SETOR
SALARIO DIA-PAGAMENTO MES-PAGAMENTO ANO-PAGAMENTO
DIA-NASCIMENTO MES-NASCIMENTO ANO-NASCIMENTO
ESCOLARIDADE NATURALIDADE NACIONALIDADE BAIRRO
ESTADO CPF IDENTIDADE FILIAL DIA-ADMISSAO
MES-ADMISSAO ANO-ADMISSAO SEXO HORAS-TRABALHO
CODIGO-FUN CPF-FUN SALARIO-FUN HORAS-TRABALHO-FUN.

VALIDA-DATA.
IF DIA-PAR GREATER ZEROS AND DIA-PAR LESS 32
MOVE "S" TO FLAG-VALIDA
ELSE
MOVE "N" TO FLAG-VALIDA
END-IF
IF MES-PAR GREATER ZEROS AND MES-PAR LESS 13
IF MES-PAR EQUAL 01 OR MES-PAR EQUAL 03
OR MES-PAR EQUAL 05 OR MES-PAR EQUAL 07
OR MES-PAR EQUAL 08 OR MES-PAR EQUAL 10
OR MES-PAR EQUAL 12 AND DIA-PAR LESS 32
MOVE "S" TO FLAG-VALIDA
ELSE
IF MES-PAR EQUAL 02 AND DIA-PAR LESS 30
MOVE "S" TO FLAG-VALIDA
ELSE
IF MES-PAR EQUAL 04 OR MES-PAR EQUAL 06
OR MES-PAR EQUAL 09 OR MES-PAR EQUAL 11
MOVE "S" TO FLAG-VALIDA
ELSE
MOVE "N" TO FLAG-VALIDA
END-IF
ELSE
MOVE "N" TO FLAG-VALIDA
END-IF.

FromSoft – Todos os direitos reservados – http://www.fromsoft.com.br Página 176


Curso de Cobol Básico

Lição 13 – Exemplo 2 – Consulta de Usuarios presentes em Cadastro.

IDENTIFICATION DIVISION.
PROGRAM-ID. L13EX09.
ENVIRONMENT DIVISION.
SPECIAL-NAMES.
DECIMAL-POINT IS COMMA.
FILE-CONTROL.
SELECT ARQFUN ASSIGN TO "ARQFUNI.DAT"
ORGANIZATION IS INDEXED
ACCESS MODE IS DYNAMIC
RECORD KEY IS CODIGO
ALTERNATE RECORD KEY IS NOME WITH DUPLICATES
FILE STATUS IS FILE-STATUS.
DATA DIVISION.
FILE SECTION.
FD ARQFUN.
01 REG-ARQFUN.
03 CODIGO PIC 9(05).
03 NOME PIC X(30).
03 ENDERECO PIC X(30).
03 CIDADE PIC X(20).
03 ATIVIDADE PIC X(20).
03 SETOR PIC X(20).
03 SALARIO PIC 9(11).
03 DATA-PAGAMENTO.
05 DIA-PAGAMENTO PIC 9(02).
05 FILLER PIC X(01).
05 MES-PAGAMENTO PIC 9(02).
05 FILLER PIC X(01).
05 ANO-PAGAMENTO PIC 9(02).
03 DATA-NASCIMENTO.
05 DIA-NASCIMENTO PIC 9(02).
05 FILLER PIC X(01).
05 MES-NASCIMENTO PIC 9(02).
05 FILLER PIC X(01).
05 ANO-NASCIMENTO PIC 9(02).
03 ESCOLARIDADE PIC X(15).
03 NATURALIDADE PIC X(15).
03 NACIONALIDADE PIC X(15).
03 BAIRRO PIC X(20).
03 ESTADO PIC A(02).
03 CPF PIC 9(11).
03 IDENTIDADE PIC X(11).
03 FILIAL PIC X(10).
03 DATA-ADMISSAO.
05 DIA-ADMISSAO PIC 9(02).
05 FILLER PIC X(01).
05 MES-ADMISSAO PIC 9(02).
05 FILLER PIC X(01).
05 ANO-ADMISSAO PIC 9(02).
03 SEXO PIC A(01).
03 HORAS-TRABALHO PIC 9(02).

WORKING-STORAGE SECTION.
77 CODIGO-FUN PIC ZZZZZ VALUE SPACES.
77 CODIGO-AUX PIC 9(05) VALUE ZEROS.
77 SALARIO-FUN PIC ZZZ.ZZZ.ZZ9,99 VALUE SPACES.
77 CPF-FUN PIC ZZZZZZZZZ.ZZ VALUE SPACES.
77 HORAS-TRABALHO-FUN PIC ZZ VALUE SPACES.
77 DATA-FUN PIC ZZ/ZZ/ZZ VALUE SPACES.
77 MENSAGEM PIC X(30) VALUE ZEROS.
77 FLAG-VALIDA PIC X VALUE SPACE.
77 TECLA PIC XX VALUE SPACES.
77 FILE-STATUS PIC XX VALUE SPACES.
77 PARA PIC X VALUE SPACES.
01 DATA-PAR.
03 DIA-PAR PIC 9(02) VALUE ZEROS.
03 FILLER PIC X(01) VALUE "/".
03 MES-PAR PIC 9(02) VALUE ZEROS.
03 FILLER PIC X(01) VALUE "/".
03 ANO-PAR PIC 9(02) VALUE ZEROS.
SCREEN SECTION.
01 TELA-CADASTRO.

FromSoft – Todos os direitos reservados – http://www.fromsoft.com.br Página 177


Curso de Cobol Básico

02 BACKGROUND-COLOR 1 FOREGROUND-COLOR 7.
03 BLANK SCREEN.
03 LINE 1 COL 1 HIGHLIGHT VALUE "ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
-"ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿".
03 LINE 2 COL 1 HIGHLIGHT VALUE "ÃÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
-"ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ´".
03 LINE 3 COL 1 HIGHLIGHT VALUE "ÃÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄCA
-"DASTRO".
03 COL 37 HIGHLIGHT VALUE "DE".
03 COL 40 HIGHLIGHT VALUE "CANDIDATOSÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
-"ÄÄÄÄÄ´".
03 LINE 4 COL 1 HIGHLIGHT VALUE "ÃÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
-"ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ´".
03 LINE 5 COL 1 HIGHLIGHT VALUE "ÃÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
-"ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ´".
03 LINE 6 COL 1 HIGHLIGHT VALUE "ÃÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
-"ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ´".
03 LINE 7 COL 1 HIGHLIGHT VALUE "ÃÄ".
03 COL 4 HIGHLIGHT VALUE "CODIGO.............:".
03 COL 79 HIGHLIGHT VALUE "Ä´".
03 LINE 8 COL 1 HIGHLIGHT VALUE "ÃÄ".
03 COL 4 HIGHLIGHT VALUE "NOME...............:".
03 COL 79 HIGHLIGHT VALUE "Ä´".
03 LINE 9 COL 1 HIGHLIGHT VALUE "ÃÄ".
03 COL 4 HIGHLIGHT VALUE "ENDERECO...........:".
03 COL 79 HIGHLIGHT VALUE "Ä´".
03 LINE 10 COL 1 HIGHLIGHT VALUE "ÃÄ".
03 COL 4 HIGHLIGHT VALUE "CIDADE.............:".
03 COL 79 HIGHLIGHT VALUE "Ä´".
03 LINE 11 COL 1 HIGHLIGHT VALUE "ÃÄ".
03 COL 4 HIGHLIGHT VALUE "ATIVIDADE..........:".
03 COL 46 HIGHLIGHT VALUE "BAIRRO.....:".
03 COL 79 HIGHLIGHT VALUE "Ä´".
03 LINE 12 COL 1 HIGHLIGHT VALUE "ÃÄ".
03 COL 4 HIGHLIGHT VALUE "SETOR..............:".
03 COL 46 HIGHLIGHT VALUE "ESTADO.....:".
03 COL 79 HIGHLIGHT VALUE "Ä´".
03 LINE 13 COL 1 HIGHLIGHT VALUE "ÃÄ".
03 COL 4 HIGHLIGHT VALUE "SALARIO............:".
03 COL 46 HIGHLIGHT VALUE "CPF........:".
03 COL 79 HIGHLIGHT VALUE "Ä´".
03 LINE 14 COL 1 HIGHLIGHT VALUE "ÃÄ".
03 COL 4 HIGHLIGHT VALUE "DATA".
03 COL 9 HIGHLIGHT VALUE "DE".
03 COL 12 HIGHLIGHT VALUE "PAGAMENTO..:".
03 COL 27 HIGHLIGHT VALUE "/".
03 COL 30 HIGHLIGHT VALUE "/".
03 COL 46 HIGHLIGHT VALUE "IDENTIDADE.:".
03 COL 79 HIGHLIGHT VALUE "Ä´".
03 LINE 15 COL 1 HIGHLIGHT VALUE "ÃÄ".
03 COL 4 HIGHLIGHT VALUE "DATA".
03 COL 9 HIGHLIGHT VALUE "DE".
03 COL 12 HIGHLIGHT VALUE "NASCIMENTO.:".
03 COL 27 HIGHLIGHT VALUE "/".
03 COL 30 HIGHLIGHT VALUE "/".
03 COL 46 HIGHLIGHT VALUE "FILIAL.....:".
03 COL 79 HIGHLIGHT VALUE "Ä´".
03 LINE 16 COL 1 HIGHLIGHT VALUE "ÃÄ".
03 COL 4 HIGHLIGHT VALUE "ESCOLARIDADE.......:".
03 COL 46 HIGHLIGHT VALUE "ADMISSAO...:".
03 COL 61 HIGHLIGHT VALUE "/".
03 COL 64 HIGHLIGHT VALUE "/".
03 COL 79 HIGHLIGHT VALUE "Ä´".
03 LINE 17 COL 1 HIGHLIGHT VALUE "ÃÄ".
03 COL 4 HIGHLIGHT VALUE "NATURALIDADE.......:".
03 COL 46 HIGHLIGHT VALUE "SEXO.......:".
03 COL 79 HIGHLIGHT VALUE "Ä´".
03 LINE 18 COL 1 HIGHLIGHT VALUE "ÃÄ".
03 COL 4 HIGHLIGHT VALUE "NACIONALIDADE......:".
03 COL 46 HIGHLIGHT VALUE "HORAS/DIA..:".
03 COL 79 HIGHLIGHT VALUE "Ä´".
03 LINE 19 COL 1 HIGHLIGHT VALUE "ÃÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
-"ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ´".
03 LINE 20 COL 1 HIGHLIGHT VALUE "ÃÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
-"ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ´".

FromSoft – Todos os direitos reservados – http://www.fromsoft.com.br Página 178


Curso de Cobol Básico

03 LINE 21 COL 1 HIGHLIGHT VALUE "ÃÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ


-"ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ´".
03 LINE 22 COL 1 HIGHLIGHT VALUE "ÃÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
-"ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ´".
03 LINE 23 COL 1 HIGHLIGHT VALUE "³INFORME".
03 COL 80 HIGHLIGHT VALUE "³".
03 LINE 24 COL 1 HIGHLIGHT VALUE "ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
-"ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ".
03 LINE 25 COL 1 BACKGROUND-COLOR 0 HIGHLIGHT VALUE "
-"
-" ".

PROCEDURE DIVISION.
PERFORM ABRE-ARQUIVO.
INICIO.
DISPLAY TELA-CADASTRO.
PERFORM LIMPA-TELA.
PEGA-CODIGO.
DISPLAY "CODIGO " AT 2310.
ACCEPT CODIGO-FUN AT 0725 WITH AUTO PROMPT
ACCEPT TECLA FROM ESCAPE KEY
IF TECLA EQUAL 01
GO TO FIM.
MOVE CODIGO-FUN TO CODIGO
IF CODIGO EQUAL ZEROS
DISPLAY "CODIGO INVALIDO" AT 2310
ACCEPT PARA AT 2579 WITH AUTO NO-ECHO
DISPLAY " " AT 2310
GO TO PEGA-CODIGO.
READ ARQFUN INVALID KEY
DISPLAY "CODIGO NAO CADASTRADO" AT 2310
ACCEPT PARA AT 2579 WITH AUTO NO-ECHO
DISPLAY " " AT 2310
PERFORM LIMPA-TELA
GO TO PEGA-CODIGO
NOT INVALID KEY
PERFORM MOSTRA-FUNCIONARIO THRU FIM-MOSTRA-FUNCIONARIO
ACCEPT PARA AT 2579 WITH AUTO NO-ECHO
PERFORM LIMPA-TELA
GO TO PEGA-CODIGO.
FIM-PEGA-CODIGO. EXIT.

MOSTRA-FUNCIONARIO.
DISPLAY NOME AT 0825
DISPLAY ENDERECO AT 0925
DISPLAY CIDADE AT 1025
DISPLAY ATIVIDADE AT 1125
DISPLAY SETOR AT 1225
MOVE SALARIO TO SALARIO-FUN
DISPLAY SALARIO-FUN AT 1325
MOVE DATA-PAGAMENTO TO DATA-FUN
DISPLAY DATA-PAGAMENTO AT 1425
MOVE DATA-NASCIMENTO TO DATA-FUN
DISPLAY DATA-NASCIMENTO AT 1525
DISPLAY ESCOLARIDADE AT 1625
DISPLAY NATURALIDADE AT 1725
DISPLAY NACIONALIDADE AT 1825
DISPLAY BAIRRO AT 1159
DISPLAY ESTADO AT 1259
MOVE CPF TO CPF-FUN
DISPLAY CPF-FUN AT 1359
DISPLAY IDENTIDADE AT 1459
DISPLAY FILIAL AT 1559
MOVE DATA-ADMISSAO TO DATA-FUN
DISPLAY DATA-ADMISSAO AT 1659
DISPLAY SEXO AT 1759
MOVE HORAS-TRABALHO TO HORAS-TRABALHO-FUN
DISPLAY HORAS-TRABALHO-FUN AT 1859.
FIM-MOSTRA-FUNCIONARIO. EXIT.

FIM.
PERFORM FECHA-ARQUIVO
DISPLAY " " WITH ERASE EOS BACKGROUND-COLOR 0
FOREGROUND-COLOR 7
STOP RUN.

FromSoft – Todos os direitos reservados – http://www.fromsoft.com.br Página 179


Curso de Cobol Básico

LIMPA-TELA.
INITIALIZE CODIGO NOME ENDERECO CIDADE ATIVIDADE SETOR
SALARIO DIA-PAGAMENTO MES-PAGAMENTO ANO-PAGAMENTO
DIA-NASCIMENTO MES-NASCIMENTO ANO-NASCIMENTO
ESCOLARIDADE NATURALIDADE NACIONALIDADE BAIRRO
ESTADO CPF IDENTIDADE FILIAL DIA-ADMISSAO
MES-ADMISSAO ANO-ADMISSAO SEXO HORAS-TRABALHO
CODIGO-FUN CPF-FUN SALARIO-FUN HORAS-TRABALHO-FUN
DIA-PAR MES-PAR ANO-PAR
DISPLAY " " AT 0825
DISPLAY " " AT 0925
DISPLAY " " AT 1025
DISPLAY " " AT 1125
DISPLAY " " AT 1225
DISPLAY " " AT 1325
DISPLAY " / / " AT 1425
DISPLAY " / / " AT 1525
DISPLAY " " AT 1625
DISPLAY " " AT 1725
DISPLAY " " AT 1825
DISPLAY " " AT 1159
DISPLAY " " AT 1259
DISPLAY " " AT 1359
DISPLAY " " AT 1459
DISPLAY " " AT 1559
DISPLAY " / / " AT 1659
DISPLAY " " AT 1759
DISPLAY " " AT 1859.

ABRE-ARQUIVO.
OPEN INPUT ARQFUN
IF FILE-STATUS EQUAL ZEROS
CONTINUE
ELSE
DISPLAY "ERRO DE ABERTURA NO ARQUIVO" AT 2310
ACCEPT PARA AT 2579 WITH AUTO NO-ECHO
GO TO FIM.

FECHA-ARQUIVO.
CLOSE ARQFUN
IF FILE-STATUS EQUAL ZEROS
NEXT SENTENCE
ELSE
DISPLAY "ERRO DE FECHAMENTO DO ARQUIVO" AT 2310
ACCEPT PARA AT 2579 WITH AUTO NO-ECHO
GO TO FIM.

Lição 13 – Exemplo 3 – Alteração de Usuarios presentes em Cadastro

IDENTIFICATION DIVISION.
PROGRAM-ID. L13EX10.
ENVIRONMENT DIVISION.
SPECIAL-NAMES.
DECIMAL-POINT IS COMMA.
FILE-CONTROL.
SELECT ARQFUN ASSIGN TO "ARQFUNI.DAT"
ORGANIZATION IS INDEXED
ACCESS MODE IS DYNAMIC
RECORD KEY IS CODIGO
ALTERNATE RECORD KEY IS NOME WITH DUPLICATES
FILE STATUS IS FILE-STATUS.
DATA DIVISION.
FILE SECTION.
FD ARQFUN.
01 REG-ARQFUN.
03 CODIGO PIC 9(05).
03 NOME PIC X(30).
03 ENDERECO PIC X(30).
03 CIDADE PIC X(20).
03 ATIVIDADE PIC X(20).
03 SETOR PIC X(20).
03 SALARIO PIC 9(11).
03 DATA-PAGAMENTO.

FromSoft – Todos os direitos reservados – http://www.fromsoft.com.br Página 180


Curso de Cobol Básico

05 DIA-PAGAMENTO PIC 9(02).


05 FILLER PIC X(01).
05 MES-PAGAMENTO PIC 9(02).
05 FILLER PIC X(01).
05 ANO-PAGAMENTO PIC 9(02).
03 DATA-NASCIMENTO.
05 DIA-NASCIMENTO PIC 9(02).
05 FILLER PIC X(01).
05 MES-NASCIMENTO PIC 9(02).
05 FILLER PIC X(01).
05 ANO-NASCIMENTO PIC 9(02).
03 ESCOLARIDADE PIC X(15).
03 NATURALIDADE PIC X(15).
03 NACIONALIDADE PIC X(15).
03 BAIRRO PIC X(20).
03 ESTADO PIC A(02).
03 CPF PIC 9(11).
03 IDENTIDADE PIC X(11).
03 FILIAL PIC X(10).
03 DATA-ADMISSAO.
05 DIA-ADMISSAO PIC 9(02).
05 FILLER PIC X(01).
05 MES-ADMISSAO PIC 9(02).
05 FILLER PIC X(01).
05 ANO-ADMISSAO PIC 9(02).
03 SEXO PIC A(01).
03 HORAS-TRABALHO PIC 9(02).

WORKING-STORAGE SECTION.
77 CODIGO-FUN PIC ZZZZZ VALUE SPACES.
77 CODIGO-ED PIC 9(05) VALUE ZEROS.
77 SALARIO-FUN PIC ZZZ.ZZZ.ZZ9,99 VALUE SPACES.
77 CPF-FUN PIC ZZZZZZZZZ.ZZ VALUE SPACES.
77 HORAS-TRABALHO-FUN PIC ZZ VALUE SPACES.
77 DATA-FUN PIC ZZ/ZZ/ZZ VALUE SPACES.
77 MENSAGEM PIC X(30) VALUE ZEROS.
77 FLAG-VALIDA PIC X VALUE SPACE.
77 TECLA PIC XX VALUE SPACES.
77 FILE-STATUS PIC XX VALUE SPACES.
77 PARA PIC X VALUE SPACES.
01 DATA-PAR.
03 DIA-PAR PIC 9(02) VALUE ZEROS.
03 FILLER PIC X(01) VALUE "/".
03 MES-PAR PIC 9(02) VALUE ZEROS.
03 FILLER PIC X(01) VALUE "/".
03 ANO-PAR PIC 9(02) VALUE ZEROS.
SCREEN SECTION.
01 TELA-CADASTRO.
02 BACKGROUND-COLOR 1 FOREGROUND-COLOR 7.
03 BLANK SCREEN.
03 LINE 1 COL 1 HIGHLIGHT VALUE "ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
-"ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿".
03 LINE 2 COL 1 HIGHLIGHT VALUE "ÃÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
-"ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ´".
03 LINE 3 COL 1 HIGHLIGHT VALUE "ÃÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄCA
-"DASTRO".
03 COL 37 HIGHLIGHT VALUE "DE".
03 COL 40 HIGHLIGHT VALUE "CANDIDATOSÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
-"ÄÄÄÄÄ´".
03 LINE 4 COL 1 HIGHLIGHT VALUE "ÃÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
-"ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ´".
03 LINE 5 COL 1 HIGHLIGHT VALUE "ÃÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
-"ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ´".
03 LINE 6 COL 1 HIGHLIGHT VALUE "ÃÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
-"ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ´".
03 LINE 7 COL 1 HIGHLIGHT VALUE "ÃÄ".
03 COL 4 HIGHLIGHT VALUE "CODIGO.............:".
03 COL 79 HIGHLIGHT VALUE "Ä´".
03 LINE 8 COL 1 HIGHLIGHT VALUE "ÃÄ".
03 COL 4 HIGHLIGHT VALUE "NOME...............:".
03 COL 79 HIGHLIGHT VALUE "Ä´".
03 LINE 9 COL 1 HIGHLIGHT VALUE "ÃÄ".
03 COL 4 HIGHLIGHT VALUE "ENDERECO...........:".
03 COL 79 HIGHLIGHT VALUE "Ä´".
03 LINE 10 COL 1 HIGHLIGHT VALUE "ÃÄ".

FromSoft – Todos os direitos reservados – http://www.fromsoft.com.br Página 181


Curso de Cobol Básico

03 COL 4 HIGHLIGHT VALUE "CIDADE.............:".


03 COL 79 HIGHLIGHT VALUE "Ä´".
03 LINE 11 COL 1 HIGHLIGHT VALUE "ÃÄ".
03 COL 4 HIGHLIGHT VALUE "ATIVIDADE..........:".
03 COL 46 HIGHLIGHT VALUE "BAIRRO.....:".
03 COL 79 HIGHLIGHT VALUE "Ä´".
03 LINE 12 COL 1 HIGHLIGHT VALUE "ÃÄ".
03 COL 4 HIGHLIGHT VALUE "SETOR..............:".
03 COL 46 HIGHLIGHT VALUE "ESTADO.....:".
03 COL 79 HIGHLIGHT VALUE "Ä´".
03 LINE 13 COL 1 HIGHLIGHT VALUE "ÃÄ".
03 COL 4 HIGHLIGHT VALUE "SALARIO............:".
03 COL 46 HIGHLIGHT VALUE "CPF........:".
03 COL 79 HIGHLIGHT VALUE "Ä´".
03 LINE 14 COL 1 HIGHLIGHT VALUE "ÃÄ".
03 COL 4 HIGHLIGHT VALUE "DATA".
03 COL 9 HIGHLIGHT VALUE "DE".
03 COL 12 HIGHLIGHT VALUE "PAGAMENTO..:".
03 COL 27 HIGHLIGHT VALUE "/".
03 COL 30 HIGHLIGHT VALUE "/".
03 COL 46 HIGHLIGHT VALUE "IDENTIDADE.:".
03 COL 79 HIGHLIGHT VALUE "Ä´".
03 LINE 15 COL 1 HIGHLIGHT VALUE "ÃÄ".
03 COL 4 HIGHLIGHT VALUE "DATA".
03 COL 9 HIGHLIGHT VALUE "DE".
03 COL 12 HIGHLIGHT VALUE "NASCIMENTO.:".
03 COL 27 HIGHLIGHT VALUE "/".
03 COL 30 HIGHLIGHT VALUE "/".
03 COL 46 HIGHLIGHT VALUE "FILIAL.....:".
03 COL 79 HIGHLIGHT VALUE "Ä´".
03 LINE 16 COL 1 HIGHLIGHT VALUE "ÃÄ".
03 COL 4 HIGHLIGHT VALUE "ESCOLARIDADE.......:".
03 COL 46 HIGHLIGHT VALUE "ADMISSAO...:".
03 COL 61 HIGHLIGHT VALUE "/".
03 COL 64 HIGHLIGHT VALUE "/".
03 COL 79 HIGHLIGHT VALUE "Ä´".
03 LINE 17 COL 1 HIGHLIGHT VALUE "ÃÄ".
03 COL 4 HIGHLIGHT VALUE "NATURALIDADE.......:".
03 COL 46 HIGHLIGHT VALUE "SEXO.......:".
03 COL 79 HIGHLIGHT VALUE "Ä´".
03 LINE 18 COL 1 HIGHLIGHT VALUE "ÃÄ".
03 COL 4 HIGHLIGHT VALUE "NACIONALIDADE......:".
03 COL 46 HIGHLIGHT VALUE "HORAS/DIA..:".
03 COL 79 HIGHLIGHT VALUE "Ä´".
03 LINE 19 COL 1 HIGHLIGHT VALUE "ÃÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
-"ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ´".
03 LINE 20 COL 1 HIGHLIGHT VALUE "ÃÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
-"ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ´".
03 LINE 21 COL 1 HIGHLIGHT VALUE "ÃÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
-"ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ´".
03 LINE 22 COL 1 HIGHLIGHT VALUE "ÃÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
-"ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ´".
03 LINE 23 COL 1 HIGHLIGHT VALUE "³INFORME".
03 COL 80 HIGHLIGHT VALUE "³".
03 LINE 24 COL 1 HIGHLIGHT VALUE "ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
-"ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ".
03 LINE 25 COL 1 BACKGROUND-COLOR 0 HIGHLIGHT VALUE "
-"
-" ".

PROCEDURE DIVISION.
PERFORM ABRE-ARQUIVO.
INICIO.
DISPLAY TELA-CADASTRO.
PERFORM LIMPA-TELA.
PEGA-CODIGO.
DISPLAY "CODIGO " AT 2310.
ACCEPT CODIGO-FUN AT 0725 WITH AUTO PROMPT
ACCEPT TECLA FROM ESCAPE KEY
IF TECLA EQUAL 01
GO TO FIM.
MOVE CODIGO-FUN TO CODIGO-ED
IF CODIGO-ED EQUAL ZEROS
DISPLAY "CODIGO INVALIDO" AT 2310
ACCEPT PARA AT 2579 WITH AUTO NO-ECHO

FromSoft – Todos os direitos reservados – http://www.fromsoft.com.br Página 182


Curso de Cobol Básico

DISPLAY " " AT 2310


GO TO PEGA-CODIGO.
MOVE CODIGO-ED TO CODIGO.
LE-ARQUIVO-INDEXADO.
READ ARQFUN INVALID KEY
DISPLAY "CODIGO NAO CADASTRADO" AT 2310
ACCEPT PARA AT 2579 WITH AUTO NO-ECHO
DISPLAY " " AT 2310
PERFORM LIMPA-TELA
GO TO PEGA-CODIGO
NOT INVALID KEY
PERFORM MOSTRA-FUNCIONARIO THRU FIM-MOSTRA-FUNCIONARIO
GO TO PEGA-NOME.
FIM-PEGA-CODIGO. EXIT.
PEGA-NOME.
DISPLAY "NOME " AT 2310
ACCEPT NOME AT 0825 WITH AUTO PROMPT.
ACCEPT TECLA FROM ESCAPE KEY
IF TECLA EQUAL 01
GO TO PEGA-CODIGO.
IF NOME EQUAL SPACES
DISPLAY "NOME INVALIDO" AT 2310
ACCEPT PARA AT 2579 WITH AUTO NO-ECHO
DISPLAY " " AT 2310
GO TO PEGA-NOME.
PEGA-ENDERECO.
DISPLAY "ENDERECO " AT 2310
ACCEPT ENDERECO AT 0925 WITH AUTO PROMPT.
ACCEPT TECLA FROM ESCAPE KEY
IF TECLA EQUAL 01
GO TO PEGA-NOME.
IF ENDERECO EQUAL SPACES
DISPLAY "ENDERECO INVALIDO" AT 2310
ACCEPT PARA AT 2579 WITH AUTO NO-ECHO
DISPLAY " " AT 2310
GO TO PEGA-ENDERECO.
PEGA-CIDADE.
DISPLAY "CIDADE " AT 2310
ACCEPT CIDADE AT 1025 WITH AUTO.
ACCEPT TECLA FROM ESCAPE KEY
IF TECLA EQUAL 01
GO TO PEGA-ENDERECO.
IF CIDADE EQUAL SPACES
DISPLAY "CIDADE INVALIDA" AT 2310
ACCEPT PARA AT 2579 WITH AUTO NO-ECHO
DISPLAY " " AT 2310
GO TO PEGA-CIDADE.
PEGA-ATIVIDADE.
DISPLAY "ATIVIDADE " AT 2310
ACCEPT ATIVIDADE AT 1125 WITH AUTO PROMPT.
ACCEPT TECLA FROM ESCAPE KEY
IF TECLA EQUAL 01
GO TO PEGA-CIDADE.
IF ATIVIDADE EQUAL SPACES
DISPLAY "ATIVIDADE INVALIDA" AT 2310
ACCEPT PARA AT 2579 WITH AUTO NO-ECHO
DISPLAY " " AT 2310
GO TO PEGA-ATIVIDADE.
PEGA-SETOR.
DISPLAY "SETOR " AT 2310
ACCEPT SETOR AT 1225 WITH AUTO PROMPT.
ACCEPT TECLA FROM ESCAPE KEY
IF TECLA EQUAL 01
GO TO PEGA-ATIVIDADE.
IF SETOR EQUAL SPACES
DISPLAY "SETOR INVALIDO" AT 2310
ACCEPT PARA AT 2579 WITH AUTO NO-ECHO
DISPLAY " " AT 2310
GO TO PEGA-SETOR.
PEGA-SALARIO.
DISPLAY "SALARIO " AT 2310
ACCEPT SALARIO-FUN AT 1325 WITH AUTO.
ACCEPT TECLA FROM ESCAPE KEY
IF TECLA EQUAL 01
GO TO PEGA-SETOR.

FromSoft – Todos os direitos reservados – http://www.fromsoft.com.br Página 183


Curso de Cobol Básico

MOVE SALARIO-FUN TO SALARIO


IF SALARIO EQUAL ZEROS
DISPLAY "SALARIO INVALIDO" AT 2310
ACCEPT PARA AT 2579 WITH AUTO NO-ECHO
DISPLAY " " AT 2310
GO TO PEGA-SALARIO.
PEGA-DATA-DE-PAGAMENTO.
DISPLAY "DATA DE PAGAMENTO " AT 2310
ACCEPT DATA-PAR AT 1425 WITH AUTO.
ACCEPT TECLA FROM ESCAPE KEY
IF TECLA EQUAL 01
GO TO PEGA-SALARIO.
PERFORM VALIDA-DATA
IF FLAG-VALIDA EQUAL "N"
DISPLAY "DATA DE PAGAMENTO INVALIDA" AT 2310
ACCEPT PARA AT 2579 WITH AUTO NO-ECHO
DISPLAY " " AT 2310
GO TO PEGA-DATA-DE-PAGAMENTO.
MOVE DATA-PAR TO DATA-PAGAMENTO.
PEGA-DATA-DE-NASCIMENTO.
DISPLAY "DATA DE NASCIMENTO " AT 2310
ACCEPT DATA-PAR AT 1525 WITH AUTO.
ACCEPT TECLA FROM ESCAPE KEY
IF TECLA EQUAL 01
GO TO PEGA-DATA-DE-PAGAMENTO.
PERFORM VALIDA-DATA
IF FLAG-VALIDA EQUAL "N"
DISPLAY "DATA DE NASCIMENTO INVALIDA" AT 2310
ACCEPT PARA AT 2579 WITH AUTO NO-ECHO
DISPLAY " " AT 2310
GO TO PEGA-DATA-DE-NASCIMENTO.
MOVE DATA-PAR TO DATA-NASCIMENTO.
PEGA-ESCOLARIDADE.
DISPLAY "ESCOLARIDADE " AT 2310
ACCEPT ESCOLARIDADE AT 1625 WITH AUTO.
ACCEPT TECLA FROM ESCAPE KEY
IF TECLA EQUAL 01
GO TO PEGA-DATA-DE-NASCIMENTO.
IF ESCOLARIDADE EQUAL SPACES
DISPLAY "ESCOLARIDADE INVALIDA" AT 2310
ACCEPT PARA AT 2579 WITH AUTO NO-ECHO
DISPLAY " " AT 2310
GO TO PEGA-ESCOLARIDADE.
PEGA-NATURALIDADE.
DISPLAY "NATURALIDADE " AT 2310
ACCEPT NATURALIDADE AT 1725 WITH AUTO.
ACCEPT TECLA FROM ESCAPE KEY
IF TECLA EQUAL 01
GO TO PEGA-ESCOLARIDADE.
IF NATURALIDADE EQUAL SPACES
DISPLAY "NATURALIDADE INVALIDA" AT 2310
ACCEPT PARA AT 2579 WITH AUTO NO-ECHO
DISPLAY " " AT 2310
GO TO PEGA-NATURALIDADE.
PEGA-NACIONALIDADE.
DISPLAY "NACIONALIDADE " AT 2310
ACCEPT NACIONALIDADE AT 1825 WITH AUTO.
ACCEPT TECLA FROM ESCAPE KEY
IF TECLA EQUAL 01
GO TO PEGA-NATURALIDADE.
IF NACIONALIDADE EQUAL SPACES
DISPLAY "NACIONALIDADE INVALIDA" AT 2310
ACCEPT PARA AT 2579 WITH AUTO NO-ECHO
DISPLAY " " AT 2310
GO TO PEGA-NACIONALIDADE.
PEGA-BAIRRO.
DISPLAY "BAIRRO " AT 2310
ACCEPT BAIRRO AT 1159 WITH AUTO.
ACCEPT TECLA FROM ESCAPE KEY
IF TECLA EQUAL 01
GO TO PEGA-NACIONALIDADE.
IF BAIRRO EQUAL SPACES
DISPLAY "BAIRRO INVALIDO" AT 2310
ACCEPT PARA AT 2579 WITH AUTO NO-ECHO
DISPLAY " " AT 2310

FromSoft – Todos os direitos reservados – http://www.fromsoft.com.br Página 184


Curso de Cobol Básico

GO TO PEGA-BAIRRO.
PEGA-ESTADO.
DISPLAY "ESTADO " AT 2310
ACCEPT ESTADO AT 1259 WITH AUTO.
ACCEPT TECLA FROM ESCAPE KEY
IF TECLA EQUAL 01
GO TO PEGA-BAIRRO.
IF ESTADO EQUAL SPACES
DISPLAY "ESTADO INVALIDO" AT 2310
ACCEPT PARA AT 2579 WITH AUTO NO-ECHO
DISPLAY " " AT 2310
GO TO PEGA-ESTADO.
PEGA-CPF.
DISPLAY "CPF " AT 2310
ACCEPT CPF-FUN AT 1359 WITH AUTO.
ACCEPT TECLA FROM ESCAPE KEY
IF TECLA EQUAL 01
GO TO PEGA-ESTADO.
MOVE CPF-FUN TO CPF
IF CPF EQUAL ZEROS
DISPLAY "CPF INVALIDO" AT 2310
ACCEPT PARA AT 2579 WITH AUTO NO-ECHO
DISPLAY " " AT 2310
GO TO PEGA-CPF.
PEGA-IDENTIDADE.
DISPLAY "IDENTIDADE " AT 2310
ACCEPT IDENTIDADE AT 1459 WITH AUTO.
ACCEPT TECLA FROM ESCAPE KEY
IF TECLA EQUAL 01
GO TO PEGA-CPF.
IF IDENTIDADE EQUAL SPACES
DISPLAY "IDENTIDADE INVALIDA" AT 2310
ACCEPT PARA AT 2579 WITH AUTO NO-ECHO
DISPLAY " " AT 2310
GO TO PEGA-IDENTIDADE.
PEGA-FILIAL.
DISPLAY "FILIAL " AT 2310
ACCEPT FILIAL AT 1559 WITH AUTO.
ACCEPT TECLA FROM ESCAPE KEY
IF TECLA EQUAL 01
GO TO PEGA-IDENTIDADE.
IF FILIAL EQUAL SPACES
DISPLAY "FILIAL INVALIDA" AT 2310
ACCEPT PARA AT 2579 WITH AUTO NO-ECHO
DISPLAY " " AT 2310
GO TO PEGA-FILIAL.
PEGA-DATA-DE-ADMISSAO.
DISPLAY "DATA DE ADMISSAO " AT 2310
ACCEPT DATA-PAR AT 1659 WITH AUTO.
ACCEPT TECLA FROM ESCAPE KEY
IF TECLA EQUAL 01
GO TO PEGA-FILIAL.
PERFORM VALIDA-DATA
IF FLAG-VALIDA EQUAL "N"
DISPLAY "DATA DE ADMISSAO INVALIDA" AT 2310
ACCEPT PARA AT 2579 WITH AUTO NO-ECHO
DISPLAY " " AT 2310
GO TO PEGA-DATA-DE-ADMISSAO.
MOVE DATA-PAR TO DATA-ADMISSAO.
PEGA-SEXO.
DISPLAY "SEXO " AT 2310
ACCEPT SEXO AT 1759 WITH AUTO.
ACCEPT TECLA FROM ESCAPE KEY
IF TECLA EQUAL 01
GO TO PEGA-DATA-DE-ADMISSAO.
IF SEXO NOT EQUAL "S" AND SEXO NOT EQUAL "M"
DISPLAY "SEXO INVALIDO" AT 2310
ACCEPT PARA AT 2579 WITH AUTO NO-ECHO
DISPLAY " " AT 2310
GO TO PEGA-SEXO.
PEGA-HORAS.
DISPLAY "HORAS DE TRABALHO " AT 2310
ACCEPT HORAS-TRABALHO-FUN AT 1859 WITH AUTO.
ACCEPT TECLA FROM ESCAPE KEY
IF TECLA EQUAL 01

FromSoft – Todos os direitos reservados – http://www.fromsoft.com.br Página 185


Curso de Cobol Básico

GO TO PEGA-SEXO.
MOVE HORAS-TRABALHO-FUN TO HORAS-TRABALHO
IF HORAS-TRABALHO EQUAL ZEROS
DISPLAY "HORAS DE TRABALHO INVALIDA" AT 2310
ACCEPT PARA AT 2579 WITH AUTO NO-ECHO
DISPLAY " " AT 2310
GO TO PEGA-HORAS.
REGRAVA-REGISTRO.
REWRITE REG-ARQFUN
IF FILE-STATUS EQUAL ZEROS
PERFORM LIMPA-TELA
GO TO INICIO
ELSE
DISPLAY "ERRO DE REGRAVACAO NO ARQUIVO" AT 2310
ACCEPT PARA AT 2579 WITH AUTO NO-ECHO
GO TO FIM
END-IF.
FIM.
PERFORM FECHA-ARQUIVO
DISPLAY " " WITH ERASE EOS BACKGROUND-COLOR 0
FOREGROUND-COLOR 7.
STOP RUN.

LIMPA-TELA.
INITIALIZE CODIGO NOME ENDERECO CIDADE ATIVIDADE SETOR
SALARIO DIA-PAGAMENTO MES-PAGAMENTO ANO-PAGAMENTO
DIA-NASCIMENTO MES-NASCIMENTO ANO-NASCIMENTO
ESCOLARIDADE NATURALIDADE NACIONALIDADE BAIRRO
ESTADO CPF IDENTIDADE FILIAL DIA-ADMISSAO
MES-ADMISSAO ANO-ADMISSAO SEXO HORAS-TRABALHO
CODIGO-FUN CPF-FUN SALARIO-FUN HORAS-TRABALHO-FUN
DIA-PAR MES-PAR ANO-PAR.

ABRE-ARQUIVO.
OPEN I-O ARQFUN
IF FILE-STATUS NOT EQUAL ZEROS
IF FILE-STATUS EQUAL "05" OR "35"
OPEN OUTPUT ARQFUN
CLOSE ARQFUN
GO TO ABRE-ARQUIVO
ELSE
DISPLAY "ERRO DE ABERTURA NO ARQUIVO" AT 2310
ACCEPT PARA AT 2579 WITH AUTO NO-ECHO
GO TO FIM
END-IF
ELSE
CONTINUE
END-IF.

FECHA-ARQUIVO.
CLOSE ARQFUN
IF FILE-STATUS EQUAL ZEROS
NEXT SENTENCE
ELSE
DISPLAY "ERRO DE FECHAMENTO DO ARQUIVO" AT 2310
ACCEPT PARA AT 2579 WITH AUTO NO-ECHO
GO TO FIM.

MOSTRA-FUNCIONARIO.
DISPLAY NOME AT 0825
DISPLAY ENDERECO AT 0925
DISPLAY CIDADE AT 1025
DISPLAY ATIVIDADE AT 1125
DISPLAY SETOR AT 1225
MOVE SALARIO TO SALARIO-FUN
DISPLAY SALARIO-FUN AT 1325
MOVE DATA-PAGAMENTO TO DATA-FUN
DISPLAY DATA-PAGAMENTO AT 1425
MOVE DATA-NASCIMENTO TO DATA-FUN
DISPLAY DATA-NASCIMENTO AT 1525
DISPLAY ESCOLARIDADE AT 1625
DISPLAY NATURALIDADE AT 1725
DISPLAY NACIONALIDADE AT 1825
DISPLAY BAIRRO AT 1159
DISPLAY ESTADO AT 1259

FromSoft – Todos os direitos reservados – http://www.fromsoft.com.br Página 186


Curso de Cobol Básico

MOVE CPF TO CPF-FUN


DISPLAY CPF-FUN AT 1359
DISPLAY IDENTIDADE AT 1459
DISPLAY FILIAL AT 1559
MOVE DATA-ADMISSAO TO DATA-FUN
DISPLAY DATA-ADMISSAO AT 1659
DISPLAY SEXO AT 1759
MOVE HORAS-TRABALHO TO HORAS-TRABALHO-FUN
DISPLAY HORAS-TRABALHO-FUN AT 1859.
FIM-MOSTRA-FUNCIONARIO. EXIT.

VALIDA-DATA.
IF DIA-PAR GREATER ZEROS AND DIA-PAR LESS 32
MOVE "S" TO FLAG-VALIDA
ELSE
MOVE "N" TO FLAG-VALIDA
END-IF
IF MES-PAR GREATER ZEROS AND MES-PAR LESS 13
IF MES-PAR EQUAL 01 OR MES-PAR EQUAL 03
OR MES-PAR EQUAL 05 OR MES-PAR EQUAL 07
OR MES-PAR EQUAL 08 OR MES-PAR EQUAL 10
OR MES-PAR EQUAL 12 AND DIA-PAR LESS 32
MOVE "S" TO FLAG-VALIDA
ELSE
IF MES-PAR EQUAL 02 AND DIA-PAR LESS 30
MOVE "S" TO FLAG-VALIDA
ELSE
IF MES-PAR EQUAL 04 OR MES-PAR EQUAL 06
OR MES-PAR EQUAL 09 OR MES-PAR EQUAL 11
MOVE "S" TO FLAG-VALIDA
ELSE
MOVE "N" TO FLAG-VALIDA
END-IF
ELSE
MOVE "N" TO FLAG-VALIDA
END-IF.

Lição 13 – Exemplo 4 – Alteração de Usuarios presentes em Cadastro

IDENTIFICATION DIVISION.
PROGRAM-ID. L13EX11.
ENVIRONMENT DIVISION.
SPECIAL-NAMES.
DECIMAL-POINT IS COMMA.
FILE-CONTROL.
SELECT ARQFUN ASSIGN TO "ARQFUNI.DAT"
ORGANIZATION IS INDEXED
ACCESS MODE IS DYNAMIC
RECORD KEY IS CODIGO
ALTERNATE RECORD KEY IS NOME WITH DUPLICATES
FILE STATUS IS FILE-STATUS.
DATA DIVISION.
FILE SECTION.
FD ARQFUN.
01 REG-ARQFUN.
03 CODIGO PIC 9(05).
03 NOME PIC X(30).
03 ENDERECO PIC X(30).
03 CIDADE PIC X(20).
03 ATIVIDADE PIC X(20).
03 SETOR PIC X(20).
03 SALARIO PIC 9(11).
03 DATA-PAGAMENTO.
05 DIA-PAGAMENTO PIC 9(02).
05 FILLER PIC X(01).
05 MES-PAGAMENTO PIC 9(02).
05 FILLER PIC X(01).
05 ANO-PAGAMENTO PIC 9(02).
03 DATA-NASCIMENTO.
05 DIA-NASCIMENTO PIC 9(02).
05 FILLER PIC X(01).
05 MES-NASCIMENTO PIC 9(02).
05 FILLER PIC X(01).
05 ANO-NASCIMENTO PIC 9(02).

FromSoft – Todos os direitos reservados – http://www.fromsoft.com.br Página 187


Curso de Cobol Básico

03 ESCOLARIDADE PIC X(15).


03 NATURALIDADE PIC X(15).
03 NACIONALIDADE PIC X(15).
03 BAIRRO PIC X(20).
03 ESTADO PIC A(02).
03 CPF PIC 9(11).
03 IDENTIDADE PIC X(11).
03 FILIAL PIC X(10).
03 DATA-ADMISSAO.
05 DIA-ADMISSAO PIC 9(02).
05 FILLER PIC X(01).
05 MES-ADMISSAO PIC 9(02).
05 FILLER PIC X(01).
05 ANO-ADMISSAO PIC 9(02).
03 SEXO PIC A(01).
03 HORAS-TRABALHO PIC 9(02).

WORKING-STORAGE SECTION.
77 CODIGO-FUN PIC ZZZZZ VALUE SPACES.
77 CODIGO-ED PIC 9(05) VALUE ZEROS.
77 SALARIO-FUN PIC ZZZ.ZZZ.ZZ9,99 VALUE SPACES.
77 CPF-FUN PIC ZZZZZZZZZ.ZZ VALUE SPACES.
77 HORAS-TRABALHO-FUN PIC ZZ VALUE ZEROS.
77 DATA-FUN PIC ZZ/ZZ/ZZ VALUE SPACES.
77 MENSAGEM PIC X(30) VALUE ZEROS.
77 FLAG-VALIDA PIC X VALUE SPACE.
77 TECLA PIC XX VALUE SPACES.
77 FILE-STATUS PIC XX VALUE SPACES.
77 PARA PIC X VALUE SPACE.
77 OPCAO PIC X VALUE SPACE.
01 DATA-PAR.
03 DIA-PAR PIC 9(02) VALUE ZEROS.
03 FILLER PIC X(01) VALUE "/".
03 MES-PAR PIC 9(02) VALUE ZEROS.
03 FILLER PIC X(01) VALUE "/".
03 ANO-PAR PIC 9(02) VALUE ZEROS.
SCREEN SECTION.
01 TELA-CADASTRO.
02 BACKGROUND-COLOR 1 FOREGROUND-COLOR 7.
03 BLANK SCREEN.
03 LINE 1 COL 1 HIGHLIGHT VALUE "ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
-"ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿".
03 LINE 2 COL 1 HIGHLIGHT VALUE "ÃÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
-"ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ´".
03 LINE 3 COL 1 HIGHLIGHT VALUE "ÃÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄCA
-"DASTRO".
03 COL 37 HIGHLIGHT VALUE "DE".
03 COL 40 HIGHLIGHT VALUE "CANDIDATOSÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
-"ÄÄÄÄÄ´".
03 LINE 4 COL 1 HIGHLIGHT VALUE "ÃÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
-"ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ´".
03 LINE 5 COL 1 HIGHLIGHT VALUE "ÃÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
-"ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ´".
03 LINE 6 COL 1 HIGHLIGHT VALUE "ÃÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
-"ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ´".
03 LINE 7 COL 1 HIGHLIGHT VALUE "ÃÄ".
03 COL 4 HIGHLIGHT VALUE "CODIGO.............:".
03 COL 79 HIGHLIGHT VALUE "Ä´".
03 LINE 8 COL 1 HIGHLIGHT VALUE "ÃÄ".
03 COL 4 HIGHLIGHT VALUE "NOME...............:".
03 COL 79 HIGHLIGHT VALUE "Ä´".
03 LINE 9 COL 1 HIGHLIGHT VALUE "ÃÄ".
03 COL 4 HIGHLIGHT VALUE "ENDERECO...........:".
03 COL 79 HIGHLIGHT VALUE "Ä´".
03 LINE 10 COL 1 HIGHLIGHT VALUE "ÃÄ".
03 COL 4 HIGHLIGHT VALUE "CIDADE.............:".
03 COL 79 HIGHLIGHT VALUE "Ä´".
03 LINE 11 COL 1 HIGHLIGHT VALUE "ÃÄ".
03 COL 4 HIGHLIGHT VALUE "ATIVIDADE..........:".
03 COL 46 HIGHLIGHT VALUE "BAIRRO.....:".
03 COL 79 HIGHLIGHT VALUE "Ä´".
03 LINE 12 COL 1 HIGHLIGHT VALUE "ÃÄ".
03 COL 4 HIGHLIGHT VALUE "SETOR..............:".
03 COL 46 HIGHLIGHT VALUE "ESTADO.....:".
03 COL 79 HIGHLIGHT VALUE "Ä´".

FromSoft – Todos os direitos reservados – http://www.fromsoft.com.br Página 188


Curso de Cobol Básico

03 LINE 13 COL 1 HIGHLIGHT VALUE "ÃÄ".


03 COL 4 HIGHLIGHT VALUE "SALARIO............:".
03 COL 46 HIGHLIGHT VALUE "CPF........:".
03 COL 79 HIGHLIGHT VALUE "Ä´".
03 LINE 14 COL 1 HIGHLIGHT VALUE "ÃÄ".
03 COL 4 HIGHLIGHT VALUE "DATA".
03 COL 9 HIGHLIGHT VALUE "DE".
03 COL 12 HIGHLIGHT VALUE "PAGAMENTO..:".
03 COL 27 HIGHLIGHT VALUE "/".
03 COL 30 HIGHLIGHT VALUE "/".
03 COL 46 HIGHLIGHT VALUE "IDENTIDADE.:".
03 COL 79 HIGHLIGHT VALUE "Ä´".
03 LINE 15 COL 1 HIGHLIGHT VALUE "ÃÄ".
03 COL 4 HIGHLIGHT VALUE "DATA".
03 COL 9 HIGHLIGHT VALUE "DE".
03 COL 12 HIGHLIGHT VALUE "NASCIMENTO.:".
03 COL 27 HIGHLIGHT VALUE "/".
03 COL 30 HIGHLIGHT VALUE "/".
03 COL 46 HIGHLIGHT VALUE "FILIAL.....:".
03 COL 79 HIGHLIGHT VALUE "Ä´".
03 LINE 16 COL 1 HIGHLIGHT VALUE "ÃÄ".
03 COL 4 HIGHLIGHT VALUE "ESCOLARIDADE.......:".
03 COL 46 HIGHLIGHT VALUE "ADMISSAO...:".
03 COL 61 HIGHLIGHT VALUE "/".
03 COL 64 HIGHLIGHT VALUE "/".
03 COL 79 HIGHLIGHT VALUE "Ä´".
03 LINE 17 COL 1 HIGHLIGHT VALUE "ÃÄ".
03 COL 4 HIGHLIGHT VALUE "NATURALIDADE.......:".
03 COL 46 HIGHLIGHT VALUE "SEXO.......:".
03 COL 79 HIGHLIGHT VALUE "Ä´".
03 LINE 18 COL 1 HIGHLIGHT VALUE "ÃÄ".
03 COL 4 HIGHLIGHT VALUE "NACIONALIDADE......:".
03 COL 46 HIGHLIGHT VALUE "HORAS/DIA..:".
03 COL 79 HIGHLIGHT VALUE "Ä´".
03 LINE 19 COL 1 HIGHLIGHT VALUE "ÃÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
-"ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ´".
03 LINE 20 COL 1 HIGHLIGHT VALUE "ÃÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
-"ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ´".
03 LINE 21 COL 1 HIGHLIGHT VALUE "ÃÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
-"ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ´".
03 LINE 22 COL 1 HIGHLIGHT VALUE "ÃÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
-"ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ´".
03 LINE 23 COL 1 HIGHLIGHT VALUE "³INFORME".
03 COL 80 HIGHLIGHT VALUE "³".
03 LINE 24 COL 1 HIGHLIGHT VALUE "ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
-"ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ".
03 LINE 25 COL 1 BACKGROUND-COLOR 0 HIGHLIGHT VALUE "
-"
-" ".

PROCEDURE DIVISION.
PERFORM ABRE-ARQUIVO.
INICIO.
DISPLAY TELA-CADASTRO.
PERFORM LIMPA-TELA.
PEGA-CODIGO.
DISPLAY "CODIGO " AT 2310.
ACCEPT CODIGO-FUN AT 0725 WITH AUTO PROMPT
ACCEPT TECLA FROM ESCAPE KEY
IF TECLA EQUAL 01
GO TO FIM.
MOVE CODIGO-FUN TO CODIGO
IF CODIGO EQUAL ZEROS
DISPLAY "CODIGO INVALIDO" AT 2310
ACCEPT PARA AT 2579 WITH AUTO NO-ECHO
DISPLAY " " AT 2310
PERFORM FECHA-ARQUIVO
GO TO PEGA-CODIGO.
READ ARQFUN INVALID KEY
DISPLAY "CODIGO NAO CADASTRADO" AT 2310
ACCEPT PARA AT 2579 WITH AUTO NO-ECHO
DISPLAY " " AT 2310
PERFORM LIMPA-TELA
GO TO PEGA-CODIGO

FromSoft – Todos os direitos reservados – http://www.fromsoft.com.br Página 189


Curso de Cobol Básico

NOT INVALID KEY


PERFORM MOSTRA-FUNCIONARIO THRU FIM-MOSTRA-FUNCIONARIO
PERFORM LIMPA-TELA
GO TO PEGA-CODIGO.
FIM-PEGA-CODIGO. EXIT.

MOSTRA-FUNCIONARIO.
DISPLAY NOME AT 0825
DISPLAY ENDERECO AT 0925
DISPLAY CIDADE AT 1025
DISPLAY ATIVIDADE AT 1125
DISPLAY SETOR AT 1225
MOVE SALARIO TO SALARIO-FUN
DISPLAY SALARIO-FUN AT 1325
MOVE DATA-PAGAMENTO TO DATA-FUN
DISPLAY DATA-PAGAMENTO AT 1425
MOVE DATA-NASCIMENTO TO DATA-FUN
DISPLAY DATA-NASCIMENTO AT 1525
DISPLAY ESCOLARIDADE AT 1625
DISPLAY NATURALIDADE AT 1725
DISPLAY NACIONALIDADE AT 1825
DISPLAY BAIRRO AT 1159
DISPLAY ESTADO AT 1259
MOVE CPF TO CPF-FUN
DISPLAY CPF-FUN AT 1359
DISPLAY IDENTIDADE AT 1459
DISPLAY FILIAL AT 1559
MOVE DATA-ADMISSAO TO DATA-FUN
DISPLAY DATA-ADMISSAO AT 1659
DISPLAY SEXO AT 1759
MOVE HORAS-TRABALHO TO HORAS-TRABALHO-FUN
DISPLAY HORAS-TRABALHO-FUN AT 1859
PERFORM EXCLUI-REGISTRO.
FIM-MOSTRA-FUNCIONARIO. EXIT.

FIM.
PERFORM FECHA-ARQUIVO
DISPLAY " " WITH ERASE EOS BACKGROUND-COLOR 0
FOREGROUND-COLOR 7.
STOP RUN.

LIMPA-TELA.
INITIALIZE CODIGO NOME ENDERECO CIDADE ATIVIDADE SETOR
SALARIO DIA-PAGAMENTO MES-PAGAMENTO ANO-PAGAMENTO
DIA-NASCIMENTO MES-NASCIMENTO ANO-NASCIMENTO
ESCOLARIDADE NATURALIDADE NACIONALIDADE BAIRRO
ESTADO CPF IDENTIDADE FILIAL DIA-ADMISSAO
MES-ADMISSAO ANO-ADMISSAO SEXO HORAS-TRABALHO
CODIGO-FUN CPF-FUN SALARIO-FUN HORAS-TRABALHO-FUN
DIA-PAR MES-PAR ANO-PAR
DISPLAY " " AT 0825
DISPLAY " " AT 0925
DISPLAY " " AT 1025
DISPLAY " " AT 1125
DISPLAY " " AT 1225
DISPLAY " " AT 1325
DISPLAY " / / " AT 1425
DISPLAY " / / " AT 1525
DISPLAY " " AT 1625
DISPLAY " " AT 1725
DISPLAY " " AT 1825
DISPLAY " " AT 1159
DISPLAY " " AT 1259
DISPLAY " " AT 1359
DISPLAY " " AT 1459
DISPLAY " " AT 1559
DISPLAY " / / " AT 1659
DISPLAY " " AT 1759
DISPLAY " " AT 1859.

ABRE-ARQUIVO.
OPEN I-O ARQFUN
IF FILE-STATUS EQUAL ZEROS
CONTINUE

FromSoft – Todos os direitos reservados – http://www.fromsoft.com.br Página 190


Curso de Cobol Básico

ELSE
DISPLAY "ERRO DE ABERTURA NO ARQUIVO" AT 2310
ACCEPT PARA AT 2579 WITH AUTO NO-ECHO
GO TO FIM.

FECHA-ARQUIVO.
CLOSE ARQFUN
IF FILE-STATUS EQUAL ZEROS
NEXT SENTENCE
ELSE
DISPLAY "ERRO DE FECHAMENTO DO ARQUIVO" AT 2310
ACCEPT PARA AT 2579 WITH AUTO NO-ECHO
GO TO FIM.

EXCLUI-REGISTRO.
DISPLAY "VOCE DESEJA FAZER A EXCLUSAO?(S/N)" AT 2310
ACCEPT OPCAO AT 2344 WITH AUTO UPPER
IF OPCAO EQUAL "S"
DELETE ARQFUN
IF FILE-STATUS EQUAL ZEROS
CONTINUE
ELSE
DISPLAY "ERRO DE DELECAO DO REGISTRO" AT 2310
ACCEPT PARA AT 2579 WITH AUTO NO-ECHO
GO TO FIM
END-IF
ELSE
IF OPCAO EQUAL "N"
CONTINUE
END-IF.

FromSoft – Todos os direitos reservados – http://www.fromsoft.com.br Página 191


Curso de Cobol Básico

Lição 13 - Exercícios

Arquivos Indexados
earqind.cpy – Estrutura do Arquivo Indexado.cpy
larqind.cpy – Layout do Arquivo Indexado.cpy.
P.S – A Record key é o código
P.S – A Alternate record key é o nome

Nome de arquivo: Arqfuni.


Nome de Arquivo Físico: arqfuni.dat
Nome de Arquivo de Indice: arqfuni.idx
Organização: Indexado
Modo de Acesso: Dinâmico (Pois vai precisar no proximo exercício de fazer leitura sequencial)
Variavel de File Status: File-Status.
Nome de registro de FD: Reg-Arqfuni

1. Copiar o PROG30.CBL criando um programa de nome PROG34.CBL alterando a estrutura o layout e


a programação do programa para trabalhar com inclusão de registros com arquivos do tipo INDEXED.
Use os Layouts criados na lição 10.
- O nome externo do arquivo deverá ser “ARQFUNI.DAT”

Após cadastrar alguns funcionários, fazer:


- editar o arquivo ARQFUNI.DAT (com o Edit do DOS ou outro editor de texto qualquer) e verificar como
os dados foram gravados nele.
- sair do programa, entrar novamente e cadastrar novos funcionários
- editar novamente o arquivo e verificar se acrescentou esses novos funcionários após os anteriores.

2. Copiar o PROG31.CBL criando um programa de nome PROG35.CBL alterando a estrutura o layout e


a programação do programa para fazer leitura de registros com arquivos do tipo INDEXED. Para testar a
leitura, lembrar que no arquivo indexado você lê os registros pela sua chave, podendo procurar tanto
com o START como com o READ.

3. Copiar o PROG32.CBL criando um programa de nome PROG36.CBL alterando a estrutura o layout e


a programação do programa para fazer alteração de registros com arquivos do tipo INDEXED.

4. Copiar o PROG33.CBL criando um programa de nome PROG37.CBL alterando a estrutura o layout e


a programação do programa para fazer exclusão com arquivos do tipo INDEXED.

FromSoft – Todos os direitos reservados – http://www.fromsoft.com.br Página 192


Curso de Cobol Básico

Lição 14

Lição 14 - Conceitos

14.1 - Arquivo de relatório: imprimindo o que foi guardado

Conceito: Em qualquer programa que é criado, costuma-se disponibilizar os dados presentes


em arquivos em mídia física, em forma de relatório.
Um tipo de arquivo SEQUENCIAL especial é o arquivo declarado para impressão de relatórios.,
estará sempre sendo gerado, portanto deverá ser aberto como OUTPUT e o comando de gravação para
trabalhar com ele é especial, WRITE <registro> FROM <Dados>... AFTER/BEFORE ... [“n”]/[page] .
Veremos estes detalhes a seguir.

14.2 – Declaração do arquivo de relatório

Conceito: O arquivo deverá ser declarado com SELECT ... ASSIGN TO PRINTER e na FD é
necessário apenas indicar o tamanho máximo das linhas do relatório.

FILE-CONTROL.
SELECT RELFICHA ASSIGN TO PRINTER
ORGANIZATION IS SEQUENTIAL
FILE STATUS IS FILE-STATUS.

DATA DIVISION.
FILE SECTION.
FD RELFUN.
01 REG-RELFUN PIC X(132).

14.3 – Declaração das linhas do relatório

Conceito: Geralmente um relatório é definido com vários tipos de linha: cabeçalho, detalhe
(dados), rodapé e linhas de totalização. Além disso, é normal colocar bordas, datas, página, etc. Então
para se desenhar esses detalhes, as linhas são definidas na WORKING-STORAGE SECTION, e cada
linha é representada por uma variável grupo, ao qual o nome será referenciado na hora de realizar os
comandos para impressão.

01 CABECALHO1.
03 FILLER PIC X(08) VALUE "CODIGO".
03 FILLER PIC X(53) VALUE " NOME".
03 FILLER PIC X(17) VALUE " SALARIO".

01 DETALHE.
03 FILLER PIC X(01) VALUE SPACES.
03 COD-DET PIC Z(4)9.
03 FILLER PIC X(02) VALUE SPACES.
03 NOME-DET PIC X(50).
03 FILLER PIC X(02) VALUE SPACES.
03 SAL-DET PIC ZZ.ZZZ.ZZ9,99.

14.4 - Constante figurativa ALL

Conceito: Caso tenhamos que preencher uma variável que tenha mais de um caracter com um
determinado valor, podemos declarar uma constante figurativa em uma cláusula VALUE e o caracter a
ser preenchido em todo o campo na qual for especificada. Então usa-se a constante figurativa ALL para
preencher todo o valor da mesma. Podemos usar a constante figurativa ALL em um comando MOVE
para provocar o preenchimento de todo um campo com o caracter especificado.

01 CABECALHO2.
03 FILLER PIC X(78) VALUE ALL "-".

Ou:

FromSoft – Todos os direitos reservados – http://www.fromsoft.com.br Página 193


Curso de Cobol Básico

MOVE ALL “*” TO CABECALHO2.

14.5 – Impressão do relatório

Conceito: Um arquivo de relatório deve ser aberto como OUTPUT. Além disso, quando se faz a
impressão de um relatório, imprime-se linha a linha utilizando o comando WRITE seguido do parâmetro
FROM e do nome da linha a ser gravada. Pode-se incluir os parâmetros AFTER ou BEFORE, se
necessário. Caso não seja especificada uma cláusula AFTER ou BEFORE no comando WRITE,
assumirá a impressão da linha depois de saltar uma. A cláusula PAGE irá orientar a impressora para
iniciar a impressão da próxima linha partir da próxima página.

WRITE REG-RELFUN FROM CABECALHO1 AFTER 1.


WRITE REG-RELFUN FROM CABECALHO2 AFTER 1.
WRITE REG-RELFUN FROM DETALHE AFTER 2
WRITE REG-RELFUN FROM SPACES AFTER PAGE.

Lição 14 – Exemplo 1 – Impressão de fichas


IDENTIFICATION DIVISION.
PROGRAM-ID. L14EX01.
ENVIRONMENT DIVISION.
SPECIAL-NAMES.
DECIMAL-POINT IS COMMA.
FILE-CONTROL.
SELECT ARQFUN ASSIGN TO "ARQFUNI.DAT"
ORGANIZATION IS INDEXED
ACCESS MODE IS DYNAMIC
RECORD KEY IS CODIGO
ALTERNATE RECORD KEY IS NOME WITH DUPLICATES
FILE STATUS IS FILE-STATUS.
SELECT RELFUN ASSIGN TO PRINTER
ORGANIZATION IS LINE SEQUENTIAL
ACCESS MODE IS SEQUENTIAL
FILE STATUS IS FILE-STATUS.
DATA DIVISION.
FILE SECTION.
FD ARQFUN.
01 REG-ARQFUN.
03 CODIGO PIC 9(05).
03 NOME PIC X(30).
03 ENDERECO PIC X(30).
03 CIDADE PIC X(20).
03 ATIVIDADE PIC X(20).
03 SETOR PIC X(20).
03 SALARIO PIC 9(11).
03 DATA-PAGAMENTO.
05 DIA-PAGAMENTO PIC 9(02).
05 FILLER PIC X(01).
05 MES-PAGAMENTO PIC 9(02).
05 FILLER PIC X(01).
05 ANO-PAGAMENTO PIC 9(02).
03 DATA-NASCIMENTO.
05 DIA-NASCIMENTO PIC 9(02).
05 FILLER PIC X(01).
05 MES-NASCIMENTO PIC 9(02).
05 FILLER PIC X(01).
05 ANO-NASCIMENTO PIC 9(02).
03 ESCOLARIDADE PIC X(15).
03 NATURALIDADE PIC X(15).
03 NACIONALIDADE PIC X(15).
03 BAIRRO PIC X(20).
03 ESTADO PIC A(02).
03 CPF PIC 9(11).
03 IDENTIDADE PIC X(11).
03 FILIAL PIC X(10).
03 DATA-ADMISSAO.
05 DIA-ADMISSAO PIC 9(02).
05 FILLER PIC X(01).
05 MES-ADMISSAO PIC 9(02).
05 FILLER PIC X(01).
05 ANO-ADMISSAO PIC 9(02).
03 SEXO PIC A(01).

FromSoft – Todos os direitos reservados – http://www.fromsoft.com.br Página 194


Curso de Cobol Básico

03 HORAS-TRABALHO PIC 9(02).


FD RELFUN.
01 REG-RELFUN PIC X(80).
WORKING-STORAGE SECTION.
77 PARA PIC X VALUE SPACES.
77 FILE-STATUS PIC XX VALUE SPACES.
77 CONTADOR PIC 9(05) VALUE ZEROS.
77 LIMITE-CONTADOR PIC 9(05) VALUE ZEROS.
01 HORA-FROM-TIME.
03 HORA PIC 99 VALUE ZEROS.
03 MINUTO PIC 99 VALUE ZEROS.
01 DATA-FROM-DATE.
03 ANO PIC 99 VALUE ZEROS.
03 MES PIC 99 VALUE ZEROS.
03 DIA PIC 99 VALUE ZEROS.
77 PAGINA-ATUAL PIC 99999 VALUE ZEROS.
01 LINHA-DETALHE.
03 FILLER PIC X VALUE "+".
03 FILLER PIC X(78) VALUE ALL "-".
03 FILLER PIC X VALUE "+".
01 LINHA-CABECALHO.
03 FILLER PIC X VALUE "|".
03 FILLER PIC X(78) VALUE
" RELATORIO - PROG30 ".
03 FILLER PIC X VALUE "|".
01 LINHA-DADOS-PESSOAIS.
03 FILLER PIC X VALUE "|".
03 FILLER PIC X(78) VALUE
" DADOS PESSOAIS ".
03 FILLER PIC X VALUE "|".
01 LINHA-NOME-CODIGO.
03 FILLER PIC XX VALUE "| ".
03 FILLER PIC X(06) VALUE "NOME: ".
03 DETALHE-NOME PIC X(30) VALUE SPACES.
03 FILLER PIC X(26) VALUE SPACES.
03 FILLER PIC X(09) VALUE "CODIGO: ".
03 DETALHE-CODIGO PIC Z(05) VALUE SPACES.
03 FILLER PIC XX VALUE " |".
01 LINHA-ENDERECO.
03 FILLER PIC XX VALUE "| ".
03 FILLER PIC X(10) VALUE "ENDERECO: ".
03 DETALHE-ENDERECO PIC X(30) VALUE SPACES.
03 FILLER PIC X(36) VALUE SPACES.
03 FILLER PIC XX VALUE " |".
01 LINHA-BAIRRO-CIDAD-ESTADO-SEXO.
03 FILLER PIC XX VALUE "| ".
03 FILLER PIC X(08) VALUE "BAIRRO: ".
03 DETALHE-BAIRRO PIC X(20) VALUE SPACES.
03 FILLER PIC X(09) VALUE " CIDADE: ".
03 DETALHE-CIDADE PIC X(20) VALUE SPACES.
03 FILLER PIC X(09) VALUE " ESTADO: ".
03 DETALHE-ESTADO PIC X(02) VALUE SPACES.
03 FILLER PIC X(07) VALUE " SEXO: ".
03 DETALHE-SEXO PIC X(01) VALUE SPACES.
03 FILLER PIC XX VALUE " |".
01 LINHA-DATAS-NASCTO-ADMISSAO.
03 FILLER PIC XX VALUE "| ".
03 FILLER PIC X(20) VALUE
"DATA DE NASCIMENTO: ".
03 DETALHE-DATA-NASCTO.
05 DETALHE-DIA-NASCTO PIC Z(02) VALUE SPACES.
05 FILLER PIC X(01) VALUE "/".
05 DETALHE-MES-NASCTO PIC Z(02) VALUE SPACES.
05 FILLER PIC X(01) VALUE "/".
05 DETALHE-ANO-NASCTO PIC Z(02) VALUE SPACES.
03 FILLER PIC X(21) VALUE
" DATA DE ADMISSAO: ".
03 DETALHE-DATA-ADMISSAO.
05 DETALHE-DIA-ADMISSAO PIC Z(02) VALUE SPACES.
05 FILLER PIC X(01) VALUE "/".
05 DETALHE-MES-ADMISSAO PIC Z(02) VALUE SPACES.
05 FILLER PIC X(01) VALUE "/".
05 DETALHE-ANO-ADMISSAO PIC Z(02) VALUE SPACES.
03 FILLER PIC X(19) VALUE SPACES.
03 FILLER PIC XX VALUE " |".

FromSoft – Todos os direitos reservados – http://www.fromsoft.com.br Página 195


Curso de Cobol Básico

01 LINHA-CPF-IDENT-ESC.
03 FILLER PIC XX VALUE "| ".
03 FILLER PIC X(05) VALUE "CPF: ".
03 DETALHE-CPF PIC ZZZZZZZZZ.ZZ.
03 FILLER PIC X(12) VALUE SPACES.
03 FILLER PIC X(13) VALUE "IDENTIDADE: ".
03 DETALHE-IDENTIDADE PIC X(11) VALUE SPACES.
03 FILLER PIC X(03) VALUE SPACES.
03 FILLER PIC X(05) VALUE "ESC: ".
03 DETALHE-ESCOLARIDADE PIC X(15) VALUE SPACES.
03 FILLER PIC XX VALUE " |".
01 LINHA-DADOS-PROFISSIONAIS.
03 FILLER PIC X VALUE "|".
03 FILLER PIC X(78) VALUE
" DADOS PROFISSIONAIS".
03 FILLER PIC X VALUE "|".
01 LINHA-NATURAL-NACIONAL.
03 FILLER PIC XX VALUE "| ".
03 FILLER PIC X(14) VALUE "NATURALIDADE: ".
03 DETALHE-NATURALIDADE PIC X(20) VALUE SPACES.
03 FILLER PIC X(15) VALUE "NACIONALIDADE: ".
03 DETALHE-NACIONALIDADE PIC X(15) VALUE SPACES.
03 FILLER PIC X(12) VALUE SPACES.
03 FILLER PIC XX VALUE " |".
01 LINHA-SETOR-ATIV.
03 FILLER PIC XX VALUE "| ".
03 FILLER PIC X(07) VALUE "SETOR: ".
03 DETALHE-SETOR PIC X(20) VALUE SPACES.
03 FILLER PIC X(06) VALUE SPACES.
03 FILLER PIC X(12) VALUE " ATIVIDADE: ".
03 DETALHE-ATIVIDADE PIC X(20) VALUE SPACES.
03 FILLER PIC X(11) VALUE SPACES.
03 FILLER PIC XX VALUE " |".
01 LINHA-HORAS-SALARIO-FILIAL.
03 FILLER PIC XX VALUE "| ".
03 FILLER PIC X(09) VALUE "SALARIO: ".
03 DETALHE-SALARIO PIC ZZZ.ZZZ.ZZ9,99.
03 FILLER PIC X(10) VALUE SPACES.
03 FILLER PIC X(20) VALUE
" HORAS DE TRABALHO: ".
03 DETALHE-HORAS-TRABALHO PIC Z(02) VALUE SPACES.
03 FILLER PIC X(09) VALUE " FILIAL: ".
03 DETALHE-FILIAL PIC X(10) VALUE SPACES.
03 FILLER PIC XX VALUE SPACES.
03 FILLER PIC XX VALUE " |".
01 LINHA-DATA-PAGAMENTO.
03 FILLER PIC XX VALUE "| ".
03 FILLER PIC X(20) VALUE
"DATA DE PAGAMENTO: ".
03 DETALHE-DATA-PAGTO.
05 DETALHE-DIA-PAGTO PIC Z(02) VALUE SPACES.
05 FILLER PIC X(01) VALUE "/".
05 DETALHE-MES-PAGTO PIC Z(02) VALUE SPACES.
05 FILLER PIC X(01) VALUE "/".
05 DETALHE-ANO-PAGTO PIC Z(02) VALUE SPACES.

03 FILLER PIC X(48) VALUE SPACES.


03 FILLER PIC XX VALUE " |".

01 LINHA-DADOS-DA-IMPRESSAO.
03 FILLER PIC X VALUE "|".
03 FILLER PIC X(78) VALUE
" DADOS IMPRESSAO".
03 FILLER PIC X VALUE "|".
01 LINHA-HORA-DATA-PAGINA-ALUNO.
03 FILLER PIC XX VALUE "| ".
03 FILLER PIC X(12) VALUE "HORA ATUAL: ".
03 DETALHE-HORA-ATUAL.
05 DETALHE-HORA PIC Z(02) VALUE SPACES.
05 FILLER PIC X VALUE ":".
05 DETALHE-MINUTO PIC Z(02) VALUE SPACES.
03 FILLER PIC X(13) VALUE " DATA ATUAL: ".
03 DETALHE-DATA-ATUAL.
05 DETALHE-DIA PIC 9(02) VALUE ZEROS.
05 FILLER PIC X VALUE "/".

FromSoft – Todos os direitos reservados – http://www.fromsoft.com.br Página 196


Curso de Cobol Básico

05 DETALHE-MES PIC 9(02) VALUE ZEROS.


05 FILLER PIC X VALUE "/".
05 DETALHE-ANO PIC 9(02) VALUE ZEROS.
03 FILLER PIC X(09) VALUE " PAGINA: ".
03 DETALHE-PAGINA PIC Z(05) VALUE SPACES.
03 FILLER PIC X(08) VALUE " ALUNO: ".
03 DETALHE-ALUNO PIC X(06) VALUE "MODELO".
03 FILLER PIC X(10) VALUE SPACES.
03 FILLER PIC XX VALUE " |".
PROCEDURE DIVISION.
INICIO.
PERFORM INICIALIZA-CAMPOS THRU FIM-INICIALIZA-CAMPOS.
PERFORM ABRE-ARQUIVOS THRU FIM-ABRE-ARQUIVOS.
PERFORM IMPRIME-RELATORIO THRU FIM-IMPRIME-RELATORIO.
PERFORM FECHA-ARQUIVOS THRU FIM-FECHA-ARQUIVOS.
FIM.
DISPLAY " " AT 0101 WITH ERASE EOS BACKGROUND-COLOR 0
FOREGROUND-COLOR 7.
STOP RUN.

INICIALIZA-CAMPOS.
INITIALIZE CODIGO NOME ENDERECO CIDADE ATIVIDADE SETOR
SALARIO DIA-PAGAMENTO MES-PAGAMENTO ANO-PAGAMENTO
DIA-NASCIMENTO MES-NASCIMENTO ANO-NASCIMENTO
ESCOLARIDADE NATURALIDADE NACIONALIDADE BAIRRO
ESTADO CPF IDENTIDADE FILIAL DIA-ADMISSAO
MES-ADMISSAO ANO-ADMISSAO SEXO HORAS-TRABALHO
DETALHE-CODIGO DETALHE-NOME DETALHE-ENDERECO
DETALHE-CIDADE DETALHE-ATIVIDADE DETALHE-SETOR
DETALHE-SALARIO DETALHE-DATA-PAGTO
DETALHE-ESCOLARIDADE DETALHE-NATURALIDADE
DETALHE-NACIONALIDADE DETALHE-BAIRRO
DETALHE-DATA-ADMISSAO DETALHE-DATA-NASCTO
DETALHE-ESTADO DETALHE-CPF DETALHE-IDENTIDADE
DETALHE-FILIAL DETALHE-SEXO
DETALHE-HORAS-TRABALHO.
FIM-INICIALIZA-CAMPOS. EXIT.

ABRE-ARQUIVOS.
OPEN INPUT ARQFUN
IF FILE-STATUS EQUAL ZEROS
CONTINUE
ELSE
DISPLAY "ERRO DE ABERTURA DE ARQUIVO" AT 2315
ACCEPT PARA AT 2579 WITH AUTO NO-ECHO
GO TO FIM
END-IF

OPEN OUTPUT RELFUN


IF FILE-STATUS EQUAL ZEROS
CONTINUE
ELSE
DISPLAY "ERRO DE CRIACAO DE ARQUIVO" AT 2315
ACCEPT PARA AT 2579 WITH AUTO NO-ECHO
GO TO FIM
END-IF.
FIM-ABRE-ARQUIVOS. EXIT.

IMPRIME-RELATORIO.
MOVE 99999 TO CODIGO
START ARQFUN KEY IS NOT GREATER CODIGO INVALID KEY
GO TO FIM
NOT INVALID KEY
READ ARQFUN PREVIOUS AT END GO TO FIM
NOT END
MOVE CODIGO TO LIMITE-CONTADOR
END-READ
ADD 1 TO LIMITE-CONTADOR
INITIALIZE CODIGO
START ARQFUN KEY IS NOT LESS CODIGO INVALID KEY
GO TO FIM
NOT INVALID KEY
PERFORM VARYING CONTADOR FROM 1 BY 1 UNTIL CONTADOR
GREATER OR EQUAL LIMITE-CONTADOR
READ ARQFUN NEXT AT END GO TO FIM-IMPRIME-RELATORIO

FromSoft – Todos os direitos reservados – http://www.fromsoft.com.br Página 197


Curso de Cobol Básico

NOT AT END
PERFORM IMPRIME-CABECALHO THRU FIM-IMPRIME-CABECALHO
MOVE CODIGO TO DETALHE-CODIGO
MOVE NOME TO DETALHE-NOME
MOVE ENDERECO TO DETALHE-ENDERECO
MOVE CIDADE TO DETALHE-CIDADE
MOVE ATIVIDADE TO DETALHE-ATIVIDADE
MOVE SETOR TO DETALHE-SETOR
MOVE SALARIO TO DETALHE-SALARIO
MOVE DATA-PAGAMENTO TO DETALHE-DATA-PAGTO
MOVE DATA-NASCIMENTO TO DETALHE-DATA-NASCTO
MOVE ESCOLARIDADE TO DETALHE-ESCOLARIDADE
MOVE NATURALIDADE TO DETALHE-NATURALIDADE
MOVE NACIONALIDADE TO DETALHE-NACIONALIDADE
MOVE BAIRRO TO DETALHE-BAIRRO
MOVE ESTADO TO DETALHE-ESTADO
MOVE CPF TO DETALHE-CPF
MOVE IDENTIDADE TO DETALHE-IDENTIDADE
MOVE FILIAL TO DETALHE-FILIAL
MOVE DATA-ADMISSAO TO DETALHE-DATA-ADMISSAO
MOVE SEXO TO DETALHE-SEXO
MOVE HORAS-TRABALHO TO DETALHE-HORAS-TRABALHO
PERFORM IMPRIME-CORPO THRU FIM-IMPRIME-CORPO
END-READ
END-PERFORM.
FIM-IMPRIME-RELATORIO. EXIT.

FECHA-ARQUIVOS.
CLOSE ARQFUN
IF FILE-STATUS EQUAL ZEROS
CONTINUE
ELSE
DISPLAY "ERRO DE FECHAMENTO DE ARQUIVO" AT 2315
ACCEPT PARA AT 2579 WITH AUTO NO-ECHO
GO TO FIM
END-IF

CLOSE RELFUN
IF FILE-STATUS EQUAL ZEROS
CONTINUE
ELSE
DISPLAY "ERRO DE FECHAMENTO DE RELATORIO" AT 2315
ACCEPT PARA AT 2579 WITH AUTO NO-ECHO
GO TO FIM
END-IF.
FIM-FECHA-ARQUIVOS. EXIT.

IMPRIME-CABECALHO.
WRITE REG-RELFUN FROM LINHA-DETALHE AFTER 1.
WRITE REG-RELFUN FROM LINHA-CABECALHO AFTER 1.
WRITE REG-RELFUN FROM LINHA-DETALHE AFTER 1.
WRITE REG-RELFUN FROM LINHA-DADOS-PESSOAIS AFTER 1.
WRITE REG-RELFUN FROM LINHA-DETALHE AFTER 1.
FIM-IMPRIME-CABECALHO. EXIT.

IMPRIME-CORPO.
WRITE REG-RELFUN FROM LINHA-NOME-CODIGO AFTER 1.
WRITE REG-RELFUN FROM LINHA-ENDERECO AFTER 1.
WRITE REG-RELFUN FROM LINHA-BAIRRO-CIDAD-ESTADO-SEXO AFTER 1.
WRITE REG-RELFUN FROM LINHA-DATAS-NASCTO-ADMISSAO AFTER 1.
WRITE REG-RELFUN FROM LINHA-CPF-IDENT-ESC AFTER 1.
PERFORM IMPRIME-DADOS-PROF THRU FIM-IMPRIME-DADOS-PROF.
WRITE REG-RELFUN FROM LINHA-NATURAL-NACIONAL AFTER 1.
WRITE REG-RELFUN FROM LINHA-SETOR-ATIV AFTER 1.
WRITE REG-RELFUN FROM LINHA-HORAS-SALARIO-FILIAL AFTER 1.
WRITE REG-RELFUN FROM LINHA-DATA-PAGAMENTO AFTER 1.
PERFORM IMPRIME-DADOS-IMP THRU FIM-IMPRIME-DADOS-IMP.
PERFORM PEGA-DADOS-RODAPE THRU FIM-PEGA-DADOS-RODAPE.
WRITE REG-RELFUN FROM LINHA-HORA-DATA-PAGINA-ALUNO AFTER 1.
WRITE REG-RELFUN FROM LINHA-DETALHE AFTER 1.
INITIALIZE REG-RELFUN.
WRITE REG-RELFUN AFTER PAGE.
FIM-IMPRIME-CORPO. EXIT.

IMPRIME-DADOS-PROF.

FromSoft – Todos os direitos reservados – http://www.fromsoft.com.br Página 198


Curso de Cobol Básico

WRITE REG-RELFUN FROM LINHA-DETALHE AFTER 1.


WRITE REG-RELFUN FROM LINHA-DADOS-PROFISSIONAIS AFTER 1.
WRITE REG-RELFUN FROM LINHA-DETALHE AFTER 1.
FIM-IMPRIME-DADOS-PROF. EXIT.

IMPRIME-DADOS-IMP.
WRITE REG-RELFUN FROM LINHA-DETALHE AFTER 1.
WRITE REG-RELFUN FROM LINHA-DADOS-DA-IMPRESSAO AFTER 1.
WRITE REG-RELFUN FROM LINHA-DETALHE AFTER 1.
FIM-IMPRIME-DADOS-IMP. EXIT.

PEGA-DADOS-RODAPE.
ACCEPT HORA-FROM-TIME FROM TIME
MOVE HORA TO DETALHE-HORA
MOVE MINUTO TO DETALHE-MINUTO
ACCEPT DATA-FROM-DATE FROM DATE
MOVE DIA TO DETALHE-DIA
MOVE MES TO DETALHE-MES
MOVE ANO TO DETALHE-ANO
ADD 1 TO PAGINA-ATUAL
MOVE PAGINA-ATUAL TO DETALHE-PAGINA.
FIM-PEGA-DADOS-RODAPE. EXIT.

Lição 14 – Exemplo 2 – Impressão de lista

IDENTIFICATION DIVISION.
PROGRAM-ID. L14EX02.
ENVIRONMENT DIVISION.
SPECIAL-NAMES.
DECIMAL-POINT IS COMMA.
FILE-CONTROL.
SELECT ARQFUN ASSIGN TO "ARQFUNI.DAT"
ORGANIZATION IS INDEXED
ACCESS MODE IS DYNAMIC
RECORD KEY IS CODIGO
ALTERNATE RECORD KEY IS NOME WITH DUPLICATES
FILE STATUS IS FILE-STATUS.
SELECT RELFUN ASSIGN TO PRINTER
ORGANIZATION IS LINE SEQUENTIAL
ACCESS MODE IS SEQUENTIAL
FILE STATUS IS FILE-STATUS.
DATA DIVISION.
FILE SECTION.
FD ARQFUN.
01 REG-ARQFUN.
03 CODIGO PIC 9(05).
03 NOME PIC X(30).
03 ENDERECO PIC X(30).
03 CIDADE PIC X(20).
03 ATIVIDADE PIC X(20).
03 SETOR PIC X(20).
03 SALARIO PIC 9(11).
03 DATA-PAGAMENTO.
05 DIA-PAGAMENTO PIC 9(02).
05 FILLER PIC X(01).
05 MES-PAGAMENTO PIC 9(02).
05 FILLER PIC X(01).
05 ANO-PAGAMENTO PIC 9(02).
03 DATA-NASCIMENTO.
05 DIA-NASCIMENTO PIC 9(02).
05 FILLER PIC X(01).
05 MES-NASCIMENTO PIC 9(02).
05 FILLER PIC X(01).
05 ANO-NASCIMENTO PIC 9(02).
03 ESCOLARIDADE PIC X(15).
03 NATURALIDADE PIC X(15).
03 NACIONALIDADE PIC X(15).
03 BAIRRO PIC X(20).
03 ESTADO PIC A(02).
03 CPF PIC 9(11).
03 IDENTIDADE PIC X(11).
03 FILIAL PIC X(10).
03 DATA-ADMISSAO.
05 DIA-ADMISSAO PIC 9(02).

FromSoft – Todos os direitos reservados – http://www.fromsoft.com.br Página 199


Curso de Cobol Básico

05 FILLER PIC X(01).


05 MES-ADMISSAO PIC 9(02).
05 FILLER PIC X(01).
05 ANO-ADMISSAO PIC 9(02).
03 SEXO PIC A(01).
03 HORAS-TRABALHO PIC 9(02).
FD RELFUN.
01 REG-RELFUN PIC X(80).

WORKING-STORAGE SECTION.
77 PARA PIC X VALUE SPACES.
77 FILE-STATUS PIC XX VALUE SPACES.
77 CONTADOR PIC 9(05) VALUE ZEROS.
77 LIMITE-CONTADOR PIC 9(05) VALUE ZEROS.
01 HORA-FROM-TIME.
03 HORA PIC 99 VALUE ZEROS.
03 MINUTO PIC 99 VALUE ZEROS.
01 DATA-FROM-DATE.
03 ANO PIC 99 VALUE ZEROS.
03 MES PIC 99 VALUE ZEROS.
03 DIA PIC 99 VALUE ZEROS.
77 PAGINA-ATUAL PIC 99999 VALUE ZEROS.
01 LINHA-DETALHE.
03 FILLER PIC X VALUE "+".
03 FILLER PIC X(78) VALUE ALL "-".
03 FILLER PIC X VALUE "+".
01 LINHA-BORDADA.
03 FILLER PIC X VALUE "+".
03 FILLER PIC X(10) VALUE ALL "-".
03 FILLER PIC X VALUE "+".
03 FILLER PIC X(33) VALUE ALL "-".
03 FILLER PIC X VALUE "+".
03 FILLER PIC X(33) VALUE ALL "-".
03 FILLER PIC X VALUE "+".
01 LINHA-CABECALHO.
03 FILLER PIC X VALUE "|".
03 FILLER PIC X(78) VALUE
" RELATORIO - PROG31 ".
03 FILLER PIC X VALUE "|".
01 LINHA-TITULO.
03 FILLER PIC X VALUE "|".
03 FILLER PIC X(10) VALUE
" CODIGO ".
03 FILLER PIC X(01) VALUE "|".
03 FILLER PIC X(33) VALUE
" NOME ".
03 FILLER PIC X(01) VALUE "|".
03 FILLER PIC X(33) VALUE
" ENDERECO ".
03 FILLER PIC X VALUE "|".
01 LINHA-CODIGO-NOME-ENDERECO.
03 FILLER PIC XX VALUE "| ".
03 FILLER PIC X VALUE SPACE.
03 DETALHE-CODIGO PIC Z(05) VALUE SPACES.
03 FILLER PIC X(03) VALUE SPACES.
03 FILLER PIC X(01) VALUE "|".
03 FILLER PIC X(01) VALUE SPACE.
03 DETALHE-NOME PIC X(30) VALUE SPACES.
03 FILLER PIC XX VALUE SPACES.
03 FILLER PIC X VALUE "|".
03 FILLER PIC X VALUE SPACE.
03 DETALHE-ENDERECO PIC X(30) VALUE SPACES.
03 FILLER PIC X VALUE SPACE.
03 FILLER PIC XX VALUE " |".
01 LINHA-HORA-DATA-PAGINA-ALUNO.
03 FILLER PIC XX VALUE "| ".
03 FILLER PIC X(12) VALUE "HORA ATUAL: ".
03 DETALHE-HORA-ATUAL.
05 DETALHE-HORA PIC Z(02) VALUE SPACES.
05 FILLER PIC X VALUE ":".
05 DETALHE-MINUTO PIC Z(02) VALUE SPACES.
03 FILLER PIC X(13) VALUE " DATA ATUAL: ".
03 DETALHE-DATA-ATUAL.
05 DETALHE-DIA PIC 9(02) VALUE ZEROS.
05 FILLER PIC X VALUE "/".

FromSoft – Todos os direitos reservados – http://www.fromsoft.com.br Página 200


Curso de Cobol Básico

05 DETALHE-MES PIC 9(02) VALUE ZEROS.


05 FILLER PIC X VALUE "/".
05 DETALHE-ANO PIC 9(02) VALUE ZEROS.
03 FILLER PIC X(09) VALUE " PAGINA: ".
03 DETALHE-PAGINA PIC Z(05) VALUE SPACES.
03 FILLER PIC X(08) VALUE " ALUNO: ".
03 DETALHE-ALUNO PIC X(06) VALUE "MODELO".
03 FILLER PIC X(10) VALUE SPACES.
03 FILLER PIC XX VALUE " |".
PROCEDURE DIVISION.
INICIO.
PERFORM INICIALIZA-CAMPOS THRU FIM-INICIALIZA-CAMPOS.
PERFORM ABRE-ARQUIVOS THRU FIM-ABRE-ARQUIVOS.
PERFORM IMPRIME-RELATORIO THRU FIM-IMPRIME-RELATORIO.
PERFORM FECHA-ARQUIVOS THRU FIM-FECHA-ARQUIVOS.
FIM.
DISPLAY " " AT 0101 WITH ERASE EOS BACKGROUND-COLOR 0
FOREGROUND-COLOR 7.
STOP RUN.

INICIALIZA-CAMPOS.
INITIALIZE CODIGO NOME ENDERECO
DETALHE-CODIGO DETALHE-NOME DETALHE-ENDERECO.
FIM-INICIALIZA-CAMPOS. EXIT.

ABRE-ARQUIVOS.
OPEN INPUT ARQFUN
IF FILE-STATUS EQUAL ZEROS
CONTINUE
ELSE
DISPLAY "ERRO DE ABERTURA DE ARQUIVO" AT 2315
ACCEPT PARA AT 2579 WITH AUTO NO-ECHO
GO TO FIM
END-IF

OPEN OUTPUT RELFUN


IF FILE-STATUS EQUAL ZEROS
CONTINUE
ELSE
DISPLAY "ERRO DE CRIACAO DE ARQUIVO" AT 2315
ACCEPT PARA AT 2579 WITH AUTO NO-ECHO
GO TO FIM
END-IF.
FIM-ABRE-ARQUIVOS. EXIT.

IMPRIME-RELATORIO.
MOVE 99999 TO CODIGO
START ARQFUN KEY IS NOT GREATER CODIGO INVALID KEY
GO TO FIM
NOT INVALID KEY
READ ARQFUN PREVIOUS AT END GO TO FIM
NOT END
MOVE CODIGO TO LIMITE-CONTADOR
END-READ
ADD 1 TO LIMITE-CONTADOR
INITIALIZE CODIGO
START ARQFUN KEY IS NOT LESS CODIGO INVALID KEY
GO TO FIM
NOT INVALID KEY
PERFORM IMPRIME-CABECALHO THRU FIM-IMPRIME-CABECALHO
PERFORM VARYING CONTADOR FROM 1 BY 1 UNTIL CONTADOR
GREATER OR EQUAL LIMITE-CONTADOR
READ ARQFUN NEXT AT END GO TO RODAPE
NOT AT END
MOVE CODIGO TO DETALHE-CODIGO
MOVE NOME TO DETALHE-NOME
MOVE ENDERECO TO DETALHE-ENDERECO
PERFORM IMPRIME-CORPO THRU FIM-IMPRIME-CORPO
END-READ
END-PERFORM.
RODAPE.
PERFORM IMPRIME-RODAPE THRU FIM-IMPRIME-RODAPE.
FIM-IMPRIME-RELATORIO. EXIT.

FECHA-ARQUIVOS.

FromSoft – Todos os direitos reservados – http://www.fromsoft.com.br Página 201


Curso de Cobol Básico

CLOSE ARQFUN
IF FILE-STATUS EQUAL ZEROS
CONTINUE
ELSE
DISPLAY "ERRO DE FECHAMENTO DE ARQUIVO" AT 2315
ACCEPT PARA AT 2579 WITH AUTO NO-ECHO
GO TO FIM
END-IF

CLOSE RELFUN
IF FILE-STATUS EQUAL ZEROS
CONTINUE
ELSE
DISPLAY "ERRO DE FECHAMENTO DE RELATORIO" AT 2315
ACCEPT PARA AT 2579 WITH AUTO NO-ECHO
GO TO FIM
END-IF.
FIM-FECHA-ARQUIVOS. EXIT.

IMPRIME-CABECALHO.
WRITE REG-RELFUN FROM LINHA-DETALHE AFTER 1.
WRITE REG-RELFUN FROM LINHA-CABECALHO AFTER 1.
WRITE REG-RELFUN FROM LINHA-BORDADA AFTER 1.
WRITE REG-RELFUN FROM LINHA-TITULO AFTER 1.
WRITE REG-RELFUN FROM LINHA-BORDADA AFTER 1.
FIM-IMPRIME-CABECALHO. EXIT.

IMPRIME-CORPO.
WRITE REG-RELFUN FROM LINHA-CODIGO-NOME-ENDERECO AFTER 1.
WRITE REG-RELFUN FROM LINHA-BORDADA AFTER 1.
FIM-IMPRIME-CORPO. EXIT.

IMPRIME-RODAPE.
PERFORM PEGA-DADOS-RODAPE THRU FIM-PEGA-DADOS-RODAPE.
WRITE REG-RELFUN FROM LINHA-HORA-DATA-PAGINA-ALUNO AFTER 1.
WRITE REG-RELFUN FROM LINHA-DETALHE AFTER 1.
FIM-IMPRIME-RODAPE. EXIT.

PEGA-DADOS-RODAPE.
ACCEPT HORA-FROM-TIME FROM TIME
MOVE HORA TO DETALHE-HORA
MOVE MINUTO TO DETALHE-MINUTO
ACCEPT DATA-FROM-DATE FROM DATE
MOVE DIA TO DETALHE-DIA
MOVE MES TO DETALHE-MES
MOVE ANO TO DETALHE-ANO
ADD 1 TO PAGINA-ATUAL
MOVE PAGINA-ATUAL TO DETALHE-PAGINA.
FIM-PEGA-DADOS-RODAPE. EXIT.

Lição 14 - Exercícios

1. Criar um programa de nome PROG38.CBL que irá ler o arquivo gravado pelo PROG34.CBL e
imprimir um relatório com todos os campos do arquivo. Deve ser emitido 02 relatórios por página. O
Mesmo deverá ficar com o seguinte lay-out:

+------------------------------------------------------------------------------+
| RELATORIO - PROG38 |
+------------------------------------------------------------------------------+
| Nome: XXXXXXXXXXXXXXXXXXXXXXXXXXXXXX Codigo: 99999 |
+------------------------------------------------------------------------------+
| DADOS DO CLIENTE |
+------------------------------------------------------------------------------+
| Data de Nascimento: 99/99/99 Sexo: X Escolaridade.: XXXXXXXXXXXXXXXXXXXX |
| Naturalidade: XXXXXXXXXXXXXXXXXXXX Nacionalidade: XXXXXXXXXXXXXXXXXXXX |
| Cpf: 999.999.999-99 Identidade...: XXXXXXXXXXXXXXX |
+------------------------------------------------------------------------------+
| DADOS RESIDENCIAIS |
+------------------------------------------------------------------------------+
| Rua...: XXXXXXXXXXXXXXXXXXXX Numero: 99999 Bairro..: XXXXXXXXXXXXXXXXXXXX |
| Cidade: XXXXXXXXXXXXXXXXXXXX Estado: AA Telefone: XXXXXXXXXXXXXXX |
+------------------------------------------------------------------------------+
| DADOS OPCIONAIS |

FromSoft – Todos os direitos reservados – http://www.fromsoft.com.br Página 202


Curso de Cobol Básico

+------------------------------------------------------------------------------+
| Comentario: XXXXXXXXXXXXXXXXXXXX |
+------------------------------------------------------------------------------+
| DADOS IMPRESSAO |
+------------------------------------------------------------------------------+
| Hora Atual: : Data Atual: / / Pagina: Aluno: Seu Nome |
+------------------------------------------------------------------------------+

2. Criar um programa de nome PROG39.CBL que irá ler o arquivo gravado pelo PROG34.CBL e
então irá gerar uma lista com CÓDIGO, NOME e ENDERECO de cada registro presente no
arquivo, semelhante ao lay-out abaixo. Deverá ser emitido no máximo 29 nomes por página.

+------------------------------------------------------------------------------+
| RELATORIO - PROG39 |
+----------+---------------------------------+---------------------------------+
| Codigo | Nome | Rua |
+----------+---------------------------------+---------------------------------+
| | | |
+----------+---------------------------------+---------------------------------+
| | | |
+----------+---------------------------------+---------------------------------+
| Hora Atual: : Data Atual: / / Pagina: Aluno: Seu Nome |
+---------------------------------------------------------------------------------------------------------------------------------------------+

a) Relacionar todos os funcionários existentes no arquivo do PROG34.CBL, um por linha.

Obs: Estes relatorios são caracter, então deverão ser testados em impressoras matriciais. Inclusive, o
numero máximo de linhas em uma folha de impressora matricial de 80 colunas é 66.

FromSoft – Todos os direitos reservados – http://www.fromsoft.com.br Página 203


Curso de Cobol Básico

Lição 15

Lição 15 - Conceitos

Lição 15 – Comandos Avançados de programação

15.1 - Trabalhando com data do sistema com 8 dígitos (DDMMAAAA)

Conceito: O Cobol, a partir do ANSI/89, traz funções especiais chamadas Funções Intrínsecas,
que dão maior flexibilidade em operações especiais a serem executadas na linguagem. Uma delas é a
FUNCTION CURRENT-DATE: traz a data com 8 dígitos, considerando-se o ano com 4 casas decimais,
seguida da hora, tudo no formato:
YYYYMMDDHHMMSSCC, onde:
• YYYY: o ano, com 4 dígitos (ex.: 2000)
• MM: o mês, com 2 dígitos (ex.: 05)
• DD: o dia, com 2 dígitos (ex.: 28)
• HH: a hora, com 2 dígitos (ex.: 11)
• MM: minutos, com 2 dígitos (ex.: 45)
• SS: os segundos, com 2 dígitos (ex.: 12)
• CC: centésimos de segundos, com 2 dígitos (ex.: 47)

Então ao invés de usar o ACCEPT FROM DATE agora você irá usar o FUNCTION CURRENT-DATE.
Para trabalhar com a data, continua a ser invertida, semelhante ao ACCEPT FROM DATE.

MOVE FUNCTION CURRENT-DATE TO DATA-ATUAL

Lição 15 – Exemplo 1 – Usando Function Current-Date

IDENTIFICATION DIVISION.
PROGRAM-ID. L15EX01.
AUTHOR. FROMSOFT.
DATA DIVISION.
WORKING-STORAGE SECTION.
01 DATA-ATUAL.
03 ANO-ATUAL PIC 9(04).
03 MES-ATUAL PIC 9(02).
03 DIA-ATUAL PIC 9(02).
PROCEDURE DIVISION.
MOVE FUNCTION CURRENT-DATE TO DATA-ATUAL.
DISPLAY DIA-ATUAL AT 1015.
DISPLAY "/" AT 1017.
DISPLAY MES-ATUAL AT 1018.
DISPLAY "/" AT 1020.
DISPLAY ANO-ATUAL AT 1021.
STOP RUN.

15.2 - Habilitando teclas especiais: setas

Conceito: O compilador Cobol que você utiliza pode ter ferramentas de configuração do
ambiente para permitir/reconhecer algumas teclas especiais, como as setas por exemplo. Porém mais
objetivo seria podermos fazer isto diretamente com código COBOL. E isso é permitido através das
rotinas CALL-BY-NUMBER. Então para podermos habilitar teclas devemos usar a rotina “AF”. Além
disso devemos passar como parâmetro uma variável do tipo PIC 99 COMP VALUE 27, pois a mesma é
um parâmetro para retorno de teclas.

15.3 - Rotinas Call-By-Number

FromSoft – Todos os direitos reservados – http://www.fromsoft.com.br Página 204


Curso de Cobol Básico

Conceito: Existem algumas funções nos compiladores Microsoft e Microfocus, denominadas


“Call-by-number” que através do CALL, permitem trabalhar diretamente com o teclado e vídeo.

15.3.1 – Rotina Call-By-Number – “AF”

Conceito: Esta rotina destina-se ao uso de teclas em geral do teclado, ou seja, de qualquer tipo
de tecla, tanto de função como tecla normal, ao contrário do ACCEPT FROM ESCAPE KEY, que busca
apenas as teclas de FUNÇÃO. (EX: ESC, F1, ALT, CTRL, SHIFT, e suas combinações). É muito usado
para uso de teclas de movimentação e criação de menus.

Lição 15 – Exemplo 2 – Usando o Call X”AF”

IDENTIFICATION DIVISION.
PROGRAM-ID. L15EX02.
AUTHOR. FROMSOFT.
DATA DIVISION.
WORKING-STORAGE SECTION.
77 FUNCAO PIC 99 COMP VALUE 27.
01 TECLA.
03 TECLA-KEY-1 PIC X VALUE SPACES.
03 TECLA-KEY-2 PIC X VALUE SPACES.
PROCEDURE DIVISION.
PEGA-TECLA.
DISPLAY " " AT 0101 WITH ERASE EOS BACKGROUND-COLOR 1
FOREGROUND-COLOR 7.
CALL X"AF" USING FUNCAO TECLA
DISPLAY TECLA AT 1015.
STOP RUN.

P.S – Verifique que o CALL está fazendo uma chamada do tipo X(O que é representado para o
compilador por uma chamada com parâmetros binários), procurando a Rotina ”AF” e passando como
parâmetro o valor 27, e um segundo parâmetro, que é a variável tecla, onde será armazenado o valor de
resultado. Podemos concluir que o CALL está chamando a função 27 da rotina X”AF”, e está se função
é funcional devido a um valor numérico (27).

P.S – Verifique que a variável FUNÇÃO é declarada com cláusula COMP (Lição 1), ou seja, ela é uma
variável que armazenará valores binários. Então o valor 27 é transformado em binário para ser passado
como parâmetro. Lembre-se disto quando estiver desenvolvendo com estas rotinas.

Lição 15 – Exemplo 3– Usando setas através de Rotinas Call-By-Number


IDENTIFICATION DIVISION.
PROGRAM-ID. L15EX03.
AUTHOR. FROMSOFT.
DATA DIVISION.
WORKING-STORAGE SECTION.
01 TECLA.
03 TEC1 PIC X.
03 TEC2 PIC X.
77 FUNCAO PIC 99 COMP VALUE 27.
77 OPCAO-VERTICAL PIC 9 VALUE 1.
77 OPCAO-HORIZONTAL PIC 9 VALUE 1.
01 TEC-ESC.
03 FILLER PIC 9 VALUE 1.
03 FILLER PIC 99 COMP VALUE 000.
01 TEC-ENTER.
03 FILLER PIC 9 VALUE 2 .
03 FILLER PIC 99 COMP VALUE 000.
01 SETA-CIMA.
03 FILLER PIC 9 VALUE 2.
03 FILLER PIC 99 COMP VALUE 005.
01 SETA-BAIXO.
03 FILLER PIC 9 VALUE 2.
03 FILLER PIC 99 COMP VALUE 006.
01 SETA-ESQUERDA.
03 FILLER PIC 9 VALUE 2.
03 FILLER PIC 99 COMP VALUE 003.
01 SETA-DIREITA.

FromSoft – Todos os direitos reservados – http://www.fromsoft.com.br Página 205


Curso de Cobol Básico

03 FILLER PIC 9 VALUE 2.


03 FILLER PIC 99 COMP VALUE 004.
SCREEN SECTION.
01 ITEM-1.
03 BLANK SCREEN.
03 LINE 01 COLUMN 01 VALUE "ITEM 1".
01 ITEM-2.
03 BLANK SCREEN.
03 LINE 02 COLUMN 01 VALUE "ITEM 2".
01 ITEM-3.
03 BLANK SCREEN.
03 LINE 03 COLUMN 01 VALUE "ITEM 3".
01 ITEM-4.
03 BLANK SCREEN.
03 LINE 04 COLUMN 01 VALUE "ITEM 4".
01 ITEM-5.
03 BLANK SCREEN.
03 LINE 05 COLUMN 01 VALUE "ITEM 5".
01 MENU-1.
03 BLANK SCREEN.
03 LINE 01 COLUMN 01 VALUE "MENU 1".
01 MENU-2.
03 BLANK SCREEN.
03 LINE 01 COLUMN 15 VALUE "MENU 2".
01 MENU-3.
03 BLANK SCREEN.
03 LINE 01 COLUMN 25 VALUE "MENU 3".
01 MENU-4.
03 BLANK SCREEN.
03 LINE 01 COLUMN 35 VALUE "MENU 4".
01 MENU-5.
03 BLANK SCREEN.
03 LINE 01 COLUMN 45 VALUE "MENU 5".
PROCEDURE DIVISION.
INICIO.
DISPLAY " " AT 0101 WITH ERASE EOS BACKGROUND-COLOR 1
FOREGROUND-COLOR 7.
PEGA-TECLA.
CALL X"AF" USING FUNCAO TECLA.
EVALUATE TECLA
WHEN TEC-ESC
GO TO FIM
WHEN TEC-ENTER
EVALUATE OPCAO-VERTICAL
WHEN 1
CALL "MENUCLI"
CANCEL "MENUCLI"
WHEN OTHER
GO TO FIM
END-EVALUATE
WHEN SETA-CIMA
IF OPCAO-VERTICAL = 1
MOVE 5 TO OPCAO-VERTICAL
ELSE
SUBTRACT 1 FROM OPCAO-VERTICAL
END-IF
IF OPCAO-VERTICAL = 1
DISPLAY ITEM-1
ELSE
IF OPCAO-VERTICAL = 2
DISPLAY ITEM-2
ELSE
IF OPCAO-VERTICAL = 3
DISPLAY ITEM-3
ELSE
IF OPCAO-VERTICAL = 4
DISPLAY ITEM-4
ELSE
IF OPCAO-VERTICAL = 5
DISPLAY ITEM-5
END-IF
WHEN SETA-BAIXO
IF OPCAO-VERTICAL = 5
MOVE 1 TO OPCAO-VERTICAL
ELSE

FromSoft – Todos os direitos reservados – http://www.fromsoft.com.br Página 206


Curso de Cobol Básico

ADD 1 TO OPCAO-VERTICAL
END-IF
IF OPCAO-VERTICAL = 1
DISPLAY ITEM-1
ELSE
IF OPCAO-VERTICAL = 2
DISPLAY ITEM-2
ELSE
IF OPCAO-VERTICAL = 3
DISPLAY ITEM-3
ELSE
IF OPCAO-VERTICAL = 4
DISPLAY ITEM-4
ELSE
IF OPCAO-VERTICAL = 5
DISPLAY ITEM-5
END-IF
WHEN SETA-DIREITA
IF OPCAO-HORIZONTAL = 5
MOVE 1 TO OPCAO-HORIZONTAL
ELSE
ADD 1 TO OPCAO-HORIZONTAL
END-IF
IF OPCAO-HORIZONTAL = 1
DISPLAY MENU-1
ELSE
IF OPCAO-HORIZONTAL = 2
DISPLAY MENU-2
ELSE
IF OPCAO-HORIZONTAL = 3
DISPLAY MENU-3
ELSE
IF OPCAO-HORIZONTAL = 4
DISPLAY MENU-4
ELSE
IF OPCAO-HORIZONTAL = 5
DISPLAY MENU-5
END-IF
WHEN SETA-ESQUERDA
IF OPCAO-HORIZONTAL = 1
MOVE 5 TO OPCAO-HORIZONTAL
ELSE
SUBTRACT 1 FROM OPCAO-HORIZONTAL
END-IF
IF OPCAO-HORIZONTAL = 1
DISPLAY MENU-1
ELSE
IF OPCAO-HORIZONTAL = 2
DISPLAY MENU-2
ELSE
IF OPCAO-HORIZONTAL = 3
DISPLAY MENU-3
ELSE
IF OPCAO-HORIZONTAL = 4
DISPLAY MENU-4
ELSE
IF OPCAO-HORIZONTAL = 5
DISPLAY MENU-5
END-IF
WHEN OTHER
GO TO PEGA-TECLA
END-EVALUATE.
GO TO PEGA-TECLA.

FIM.
DISPLAY " " AT 0101 WITH BACKGROUND-COLOR 1
FOREGROUND-COLOR 7
STOP RUN.

15.3.2 - Rotina X ”AF”

FromSoft – Todos os direitos reservados – http://www.fromsoft.com.br Página 207


Curso de Cobol Básico

Conceito: É muito simples fazer o uso desta rotina. Para descobrir os valores das teclas
podemos fazer um pequeno programa, que recolhe o valor da tecla e nos informa o seu valor. Veja o
roteiro abaixo.

DATA DIVISION.
WORKING-STORAGE SECTION.
77 FUNCAO PIC 99 COMP VALUE 27.
a) Verifique que o mesmo faz a declaração da variável com valor 27, em binário.
01 TECLA.
02 TEC1 PIC 9.
02 TEC2 PIC 9.
b) Verifique que a variável acima será o segundo parâmetro do CALL e que irá receber o retorno
da chamada.
PROCEDURE DIVISION.
DISPLAY SPACES AT 0101 WITH BACKGROUND-COLOR 1
FOREGROUND-COLOR 7.
c) limpa a tela
INICIO.
CALL X"AF" USING FUNCAO TECLA
d) Chamada da função X”AF”, usando como parâmetro a variável função e a variável tecla.
DISPLAY TECLA AT 1010
e) Exibição do valor da tecla na linha 10 e na coluna 10.
Retire os comentários deste programa, copie-o para um outro arquivo com um nome de TECLA1.CBL,
compile-o, linkedite-o e rode o programa, digite uma seta qualquer, e verá o resultado. Observe que se
você irá receber na variável TEC2 um valor em binário. Você está recebendo isto, pois o valor que você
passou foi em binário (Variável FUNCAO – do tipo COMP) e só deste modo, você poderia chamar então
a função. Mas como você irá informar este valor no programa, se o mesmo for binário? Para isto,
deveremos usar um artifício muito interessante, que é o de converter o valor de uma variável binária
para um valor numérico, para que possamos declará-la acima. Então visualize o programa abaixo.
Perceba que é o mesmo programa, mas com algumas pequenas alterações.

DATA DIVISION.
WORKING-STORAGE SECTION.
77 FUNCAO PIC 99 COMP VALUE 27.
a) Verifique que o mesmo faz a declaração da variável com valor 27, em binário, então se
queremos receber um valor em binário, o mesmo deve vir primeiramente com o atributo COMP,
para que seja possível visualizá-los, igual ao valor da variável FUNCAO.
01 TECLA.
02 TEC1 PIC 9.
02 TEC2 PIC 9.
b) Verifique que está sendo declarado a variável tecla do mesmo modo do exercício anterior.
01 TECLA-ED.
02 TECLA-ED-1 PIC X COMP-X.
02 TECLA-ED-2 PIC X COMP-X.
c) Verifique que está sendo declarado agora duas variáveis para o recebimento de valores binários
(COMP-X), para ser usado na conversão.
77 TEC-ED-1 PIC 9.
77 TEC-ED-2 PIC 999.
d) Verifique que está sendo declarado duas variáveis de mesmo tamanho e tipo das variáveis TEC1 e
TEC, para receberem o valor convertido.
PROCEDURE DIVISION.
DISPLAY SPACES AT 0101 WITH BACKGROUND-COLOR 1
FOREGROUND-COLOR 7.
INICIO.
CALL X"AF" USING FUNCAO TECLA
e) Verifique que está sendo chamada a função do mesmo modo.
MOVE TEC1 TO TEC-ED-1.
f) Verifique que está sendo movido o valor de TEC1 para TEC-ED-1 para armazenar o primeiro valor
da tecla, pois o segundo valor é que é transformado em binário e que queremos transformar em
numérico, para declararmos na variável.
MOVE TECLA TO TECLA-ED
g) Após guardarmos o primeiro valor, estamos movendo a variável grupo TECLA para a variável grupo
TECLA-ED, para podermos transformar o valor numérico em binário.
MOVE TECLA-ED-2 TO TEC-ED-2.
h) Verifique que após termos convertido o valor da variável TECLA, estamos movendo o valor da
variável TECLA-ED-2, que é pertencente a variável grupo TECLA-ED, que é COMP-X, para a variável
TEC-ED-2, ou seja, estamos movendo o valor da variável grupo TECLA-ED, que é binária para uma
variável numérica, finalizando então a conversão do valor binário para numérico.
DISPLAY "O VALOR DA TECLA E" AT 0915.

FromSoft – Todos os direitos reservados – http://www.fromsoft.com.br Página 208


Curso de Cobol Básico

DISPLAY "01 TECLA-X" AT 1015.


DISPLAY " 03 TECLA-X-1 PIC 9 VALUE " AT 1115 TEC-ED-1.
DISPLAY " 03 TECLA-X-2 PIC 99 COMP VALUE " AT 1215 TEC-ED-2.
i) Agora estamos visualizando em tela o valor da primeira e Segunda variável convertida. Verifique
que devemos usar o parâmetro COMP na segundo dígito da variável, pois este foi o valor que
convertemos, para numérico.
GO TO INICIO.
j) está voltando para o label início para poder dar ao usuário oportunidade de o usuário digitar
uma nova tecla.

Retire os comentários deste programa, copie-o para um outro arquivo com o nome de TECLA2.CBL,
compile-o, linkedite-o e rode o programa, digite uma seta qualquer, e verá o resultado. Observe que
você não irá receber mais na variável TEC-ED-2 um valor em binário, pois o mesmo foi convertido para
numérico. Verifique que este pequeno programa poderá lhe facilitar muito em seu desenvolvimento a
partir de agora, pois quando você precisar de usar outros tipos de teclas sem ser teclas de escape,
poderá obter sucesso.

15.4 - Ordenação de dados

Conceito: Conjunto de comandos com o objetivo de criar um arquivo ordenado, executando


procedimentos de entrada ou transferindo registros de um outro arquivo, classificando os registros
conforme especificações da ordem desejada e, ao seu final, torna o arquivo classificado disponível,
conforme a classificação resultante da operação, em procedimento de saída.

15.4.1 - Cláusula SD

Conceito: Cláusula que trata da definição dos arquivos de ordenação (Sort Description), suas
características e estrutura. O SD é um indicador de nível (como o nível 77 e o nível 01) que identifica o
início da descrição de um arquivo de SORT.

SELECT SOR-RELPVEND ASSIGN TO DISK


SORT STATUS IS SORT-STATUS.

SD SOR-RELPVEND.
01 REGISTRO-SORT-RELPVEND.
03 TOTAL-SORT PIC 9(06)V99.
03 NUM-SORT PIC 9(05).

15.4.2 - O comando SORT

Conceito: este comando define a forma como queremos gerar o arquivo ordenado:
• a cláusula ON ASCENDING/DESCENDING KEY informa para o comando quais os campos
da ordenação e se esta deve ser ascendente ou descendente

SORT SOR-RELPVEND DESCENDING TOTAL-SORT NUM-SORT


ou
SORT SOR-RELPVEND ASCENDING TOTAL-SORT NUM-SORT

• usamos INPUT PROCEDURE quando queremos manipular os dados a serem fornecidos


para a ordenação

INPUT PROCEDURE GRAVA-SORT THRU FIM-GRAVA-SORT

• de forma análoga, usamos OUTPUT PROCEDURE que é o resultado já ordenado que


queremos manipular

OUTPUT PROCEDURE LE-SORT THRU FIM-LE-SORT.

15.4.3 - O comando RELEASE

Conceito: Quando usamos a INPUT PROCEDURE, os registros devem ser gravados no arquivo de
ordenação com o comando RELEASE. Entao, será criado um arquivo temporário e o comando
RELEASE vai recolher os dados que devem ser armazenados.

FromSoft – Todos os direitos reservados – http://www.fromsoft.com.br Página 209


Curso de Cobol Básico

RELEASE REGISTRO-SORT-RELPVEND

15.4.4 - O comando RETURN

Conceito: Quando usamos a OUTPUT PROCEDURE, os registros devem ser recuperados do arquivo
de ordenação com o comando RETURN. Podemos usar também o evento AT END, para determinar
uma outra ação após a leitura de todos os registros. O RETURN vai recolher os dados do arquivo
temporário criado anteriormente pelo comando RELEASE.

RETURN SOR-RELPVEND AT END GO TO FIM-LE-SORT.

Lição 15 – Exemplo 4
IDENTIFICATION DIVISION.
PROGRAM-ID. L15EX04.
AUTHOR. FROMSOFT.
ENVIRONMENT DIVISION.
CONFIGURATION SECTION.
INPUT-OUTPUT SECTION.
FILE-CONTROL.
SELECT ARQFUN ASSIGN TO "ARQFUNI.DAT"
ORGANIZATION IS INDEXED
ACCESS MODE IS DYNAMIC
RECORD KEY IS CODIGO
ALTERNATE RECORD KEY IS NOME WITH DUPLICATES
FILE STATUS IS FILE-STATUS.

SELECT ARQSORT ASSIGN TO DISK.

SELECT RELSORT ASSIGN TO "RELSORT.TXT"


ORGANIZATION IS SEQUENTIAL
FILE STATUS IS FILE-STATUS.

DATA DIVISION.
FILE SECTION.
FD ARQFUN.
01 REG-ARQFUN.
03 CODIGO PIC 9(05).
03 NOME PIC X(30).
03 ENDERECO PIC X(30).
03 CIDADE PIC X(20).
03 ATIVIDADE PIC X(20).
03 SETOR PIC X(20).
03 SALARIO PIC 9(11).
03 DATA-PAGAMENTO.
05 DIA-PAGAMENTO PIC 9(02).
05 FILLER PIC X(01).
05 MES-PAGAMENTO PIC 9(02).
05 FILLER PIC X(01).
05 ANO-PAGAMENTO PIC 9(02).
03 DATA-NASCIMENTO.
05 DIA-NASCIMENTO PIC 9(02).
05 FILLER PIC X(01).
05 MES-NASCIMENTO PIC 9(02).
05 FILLER PIC X(01).
05 ANO-NASCIMENTO PIC 9(02).
03 ESCOLARIDADE PIC X(15).
03 NATURALIDADE PIC X(15).
03 NACIONALIDADE PIC X(15).
03 BAIRRO PIC X(20).
03 ESTADO PIC A(02).
03 CPF PIC 9(11).
03 IDENTIDADE PIC X(11).
03 FILIAL PIC X(10).
03 DATA-ADMISSAO.
05 DIA-ADMISSAO PIC 9(02).
05 FILLER PIC X(01).
05 MES-ADMISSAO PIC 9(02).
05 FILLER PIC X(01).
05 ANO-ADMISSAO PIC 9(02).
03 SEXO PIC A(01).

FromSoft – Todos os direitos reservados – http://www.fromsoft.com.br Página 210


Curso de Cobol Básico

03 HORAS-TRABALHO PIC 9(02).


SD ARQSORT.
01 REG-ARQSORT.
03 CHAVE-SORT.
05 CODIGO-SORT PIC 9(05).
03 NOME-SORT PIC X(30).
03 ENDERECO-SORT PIC X(30).
03 CIDADE-SORT PIC X(20).
03 ATIVIDADE-SORT PIC X(20).
03 SETOR-SORT PIC X(20).
03 SALARIO-SORT PIC 9(11).
03 DATA-PAGAMENTO-SORT.
05 DIA-PAGAMENTO-SORT PIC 9(02).
05 FILLER PIC X(01).
05 MES-PAGAMENTO-SORT PIC 9(02).
05 FILLER PIC X(01).
05 ANO-PAGAMENTO-SORT PIC 9(02).
03 DATA-NASCIMENTO-SORT.
05 DIA-NASCIMENTO-SORT PIC 9(02).
05 FILLER PIC X(01).
05 MES-NASCIMENTO-SORT PIC 9(02).
05 FILLER PIC X(01).
05 ANO-NASCIMENTO-SORT PIC 9(02).
03 ESCOLARIDADE-SORT PIC X(15).
03 NATURALIDADE-SORT PIC X(15).
03 NACIONALIDADE-SORT PIC X(15).
03 BAIRRO-SORT PIC X(20).
03 ESTADO-SORT PIC A(02).
03 CPF-SORT PIC 9(11).
03 IDENTIDADE-SORT PIC X(11).
03 FILIAL-SORT PIC X(10).
03 DATA-ADMISSAO-SORT.
05 DIA-ADMISSAO-SORT PIC 9(02).
05 FILLER PIC X(01).
05 MES-ADMISSAO-SORT PIC 9(02).
05 FILLER PIC X(01).
05 ANO-ADMISSAO-SORT PIC 9(02).
03 SEXO-SORT PIC A(01).
03 HORAS-TRABALHO-SORT PIC 9(02).

FD RELSORT.
01 REG-RELSORT PIC X(80).

WORKING-STORAGE SECTION.
77 ST PIC XX.
77 FILE-STATUS PIC X(002) VALUE SPACES.
01 LINHA-DET.
03 CODIGO-REL PIC 9(005).
03 NOME-REL PIC X(030).
03 ENDERECO-REL PIC X(030).
03 CIDADE-REL PIC X(020).
03 ATIVIDADE-REL PIC X(020).
03 SETOR-REL PIC X(020).
03 SALARIO-REL PIC 9(011).
03 DATA-PAGAMENTO-REL.
05 DIA-PAGAMENTO-REL PIC 9(002).
05 FILLER PIC X(001).
05 MES-PAGAMENTO-REL PIC 9(002).
05 FILLER PIC X(001).
05 ANO-PAGAMENTO-REL PIC 9(002).
03 DATA-NASCIMENTO-REL.
05 DIA-NASCIMENTO-REL PIC 9(002).
05 FILLER PIC X(001).
05 MES-NASCIMENTO-REL PIC 9(002).
05 FILLER PIC X(001).
05 ANO-NASCIMENTO-REL PIC 9(002).
03 ESCOLARIDADE-REL PIC X(015).
03 NATURALIDADE-REL PIC X(015).
03 NACIONALIDADE-REL PIC X(015).
03 BAIRRO-REL PIC X(020).
03 ESTADO-REL PIC A(002).
03 CPF-REL PIC 9(011).
03 IDENTIDADE-REL PIC X(011).
03 FILIAL-REL PIC X(010).
03 DATA-ADMISSAO-REL.

FromSoft – Todos os direitos reservados – http://www.fromsoft.com.br Página 211


Curso de Cobol Básico

05 DIA-ADMISSAO-REL PIC 9(002).


05 FILLER PIC X(001).
05 MES-ADMISSAO-REL PIC 9(002).
05 FILLER PIC X(001).
05 ANO-ADMISSAO-REL PIC 9(002).
03 SEXO-REL PIC A(001).
03 HORAS-TRABALHO-REL PIC 9(002).

PROCEDURE DIVISION.
INICIO.
OPEN INPUT ARQFUN
IF FILE-STATUS NOT EQUAL ZEROS
DISPLAY "ERRO DE ARBERTURA ARQENT"
GO TO FIM.

OPEN OUTPUT RELSORT

SORT ARQSORT ON DESCENDING KEY CHAVE-SORT


INPUT PROCEDURE IS GRAVA-SORT THRU
FIM-GRAVA-SORT
OUTPUT PROCEDURE IS IMPRIME-RELATORIO THRU
FIM-IMPRIME-RELATORIO.
FIM.
CLOSE ARQFUN RELSORT
STOP RUN.

GRAVA-SORT.
READ ARQFUN NEXT AT END GO TO FIM-GRAVA-SORT.
MOVE CODIGO TO CHAVE-SORT
MOVE NOME TO NOME-SORT
MOVE ENDERECO TO ENDERECO-SORT
MOVE CIDADE TO CIDADE-SORT
MOVE ATIVIDADE TO ATIVIDADE-SORT
MOVE SETOR TO SETOR-SORT
MOVE SALARIO TO SALARIO-SORT
MOVE DATA-PAGAMENTO TO DATA-PAGAMENTO-SORT
MOVE DATA-NASCIMENTO TO DATA-NASCIMENTO-SORT
MOVE ESCOLARIDADE TO ESCOLARIDADE-SORT
MOVE NATURALIDADE TO NATURALIDADE-SORT
MOVE NACIONALIDADE TO NACIONALIDADE-SORT
MOVE BAIRRO TO BAIRRO-SORT
MOVE ESTADO TO ESTADO-SORT
MOVE CPF TO CPF-SORT
MOVE IDENTIDADE TO IDENTIDADE-SORT
MOVE FILIAL TO FILIAL-SORT
MOVE DATA-ADMISSAO TO DATA-ADMISSAO-SORT
MOVE SEXO TO SEXO-SORT
MOVE HORAS-TRABALHO TO HORAS-TRABALHO-SORT
RELEASE REG-ARQSORT
GO TO GRAVA-SORT.
FIM-GRAVA-SORT. EXIT.

IMPRIME-RELATORIO.
RETURN ARQSORT AT END GO TO FIM-IMPRIME-RELATORIO.
MOVE CODIGO-SORT TO CODIGO-REL
MOVE NOME-SORT TO NOME-REL
MOVE ENDERECO-SORT TO ENDERECO-REL
MOVE CIDADE-SORT TO CIDADE-REL
MOVE ATIVIDADE-SORT TO ATIVIDADE-REL
MOVE SETOR-SORT TO SETOR-REL
MOVE SALARIO-SORT TO SALARIO-REL
MOVE DATA-PAGAMENTO-SORT TO DATA-PAGAMENTO-REL
MOVE DATA-NASCIMENTO-SORT TO DATA-NASCIMENTO-REL
MOVE ESCOLARIDADE-SORT TO ESCOLARIDADE-REL
MOVE NATURALIDADE-SORT TO NATURALIDADE-REL
MOVE NACIONALIDADE-SORT TO NACIONALIDADE-REL
MOVE BAIRRO-SORT TO BAIRRO-REL
MOVE ESTADO-SORT TO ESTADO-REL
MOVE CPF-SORT TO CPF-REL
MOVE IDENTIDADE-SORT TO IDENTIDADE-REL
MOVE FILIAL-SORT TO FILIAL-REL
MOVE DATA-ADMISSAO-SORT TO DATA-ADMISSAO-REL
MOVE SEXO-SORT TO SEXO-REL
MOVE HORAS-TRABALHO-SORT TO HORAS-TRABALHO-REL

FromSoft – Todos os direitos reservados – http://www.fromsoft.com.br Página 212


Curso de Cobol Básico

WRITE REG-RELSORT FROM LINHA-DET AFTER 1


GO TO IMPRIME-RELATORIO.
FIM-IMPRIME-RELATORIO. EXIT.

Lição 15 - Exercícios

Criação de Menu com o nome de PROG40.CBL, como o exemplo abaixo.

+------------------------------------------------------------------------------+
¦ ¦
¦ M E N U ¦
¦ ¦
¦ ¦
¦ ¦
¦ +--------------------------------+ ¦
¦ ¦ ¦ ¦
¦ ¦ ¦ ¦
¦ ¦ INCLUSAO ¦ ¦
¦ ¦ CONSULTA ¦ ¦
¦ ¦ ALTERACAO ¦ ¦
¦ ¦ EXCLUSAO ¦ ¦
¦ ¦ RELATORIO ¦ ¦
¦ ¦ ¦ ¦
¦ ¦ ¦ ¦
¦ +--------------------------------+ ¦
¦ ¦
¦ ¦
¦ ¦
¦ ¦
+------------------------------------------------------------------------------¦
¦ MENSAGEM: CONSULTA DE CLIENTES |
+------------------------------------------------------------------------------+

Usar setas para a movimentação entre os itens Inclusão, Consulta, Alteração, Exclusão e Relatório. E a
cada vez que houver uma movimentação com a seta, ou para cima ou para baixo, exibir na barra de
mensagens a operação que ira ser realizada.

1.1 - Para os programas do menu:


a) PROG34.CBL (Cadastro com Arquivos Indexados)
b) PROG35.CBL (Consulta com Arquivos Indexados)
c) PROG36.CBL (Alteração com Arquivos Indexados)
d) PROG37.CBL (Exclusão com Arquivos Indexados)
e) PROG38.CBL (Relatório com leitura de Arquivo Indexado)

1.2 - Fazer a alteração dos programas para que todos sejam programas chamados (Ou seja, todos os
programas terão EXIT PROGRAM, ao invés do STOP RUN).

Obs: Veja que este menu é praticamente igual ao menu criado na lição 08. A diferença é que a partir de
agora, você vai descobrir primeiro(Usando as rotinas CALL-BY-NUMBER), qual opção o usuário quer, e
depois que ele pressionar ENTER, é que você vai testar a opção.

2 - Criar um programa de nome PROG41.CBL que deverá emitir um relatório da seguinte forma:
-------------------------------------------------------------------------------
Listagem Alfabetica emitido em: 99/99/9999 Pag. ZZZZZ
-------------------------------------------------------------------------------
Nome Rua Numero Estado Sexo
-------------------------------------------------------------------------------
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXXXXXX ZZZZZ XX X

Obs.:
a) o programa deverá ler o arquivo ARQFUNI.DAT para pegar os dados do cliente.
b) a partir do Nome de Cliente do ARQFUNI.DAT, pegar os dados do cliente no Cadastro de Clientes e
compor um arquivo de SORT com os dados necessários para geração do relatório.
c) a ordenação deve ser pelo Nome do Cliente.

FromSoft – Todos os direitos reservados – http://www.fromsoft.com.br Página 213


Curso de Cobol Básico

d) Deverá ser feito o controle de páginas, com a devida numeração das mesmas, cada vez que
emitirmos 62 linhas do relatório.
e) Deve ser exibida a data com 4 digitos no ano.

FromSoft – Todos os direitos reservados – http://www.fromsoft.com.br Página 214


Curso de Cobol Básico

SISNF

Construção de um aplicativo: Controle e Emissão de Nota Fiscal

Conceito: A partir desta lição, estaremos trabalhando a construção de um aplicativo completo


de controle e emissão de notas fiscais, de nome SISNF. Este aplicativo tem como objetivo aprimorar o
aprendizado do aluno fazendo-o passar por situações de desenvolvimento. A partir de agora não será
ensinado nenhum conteúdo adicional. O aluno irá colocar em prática o que foi aprendido nas últimas 15
lições.

Obs: Veja que os passos do sisnf serão realizados durante o decorrer do desenvovimento, então não
faça tudo de uma vez só, aguarde e faça apenas o que cada lição pedir.

O SISNF é composto dos seguintes módulos.

1. Menu de escolha de programas via setas.


1.1 – Menus de escolha de subprogramas via setas.

Conceito: Criação de um menu principal, que através de setas (Para cima, baixo, direita,
esquerda) e teclas (enter, esc, F1 e F3), possa fazer o usuario navegar pelo programa com
facilidade.

2. Módulo para manutenção (Cadastro/Consulta/Alteração/Exclusão) de Clientes.


2.1 – Cadastro de Clientes
2.2 – Consulta de Clientes
2.3 – Alteração de Clientes
2.4 – Exclusão de Clientes

Conceito: Criação de um único programa, que será responsável pela manutenção (Inclusao,
consulta, alteração e exclusão) de Clientes.

2.5 – Listagem de Clientes

Conceito: Criação de um programa que vai ler os valores presente nos arquivos de notas fiscais
e vai disponibilizar um relatório de clientes em forma de lista e tendo salto de página.

3. Módulo para manutenção (Cadastro/Consulta/Alteração/Exclusão) de Produtos.


3.1 – Cadastro de Produtos
3.2 – Consulta de Produtos
3.3 – Alteração de Produtos
3.4 – Exclusão de Produtos

Conceito: Criação de um único programa, que será responsável pela manutenção (Inclusao,
consulta, alteração e exclusão) de Produtos.

3.5 – Listagem de Produtos

Conceito: Criação de um programa que vai ler os valores presente nos arquivos de notas fiscais
e vai disponibilizar um relatório de produtos em forma de lista e tendo salto de página.

4. Módulo para manutenção (Cadastro/Consulta/Alteração/Exclusão) de Notas Fiscais.


4.1 – Criação de Notas Fiscais
4.2 – Consulta de Notas Fiscais
4.3 – Alteração de Notas Fiscais
4.4 – Exclusão de Notas Fiscais

Conceito: Criação de um único programa, que será responsável pela manutenção (Inclusao,
consulta, alteração e exclusão) de notas fiscais.

FromSoft – Todos os direitos reservados – http://www.fromsoft.com.br Página 215


Curso de Cobol Básico

4.5 – Listagem de Notas Fiscais

Conceito: Criação de um programa que vai ler os valores presente nos arquivos de notas fiscais
e vai disponibilizar um relatório de clientes em forma de lista e tendo salto de página.

5. Módulo para emissão de Relatórios e Notas Fiscais.


5.1 – Relatório Individual

Conceito: Criação de um programa que vai ler os valores presente nos arquivos de clientes e
produtos e vai disponibilizar um relatório de clientes em forma de tabela, com bordas horizontais
e verticais e tendo salto de página. Inclusive vai perguntar ao usuário que cliente ele quer
imprimir, depois, que produto ele quer imprimir.

5.2 – Relatório Geral

Conceito: Criação de um programa que vai ler os valores presente nos arquivos de clientes e
produtos e vai disponibilizar um relatório de clientes em forma de tabela, com bordas horizontais
e verticais e tendo salto de página. Entretanto imprime toda a tabela de clientes, e toda a tabela
de produtos.

5.3 – Relatório por Período

Conceito: Criação de um programa que vai ler os valores presente nos arquivos de notas fiscais
e vai disponibilizar um relatório de clientes em forma de tabela, com bordas horizontais e
verticais e tendo salto de página. Inclusive vai perguntar ao usuário de que mês ele quer que
saia a listagem.

5.4 – Relatório de Vendas.

Conceito: Criação de um programa que vai ler os valores presente nos arquivos de notas fiscais
e vai disponibilizar um relatório de clientes em forma de tabela, com bordas horizontais e
verticais e tendo salto de página. Inclusive vai perguntar ao usuário que nota fiscal ele quer
imprimir. Inclusive havendo quebra de página e de itens.

Nesse aplicativo, o aluno deverá procurar criar programas bem elaborados, pois servirão de
modelo para consultas na construção de aplicativos profissionais em seu desenvolvimento futuro. A
partir de agora, o instrutor será mais rigoroso ao analisar os exercícios, observando qualquer tipo de
informação e notificando ao aluno qualquer tipo de otimização que pode ser feita.

Interface com o Usuário

1. O aluno irá trabalhar com telas mais completas, mais elaboradas, mais intuitivas e padronizadas
para o usuário (Ex: Usar máscaras de edição nos campos numéricos, usar os atributos de ACCEPT
e de DISPLAY para facilitar a visualização e navegação, ter respostas bem elaboradas... parar a
tela para cada mensagem).
2. Devem ser criadas teclas de escape em todos os campos, voltando para o anterior, e se digitado
ESC no primeiro campo, deve sair do programa.

Programação

1. Escrita do Programa: Você deve escolher como escrever seus programas.

1.1 – Quanto a Grafia.

Escolha letras maiúsculas ou minusculas para os comandos e variáveis.

FromSoft – Todos os direitos reservados – http://www.fromsoft.com.br Página 216


Curso de Cobol Básico

1.2. Declaração de Variáveis.

Deve-se declarar variáveis com nomes intuitivos(fáceis de entender) e devem ser


inicializadas(tendo o atributo de SPACES ou ZEROS), com o objetivo de facilitar a manutenção
posterior ao desenvolvimento.
Deve-se haver compatibilidade de variáveis entre programas, para que a portabilidade
para criação de outros programas seja obtida mais rapidamente.
Usar níveis 78, 88 e onde for possível facilitar o entendimento do código fonte.
Deve-se não declarar variáveis compactadas, do tipo COMP-3, para não haver
problemas com incompatibilidade de arquivos e problemas com conversão.

2. Portabilidade das aplicações.

2.1 – Rotinas.

Criar rotinas padrão, para que sejam utilizadas em vários programas. Toda rotina que
puder ser repetida, deverá ser declarado com um procedure-name, para que possa ser
chamada em vários pontos do programa, e para que possa ser copiada para outros programas,
obtendo assim um nível de produtividade maior, e menos escrita de código. Se a rotina for
global, ou seja, que todos os programas a usarem, criar copybooks das mesmas.

2.2 – Modularização

Determinar uma pasta para arquivos, pasta determinada para copybooks, pasta para
arquivos screens, com pasta determinada para programas fontes, com o objetivo de demonstrar
o uso de PATH nos programas fontes (DIRETORIO-
DESENVOLVIMENTO/ARQUIVO.EXTENSAO). Veja que a barra é invertida, pois assim é
possivel poder migrar seus sistemas para outros sistemas operacionais (Linux, Unix, etc)

3. Organização para desenvolver o SISNF.

Para desenvolver o SISNF, será necessário fazer uma organização das pastas e
arquivos de forma que a manutenção do SISNF fique bem fácil e que você seja mais produtivo
na hora de desenvolver. Inclusive para começarmos a perceber como é desenvolvido um
sistema comercial com parâmetros, diretrizes e regras.

3.1 - Pasta Principal: SISNF


3.1.1 – Arquivos Fontes.
Arquivos presentes nesta pasta: *.bat, *.cbl, *.exe, adisctrl, coblib.dle,
extfh.obj, cobintfn.obj.
3.1.2 - Pasta para arquivos: SISNF/ARQUIVOS
Arquivos presentes nesta pasta: *.dat *.idx *.txt
3.1.3 - Pasta para copybooks: SISNF/COPYS
Arquivos presentes nesta pasta: *.cpy
3.1.4 - Pasta para screens: SISNF/TELAS
Arquivos presentes nesta pasta: *.ss *.srn

4. Estruturação do programa

Procure desenvolver seu programa, com comentários sucintos aonde se fizer necessário para que
facilite a visualização do código. Estruturação do código usando todos os comandos possíveis
aprendidos no decorrer do curso, tendo como objetivo a otimização e a melhor performance dos
programas desenvolvidos. Aproveite a auto-documentação que o COBOL lhe proporciona.

Dicas

FromSoft – Todos os direitos reservados – http://www.fromsoft.com.br Página 217


Curso de Cobol Básico

1. Procure sempre desenvolver seus programas bem padronizados para que você possa copiá-los
criando outros programas e que precise fazer pequenas alterações em seu código para o
desenvolvimento do mesmo. Tome como base, os programas que você já desenvolveu no curso,
para que tenha maior velocidade em seu desenvolvimento.
2. Procure usar nomes intuitivos, para que a medida que o programa cresça, você não se perca nele.
3. Procure criar rotinas genéricas e modelos pré-escritos. Isso facilita no desenvolvimento de um novo
sistema.
4. Procure otimizar o máximo possível seus programas, pois a medida que ele for crescendo, ele
poderá ficar lento havendo perda de produtividade por parte de seu usuario e lhe dando uma boa
dor de cabeça. Padronizando os seus programas fontes agora que está se aperfeiçoando terá mais
facilidades para o futuro.
5. Procure criar copybooks com variáveis genéricas, para que tenha produtividade em seus
programas, podendo simplesmente copiá-la de um copybook usando o comando COPY, sem ter
que declará-la novamente em outros programas.

Criação das Pastas para o desenvolvimento do SISNF.

Agora iremos criar a estrutura para iniciarmos o desenvolvimento do sisnf.

- Crie a pasta SISNF


- Acesse a pasta SISNF
- Dentro da pasta SISNF, crie a pasta COPYS, para os copybooks.
- Dentro da pasta SISNF, crie a pasta TELAS, para as telas
- Dentro da pasta SISNF, crie a pasta ARQUIVOS, para os arquivos.
- Insira no diretorio SISNF o arquivo ADISCTRL para poder usar as teclas
- Insira no diretorio SISNF os batchs que foi enviados por mim a você, eles lhe darão muita
produtividade, e terá muitas facilidades na hora de compilar e linkeditar programas.

Especificações para a criação dos programas

Copybooks. (*.cpy)

Para o uso de Copybooks, copie-os com o path relativo dentro dos seus programas, entre
aspas, deste modo:

copy “copys/copybook.cpy”.

Onde copybook.cpy é o nome do seu arquivo.

Copybooks Screen Section. (*.ss)

Para o uso de Telas, copie-as com o path relativo dentro dos seus programas, entre aspas,
deste modo:

copy “telas/screen.ss”.

Onde screen.ss é o nome da sua tela.

Arquivos (*.dat)

Para o uso de arquivos, especifique-os na sua select (estrutura do arquivo) da seguinte


maneira:

select <nome-da-fd> assign to “arquivos/arquivo.dat”.

Onde <nome-da-fd> é o nome do sua fd (layout do arquivo) e arquivo.dat é o nome do seu


arquivo.

FromSoft – Todos os direitos reservados – http://www.fromsoft.com.br Página 218


Curso de Cobol Básico

P.S – No caso está sendo usado a barra normal (/) para que haver compatibilidade entre os sistemas
operacionais windows/linux/unix.

FromSoft – Todos os direitos reservados – http://www.fromsoft.com.br Página 219


Curso de Cobol Básico

Sisnf – Criação do Menu

Montagem dos Menus do Sistema de Notas Fiscais.

Em nosso curso, iremos desenvolver a tela do programa do SISNF primeiramente, para depois
trabalhar com a programação. Deve-se então procurar desenvolver a tela com todos os atributos
possíveis de exibição em tela, mediante o que está sendo pedido na lição. Vamos desenvolver apenas
telas estáticas (Telas que serão chamadas através do DISPLAY), para haver uma maior portabilidade e
facilidade no desenvolvimento das telas.

a) Cores:
Cor de Fundo: Azul
Cor de Letra: Branca
Cor de Item Marcado: Preto(Fundo)/Branco(Letra).

b) Teclas:
F1 - Chama o menu sobre (Programa SISNFSOB.CBL)
F3 - Sai do Programa
ESC - Se no menu inicial o submenu estiver aberto ele volta a tela principal, caso
contrário, ele sai do programa (Veja a observação)
ENTER - Mostra um submenu de opções para o usuário, caso ele esteja em um menu
que tenha submenu e para confirmar as operações.

c) Posicao para parar a tela: Linha 25 Coluna 79.

Obs: Quando dizemos que um menu está aberto, dizemos que um leque posterior ao menu principal, é
mostrado no programa com algumas opções ao usuário, e que ele possa navegar por teclas.

FromSoft – Todos os direitos reservados – http://www.fromsoft.com.br Página 220


Curso de Cobol Básico

1. Criar o programa de nome SISNF.CBL, com nome de tela (SISNF.SRN e SISNF.SS) que será o
menu principal e irá controlar as chamadas dos módulos do sistema, trabalhando com a seguinte
tela:

1.1 - Use o call X"AF" para poder fazer a navegacao entre as teclas. Para as teclas F1, F3 e ESC, deve-
se fazer os testes via call X"AF" e não pelo accept from escape key. Para descobrir os valores, use o
programa-exemplo que é explanado na lição 15.

1.2 - Menu de Clientes.

Aos quais você irá trabalhar com os seguintes eventos.

I - Inclusão
C - Consulta
A - Alteração
E - Exclusão
R - Relatorio.

Então vamos criar apenas um programa, com todas as funções de trabalho do arquivo, Inclusão, Consulta,
Alteração, Exclusão e Relatório. Deve-se chamar o programa SISNFCLI.CBL passando como parâmetro a Operação
a se fazer.

move "I" to Operacao


call "sisnfcli" using Operacao
cancel "sisnfcli"

Dica: Use variaveis nivel 78 para os parâmetros e para ficar bem genérico, crie um procedimento que chama os
programas.
Ex:

identification division.
program-id. exemplo.
author. fromsoft.
******************************************************************
* Empresa.... FromSoft http://www.fromsoft.com.br*
* Copyright.. FromSoft 2001 - Todos os direitos reservados *
* Programa... exemplo.cbl *
* Sistema.... Sisnf *
* Analista... Departamento de Cursos ( curso@fromsoft.com.br)*
* Programador Departamento de Cursos ( curso@fromsoft.com.br)*
* Data....... 11/2001 *
******************************************************************

FromSoft – Todos os direitos reservados – http://www.fromsoft.com.br Página 221


Curso de Cobol Básico

* Descricao.: Exemplo de como fazer um programa, incluindo *


* padronizacao de comandos e de escrita. *
* - Uso de comandos minusculos e variaveis em maiusc/minusc *
* - Uso de breve comentarios em todas as rotinas dos programas *
* - Uso de perform para determinar padroes e estrutura de sistema*
******************************************************************
* http://www.fromsoft.com.br/cursos.html *
******************************************************************
working-storage section.
* Variaveis nivel 77.
77 Programa pic x(008) value spaces.
77 Operacao pic x(001) value spaces.

* Variaveis nivel 78
78 Inclusao value "I".
78 Consulta value "C ".
78 Alteracao value "A".
78 Exclusao value "E".
78 Relatorio value "R".

procedure-division.
* Tarefas do programa.
perform Inicializa
perform Determina-Operacao
perform Fim.

* Abertura de Arquivos, Inicializacao de Variaveis e telas, se necessário.


Inicializa.

* Aonde usar as regras de negócio do programa.


Determina-Operacao.
move Inclusao to Operacao
move "sisnfcli" to Programa
perform Chamar-Programa.

* Fechamento de arquivos e Saida do Sistema.


Fim.
stop run.

* Sub-Rotinas
Chamar-Programa.
call Programa using Operacao
cancel Programa.

FromSoft – Todos os direitos reservados – http://www.fromsoft.com.br Página 222


Curso de Cobol Básico

2. Menu de Produtos.

Aos quais você irá trabalhar com os seguintes eventos.

I - Inclusão
C - Consulta
A - Alteração
E - Exclusão
R - Relatorio.

Então vamos criar apenas um programa, com todas as funções de trabalho do arquivo, Inclusão, Consulta,
Alteração, Exclusão e Relatório. Deve-se Chamar o programa SISNFPRO.CBL passando como parâmetro a
Operação a se fazer.

move "I" to Operacao


call "sisnfpro" using Operacao
cancel "sisnfpro"

Dica: Use variaveis nivel 78 para os parametros e para ficar bem genérico, crie um procedimento que chama os
programas.
Ex:

identification division.
program-id. exemplo.
author. fromsoft.
******************************************************************
* Empresa.... FromSoft http://www.fromsoft.com.br*
* Copyright.. FromSoft 2001 - Todos os direitos reservados *
* Programa... exemplo.cbl *
* Sistema.... Sisnf *
* Analista... Departamento de Cursos ( curso@fromsoft.com.br)*
* Programador Departamento de Cursos ( curso@fromsoft.com.br)*
* Data....... 11/2001 *
******************************************************************
* Descricao.: Exemplo de como fazer um programa, incluindo *
* padronizacao de comandos e de escrita. *
* - Uso de comandos minusculos e variaveis em maiusc/minusc *
* - Uso de breve comentarios em todas as rotinas dos programas *
* - Uso de perform para determinar padroes e estrutura de sistema*
******************************************************************
* http://www.fromsoft.com.br/cursos.html *
******************************************************************
working-storage section.
* Variaveis nivel 77.

FromSoft – Todos os direitos reservados – http://www.fromsoft.com.br Página 223


Curso de Cobol Básico

77 Programa pic x(008) value spaces.


77 Operacao pic x(001) value spaces.

* Variaveis nivel 78
78 Inclusao value "I".
78 Consulta value "C ".
78 Alteracao value "A".
78 Exclusao value "E".
78 Relatorio value "R".

procedure-division.
* Tarefas do programa.
perform Inicializa
perform Determina-Operacao
perform Fim.

* Abertura de Arquivos, Inicializacao de Variaveis e telas, se necessário.


Inicializa.

* Aonde usar as regras de negócio do programa.


Determina-Operacao.
move Inclusao to Operacao
move "sisnfpro" to Programa
perform Chamar-Programa.

* Fechamento de arquivos e Saida do Sistema.


Fim.
stop run.

* Sub-Rotinas
Chamar-Programa.
call Programa using Operacao
cancel Programa.

FromSoft – Todos os direitos reservados – http://www.fromsoft.com.br Página 224


Curso de Cobol Básico

3. Menu de notas fiscais.

Aos quais você irá trabalhar com os seguintes eventos.

I - Inclusão
C - Consulta
A - Alteração
E - Exclusão
R - Relatorio.

Então vamos criar apenas um programa, com todas as funções de trabalho do arquivo, Inclusão, Consulta,
Alteração, Exclusão e Relatório. Deve-se Chamar o programa SISNFNF.CBL passando como parâmetro a Operação
a se fazer.

move "I" to Operacao


call "sisnfnf" using Operacao
cancel "sisnfnf"

Dica: Use variaveis nivel 78 para os parametros e para ficar bem genérico, crie um procedimento que chama os
programas.
Ex:

identification division.
program-id. exemplo.
author. fromsoft.
******************************************************************
* Empresa.... FromSoft http://www.fromsoft.com.br*
* Copyright.. FromSoft 2001 - Todos os direitos reservados *
* Programa... exemplo.cbl *
* Sistema.... Sisnf *
* Analista... Departamento de Cursos ( curso@fromsoft.com.br)*
* Programador Departamento de Cursos ( curso@fromsoft.com.br)*
* Data....... 11/2001 *
******************************************************************
* Descricao.: Exemplo de como fazer um programa, incluindo *
* padronizacao de comandos e de escrita. *
* - Uso de comandos minusculos e variaveis em maiusc/minusc *
* - Uso de breve comentarios em todas as rotinas dos programas *
* - Uso de perform para determinar padroes e estrutura de sistema*
******************************************************************
* http://www.fromsoft.com.br/cursos.html *
******************************************************************
working-storage section.

FromSoft – Todos os direitos reservados – http://www.fromsoft.com.br Página 225


Curso de Cobol Básico

* Variaveis nivel 77.


77 Programa pic x(008) value spaces.
77 Operacao pic x(001) value spaces.

* Variaveis nivel 78
78 Inclusao value "I".
78 Consulta value "C ".
78 Alteracao value "A".
78 Exclusao value "E".
78 Relatorio value "R".

procedure-division.
* Tarefas do programa.
perform Inicializa
perform Determina-Operacao
perform Fim.

* Abertura de Arquivos, Inicializacao de Variaveis e telas, se necessário.


Inicializa.

* Aonde usar as regras de negócio do programa.


Determina-Operacao.
move Inclusao to Operacao
move "sisnfnf" to Programa
perform Chamar-Programa.

* Fechamento de arquivos e Saida do Sistema.


Fim.
stop run.

* Sub-Rotinas
Chamar-Programa.
call Programa using Operacao
cancel Programa.

FromSoft – Todos os direitos reservados – http://www.fromsoft.com.br Página 226


Curso de Cobol Básico

4. Menu de Relatorios.

Aos quais você irá trabalhar com os seguintes eventos.

G - Geral
N - Individual
P - Por Periodo
V - Por Venda

Então vamos criar apenas um programa, com todas as funções de trabalho do arquivo, Geral, Individual, Por periodo
e Por Venda. Deve-se Chamar o programa RELGERAL.CBL para o relatório geral. Deve-se chamar o programa
RELINDIV.CBL para o relatório individual. Deve-se chamar o programa RELPPER.CBL para o relatório por período.
Deve-se Chamar o programa RELVENDA.CBL para o relatorio por venda.

move "G" to Operacao


call "sisnfnf" using Operacao
cancel "sisnfnf"

Dica: Use variaveis nivel 78 para os parâmetros e para ficar bem genérico, crie um procedimento que chama os
programas.
Ex:

identification division.
program-id. exemplo.
author. fromsoft.
******************************************************************
* Empresa.... FromSoft http://www.fromsoft.com.br*
* Copyright.. FromSoft 2001 - Todos os direitos reservados *
* Programa... exemplo.cbl *
* Sistema.... Sisnf *
* Analista... Departamento de Cursos ( curso@fromsoft.com.br)*
* Programador Departamento de Cursos ( curso@fromsoft.com.br)*
* Data....... 11/2001 *
******************************************************************
* Descricao.: Exemplo de como fazer um programa, incluindo *
* padronizacao de comandos e de escrita. *
* - Uso de comandos minusculos e variaveis em maiusc/minusc *
* - Uso de breve comentarios em todas as rotinas dos programas *
* - Uso de perform para determinar padroes e estrutura de sistema*
******************************************************************
* http://www.fromsoft.com.br/cursos.html *
******************************************************************

FromSoft – Todos os direitos reservados – http://www.fromsoft.com.br Página 227


Curso de Cobol Básico

working-storage section.
* Variaveis nivel 77.
77 Programa pic x(008) value spaces.
77 Operacao pic x(001) value spaces.

* Variaveis nivel 78
78 Geral value "G".
78 Individual value "N".
78 Por-Periodo value "P".
78 Por-Venda value "V".

procedure-division.
* Tarefas do programa.
perform Inicializa
perform Determina-Operacao
perform Fim.

* Abertura de Arquivos, Inicializacao de Variaveis e telas, se necessário.


Inicializa.

* Aonde usar as regras de negócio do programa.


Determina-Operacao.
evaluate Operacao
when Geral
move "relgeral" to Programa
when Individual
move "relindiv" to Programa
when Por-Periodo
move "relpper" to Programa
when Por-Venda
move "relvenda" to Programa
end-evaluate
perform chamar-programa.

* Fechamento de arquivos e Saida do Sistema.


Fim.
stop run.

* Sub-Rotinas
Chamar-Programa.
call Programa using Operacao
cancel Programa.

FromSoft – Todos os direitos reservados – http://www.fromsoft.com.br Página 228


Curso de Cobol Básico

5. Menu Sobre

Onde deve-se Chamar o programa SISNFSOB.CBL para a exibição do Sobre. Deve haver funcionalidade para que
através da tecla F1, se chame o mesmo também.

6. Considerações:

• Veja que esta primeira lição é apenas para a criação do menu principal. Ela parece ser complexa,
entretanto veja que ela é muito simples, o que a dificulta é apenas a sua lógica.
• Primeiramente antes de qualquer coisa, desenhe o menu principal.
• Para criar as variáveis da Screen Section (Para os menus e submenus marcados/desmarcados),
faça uma cópia da tela principal, abra o screens com esta cópia, desenhe o menu ou o submenu
marcado exatamente como eles ficariam na tela e retire todo o restante do conteúdo da tela,
deixando apenas o menu ou submenu em questão, depois salve o arquivo.
• Depois visualize o arquivo *.ss gravado. Nele será gerado apenas o código que você necessita, se
você fez o que foi recomendado. Aí para os outros itens de menu será muito mais fácil.

FromSoft – Todos os direitos reservados – http://www.fromsoft.com.br Página 229


Curso de Cobol Básico

Sisnfcli - Manutenção de Clientes

1. Criar o programa de nome SISNFCLI.CBL, com nome de tela (SISNFCLI.SRN e SISNFCLI.SS). Os


Menus de Inclusão, Consulta, Alteração e Exclusão, dos modulo de clientes terá o seguinte Lay-Out
de Tela.

Manutenção de Clientes.

Informações do Arquivo Físico.

Select:
Nome da Fd Clientes
Nome do arquivo físico: sisnfcli.dat
Organizacao: Indexada
Chave-Primária: Codigo-Cliente
Chave-Secundária: Nome-Cliente
Variavel de File-Status: File-Status
Nome do copybook da select: slcli.cpy

Fd:
Nome do arquivo da Fd: fdcli.cpy
Nome do Registro da Fd:Reg-Clientes.

FromSoft – Todos os direitos reservados – http://www.fromsoft.com.br Página 230


Curso de Cobol Básico

Parametros para variáveis.

Variavel Tipo Tamanho Validacao Mascara Edição Parametros para Accept


Codigo-Cliente 9 5 zeros Codigo-Mascara AUTO PROMPT
Nome-Cliente x 30 spaces N/A AUTO UPPER PROMPT
Endereco-Cliente x 30 spaces N/A AUTO UPPER PROMPT
Bairro-Cliente x 15 spaces N/A AUTO UPPER PROMPT
Cidade-Cliente x 15 spaces N/A AUTO UPPER PROMPT
Estado-Cliente A 2 Spaces N/A AUTO UPPER PROMPT
Data-Cadastro-Cliente GRUPO
Dia-Cadastro 9 2 Prog14.cbl Dia-Mascara AUTO PROMPT
Mes-Cadastro 9 2 Prog14.cbl Mes-Mascara AUTO PROMPT
Ano-Cadastro 9 4 Prog14.cbl Ano-Mascara AUTO PROMPT
Telefone-Cliente X 15 Spaces N/A AUTO PROMPT
Cgc-Cpf-Cliente X 15 Spaces N/A AUTO PROMPT
Data-de-Pagamento GRUPO
Dia-Pagamento 9 2 Prog14.cbl Dia-Mascara AUTO PROMPT
Mes-Pagamento 9 2 Prog14.cbl Mes-Mascara AUTO PROMPT
Ano-Pagamento 9 4 Prog14.cbl Ano-Mascara AUTO PROMPT
Observacoes-Cliente x 50 N/A N/A AUTO UPPER PROMPT
Cep-Cliente GRUPO
Numero-Cep 9 5 zeros Digito-Mascara AUTO PROMPT
Digito-Cep 9 3 zeros Numero-Mascara AUTO PROMPT
Cartao-Diners x 1 S ou N N/A AUTO PROMPT
Cartao-Visa x 1 S ou N N/A AUTO PROMPT
Cartao-Credicard x 1 S ou N N/A AUTO PROMPT
Tipo-Pessoa x 10 Spaces N/A AUTO UPPER PROMPT

Obs: Usar Variáveis do nivel 78, para realizar escolhas.

Manuseamento do Programa

Teclas Usadas:

ESC - Se for o campo código, sai do programa, se for outro campo, voltar para o anterior.
F3 - Sair.

Cores:
Cor de fundo: Azul
Cor de Letra: Branca.

Miscelâneas:
Linha para mensagens: posicao 2129
Parar tela: posição 2579.

Funcionamento do Programa

a) No item modo, deve-se indicar que modulo de trabalho o usuário está executando (Inclusão,
Consulta, Alteração, Exclusão)
b) No item data, deve-se mostrar a data do sistema, em 08 digitos.
c) No item hora, deve-se mostrar a hora do sistema.

FromSoft – Todos os direitos reservados – http://www.fromsoft.com.br Página 231


Curso de Cobol Básico

Operações realizadas pelo SISNFCLI

I - Inclusão

a) Deve-se informar ao usuário o modo de trabalho do programa. Ex: Modo: Inclusão.


b) Se o usuário digitar um código, deve-se testar para ver se este código já é existente se sim, ele
mostra em tela a mensagem "Código já cadastrado" e volta para o código. Se não ele prossegue para
os outros campos.
c) A Cada campo que o usuário digitar, deve-se ter uma mensagem com a descrição do campo. Ex:
Campo Código - Código do Cliente.

C - Consulta

a) Se o usuário digitar um código, deve-se testar para ver se este código não é cadastrado, então, se o
código já foi cadastrado ele mostra as informações em tela, se não é mostrado em tela a mensagem
"Codigo não cadastrado" e volta para o código.
b) Caso a Consulta seja efetivada, deve-se mostrar os dados ao usuário, parar a tela e se o usuario
digitar qualquer tecla, deve-se limpar a tela e voltar para o código.

FromSoft – Todos os direitos reservados – http://www.fromsoft.com.br Página 232


Curso de Cobol Básico

A - Alteração

a) Se o usuário digitar um código, deve-se testar para ver se este código não é cadastrado, então, se o
código já foi cadastrado ele mostra as informações em tela e passa para os outros campos, para que
possa fazer a regravação do registro, se não é mostrado em tela a mensagem "Codigo não cadastrado"
e volta para o código.

E - Exclusão

a) Se o usuário digitar um código, deve-se testar para ver se este código não é cadastrado, então, se o
código já foi cadastrado ele mostra as informações em tela, se não é mostrado em tela a mensagem
"Codigo não cadastrado" e volta para o código.
b) Caso a Consulta seja efetivada, deve-se mostrar os dados ao usuário, parar a tela E realizar a
pergunta "Você deseja excluir? S/N" Se o usuário digitar "S" é feita a exclusão. Se o usuário digitar "N".
deve-se limpar a tela e voltar para o código.

FromSoft – Todos os direitos reservados – http://www.fromsoft.com.br Página 233


Curso de Cobol Básico

R - Relatório.

Informações do Arquivo Físico.

Select:
Nome da Fd RelCli
Nome do arquivo físico: relcli.txt
Variavel de File-Status: File-Status
Nome do copybook da select: slrelcli.cpy

Fd:
Nome do arquivo da Fd: fdrelcli.cpy
Nome do Registro da Fd:Reg-Relcli

Detalhes do Relatorio:

Cabecalho do Relatório:

SISNF - Relatorio de Clientes Cadastrados Data: 25/11/2001


-------------------------------------------------------------------------
Codigo Nome Telefone Estado
-------------------------------------------------------------------------

Corpo do Relatório

Número de linhas: 49 linhas.

Rodapé do Relatório:

-------------------------------------------------------------------------
FromSoft - Todos os direitos reservados

De dentro do programa, deve-se chamar o programa relcli.cbl que será responsável pela impressão da
listagem de clientes. Antes de chamá-lo, deve-se fechar o arquivo, pois senão ocorrerá problemas.

Dados a serem exibidos no relatório:

- Codigo - Data de Nascimento


- Nome - Telefone

FromSoft – Todos os direitos reservados – http://www.fromsoft.com.br Página 234


Curso de Cobol Básico

Dicas

Para que você possa desenvolver o programa com uma maior facilidade, use como base os exemplos
que estão anexados na lição como modelo:

Criando o Programa

Antes de começar a criar um programa, crie um esqueleto padrão para desenvolver o seu
sistema, assim fica mais fácil e mais rápido de se escrever programas.

Desenvolvendo

a) Antes de começar a desenvolver um sistema, sempre desenhe a tela primeiro, pois assim você já vai
começar a pré-formar uma imagem em mente de como o programa será escrito. E depois vai te dar uma
noção maior das variáveis que você vai precisar.

b) Depois de desenhar a tela, comece a criar o programa pelas partes básicas. Se você estiver usando
arquivos, declare primeiramente a select e a fd. Depois declare as variáveis de trabalho. Use
comentários sempre que forem preciso.

c) Após terminar de declarar variáveis, verifique se o seu programa necessita de uma linkage section.
Se sim, declare os parâmetros necessários, inclusive adicione a procedure division do seu programa-
modelo o parâmetro using.

d) Já na sua procedure division, procure criar estruturas de programação, para que você escreva menos
código. Exemplo: inicio, meio e fim.

Ex: perform inicializa


perform realiza-operacao
ou
perform realiza-operacao thru fim-realiza-operacao
perform fim.

Onde seriam:

Inicializa - Seria para abrir arquivos, inicializar variáveis, exibir telas.


Realiza-Operacao - Seria para determinar as regras de programação do programa.
Fim - Seria para fechar arquivos e sair do programa.

Dicas para desenvolver o programa.

- Desenhe a tela.
- Declare a select e a fd.
- Declare as variáveis.
- Inclusive declare os valores relativos a operacao como variáveis nivel 78, pois sao bem i
intuitivas.
Ex:
78 Inclusao value "I".
78 Consulta value "C".
78 Alteracao value "A".
78 Exclusao value "E".

- Como vai precisar de receber o parâmetro que foi passado pelo programa principal (sisnfdos.cbl),
declare uma linkage section.
- Na procedure division, crie três performs, crie um com o nome de inicializa. Tem como objetivo exibir a
tela e abrir o arquivo. Abra-o como I-O pois assim todas as operações podem ser feitas corretamente.
Crie o terceiro com o nome de fim. Tem como objetivo fechar o arquivo e sair do programa. Para o

FromSoft – Todos os direitos reservados – http://www.fromsoft.com.br Página 235


Curso de Cobol Básico

segundo perform, crie-o com o nome de realiza-operacao e nele faça um evaluate, testando as
operações chamadas. E indicando para um procedimento que tenha um inicio e um fim.

Ex:

Inicializa.
display <tela>
perform abrir-arquivo-i-o.

realiza-operacao.
evaluate Operacao
when Inclusao
perform incluir thru fim-incluir
when Consulta
perform consultar thru fim-consultar
when Alterar
perform alterarthru fim-alterar
when Excluir
perform excluirthru fim-excluir
when Other
perform erro-escolha-operacao
end-evaluate

fim.
perform fechar-arquivo
stop run.

FromSoft – Todos os direitos reservados – http://www.fromsoft.com.br Página 236


Curso de Cobol Básico

Sisnfpro - Manutenção de Produtos

2. Criar o programa de nome SISNFPRO.CBL, com nome de tela (SISNFPRO.SRN e SISNFPRO.SS).


Os Menus de Inclusão, Consulta, Alteração e Exclusão, dos modulo de clientes terá o seguinte Lay-
Out de Tela.

Manutenção de Produtos.

Informações do Arquivo Físico.

Select:
Nome da Fd Produtos
Nome do arquivo físico: sisnfpro.dat
Organizacao: Indexada
Chave-Primária: Codigo-Produto
Chave-Secundária: Nome-Produto
Variavel de File-Status: File-Status
Nome do copybook da select: slpro.cpy

Fd:
Nome do arquivo da Fd: fdpro.cpy
Nome do Registro da Fd:Reg-Produtos.

Parametros para variáveis.

Nome Tipo Tamanho Validacao Mascara Edição Parametros para Accept


Codigo-Produto 9 5 zeros Codigo-Mascara AUTO PROMPT
Nome-Produto X 20 spaces N/A AUTO UPPER PROMPT
Unidade-Produto X 5 spaces N/A AUTO UPPER PROMPT
Valor-Unitario 9 06v99 zeros N/A AUTO UPPER PROMPT
Descricao-Produto x 30 N/A N/A AUTO UPPER PROMPT

Obs: Usar Variáveis do nivel 78, para realizar escolhas.

Manuseamento do Programa

FromSoft – Todos os direitos reservados – http://www.fromsoft.com.br Página 237


Curso de Cobol Básico

Teclas Usadas:

ESC - Se for o campo código, sai do programa, se for outro campo, voltar para o anterior.
F3 - Sair.

Cores:
Cor de fundo: Azul
Cor de Letra: Branca.

Miscelâneas:
Linha para mensagens: posicao 2129
Parar tela: posição 2579.

Funcionamento do Programa

d) No item modo, deve-se indicar que modulo de trabalho o usuário está executando (Inclusão,
Consulta, Alteração, Exclusão)
e) No item data, deve-se mostrar a data do sistema, em 08 digitos.
f) No item hora, deve-se mostrar a hora do sistema.

Operações realizadas pelo SISNFPRO

I - Inclusão

a) Deve-se informar ao usuário o modo de trabalho do programa. Ex: Modo: Inclusão.


b) Se o usuário digitar um código, deve-se testar para ver se este código já é existente se sim, ele
mostra em tela a mensagem "Código já cadastrado" e volta para o código. Se não ele prossegue para
os outros campos.
c) A Cada campo que o usuário digitar, deve-se ter uma mensagem com a descrição do campo. Ex:
Campo Código - Código do Produto.

FromSoft – Todos os direitos reservados – http://www.fromsoft.com.br Página 238


Curso de Cobol Básico

C - Consulta

a) Se o usuário digitar um código, deve-se testar para ver se este código não é cadastrado, então, se o
código já foi cadastrado ele mostra as informações em tela, se não é mostrado em tela a mensagem
"Codigo não cadastrado" e volta para o código.
b) Caso a Consulta seja efetivada, deve-se mostrar os dados ao usuário, parar a tela e se o usuario
digitar qualquer tecla, deve-se limpar a tela e voltar para o código.

A - Alteração

a) Se o usuário digitar um código, deve-se testar para ver se este código não é cadastrado, então, se o
código já foi cadastrado ele mostra as informações em tela e passa para os outros campos, para que
possa fazer a regravação do registro, se não é mostrado em tela a mensagem "Codigo não cadastrado"
e volta para o código.

FromSoft – Todos os direitos reservados – http://www.fromsoft.com.br Página 239


Curso de Cobol Básico

E - Exclusão

a) Se o usuário digitar um código, deve-se testar para ver se este código não é cadastrado, então, se o
código já foi cadastrado ele mostra as informações em tela, se não é mostrado em tela a mensagem
"Codigo não cadastrado" e volta para o código.
b) Caso a Consulta seja efetivada, deve-se mostrar os dados ao usuário, parar a tela E realizar a
pergunta "Você deseja excluir? S/N" Se o usuário digitar "S" é feita a exclusão. Se o usuário digitar "N".
deve-se limpar a tela e voltar para o código.

R - Relatório.

Informações do Arquivo Físico.

Select:
Nome da Fd RelPro
Nome do arquivo físico: relpro.txt
Variavel de File-Status: File-Status
Nome do copybook da select: slrelpro.cpy

Fd:
Nome do arquivo da Fd: fdrelpro.cpy
Nome do Registro da Fd:Reg-Relcli

Detalhes do Relatorio:

Cabecalho do Relatório:

SISNF - Relatorio de Produtos Cadastrados Data: 25/11/2001


-------------------------------------------------------------------------
Codigo Nome Quantidade Valor Unitario
-------------------------------------------------------------------------

Corpo do Relatório

Número de linhas: 49 linhas.

Rodapé do Relatório:

FromSoft – Todos os direitos reservados – http://www.fromsoft.com.br Página 240


Curso de Cobol Básico

-------------------------------------------------------------------------
FromSoft - Todos os direitos reservados

De dentro do programa, deve-se chamar o programa relpro.cbl que será responsável pela impressão da
listagem de clientes. Antes de chamá-lo, deve-se fechar o arquivo, pois senão ocorrerá problemas.

Dados a serem exibidos no relatório:

- Codigo - Quantidade
- Nome - Valor Unitario

FromSoft – Todos os direitos reservados – http://www.fromsoft.com.br Página 241


Curso de Cobol Básico

Sisnfnf - Manutenção de Notas Fiscais

3. Criar o programa de nome SISNFNF.CBL, com nome de tela (SISNFNF.SRN e SISNFNF.SS). Os


Menus de Inclusão, Consulta, Alteração e Exclusão, dos modulo de clientes terá o seguinte Lay-Out
de Tela.

Manutenção de Notas Fiscais

Informações do Arquivo Físico.

Select:
Nome da Fd Nota-Clientes
Nome do arquivo físico: nfcli.dat
Organizacao: Indexada
Chave-Primária: Codigo-Nota-Nf
Variavel de File-Status: File-Status
Nome do copybook da select: slnfcli.cpy
Fd:
Nome do arquivo da Fd: slnfpro.cpy
Nome do Registro da Fd:Reg-Nota-Clientes.

Select:
Nome da Fd Nota-Produtos
Nome do arquivo físico: nfpro.dat
Organizacao: Indexada
Chave-Primária: Chave-Nf
Codigo-Produto-Nf
Sequencia-Codigo-Nf
Variavel de File-Status: File-Status
Nome do copybook da select: slnfpro.cpy
Fd:
Nome do arquivo da Fd: fdnfpro.cpy
Nome do Registro da Fd:Reg-Nota-Produtos.

FromSoft – Todos os direitos reservados – http://www.fromsoft.com.br Página 242


Curso de Cobol Básico

Parametros para variáveis. Select Nota-Clientes.

Nome Tipo Tamanho Validacao Mascara Edição Parametros para Accept


Codigo-Nota 9 5 zeros Codigo-Mascara AUTO PROMPT
Data-Nota GRUPO
Dia-Nota 9 2 Prog14.cbl N/A AUTO PROMPT
Mês-Nota 9 2 Prog14.cbl N/A AUTO PROMPT
Ano-Nota 9 4 Prog14.cbl N/A AUTO PROMPT
Chave-Clientes 9 5 zeros Codigo-Mascara AUTO PROMPT

Parametros para variáveis Select Nota-Produtos.

Nome Tipo Tamanho Validacao Mascara Edição Parametros para Accept


Chave-Nf GRUPO
Chave-NfCli 9 5 zeros Codigo-Mascara AUTO PROMPT
Nota-NfPro 9 5 zeros N/A N/A
Chave-Produtos 9 5 zeros Codigo-Mascara AUTO PROMPT
Qtde-Produto-NfPro 9 5 zeros Codigo-Mascara AUTO PROMPT

Obs: Usar Variáveis do nivel 78, para realizar escolhas.

Manuseamento do Programa

Teclas Usadas:

PgUp - Registro Anterior (Apenas em Consulta)


PgDown - Registro Posterior (Apenas em Consulta)
ESC - Se for o campo código, sai do programa, se for outro campo, voltar para o
anterior.
F3 - Sair.
F5 - Manutenção de Produto (Se em inclusão, realiza a inclusão de produtos. Se em
alteração, realiza a alteração de produto)

Cores:
Cor de fundo: Azul
Cor de Letra: Branca.

Miscelâneas:
Linha para mensagens: posicao 2129
Parar tela: posição 2579.

Funcionamento do Programa

g) No item modo, deve-se indicar que modulo de trabalho o usuário está executando (Inclusão,
Consulta, Alteração, Exclusão)
h) No item data, deve-se mostrar a data do sistema, em 08 digitos.
i) No item hora, deve-se mostrar a hora do sistema.

FromSoft – Todos os direitos reservados – http://www.fromsoft.com.br Página 243


Curso de Cobol Básico

Operações realizadas pelo SISNFNF

I - Inclusão

a) Deve-se informar ao usuário o modo de trabalho do programa. Ex: Modo: Inclusão.


b) Se o usuário digitar um código, deve-se testar para ver se este código já é existente se sim, ele
mostra em tela a mensagem "Código já cadastrado" e volta para o código. Se não ele prossegue para
os outros campos.
c) A Cada campo que o usuário digitar, deve-se ter uma mensagem com a descrição do campo. Ex:
Campo Código - Código do Cliente.
j) Na Parte relativa a produtos, se o usuário pressionar F5, ele realizará a operação de inclusão se
estiver em modo inclusão. Ele realizará a operação de alteração se estiver em modo alteração.
k) Poderá ser digitado apenas 16 produtos a cada Nota.

FromSoft – Todos os direitos reservados – http://www.fromsoft.com.br Página 244


Curso de Cobol Básico

C - Consulta

a) Deve-se informar ao usuário o modo de trabalho do programa. Ex: Modo: Consulta.


b) Deve-se mostrar ao usuário, informando a ele em tela que ele pode usar as teclas PgUp e PgDown.
c) Se o usuário digitar um código, deve-se testar para ver se este código não é cadastrado, então, se o
código já foi cadastrado ele mostra as informações em tela, se não é mostrado em tela a mensagem
"Código não cadastrado" e volta para o código.
d) Caso a Consulta seja efetivada, deve-se mostrar os dados ao usuário, parar a tela e se o usuário
digitar qualquer tecla, deve-se limpar a tela e voltar para o código.

A - Alteração

a) Deve-se informar ao usuário o modo de trabalho do programa. Ex: Modo: Alteração.

FromSoft – Todos os direitos reservados – http://www.fromsoft.com.br Página 245


Curso de Cobol Básico

b) Se o usuário digitar um código, deve-se testar para ver se este código já é existente se sim, ele
mostra em tela a mensagem "Código já cadastrado" e volta para o código. Se não ele prossegue para
os outros campos.
c) A Cada campo que o usuário digitar, deve-se ter uma mensagem com a descrição do campo. Ex:
Campo Código - Código do Cliente.

E - Exclusão

a) Se o usuário digitar um código, deve-se testar para ver se este código não é cadastrado, então, se o
código já foi cadastrado ele mostra as informações em tela, se não é mostrado em tela a mensagem
"Codigo não cadastrado" e volta para o código.
b) Caso a Consulta seja efetivada, deve-se mostrar os dados ao usuário, parar a tela E realizar a
pergunta "Você deseja excluir? S/N" Se o usuário digitar "S" é feita a exclusão. Se o usuário digitar "N".
deve-se limpar a tela e voltar para o código.

Relatório.

Informações do Arquivo Físico.

Select:
Nome da Fd RelNf
Nome do arquivo físico: relnfcli.txt
Variavel de File-Status: File-Status
Nome do copybook da select: slnfcli.cpy

Fd:
Nome do arquivo da Fd: fdnfcli.cpy
Nome do Registro da Fd:Reg-RelNf

FromSoft – Todos os direitos reservados – http://www.fromsoft.com.br Página 246


Curso de Cobol Básico

Detalhes do Relatorio:

Cabecalho do Relatório:

SISNF - Relatorio de Notas Fiscais Cadastrados Data: 25/11/2001


-------------------------------------------------------------------------
Dados do Cliente
-------------------------------------------------------------------------

Corpo do Relatório

Nota Codigo Nome Telefone Estado


-------------------------------------------------------------------------
99999 99999 XXXXXXXXXXXXXXXXXXXXXXXXXXXXXX XXXXXXXXXXXXXXX XX
-------------------------------------------------------------------------
Dados do Produto
-------------------------------------------------------------------------
Seq. Codigo Nome Qtde. Valor Unit. Valor Total
1 99999 XXXXXXXXXXXXXXXXXXXX 99999 999.999,99 999.999,99
2 99999 XXXXXXXXXXXXXXXXXXXX 99999 999.999,99 999.999,99
3 99999 XXXXXXXXXXXXXXXXXXXX 99999 999.999,99 999.999,99
4 99999 XXXXXXXXXXXXXXXXXXXX 99999 999.999,99 999.999,99
5 99999 XXXXXXXXXXXXXXXXXXXX 99999 999.999,99 999.999,99
6 99999 XXXXXXXXXXXXXXXXXXXX 99999 999.999,99 999.999,99
7 99999 XXXXXXXXXXXXXXXXXXXX 99999 999.999,99 999.999,99
8 99999 XXXXXXXXXXXXXXXXXXXX 99999 999.999,99 999.999,99
9 99999 XXXXXXXXXXXXXXXXXXXX 99999 999.999,99 999.999,99
10 99999 XXXXXXXXXXXXXXXXXXXX 99999 999.999,99 999.999,99
11 99999 XXXXXXXXXXXXXXXXXXXX 99999 999.999,99 999.999,99
12 99999 XXXXXXXXXXXXXXXXXXXX 99999 999.999,99 999.999,99
13 99999 XXXXXXXXXXXXXXXXXXXX 99999 999.999,99 999.999,99
14 99999 XXXXXXXXXXXXXXXXXXXX 99999 999.999,99 999.999,99
15 99999 XXXXXXXXXXXXXXXXXXXX 99999 999.999,99 999.999,99
16 99999 XXXXXXXXXXXXXXXXXXXX 99999 999.999,99 999.999,99
-------------------------------------------------------------------------
Total da Nota................................................: 999.999,99

Rodapé do Relatório:

-------------------------------------------------------------------------
FromSoft - Todos os direitos reservados

De dentro do programa, deve-se chamar o programa relnf.cbl que será responsável pela impressão da
listagem de notas Fiscais.

Dados a serem exibidos no relatório:

Nota-Clientes.
- Codigo
- Nome
- Telefone
- Estado

Nota-Produtos
- Sequencia
- Codigo
- Nome
- Qtde

FromSoft – Todos os direitos reservados – http://www.fromsoft.com.br Página 247


Curso de Cobol Básico

- Valor-Unitario
- Valor-Total

FromSoft – Todos os direitos reservados – http://www.fromsoft.com.br Página 248


Curso de Cobol Básico

Relgeral - Relatório Geral

1. Criar um relatório de nome RELGERAL.CBL que irá emitir um relatório em forma de tabela, com
bordas e com a emissão de todos os registros. Este relatório terá como base os arquivos da
manutenção de clientes e os arquivos da manutenção dos produtos.

Relatório de Clientes

+------------------------------------------------------------------------------+
| SISNF - Relatorio Geral sobre o Cliente |
+------------------------------------------------------------------------------+
| Dados Pessoais do Cliente |
+------------------------------------------------------------------------------+
| Nome: XXXXXXXXXXXXXXXXXXXXXXXXXXXXXX Codigo: 99999 |
| Endereco: XXXXXXXXXXXXXXXXXXXXXXXXXXXXXX |
| Bairro: XXXXXXXXXXXXXXXXXXXX Cidade: XXXXXXXXXXXXXXXXXXXX Estado: XX |
| Data de Pagamento: 99/99/9999 Data de Cadastro: 99/99/9999 |
| Cpf: 999999999-99 |
+------------------------------------------------------------------------------+
| Dados Profissionais do Cliente |
+------------------------------------------------------------------------------+
| Tipo de Pessoa: XXXXXXXXXX |
| Cartoes. Diners: X Mastercard: X Visa: X |
| Observacoes: XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX |
+------------------------------------------------------------------------------+
| Dados desta Impressao |
+------------------------------------------------------------------------------+
| Hora Atual: 99:99 Data Atual: 99/99/9999 Pagina: 99999 Aluno: Seu Nome |
+------------------------------------------------------------------------------+

Relatório de Produtos

+------------------------------------------------------------------------------+
| SISNF - Relatorio Geral sobre o Produto |
+------------------------------------------------------------------------------+
| Nome: XXXXXXXXXXXXXXXXXXXX Codigo: 99999 |
| Vlr.Unit. 999.999,99 Desc. XXXXXXXXXXXXXXXXXXXXXXXXXXXXXX Unidade: XX |
+------------------------------------------------------------------------------+
| Dados desta Impressao |
+------------------------------------------------------------------------------+
| Hora Atual: 99:99 Data Atual: 99/99/9999 Pagina: 99999 Aluno: Seu Nome |
+------------------------------------------------------------------------------+

a) Deve-se fazer a emissao de todas fichas de clientes, depois todas as fichas de produtos.
b) Deve-se emitir 2 fichas de clientes por folha e 5 fichas de produtos por folha.

FromSoft – Todos os direitos reservados – http://www.fromsoft.com.br Página 249


Curso de Cobol Básico

Relindiv - Relatório Individual

1. Criar um relatório de nome RELINDIV.CBL que irá emitir um relatório em forma de tabela, com bordas
e com a emissão de um registro de cliente e um registro de produto que o usuário escolher. Este
relatório terá como base os arquivos da manutenção de clientes e os arquivos da manutenção dos
produtos.

Quando o relatório for chamado, deve-se aparecer a seguinte tela:

a) Quando o usuário digitar o Código do cliente ou o do produto, ler o arquivo, fazer validação e verificar
se o código existe. Se não existir, você mostra a mensagem "Codigo não cadastrado".

Relatório de Clientes
+------------------------------------------------------------------------------+
| SISNF - Relatorio Geral sobre o Cliente |
+------------------------------------------------------------------------------+
| Dados Pessoais do Cliente |
+------------------------------------------------------------------------------+
| Nome: XXXXXXXXXXXXXXXXXXXXXXXXXXXXXX Codigo: 99999 |
| Endereco: XXXXXXXXXXXXXXXXXXXXXXXXXXXXXX |
| Bairro: XXXXXXXXXXXXXXXXXXXX Cidade: XXXXXXXXXXXXXXXXXXXX Estado: XX |
| Data de Pagamento: 99/99/9999 Data de Cadastro: 99/99/9999 |
| Cpf: 999999999-99 |
+------------------------------------------------------------------------------+
| Dados Profissionais do Cliente |
+------------------------------------------------------------------------------+
| Tipo de Pessoa: XXXXXXXXXX |
| Cartoes. Diners: X Mastercard: X Visa: X |
| Observacoes: XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX |
+------------------------------------------------------------------------------+
| Dados desta Impressao |
+------------------------------------------------------------------------------+
| Hora Atual: 99:99 Data Atual: 99/99/9999 Pagina: 99999 Aluno: Seu Nome |
+------------------------------------------------------------------------------+

FromSoft – Todos os direitos reservados – http://www.fromsoft.com.br Página 250


Curso de Cobol Básico

Relatório de Produtos

+------------------------------------------------------------------------------+
| SISNF - Relatorio Geral sobre o Produto |
+------------------------------------------------------------------------------+
| Nome: XXXXXXXXXXXXXXXXXXXX Codigo: 99999 |
| Vlr.Unit. 999.999,99 Desc. XXXXXXXXXXXXXXXXXXXXXXXXXXXXXX Unidade: XX |
+------------------------------------------------------------------------------+
| Dados desta Impressao |
+------------------------------------------------------------------------------+
| Hora Atual: 99:99 Data Atual: 99/99/9999 Pagina: 99999 Aluno: Seu Nome |
+------------------------------------------------------------------------------+

a) Deve-se emitir a Ficha de Cliente e a Ficha de Produto na mesma folha.

FromSoft – Todos os direitos reservados – http://www.fromsoft.com.br Página 251


Curso de Cobol Básico

Relpper - Relatório Por Período.

1. Criar um relatório de nome RELPPER.CBL que irá emitir um relatório em forma de tabela, com bordas
e com a emissão dos registro das notas fiscais de cliente e das notas fiscais de produto que o usuário
escolher, mediante um período inicial e um período final. Este relatório terá como base os arquivos da
manutenção de notas fiscais de clientes e os arquivos da manutenção de notas fiscais de produtos.

Quando o relatório for chamado, deve-se aparecer a seguinte tela:

a) Quando o usuário digitar o período inicial, fazer validação se é igual a zeros e buscar o registro que
for maior ou igual a data digitada. Se existir, você lê o próximo registro e depois você vai perguntar o
período final. Se não existir, você mostra a mensagem "Data Invalida", para a tela e volta a perguntar
novamente.
b) Quando o usuário digitar o período final, fazer validação se é igual a zeros e buscar o registro que for
menor ou igual a data digitada. Se existir, você lê o registro anterior e depois você vai fazer fazer os
procedimentos para a impressão do relatório. Se não existir, você mostra a mensagem "Data Invalida",
para a tela e volta a perguntar novamente.

Descricao do Relatorio (Folha abaixo)

FromSoft – Todos os direitos reservados – http://www.fromsoft.com.br Página 252


Curso de Cobol Básico

+------------------------------------------------------------------------------+
| SISNF - Relatorio por periodo Emitido em: 99/99/9999 Pagina: 99999 |
+------------------------------------------------------------------------------+
| Cliente: XXXXXXXXXXXXXXXXXXXXXXXXXXXXXX Cpf: XXXXXXXXXXXXXXX |
+------------------------------------------------------------------------------+
| Produtos |
+------------------------------------------------------------------------------+
| Codigo Descricao Qtde. Valor Total |
+------------------------------------------------------------------------------+
| 99999 XXXXXXXXXXXXXXXXXXXX 99999 999.999,99 |
| 99999 XXXXXXXXXXXXXXXXXXXX 99999 999.999,99 |
| 99999 XXXXXXXXXXXXXXXXXXXX 99999 999.999,99 |
| 99999 XXXXXXXXXXXXXXXXXXXX 99999 999.999,99 |
| 99999 XXXXXXXXXXXXXXXXXXXX 99999 999.999,99 |
| 99999 XXXXXXXXXXXXXXXXXXXX 99999 999.999,99 |
| 99999 XXXXXXXXXXXXXXXXXXXX 99999 999.999,99 |
| 99999 XXXXXXXXXXXXXXXXXXXX 99999 999.999,99 |
| 99999 XXXXXXXXXXXXXXXXXXXX 99999 999.999,99 |
| 99999 XXXXXXXXXXXXXXXXXXXX 99999 999.999,99 |
| 99999 XXXXXXXXXXXXXXXXXXXX 99999 999.999,99 |
| 99999 XXXXXXXXXXXXXXXXXXXX 99999 999.999,99 |
| 99999 XXXXXXXXXXXXXXXXXXXX 99999 999.999,99 |
| 99999 XXXXXXXXXXXXXXXXXXXX 99999 999.999,99 |
| 99999 XXXXXXXXXXXXXXXXXXXX 99999 999.999,99 |
| 99999 XXXXXXXXXXXXXXXXXXXX 99999 999.999,99 |
+------------------------------------------------------------------------------+
| Total do Cliente: 99.999.999,99 |
| Total Geral: 99.999.999,99 |
+------------------------------------------------------------------------------+

Obs: O Total do Cliente e o Total Geral são o mesmo valor. Os mesmos serão a soma de todos os
produtos. Na nota deve conter 16 produtos. Deve-se Ter duas fichas por página.

FromSoft – Todos os direitos reservados – http://www.fromsoft.com.br Página 253


Curso de Cobol Básico

Relpvend – Relatório por Venda.

1. Criar um relatório de nome RELPVEND.CBL que irá emitir um relatório em forma de tabela, com
bordas e com a emissão de todos os registros. Este relatório terá como base os arquivos da
manutenção de notas fiscais de clientes e os arquivos da manutenção das notas fiscais dos produtos.
Este relatório é muito semelhante ao relatório por período, entretanto o mesmo deve ser emitido em
ordem descendente(Do último para o primeiro).

+------------------------------------------------------------------------------+
| SISNF - Relatorio de Vendas Pagina: 99999 |
+------------------------------------------------------------------------------+
| Nota: 99999 Cliente: XXXXXXXXXXXXXXXXXXXXXXXXXXXXXX Cpf: XXXXXXXXXXXXXXX |
+------------------------------------------------------------------------------+
| Produtos |
+------------------------------------------------------------------------------+
| Codigo Descricao Qtde. Valor Total |
+------------------------------------------------------------------------------+
| 99999 XXXXXXXXXXXXXXXXXXXX 99999 999.999,99 |
| 99999 XXXXXXXXXXXXXXXXXXXX 99999 999.999,99 |
| 99999 XXXXXXXXXXXXXXXXXXXX 99999 999.999,99 |
| 99999 XXXXXXXXXXXXXXXXXXXX 99999 999.999,99 |
| 99999 XXXXXXXXXXXXXXXXXXXX 99999 999.999,99 |
| 99999 XXXXXXXXXXXXXXXXXXXX 99999 999.999,99 |
| 99999 XXXXXXXXXXXXXXXXXXXX 99999 999.999,99 |
| 99999 XXXXXXXXXXXXXXXXXXXX 99999 999.999,99 |
| 99999 XXXXXXXXXXXXXXXXXXXX 99999 999.999,99 |
| 99999 XXXXXXXXXXXXXXXXXXXX 99999 999.999,99 |
| 99999 XXXXXXXXXXXXXXXXXXXX 99999 999.999,99 |
| 99999 XXXXXXXXXXXXXXXXXXXX 99999 999.999,99 |
| 99999 XXXXXXXXXXXXXXXXXXXX 99999 999.999,99 |
| 99999 XXXXXXXXXXXXXXXXXXXX 99999 999.999,99 |
| 99999 XXXXXXXXXXXXXXXXXXXX 99999 999.999,99 |
| 99999 XXXXXXXXXXXXXXXXXXXX 99999 999.999,99 |
+------------------------------------------------------------------------------+
| Total do Cliente: 99.999.999,99 |
| Total Geral: 99.999.999,99 |
+------------------------------------------------------------------------------+

a) Deve-se Ter duas fichas por página.

FromSoft – Todos os direitos reservados – http://www.fromsoft.com.br Página 254


Curso de Cobol Básico

Sisnfsob - Sobre

1. Criar um programa chamado SISNFSOB.CBL que ira exibir uma tela sobre o sisnf, e seus detalhes, e
quando ele for acionado via enter ou então via F1, será realizado o CALL e ele será exibido juntamente
com a outra tela. A tela de sobre deve ficar parada até o usuário pressionar uma tecla qualquer, quando
o programa e terminado e volta para o menu.

Obs: Quando for criar a tela no screens não salvá-la com o atributo blank screen.

FromSoft – Todos os direitos reservados – http://www.fromsoft.com.br Página 255


Curso de Cobol Básico

Curso de Cobol Básico

Copyright © 2002 da FromSoft Informática Ltda.

Todos os direitos reservados pela FromSoft Informática Ltda.

Nenhuma parte desta publicação poderá ser reproduzida, guardada pelo sistema "retrieval" ou
transmitida de qualquer modo ou por qualquer outro meio, seja este eletrônico, mecânico, de
fotocópia, de gravação ou outros, sem prévia autorização, por escrito, da FromSoft Informática
Ltda.

Av dos Andradas, 2.287 Sala 1204


Santa Efigênia
Belo Horizonte - MG
CEP - 31.010-560

Tel: (31) 3241.6882 Fax: (31) 3241.7059

Home Page: www.fromsoft.com.br

FromSoft – Todos os direitos reservados – http://www.fromsoft.com.br Página 256

Vous aimerez peut-être aussi