Cadastro de Clientes em Pascal Parte 5

Na postagem anterior nos fechamos o primeiro circulo do programa. Agora vamos aperfeiçoar cada item.

Como dito anteriormente nos vamos remover em definitivo o cliente, pois no inicio do programa criamos apenas 15 posições.

Na versão anterior já tinha marcado o cliente a ser apagado com o sustenido #.

Para remover o cliente não é somente esvaziar a variável e usar o resto, pois quanto mais variáveis seu programa tiver, mais memória do seu computador irá usar.

Então o processo não é tão simples para excluir um cliente, você terá que excluir e depois mover todos os próximos clientes em uma posição para trás.

Veja o desenho:

excluir cliente2.jpg

No desenho acima temos 5 clientes o cliente número 2 será apagado e nesse momento o cliente 3 será o cliente 2, o cliente 4 será o 3 e o cliente 5 será o 4 e nós teremos apenas 4 clientes.

Depois de marcado vamos criar a estrutura onde a variável I tem a posição do cliente a ser apagado e não será mais necessário marcá-lo, então:

for j := i to NClientes-1 do

Begin

Nome[j] := Nome[j+1];

Idade[j] := Idade[j+1];

Sexo[j] := Idade[j+1];

End;

NClientes := NClientes - 1;

Quando terminar o cliente já estará eliminado.

Vamos criar uma pequena simulação para o nosso programa, supondo que o tenhamos 5 clientes:

Nome[1] = Joao

Nome[2] = Maria

Nome[3] = Pedro

Nome[4] = Paulo

Nome[5] = Isabel

Vamos remover o cliente 2 como no desenho anterior e aplicar a parte do programa acima para conferir se está tudo certo:

NClientes = 5

i = 2

j vai de 2 até 4 (Nclientes-1)

excluir cliente3.jpg

Quando j=2 => Nome[j] := Nome[j+1] => Nome[2] :=Nome[3]

Assim por diante.

Vamos ao código fonte:

 Program Cadastro_de_Clientes_Versao_5;  
 Uses Crt;  
 Var  
  Nome   : Array [1..15] of String[40];  
  Idade   : Array [1..15] of Integer;  
  Sexo   : Array [1..15] of Char;  
  i     : Integer;  
  NClientes : Integer; // Numero de Clientes  
  Opcao   : Integer;  
  s     : String;  
  b     : Boolean;  
 Begin  
  NClientes := 0; // Come‡a com 0 Clientes  
  Repeat  
   ClrScr;  
   WriteLn ('Cadastro de Clientes V1.0');  
   WriteLn;  
   WriteLn ('1 - Incluir Clientes');  
   WriteLn ('2 - Mostrar Clientes');  
   WriteLn ('3 - Alterar Clientes');  
   WriteLn ('4 - Excluir Clientes');  
   WriteLn ('5 - Sair');  
   WriteLn;  
   Write ('Opcao: '); ReadLn (Opcao);  
   Case Opcao of  
    1 :  
    Begin  
     NClientes := NClientes+1;  
     WriteLn ('Cliente No.:',NClientes);  
     Write ('Nome...:'); ReadLn (Nome[NClientes]);  
     Write ('Idade..:'); ReadLn (Idade[NClientes]);  
     Repeat  
      Write ('Sexo...:'); ReadLn (Sexo[NClientes]);  
     Until (Sexo[NClientes]='M') or (Sexo[NClientes]='F');  
    End;  
    2 :  
    Begin  
     For i := 1 to NClientes do  
     Begin  
      if (Copy(Nome[i],1,1)<>'#') Then  
      Begin  
       WriteLn ('Cliente No.: ',i);  
       WriteLn ('Nome.......: ',Nome[i]);  
       WriteLn ('Idade......: ',Idade[i]);  
       WriteLn ('Sexo.......: ',Sexo[i]);  
       WriteLn ('=======================================');  
      End;  
     End;  
     ReadLn;  
    End;  
    3 :  
    Begin  
     Write ('Entre com Nome do Cliente :');  
     ReadLn (s);  
     b := False; // Inicia que nao encotrou  
     i := 0;  
     Repeat  
      i := i + 1;  
      if Nome[i] = s then b := True;  
     Until (b) or (i>=NClientes);  
     if not(b) then  
     Begin  
      WriteLn ('Cliente nÆo encontrado!');  
      ReadLn;  
     End  
     Else  
     Begin  
      WriteLn ('Cliente No.: ',i);  
      WriteLn ('Nome.......: ',Nome[i]);  
      WriteLn ('Idade......: ',Idade[i]);  
      WriteLn ('Sexo.......: ',Sexo[i]);  
      WriteLn;  
      WriteLn ('Nome.......: ');ReadLn(Nome[i]);  
      WriteLn ('Idade......: ');ReadLn(Idade[i]);  
      WriteLn ('Sexo.......: ');ReadLn(Sexo[i]);  
     End;  
    End;  
    4 :  
    Begin  
     Write ('Entre com Nome do Cliente :');  
     ReadLn (s);  
     b := False; // Inicia que nao encotrou  
     i := 0;  
     Repeat  
      i := i + 1;  
      if Nome[i] = s then b := True;  
     Until (b) or (i>=NClientes);  
     if not(b) then  
     Begin  
      WriteLn ('Cliente nÆo encontrado!');  
      ReadLn;  
     End  
     Else  
     Begin  
      WriteLn ('Cliente No.: ',i);  
      WriteLn ('Nome.......: ',Nome[i]);  
      WriteLn ('Idade......: ',Idade[i]);  
      WriteLn ('Sexo.......: ',Sexo[i]);  
      WriteLn;  
      Repeat  
       Write ('Confirma (S/N)?');  
       ReadLn (s);  
      Until (s='S') or (s='N');  
      if s='S' then  
      Begin  
       For j := i to NClientes do  
       Begin  
        Nome [j] := Nome[j+1];  
        Idade [j] := Idade[j+1];  
        Sexo [j] := Sexo[j+1];  
       End;  
       NClientes := NClientes - 1;  
      End;  
     End;  
    End;  
   End;  
  Until (Opcao=5);  
 End.  

Na próxima etapa vamos acertar mais alguns aspectos do programa, espero que esteja sendo útil, o seu comentário já é uma recompensa. A sua sugestão é um esclarecimento para você e outros usuários.

5 comentários:

  1. professor estou com problema de copilação na linha 16 esta dizendo o que o indice numero 1 do vetor deve ser do tipo inteiro mas não entendi pode me ajudar? urgente

    ResponderExcluir
  2. Caro, Leitor,

    Qual a versão do Pascal que está usando.

    Me envie um e-mail: telles.wellington@bol.com.br

    ResponderExcluir
  3. Professor gostaria de saber como faço para criar um arquivo dos dados fornecidos pelo usuário para quando eu fechar o programa e abri-lo novamente tenha acesso a todos os dados dos clientes cadastrados antes de ter fechado o mesmo?
    Att.: Jânio

    ResponderExcluir
  4. olá, prof. meu nome é claudio estou com uma dúvida? estou desenvolvendo um programa no pascal, e necessito acumular valores em um array de 20 posições.é um programa de uma frota de taxis que quando o taxi 2 faz uma corrida devo acumular o valor na posição do array de nº 2. até ai tudo bem.o problema é quando o mesmo taxi chama a central novamente, pois devo acumular na mesma posição do vetor, ou seja, devo somar na posição 2 o novo valor.
    exemplo: o taxi 2 chama a central e passa o valor de 10,00. em seguida o mesmo taxi chama novamente a central e diz que fez uma outra corrida de mais 15,00. o valor na posição 2 então deveria ser de 25,00. como faço isso, se for possivel. um abraço fique com deus. claudio bottini aluno da etec informatica de santos.

    ResponderExcluir
  5. Cláudio,

    Envie um e-mail para mim que é melhor.

    telles.wellington@bol.com.br

    ResponderExcluir