Agenda eletrônica feita em C

Publicado por Marcus Vinícius 14/09/2006

[ Hits: 16.522 ]

Download agenda.c




Agenda eletrônica feita em C que permite o cadastro de clientes com os seguintes atributos: nome, telefone e e-mail. O programa também permite a listagem de clientes tanto em ordem alfabética quanto por ordem de cadastro. Também é possível a pesquisa de clientes por nome ou por número de cadastro. No final do programa, todos os dados de cadastro de clietes são salvos em arquivo. Obs.: Para compiladores gcc.

  



Esconder código-fonte

/*Autor:Marcus Vinícius Souza Costa
Descrição:Agenda eletrônica feita em C que permite o cadastro de Clientes 
com os seguintes atributos:Nome,telefone e e-mail.
    O programa também permite a listagem de clientes tanto em ordem alfabética
quanto por ordem de cadastro.Também é possível a pesquisa de clientes por nome
ou por número de cadastro.
   No final do programa é todos os dados de cadastro de clietes são salvos
no em disco.
OBS:Para compiladores GCC*/

//Declaração das bibliotecas
# include <stdio_ext.h>
# include<stdlib.h>
   // Declaração de variaveis GLOBAIS
   int cont,n=0,o,resp=0,k=0; 
   int pos[200];
   char email[200][50],nome[200][50],aux[1][50],tel[200][50],vet[255];

void mostrarcliente(){ // Essa função mostra os clientes em ordem de inscrição
   int op,i,j;
   char ch;
   if (n!=0){ //Verfica se existe cadsatro
      printf("Você possui %d cliente(s) cadastrados até agora\n\n",n);
      printf("Você deseja visualizar todos?(1-para sim)|(outra tecla para não): ");
      scanf("%d",&op);
      system("clear");
      if (op==1){
         j=0;
         while(j<n){
            retorno:
            for (i=0;i<n;i++){
               if (j==pos[i]){
                  printf("Número de inscrição:%.4d\n",pos[i]+1);
                  printf("Nome:%s",nome[i]);
                  printf("Telefone:%s",tel[i]);
                  printf("E-mail:%s\n\n",email[i]);
                  j++;
                  goto retorno;
               }
            }
         }
      }
   }else{
      printf("Não há clientes cadastrados");
   }
   printf("\n\n\t\t\tAperte ENTER para voltar ao menu principal");
   __fpurge(stdin);
   ch=getchar();
   main();
}
void ordem(){ // Ordenação por Seleção (em ordem Alfabética)
   int j,i,indi,indj;
   char ch;
   if (n!=0){
      for (i=n-k;i<n;i++){
         for (j=0;j<n;j++){ //Ordena os nomes
            if (nome[i][0]<nome[j][0]){
               //Colocando em ordem os nomes
               strcpy(aux[0],nome[i]);
               strcpy(nome[i],nome[j]);
               strcpy(nome[j],aux[0]);
               //Colocando em ordem o número de telefone
               strcpy(aux[0],tel[i]);
               strcpy(tel[i],tel[j]);
               strcpy(tel[j],aux[0]);
               //Colocando em ordem o e-mail
               strcpy(aux[0],email[i]);
               strcpy(email[i],email[j]);
               strcpy(email[j],aux[0]);
               //Colocando em ordem o número do candidato
               k=pos[i];
               pos[i]=pos[j];
               pos[j]=k;
            }else if((nome[i][0]==nome[j][0]) && (i!=j)){ //Verfica se a primeira letra do nome,se forem iguais
               indi=0;
               indj=0;
               while(nome[i][indi]==nome[j][indj]){
                  indi++;
                  indj++;
                  again:
                  if (nome[i][indi]<nome[j][indj]/* && nome[i][indi]!='_' && nome[j][indj]!='_' */) {
                     //Colocando em ordem os nomes
                     strcpy(aux[0],nome[i]);
                     strcpy(nome[i],nome[j]);
                     strcpy(nome[j],aux[0]);
                     //Colocando em ordem o número de telefone
                     strcpy(aux[0],tel[i]);
                     strcpy(tel[i],tel[j]);
                     strcpy(tel[j],aux[0]);
                     //Colocando em ordem o e-mail
                     strcpy(aux[0],email[i]);
                     strcpy(email[i],email[j]);
                     strcpy(email[j],aux[0]);
                     //Colocando em ordem o número do candidato
                     k=pos[i];
                     pos[i]=pos[j];
                     pos[j]=k;
                  }if (nome[i][indi]=='_' || nome[j][indj]=='_'){
                     if (nome[i][indi]=='_'){
                        indi++;
                     }if (nome[j][indj]=='_'){
                        indj++;
                     }
                     goto again;
                  }
               }
            }
         }
      }
      system("clear");
      printf("Número de inscrição\t\tNome\n\n");
      for (i=0;i<n;i++){
         printf("\t%.4d\t\t\t%s\n",pos[i]+1,nome[i]);
      }//fim do for
      k=resp*(-1);
      
   }else{
      printf("Não existem clientes cadastrados: \n\n");
   }
   printf("\n\n\t\t\t\tPressione ENTER para voltar ao menu incial");
   __fpurge(stdin);
   ch=getchar();
   main();
}
void cadastro (){
   int j,i,conv;
   char ch;
   system("clear"); 
   printf("\n Digite a quantidade de clientes que deseja cadastrar: ");
   scanf("%d",&resp);
   system("clear");
   for (j=n;j<resp+n;j++){
      repeticao:
      system("clear");   
      printf("----------------\n");
      printf("| Cliente %.4d |\n",j+1);
      printf("----------------\n\n");
      printf("\nEntre com o nome(sem caracteres especiais): ");
      __fpurge(stdin);// limpa o bufer usado pelo teclado (linux)
      fgets(nome[j],40,stdin);
      for (i=strlen(nome[j])-2;i>=0;i--){
         if ((nome[j][i]<'0') || (nome[j][i]>'z')){
            printf("Não é permitido o uso de caracteres especias e nem de espaço em branco,favor aperte ");
            printf("ENTER para inserir outro nome no char %c e i %d\n",nome[j][i],i);
            __fpurge(stdin);
            ch=getchar();
            goto repeticao;
         }
      }
      printf("Entre com o telefone: ");
      fgets(tel[j],20,stdin);
      printf("Entre com o email: ");
      __fpurge(stdin);
      fgets(email[j],45,stdin);
      pos[j]=j;
   }
   printf("\n\n");
   n=n+resp;
   k=resp;
       for (i=n-k;i<n;i++){
      for (j=strlen(nome[i])-2;j>=0;j--)
          nome[i][j]=toupper(nome[i][j]);
   }
   main();
}

void clientes(){ // Pesquisa Sequêncial
     int j,op,num,cont=0,ch;
   char cliente [255];
   if (n!=0){
      volta:
           system("clear");
           printf("Escolha uma das opções:\n");
           printf("1-Pesquisa por nome\n");
           printf("2-Pesquisa por número de cadastro\n");
           printf("0-Voltar ao Menu principal\n");
           printf("\tEscolha aqui:");
           scanf("%d",&op);
           if ((op<0) || (op>2)){
                 printf("Operação inválida,aperte ENTER para continuar o programa\n");
                 __fpurge(stdin);
                 ch=getchar();
                 goto volta;
           }
           if (op==1){
                    printf("\nDigite o nome para a pesquisa: ");
               __fpurge(stdin); //limpa o buffer do teclado
                    fgets(cliente,40,stdin);
                    for (j=strlen(cliente)-2;j>=0;j--)
            cliente[j]=toupper(cliente[j]);
         system("clear");
         for (j=0;j<n;j++){
               if (0==strcmp(cliente,nome[j])) { //Verifica se há o nome no cadastro
                 if (cont==0)
                    printf("*********************************\n");   
                 printf("Número de cadastro:%.4d\n\n",pos[j]+1);
                 printf("Nome:%s\n",nome[j]);
                 printf("Telefone:%s\n",tel[j]);
                 printf("E-mail:%s\n",email[j]);
                 cont++;
                       printf("*********************************\n");
                 if (j==n-1){
                    printf("\n\n\tForam(foi) encontrado(s) %d cliente(s)\n",cont);
                 }
               }else if((j==n-1) && (cont==0)){
                printf("Cliente inexistente.Favor aperte ENTER para continuação do programa\n");
               }
                     }
           }else if(op==2){
                    printf("Digite o número para pesquisa:");
                    scanf("%d",&num);
                    if (num>n || num<=0){
                       printf("Cliente inexistente.Favor aperte ENTER para continuação do programa\n");
                       __fpurge(stdin);
                       ch=getchar();
                       goto volta;
                    }
                    system("clear");
         for (j=0;j<n;j++){
                        if (pos[j]+1==num){
                              printf("Número de cadastro:%.4d\n\n",pos[j]+1);
               printf("Nome:%s\n",nome[j]);
               printf("Telefone:%s\n",tel[j]);
               printf("E-mail:%s\n",email[j]);
               break;
            }
                    }//fim do for
           }else{
         main();
      }
   }else{
      printf("\n\nNão há clientes cadastrados,aperte ENTER para retornar ao Menu Principal\n");
   }
      printf("\n\n\t\tAperte ENTER para retornar ao Menu Principal\n"); 
      __fpurge(stdin);
      ch=getchar();
      main();
} //Fim da função clientes

void gravaremdisco (){ // Função de Salvar o porgrama em DISCO e sair
       int i;
       FILE *arquivo;
       arquivo = fopen ("arquivo.txt", "w");

       for (i = 0; i <n; i++){
               fprintf (arquivo, "%s %s %s\n\n", nome[i], tel[i], email[i]);
       }
       fclose (arquivo);
       printf("\n   Arquivo Gravado com SUCESSO");
       printf("\n\n  Obrigado por utilizar o programa! :-)\n\n\n\n ");
       exit(0);
}
//FIM DA FUNÇÃO CLIENTES

int main(){
   char ch;
    do{
      system("clear");
      printf("\n\n\n     ===========================\n");
      printf("     =    AGENDA ELETRÔNICA    =");
      printf("\n     ===========================\n");
      printf ("\n             MENU \n");
      printf("        CONTROLE DE CLIENTES\n");
      printf ("\n\t1-Cadastro");
      printf ("\n\t2-Pesquisar clientes");
      printf ("\n\t3-Listar em ordem alfabetica");
      printf ("\n\t4-Mostrar número de clientes");
      printf ("\n\t5-Sair & Gravar em Disco");
      __fpurge(stdin);
      printf ("\n\n    Escolha uma opcao: ");
      scanf ("%d", & cont);
      switch (cont){
      
         case 1:
            cadastro();
         break;
   
         case 2:
            clientes();
         break;
   
         case 3:
            ordem();
         break;
   
         case 4:
            mostrarcliente();
         break;
         
         case 5:
            gravaremdisco();
         break;
         
         default:
            printf("\n\tOpcao invalida\n");
            printf("Pressione ENTER para Retornar ao MENU: ");
            __fpurge(stdin);
            ch=getchar ();
            main();
      } //Fim do switch
   }while((cont<=1)||(cont>=6));
}

Scripts recomendados

Listando processos via /proc/PID

Tabuada com QT4

Biblioteca ctype.h

Imprimindo uma arvore graficamente

Registro


  

Comentários
[1] Comentário enviado por tryvon em 08/07/2008 - 02:21h

Muito bom, esse código vai me ajudar muito em outros programas.

[2] Comentário enviado por andrezc em 24/04/2009 - 19:43h

Muito bom mesmo amigo, ta de parabéns !

[3] Comentário enviado por cesar em 23/07/2009 - 11:33h

O único problema é que ao salvar o arquivo .txt você utiliza "w" ou seja, ele sempre irá criar o arquivo, mesmo que ele já exista e o arquivo atual será deletado!

Apenas algumas modificações e fica bom :}

Parabéns!

[]'s

[4] Comentário enviado por andrezc em 22/08/2009 - 16:09h

Muito bom, só não gostei desse "goto" qur você usou, fora isso ta bem completo.


Contribuir com comentário




Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts