Baixe o app para aproveitar ainda mais
Esta é uma pré-visualização de arquivo. Entre para ver o arquivo original
#include<stdio.h> #include<string.h> #include<stdlib.h> #include<conio.h> #include <locale.h> #include <ctype.h> int max = 100; // Variavel max limita a quantidade de contatos em 100. int z = -1, op = 0; // Variavel z inicia o contador de contatos. | Variável op correspondente as opções de escolha do menu. // A variável é iniciada em 0 para eliminar o risco de se encontrar sujeiras na memória. struct nascimento { // Registro de data de nascimento, o registro irá armazenar dia e mês. int dia, mes; }; struct contato { // Registro onde são armazenadas as informações do contato. char nome[30]; char sobrenome[30]; // Uma struct pode manipular qualquer tipo de variavel. Permite declarar uma struct dentro de outra char email[30]; int telefone; struct nascimento aniversario; // Registro de aniversario dentro declarado no registro de informações. }; struct contato Adicionar (struct contato cont[]) { // Função para adicionar as informações do contato. struct contato aux[30]; //<-- Variavel para auxiliar na ordenação dos contatos. int i = 0, j = 0; printf ("\n Nome: "); scanf ("%s", &cont[z].nome); strupr(cont[z].nome); //<-- Função para converter a string para letras maisculas. printf (" Sobrenome: "); scanf ("%s", &cont[z].sobrenome); strupr(cont[z].sobrenome); printf (" E-mail: "); scanf ("%s", &cont[z].email); strupr(cont[z].email); printf (" Telefone: "); scanf ("%d", &cont[z].telefone); printf (" Dia do Aniversario: "); scanf ("%d", &cont[z].aniversario.dia); printf (" Mês do Aniversario: "); scanf ("%d", &cont[z].aniversario.mes); printf ("\n Contato adicionado com sucesso!"); for (i=0; i<=z; i++) { for (j=i+1; j<=z; j++) { if (strcmp(cont[i].nome, cont[j].nome) > 0) { //<-- Função que compara as strings e as coloca em ordem alfabética. aux[i] = cont[i]; cont[i] = cont[j]; cont[j] = aux[i]; } else if (strcmp(cont[i].nome, cont[j].nome) == 0) if (strcmp(cont[i].sobrenome, cont[j].sobrenome) > 0) { aux[i] = cont[i]; cont[i] = cont[j]; cont[j] = aux[i]; } } } getch (); system ("cls"); return cont[max]; } struct contato Exibir_Decrescente(int x, struct contato cont[]) { // Função para exibir os contatos de forma decrescente, de 'Z' a 'A'. if(x<0) { getch(); system ("cls"); return ; } if (x>=0) { printf ("\n %s %s", cont[x].nome, cont[x].sobrenome); return Exibir_Decrescente(x-1, cont); } } struct contato Exibir_Crescente(int x, struct contato cont[], int i) { // Função para exibir os contatos de forma crescente, de 'A' a 'Z'. if (i>x) { getch(); system ("cls"); return ; } if (i<=x) { printf ("\n %s %s ", cont[i].nome, cont[i].sobrenome); return Exibir_Crescente(x, cont, i+1); } } void Buscar (struct contato cont[], int x) { int btelefone, i = 0, op1; int inc = 0, k = 0, k1 = 0; char bnome[30], bsobrenome[30]; printf ("\n Informe nome(01) ou telefone(02): "); // O usuário informa 01, caso forneça o nome, ou 02, caso forneça o telefone. scanf ("%d", &op1); if(op1 == 1) { printf ("\n Nome: "); scanf ("%s", &bnome); strupr(bnome); for(i=0; i<=x; i++) if (strcmp (cont[i].nome, bnome) == 0) inc++; // Variável que é incrementada toda vez que um nome se repete. } else if (op1 == 2){ printf ("\n Telefone: "); scanf ("%d", &btelefone); } else { printf("\n Informação Incorreta!\n"); } if (inc > 1) { // Se há mais de um contato com um mesmo nome, é necessário verificar o sobrenome. printf ("\n Digite o sobrenome: "); scanf("%s", &bsobrenome); strupr(bsobrenome); for(i=0; i<=x; i++) if ((strcmp (cont[i].nome, bnome) == 0 ) && (strcmp (cont[i].sobrenome, bsobrenome) == 0 )) { // Se o nome e sobrenome que o usuário digitou existe na lista de contatos, a variável k é incrementada. k++; break; } } else { // Condição para os casos em que não há necessidade de verificar o sobrenome. for(i=0; i<=x; i++) if(cont[i].telefone == btelefone || (strcmp (cont[i].nome, bnome) == 0)) { // Se o telefone ou nome digitado existe na lista de contatos, a variável k1 é incrementada. k1++; break; } } if (k > 0 || k1 > 0) { // Se uma dessas variáveis foi incrementada, significa que o usuário encontrou o contato desejado. system ("cls"); printf("\n Informações do Contato: \n\n"); printf ("\n Nome: %s\n Sobrenome: %s\n E-mail: %s\n Telefone: %d\n Aniversário: %d/%d\n", cont[i].nome, cont[i].sobrenome, cont[i].email, cont[i].telefone, cont[i].aniversario.dia, cont[i].aniversario.mes); } else { printf("\n O contato digitado não existe na lista de contatos."); } getch(); system("cls"); } void Excluir (struct contato cont[], int x) { int btelefone, a = 0, i = 0, op1 = 0, inc = 0, k = 0, k1 = 0, op2 = 0; char bnome[30], bsobrenome[30]; printf ("\n Informe nome(01) ou telefone(02): "); // O usuário informa 01, caso forneça o nome, ou 02, caso forneça o telefone. scanf ("%d", &op1); if(op1 == 1) { printf ("\n Nome: "); scanf ("%s", &bnome); strupr(bnome); for(i=0; i<=x; i++) if (strcmp (cont[i].nome, bnome) == 0) inc++; //Se há nomes iguais, a variável inc será incrementada. } else if (op1 == 2) { printf ("\n Telefone: "); scanf ("%d", &btelefone); } else { printf("\n Informação Incorreta!\n"); } if (inc > 1) { printf ("\n Digite o sobrenome: "); scanf("%s", &bsobrenome); strupr(bsobrenome); for(i=0; i<=x; i++) if ((strcmp (cont[i].nome, bnome) == 0 ) && (strcmp (cont[i].sobrenome, bsobrenome) == 0 )) { // Se o nome e sobrenome que o usuário digitou existe na lista de contatos, a variável k é incrementada. k++; break; } } else { // Condição para os casos em que não há necessidade de verificar o sobrenome. for(i=0; i<=x; i++) if(cont[i].telefone == btelefone || (strcmp (cont[i].nome, bnome) == 0)) { k1++; break; } } if (k > 0 || k1 > 0) { // Se uma dessas variáveis foi incrementada, o usuário encontrou o contato que deseja excluir. system ("cls"); printf("\n\n Você deseja realmente excluir esse contato?\n Sim(01) ou Não(02): "); scanf("%d",&op2); switch(op2) { case 1: for(a=i;a<z;a++) // For para percorrer o vetor a partir da posição do contato que será excluído até o final. cont[a] = cont[a+1]; // O contato que está na posição à frente do outro que será excluído é armazenado na posição anterior do vetor, e assim, sucessivamente. z--; // Como um contato foi excluído, uma posição a menos está ocupada no vetor, então decrementa-se a variável z. printf("\n Contato excluído com sucesso!"); break; case 2: break; // Não faz nenhum ação, apenas retorna para o Menu principal. default: printf("\n Opção inválida!"); break; } } else { // Condição que indica que o contato procurado não existe na lista de contatos. printf("\n O contato digitado não existe na lista de contatos."); } getch (); system ("cls"); } void Editar (struct contato cont[], int x) { int btelefone = 0, etel = 0, edia = 0, emes = 0; int i = 0, op1 = 0, inc = 0, k = 0, k1 = 0; char bnome[30], bsobrenome[30], enome[30], esobre[30], eemail[30]; printf ("\n Informe nome(01) ou telefone(02): "); // O usuário informa 01, caso forneça o nome, ou 02, caso forneça o telefone. scanf ("%d", &op1); if (op1 == 1) { printf ("\n Nome: "); scanf ("%s", &bnome); strupr(bnome); for(i=0; i<=x; i++) if (strcmp (cont[i].nome, bnome) == 0) inc++; // Se há nomes iguais, inc será incrementada. } else if (op1 == 2) { printf ("\n Telefone: "); scanf ("%d", &btelefone); } else { printf("\n Informação Incorreta!\n"); } if (inc > 1) { printf ("\n Digite o sobrenome: "); scanf("%s", &bsobrenome); strupr(bsobrenome); for(i=0; i<=x; i++) if ((strcmp (cont[i].nome, bnome) == 0 ) && (strcmp (cont[i].sobrenome, bsobrenome) == 0 )) { // Se o nome e sobrenome que o usuário digitou existe na lista de contatos, a variável k é incrementada. k++; break; } } else { // Condição para os casos em que não há necessidade de verificar o sobrenome. for(i=0; i<=x; i++) if (cont[i].telefone == btelefone || (strcmp (cont[i].nome, bnome) == 0) ) { k1++; break; } } if (k > 0 || k1 > 0) { // Se uma dessas variáveis foi incrementada, o usuário encontrou o contato que deseja editar. system ("cls"); printf("\n Digite as novas informações do contato: \n\n"); // O usuário fornace os novos dados do contato. printf(" Nome: "); scanf("%s",&enome); strupr(enome); printf(" Sobrenome: "); scanf("%s",&esobre); strupr(esobre); printf(" E-mail: "); scanf("%s",&eemail); strupr(eemail); printf(" Telefone: "); scanf("%ld",&etel); printf(" Dia do Aniversário: "); scanf("%d",&edia); printf(" Mes do Aniversário: "); scanf("%d",&emes); strcpy(cont[i].nome, enome); strcpy(cont[i].sobrenome, esobre); strcpy(cont[i].email, eemail); cont[i].telefone = etel; cont[i].aniversario.dia = edia; cont[i].aniversario.mes = emes; printf("\n\n Contato editado com sucesso!"); printf ("\n\n Nome: %s\n Sobrenome: %s\n E-mail: %s\n Telefone: %d\n Aniversário: %d/%d\n", cont[i].nome, cont[i].sobrenome, cont[i].email, cont[i].telefone, cont[i].aniversario.dia, cont[i].aniversario.mes); } else { printf("\n O contato digitado não existe na lista de contatos."); } getch(); system("cls"); } void Menu () { struct contato cont[max]; // Menu com as opções que o usuário tem. int i = 0; printf ("\n\n Lista de Contatos \n\n\n "); printf ("INFO:\n Para adicionar ou editar um contato não serão aceitos espaços!\n\n "); printf ("01 - Adicionar Contato\n\n "); printf ("02 - Excluir Contato\n\n "); printf ("03 - Editar Contato\n\n "); printf ("04 - Buscar Contato\n\n "); printf ("05 - Exibir Contatos em Ordem Crescente\n\n "); printf ("06 - Exibir Contatos em Ordem Decrescente\n\n "); printf ("07 - Sair\n\n "); scanf ("%d", &op); system ("cls"); switch (op) { case 01: z++; printf ("\n Adicionar Contato \n"); Adicionar(cont); break; case 02: printf ("\n Excluir Contato \n"); Excluir(cont, z); break; case 03: printf ("\n Editar Contato \n"); Editar(cont, z); break; case 04: printf ("\n Buscar Contato \n"); Buscar(cont, z); break; case 05: printf ("\n Exibir em Ordem Crescente \n"); Exibir_Crescente(z, cont, i); break; case 06: printf ("\n Exibir em Ordem Decrescente \n"); Exibir_Decrescente(z, cont); break; case 07: break; default: printf("\n\n Digito incorreto!"); op = 07; break; } } void main () { setlocale (LC_ALL, "Portuguese"); system("color F0"); while (op != 07) Menu (); }
Compartilhar