Buscar

Lista de contatos em C

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 ();
}

Teste o Premium para desbloquear

Aproveite todos os benefícios por 3 dias sem pagar! 😉
Já tem cadastro?

Continue navegando