Instituto de Ciências Matemáticas de São Carlos
Departamento de Computação e Estatística
SCE182 - Algoritmos e Estruturas de Dados 1
Profs. Resp.: Graça Pimentel, Maria Cristina e Rosane Minghim

Exercícios - Uso de TAD e UNIT
Programa Principal - AgendaTAD.pas

Programa para armazenar dados de candidatos que estão sendo entrevistados para uma vaga de garçom. Implementação com o uso dos conceitos de TAD e UNIT.

Program PAgenda;
Uses
  CRT, USacola, UElem;

Procedure InsereAg(var Agenda: TSacola);
Var
  flag   : char;
  RegAux : TElem;
begin
  flag := 's';

  while ((flag = 's') or (flag = 'S')) do
  begin
    clrscr;
    writeln; writeln;
    write('Entre com o RG: ');
    readln(RegAux.RG);
    write('Entre com o Nome: ');
    readln(RegAux.Nome);
    write('Entre com o Endereco: ');
    readln(RegAux.Endereco);

    case InserirSacola(Agenda, RegAux) of
      OK : begin
          writeln; writeln;
          write('Deseja incluir outro registro (S/N)? ');
          readln(flag);
        end;
      ELEM_JAEXISTE : begin
          write('Erro! Registro ja existe.');
          writeln; writeln;
          write('Deseja incluir outro registro (S/N)? ');
          readln(flag);
        end;
      SACOLA_CHEIA : begin
          write('Erro! Sem espaco para inclusao (aperte uma tecla p/ continuar).');
          readln;
          flag := 'n';
        end;
    end;
  end;
end;

Procedure RemoveAg(var Agenda: TSacola);
Var
  flag1, 
  flag2  : char;
  aux    : integer;
  RegAux : TElem;
begin
  flag1 := 's';

  while ((flag1 = 's') or (flag1 = 'S')) do
  begin
    clrscr;
    writeln; writeln;
    write('Entre com o RG: ');
    readln(RegAux.RG);

    case ConsultaSacola(Agenda, RegAux) of
      OK : begin
          writeln; writeln;
          writeln('Dados do registro a ser removido:');
          writeln('RG       : ', RegAux.RG);
          writeln('Nome     : ', RegAux.Nome);
          writeln('Endereco : ', RegAux.Endereco);
          writeln; writeln;
          write('Confirma remocao (S/N)? ');
          readln(flag2);

          if (flag2 = 's') or (flag2 = 'S')
           Then aux := RemoveSacola(Agenda, RegAux);

          writeln; writeln;
          write('Deseja remover outro registro (S/N)? ');
          readln(flag1);
        end;
      ELEM_INEXISTENTE : begin
          write('Erro! Registro nao existe.');
          writeln; writeln;
          write('Deseja remover outro registro (S/N)? ');
          readln(flag1);
        end;
    end;
  end;
end;

Procedure AlteraAg(var Agenda: TSacola);
Var
  flag    : char;
  RegAux1,
  RegAux2 : TElem;
  aux     : integer;
begin
  flag := 's';

  while ((flag = 's') or (flag = 'S')) do
  begin
    clrscr;
    writeln; writeln;
    write('Entre com o RG: ');
    readln(RegAux1.RG);

    case ConsultaSacola(Agenda, RegAux1) of
      OK : begin
          writeln; writeln;
          writeln('Dados do registro a ser alterado:');
          writeln('RG       : ', RegAux1.RG);
          writeln('Nome     : ', RegAux1.Nome);
          writeln('Endereco : ', RegAux1.Endereco);
          writeln; writeln;

          writeln('Entre com novos dados. Tecle <<enter>> para manter os atuais.');

          write('Entre com o novo Nome: ');
          readln(RegAux2.Nome);
          if RegAux2.Nome <> ''
           Then RegAux1.Nome := RegAux2.Nome;

          write('Entre com o novo Endereco: ');
          readln(RegAux2.Endereco);
          if RegAux2.Endereco <> ''
           Then RegAux1.Endereco := RegAux2.Endereco;

          aux := AlteraSacola(Agenda, RegAux1);

          writeln; writeln;
          write('Deseja alterar outro registro (S/N)? ');
          readln(flag);
        end;
      ELEM_INEXISTENTE : begin
          write('Erro! Registro nao existe.');
          writeln; writeln;
          write('Deseja alterar outro registro (S/N)? ');
          readln(flag);
        end;
    end;
  end;
end;

Var
  Agenda : TSacola;
  flag   : byte;


begin
  InicializaSacola(Agenda);

  flag := 1;
  while (flag <> 4) do 
  begin
    clrscr;
    writeln;writeln;
    writeln('Agenda de Enderecos');
    writeln('====== == =========');
    writeln;
    writeln('1 - Incluir');
    writeln('2 - Excluir');
    writeln('3 - Alterar');
    writeln('4 - Sair');
    writeln;
    write('Entre com a opcao desejada: ');
    readln(flag);

    case flag of
      1 : InsereAg(Agenda);
      2 : RemoveAg(Agenda);
      3 : AlteraAg(Agenda);
    end;
  end;
end.

Índice