Boas-vindas ao nosso curso. Meu nome é Ivan Petrucci.
Audiodescrição: Ivan se indentifica como uma pessoa branca. Possui cabelos e olhos castanhos, barba e bigode, também castanhos. Está vestindo uma camiseta preta e óculos de grau com armação grossa preta. Ao fundo, há uma parede lista iluminada em tons de azul e rosa.
Neste curso, vamos utilizar arquivos indexados, que apresentam uma performance superior aos arquivos sequenciais. Por meio deles, desenvolveremos um sistema completo de gestão de contatos, um CRM.
A proposta deste curso é desenvolver vários módulos, cada um com seu conjunto de regras, para que, ao final, tenhamos um sistema completo.
Vamos acessar o prompt de comando para apresentar um menu, e dentro desse menu teremos a aplicação completa, incluindo cadastro, consulta e alteração. Cada item será um programa que desenvolveremos aqui.
Faremos um breve tour, no qual cadastraremos um contato digitando "1". No campo "ID DO CLIENTE", digitaremos o ID 0007 e pressionaremos "Enter" para exibir o campo seguinte.
No campo "NOME DO CLIENTE", colocaremos o nome James. No campo "EMAIL DO CLIENTE", o e-mail será james@bond, e por fim, o telefone será 007.
Após o telefone, receberemos a mensagem "REGISTRO GRAVADO". Vamos consultar o registro 0007 pressionando "2" e inserindo o ID 0007.
JAMES
JAMES@BOND
007
Se quisermos alterar, teclaremos 3. No nome, podemos mudar para Júlio; no e-mail, mudaremos para julio@bond e o telefone será 008. Por fim, confirmaremos a alteração pressionando "S".
Após a alteração, poderíamos excluir o registro 007 do Júlio teclando o número 4, mas não faremos isso.
Nesse projeto, temos o cadastro, a consulta, a alteração e a exclusão — ou seja, o CRUD convencional — funcionando. Além disso, vamos criar uma rotina para, inativar ou ativar o registro em vez de excluí-lo, e mostrar a relação dos contatos que temos registrados. Assim, conseguimos visualizar todos os registros que gravamos.
No último módulo, ao fazer a instalação do sistema, ele irá gerar o setup, criar o arquivo e configurar o sistema para nós.
Trata-se de um sistema completo que utiliza internamente arquivos ISAM, arquivos indexados, que garantem uma melhor performance.
Esperamos ter vocês neste curso até o final. Vamos trabalhar!
No COBOL, trabalhamos basicamente com dois tipos de arquivos: sequenciais e indexados. No curso 1 da formação de COBOL, abordamos os arquivos sequenciais. Para quem ainda não viu, recomendamos assistir a esse curso, pois é bastante informativo.
Os arquivos sequenciais, como o próprio nome sugere, possuem uma ordem de disposição das informações. Não há controle de registro, ou seja, cada registro precede o seguinte.
Imaginemos que quatro registros estão em um único arquivo. Sem uma chave, não conseguimos acessar diretamente um registro, tornando o processo de manipulação mais demorado. As informações podem ter qualquer tamanho, e o acesso direto não é possível.
Portanto, consultas em arquivos sequenciais são realizadas de forma sequencial. Uma dica importante é manter o arquivo classificado para otimizar a consulta.
Por exemplo, ao realizar uma pesquisa em um arquivo sequencial, se digitarmos o número de chave 004, o sistema comparará sequencialmente até encontrar o registro desejado. Se o arquivo não estiver classificado, pode ser necessário ler o arquivo inteiro.
Em outro caso, se o arquivo estiver classificado, a leitura será interrompida ao encontrar a chave. Ainda assim, a leitura será sempre sequencial, o que pode ocasionar problemas de performance.
No curso atual, abordaremos outro tipo de arquivo: os arquivos indexados, ou ISAMs. Esse tipo de arquivo altera completamente o cenário, pois permite o uso de chaves que geram índices. O índice associa a informação a um ponteiro, facilitando o acesso direto aos registros.
Comparando com o exemplo anterior, temos os mesmos registros, mas agora com chaves estabelecidas, como 01, 02, 03, 04. A ordem dos registros não precisa ser sequencial, pois o índice associado ao arquivo ISAM permite o acesso direto, independentemente da ordem dos registros.
Por exemplo, o índice da chave 01 aponta diretamente para o registro 01, da chave 02, para o arquivo 2, e assim por diante. Pela chave, identificamos e chegamos mais rapidamente ao registro.
Vamos analisar o mesmo exemplo. Ao realizar uma pesquisa em um arquivo indexado se digitarmos o número de chave 004, não é necessário percorrer o arquivo inteiro. Através dessa chave, ele vai diretamente ao índice, que cria um ponteiro apontando para o corpo do registro.
Se quisermos saber qual é a pessoa estudante da chave 004 e a série em que ela estuda, por exemplo, basta indicar a chave que ele vai buscar. Não importa se o registro está no final do arquivo, o índice torna a localização mais eficiente.
É importante destacar que, comparando os dois tipos de arquivos, os sequenciais e os indexados, ganhamos em performance e facilidade com os indexados. Não precisamos controlar o final do arquivo.
Nos arquivos sequenciais, é necessário ler o arquivo até o final ou parar no meio dele. Nos indexados, ao localizar, ele mostra o resultado. Caso não encontre, não mostra nada. Não há repetição, evitando o risco de encontrar dois registros iguais.
Embora os arquivos indexados sejam mais pesados em termos de tamanho, isso não é um problema significativo atualmente, pois o ganho em performance compensa.
Uma informação relevante: quem fez nosso curso Cobol módulo 1 baixou um compilador para as aulas. Para este curso, que utiliza arquivos .isam
, é necessário um compilador diferente.
Entre as atividades desta aula, disponibilizaremos o link para baixar uma nova versão do compilador GnuCOBOL. Se você está fazendo o curso pela primeira vez, basta baixar. Se já fez o outro curso, substitua a versão anterior pela deste curso, que atenderá ambos os cursos.
No próximo vídeo, vamos criar nosso arquivo, populá-lo, realizar leituras e outras atividades. Até mais!
Para iniciar nosso projeto, precisamos construir um menu. Esse menu permitirá que a pessoa usuária escolha entre cadastrar clientes, consultar, alterar, entre outras opções.
No Visual Studio, acessaremos a barra superior e clicaremos no menu "File > Open Folder" para criar uma pasta com o nome sugerido de "Curso_Arquivos". No explorador lateral esquerdo, criaremos um arquivo chamado CRM.COB
dentro dessa pasta.
Nosso sistema será um CRM, e o menu estará nesse arquivo, que será o principal.
Dentro desse arquivo, vamos inserir uma estrutura básica de um programa COBOL. É importante lembrar que o nome lógico do programa (PROGRAM-ID
) deve ser igual ao nome físico do arquivo. Não podemos esquecer disso.
Também devemos criar uma linha vazia no final do código para o compilador entender que o programa terminou.
CRM.COB
:
IDENTIFICATION DIVISION.
PROGRAM-ID. CRM.
ENVIRONMENT DIVISION.
DATA DIVISION.
PROCEDURE DIVISION.
STOP RUN.
O programa COBOL possui quatro divisões. A primeira ação que realizaremos na procedure (procedimento) DIVISION
é limpar a tela. Isso significa que, ao acessar um módulo, como o de cadastro, e retornar ao menu, queremos que a tela do menu esteja sempre limpa. Para isso, utilizaremos o comando DISPLAY
para a tela.
PROCEDURE DIVISION.
DISPLAY TELA.
STOP RUN.
Na divisão DATA DIVISION
, criaremos uma seção chamada SCREEN SECTION
. Dentro dessa seção, definiremos uma variável chamada TELA
, que será exibida com o comando DISPLAY
na procedure.
Dentro dessa variável, haverá uma variável associada que executará o comando BLANK SCREEN
.
DATA DIVISION.
SCREEN SECTION.
01 TELA.
05 BLANK SCREEN.
Quando utilizamos o comando DISPLAY
em COBOL, significa que a tela será limpa.
É importante lembrar que, ao usar SCREEN SECTION
em programas COBOL, precisamos posicionar todas as mensagens criadas. Por exemplo, na procedure, nossa primeira mensagem abaixo do DISPLAY
seria um título, como "--- Sistema CRM". Contudo, não podemos mais simplesmente exibir o texto; precisamos posicioná-lo.
Vamos colocá-lo na linha 1, coluna 1, com o comando LINE 01 COLUMN 01
.
PROCEDURE DIVISION.
DISPLAY TELA.
DISPLAY "--- SISTEMA CRM " LINE 01 COLUMN 01.
STOP RUN.
Para facilitar a inserção dos textos, colaremos o seguinte trecho abaixo do título:
DISPLAY "1-CADASTRO " LINE 06 COLUMN 01.
DISPLAY "2-CONSULTA " LINE 07 COLUMN 01.
DISPLAY "3-ALTERACAO " LINE 08 COLUMN 01.
DISPLAY "4-EXCLUSAO " LINE 09 COLUMN 01.
DISPLAY "5-INATIVAR/ATIVAR" LINE 10 COLUMN 01.
DISPLAY "6-REL ATIVOS " LINE 11 COLUMN 01.
DISPLAY "7-REL INATIVOS " LINE 12 COLUMN 01.
DISPLAY "8-SETUP SISTEMA " LINE 13 COLUMN 01.
DISPLAY "9-ENCERRAR " LINE 14 COLUMN 01.
DISPLAY "QUAL OPCAO " LINE 20 COLUMN 01.
ACCEPT WRK-OPCAO LINE 20 COLUMN 15.
Solicitamos que o programa exibisse uma sequência de texto de 1 a 9. Nosso sistema terá todas as funções listadas, e cada uma será criada conforme necessário.
O item 9 será para encerrar, então o menu ficará sempre aguardando a escolha de uma opção. Por isso, colocamos a WORKING OPCAO
na linha 20, e a coluna será 15, mantendo a mesma linha da escolha da opção, mas deslocando a coluna.
Após limpar a tela, o menu será exibido. Após isso, precisamos tomar uma ação, dependendo da opção escolhida.
Abaixo das opções, utilizaremos o EVALUATE
para a variável WRK-OPCAO
. Para cada opção, haverá uma ação correspondente. Por exemplo, ao escolher 1, o módulo de cadastro será chamado.
Poderíamos incluir todo o código do cadastro aqui, mas isso tornaria o programa complexo e difícil de manter. Portanto, o cadastro será um arquivo separado, chamado de módulo, e utilizaremos o comando CALL
para chamá-lo.
EVALUATE WRK-OPCAO
WHEN 1
CALL "CADASTRO"
Cada item no menu será um módulo e terá um CALL
, exceto o item 9, que é para encerramento.
EVALUATE WRK-OPCAO
WHEN 1
CALL "CADASTRO"
WHEN 2
CALL "CONSULTA"
WHEN 3
CALL "ALTERA"
WHEN 4
CALL "EXCLUI"
WHEN 5
CALL "STATUS"
WHEN 6
CALL "RELAT"
WHEN 7
CALL "RELATI"
WHEN 8
CALL "MANUT"
END-EVALUATE.
Por fim, criaremos a WORKING-STORAGE SECTION
dentro da DATA DIVISION
, acima da seção SCREEN
. Em seu interior, definiremos a variável WRK-OPCAO
, declarando-a como PIC 9(1)
, ou X(1)
se quisermos permitir letras no menu. No nosso caso, usaremos apenas números.
DATA DIVISION.
WORKING-STORAGE SECTION.
01 WRK-OPCAO PIC 9(01).
No momento, deixaremos o menu como está, apenas com o EVALUATE
funcionando. Se quiser, você pode implementar um PERFORM
para que o menu continue funcionando até que a opção 9 seja digitada. Por exemplo, um PERFORM UNTIL
a opção seja diferente de 9. Isso manteria o menu ativo.
Podemos melhorar a apresentação do menu para torná-lo mais amigável. Deixamos espaço entre as linhas 1 e 6 propositalmente para sugestões.
Podemos usar o site TextFancy para criar um cabeçalho mais atraente para ser exibido entre essas linhas. No caso, pesquisamos por "CRM" na barra de busca superior e copiamos o seguinte desenho:
/ __)( _ \( \/ )
( (__ ) / ) (
\___)(_)\_)(_/\/\_)
Colaremos o texto gerado pelo TextFancy abaixo do DISPLAY
da tela, e o exibiremos com um DISPLAY
para cada linha. É importante ter cuidado com caracteres que o COBOL não consegue processar, mas traços e parênteses são aceitos.
DISPLAY " ___ ____ __ __ " LINE 01 COLUMN 01.
DISPLAY " / __)( _ \( \/ ) " LINE 02 COLUMN 01.
DISPLAY "( (__ ) / ) ( " LINE 03 COLUMN 01.
DISPLAY " \___)(_)\_)(_/\/\_) " LINE 04 COLUMN 01.
Assim, temos um cabeçalho melhor, com uma linha separando o menu, que começa na linha 6.
Para testar o menu, vamos compilar o programa COBOL, mas antes, precisamos criar a pasta "BIN" dentro da raiz do projeto, pois os executáveis serão armazenados lá, separando-os dos arquivos fonte.
Após criar a pasta, abriremos o terminal com "Ctrl + J" e compilaremos o programa usando cobc
com a cláusula -o
, direcionando o executável a partir do COB para a pasta "BIN".
cobc -x -o bin\CRM.EXE CRM.cob
Após compilar, o executável CRM.exe
é criado na pasta "BIN".
CRM.exe
Para testar, podemos abrir o prompt de comando, que é melhor para essa situação. Vamos adiantar uma solução: no prompt, acessaremos a pasta "Curso_Arquivos".
cd Curso_Arquivos
Dentro dela, entraremos na pasta "bin", usando o comando cd bin
.
cd bin
Lá dentro, temos o programa "CRM". Vamos executá-lo com o comando CRM
.
CRM
Vamos usar o prompt. Compilamos no terminal, mas a execução acontecerá no prompt.
A tela do programa será exibida e esperará uma entrada. Colocaremos, por exemplo, o número 9, e o programa finalizará.
Se rodarmos de novo com CRM
e digitarmos o número 6, o sistema tenta acessar o módulo "RELATÓRIO", mas ele ainda não foi criado. Portanto, a mensagem de que o módulo não foi encontrado é exibida.
error: module "RELAT" not found
Isso será abordado nas próximas aulas.
Por enquanto, temos o menu funcionando e as opções sendo chamadas corretamente. Nas próximas etapas, criaremos cada módulo individualmente.
O curso Cobol: desenvolvendo um CRM com arquivos indexados possui 182 minutos de vídeos, em um total de 47 atividades. Gostou? Conheça nossos outros cursos de em Programação, ou leia nossos artigos de Programação.
Matricule-se e comece a estudar com a gente hoje! Conheça outros tópicos abordados durante o curso:
Impulsione a sua carreira com os melhores cursos e faça parte da maior comunidade tech.
1 ano de Alura
Assine o PLUS e garanta:
Formações com mais de 1500 cursos atualizados e novos lançamentos semanais, em Programação, Inteligência Artificial, Front-end, UX & Design, Data Science, Mobile, DevOps e Inovação & Gestão.
A cada curso ou formação concluído, um novo certificado para turbinar seu currículo e LinkedIn.
No Discord, você tem acesso a eventos exclusivos, grupos de estudos e mentorias com especialistas de diferentes áreas.
Faça parte da maior comunidade Dev do país e crie conexões com mais de 120 mil pessoas no Discord.
Acesso ilimitado ao catálogo de Imersões da Alura para praticar conhecimentos em diferentes áreas.
Explore um universo de possibilidades na palma da sua mão. Baixe as aulas para assistir offline, onde e quando quiser.
Acelere o seu aprendizado com a IA da Alura e prepare-se para o mercado internacional.
1 ano de Alura
Todos os benefícios do PLUS e mais vantagens exclusivas:
Luri é nossa inteligência artificial que tira dúvidas, dá exemplos práticos, corrige exercícios e ajuda a mergulhar ainda mais durante as aulas. Você pode conversar com a Luri até 100 mensagens por semana.
Aprenda um novo idioma e expanda seus horizontes profissionais. Cursos de Inglês, Espanhol e Inglês para Devs, 100% focado em tecnologia.
Transforme a sua jornada com benefícios exclusivos e evolua ainda mais na sua carreira.
1 ano de Alura
Todos os benefícios do PRO e mais vantagens exclusivas:
Mensagens ilimitadas para estudar com a Luri, a IA da Alura, disponível 24hs para tirar suas dúvidas, dar exemplos práticos, corrigir exercícios e impulsionar seus estudos.
Envie imagens para a Luri e ela te ajuda a solucionar problemas, identificar erros, esclarecer gráficos, analisar design e muito mais.
Escolha os ebooks da Casa do Código, a editora da Alura, que apoiarão a sua jornada de aprendizado para sempre.