//notas.c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
struct aluno
{
char *nome;
char *ra;
struct aluno *proximo;
};
typedef struct aluno Aluno;
//Inicializa a estrutura de dados principal-------------------------------------
Aluno *principal = NULL;
//------------------------------------------------------------------------------
//Cria a nova lista apontando o proximo no para NULL----------------------------
Aluno *inicia_dados(char *nome, char *ra)
{
Aluno *novo;
novo = (Aluno *)malloc(sizeof(Aluno));
novo->nome = (char *)malloc(strlen(nome)+1);
strncpy(novo->nome, nome, strlen(nome)+1);
novo->ra = (char *)malloc(strlen(ra)+1);
strncpy(novo->ra, ra, strlen(ra)+1);
novo->proximo = NULL;
return novo;
}
//------------------------------------------------------------------------------
//Como a lista nao esta mais vazia, apontamos o proximo no para lista anterior--
Aluno *insere_dados(Aluno *dados, char *nome, char *ra)
{
Aluno *novo;
novo = (Aluno *)malloc(sizeof(Aluno));
novo->nome = (char *)malloc(strlen(nome)+1);
strncpy(novo->nome, nome, strlen(nome)+1);
novo->ra = (char *)malloc(strlen(ra)+1);
strncpy(novo->ra, ra, strlen(ra)+1);
novo->proximo = dados;
return novo;
}
//------------------------------------------------------------------------------
//Percorre todos os campos da lista e imprime ate o ponteiro proximo
//chegar em NULL----------------------------------------------------------------
void exibe_dados(Aluno *dados)
{
printf("Cadastro de Alunos\n\n");
printf("------------------------\n");
for (; dados != NULL; dados = dados->proximo)
{
printf("Nome: %s\n", dados->nome);
printf("RA: %s\n", dados->ra);
printf("------------------------\n");
}
system("pause");
}
//------------------------------------------------------------------------------
//Percorre cada ponta comparando o nome com a auxiliar--------------------------
void busca_dados(Aluno *dados, char *auxiliar)
{
int achou = 0;
system("cls");
printf("Cadastro de Alunos\n\n");
for (; dados != NULL; dados = dados->proximo)
{
if (strcmp(auxiliar, dados->nome) == 0)
{
printf("------------------------\n");
printf("Nome: %s\n", dados->nome);
printf("RA: %s\n", dados->ra);
printf("------------------------\n");
achou++;
}
}
if (achou == 0)
printf("Nenhum resultado encontrado\n\n");
else
printf("Foram encontrados %d registros\n\n",achou);
system("pause");
}
//------------------------------------------------------------------------------
//Deleta o ultimo registro inserido--------------------------------------------
Aluno *deleta_dados(Aluno *dados)
{
Aluno *novo;
novo = dados->proximo;
free(dados->nome);
free(dados->ra);
free(dados);
printf("Ultimo registro inserido foi deletado\n\n");
system("pause");
return novo;
}
//------------------------------------------------------------------------------
//Apenas checa se a lista e NULL ou nao-----------------------------------------
int checa_vazio(Aluno *dados)
{
if (dados == NULL)
{
printf("Nenhuma informacao foi inserida\n\n");
system("pause");
return 1;
}
else
return 0;
}
//------------------------------------------------------------------------------
//Obtem os dados necessarios para chamar as funcoes de manuseio de dados--------
void insere(void)
{
char *nome;
char *ra;
nome = (char *)malloc(100);
system("cls");
printf("Nome: ");
fflush(stdin);
gets(nome);
printf("\n");
printf("RA: ");
fflush(stdin);
gets(ra);
printf("\n");
if (principal == NULL)
principal = inicia_dados(nome, ra);
else
principal = insere_dados(principal, nome, ra);
}
//------------------------------------------------------------------------------
//exibe todos os elementos da lista---------------------------------------------
void exibe(void)
{
system("cls");
if (!checa_vazio(principal))
exibe_dados(principal);
}
//------------------------------------------------------------------------------
//busca um determinado elemento-------------------------------------------------
void busca(void)
{
char *auxiliar;
system("cls");
if (!checa_vazio(principal))
{
auxiliar = (char *)malloc(100);
printf("Informe o nome que deseja buscar: ");
fflush(stdin);
gets(auxiliar);
busca_dados(principal, auxiliar);
}
}
//------------------------------------------------------------------------------
//deleta elemento da lista------------------------------------------------------
void deleta(void)
{
system("cls");
if (!checa_vazio(principal))
principal = deleta_dados(principal);
}
//------------------------------------------------------------------------------