5. SISTEMA DE CADASTRO DE CLIENTES USANDO PASCAL
Autor: Jeronimo Bezerra | Publicado: 2011-09-30T11:32:00-07:00

5&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; SISTEMA DE CADASTRO DE CLIENTES&nbsp;USANDO PASCAL&nbsp;
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.&nbsp; 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&nbsp; 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&nbsp; 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&nbsp; 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&nbsp; devidamente explicados de forma resumida logo abaixo.
FUNÇÃOtesta_arquivo(escolha:integer):boolean;Realiza testes no arquivo
PROCEDURESCamposCliRealiza o processo de captura dos dados do clienetMostraCliRealiza a mostragem&nbsp; dos dado de um determinado registro SimNaoRealiza a verificação da digitação da letra S ou N na escolhaExisteClienteRealiza&nbsp; a verificação da existência de um cliente especificoIncluirCliRealiza as operações necessárias para a inclusão de um novo registroAlterarCliRealiza as operações necessárias para a alteração de registroExcluiCliRealiza as operações necessárias para a exclusão de&nbsp; registroRestauraCliRealiza as operações necessárias para restauração de um registro marcado FinalCliRealiza a&nbsp; finalização do programaIniciaCliRealiza a abertura dos arquivosMenuCliRealiza a escolha&nbsp; do&nbsp; item&nbsp;&nbsp;5.1&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; O PROGRAMA
Programa usa a expressão CRT para&nbsp; indicar que ele irá usar funçõe&nbsp; pré-determinadas.Program Joshua;Uses&nbsp;&nbsp; Crt;O programa usa ArqCliente, como constante no programa . O&nbsp; valor constante é aquele que nunca é alterado na execução do programa , ao contrário das variáveis. Esta constante será&nbsp; 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&nbsp; binário, este tipo de arquivo é muito importante pois usando esta idéia podemos usar em qualquer linguagem.Const&nbsp;&nbsp; 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&nbsp;&nbsp; Cliente= record&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; CodCli:integer;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; NomeCli:String[10];&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; EndCli:String[10];&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; CepCli:string[12];&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; FoneCli:String[12];&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; CidCli:String[10];&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; EstCli:string[2];&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Civil:string[10];&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; NoEspCli:string[10];&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Marca:String[2];&nbsp;&nbsp; end;&nbsp;&nbsp; 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&nbsp;&nbsp; CadCli: File of Cliente;&nbsp;&nbsp; Cli1:Cliente;&nbsp;&nbsp; Cli2:Cliente;&nbsp;&nbsp; FimCli:Boolean;&nbsp;&nbsp; ExisteCli:Boolean;
&nbsp;&nbsp; Oque:Char;&nbsp;&nbsp; Oque1:Char;&nbsp;&nbsp; Deseja:Opcao;&nbsp;&nbsp; Aux:String;&nbsp;&nbsp; T:Integer;&nbsp;&nbsp; ind:byte;&nbsp;&nbsp; Marcado:byte;&nbsp;&nbsp; sai:integer;

5.2&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 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&nbsp;&nbsp; if (escolha=1) then&nbsp;&nbsp;&nbsp;&nbsp; begin&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {$I-}&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; assign(CadCli,ArqCliente);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; filemode := 2;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Reset(CadCli);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; close(CadCli);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {$I+}&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; testa_arquivo := (IOResult = 0);&nbsp;&nbsp; end;end;

5.3&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; PROCEDURE CamposCli;
Objetivo&nbsp;Para diminuir o tamanho do programa usamos procedures que serão referenciados toda vez que este for necessárioCamposCli deve ter como objetivo informar ao usuario o que está sendo solicitado, usando uma frase para isso. E logo depois capturar&nbsp; 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&nbsp; 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.
&nbsp;&nbsp;Programa
procedure CamposCli;&nbsp;&nbsp; begin&nbsp;&nbsp;&nbsp;&nbsp; WRITE('Nome: ');&nbsp;&nbsp;&nbsp;&nbsp; ReadLn(Cli1.NomeCli);&nbsp;&nbsp;&nbsp;&nbsp; WRITE('End:');&nbsp;&nbsp;&nbsp;&nbsp; ReadLn(Cli1.EndCli);&nbsp;&nbsp;&nbsp;&nbsp; WRITE('Cep:');&nbsp;&nbsp;&nbsp;&nbsp; ReadLn(Cli1.CepCli);&nbsp;&nbsp;&nbsp;&nbsp; WRITE('Telefone:');&nbsp;&nbsp;&nbsp;&nbsp; ReadLn(Cli1.FoneCli);&nbsp;&nbsp;&nbsp;&nbsp; WRITE('Cidade:');&nbsp;&nbsp;&nbsp;&nbsp; ReadLn(Cli1.CidCli);&nbsp;&nbsp;&nbsp;&nbsp; WRITE('Estado:');&nbsp;&nbsp;&nbsp;&nbsp; ReadLn(Cli1.EstCli);&nbsp;&nbsp;&nbsp;&nbsp; WRITE('Estado Civil:');&nbsp;&nbsp;&nbsp;&nbsp; ReadLn(Cli1.Civil);&nbsp;&nbsp; end;
&nbsp;&nbsp;5.4&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 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&nbsp; fora lido anteriormente em um registro rascunho que em nosso caso é o Cli1, declarado&nbsp; acima como do tipo cliente, Cli1:Cliente, o processo de mostragem é feito usando o write da sequinte forma.WRITE('Nome: ');&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Apresenta na tela Nome:WRITELn(Cli1.NomeCli);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Apresenta na tela o conteudo de Cli1.NomeCli
Programa
procedure MostraCli;&nbsp;&nbsp; begin&nbsp;&nbsp;&nbsp;&nbsp; WRITE('Nome: ');&nbsp;&nbsp;&nbsp;&nbsp; WRITELn(Cli1.NomeCli);&nbsp;&nbsp;&nbsp;&nbsp; WRITE('End:');&nbsp;&nbsp;&nbsp;&nbsp; WRITEln(Cli1.EndCli);&nbsp;&nbsp;&nbsp;&nbsp; WRITE('Cep:');&nbsp;&nbsp;&nbsp;&nbsp; WRITEln(Cli1.CepCli);&nbsp;&nbsp;&nbsp;&nbsp; WRITE('Telefone:');&nbsp;&nbsp;&nbsp;&nbsp; WRITEln(Cli1.FoneCli);&nbsp;&nbsp;&nbsp;&nbsp; WRITE('Cidade:');&nbsp;&nbsp;&nbsp;&nbsp; WRITEln(Cli1.CidCli);&nbsp;&nbsp;&nbsp;&nbsp; WRITE('Estado:');&nbsp;&nbsp;&nbsp;&nbsp; WRITEln(Cli1.EstCli);&nbsp;&nbsp;&nbsp;&nbsp; WRITE('Estado Civil:');&nbsp;&nbsp;&nbsp;&nbsp; WRITEln(Cli1.Civil);&nbsp;&nbsp; end;

5.5&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; PROCEDURE SimNao;
Objetivo
O objetivo que se deseja alcançar com este procedure, é simplificar a&nbsp; escolha de algo, o tradicional&nbsp; 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 &nbsp;será&nbsp; 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 &nbsp;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'thenSe 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&nbsp; de forma global.
Programa
Procedure SimNao;&nbsp;&nbsp; begin&nbsp;&nbsp;&nbsp;&nbsp; T:=1;&nbsp;&nbsp;&nbsp;&nbsp; repeat&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Oque1:=Upcase(ReadKey)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Until Oque1 in ['S','N'];&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Write(Oque1);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; IF Oque1='N'then&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; begin&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; T:=2;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; end&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; else&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; begin&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; T:=1;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; end;&nbsp;&nbsp; end;

5.6&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; PROCEDURE ExisteCliente;
Objetivo
O objetivo que se deseja alcançar com a utilização deste, é encontrar a existência&nbsp; 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&nbsp; 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)&nbsp; doEsta 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 thenNesta linha é realizada a verificação&nbsp; 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&nbsp; do registro apontado Cli2.NomeCli.Se em alguma comparação for encontrado valores iquais na comparação é atribuido a&nbsp; ExisteCli:=True , desta forma, indicando que existe o cliente.
Programa
Procedure ExisteCliente;&nbsp;&nbsp; begin&nbsp;&nbsp;&nbsp;&nbsp; ExisteCli:=False;&nbsp;&nbsp;&nbsp;&nbsp; seek(CadCLI,0);&nbsp;&nbsp;&nbsp;&nbsp; While not Eof(CadCLI)&nbsp; do&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; begin&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Read(CadCli,Cli2);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; IF Cli1.NomeCLI = Cli2.NomeCli then&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Begin&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ExisteCli:=True;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; End;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; end;&nbsp;&nbsp;&nbsp; end;
5.7&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 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&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; While not Eof(CadCLI) and (sai&lt;&gt;1) do&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if Cli1.Marca= '*'then&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if marcado &gt;=1 then&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Seek(CadCli,Marcado);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Write(CadCli,Cli1);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; else&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Seek(CadCli,FileSize(CadCli));&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Write(CadCli,Cli1);&nbsp;Until T&lt;&gt;1;
Em primeiro lugar devemos entender oque desejamos fazer.
Em primeiro devemos saber&nbsp; 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&lt;&gt;1) do&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if Cli1.Marca= '*'thenPodemos 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 &gt;=1 then&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Seek(CadCli,Marcado);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Write(CadCli,Cli1);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; else&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Seek(CadCli,FileSize(CadCli));&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;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&nbsp; Write(CadCli,Cli1).
repeat.................................Until T&lt;&gt;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&nbsp; é 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:=1Indica 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:=0Determino 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:=2Atribui 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&nbsp; 1 em sai, pois o programa so fica&nbsp; em loop Enquanto Sai&lt;&gt;1.

ProgramaProcedure IncluirCli;&nbsp;&nbsp; begin&nbsp;&nbsp;&nbsp;&nbsp; writeln;&nbsp;&nbsp;&nbsp;&nbsp; Writeln ('Incluindo');
&nbsp;&nbsp;&nbsp;&nbsp; repeat&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ind:=1;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; seek(CadCLI,0);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Marcado:=0;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; sai:=2;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; While not Eof(CadCLI) and (sai&lt;&gt;1) do&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; begin&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Read(CadCli,Cli1);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if Cli1.Marca= '*'then&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; begin&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Marcado:=ind;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; sai:=1;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; end;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ind:=ind+1&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; end;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; writeln;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if marcado &gt;=1 then&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; begin&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; CamposCli;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Cli1.CodCli:=Marcado;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Cli1.Marca:=' ';&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ExisteCliente;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; If ExisteCli=False then&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; begin&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Seek(CadCli,Marcado);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Write(CadCli,Cli1);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; end&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; else&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Begin&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; WriteLn('Cliente j&nbsp; Cadastrado, Anulada a operacao');&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; end;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; end&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; else&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; begin&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; CamposCli;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Cli1.CodCli:=FileSize(CadCli);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Cli1.Marca:=' ';&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ExisteCliente;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if ExisteCli=False then&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; begin&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Seek(CadCli,FileSize(CadCli));&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Write(CadCli,Cli1);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;end&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; else&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Begin&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; WriteLn('Cliente j&nbsp; Cadastrado, Anulada a operacao');&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; end;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; end;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Write ('Deseja Incluir mais Cliente (S/N)');&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; SimNao;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Until T&lt;&gt;1;&nbsp;&nbsp; end;
5.8&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; PROCEDURE AlteraCli;
Objetivo
O objetivo deste é a alteração de um dado regitro mediante pedido de busca.&nbsp; 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&nbsp;&nbsp;&nbsp; ReadLn(Aux);&nbsp;&nbsp;&nbsp; While not Eof(CadCLI) and (t = 1) do&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; If (Aux=Cli1.NomeCLI) and (Cli1.Marca &lt;&gt; '*') then&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; seek(CadCLI,IND);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Write(CadCli,Cli1);Until T&lt;&gt;1;A idéia desta estrutura é capturar um valor que o usuario deseja,&nbsp; atribuindo&nbsp; este a uma variável auxiliarPara 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&nbsp; 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.&nbsp; Em nosso programa forçamos para que isso aconteça usando IND.

ProgramaProcedure AlteraCli;&nbsp;&nbsp; begin&nbsp;&nbsp;&nbsp;&nbsp; Repeat&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; WriteLn('Digite o nome do Cliente');&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ClrEol;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ReadLn(Aux);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ind:=0;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; seek(CadCLI,0);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; t:=1;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; While not Eof(CadCLI) and (t = 1) do&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;begin&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Read(CadCli,Cli1);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; If (Aux=Cli1.NomeCLI) and (Cli1.Marca &lt;&gt; '*') then&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; BEGIN&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; WriteLn('Cliente Encontrado');&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; MostraCli;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; WriteLN;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; CamposCli;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ExisteCliente;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if ExisteCli=False then&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; begin&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; WriteLN('Finalizou');&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; seek(CadCLI,IND);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Write(CadCli,Cli1);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; t:=2;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; end&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; else&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Begin&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; WriteLn('Cliente j&nbsp; Cadastrado, Anulada a operacao');&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; end;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; END;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ind:=ind+1;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; end;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Write('Deseja Alterar mais arquivos (S/N)');&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; SimNão; &nbsp;&nbsp;&nbsp; Until T&lt;&gt;1;&nbsp;&nbsp; end;

5.9&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 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,&nbsp; 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;&nbsp;&nbsp; begin&nbsp;&nbsp;&nbsp;&nbsp; Repeat&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; writeln;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; WriteLn('Digite o nome do Cliente a ser excluido');&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ClrEol;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ReadLn(Aux);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ind:=1;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; seek(CadCLI,0);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; t:=1;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; While not Eof(CadCLI) and (t = 1) do&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; begin&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Read(CadCli,Cli1);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; If (Aux=Cli1.NomeCLI) and (Cli1.Marca &lt;&gt; '*') then&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; BEGIN&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; WriteLn('Cliente Encontrado');&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; MostraCli;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Cli1.Marca:= '*';&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; WriteLN('Finalizada a exclusao');&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; seek(CadCLI,IND);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Write(CadCli,Cli1);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; t:=2;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; END;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Ind:=ind+1;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; end;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Write('Deseja Excluir mais arquivos (S/N)');&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; SimNao;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Until T&lt;&gt;1;&nbsp;&nbsp;&nbsp; end;&nbsp;&nbsp;5.10&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Procedure MostrarCli;
Objetivo
O objetivo deste é mostrar&nbsp; os dados de um cliente existente na tela.
Solução
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ReadLn(Aux);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ind:=1;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; seek(CadCLI,0);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; t:=1;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; While not Eof(CadCLI) and (t = 1) do&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; If Aux=Cli1.NomeCLI&nbsp; then&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; MostraCli;
Este procedure é util na consulta de algum cliente em que apenas queremos dar uma olhada em seus dados. Quando pedimos&nbsp; o nome a ser procurado, é realizada a busca, e ao encontrar o cliente é mostrado o seu conteúdo na&nbsp; 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;&nbsp;&nbsp; begin&nbsp;&nbsp; Repeat&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;writeln;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; WriteLn('Digite o nome do Cliente a ser Consultado');&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ClrEol;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ReadLn(Aux);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ind:=1;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; seek(CadCLI,0);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; t:=1;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; While not Eof(CadCLI) and (t = 1) do&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; begin&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Read(CadCli,Cli1);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; If Aux=Cli1.NomeCLI&nbsp; then&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; BEGIN&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; WriteLn('Cliente Encontrado');&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; MostraCli;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Write('Marca:');&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; WriteLN(Cli1.Marca);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;WriteLN;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; WriteLN('Finalizada a Mostragem');&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; t:=2;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; END;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Ind:=ind+1;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; end;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Write('Deseja Consultar mais registros (S/N)');&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; SimNao;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Until T&lt;&gt;1;&nbsp;&nbsp; end;
&nbsp;&nbsp;5.11&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 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;&nbsp;&nbsp; begin&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; FimCli:=True;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ClrScr;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Close(CadCLI);&nbsp;&nbsp; end;
5.12&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; PROCEDURE IniciaCli;
Objetivo.
O objetivo deste procedure é&nbsp; 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&nbsp;&nbsp;&nbsp;&nbsp; Assign (CadCli,ArqCliente);&nbsp;&nbsp;&nbsp;&nbsp; Reset(CadCLI);else&nbsp;&nbsp;&nbsp;&nbsp; Assign (CadCli,ArqCliente);&nbsp;&nbsp;&nbsp;&nbsp; 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.
ProgramaProcedure IniciaCli;&nbsp;&nbsp; begin&nbsp;&nbsp;&nbsp; ok:=testa_arquivo(1);&nbsp;&nbsp;&nbsp; If ok then&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; begin&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Assign (CadCli,ArqCliente);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Reset(CadCLI);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; end&nbsp;&nbsp;&nbsp; else&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Begin&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Assign (CadCli,ArqCliente);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Rewrite(CadCLI);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; end;FimCli:=False;end;
5.13&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; PROCEDURE MenuCli;
Objetivo
O objetivo desta é criar um menu de escolha, onde o usuario definira qual o caminho que ele irá tomar.
Solução
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Deseja:=['I','A','E','F','M'];&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Repeat&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Oque:=Upcase(ReadKey);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; If Not (Oque in Deseja) then&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Write (#7);&nbsp;&nbsp;&nbsp;&nbsp; Until Oque in Deseja;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if Oque ='I' then&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 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&nbsp; 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 &nbsp;IncluirCli;.
&nbsp;Programa
Procedure MenuCli;&nbsp;&nbsp; begin&nbsp;&nbsp; Deseja:=['I','A','E','F','M'];&nbsp;&nbsp;&nbsp;&nbsp; ClrScr;&nbsp;&nbsp;&nbsp;&nbsp; WriteLN('Menu de OPcoes');&nbsp;&nbsp;&nbsp;&nbsp; WriteLN('(I) - Incluir Cliente');&nbsp;&nbsp;&nbsp;&nbsp; WriteLN('(A) - Altera&nbsp; Cliente');&nbsp;&nbsp;&nbsp;&nbsp; WriteLN('(E) - Exclui&nbsp; Cliente');&nbsp;&nbsp;&nbsp;&nbsp; WriteLN('(M) - Mostra&nbsp; Cliente');&nbsp;&nbsp;&nbsp;&nbsp; WriteLN('(F) - Fim');&nbsp;&nbsp;&nbsp;&nbsp; WriteLN('Entre com a sua opcao');&nbsp;&nbsp;&nbsp;&nbsp; Repeat&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Oque:=Upcase(ReadKey);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; If Not (Oque in Deseja) then&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Write (#7);&nbsp;&nbsp;&nbsp;&nbsp; Until Oque in Deseja;&nbsp;&nbsp;&nbsp;&nbsp; if Oque ='I' then&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; IncluirCli;&nbsp;&nbsp;&nbsp;&nbsp; if Oque='A'then&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; AlteraCli;&nbsp;&nbsp;&nbsp;&nbsp; if Oque='E'then&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ExcluiCLI;&nbsp;&nbsp;&nbsp;&nbsp; if Oque='M'then&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; MostrarCli;&nbsp;&nbsp;&nbsp;&nbsp; if Oque='F'then&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; FimCli:=true;&nbsp;&nbsp; end;&nbsp;5.14&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; PROGRAMA PRINCIPAL
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&nbsp; 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&nbsp; é necessário fechar os arquivos. Que foram abertos no início.
Programa
Begin&nbsp; iniciaCli;&nbsp; Repeat;&nbsp;&nbsp;&nbsp; MenuCli;&nbsp; Until FimCli;&nbsp; FinalCli;end.