ExemploDeInsercaoSimplesTabela

De MediaWiki do Campus São José
Revisão de 16h33min de 27 de novembro de 2018 por 127.0.0.1 (discussão)
Ir para navegação Ir para pesquisar

No exemplo abaixo é mostrado como inserir/remover de uma tabela simples de estruturas. Note a tabela tem tamanho fixo da forma:


  1. include <stdio.h>
  2. include <string.h>
  1. define TAM_NOME 25
  2. define TAM_TURMA 20

struct tipo_aluno {

  char nome[TAM_NOME];
  float nota_final;

};

struct tipo_aluno turma[TAM_TURMA];

/* protótipos de funções */

int inserir_aluno(); int encontrar_aluno (char *nome); int remover_aluno(); int imprimir_turma(); int salvar_turma_arquivo(); int recuperar_turma_arquivo(); void iniciar_turma();

main() {

 int i;
 /* tenta recuperar os dados de arquivo - caso não consiga, iniciar a tabela de alunos */
 if (recuperar_turma_arquivo()==0) {
      iniciar_turma();
 }
 imprimir_turma();
 for(i=0;i<3;i++)
    inserir_aluno();
 imprimir_turma();
 for(i=0;i<1;i++)
    remover_aluno();
 
 imprimir_turma();
 for(i=0;i<1;i++)
    inserir_aluno();    
 
 imprimir_turma();
 salvar_turma_arquivo();

}

int inserir_aluno() {

 char aux[TAM_NOME];
 int retorno = -1;
 int i;
 printf("Entre com o nome do aluno a ser inserido na turma\n");
 scanf ("%s", aux);
 if ( encontrar_aluno (aux) == -1) { /* aluno não existe */
    /* encontrar local livre na tabela */
    for (i=0;i<TAM_TURMA;i++) {
        if (turma[i].nome[0]=='\0') 
              break;
    }
    if (i<TAM_TURMA){ /* existe posição livre */
        strcpy(turma[i].nome, aux);
        printf("Entre com  a nota\n");
        scanf ("%f", &turma[i].nota_final);
        retorno = i;
    }
 } else
    printf("aluno já existe\n");  

}

int encontrar_aluno (char *nome) {

int i;
int retorno = -1;
 
for (i=0;i<TAM_TURMA;i++) {
   if (strcmp(nome, turma[i].nome)==0) {
      retorno=i;
      break;
   }
}
return retorno; 

}

int remover_aluno() {

 char aux[TAM_NOME];
 int index;
 int retorno = -1;
 printf ("Entre com aluno a ser removido\n");
 scanf ("%s", aux);
 index = encontrar_aluno (aux);
 if (index!=-1) {
    turma[index].nome[0]='\0';
    retorno = index;
 }
 return retorno;

}

int imprimir_turma() {

int i;
 
for (i=0;i<TAM_TURMA;i++)  {
    if (turma[i].nome[0]!='\0')
         printf("Nome aluno %s nota %f posicao %d\n", turma[i].nome, turma[i].nota_final, i);
}

}

int salvar_turma_arquivo() { }

int recuperar_turma_arquivo() {

}

void iniciar_turma() {

int i;
 
for (i=0;i<TAM_TURMA;i++)
   turma[i].nome[0]='\0';   /* null string em todas as entradas */

}

</syntaxhighlight>