Agenda

Publicado por César Rocha 21/02/2006

[ Hits: 8.282 ]

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

C join

Um algoritmo genético para o TSP (Travel Salesman Problem)

Angelinux Scripts - Palpite para Megasena em C

Função para exibir todos os divisores de um numero

Decimal, Hexa, Char para Binário


  

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