Logo Hardware.com.br
Caique Limq
Caique Limq Novo Membro Registrado
1 Mensagem 0 Curtidas

[Resolvido] [Dev-C++] Problema com gerenciamento de dados

#1 Por Caique Limq 27/09/2016 - 16:06
Olá galera, sou novo aqui no fórum, então peço perdão se este tópico já existir, ou pelo menos algo que seja semelhante.
Bom, indo direto ao assunto; estou com um problema bem chato. O programa é um banco de dados, que simula um sistema de Banco ($), onde o "gerente" escolhe entre inserir uma conta física ou jurídica... Enfim, o programa deve conter as funções de Inserir/Listar/Alterar/Excluir (se trata de um trabalho da faculdade). O problema está, acredito eu, na função de alterar. Peço para que vocês insiram 2 pessoas físicas, listem as mesmas, e depois tentem alterar uma delas. É possível notar um erro no ID do cadastrado. Por exemplo, se altero o cliente 1, ele volta com ID 2, porém o ID 2 já pertence ao cliente 2... Peço a ajuda de vocês para solucionar este problema. Desde já, grato



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



#define AUTOCLIENTE "autoCliente.dat"
#define CLIENTE "cliente.dat"
#define AUTOEMPRESA "autoEmpresa.dat"
#define EMPRESA "empresa.dat"

//BANCO $$\\*
struct autoNum{
int numero;
};

struct empresa
{
int id; //ID da empresa (PESSOA JURIDICA)
char nome[30]; //Nome da empresa
int cnpj; //CNPJ da empresa
};

struct cliente
{
int id; //ID do cliente (PESSOA FISICA)
char nome[30]; //Nome do cliente
int cpf; //CPF do cliente
};

int main ()
{

//funções
void listarC (struct cliente par1,FILE *arquivoCliente);
void listarE (struct empresa par1,FILE *arquivoEmpresa);
int alterarC (struct cliente par1,FILE *arquivoCliente, fpos_t byte);
int alterarE (struct empresa par1);
int eliminarC ();
int eliminarE ();
int consultarC(struct cliente par1,FILE *arquivoCliente,char pesquisado[30] );
int consultarE;

//variáveis
int opcao,lixo,pessoa,listar,alterar;
char clientePesquisado[30];
fpos_t byte;
int autonumC=0;
int autonumE=0;

//estruturas
struct cliente x;
struct empresa y;
struct autoNum n;

//arquivos
FILE *arquivoAutoC,*arquivoCliente, *arquivoAutoE,*arquivoEmpresa;

do{ //APRESENTA OPÇÕES PARA O USUARIO
system("cls&quot;
printf("-------------------------------------------------------------------------------\n&quot;
printf(" PROGRAMA BANCARIO \n&quot;
printf("-------------------------------------------------------------------------------&quot;
printf("\n\n[1] Incluir&quot;
printf("\n[2] Listar&quot;
printf("\n[3] Alterar&quot;
printf("\n[4] Eliminar&quot;
printf("\n[0] Sair&quot;
printf("\n\nDigite sua opcao: &quot;
scanf("%d",&opcao);

switch(opcao){ //ANALISA QUAL OPÇÃO FOI ESCOLHIDA ACIMA
case 1: system("cls&quot;
printf("-------------------------------------------------------------------------------\n&quot;
printf(" PROGRAMA BANCARIO \n&quot;
printf("-------------------------------------------------------------------------------&quot;
printf("\n\n[1] Incluir pessoa fisica&quot;
printf("\n[2] Incluir pessoa juridica&quot;
printf("\n[0] Voltar&quot;
printf("\n\nDigite sua opcao: &quot;
scanf("%d",&pessoa);

switch(pessoa){ //ANALISA QUAL OPÇÃO FOI ESCOLHIDA ACIMA

case 1: arquivoAutoC = fopen(AUTOCLIENTE,"r+b&quot;
if (arquivoAutoC==NULL){
arquivoAutoC = fopen(AUTOCLIENTE,"wb&quot;
n.numero=1;
fwrite(&n,sizeof(int),1,arquivoAutoC);}
else{
fread(&n,sizeof(int),1,arquivoAutoC);
n.numero++;
fseek(arquivoAutoC,0,SEEK_SET);
fwrite(&n,sizeof(int),1,arquivoAutoC);}
fclose(arquivoAutoC);

x.id = n.numero;
printf("\nID: %d",x.id);
printf("\nNome do Cliente: &quot;
fflush(stdin); //limpa o lixo do teclado
gets(x.nome); //salva o nome com espaços
printf("CPF: &quot;
scanf("%d",&x.cpf);
arquivoCliente = fopen(CLIENTE,"ab+&quot;
if (arquivoCliente==NULL)
arquivoCliente = fopen(CLIENTE,"wb&quot;
fwrite(&x,sizeof(x),1,arquivoCliente);
fclose(arquivoCliente);
fflush(stdin);
//getchar();
break;

case 2: arquivoAutoE = fopen(AUTOEMPRESA,"r+b&quot;
if (arquivoAutoE==NULL){
arquivoAutoE = fopen(AUTOEMPRESA,"wb&quot;
n.numero=1;
fwrite(&n,sizeof(int),1,arquivoAutoE);}
else{
fread(&n,sizeof(int),1,arquivoAutoE);
n.numero++;
fseek(arquivoAutoE,0,SEEK_SET);
fwrite(&n,sizeof(int),1,arquivoAutoE);}
fclose(arquivoAutoE);

y.id=n.numero;
printf("\nID: %d",y.id);
printf("\nNome da Empresa: &quot;
fflush(stdin); //limpa o lixo do teclado
gets(y.nome); //salva o nome com espaços
printf("CNPJ: &quot;
scanf("%d",&y.cnpj);
arquivoEmpresa = fopen(EMPRESA,"ab+&quot;
if (arquivoEmpresa==NULL)
arquivoEmpresa = fopen(EMPRESA,"wb&quot;
fwrite(&y,sizeof(y),1,arquivoEmpresa);
fclose(arquivoEmpresa);
fflush(stdin);
//getchar();
break;
}
break;

case 2: system("cls&quot;
printf("-------------------------------------------------------------------------------\n&quot;
printf(" PROGRAMA BANCARIO \n&quot;
printf("-------------------------------------------------------------------------------&quot;
printf("\n\n[1] Listar pessoa fisica&quot;
printf("\n[2] Listar pessoa juridica&quot;
printf("\n[0] Voltar&quot;
printf("\n\nDigite sua opcao: &quot;
scanf("%d",&listar);

switch(listar){ //ANALISA QUAL OPÇÃO FOI ESCOLHIDA ACIMA
case 1: arquivoCliente=fopen(CLIENTE,"rb&quot;
listarC(x,arquivoCliente);
fclose(arquivoCliente);
fflush(stdin);
getchar();
break;

case 2: arquivoEmpresa=fopen(EMPRESA,"rb&quot;
listarE(y,arquivoEmpresa);
fclose(arquivoEmpresa);
fflush(stdin);
getchar();
break;
}
break;

case 3: system("cls&quot;
printf("-------------------------------------------------------------------------------\n&quot;
printf(" PROGRAMA BANCARIO \n&quot;
printf("-------------------------------------------------------------------------------&quot;
printf("\n\n[1] Alterar pessoa fisica&quot;
printf("\n[2] Alterar pessoa juridica&quot;
printf("\n[0] Voltar&quot;
printf("\n\nDigite sua opcao: &quot;
scanf("%d",&alterar);

switch(alterar){ //ANALISA QUAL OPÇÃO FOI ESCOLHIDA ACIMA
case 1: printf("\nDigite o nome do cliente: &quot;
fflush(stdin);
gets(clientePesquisado);
arquivoCliente=fopen(CLIENTE,"rb+&quot;
byte = consultarC(x,arquivoCliente,clientePesquisado);
fseek(arquivoCliente,0,SEEK_SET);
if(byte!=-1){
printf("\nID: %d\n",x.id);
printf("Nome do Cliente: &quot;
fflush(stdin);
gets(x.nome);
printf("CPF: &quot;
scanf("%d",&x.cpf);
if(alterarC(x,arquivoCliente,byte))
printf("\nRegistro alterado com sucesso.\n&quot;}
else
printf("\nRegistro nao encontrado\n&quot;
fclose(arquivoCliente);
fflush(stdin);
getchar();
break;






/*lixo=alterarC(x);
printf("%d",lixo);
fflush(stdin);
getchar();
break; */

case 2: lixo=alterarE(y);
printf("%d",lixo);
fflush(stdin);
getchar();
break;
}
break;
/*
case 4: lixo=lixo();
printf("%d",lixo);
fflush(stdin);
getchar();
break;*/
}
}
while (opcao!=0);
return 0;
}





void listarC (struct cliente par1,FILE *arquivoCliente) //lISTA OS CLIENTES
{
while (fread(&par1,sizeof(par1),1,arquivoCliente))
printf("\n\n%d %s %d",par1.id,par1.nome,par1.cpf);

}


void listarE (struct empresa par1,FILE *arquivoEmpresa) //lISTA AS EMPRESAS
{
while (fread(&par1,sizeof(par1),1,arquivoEmpresa))
printf("\n\n%d %s %d",par1.id,par1.nome,par1.cnpj);

}





int consultarC(struct cliente par1,FILE *arquivoCliente,char pesquisado[30]){
fpos_t byte;
int tam=sizeof(par1);
while (fread(&par1,sizeof(par1),1,arquivoCliente)){
if (strcmp(pesquisado,par1.nome)==0){
byte=ftell(arquivoCliente)-tam;
return(byte);}}
return -1;
}










int alterarC(struct cliente par1,FILE *arquivoCliente, fpos_t byte) //ALTERA OS CLIENTES
{
fsetpos(arquivoCliente,&byte);
fwrite(&par1,sizeof(par1),1,arquivoCliente);
return 0;

}

int alterarE(struct empresa par1) //ALTERA AS EMPRESAS
{
return 3;
}








void imprimir()
{
printf("SEM RETORNO&quot;
}





tpcvasco
tpcvasco General de Pijama Registrado
2.9K Mensagens 330 Curtidas
#2 Por tpcvasco
28/09/2016 - 14:17
Vc está passando uma string (clientePesquisado) para a função consultarC, para um parâmetro q deveria ser fpos_t. Isso funciona??
"Milhouse: - Médicos e bombeiros são heróis.
Bart Simpson: - Olha, as casas continuam pegando fogo e as pessoas continuam doentes. Os verdadeiros heróis são os Schwarzenegger's, os Stallone's, e, em menores proporções, os Vandame's..."
© 1999-2024 Hardware.com.br. Todos os direitos reservados.
Imagem do Modal