Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

jurassico

Como fazer uma pesquisa de pessoas por cpf e nome nesse codigo?

Recommended Posts

 

#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#include <string.h>

struct Pessoa
{
    char nome[50],endereco[50];
    int cpf;
};

struct Pesquisa
{
    char nome[50],endereco[50],enderecopesquisa[50];
    int cpf,i,cpfpesquisa;

    
};



int main ()
{
    
    int op;
    
         printf ("Informe uma opcao1: caixa=11  estoque=22  cadastro de clientes=66   \n");
     scanf ("%d", &op);
    
    
      switch (op){
    
    
       case 66:{
                
                   struct Pessoa pessoa;
                    
                    printf ("informe nome: \n");
                    scanf ("%s", pessoa.nome);
                    
                    printf ("informe CPF: \n" );
                    scanf ("%d", &pessoa.cpf);
                    
                    
                    printf ("informe endereco: \n");
                    scanf ("%s", pessoa.endereco);
                    
                    
                    printf ("nome: %s\n", pessoa.nome);
                        printf ("endereco: %s\n", pessoa.endereco);
                            printf ("CPF: %d\n", pessoa.cpf);
                    
                    
                    break;
                    
                    
             
                    
    
}


}

system ("pause");
}

Compartilhar este post


Link para o post
Compartilhar em outros sites

A princípio, não há necessidade de agrupar as informações de pesquisa numa struct.
P/ se ter uma base de dados em memória você precisa declarar uma variável que contenha vários objetos do tipo struct Pessoa. Percorra com um for.

Pode começar com isso (não testei porque não tenho máquina agora):

#include <stdio.h>
#include <string.h>

#define MAX_NOME 50
#define MAX_ENDERECO 50
#define MAX_CPF 11
#define MAX_REGISTROS 5

const char * operacoes[] = {"Cadastrar clientes", 
			    "Pesquisar cliente (nome E cpf)",
			    "Sair"};

struct Pessoa {
    char nome[MAX_NOME];
    char endereco[MAX_ENDERECO];
    char cpf[MAX_CPF];
};

struct Pessoa base[MAX_REGISTROS];
int tam_base = 0;

void cadastrar_cliente () {
	if (tam_base == MAX_REGISTROS) return;
	
	scanf("%50s%*c", base[tam_base].nome);
	scanf("%50s%*c", base[tam_base].endereco);
	scanf("%11s%*c", base[tam_base].cpf);
	tam_base++;
}

const struct Pessoa * pesquisar_CPF(const char * cpf) {
	int i;
	for(i=0; i<tam_base && strcmp(base[i].cpf, cpf); i++);
	return (i >= tam_base)? NULL : (const struct Pessoa *) &base[i];
}

const struct Pessoa * pesquisar_Nome(const char * nome) {
	int i;
	for(i=0; i<tam_base && strcoll(base[i].nome, nome); i++);
	return (i >= tam_base)? NULL : (const struct Pessoa *) &base[i];
}

const struct Pessoa * pesquisar_NomeCPF() {
	char nome[MAX_NOME], cpf[MAX_CPF];
	scanf("%50s%*c", nome);
	scanf("%11s%*c", cpf);
	const struct Pessoa * r1 = pesquisar_CPF((const char *)cpf);
	const struct Pessoa * r2 = pesquisar_Nome((const char*)nome);
	if (strcmp(r1->cpf, r2->cpf) == 0) return r1;
	return NULL;
}

int main (void) {
	int operacao = -1;
	
	while(operacao < 0 && operacao > 1) {
		
	    // Exibe o menu.
	    for(int i=0; i<2; i++) {
	    	printf("%d - %s\n", i, operacoes[i]);
	    }
    
    	    scanf("%d", &operacao);
    	    if (operacao == 2) break;
    	
    	    switch (operacao) {
    			case 0:
    			     cadastrar_cliente();
    			     break;
    			case 1:
    				const struct Pessoa * result = pesquisar_NomeCPF();
                                if (result) {
    				    printf("Nome:%s\t CPF:%s\n", result->nome, result->cpf);
                                } else { puts("Pessoa não encontrada."); }
    				break;
    			default:
    				puts("Operação inválida");
    	    }
	}
    
    return 0;
} 

Obs.: fechei o tópico p/ não virar bate-boca. Quando for postar a mesma coisa, peça p/ reabrir.

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.