Ir para conteúdo
Fórum Script Brasil
  • 0

Problemas em C ++ (Ajuda urgente)


juninholiveira90

Pergunta

Meu programa abaixo esta com o seguinte problema

Até agora de pouco eu estava conseguindo cadastrar tudo, fazer alterações tudo certinho. Derrepente sem eu nem mecher no código(o que até parece estranho para voce que esta lendo), meu programa começou a fazer atualizaçoes todas incorretas.

Primeiro ele funcionava direitinho, depois de alguns minutos ele começou a dar pau sem mecher no código.. Sera que isto é problema com sujeira no buffer ou algo do tipo ?

Se puderem me ajudar, é só copiar e colocar este programa no C++ que ele funciona certinho, só não sei se ele vai dar o mesmo problema que aqui em casa !

Obrigado

#include<stdio.h>

#include<conio.h>

#include<stdlib.h>

struct cliente{

int codigocliente,numerocliente;

char nomecliente[100],enderecocliente[100],exccliente;

};// fim da struct cliente

struct bolo{

float precobolo;

int codigobolo, quantidadebolo;

char nomebolo[100],excbolo;

};//Fim da struct bolo

struct pedido{

int codigopedido,pcodigocliente,pcodigobolo,pquantidadebolo;

float valortotalpedido;

char pnomecliente, pnomebolo,excpedido;

};//fim da struct pedido

FILE *cliente1;

FILE *bolo1;

FILE *pedido1;

//função para verificar se o cod cliente já existe

struct cliente verificaCliente(int cod){

int achou_reg = 0;

cliente procura;

fseek (cliente1, 0, SEEK_SET);

while (! feof (cliente1) && (!achou_reg) ){

fread (&procura, sizeof(struct cliente), 1, cliente1);

if((procura.codigocliente == cod) && (procura.exccliente != '*'))

achou_reg = 1;

}

return procura;

}// fim da função verificaCliente

//função para verificar se o codbolo já existe

struct bolo verificaBolo(int cod){

int achou_reg = 0;

bolo procura;

fseek (bolo1, 0, SEEK_SET);

while (! feof (bolo1) && (!achou_reg) ){

fread (&procura, sizeof(struct bolo), 1, bolo1);

if((procura.codigobolo == cod) && (procura.excbolo != '*'))

achou_reg = 1;

}

return procura;

}// fim da função verificaBliente

struct pedido verificaPedido(int cod){

int achou_reg = 0;

pedido procura;

fseek (pedido1, 0, SEEK_SET);

while (! feof (pedido1) && (!achou_reg) ){

fread (&procura, sizeof(struct pedido), 1, pedido1);

if((procura.codigopedido == cod) && (procura.excpedido != '*'))

achou_reg = 1;

}

return procura;

}// fim da função verificaPedido

int main()

{

//declaração das variáveis

int opcao,codigocliente,codigobolo,codigopedido;

//criando o arquivo caso não tenha, e se tiver ele abre o arquivo para depois efetuar pesquisas

if((cliente1 = fopen("d:cliente.dat","r+")) == NULL)

cliente1 = fopen("d:cliente.dat","w+");

if((bolo1 = fopen("d:bolo.dat","r+")) == NULL)

bolo1 = fopen("d:bolo.dat","w+");

if((pedido1 = fopen("d:pedido.dat","r+")) == NULL)

pedido1 = fopen("d:pedido.dat","w+");

//criando as referencias

cliente c;

bolo b;

pedido p;

printf("\n 1 - Cadastrar cliente\n 2 - Cadastrar Bolo\n 3 - Cadastrar Pedido \n 6 - Cliente Cadastrado\n 7 - Bolo Cadastrado \n 8 - Pedidos Cadastrados\n");

fflush(stdin);

scanf("%i",&opcao);

while(opcao != 0){

switch (opcao){

case 1: {

//colocando o apontador no fim do arquivo

fseek(cliente1,0,SEEK_END);

printf("\nDigite o codigo do cliente\n");

fflush(stdin);

scanf("%i",&codigocliente);

while(codigocliente < 0){

printf("\nCodigo não pode ser menor que 0\n Digite novamente: ");

fflush(stdin);

scanf("%i",&codigocliente);

}//Fim do codigocliente < 0

//verifica se o código do cliente já existe

c = verificaCliente(c.codigocliente);

while(codigocliente > 0){

fflush(stdin);

c = verificaCliente(codigocliente); // funcao

if(c.codigocliente == codigocliente){

printf("Codigo já cadastrado!\n");

printf("Codigo do Cliente: ");

fflush(stdin);

scanf("%i",&codigocliente);

}//fim do if

else{

c.codigocliente = codigocliente;

break;

}//fim do else

}//fim do while

printf("\nDigite o nome \n");

fflush(stdin);

gets(c.nomecliente);

printf("\nDigite o endereco \n");

fflush(stdin);

gets(c.enderecocliente);

printf("\nDigite o numero \n");

fflush(stdin);

scanf("%i",&c.numerocliente);

fseek(cliente1,0,SEEK_END);

fwrite(&c,sizeof(struct cliente),1,cliente1);

break;

}//Fim do case 1

case 2:{

fseek(bolo1,0,SEEK_END);

printf("\nDigite o codigo do bolo \n");

fflush(stdin);

scanf("%i",&codigobolo);

while(codigobolo < 0){

printf("\nCodigo não pode ser menor que 0\nDigite novamente: ");

fflush(stdin);

scanf("%i",&codigobolo);

}//Fim do codigocliente < 0

//chamando a função

b = verificaBolo(codigobolo);

while(codigobolo > 0){

fflush(stdin);

b = verificaBolo(codigobolo); // funcao

if(b.codigobolo == codigobolo){

printf("Codigo já cadastrado!\n");

printf("Codigo do Bolo: ");

fflush(stdin);

scanf("%i",&codigobolo);

}//fim do if

else{

b.codigobolo = codigobolo;

break;

}//fim do else

}//fim do while

printf("\nDigite o nome \n");

fflush(stdin);

gets(b.nomebolo);

printf("\nDigite a quantidade\n");

fflush(stdin);

scanf("%i",&b.quantidadebolo);

while(b.quantidadebolo < 0){

printf("Quantidade invalida\n Digite novamente");

fflush(stdin);

scanf("%i",&b.quantidadebolo);

}//fim while quantidade bolo < 0

printf("\nDigite o preço\n");

fflush(stdin);

scanf("%f",&b.precobolo);

while(b.precobolo < 0){

printf("Valor invalido\n Digite novamente");

fflush(stdin);

scanf("%i",&b.precobolo);

}// Fim do while b.precobolo < 0

fseek(bolo1,0,SEEK_END);

fwrite(&b,sizeof(struct bolo),1,bolo1);

break;

}//Fim do case 2

case 3:{

fseek(pedido1,0,SEEK_SET);

printf("\nDigite o codigo do pedido\n");

fflush(stdin);

scanf("%i",&codigopedido);

while(codigopedido < 0){

printf("Codigo invalido\nDigite novamente: ");

fflush(stdin);

scanf("%i",&codigopedido);

}//fim do while codigopedido <0

//chamando a função para verificar se o código do pedido já existe

while(codigopedido > 0){

fflush(stdin);

p = verificaPedido(codigopedido); // funcao

if(p.codigopedido == codigopedido){

printf("Codigo já cadastrado!\n");

printf("Codigo do Bolo: ");

fflush(stdin);

scanf("%i",&codigopedido);

}//fim do if

else{

p.codigopedido = codigopedido;

break;

}//fim do else

}//fim do while

printf("\nCodigo do Cliente: ");

fflush(stdin);

scanf("%i",&codigocliente);

do{

//verificando se o cliente existe

c = verificaCliente(codigocliente);

if(c.codigocliente != codigocliente){

printf("\nCliente não encontrado\n");

fflush(stdin);

scanf("%i",&codigocliente);

}// fim do if

}while(c.codigocliente != codigocliente);

p.pcodigocliente = codigocliente;

printf("\nCodigo do bolo: ");

fflush(stdin);

scanf("%i",&codigobolo);

do{

//verificando se o bolo existe ou não

b = verificaBolo(codigobolo);

if(b.codigobolo != codigobolo){

printf("\nBolo não encontrado: ");

fflush(stdin);

scanf("%i",&codigobolo);

}// fim do if

}while(b.codigobolo != codigobolo);

p.pcodigobolo = codigobolo;

do{

printf("\nA quantidade do estoque %i",b.quantidadebolo);

printf("\nQuantidade :");

fflush(stdin);

scanf("%i",&p.pquantidadebolo);

if( p.pquantidadebolo > b.quantidadebolo)

{printf("\n\aA quantidade invalida!!!"); }

} while(( p.pquantidadebolo > b.quantidadebolo));

// tira a quantiade de bolos vendidos

b.quantidadebolo= b.quantidadebolo - p.pquantidadebolo;

// calcula o preço do bolo

p.valortotalpedido = b.precobolo * p.pquantidadebolo ;

printf("\nPreco Total : %8.2f ",p.valortotalpedido);

//aqui esta com erro !

fseek(bolo1,ftell(bolo1) - sizeof(struct bolo),0);

fwrite(&b,sizeof(struct bolo),1,bolo1);

fseek(pedido1,0,SEEK_END);

fwrite(&p,sizeof(struct pedido),1,pedido1);

fflush(stdin);

getchar();

break;

}//Fim do case 3

case 6:{

system("cls");

fseek(cliente1,0,SEEK_SET);

while(fread(&c,sizeof(struct cliente),1,cliente1) == 1 )

printf("\n Codigo cliente: %i \n Nome cliente: %s \n Endereco cliente: %s \n Numero: %i\n", c.codigocliente,c.nomecliente,c.enderecocliente,c.numerocliente );

fflush(stdin);

getchar();

break;

}//Fim do case 6

case 7:{

system("cls");

fseek(bolo1,0,SEEK_SET);

while( fread (&b,sizeof(struct bolo),1,bolo1) == 1 )

printf("\n\nCodigo bolo: %i\nNome : %s\nQuantidade: %i\nPreco: %8.2f\n",b.codigobolo,b.nomebolo,b.quantidadebolo,b.precobolo);

fflush(stdin);

getchar();

break;

}//Fim do case 7

case 8:{

system("cls");

fseek(pedido1,0,SEEK_SET);

while( fread (&p,sizeof(struct pedido),1,pedido1) == 1 )

printf("\nCodigo pedido: %i \nCodigo bolo: %i \nCodigo cliente: %i \nPreco pedido: %8.2f \n",p.codigopedido,p.pcodigobolo,p.pcodigocliente,p.valortotalpedido);

fflush(stdin);

getchar();

break;

}//fim do case 8

}// fim do switch

system("cls");

printf("\n 1 - Cadastrar cliente\n 2 - Cadastrar Bolo\n 3 - Cadastrar Pedido \n 6 - Cliente Cadastrado\n 7 - Bolo Cadastrado \n 8 - Pedidos Cadastrados\n");

fflush(stdin);

scanf("%i",&opcao);

}//fim do while opcao

fclose(cliente1);

fclose(bolo1);

}// Fim da main

Link para o comentário
Compartilhar em outros sites

0 respostass a esta questão

Posts Recomendados

Até agora não há respostas para essa pergunta

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,2k
    • Posts
      652k
×
×
  • Criar Novo...