Example #1
0
int main() {
    Aluno aluno;
    Base base;
    Boolean fim = false;
    int ra;
    char acao;

    base = CriaBase(); 

    do { 
      if (scanf("%c", &acao) ==  EOF)
	fim = true; 
      else {
	printf("Ação: %c", acao);
	switch (acao) { 
          
	case '#':
	  ImprimeComentario();
	  break;
          
	case 'i':
	case 'I':
	  scanf("%d ",&aluno.ra);
	  aluno.nome = leNome();
	  printf(" %06d %s\n", aluno.ra, aluno.nome);
	  if (!InsereBase(&base, aluno)) {
	    printf("Ra %06d já estava presente na base de dados.\n", aluno.ra);
	    FREE(aluno.nome);
	  }
	  break;
	
	case 'c':
	case 'C':
	  scanf("%d",&ra);
	  printf(" %06d",ra);
	  ImprimeComentario();
	  if (ConsultaBase(&base, ra, &aluno))
	    printf("%06d %s \n", ra, aluno.nome);
	  else
	    printf("Ra %06d não encontrado na base de dados.\n", ra);
	  break;

	case 'r':
	case 'R':
	  scanf("%d",&ra);
	  printf(" %06d",ra);
	  ImprimeComentario();
	  if (RemoveBase(&base, ra))
	    printf("Ra %06d removido.\n", ra);
	  else
	    printf("Ra %06d não encontrado na base de dados.\n", ra);
	  break;
            

	case 'n':
	case 'N':
	  ImprimeComentario();
	  printf("Número de nós na base de dados: %d.\n", NumeroNosBase(&base));
	  break;

	case 'a':
	case 'A':
	  ImprimeComentario();
	  printf("Altura da base de dados: %d.\n", AlturaBase(&base));
	  break;
            
	case 'l':
	case 'L':
	  ImprimeComentario();
	  LiberaBase(&base);
	  base = CriaBase();
	  break;

	case 'p':
	case 'P':
	  ImprimeComentario();
	  PercorreBase(&base,ImprimeAluno);
	  break;
            
	case 'h':
	case 'H':
	  ImprimeComentario();
	  printf("\n");
	  printf("#             : comentário.\n");
	  printf("i <ra> <nome> : insere ra e nome na base.\n");
	  printf("c <ra>        : consulta ra na base.\n");
	  printf("r <ra>        : remove ra da base.\n");
	  printf("l             : libera base.\n");
	  printf("p             : executa um percurso inordem na base.\n");
	  printf("n             : verifica número de nós na base.\n");
	  printf("a             : verifica altura da base.\n");
	  printf("h             : imprime resumo.\n");
	  printf("x             : término.\n");
	  printf("q             : término.\n");
	  fim = true;
	  break;
            
	case 'x':
	case 'X':
	case 'q':
	case 'Q':
	  ImprimeComentario();
	  fim = true;
	  break;
	}  /* switch */
      }
    } while (!fim);
      
    
  bapply(bprint);

  printf("Processamento terminado\n");
  
  return 0;
  
} /* main */
Example #2
0
int main(int argc, char * argv[]) {
/* Os argumentos são os nomes dos dois arquivos que
   contêm, respectivamente, os dados para inserção e
   as operacoes.  A saída é para o arquivo 'stdout'. */

  Aluno a;
  int ra;
  char op;
  Base p; 
  FILE * dados;
  FILE * operacoes;
  

  if (argc!=3) {                          /* verifica o número de
					     argumentos */
    printf("Faltam ou sobram nomes dos arquivos\n");
    return 1;
  }
  
  dados = fopen(argv[1],"r");
  operacoes = fopen(argv[2],"r");
  
  if ((dados==NULL) || (operacoes==NULL)) {
    printf("Problmas na abertura dos arquivos\n");
    return 1;
  }
  
  buf = MALLOC(ComprMaxNome);
  p = CriaBase();
  
  printf("Carga inicial dos dados:\n");
  
  while (LeAluno(dados,&a)) {
    if (!InsereBase(p,&a)) {
        printf("RA=%d repetido\n",a.ra);
        FREE(a.nome);
    }
  }
  
  printf("\nOperações:\n");
  while (fscanf(operacoes,"%c",&op)!=EOF) {
    switch (op) {
      case 'i':  
        LeAluno(operacoes,&a);              /* ignora o resultado
					       booleano */
        printf("Insere: %d %s\n",a.ra,a.nome);
        if (!InsereBase(p,&a)) {
          printf("RA=%d repetido\n",a.ra);
          FREE(a.nome);
	}
        break;
      case 'r': 
        fscanf(operacoes,"%d\n",&ra);
        printf("Remove: %d\n",ra);
        if (!RemoveBase(p,ra))
          printf("RA inexistente: %6d\n",ra);
        break;
      case 'c': 
        fscanf(operacoes,"%d\n",&ra);
        printf("Consulta: %d\n",ra);
        if (ConsultaBase(p,ra,&a))
          printf("%6d  %s\n",a.ra, a.nome);
        else
          printf("RA inexistente: %6d\n",ra);
        break;
      case 'w': 
        fscanf(operacoes,"\n");
        printf("\nImprime base: %d registro(s):\n",NumeroRegsBase(p));
        ImprimeBase(p);
        printf("\n");
        break;
      default:
        fscanf(operacoes,"\n");
        printf("Operacao invalida: %c\n",op);
        break;
    }
  }

  LiberaBase(p);
  FREE(buf);
  
  fclose(dados);
  fclose(operacoes);
    
  bapply(bprint);
   
  printf("\nProcessamento terminado\n");
  return 0;

}