/*  Aluno: Diogo Rafael da Silva
    Matricula: 20050145
    Curso: Analise de Sistemas
*/
#include
#include
#include
#include
#include
#include

/*  Aluno: Diogo Rafael da Silva
    Matricula: 20050145
    Curso: Analise de Sistemas
*/
typedef struct TipoItem{
   int cod;
   char ano[20],modelo[40],placas[20];
};

typedef struct TipoArvore {
    TipoItem item;
    TipoArvore *Fesq, *Fdir;
    };


 TipoArvore *Insere(TipoArvore *R1, TipoArvore *R2, TipoItem X)
{
  if(!R2)
    {
      R2 = (TipoArvore *) malloc(sizeof(TipoArvore));
      R2 -> Fesq = NULL;
      R2 -> Fdir = NULL;
      R2 -> item = X;
      if (!R1) return R2; //primeiro insert
	 if (X.cod < R1 -> item.cod) R1->Fesq = R2; //menor vai p/esq
	    else R1 -> Fdir = R2; //maior vai p/dir
	      return R2;
    }
      if (X.cod == R2 -> item.cod)
       {
	 printf("\nERRO: Ja existe um codigo igual!");
	 return R2;
       }
	 if (X.cod < R2 -> item.cod) Insere(R2,R2->Fesq,X);
	   else Insere(R2,R2->Fdir,X);
	   return R2;


}
/*  Aluno: Diogo Rafael da Silva
    Matricula: 20050145
    Curso: Analise de Sistemas
*/

void Imprime(TipoArvore * R, int L)
{
if (!R){

return;} //Arvore est  vazia
Imprime(R -> Fesq,L + 1);
int i;



	 printf("\n\n\n ***********************************************************************\n");
	 printf("\n\t      ---------MOSTRANDO TODA A LISTA---------");
	 printf("\n\t       --- Total de produtos da lista: %d --- ",i+1);
	 printf("\n\n ***********************************************************************\n");
	 printf("\n    ************* Veiculo *************\n");
	 printf("\tCodigo: %d\n",R->item.cod);
	 printf("\tModelo: %s\n",R->item.modelo);
	 printf("\tAno: %s\n",R->item.ano);
	 printf("\tPlacas: %s\n",R->item.placas);
	 i++;



Imprime(R -> Fdir,L+1);


}  //Fim da funcao Imprime
/*  Aluno: Diogo Rafael da Silva
    Matricula: 20050145
    Curso: Analise de Sistemas
*/

TipoArvore * Pesquisa(TipoArvore * R)
{
  clrscr();
  int cod;
  if(!R) return R; //Nao encontrado
  printf("\n\nConsulta por Codigo: ");
  scanf("%d",&cod);
  printf("\n*****************************************************************************");
  printf("\n\t\t\t------ RESULTADO DA PESQUISA ------!!!");
  printf("\n*****************************************************************************");
  while (R -> item.cod != cod)
  {
    if (cod < R -> item.cod) R=R->Fesq;
     else R=R->Fdir;
      if (R == NULL) break;
  } //fim do while
	 printf("\tCodigo: %d\n",R->item.cod);
	 printf("\tModelo: %s\n",R->item.modelo);
	 printf("\tAno: %s\n",R->item.ano);
	 printf("\tPlacas: %s\n",R->item.placas);
return R;
}
/*  Aluno: Diogo Rafael da Silva
    Matricula: 20050145
    Curso: Analise de Sistemas
*/
void main()
{
  clrscr();
  TipoArvore * Raiz = NULL;
  TipoArvore * Pesq;
  char op,op2,ope;
  int cod1;
  int b = 0;
  do {
  clrscr();
  printf("\n-------------------------------------------");
  printf("\n\n\tESCOLHA UMA DAS OPCOES ABAIXO\n\n");
  printf("\n\nDigite \"i\" para incluir um novo dado");
  printf("\n\nDigite \"r\" para retirar um dado");
  printf("\n\nDigite \"a\" para alterar o conteudo de um dado");
  printf("\n\nDigite \"p\" para pesquisar um dado");
  printf("\n\nDigite \"e\" para esvaziar o conteudo da arvore");
  printf("\n\nDigite \"m\" para mostrar o conteudo da arvore");
  printf("\n\nDigite \"x\" para sair do programa");
  printf("\n\n-----------------------------------------");
  printf("\n\nDigite sua op‡ao: ");
    op = getche();
    op=tolower(op);
  switch(op) {
  case 'i':
	    clrscr();
	    printf("\n\t\tINCLUINDO VEICULO\n");
	    TipoItem item;
	    printf("Codigo do veiculo: ");
	    scanf("%d",&item.cod);
	    printf("\nModelo: ");
	    fflush(stdin);
	    gets(item.modelo);
	    printf("\nAno: ");
	    scanf("%s",&item.ano);
	    printf("\nPlacas: ");
	    scanf("%s",&item.placas);
	    if (!(strcmp(item.modelo,NULL))){

	    printf("\n ***********************************************************************\n");
	    printf("\n\t\t            NAO FOI POSSIVEL CADASTRAR:");
	    printf("\n\t\t       MOTIVO: EXISTEM CAMPOS EM BRANCO");
	    printf("\n\n ***********************************************************************\n");

	    getch();
	    break;
	    }
	    if(!Raiz)Raiz=Insere(Raiz,Raiz,item);
	    else Insere(Raiz,Raiz,item);
	    printf("\n ***********************************************************************\n");
	    printf("\n\t\t       DADO CADASTRADO COM SUCESSO!!!");
	    printf("\n\n ***********************************************************************\n");
	    getch();

	    break;
  case 'm':
	    clrscr();
	    Imprime(Raiz,NULL);
	    getch();
	    break;
   case 'p':
	    clrscr();
	    Pesquisa(Raiz);
	    getch();
	    break;

  case 'e':
	    clrscr();
	    if(Raiz == NULL){
	     printf("A ARVORE JA ESTA VAZIA!!");
                   getch();
		   }
		   else{
		      printf("Voce deseja esvazia a arvore:  ");
		      scanf("%s",&ope);
		      ope=tolower(ope);
		      if (ope == 's' /*|| ope == 'S'*/){
		      Raiz = NULL;

		      printf("\n ***********************************************************************\n");
		      printf("\n\t\t       ARVORE ESVAZIADA COM SUCESSO!!!                               ");
		      printf("\n ***********************************************************************\n");
                      getch();
		      }
		   }
	     break;
  case 'r':
	    clrscr();
	    printf("\nEntre com codigo a retirar: ");
	    scanf("%d",&cod1);
	    //Retira(Raiz,cod1);
	    getch();
	    break;
  case 'x':
	    char resp;
clrscr();
printf("\nVoce realmente deseja sair ? (s/n)\t");
fflush ( stdin ) ;
scanf("%c",&resp);
resp=(tolower(resp));
if (resp=='s'){
b=2;
break;
}//if
//else {}
fflush(stdin);
break;

  } /*FECHA SWITCH */ }while (!b);
  }
/*  Aluno: Diogo Rafael da Silva
    Matricula: 20050145
    Curso: Analise de Sistemas
*/

    Source: geocities.com/br/di0_s/dw

               ( geocities.com/br/di0_s)                   ( geocities.com/br)