Ir ao conteúdo
  • Cadastre-se

C Criar agenda podendo pesquisar, excluir dados


Duda1001

Posts recomendados

Oii, boa tarde! Eu tenho que fazer uma agenda, onde vai ser cadastrado 6 nomes, depois do usuário digitar o nome e e-mail, vai ser exibido algumas opções: Pesquisar um nome, ordenação alfabética, editar dado, remover dado e sair. As únicas opções que eu não estou conseguindo fazer é "Remover" e "Pesquisa", alguém pode me ajudar..

Obrigado desde já!


 

#include <stdio.h>
#include <conio.h>
#include <stdlib.h>
#include <string.h>
#define cls system("cls");
int main()
{
	int i,j,x,y,edit,pesq,cont,flag;
	struct agenda  
	{
	    char nome [80];
	    char ema[200];
	    
    };
    agenda cadastro [6];

	printf ("....Cadastro de Dados....\n\n");
	for (i=1; i<7; i++ )
    {
       	printf ("Nome:");
		fflush(stdin);
		gets (cadastro[i].nome);
		
		printf ("E-mail:");
		fflush(stdin);
		gets  (cadastro[i].ema);
		printf ("\n");
}

    int op;
    do{
		printf("\nEscolha a opcao desejada:\n\n");
		printf(" 1-  Pesquisa\n");
		printf(" 2 - Classificacao alfabetica\n");
		printf(" 3 - Editar dado\n");
		printf(" 4 - Remover dado\n");
		printf(" 5 - Sair.\n");
	
		scanf ("%d",&op);
		switch (op)
		{
		
		//PESQUISA
		case 1:{
		{
		break;

			//ORDEM ALFABETICA
			case 2:
			    
			printf ("....Nomes em ordem alfabetica....:\n");
			for (i=1; i<7; i++)
	        {
	        for (j=i+1; j<7; j++)
	        {
	        if ( strcmp(cadastro[i].nome, cadastro[j].nome ) > 0 )
	        {
	        cadastro[0] = cadastro[i];
	        cadastro[i] = cadastro[j];
	        cadastro[j] = cadastro[0];
	        }
	    	}
	    	}
	        for (i=1;i<7;i++)
	        {
	        printf("Nome: %s\n",cadastro[i].nome);
	        }
	        break;
			
			//EDITAR
			case 3:
			    
			char nom[30];
			char ema[200];
		
	        flag=0;
	    	cls
			    
			printf ("\n....Editar Dado....\n");
			    	
			for (i=1;i<7;i++)
            printf("Nome: %s\n",cadastro[i].nome);
			printf( "\nQual nome desejar editar: ");
		    fflush(stdin);
		    fgets(nom,29,stdin);
		    nom[strlen(nom)-1] = '\0';
	            	
			for(i=1;i<7;i++)
	        if(strcmp(nom,cadastro[i].nome) == 0 ){
	    	flag = 1;
	        printf("Novo Nome:");
	        fgets(nom,29,stdin);
	        strcpy(cadastro[i].nome,nom);{
	                
			flag = 1;
	        printf("Novo E-mail:");
	        fgets(ema,12,stdin);
	       	strcpy(cadastro[i].ema,ema);{
         	}
	    	printf("edicao realizada com sucesso !\n");
	        }
	        if( ! flag )
	                	
			printf("nome invalido!\n");
			break;
			    
			//REMOVER
			case 4:{
				
			}break;
						
			//SAIR
			case 5:{
								
			printf("\nExibindo Agenda:\n");
		  	for( i=1; i<7;i++){
		  					
		  	printf ("\nNome: %s\n",cadastro[i].nome);
			printf ("E-mail: %s\n",cadastro[i].ema);}
			break;}
							
			}
			printf ("Saindo....");
					
			default:
			printf ("");       
}
}
}

	}while( op!=5 );
    return 0;
}

 

  • Amei 1
Link para o comentário
Compartilhar em outros sites

@Duda1001  escreva o menu por último e não no começo. só perde tempo ao escrever assim.

 

    nom[strlen(nom)-1] = '\0'

 

Entenda que 0 é zero. é a mesma coisa que '\0' e não há razão para 4 dígitos ao invés de um.

 

    fflush(stdin);
    gets (cadastro[i].nome);
		

 

Nunca use fflush() em fluxos de entrada. Oficialmente só está definido para fluxos de saída e só funciona em alguns compiladores. E não devia precisar disso.

 

Nunca use gets(). Muitos compiladores nem aceitam mais. Outros vão de dar muitas mensagens. Não há razão para usar e pelo contrário é uma bobagem usar: gets() é insegura e marcada como obsoleta há décadas. E fgets() permite o óbvio: controlar  o tamanho do campo.

 

Exemplo
 

typedef struct  
{
	    char nome [80];
	    char email[200];

}   Agenda;

typedef struct  
{
	    char nome [20];
	    char email[20];

}   Item;

typedef struct
{
    unsigned    N;
    Item        elem[6];

}   Agenda2;

int main()
{
    Agenda cadastro[6] = 
    {
        { "nome 1", "[email protected]" },
        { "nome 2", "[email protected]" },
        { "nome 3", "[email protected]" },
        { "nome 4", "[email protected]" },
        { "nome 5", "[email protected]" },
        { "nome 6", "[email protected]" }
    };

    return 0;
    }

 

Comece seu programa com algo assim, escrevendo em torno dos dados. É muito mais fácil e produtivo.

 

E note a estrutura Agenda2. Procure escrever sempre em torno dos dados. Veja no exemplo que Agenda2 é uma coleção de Item, e tem um contador N e capacidade para 6 itens. Se escrever assim os dados vão se organizando sozinhos. Note que N é o total de itens na agenda, delcarado como unsigned e não int, porque um número negativo de itens não tem significado e declarando assim a linguagem já garante isso pra você. E declarando como um vetor de Item você pode mudar Item e mudar campos sem mexer no código de agenda... E tendo o contador DENTRO da agenda fica tudo mais fácil, em especial se tiver várias agendas no programa

  • Obrigado 1
Link para o comentário
Compartilhar em outros sites

Crie uma conta ou entre para comentar

Você precisa ser um usuário para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar agora

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...

 

GRÁTIS: ebook Redes Wi-Fi – 2ª Edição

EBOOK GRÁTIS!

CLIQUE AQUI E BAIXE AGORA MESMO!