Ir ao conteúdo

Posts recomendados

Postado

Estou fazendo um trabalho em que tenho que fazer uma struct, que no caso seria a ficha de cadastro de uma academia, e mostrar um menu com as opções de salvar no arquivo, consultar e excluir. Para a consulta, preciso fazer consulta por dois métodos. No caso, fiz por ID do usuário e CPF, porém, em ConsultarPorCPF() está dando um erro em if(ficha == NULL || ficha->cpf == cpf) e não sei porque. Segue o código:

#include<stdio.h>
#include<stdlib.h>
#include <string.h>
#define ARQUIVO "Ficha.dat"

typedef struct
{
int   id;
float peso;
float altura;
char  objetivo[70];
char  nome[70];
char  cpf[11];
char  rg[7];
char  telefone[11];
char email[70];
char endereco[70];
}Ficha;

void menu();
int LerString(char *str, int tammax);
int Cadastro();
int PedeDados(Ficha *ficha);
int Gravar(Ficha *ficha);
int ConsultarPorID();
int ConsultarPorCPF();
int MostraFicha(Ficha *ficha);
int Excluir();
Ficha *LeProximaFicha(FILE *file);


int main()
{
menu();
return 0;
}
  
void menu()
{
    int escolha;
    int opcao;
    do
    {
         printf("\n-----------------------------------------");
printf("\n\nMenu:\n\n");
         printf("0. Sair\n");
         printf("1. Novo Cadastro\n");
         printf("2. Consulta por ID\n");
         printf("3. Consultar por CPF\n");
         printf ("4. Exclusão\n");
         scanf("%d",&escolha);
   
         switch (escolha)
        {
            case 0: 
                printf("Fim!\n"); 
                break;
            case 1:
                Cadastro();
                break;
            case 2:
            ConsultarPorID();
                break;
			case 3:
				ConsultarPorCPF();      
             	break;
		    case 4:
            	Excluir();
            	break;
            default: printf("Opção invalida. Tente novamente!\n");
                break;
        }    
  
    } while (escolha != 0);     
}

int Cadastro()
{
    Ficha *ficha = (Ficha *) malloc (sizeof (Ficha));
    
    if(!PedeDados(ficha))
    {
        free(ficha);
        return 0;
    }
    
    if(!Gravar(ficha))
    {
        free(ficha);
        return 0;
    }
    
    free(ficha);
    
    return 1;
}

int PedeDados(Ficha *ficha)
{

    if(ficha == NULL)
    {
        printf("\nFicha invalida para pedir dados!\n");
        return 0;
    }
    
else {ficha->id++;}
    printf("ID: ");
    fflush(stdin);
    scanf ("%d",ficha->id);
    printf("\nNome: ");
  	fflush(stdin);
 
    LerString(ficha->nome, 70);
    printf("CPF: ");
 	fflush(stdin);
    LerString(ficha->cpf, 11);
    printf("RG: ");
  	fflush(stdin);
    LerString(ficha->rg, 7);
    printf("Telefone: ");
	fflush(stdin);
    LerString(ficha->telefone, 11);
    printf("Endereço: ");
	fflush(stdin);
    LerString(ficha->endereco, 70);
    printf("Email: ");
	fflush(stdin);
    LerString(ficha->email, 70);
    printf("Peso: ");
  	fflush(stdin);
    scanf("%f", &ficha->peso);
    printf("Altura: ");
  	fflush(stdin);
    scanf("%f", &ficha->altura);
	printf("Objetivo: ");
	fflush(stdin);
    LerString(ficha->objetivo, 70);
    
    return 1;
    
}

int LerString(char *str, int tammax)
{
    int c, i=0;
    c = getchar();
    while (i==0 || (c != '\n' && c != EOF)) { 
        if(c == '\n' || c == EOF)
        {
            if(i >= 0)
                i--;
        }
        else if(i < tammax - 1)
        {
            str[i] = c;
        }
        c = getchar();
        i++;
        
    }
    if(i >= tammax - 1)
        i = tammax - 1;
    str[i] = '\0';
    fflush(stdin);
    
    return i;
}

int Gravar(Ficha *ficha)
{
    FILE *file; 
      
    file = fopen (ARQUIVO, "a"); 
    if (file == NULL) 
    { 
        printf("\nErro ao abrir o arquivo!\n"); 
        return 0;
    } 
    
    if(ficha == NULL)
    {
        printf("\nFicha invalida!\n");
        return 0;
    }
      
    if(fwrite (ficha, sizeof(Ficha), 1, file) == 0)  
        printf("Erro ao gravar Ficha %d !\n", ficha->id); 
  
    fclose (file);
    
    return 1;
}

int ConsultarPorID()
{
    FILE *file;
    int id;
    Ficha *ficha = NULL;
    
    printf("\n\nInforme o ID: ");
    fflush(stdin);
    scanf("%d",&id);
    fflush(stdin);
    
    file = fopen (ARQUIVO, "rb"); 
    if (file == NULL) 
    { 
        printf("\nErro ao abrir o arquivo!\n"); 
        return 0;
    }
    
    while(1)
    {
        if(feof(file))
            break;
        
        ficha = LeProximaFicha(file);
        
        if(ficha == NULL || ficha->id == id)
            break;
        
        free(ficha);
    }
    
    if(ficha != NULL)
    {
        printf("\nFicha encontrada no banco de dados!\n");
        MostraFicha(ficha);
        free(ficha);
    }
    else
    {
        printf("\nFicha %d nao encontrada!\n",  id);
    }
    
    fclose(file);
    
    return 1;
}
int ConsultarPorCPF()
{
    FILE *file;
    char cpf;
    Ficha *ficha = NULL;
    
    printf("\n\nInforme o CPF: ");
    fflush(stdin);
    scanf("%s",&cpf);
    fflush(stdin);
    
    file = fopen (ARQUIVO, "rb"); 
    if (file == NULL) 
    { 
        printf("\nErro ao abrir o arquivo!\n"); 
        return 0;
    }
    
    while(1)
    {
        if(feof(file))
            break;
        
        ficha = LeProximaFicha(file);
        
        if(ficha == NULL || ficha->cpf == cpf)
            break;
        
        free(ficha);
    }
    
    if(ficha != NULL)
    {
        printf("\nFicha encontrada no banco de dados!\n");
        MostraFicha(ficha);
        free(ficha);
    }
    else
    {
        printf("\nFicha %d nao encontrada!\n",  cpf);
    }
    
    fclose(file);
    
    return 1;
}


int MostraFicha(Ficha *ficha)
{
    if(ficha == NULL)
    {
        printf("\nFicha invalida para mostrar!\n");
        return 0;
    }
    
    printf("\nID: %d\n", ficha->id);
    printf("Nome: %s\n", ficha->nome);
    printf("CPF: %s\n", ficha->cpf);
    printf("RG: %s\n", ficha->rg);
    printf("Telefone: %s\n", ficha->telefone);
    printf("Endereço: %s\n", ficha->endereco);
    printf("Email: %s\n", ficha->email);
    printf("Peso: %.2f\n", ficha->peso);
    printf("Altura: %.2f\n", ficha->altura);
    printf("Objetivo: %s\n", ficha->objetivo);
    
    return 1;
}

Ficha *LeProximaFicha(FILE *file)
{
    Ficha *ficha;
    
    if (file == NULL) 
    { 
        printf("\nArquivo invalido!\n"); 
        return 0;
    } 
    
    ficha = (Ficha *) malloc (sizeof (Ficha));
    
    if(fread(ficha, sizeof(Ficha), 1, file) == 0)
    {
        printf("Erro ao ler Ficha!\n");
        free(ficha);
        ficha = NULL;
    }
    
    return ficha;
}

Também falta a parte de exclusão de arquivo, que não consegui fazer.

  • Curtir 1
Postado
FILE *file;
char cpf;      //Aqui você está declarando um char
Ficha *ficha = NULL;

printf("\n\nInforme o CPF: ");
fflush(stdin);
scanf("%s",&cpf); //Aqui você está lendo uma string.

 

  • Curtir 1

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...

LANÇAMENTO!

eletronica2025-popup.jpg


CLIQUE AQUI E BAIXE AGORA MESMO!