Linux slogan
Visite também: Segurança Linux · BR-Linux.org · Dicas-L · Doode · NoticiasLinux · SoftwareLivre.org · UnderLinux



» Screenshot
Linux: epsxe 1.60llin
Por Al_Qaeda
» Login
Login:
Senha:

Se você ainda não possui uma conta, clique aqui.

Esqueci minha senha



Scripts

Linux user

Publicado por César Rocha em 21/02/2006    [ 5471 hits ]

Login: cesroc, 14375 pontos

   


Descrição

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

[ Download: agenda.c ]   [ Enviar nova versão ]

[ 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
   Script Linux recomendado Gerador de CPF
   Script Linux recomendado Busca Binária - Não recursivo
   Script Linux recomendado calculadora em C
   Script Linux recomendado ArkaPoing (arkanoid+pingpoing hehe)
   Script Linux recomendado Função simples recursiva para fibonacci

Comentários
Nenhum comentário foi encontrado.

Contribuir com comentário


  
Para executar esta ação você precisa estar logado no site, caso contrário, tudo o que for digitado será perdido.
Responsável pelo site: Fábio Berbert de Paula - Conteúdo distribuído sob licença GNU FDL
Site hospedado por:

Viva o Linux

A maior comunidade Linux da América Latina! Artigos, dicas, tutoriais, fórum, scripts e muito mais. Ideal para quem busca auto-ajuda em Linux.