ExemploDeInsercaoSimplesTabela

De MediaWiki do Campus São José
Revisão de 07h27min de 28 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:


#include <stdio.h>
#include <string.h>

#define TAM_NOME 25
#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 */
}