//Viernanryck Luciano //Trabalhando com listas encadeadas #include #include #include //Definindo a estrutura dos dados typedef struct dados{ int idade; char *nome; struct dados* prox; }Dados; //iniciando a lista Dados* inicia(char *nome,int idade); //criando novos nós Dados* cria(Dados* ini, char*nome, int idade); //impressao na tela void imprime(Dados* inf); //remove ultimo registro Dados* remove_ultimo(Dados*inf); //busca e imprime void buscar(Dados* inf,char* nome); //remove um especifico Dados* remove_especifico(Dados* inf,char *nome); //altera um especifico Dados* alterar(Dados* inf,char* nome); //salva os dados para um arquivo void salvar(Dados* inf, char *nomearquivo); //inicio da função principal int main(void) { char opcao,nome[81]; int idade; Dados* principal=NULL; do{ system("cls"); printf("\n\n\t1 Adicionar\n\t2 Visualizar\n\t3 Deletar ultimo registro\n\t4 Buscar Por Nome\n\t5 Deletar Um Nome Especifico\n\t6 Alterar Um Registro\n\t7 Gravar Os Dados Em Um Arquivo\n\t0 Sair\n\tDigite a opcao desejada: "); scanf("%c",&opcao); fflush(stdin); system("cls"); switch (opcao) { case '1': printf("Entre com o nome: "); scanf(" %80[^\n]",nome); fflush(stdin); printf("Entre com a idade: "); scanf("%d",&idade); fflush(stdin); if (principal==NULL) { principal=inicia(nome,idade); break; } else { principal=cria(principal,nome,idade); } break; case '2': if (principal==NULL) { printf("\n\tAinda nao existem registros\n\n"); system("pause"); } else { imprime(principal); system("pause"); fflush(stdin); } break; case '3': if (principal==NULL) { printf("\n\tAinda nao existem registros\n\n"); system("pause"); } else { principal=remove_ultimo(principal); } break; case '4': if (principal==NULL) { printf("\n\tAinda nao existem registros\n\n"); system("pause"); } else { printf("Entre Com O Nome Da Busca: "); scanf(" %80[^\n]",nome); fflush(stdin); buscar(principal,nome); } break; case '5': if (principal==NULL) { printf("\n\tAinda nao existem registros\n\n"); system("pause"); } else { printf("Entre Com O Nome A Ser Deletado: "); scanf(" %80[^\n]",nome); fflush(stdin); system("cls"); principal=remove_especifico(principal,nome); } break; case '6': if (principal==NULL) { printf("\n\tAinda nao existem registros\n\n"); system("pause"); } else { printf("Entre Com O Nome A Ser Alterado: "); scanf(" %80[^\n]",nome); fflush(stdin); system("cls"); principal=alterar(principal,nome); } break; case '7': if (principal==NULL) { printf("\n\tAinda nao existem registros\n\n"); system("pause"); } else { printf("Entre Com O Nome Do Arquivo A Ser Gravado: "); scanf(" %80[^\n]",nome); fflush(stdin); system("cls"); salvar(principal,nome); } break; case '0': return 0; break; default: printf("Opcao invalida!\n"); system("pause"); break; } }while (opcao!='0'); //fim da função principal } //Função para iniciar a lista caso esteja vazia (principal igual a NULL) Dados* inicia(char *nome,int idade) { Dados*novo; novo=(Dados*)malloc(sizeof(Dados)); novo->nome=(char *)malloc((strlen(nome)+1)*sizeof(char)); strcpy(novo->nome,nome); novo->prox=NULL; novo->idade=idade; return novo; } //Função para criação de um novo nó Dados* cria(Dados* ini, char*nome, int idade) { Dados*novo; novo=(Dados*) malloc(sizeof(Dados)); novo->nome=(char*) malloc((strlen(nome)+1)*sizeof(char)); strcpy(novo->nome,nome); novo->idade=idade; novo->prox=ini; return novo; } //Função para fazer a visualização dos registros void imprime(Dados* inf) { printf("\tRegistros:\n"); for ( ; inf!=NULL; inf=inf->prox) { printf("\nNome: %s\nIdade: %d\n",inf->nome,inf->idade); } } //função para remover o ultimo registro adicionado Dados* remove_ultimo(Dados*inf) { Dados* temp=inf->prox; free(inf->nome); free(inf); return temp; } //Busca pelo nome especifico e exibe se encontra se nao exibe que nao foram encontrados void buscar(Dados* inf,char* nome) { int n=0; while(inf!=NULL) { if(strcmp(inf->nome,nome)==0) { printf("Nome: %s\nIdade: %d\n\n",nome,inf->idade); n++; } inf=inf->prox; } if (n>0) { printf("Foram Encontrados: %d registros\n",n); system("pause"); } else { printf("Nao Foram Encontrados Registros\n"); system("pause"); } } //Remove um registro especifico Dados* remove_especifico(Dados* inf,char *nome) { Dados* ant=NULL; Dados* aux; Dados*ini=inf; while (inf!=NULL) { if (strcmp(nome,inf->nome)==0) { if (ant==NULL) { aux=inf->prox; free(inf->nome); free(inf); return aux; } else { ant->prox=inf->prox; free(inf->nome); free(inf); return ini; } } ant=inf; inf=inf->prox; } printf("O Registro Especificado Nao Foi Encontrado\n"); system("pause"); return ini; } //Função para alterar um nome especifico Dados* alterar(Dados* inf,char* nome) { Dados* ini=inf; char nometemp[81]; while(inf!=NULL) { if(strcmp(inf->nome,nome)==0) { free(inf->nome); printf("Digite o novo nome: "); scanf(" %80[^\n]",nometemp); fflush(stdin); inf->nome=(char*) malloc((strlen(nometemp)+1)*sizeof(char)); strcpy(inf->nome,nometemp); printf("Entre com a nova idade: "); scanf("%d",&inf->idade); fflush(stdin); return ini; } inf=inf->prox; } //se chegar nesta parte do codigo é porque nao encontrou o registro printf("O nome especificado nao pode ser encontrado\n"); system("pause"); return ini; } //grava os dados em um arquivo especifico void salvar(Dados* inf, char *nomearquivo) { FILE *saida=fopen(nomearquivo,"w"); if (saida==NULL) { printf("Voce nao tem privilegio suficiente para gravar o arquivo\n"); system("pause"); } else { for ( ; inf!=NULL; inf=inf->prox) { fprintf(saida,"Nome: %s\n",inf->nome); fprintf(saida,"Idade: %d\n",inf->idade); } } fclose(saida); }