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

Problema em arquivo binário em C


chrisbremm

Pergunta

Ao Inserir a mercadoria, programa acusa que já existe. Não estou achando o problema, alguém consegue?

 

 

// Christiano Bremm - 37301
#include <ctype.h>
#include <conio.h>
#include <stdio.h>
#include <stdlib.h>

struct loja
{
    int cod;
    char fornecedor[20];
    float val_forn;
};

struct Comp_forn
{
    int cod;
    int cod_prod;
    char nome_prod[20];
    float val_unit;
    int quantidade;
};
int VerifForn(FILE *arq, char arquivo[100],int cod);

void inserir (FILE *arq, char arquivo[100],int alt);
void verificarF(FILE *arq,char arquivo[100]);
void consultar (FILE *arq, char arquivo[100], int alt);
void apagar(FILE *arq, char arquivo[100], int alt);
void alterar(FILE *arq, char arquivo[100], int alt);


int main()
{   int    A;
    int  B;

    char C;
    char   fornecedor_arq[100] = "fornecedores.txt";
    char   compra_arq[100]      = "compras.txt";

    struct loja fornec;
    struct Comp_forn compras;

    FILE   *arquivo_fornecedor, *arquivo_compras;

    verificarF(arquivo_fornecedor, fornecedor_arq);
    verificarF(arquivo_compras, compra_arq);

    do{
        system("cls");
        printf("=======LOJA DE CHOCOLATE======= \n");
        printf("(1) - INSERIR INFORMACOES\n");
        printf("(2) - MODIFICAR INFORMACOES\n");
        printf("(3) - CONSULTAR INFORMACOES\n");
        printf("(4) - APAGAR INFORMACOES \n");
        printf("(0) - SAIR\n\n");
        printf("OPCAO DESEJADA : ");
        fflush(stdin);
        C=tolower(getchar());
        system("cls");
        switch (C) {
            case 49:
                printf("==INSERIR==\n");
                printf("1-FORNECEDOR \n2-MERCADORIAS\n3-SAIR\nOPCAO: ");
                scanf("%i",&A);
                while(A==1 || A==2){
                    if (A==1)
                        inserir(arquivo_fornecedor, fornecedor_arq,A);
                    else
                        inserir(arquivo_compras, compra_arq,A);

system("cls");
                    printf("==INSERIR==\n");
                    printf("1-FORNECEDOR \n2-MERCADORIAS\n3-SAIR\nOPCAO: ");
                    scanf("%i",&A);
                }
                break;
            case 51:
                printf("==CONSULTAR==\n");
                printf("1-FORNECEDOR \n2-MERCADORIAS\n3-SAIR\nOPCAO: ");
                scanf("%d",&A);
                while(A==1 || A==2){
                    if (A == 1)
                        consultar(arquivo_fornecedor, fornecedor_arq,A);
                    else
                        consultar(arquivo_compras, compra_arq,A);

system("cls");
                    printf("==CONSULTAR==\n");
                    printf("1-FORNECEDOR \n2-MERCADORIAS\n3-SAIR\nOPCAO: ");
                    scanf("%d",&A);
                }
                break;
            case 50:
                printf("==MODIFICAR==\n");
                printf("1-FORNECEDOR \n2-MERCADORIAS\n3-SAIR\nOPCAO: ");
                scanf("%d",&A);
                while(A==1 || A==2){
                    if (A == 1)
                        alterar(arquivo_fornecedor, fornecedor_arq,A);
                    else
                        alterar(arquivo_compras, compra_arq,A);

system("cls");
                    printf("==MODIFICAR==\n");
                    printf("1-FORNECEDOR \n2-MERCADORIAS\n3-SAIR\nOPCAO: ");
                    scanf("%d",&A);
                }
                break;
            case 52:
                printf("==APAGAR==\n");
                printf("1-FORNECEDOR \n2-MERCADORIAS\n3-SAIR\nOPCAO: ");
                scanf("%d",&A);
                while(A==1 || A==2){
                    if (A == 1)
                        APAGAR(arquivo_fornecedor, fornecedor_arq,A);
                    else
                        APAGAR(arquivo_compras, compra_arq,A);

system("cls");
                    printf("==APAGAR==\n");
                    printf("1-FORNECEDOR \n2-MERCADORIAS\n3-SAIR\nOPCAO: ");
                    scanf("%d",&A);
                }
                break;
            case 48:
                exit(1);
            default:
                printf("==OPCAO INVALIDA==\n");
                getch();
                break;

        }
    } while (C != 48);

    return 0;
}


void verificarF(FILE *arq, char arquivo[100]){
    arq = fopen(arquivo, "rb+");
    if(arq == NULL){
        arq = fopen(arquivo,"wb+");
        if(arq == NULL){
            printf("==ARQUIVO COM PROBLEMA NA CRIACAO OU ABERTURA==\n");
            exit(1);
        }
    }
}


void inserir(FILE *arq, char arquivo[100],int alt)
{
    arq = fopen(arquivo, "rb+");
    char XYZ[25];
    int  iXYZ;

    if (alt == 1){

        struct loja sXYZ;

        printf("INSIRA O CODIGO DO FORNECEDOR:\n");
        fflush(stdin);
        gets(XYZ);
        iXYZ = VerifForn(arq, arquivo,atoi(XYZ));
        while(iXYZ==1){
            printf("==já CRIADO==\n");
            printf("INSIRA O CODIGO DO FORNECEDOR: ");
            gets(XYZ);
            iXYZ = VerifForn(arq, arquivo,XYZ);
            fflush(stdin);

        }
        sXYZ.cod = atoi(XYZ);
        printf("INSIRA O NOME DO FORNECEDOR: \n");
        gets(sXYZ.fornecedor);
        fflush(stdin);
        sXYZ.val_forn=0;
        fseek(arq,0,SEEK_END);
        fwrite(&sXYZ, sizeof(struct loja), 1, arq);
    }
    else{
        struct Comp_forn sXYZ;
        printf("INSIRA O CODIGO DO FORNECEDOR: \n");
        fflush(stdin);
        gets(XYZ);

        iXYZ = VerifForn(arq, arquivo,XYZ);
        while(iXYZ==0){
            printf("==já CRIADO==\n");
            printf("INSIRA O CODIGO DO FORNECEDOR:\n");
            fflush(stdin);
            gets(XYZ);
            iXYZ = VerifForn(arq, arquivo,XYZ);
        }

        sXYZ.cod=atoi(XYZ);
        fflush(stdin);
        printf("INSIRA O CODIGO DO PRODUTO: \n");
        gets(XYZ);
        sXYZ.cod_prod = atoi(XYZ);
        fflush(stdin);
        printf("INSIRA O NOME DO PRODUTO: \n");
        gets(sXYZ.nome_prod);
        fflush(stdin);
        printf("INSIRA O preço DO PRODUTO:\n");
        scanf("%.2f", &sXYZ.val_unit);
        fflush(stdin);
        printf("INSIRA A QUANTIDADE COMPRADA DO PRODUTO: \n");
        scanf("%i", &sXYZ.quantidade);
        fflush(stdin);

        fseek(arq,0,SEEK_END);
        fwrite(&sXYZ,sizeof(struct Comp_forn),1, arq);
    }

    fclose(arq);
    printf("REGISTRO EXECUTADO! PRESSIONE ENTER PARA PROSSEGUIR\n");
    getch();
    system("cls");
}

void consultar (FILE *arq, char arquivo[100], int alt)
{


    if (alt == 1){
        struct loja fornecedor;
        int cod, ok = 0;
        char XYZ[25];

        fflush(stdin);
        arq = fopen(arquivo, "rb+");

        printf("INSIRA O CODIGO DO FORNECEDOR\n");
        fflush(stdin);
        gets(XYZ);
        cod = atoi(XYZ);

        rewind(arq);
        while(!feof(arq) && ok==0){

            fread(&fornecedor, sizeof(struct loja), 1, arq);

            if(fornecedor.cod == cod) {
                 printf("NOME DO FORNECEDOR: %s\n", fornecedor.fornecedor);
                 ok = 1;
            }
        }

        if (ok == 0){
            printf("NADA ENCONTRADO!\n");
        }

    } else {


        struct Comp_forn compras;
        int cod, ok = 0;
        char XYZ[25];
        fflush(stdin);
        arq = fopen(arquivo, "rb+");
        printf("INFORME O CODIGO DO PRODUTO: \n");
        fflush(stdin);
        gets(XYZ);
        cod = atoi(XYZ);
        rewind(arq);
        while(!feof(arq) && ok==0){

            fread(&compras, sizeof(struct Comp_forn), 1, arq);

            if(compras.cod_prod == cod) {
                 printf("CODIGO DO FORNECEDOR: %i \n", compras.cod);
                 printf("CODIGO DO PRODUTO: %i \n", compras.cod_prod);
                 printf("NOME DO PRODUTO: %s \n", compras.nome_prod);
                 printf("QUANTIDADE COMPRADA: %i \n", compras.quantidade);
                 printf("VALOR (und): %.2f \n", compras.val_unit);
                 ok = 1;
            }
        }

        if (ok == 0){
            printf("NADA ENCONTRADO\n");
        }

    }

     fclose(arq);
     printf("PRESSIONE ENTER\n");
     getch();
}

void APAGAR(FILE *arq, char arquivo[100], int alt)
{


    if (alt == 1){
        struct loja fornecedor;
        int cod, ok = 0, stop = -1;
        char XYZ[25];
        fflush(stdin);
        arq = fopen(arquivo, "rb+");
        printf("INFORME O CODIGO DO FORNECEDOR: \n");
        fflush(stdin);
        gets(XYZ);
        cod = atoi(XYZ);
        rewind(arq);
        while(!feof(arq) && ok == 0){
            stop++;
            fread(&fornecedor, sizeof(struct loja), 1, arq);

            if(fornecedor.cod == cod) {
                 printf("NOME DO FORNECEDOR: %s \n", fornecedor.fornecedor);
                 ok = 1;
            }
        }

        if (ok != 0){

            int escolha;
            printf("DESEJA APAGAR FORNECEDOR? %s (SIM = 1, não = 0)?", fornecedor.fornecedor);
            fflush(stdin);
            scanf("%i", &escolha);

            if (escolha == 1){
                fornecedor.cod = 999;
                fseek(arq, sizeof(struct loja) *stop, SEEK_SET);
                fwrite(&fornecedor,sizeof(struct loja),1, arq);
                printf("==REGISTRO APAGADO==\n");
            }
        } else {
            printf("==NADA ENCONTRADO==\n");
        }
    } else {


        struct Comp_forn compras;
        int cod, ok = 0, stop = -1;
        char XYZ[25];

        fflush(stdin);
        arq = fopen(arquivo, "rb+");
        printf("INFORME O CODIGO DO PRODUTO:\n");
        fflush(stdin);
        gets(XYZ);
        cod = atoi(XYZ);
        rewind(arq);

        while(!feof(arq) && ok==0){

            stop++;
            fread(&compras, sizeof(struct Comp_forn), 1, arq);

            if(compras.cod_prod == cod) {
                 ok = 1;
            }
        }

        if (ok != 0){

            int escolha;
            printf("APAGAR PRODUTO? %s (SIM = 1, não = 0)?", compras.nome_prod);
            fflush(stdin);
            scanf("%i", &escolha);

            if (escolha == 1){
                compras.cod_prod = 999;
                compras.cod  = 999;
                fseek(arq, sizeof(struct Comp_forn) *stop, SEEK_SET);
                fwrite(&compras,sizeof(struct Comp_forn),1, arq);
                printf("==REGISTRO EXCLUIDO==\n");
            }
        } else {
            printf("==NADA ENCONTRADO==\n");
        }

    }

     fclose(arq);
     printf("TECLE ENTER\n");
     getch();
}

void alterar(FILE *arq, char arquivo[100], int alt)
{


    if (alt == 1){
        struct loja fornecedor;
        int cod, ok = 0, stop = -1;
        char XYZ[25];

        fflush(stdin);
        arq = fopen(arquivo, "rb+");
        printf("INFORME O CODIGO DO FORNECEDOR: \n");
        fflush(stdin);
        gets(XYZ);
        cod = atoi(XYZ);
        rewind(arq);
        while(!feof(arq) && ok==0){

            stop++;
            fread(&fornecedor, sizeof(struct loja), 1, arq);
            if(fornecedor.cod == cod) {
                 printf("NOME DO FORNECEDOR: %s \n", fornecedor.fornecedor);
                 ok = 1;
            }
        }

        if (ok != 0){

            struct loja insertdados;

            insertdados.cod = fornecedor.cod;
            insertdados.val_forn = fornecedor.val_forn;
            printf("INSIRA NOVO NOME: \n");
            fflush(stdin);
            scanf("%s", &insertdados.fornecedor);
            fseek(arq, sizeof(struct loja) *stop, SEEK_SET);
            fwrite(&insertdados, sizeof(struct loja),1, arq);
            printf("==INFORMACOES ALTERADAS==\n");

        } else {
            printf("==NADA ENCONTRADO==\n");
        }
    } else {

        struct Comp_forn compras;
        int cod, ok = 0, stop = -1;
        char XYZ[25];

        fflush(stdin);
        arq = fopen(arquivo, "rb+");
        printf("INSIRA O CODIGO DO PRODUTO:\n");
        fflush(stdin);
        gets(XYZ);
        cod = atoi(XYZ);
        rewind(arq);
        while(!feof(arq) && ok==0){

            stop++;
            fread(&compras, sizeof(struct Comp_forn), 1, arq);

            if(compras.cod_prod == cod) {
                 ok = 1;
            }
        }

        if (ok != 0){
            struct Comp_forn insertdados;

            insertdados.cod = compras.cod;
            insertdados.cod_prod = compras.cod_prod;

            printf("NOVO NOME DO PRODUTO:\n");
            fflush(stdin);
            scanf("%s", &insertdados.nome_prod);
            printf("NOVO VALOR (und):\n");
            fflush(stdin);
            scanf("%s", &insertdados.val_unit);
            printf("NOVA QUANTIDADE DE COMPRA:\n");
            fflush(stdin);
            scanf("%s", &insertdados.quantidade);

            fseek(arq, sizeof(struct Comp_forn) *stop, SEEK_SET);
            fwrite(&insertdados, sizeof(struct Comp_forn),1, arq);
            printf("==INFORMACOES ALTERADAS==\n");
        } else {
            printf("==NADA ENCONTRADO==\n");
        }

    }

     fclose(arq);
     printf("==PRESSIONE ENTER==\n");
     getch();
}

    struct loja fornecedor;
    int VerifForn(FILE *arq, char arquivo[100],int cod){
    int ok = 0;

    rewind(arq);
    while(!feof(arq) && ok==0){
        fread(&fornecedor, sizeof(struct loja), 1, arq);
        if(fornecedor.cod == cod) {
            ok = 1;
        }
    }

    return(ok);
}
 

Link para o comentário
Compartilhar em outros sites

2 respostass a esta questão

Posts Recomendados

  • 0

São tantos erros que desisti no meio do caminho. você não presta atenção nos avisos do compilador? Se aprender a interpretar esses erros certamente você seria capaz de consertar o programa. você tenta ler strings com & adiante, depois tenta ler floats com o especificador %f, a mesma coisa com inteiros, troca o maiúsculas por minúsculas na hora de chamar funções entre outros muitos erros. Simplesmente acho que você precisa prestar mais atenção vei.

Todas essas funções da a impressão que você foi programando sem ir resolvendo os problemas, dai se acumularam tantos que realmente da até vontade de começar de zero novamente.
 

Link para o comentário
Compartilhar em outros sites

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,3k
    • Posts
      652,4k
×
×
  • Criar Novo...