Agenda

Publicado por César Rocha 21/02/2006

[ Hits: 8.314 ]

Download agenda.c




Agenda de nomes e telefones que utiliza arquivos para armazenar os dados, feita em C.

  



Esconder código-fonte

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

typedef struct agenda nomes;

void criar_lista (void);
void inclusao (void);
void remover (void);
void leitura (void);
void escrever (void);
void ajuda (void);
void imprimir (void);

struct agenda{
   char nome[30];
   char tele[8];
   nomes *prox;
   nomes *ante;
};

nomes *first;
nomes *last;

//criando lista...
void criar_lista()
{
first=(nomes*)malloc(sizeof(nomes));
last=(nomes*)malloc(sizeof(nomes));
   
last=first;
first->prox=NULL;
first->ante=NULL;
}

//abertura...
void main()
{
char menu;
   do
   {
      printf("\nMenu:\n");
      printf("\tA) Inserir, alterar, apagar ou informacoes, digite A.\n");
      printf("\tL) Leitura de dados gravados no disco, digite L.\n");
      printf("\tI) Imprimir os nomes da lista na tela, digite I.\n");
      printf("\tE) Salvar nomes da lista no arquivo, digite E.\n");
      printf("\tH) Help-me, digite H.\n");
      printf("\tF) Fim do programa, digite F.\n");
      printf("\nDigite -> ");
      scanf("%s",&menu);
      
      if (menu!='A'&&menu!='L'&&menu!='I'&&menu!='E'&&menu!='F'&&menu!='H')
         printf("\n\n\tOpcao de menu invalida!\n\n");

      switch (menu) {
         case ('A'): inclusao(); break;
         case ('L'): leitura(); break;
         case ('I'): imprimir(); break;
         case ('E'): escrever(); break;
         case ('H'): ajuda(); break;
         case ('F'): break;
         }
      } while (menu!='F');
}

//inclusao...
void inclusao ()
{
    nomes *aux, *next, *prev;
    aux = (nomes*)malloc(sizeof(nomes));
    char nome[30],tel[8];
      
      printf("Qual o nome a ser incluido/alterado/apagado?\n");
      printf("Nome: ");
      scanf("%s", &aux->nome);
      printf("Tel: ");
      scanf("%s", &aux->tele);
   strcpy(nome,aux->nome);
   strcpy(tel,aux->tele);
   if ((strcmp(aux->tele,"?")!=0)&&(strcmp(aux->tele,"/")!=0)) {
      
        aux->prox = NULL;
        aux->ante = NULL;
        if(first==NULL)
        {
            first = aux;
            last = aux;
            return;
        }
        
        next = first;
        
        prev = NULL;
        while(next)
        {
            if(strcmp(next->nome, aux->nome)<0)
            {
                prev = next;
                next = next->prox;
            }
            else
            {
                if(next->ante)
                {
                    next->ante->prox = aux;
                    aux->prox = next;
                    aux->ante = next->ante;
                    next->ante = aux;
                    return;
                }
                aux->prox = next;
                aux->ante = NULL;
                next->ante = aux;
                first = aux;
                return;   
            }    
        }
        prev->prox = aux;  //final
        aux->prox = NULL;
        aux->ante = prev;
        last = aux;
   } else {
   if (strcmp(aux->tele,"?")==0) {
      for (aux=first;aux;aux=aux->prox)
      {
         if (strcmp(aux->nome,nome)==0) {
            printf("\nNome: %s", aux->nome);
            printf("\nTel: %s\n", aux->tele); 
            break;
         }
      }
   } if (strcmp(aux->tele,"/")==0) {
      for(aux=first;aux;aux=aux->prox)
      {
         if(strcmp(aux->nome,nome)==0){
         strcpy(aux->tele,tel);
         break;
         }
      }
      if (aux->ante)   aux->ante->prox=aux->prox;
      else {
         first=aux->prox;
         if (first)   first->ante=NULL;
         }
         if (aux->prox)   aux->prox->ante=aux->ante;
         else last=aux->ante; }
   
}
}

//imprimir arquivo na tela...
void leitura()
{
FILE *arquivo;
char nome[30],tele[8];
arquivo=fopen("Agenda.txt","r");
if (!arquivo)
{
   printf("\n\n\tErro na abertura do arquivo!\n\n");
   exit(0);
}
printf("\n\t*****Nome*****|*****Fone*****\n");
while (!feof(arquivo)) {
    fscanf(arquivo,"%s %s ",&nome,&tele); 
    fprintf(stdout,"\t    %s         %s\n",nome,tele);
}
    fclose(arquivo);
}

//imprimir lista na tela...
void imprimir()
{
nomes *aux;
printf("\n\t*****Nome*****|*****Fone*****\n");
aux=first;
    if (aux==NULL) printf("\n\n\tLista Vazia!\n\n");
    else{
do
{
        if ((aux==last)||(aux->prox==NULL))
        {
        printf("\t    %s         %s\n", aux->nome,aux->tele);
        break;
        } else {
        printf("\t    %s         %s\n", aux->nome,aux->tele);
        aux=aux->prox;
        }
} while (aux!=NULL);
}
}

//salvar lista digitada...
void escrever ()
{
FILE *arquivo;
nomes *aux,*aux2;
aux=(nomes*)malloc(sizeof(nomes));
   
arquivo=fopen("Agenda.txt","a");
if (!arquivo)
{
   printf("\n\n\tErro na abertura do arquivo!\n\n");
   exit(0);
}
    printf("\nSalvando arquivo...\n");

aux=first;
while (aux!=NULL) {
    fprintf(arquivo,"%s %s ",aux->nome,aux->tele); 
    aux=aux->prox;
}
    fclose(arquivo);

aux=first;
   while (first) {
      aux=first;
      first=first->prox;
      free(aux);
} 

last=NULL;

}

//ajuda...
void ajuda()
{
   printf("\n\n1) Alterar nome: va em Adicionar digite o nome existente com o novo numero!");
   printf("\n2) Apagar nome: va em Adicionar digite o nome e coloque / no lugar do numero!");
   printf("\n3) Procurar nome: va em Adicionar digite o nome e coloque ? no lugar do numero!\n\n");
}

Scripts recomendados

Árvore binária

Exceções em C através de try-throw-catch

Função fatorial recursiva

NCURSES - Parte I

Lista encadeada de classe


  

Comentários

Nenhum comentário foi encontrado.


Contribuir com comentário




Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts