Advertisement
Guest User

Untitled

a guest
Sep 29th, 2018
142
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 8.46 KB | None | 0 0
  1.                
  2.                 #include <stdio.h>
  3.                 #include <stdlib.h>
  4.                 #include <string.h>
  5.  
  6.                 #define TAM 50
  7.                 #define MAX 500
  8.                 typedef struct CONTATO{
  9.                     char *nome;
  10.                     char *sobrenome;
  11.                     int numeroT;
  12.                     char *email;
  13.                     struct CONTATO *prox;
  14.                
  15.                    
  16.                 }contato;
  17.                
  18.                 typedef struct LETRAS{
  19.                    
  20.                     char letra;
  21.                     struct LETRAS *prox;
  22.                     struct contato *lista_de_contatos;
  23.                 }letra_t;
  24.                
  25.                 typedef struct FAVORITOS{
  26.                
  27.                 struct contato * listadeContatos;
  28.                 struct Favoritos * prox;
  29.                        
  30.                 }favorito;
  31.                
  32.        
  33.                
  34.                 contato *inserir(char *nome,char *sobrenome,char *email, int numero, contato *c){
  35.                     contato *novo;
  36.                     novo = (contato*)malloc(sizeof(contato));
  37.                     novo->nome =(char *)malloc(strlen(nome)+1);
  38.                     strcpy(novo->nome,nome);
  39.                    
  40.                     novo->sobrenome=(char *)malloc(strlen(sobrenome)+1);
  41.                     strcpy(novo->sobrenome,sobrenome);
  42.                    
  43.                     novo->email=(char *)malloc(strlen(email)+1);
  44.                     strcpy(novo->email,email);
  45.                                                                     //inserção de contatos
  46.                     novo->numeroT=numero;
  47.                     novo->prox = c;
  48.                     return novo;
  49.                 }
  50.                
  51.                 letra_t *insere_char(contato *c, letra_t *iniciais){
  52.                 char inicial_do_novo_contato= c->nome[0];
  53.  
  54.                  if(iniciais == NULL){
  55.                  iniciais= malloc(sizeof(letra_t));
  56.  
  57.                 iniciais->letra= inicial_do_novo_contato;
  58.                 iniciais->lista_de_contatos= c;
  59.                 iniciais->prox = NULL;}
  60.              
  61.                 else {
  62.                 letra_t *buscar= iniciais;
  63.            
  64.                 while(buscar != NULL){
  65.                   if(buscar->letra == inicial_do_novo_contato){
  66.                     c->prox= buscar->lista_de_contatos;
  67.                     buscar->lista_de_contatos= c;
  68.                     break;}
  69.                  
  70.                   else {buscar= buscar->prox;}}
  71.                
  72.                 if(buscar == NULL){
  73.                   letra_t *tmp_iniciais= malloc(sizeof(letra_t));
  74.            
  75.                   tmp_iniciais->letra= inicial_do_novo_contato;
  76.                   tmp_iniciais->lista_de_contatos= c;
  77.                   tmp_iniciais->prox= iniciais;
  78.                   iniciais= tmp_iniciais;}}
  79.              
  80.               return iniciais;}
  81.                    
  82.            
  83.                
  84.             void ordenar(contato *c) {
  85.                  
  86.                     if(c == NULL || c->prox == NULL) return; //se for nulo(vazio), ou apenas 1 elemento
  87.                     contato *aux = c;
  88.                     contato *t;
  89.                     char s[MAX]; //precisa de espacao suficiente para armazenar o nome
  90.                  
  91.                     while(aux != NULL) {
  92.                       t = aux->prox;
  93.                       while(t != NULL) {
  94.                         if(strcmp(aux->nome, t->nome) > 0) { //se vir depois
  95.                             strcpy(s, aux->nome);
  96.                             strcpy(aux->nome, t->nome);
  97.                             strcpy(t->nome, s);
  98.                         }
  99.                         t = t->prox;
  100.                       }
  101.                       aux = aux->prox;
  102.                     }
  103.                    
  104.                 }
  105.                
  106.                     void ordena_alfa(letra_t *l, contato *c) {
  107.                     contato *teste =c;
  108.                    
  109.                     if(l == NULL || l->prox == NULL) return; //se for nulo(vazio), ou apenas 1 elemento
  110.                     letra_t *aux = l;
  111.                     letra_t *t;
  112.                    
  113.                     char s; //precisa de espacao suficiente para armazenar o nome
  114.                  
  115.                     while(aux != NULL) {
  116.                       t = aux->prox;
  117.                       while(t != NULL) {
  118.                         if(aux->letra > t->letra) { //se vir depois
  119.                             s=aux->letra;
  120.                             aux->letra=t->letra;
  121.                             t->letra=s;
  122.                        
  123.                         }
  124.                         t = t->prox;
  125.                       }
  126.                       aux = aux->prox;
  127.                     }
  128.                     l->lista_de_contatos = teste;
  129.                      
  130.  
  131.                    
  132.                    
  133.                 }
  134.                
  135.                
  136.                
  137.             void imprime(letra_t *iniciais){
  138.               puts("**** Lista de contatos por iniciais");
  139.            
  140.               contato *contatos;
  141.              
  142.               while(iniciais != NULL){
  143.               printf("  %c :  ", iniciais->letra);
  144.                contatos= iniciais->lista_de_contatos;
  145.                
  146.                 while(contatos != NULL){
  147.                   printf("%s, ", contatos->nome);
  148.                   contatos= contatos->prox;}
  149.            
  150.                   puts("\b\b.");
  151.                 iniciais= iniciais->prox;}
  152.            
  153.               return;}
  154.                
  155.                 contato *retiranome(contato *c, char *nome){
  156.                     contato *ant = NULL;
  157.                     contato *p = c;
  158.                    
  159.                     while (p!=NULL && strcmp(p->nome,nome)!=0){
  160.                         ant = p;
  161.                         p = p->prox;
  162.                     }
  163.                      if(p == NULL){
  164.                         return c;                       //retira o nome
  165.                      }
  166.                      if(ant == NULL){
  167.                         c = p->prox;
  168.                      }else{
  169.                         ant->prox = p->prox;
  170.                      }
  171.                     free(p);
  172.                     return c;
  173.                 }
  174.                
  175.                     contato *retirasobrenome(contato *c, char *sobrenome){
  176.                     contato *ant = NULL;
  177.                     contato *p = c;
  178.                    
  179.                     while (p!=NULL && strcmp(p->sobrenome,sobrenome)!=0){
  180.                         ant = p;
  181.                         p = p->prox;                //retira o sobrenome
  182.                     }
  183.                      if(p == NULL){
  184.                         return c;
  185.                      }
  186.                      if(ant == NULL){
  187.                         c = p->prox;
  188.                      }else{
  189.                         ant->prox = p->prox;
  190.                      }
  191.                     free(p);
  192.                     return c;
  193.                 }
  194.                
  195.                 favorito *inserir_Fav(favorito *f, contato *c, char nome[TAM], char sobrenome[TAM]){
  196.                     contato *contato_= c,*ant;
  197.                     favorito *favorito_ =(favorito*)malloc(sizeof(favorito));
  198.                     while(contato_!=NULL){
  199.                         ant = contato_;
  200.                     if(nome[TAM] == contato_->nome && sobrenome[TAM] == contato_->sobrenome){
  201.                     favorito_->listadeContatos = contato_;
  202.                     favorito_->prox =NULL;
  203.                    
  204.                     }else{
  205.                         contato_=contato_->prox;
  206.                     }
  207.                    
  208.                     }
  209.                     return favorito_;
  210.                 }
  211.                 void imprime_todos_fav(contato *c, favorito *f){
  212.                     contato *contatos=c;
  213.                     favorito *favoritos=f;
  214.                     while(favoritos!=NULL){
  215.                         if(favoritos == contatos){
  216.                         printf("%s %s\n",contatos->nome, contatos->sobrenome);
  217.                         favoritos = favoritos->prox;   
  218.                         }
  219.                        
  220.                     }
  221.                    
  222.                    
  223.                    
  224.                 }
  225.                
  226.                 void imprime_por_letra(contato *c,char info){
  227.                     contato *p = c;
  228.                     printf("\nContatos com a letra %c\n",info);
  229.                     while(p!=NULL){
  230.                         if(p->nome[0] == info){        
  231.                         printf("%s %s\n",p->nome,p->sobrenome);        
  232.                         p = p->prox;
  233.                         }                  
  234.                     }              
  235.                    
  236.                 }
  237.  
  238.  
  239.  
  240.  
  241.  
  242. main(){
  243. contato *c;
  244. letra_t *iniciais;
  245. favorito *f;
  246. c = NULL;
  247. iniciais = NULL;
  248. f = NULL;
  249. char nome[TAM];
  250. char sobrenome[TAM];
  251. char email[TAM];
  252. int numero;
  253.         printf("_______________________\n");
  254.         printf("Bem-Vindo a Sua Agenda\n");
  255.         printf("_______________________\n");
  256.         //printf("\n");
  257. int escolha;
  258.  
  259. do{
  260. printf("\n");
  261. printf("1: Adicionar contato\n");
  262. printf("2: Remover Contato\n");
  263. printf("3: Exibir Contatos\n");
  264. printf("4: Favoritos\n");
  265. printf("5: Sair\n");
  266.  
  267. printf("_______________________\n");
  268. printf("Escolha a Opcao Desejada: ");
  269. scanf("%d",&escolha);
  270.  
  271.  
  272. switch(escolha){
  273.    
  274.     case 1:
  275.     printf("_______________________\n");
  276.     printf("Voce Selecionou Adicionar Contato\n");
  277.     printf("_______________________\n");   
  278.     printf("Nome do Contato: ");   
  279.     fflush(stdin);
  280.     gets(nome);
  281.     printf("Sobrenome do Contato: ");
  282.     gets(sobrenome);
  283.     fflush(stdin);
  284.     printf("email do contato: ");
  285.     gets(email);
  286.     printf("Numero de Contato: ");
  287.     scanf("%d",&numero);
  288.     c =inserir(nome,sobrenome,email,numero,c);
  289.     iniciais=insere_char(c,iniciais);      
  290.     break;
  291.                                                         //menu do programa
  292.     case 2:
  293.     printf("_______________________\n");
  294.     printf("Voce Selecionou Remover Contato\n");
  295.     printf("_______________________\n");
  296.     printf("Digite o nome do contato: ");
  297.     char nomec[TAM],sobrenomec[TAM];
  298.     fflush(stdin);
  299.     gets(nomec);
  300.     printf("Digite o Sobrenome: ");
  301.     gets(sobrenomec);
  302.     c =retiranome(c,nomec);
  303.     c =retirasobrenome(c,sobrenomec);
  304.     printf("Contato removido com sucesso!\n");
  305.     break; 
  306.    
  307.     case 3:
  308.     printf("_______________________\n");
  309.     printf("Voce Selecionou Exibir Contatos\n");
  310.     printf("_______________________\n");
  311.     printf("1- Exibir todos \n");
  312.     printf("2- Exibir por Letra\n");
  313.     int escolhe;
  314.     scanf("%d",&escolhe);
  315.     if(escolhe == 1){
  316.     ordenar(c);
  317.     ordena_alfa(iniciais,c);   
  318.     imprime(iniciais); 
  319.     }else{
  320.     char l;
  321.     printf("Digite a Letra:");
  322.     fflush(stdin); 
  323.     scanf("%c",&l);
  324.     imprime_por_letra(c,l);
  325.    
  326.     }  
  327.    
  328.     break;
  329.    
  330.     case 4:
  331.     printf("_______________________\n");
  332.     printf("Voce Selecionou Favoritos\n");
  333.     printf("_______________________\n");
  334.     printf("<1> Adicionar favorito\n");
  335.     printf("<2> Exibir favorito\n");
  336.     printf("<3> Retirar favorito\n");
  337.     int esc;
  338.     scanf("%d",&esc);
  339.     if(esc == 1){
  340.     char nome[TAM];
  341.     char sobrenome[TAM];
  342.     printf("Digite o nome:");
  343.     fflush(stdin);
  344.     gets(nome);
  345.     printf("Digite o sobrenome:");
  346.     gets(sobrenome);
  347.     inserir_Fav(f,c,nome,sobrenome);
  348.     printf("Contato adicionado com sucesso!"); 
  349.     }   else if(esc == 2){
  350.         printf("Voce selecionou exibir todos\n");
  351.         imprime_todos_fav(c,f);
  352.     }   else{
  353.        
  354.     }
  355.        
  356.     break;
  357.    
  358.     default:
  359.         printf("Fim do Programa");
  360.     break;
  361.    
  362.    
  363.    
  364.    
  365. }
  366.     }while(escolha != 5);  
  367.    
  368.    
  369.    
  370. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement