Ir ao conteúdo
  • Cadastre-se

Arquivo binário


namikazealexandre

Posts recomendados

Estou com problema no seguinte código

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

typedef struct{
    char  nome[50];
    char cpf[20] ;
    int numa, numc;
    float saldo;
    
} Cliente;

//typedef struct {
 //   Cliente clientes[100];
  //  int quantc;
     // tbanco *proximo;
//} Tanco;

typedef struct {
    int quant;
    
} Quantc;


int validarConta(Cliente * banco, char * cpf, int numa, int numc, int quantc){
    int i, val = 0;
    
    for (i = 0; i < quantc; i++){
        if (!strcmp(cpf, banco[i].cpf)){
            val = val + 3;
        }
        if (numa == banco[i].numa && numc == banco[i].numc){
            val = val + 2;
        }
        if (val != 0) //****
            return val;    
    }
    return val;
}

void cadastrarCliente(Cliente * banco, int * quantc){
    char cpf[20];
    int numa, numc, val;
    
    fflush(stdin);
    printf("CPF: ");
    gets(cpf);
    printf("Numero da agencia: ");
    scanf("%d", &numa);
    printf("Numero da conta: ");
    scanf("%d", &numc);
    if(quantc != 0)
        val = validarConta(banco, cpf, numa, numc, *quantc); //Validador
    if (val == 3){
        printf("CPF JA CADASTRADO...\n\n");
        system("PAUSE");
        return;
    }
    else if (val == 2){
        printf("CONTA JA CADASTRADA...\n\n");
        system("PAUSE");
        return;
    }
    else if (val == 5){
        printf("CPF E CONTA JA CADASTRADOS...\n\n");
        system("PAUSE");
        return;
    }
    fflush(stdin);
    printf("Nome: ");
    
    //Inserção dos dados na conta
    gets(banco[*quantc].nome); 
    banco[*quantc].numa = numa;
    banco[*quantc].numc = numc;
    strcpy(banco[*quantc].cpf, cpf);
    banco[*quantc].saldo = 0;
    (*quantc)++;
}

void mostrarSaldo(Cliente * banco, int quantc){
	int i;
	int numa, numc;
	
	printf("Numero da agencia: ");
	scanf("%d", &numa);
	printf("Numero da conta: ");
	scanf("%d", &numc);

	for (i = 0; i < quantc; i++){
		if (numa == banco[i].numa && numc == banco[i].numc){
			printf("\n\nSaldo: %.2f\n\n", banco[i].saldo);
			system("PAUSE");
			return;
		}
	}
	printf("CONTA INVALIDA...\n\n");
	system("PAUSE");
	return;
}

void deposito(Cliente * banco, int quantc){
	int numa, numc, i;
	float dep = -1;
	
	printf("Numero da agencia: ");
	scanf("%d", &numa);
	printf("Numero da conta: ");
	scanf("%d", &numc);
	while (dep < 0){
		printf("Valor do deposito: ");
		scanf("%f", &dep);
		if (dep < 0){
			printf("\nInforme um valor maior igual a 0\n\n");
		}
	}	
	for (i = 0; i < quantc; i++){
		if (numa == banco[i].numa && numc == banco[i].numc){
			banco[i].saldo = banco[i].saldo + dep;
			return;
		}
	}
	printf("CONTA INVALIDA...\n\n");
	system("PAUSE");
	return;
	
}

void saque(Cliente * banco, int quantc){
	int numa, numc, i;
	float saque = -1;
	
	printf("Numero da agencia: ");
	scanf("%d", &numa);
	printf("Numero da conta: ");
	scanf("%d", &numc);
	while (saque < 0){
		printf("Valor do saque: ");
		scanf("%f", &saque);
		if (saque < 0){
			printf("\nInforme um valor maior igual a 0\n\n");
		}
	}
	for (i = 0; i < quantc; i++){
		if (numa == banco[i].numa && numc == banco[i].numc){
			if (banco[i].saldo >= saque){
				banco[i].saldo = banco[i].saldo - saque;
				return;
			}	
			else{
				printf("Saldo insuficiente...");
				system("PAUSE");
				return;
			}
		}
	}
	printf("CONTA INVALIDA...\n\n");
	system("PAUSE");
	return;
	
}

void transferencia(Cliente * banco, int quantc){
	int numa, numc,numad, numcd, i, j, x =0, a, b;
	float dep = -1; 
	

	printf("Numero da agencia origem: ");
	scanf("%d", &numa);
	printf("Numero da conta origem: ");
	scanf("%d", &numc);
	while (dep < 0){
		printf("Valor a ser transferido: ");
		scanf("%f", &dep);
		if (dep < 0){
			printf("\nInforme um valor maior igual a 0\n\n");
		}
	}
	
	for (i = 0; i < quantc; i++){
		if (numa == banco[i].numa && numc == banco[i].numc){
			x = 1;
			a = i;
		}
	}
	if (x == 0){
			printf("Conta origem invalida...\n");
		   	system("PAUSE");
			return;
		}
	 
 	x = 0;
 	
	printf("Numero da agencia destino: ");
	scanf("%d", &numad);
	printf("Numero da conta destino: ");
	scanf("%d", &numcd);
	
	for (j = 0; j < quantc; j++){
		if (numad == banco[j].numa && numcd == banco[j].numc){
			x = 1;
			b = j;
		}
		
	}
	if (x == 0){
	
		printf("Conta origem invalida...\n");
		system("PAUSE");
		return;
	}
	banco[a].saldo = banco[a].saldo - dep;
	banco[b].saldo = banco[b].saldo + dep;
	
	
	
}

void pesquisarCpf(Cliente * banco, int quantc){
	int i = 0;
	char cpf[20];
	
	fflush(stdin);
	printf("Insira o CPF para pesquisa: ");
	gets(cpf);
	for (i =0; i<quantc;i++){
		if (!strcmp(cpf,banco[i].cpf)){
			printf("Nome: %s",banco[i].nome);
			printf("\nCPF: %s",banco[i].cpf);
			printf("\nNumero da agencia: %d",banco[i].numa);
			printf("\nNumero da conta: %d",banco[i].numc);
			printf("\nSaldo: %.2f\n\n",banco[i].saldo);
			system("PAUSE");
			break;
		}
	}
	
}

void exibirClientes(Cliente * banco, int quantc){
    int i;
    int senha = 1, cont =0;
    
    while (senha != 1010 && senha != -1 && cont < 3){
        system("cls");
        printf("Senha deo gerente(-1 p/ sair): ");
        scanf("%d", &senha);
        cont++;
        if (senha != 1010){
            printf("\n\nSenha incorreta. Restam %d tentativas... ", 3 - cont);
            system("PAUSE");
        }
    }    
    if (senha != 1010){ 
        printf("\n\nVoce tentou 3 vezes. Volte novamente mais tarde...");
        system("PAUSE");
    }
    
  
    for (i =0; i < quantc; i++){
        printf("\nNome:%s", banco[i].nome);
        printf("\nCPF: %s", banco[i].cpf);
        printf("\nAgencia: %d", banco[i].numa);
        printf("\nConta: %d", banco[i].numc);
        printf("\n%.2f", banco[i].saldo);
        printf("\n\n");
    }
    system("PAUSE");
}

void interface(){
    
    
    system("cls");
    printf("\nMENU\n");
    printf("1. Cadastrar cliente\n");
    printf("2. Mostrar saldo\n");
    printf("3. Deposito\n");
    printf("4. Saque\n");
    printf("5. Transferencia\n");
    printf("6. Pesquisar pelo CPF\n");
    printf("7. Exibir todos clientes\n");
    printf("0. Sair\n");
    printf("Escolha uma opcao: ");
    
    
}

void lerArquivo(Cliente * banco, Quantc * quant){
    FILE * arq;
    int i;
    arq = fopen("arquivo.dat", "r");
    for (i = 0; i <100; i++){
        fread(&banco[i],sizeof(Cliente), 1, arq);
        if (i != 99)
            fseek(arq, sizeof(Cliente), SEEK_CUR);
    }
    fread(quant, sizeof(Quantc), 1, arq);    
    fclose(arq);
    
}

void salvarArquivo(Cliente * banco, Quantc * quant){
    FILE * arq;
    int i;
    
    arq = fopen("arquivo.dat", "w");
    for (i = 0; i <100; i++){
        fwrite(&banco[i],sizeof(Cliente), 1, arq);
        if (i != 99)
            fseek(arq, sizeof(Cliente), SEEK_CUR);
    }
    fread(quant, sizeof(Quantc), 1, arq);       
    fclose(arq);
    
}

int main (){
    int opc = -1, opc2;
    int quantc = 0;
    Cliente banco[100];
    Quantc quant;
  
    
    lerArquivo(banco, &quant);
    
    printf("Primeira vez usando o banco(s/n): %s", banco[0].nome);
    scanf("%d",&opc2);
    if (opc2 == 'n'){
        quantc = quant.quant;
    }
    while (opc != 0){
    	
        interface();
        fflush(stdin);
        scanf("%d", &opc);
        system("cls");
        
        switch (opc){
            case 1:
                cadastrarCliente(banco, &quantc);
                break; 
			case 2:
                mostrarSaldo(banco, quantc);
                break; 
            case 3:
                deposito(banco, quantc);
                break; 
            case 4:
                saque(banco, quantc);
                break; 
            case 5:
				transferencia(banco, quantc);
                break; 
            case 6:
                pesquisarCpf(banco, quantc);
                break;
            case 7:
                exibirClientes(banco, quantc);
                break;  
            case 0:
                break;            
            default:
                printf("\n\nEscolha uma opcao valida");              
        }
    }    
    quant.quant = quantc;
    
    salvarArquivo(banco, &quant);
    
    return 0;
}

O problema está na função lerArquivo e salvarArquivo que não estão gravando ou lendo corretamente os dados no arquivo

Link para o comentário
Compartilhar em outros sites

Visitante
Este tópico está impedido de receber novas respostas.

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