5 SISTEMA DE CADASTRO DE CLIENTES USANDO PASCAL
Criar um cadastro de Cliente em que este cadastro deve realizar a inclusão, alteração e deve conter também uma forma que eu possa visualizar um cliente já cadastrado, uma maneira de restaurar que foi excluído por acidente, e nesse cadastro não deve ter duplicação de cliente, isto é, se um cliente já foi cadastrado ele não deve ser novamente cadastrado. Usando arquivo binario.
Os arquivos a serem excluídos devem apenas conter um campo que indique se estes foram ou não excluídos, se estão ativos ou inativos. A marcação deve ser feita com o simbolo “ * “ .
No caso de ter cliente marcado para a exclusão, este deve ser sobreposto por um cliente que necessita ser incluído, sendo no caso do arquivo, não conter nenhum campo marcado, o novo cliente deve ser cadastrado no final do arquivo.
Resolução:
Como característica funcional não deve haver dois clientes com o mesmo código, ou nome. A determinação do código do cliente é realizado pelo programa que irá capturar o código do ultimo cliente cadastrado e soma um a este valor valor um, de forma que este contenha o valor do código anterior mais um, o processo de exclusão será feito atraves de uma marca que será colocada em um dos campos do registro, o campo terá o nome de marca, e quando for encontrado nele caracter `*´ é autorizado ao programa o seu preenchido com um novo cliente. O programa cliente é um programa baseado em procedures de forma que o programa mestre é pequeno e funcional. As operações basica do programa cliente é realizada pelos procedures e funções devidamente explicados de forma resumida logo abaixo.
FUNÇÃO
testa_arquivo(escolha:integer):boolean;
Realiza testes no arquivo
PROCEDURES
CamposCli
Realiza o processo de captura dos dados do clienet
MostraCli
Realiza a mostragem dos dado de um determinado registro
SimNao
Realiza a verificação da digitação da letra S ou N na escolha
ExisteCliente
Realiza a verificação da existência de um cliente especifico
IncluirCli
Realiza as operações necessárias para a inclusão de um novo registro
AlterarCli
Realiza as operações necessárias para a alteração de registro
ExcluiCli
Realiza as operações necessárias para a exclusão de registro
RestauraCli
Realiza as operações necessárias para restauração de um registro marcado
FinalCli
Realiza a finalização do programa
IniciaCli
Realiza a abertura dos arquivos
MenuCli
Realiza a escolha do item
5.1 O PROGRAMA
Programa usa a expressão CRT para indicar que ele irá usar funçõe pré-determinadas.
Program Joshua;
Uses
Crt;
O programa usa ArqCliente, como constante no programa . O valor constante é aquele que nunca é alterado na execução do programa , ao contrário das variáveis. Esta constante será usada para determinar o nome do arquivo externo que será usado como nossa base de dados principais o arquivo que será referenciado a um arquivo do tipo binário, este tipo de arquivo é muito importante pois usando esta idéia podemos usar em qualquer linguagem.
Const
ArqCliente='Cliente.dat';
O tipo cliente é declarado neste local, e logo abaixo existe um descrição dizendo que será usado um tipo cadeia de caracteres com o nome opção.
type
Cliente= record
CodCli:integer;
NomeCli:String[10];
EndCli:String[10];
CepCli:string[12];
FoneCli:String[12];
CidCli:String[10];
EstCli:string[2];
Civil:string[10];
NoEspCli:string[10];
Marca:String[2];
end;
Opcao = Set of Char;
Neste módulo chamamos assim será declarada as diversas variáveis usada no decorrer do programa. As características funcionais bem como o papel que ela desempenha no decorre do programa será especificado em cada procedure.
var
CadCli: File of Cliente;
Cli1:Cliente;
Cli2:Cliente;
FimCli:Boolean;
ExisteCli:Boolean;
Oque:Char;
Oque1:Char;
Deseja:Opcao;
Aux:String;
T:Integer;
ind:byte;
Marcado:byte;
sai:integer;
5.2 FUNCTION testa_arquivo(escolha:integer):boolean;
Objetivo
O objetivo desta função é verificar a existencia do arquivo para posteriormente sabermos se é melhor abrir ou criar.
Solução
Esta função realiza operações de baixo nível, verificando a existência do arquivo, e verificando se este contem erros característico que podem prejudicar a utilização do mesmo
Programa
function testa_arquivo(escolha:integer):boolean;
begin
if (escolha=1) then
begin
{$I-}
assign(CadCli,ArqCliente);
filemode := 2;
Reset(CadCli);
close(CadCli);
{$I+}
testa_arquivo := (IOResult = 0);
end;
end;
5.3 PROCEDURE CamposCli;
Objetivo
CamposCli deve ter como objetivo informar ao usuario o que está sendo solicitado, usando uma frase para isso. E logo depois capturar o dado pedido e posto no registro rascunha para ser usado conforme o programa.
Solução
A partícula usada para mostragem é o write, pois através dele enviamos para a tela uma mensagem. Como exemplo podemos escrever usando esta forma logo abaixo, que esta contida no procedure CamposCli.
Write(´Nome´)
A próxima partícula é o read que será responsável pela leitura do teclado e o seu armazenamento temporário conforme especificado. Podendo ser escrito em nosso exemplo desta forma:
ReadLn(Cli.NomeCLI)
Que significa que será lido o que foi digitado e o conteúdo será armazenado temporariamente no Registro Cli, sendo armazenado na parte NomeCli que é considerado uma variável comum conforme explicações anteriores.
Programa
procedure CamposCli;
begin
WRITE('Nome: ');
ReadLn(Cli1.NomeCli);
WRITE('End:');
ReadLn(Cli1.EndCli);
WRITE('Cep:');
ReadLn(Cli1.CepCli);
WRITE('Telefone:');
ReadLn(Cli1.FoneCli);
WRITE('Cidade:');
ReadLn(Cli1.CidCli);
WRITE('Estado:');
ReadLn(Cli1.EstCli);
WRITE('Estado Civil:');
ReadLn(Cli1.Civil);
end;
5.4 PROCEDURE MostraCli;
Objetivo
o objetivo de MostraCli é apresentar na tela o conteudo de um registro de um arquivo, conforme a vontado do usuario.
Solução
A forma encontrada para realizar esta tarefa foi colocar o conteudo de um registro que fora lido anteriormente em um registro rascunho que em nosso caso é o Cli1, declarado acima como do tipo cliente, Cli1:Cliente, o processo de mostragem é feito usando o write da sequinte forma.
WRITE('Nome: '); Apresenta na tela Nome:
WRITELn(Cli1.NomeCli); Apresenta na tela o conteudo de Cli1.NomeCli
Programa
procedure MostraCli;
begin
WRITE('Nome: ');
WRITELn(Cli1.NomeCli);
WRITE('End:');
WRITEln(Cli1.EndCli);
WRITE('Cep:');
WRITEln(Cli1.CepCli);
WRITE('Telefone:');
WRITEln(Cli1.FoneCli);
WRITE('Cidade:');
WRITEln(Cli1.CidCli);
WRITE('Estado:');
WRITEln(Cli1.EstCli);
WRITE('Estado Civil:');
WRITEln(Cli1.Civil);
end;
5.5 PROCEDURE SimNao;
Objetivo
O objetivo que se deseja alcançar com este procedure, é simplificar a escolha de algo, o tradicional Sim ou Não em uma pergunta.
Solução
A solução encontrada foi criar um procedure que iria testar uma variável a ser digitada pelo usuário, neste nosso a variável que vai dizer se foi pressionado S ou N será a variável T de teste, o procedure é iniciado e a variável T é atribuida o valor 1, apos este fato entramos em uma condição de repetição onde só será permitida a saida desta se o caracter digitado for S ou N a captura bem como a condição de ser S ou N é especificado na linha
Oque1:=Upcase(ReadKey)
Que se lê Oque1 é atribuido o valor capturado pela leitura do teclado
Until Oque1 in ['S','N'];
Enquanto o valor da variável Oque1 for diferente da cadeia de caracter S ou N repita o processo.
IF Oque1='N'then
Se o valor contido na variável Oque1 for igual a N então atribua o valor de T como sendo 2, senão , isto é no caso de ter sido pressionado S o valor atribuido será 1.
Obs: A variável T é uma variável Global portanto a alteração dela em qualquer parte do programa, altera o seu valor em todo programa. Por esse fator é que podemos usá-la para retornar um valor de forma global.
Programa
Procedure SimNao;
begin
T:=1;
repeat
Oque1:=Upcase(ReadKey)
Until Oque1 in ['S','N'];
Write(Oque1);
IF Oque1='N'then
begin
T:=2;
end
else
begin
T:=1;
end;
end;
5.6 PROCEDURE ExisteCliente;
Objetivo
O objetivo que se deseja alcançar com a utilização deste, é encontrar a existência de um cliente igual ao nome especificado por nós contido em uma variável.
Este procedure irá procurar por todo arquivo um registro que contenha o nome especificado, se encontrar dira que existe, senão informará que o cliente não existe no arquivo.
Solução
Como solução a este problema devemos nos lembra da utilização de alguns comando do pascal essencial para o bom entendimento do processo como um todo. Os comandos são.
seek(CadCLI,0)
Este comando que é encontrado em nosso procedure diz que posicione no arquivo CadCli na primeira posição.
Eof(CadCLI)
Está função testa se a posição atual está no final do arquivo ou em ingles End Of File
| Nome do | Arquivo: | CadCli |
| | | |
| | Indice | Registros |
| | | |
Seek(CadCli,0) | 1º posição | 0 | Dados |
| | 1 | Dados |
| | 2 | Dados |
EOF(CadCli) | | 3 | Dados |
FileSize(CadCli) | | 4 | Em branco |
Este procedure usa estes comandos mostrados acima para executar a sua função de busca de um dado do registro igual da variável.
Analizando o código de programa deste procedure encontramos logo no inicio:
ExisteCli:=False
A intenção desta variável ser falsa é pelo fato de se não for encontrado algo na procura ela irá manter esse valor, atribuído a ela, se no decorrer da busca for encontrado algo, esta variável ira ser re atribuida com o valor verdadeiro.
seek(CadCLI,0);
Esta linha simplesmente irá posicionar o ponteiro no primeiro registro do arquivo, que se encontra o indice 0 por assim dizer.
Esta operação é realizada afim de iniciar abusca apartir do primeiro item.
While not Eof(CadCLI) do
Esta linha é a principal responsável pela busca, Enquanto não for final de arquivo do arquivo CadCli faça.
Toda vez que se fizer uma leitura e esta leitura não representar o final de arquivo esta condição se manterá em um loop até que o último registro do arquivo seja encontrado.
Read(CadCli,Cli2);
Neste instante é feita a leitura do registro conforme a sua posição e o conteúdo que está ativo, isto é apontado é colocado em uma variável rascunho para posteriores verificação.
IF Cli1.NomeCLI = Cli2.NomeCli then
Nesta linha é realizada a verificação se o conteúdo da variável rascunho Cli1.nomeCli especificado antes da chamada deste procedure for igual a variável rascunho que contem os dados atuais do registro apontado Cli2.NomeCli.
Se em alguma comparação for encontrado valores iquais na comparação é atribuido a ExisteCli:=True , desta forma, indicando que existe o cliente.
Programa
Procedure ExisteCliente;
begin
ExisteCli:=False;
seek(CadCLI,0);
While not Eof(CadCLI) do
begin
Read(CadCli,Cli2);
IF Cli1.NomeCLI = Cli2.NomeCli then
Begin
ExisteCli:=True;
End;
end;
end;
5.7 PROCEDURE IncluirCli
Objetivo
O objetivo a ser alcançado por este procedure é incluir um novo registro no arquivo, sendo que caso haja algum registro marcado para exclusão este novo registro deve ser colocado na posição do registro marcado.
Solução
A solução para este problema pode ser resumido nas partes marcados do programa que de forma simplificada e grosseira mostramos logo abaixo.
repeat
While not Eof(CadCLI) and (sai<>1) do
if Cli1.Marca= '*'then
if marcado >=1 then
Seek(CadCli,Marcado);
Write(CadCli,Cli1);
else
Seek(CadCli,FileSize(CadCli));
Write(CadCli,Cli1);
Until T<>1;
Em primeiro lugar devemos entender oque desejamos fazer.
Em primeiro devemos saber se existe registros marcados.
Depois, se existir devemos colocar o novo registro em sua posição, senão colocar no final do registro.
Analisando as partes:
While not Eof(CadCLI) and (sai<>1) do
if Cli1.Marca= '*'then
Podemos ler da sequinte forma, enquanto não for final de arquivo e a variável que sair for diferente de 1 faça.
Se No registro rascunha em uma devida posição encontrar Cli1.Marca= ' *', significa que existe registros marcados, no corpo do programa tera recursos que capturarão a posição do marcado.
if marcado >=1 then
Seek(CadCli,Marcado);
Write(CadCli,Cli1);
else
Seek(CadCli,FileSize(CadCli));
Write(CadCli,Cli1);
Se foi encontrado algum registro marcado um contador será acrescido de forma a indicar que existe arquivo marcado quando a variável marcado estiver contendo valores maiores ou igual a 1.
Se existir arquivo marcado a gravação do registro será posicionado na posição do marcado Seek(CadCli,Marcado).
Senão existir nenhum marcado a gravação do registro será feito na última posição de registro do arquivo é será posicionado para Seek(CadCli,FileSize(CadCli)),;
Em ambas as operações, após ser posicionado o registro rascunho será gravado no registro CadCli Write(CadCli,Cli1).
repeat
.................
................
Until T<>1;
A condição de repetição testa se deseja alterar um novo cliente e enquanto T for diferente de 1 ele continua, a especificação de T é uma variável global que é alterada pelo procedure SimNão.
O procedure em si se baseia nesta estrutura sendo as implementações para o bom funcionamento mostrado logo abaixo.
Após ser detectado se existe marcados ou não antes de incluir qualquer cliente, executa-se uma rotina para verificar se existe o cliente ou não. Caso exista o cliente, a operação de inclusão é abortada.
ind:=1
Indica que ind é um índice e inicializo ele como sendo 1, indicando ser o primeiro.
seek(CadCLI,0)
Faço com o programa, aponte para o primeiro registro do arquivo, desta forma, tornando valido o valor determinado em Ind:=1;
Marcado:=0
Determino a variável marcado que o valor é zero, essa variável irá realizar atraves de comparação em um loop até final de arquivo em busca de registros marcados para exclusão.
sai:=2
Atribui a variável Sai o valor 2, esta variável é um teste que será feito em cada passagem do enquanto, sendo que para forçar uma saída do programa, eu coloco o valor 1 em sai, pois o programa so fica em loop Enquanto Sai<>1.
Programa
Procedure IncluirCli;
begin
writeln;
Writeln ('Incluindo');
repeat
ind:=1;
seek(CadCLI,0);
Marcado:=0;
sai:=2;
While not Eof(CadCLI) and (sai<>1) do
begin
Read(CadCli,Cli1);
if Cli1.Marca= '*'then
begin
Marcado:=ind;
sai:=1;
end;
ind:=ind+1
end;
writeln;
if marcado >=1 then
begin
CamposCli;
Cli1.CodCli:=Marcado;
Cli1.Marca:=' ';
ExisteCliente;
If ExisteCli=False then
begin
Seek(CadCli,Marcado);
Write(CadCli,Cli1);
end
else
Begin
WriteLn('Cliente j Cadastrado, Anulada a operacao');
end;
end
else
begin
CamposCli;
Cli1.CodCli:=FileSize(CadCli);
Cli1.Marca:=' ';
ExisteCliente;
if ExisteCli=False then
begin
Seek(CadCli,FileSize(CadCli));
Write(CadCli,Cli1);
end
else
Begin
WriteLn('Cliente j Cadastrado, Anulada a operacao');
end;
end;
Write ('Deseja Incluir mais Cliente (S/N)');
SimNao;
Until T<>1;
end;
5.8 PROCEDURE AlteraCli;
Objetivo
O objetivo deste é a alteração de um dado regitro mediante pedido de busca. O cliente existindo e sendo encontrando deve ser mostrado na tela o conteúdo do registro referente a ele e logo após é pedido que se faça as devidas alterações a critério do usuario.
Solução
A solução para este problema pode ser resumido nas partes marcados do programa que de forma simplificada é grosseira, mostramos logo abaixo.
Repeat
ReadLn(Aux);
While not Eof(CadCLI) and (t = 1) do
If (Aux=Cli1.NomeCLI) and (Cli1.Marca <> '*') then
seek(CadCLI,IND);
Write(CadCli,Cli1);
Until T<>1;
A idéia desta estrutura é capturar um valor que o usuario deseja, atribuindo este a uma variável auxiliar
Para encontrar o registro certo e não se perder, usamos um ponteiro chamado Ind, e posicionamos este no primeiro registro do arquivo. Realiza-se uma busca até o final do arquivo e se for encontrado este cliente coloca o valor de sua posição no apontador. de forma que a alteração e´ feita da sequinte forma: aponte o arquivo CadCli para a posição que IND contem, seek(CadCLI,IND) logo após, gravamos a variável rascunho que é semehante a uma ficha cadastral de rascunho no fichário, em nosso programa em nosso arquivo Write(CadCli,Cli1) como no fichário normal. Esta ficha tem que estar no lugar de onde foi tirada. Em nosso programa forçamos para que isso aconteça usando IND.
Programa
Procedure AlteraCli;
begin
Repeat
WriteLn('Digite o nome do Cliente');
ClrEol;
ReadLn(Aux);
ind:=0;
seek(CadCLI,0);
t:=1;
While not Eof(CadCLI) and (t = 1) do
begin
Read(CadCli,Cli1);
If (Aux=Cli1.NomeCLI) and (Cli1.Marca <> '*') then
BEGIN
WriteLn('Cliente Encontrado');
MostraCli;
WriteLN;
CamposCli;
ExisteCliente;
if ExisteCli=False then
begin
WriteLN('Finalizou');
seek(CadCLI,IND);
Write(CadCli,Cli1);
t:=2;
end
else
Begin
WriteLn('Cliente j Cadastrado, Anulada a operacao');
end;
END;
ind:=ind+1;
end;
Write('Deseja Alterar mais arquivos (S/N)');
SimNão;
Until T<>1;
end;
5.9 PROCEDURE ExcluiCli;
Objetivo
Marcar registros para exclusão.
Solução
O procedure ExcluirCli é análogo ao Alteracliente, mais iremos alterar apenas um campo que é de uso interno e o usuário não terá acesso. Este procedure encontrando o cliente a ser excluido, grava o conteúdo anterior, só que desta vez coloca o caracter ´*´ no campo Marca do registro. Como se pode ver os comandos logo abaixo:
Cli1.Marca:= '*';
seek(CadCLI,IND);
Write(CadCli,Cli1);
Programa
Procedure ExcluiCli;
begin
Repeat
writeln;
WriteLn('Digite o nome do Cliente a ser excluido');
ClrEol;
ReadLn(Aux);
ind:=1;
seek(CadCLI,0);
t:=1;
While not Eof(CadCLI) and (t = 1) do
begin
Read(CadCli,Cli1);
If (Aux=Cli1.NomeCLI) and (Cli1.Marca <> '*') then
BEGIN
WriteLn('Cliente Encontrado');
MostraCli;
Cli1.Marca:= '*';
WriteLN('Finalizada a exclusao');
seek(CadCLI,IND);
Write(CadCli,Cli1);
t:=2;
END;
Ind:=ind+1;
end;
Write('Deseja Excluir mais arquivos (S/N)');
SimNao;
Until T<>1;
end;
5.10 Procedure MostrarCli;
Objetivo
O objetivo deste é mostrar os dados de um cliente existente na tela.
Solução
ReadLn(Aux);
ind:=1;
seek(CadCLI,0);
t:=1;
While not Eof(CadCLI) and (t = 1) do
If Aux=Cli1.NomeCLI then
MostraCli;
Este procedure é util na consulta de algum cliente em que apenas queremos dar uma olhada em seus dados. Quando pedimos o nome a ser procurado, é realizada a busca, e ao encontrar o cliente é mostrado o seu conteúdo na tela usando o procedure MostraCli. O método de busca consiste em pedir a variável auxiliar a ser procurada, definir o índice, colocar o ponteiro no registro número 0 do arquivo, atribuir a variável de teste um valor que permite este entrar no While, e dentro do while, é realizada a busca até que não seja final de arquivo, e a variável teste seja igual a 1.
Programa
Procedure MostrarCli;
begin
Repeat
writeln;
WriteLn('Digite o nome do Cliente a ser Consultado');
ClrEol;
ReadLn(Aux);
ind:=1;
seek(CadCLI,0);
t:=1;
While not Eof(CadCLI) and (t = 1) do
begin
Read(CadCli,Cli1);
If Aux=Cli1.NomeCLI then
BEGIN
WriteLn('Cliente Encontrado');
MostraCli;
Write('Marca:');
WriteLN(Cli1.Marca);
WriteLN;
WriteLN('Finalizada a Mostragem');
t:=2;
END;
Ind:=ind+1;
end;
Write('Deseja Consultar mais registros (S/N)');
SimNao;
Until T<>1;
end;
5.11 PROCEDURE FinalCli;
Objetivo
O objetivo deste procedure é finalizar o programa.
Solução
A solução deste compreende em fornecer a variável necessária para a saida do loop do menu, bem como realizar o fechamento do arquivo aberto no inicio do programa para ser utilizado.
Programa
Procedure FinalCli;
begin
FimCli:=True;
ClrScr;
Close(CadCLI);
end;
5.12 PROCEDURE IniciaCli;
Objetivo.
O objetivo deste procedure é realizar a abertura dos arquivos necessários no programa, e iniciar a variável que será responsavel em manter o menu em loop até que se deseje sair dele.
Solução.
ok:=testa_arquivo(1);
If ok then
Assign (CadCli,ArqCliente);
Reset(CadCLI);
else
Assign (CadCli,ArqCliente);
Rewrite(CadCLI);
FimCli:=False;
Logo no inicio é atribuido o valor da função Testa_arquivo. Com o valor capturado é testado, se o arquivo existe isto é, o valor for verdadeiro, o arquivo é aberto com reset que fará com que o arquivo começe a incluir no final do arquivo, se for falso o arquivo é aberto com rewrite, isto é o arquivo será criado, e lógicamente os registros começarão a ser colocados apartir do início do registro.
Logo abaixo atribuimos o valor falso a fim cliente, esta variável será testada pelo Until do Repeat.e enquanto ele for falso ele continuará em loop, isto é não sairá do programa.
Programa
Procedure IniciaCli;
begin
ok:=testa_arquivo(1);
If ok then
begin
Assign (CadCli,ArqCliente);
Reset(CadCLI);
end
else
Begin
Assign (CadCli,ArqCliente);
Rewrite(CadCLI);
end;
FimCli:=False;
end;
5.13 PROCEDURE MenuCli;
Objetivo
O objetivo desta é criar um menu de escolha, onde o usuario definira qual o caminho que ele irá tomar.
Solução
Deseja:=['I','A','E','F','M'];
Repeat
Oque:=Upcase(ReadKey);
If Not (Oque in Deseja) then
Write (#7);
Until Oque in Deseja;
if Oque ='I' then
IncluirCli;
Este procedure deve nos auxiliar na esolha que devemos fazer, quando realizamos a escolha e ira canalizar a nossa decisão para as rotinas necessárias para isso.
Logo no inicio encontramos, Deseja:=['I','A','E','F','M']; que é uma cadeia de caracter representado pelas letras entre aspas, essa cadeia de caracter, que podemos dizer ser semelhante a um vetor, sua utilidade será explicada logo a frente. Logo após ser definido esta cadeia de caracter, é solicitado ao usuário digitar a escolha sendo que será aceito apenas as letras contidas nesta cadeia de caracter. Se for digitado um caracter que não consta nesta cadeia, este será ignorado é a indicação de erro será com a emissão de um som.
A escolha se repete ate que o usuário faça a escolha conforme os valores contidos na cadeia de caracter. Quando se sai da escolha, a variável que estará contendo a letra escolhida e o rumo que esta deve tomar é feito mediante condição if Oque ='I' then onde neste caso ela irá chamar o procedure IncluirCli;.
Procedure MenuCli;
begin
Deseja:=['I','A','E','F','M'];
ClrScr;
WriteLN('Menu de OPcoes');
WriteLN('(I) - Incluir Cliente');
WriteLN('(A) - Altera Cliente');
WriteLN('(E) - Exclui Cliente');
WriteLN('(M) - Mostra Cliente');
WriteLN('(F) - Fim');
WriteLN('Entre com a sua opcao');
Repeat
Oque:=Upcase(ReadKey);
If Not (Oque in Deseja) then
Write (#7);
Until Oque in Deseja;
if Oque ='I' then
IncluirCli;
if Oque='A'then
AlteraCli;
if Oque='E'then
ExcluiCLI;
if Oque='M'then
MostrarCli;
if Oque='F'then
FimCli:=true;
end;
Objetivo
Este bloco logo abaixo é o programa central em si, pois ele é o primeiro a ser executado, sendo as chamadas dos outros procedures subordinada a ela, desta forma, torna-se o corpo principal do programa.
Solução
A solução encontrada neste é chamar os procedures responsável pela abertura dos arquivos e manter o menu na tela sempre que necessário, sendo da escolha do usuário a sua saída, e quando se realizar a saída é necessário fechar os arquivos. Que foram abertos no início.
Programa
Begin
iniciaCli;
Repeat;
MenuCli;
Until FimCli;
FinalCli;
end.