Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <stdio.h>
- #include <stdlib.h>
- #include <string.h>
- #define TAM 50
- #define MAX 500
- typedef struct CONTATO{
- char *nome;
- char *sobrenome;
- int numeroT;
- char *email;
- struct CONTATO *prox;
- }contato;
- typedef struct LETRAS{
- char letra;
- struct LETRAS *prox;
- struct contato *lista_de_contatos;
- }letra_t;
- typedef struct FAVORITOS{
- struct contato * listadeContatos;
- struct Favoritos * prox;
- }favorito;
- contato *inserir(char *nome,char *sobrenome,char *email, int numero, contato *c){
- contato *novo;
- novo = (contato*)malloc(sizeof(contato));
- novo->nome =(char *)malloc(strlen(nome)+1);
- strcpy(novo->nome,nome);
- novo->sobrenome=(char *)malloc(strlen(sobrenome)+1);
- strcpy(novo->sobrenome,sobrenome);
- novo->email=(char *)malloc(strlen(email)+1);
- strcpy(novo->email,email);
- //inserção de contatos
- novo->numeroT=numero;
- novo->prox = c;
- return novo;
- }
- letra_t *insere_char(contato *c, letra_t *iniciais){
- char inicial_do_novo_contato= c->nome[0];
- if(iniciais == NULL){
- iniciais= malloc(sizeof(letra_t));
- iniciais->letra= inicial_do_novo_contato;
- iniciais->lista_de_contatos= c;
- iniciais->prox = NULL;}
- else {
- letra_t *buscar= iniciais;
- while(buscar != NULL){
- if(buscar->letra == inicial_do_novo_contato){
- c->prox= buscar->lista_de_contatos;
- buscar->lista_de_contatos= c;
- break;}
- else {buscar= buscar->prox;}}
- if(buscar == NULL){
- letra_t *tmp_iniciais= malloc(sizeof(letra_t));
- tmp_iniciais->letra= inicial_do_novo_contato;
- tmp_iniciais->lista_de_contatos= c;
- tmp_iniciais->prox= iniciais;
- iniciais= tmp_iniciais;}}
- return iniciais;}
- void ordenar(contato *c) {
- if(c == NULL || c->prox == NULL) return; //se for nulo(vazio), ou apenas 1 elemento
- contato *aux = c;
- contato *t;
- char s[MAX]; //precisa de espacao suficiente para armazenar o nome
- while(aux != NULL) {
- t = aux->prox;
- while(t != NULL) {
- if(strcmp(aux->nome, t->nome) > 0) { //se vir depois
- strcpy(s, aux->nome);
- strcpy(aux->nome, t->nome);
- strcpy(t->nome, s);
- }
- t = t->prox;
- }
- aux = aux->prox;
- }
- }
- void ordena_alfa(letra_t *l, contato *c) {
- contato *teste =c;
- if(l == NULL || l->prox == NULL) return; //se for nulo(vazio), ou apenas 1 elemento
- letra_t *aux = l;
- letra_t *t;
- char s; //precisa de espacao suficiente para armazenar o nome
- while(aux != NULL) {
- t = aux->prox;
- while(t != NULL) {
- if(aux->letra > t->letra) { //se vir depois
- s=aux->letra;
- aux->letra=t->letra;
- t->letra=s;
- }
- t = t->prox;
- }
- aux = aux->prox;
- }
- l->lista_de_contatos = teste;
- }
- void imprime(letra_t *iniciais){
- puts("**** Lista de contatos por iniciais");
- contato *contatos;
- while(iniciais != NULL){
- printf(" %c : ", iniciais->letra);
- contatos= iniciais->lista_de_contatos;
- while(contatos != NULL){
- printf("%s, ", contatos->nome);
- contatos= contatos->prox;}
- puts("\b\b.");
- iniciais= iniciais->prox;}
- return;}
- contato *retiranome(contato *c, char *nome){
- contato *ant = NULL;
- contato *p = c;
- while (p!=NULL && strcmp(p->nome,nome)!=0){
- ant = p;
- p = p->prox;
- }
- if(p == NULL){
- return c; //retira o nome
- }
- if(ant == NULL){
- c = p->prox;
- }else{
- ant->prox = p->prox;
- }
- free(p);
- return c;
- }
- contato *retirasobrenome(contato *c, char *sobrenome){
- contato *ant = NULL;
- contato *p = c;
- while (p!=NULL && strcmp(p->sobrenome,sobrenome)!=0){
- ant = p;
- p = p->prox; //retira o sobrenome
- }
- if(p == NULL){
- return c;
- }
- if(ant == NULL){
- c = p->prox;
- }else{
- ant->prox = p->prox;
- }
- free(p);
- return c;
- }
- favorito *inserir_Fav(favorito *f, contato *c, char nome[TAM], char sobrenome[TAM]){
- contato *contato_= c,*ant;
- favorito *favorito_ =(favorito*)malloc(sizeof(favorito));
- while(contato_!=NULL){
- ant = contato_;
- if(nome[TAM] == contato_->nome && sobrenome[TAM] == contato_->sobrenome){
- favorito_->listadeContatos = contato_;
- favorito_->prox =NULL;
- }else{
- contato_=contato_->prox;
- }
- }
- return favorito_;
- }
- void imprime_todos_fav(contato *c, favorito *f){
- contato *contatos=c;
- favorito *favoritos=f;
- while(favoritos!=NULL){
- if(favoritos == contatos){
- printf("%s %s\n",contatos->nome, contatos->sobrenome);
- favoritos = favoritos->prox;
- }
- }
- }
- void imprime_por_letra(contato *c,char info){
- contato *p = c;
- printf("\nContatos com a letra %c\n",info);
- while(p!=NULL){
- if(p->nome[0] == info){
- printf("%s %s\n",p->nome,p->sobrenome);
- p = p->prox;
- }
- }
- }
- main(){
- contato *c;
- letra_t *iniciais;
- favorito *f;
- c = NULL;
- iniciais = NULL;
- f = NULL;
- char nome[TAM];
- char sobrenome[TAM];
- char email[TAM];
- int numero;
- printf("_______________________\n");
- printf("Bem-Vindo a Sua Agenda\n");
- printf("_______________________\n");
- //printf("\n");
- int escolha;
- do{
- printf("\n");
- printf("1: Adicionar contato\n");
- printf("2: Remover Contato\n");
- printf("3: Exibir Contatos\n");
- printf("4: Favoritos\n");
- printf("5: Sair\n");
- printf("_______________________\n");
- printf("Escolha a Opcao Desejada: ");
- scanf("%d",&escolha);
- switch(escolha){
- case 1:
- printf("_______________________\n");
- printf("Voce Selecionou Adicionar Contato\n");
- printf("_______________________\n");
- printf("Nome do Contato: ");
- fflush(stdin);
- gets(nome);
- printf("Sobrenome do Contato: ");
- gets(sobrenome);
- fflush(stdin);
- printf("email do contato: ");
- gets(email);
- printf("Numero de Contato: ");
- scanf("%d",&numero);
- c =inserir(nome,sobrenome,email,numero,c);
- iniciais=insere_char(c,iniciais);
- break;
- //menu do programa
- case 2:
- printf("_______________________\n");
- printf("Voce Selecionou Remover Contato\n");
- printf("_______________________\n");
- printf("Digite o nome do contato: ");
- char nomec[TAM],sobrenomec[TAM];
- fflush(stdin);
- gets(nomec);
- printf("Digite o Sobrenome: ");
- gets(sobrenomec);
- c =retiranome(c,nomec);
- c =retirasobrenome(c,sobrenomec);
- printf("Contato removido com sucesso!\n");
- break;
- case 3:
- printf("_______________________\n");
- printf("Voce Selecionou Exibir Contatos\n");
- printf("_______________________\n");
- printf("1- Exibir todos \n");
- printf("2- Exibir por Letra\n");
- int escolhe;
- scanf("%d",&escolhe);
- if(escolhe == 1){
- ordenar(c);
- ordena_alfa(iniciais,c);
- imprime(iniciais);
- }else{
- char l;
- printf("Digite a Letra:");
- fflush(stdin);
- scanf("%c",&l);
- imprime_por_letra(c,l);
- }
- break;
- case 4:
- printf("_______________________\n");
- printf("Voce Selecionou Favoritos\n");
- printf("_______________________\n");
- printf("<1> Adicionar favorito\n");
- printf("<2> Exibir favorito\n");
- printf("<3> Retirar favorito\n");
- int esc;
- scanf("%d",&esc);
- if(esc == 1){
- char nome[TAM];
- char sobrenome[TAM];
- printf("Digite o nome:");
- fflush(stdin);
- gets(nome);
- printf("Digite o sobrenome:");
- gets(sobrenome);
- inserir_Fav(f,c,nome,sobrenome);
- printf("Contato adicionado com sucesso!");
- } else if(esc == 2){
- printf("Voce selecionou exibir todos\n");
- imprime_todos_fav(c,f);
- } else{
- }
- break;
- default:
- printf("Fim do Programa");
- break;
- }
- }while(escolha != 5);
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement