Ir ao conteúdo
  • Cadastre-se

C Este Código esta com problema em uma das partes


Posts recomendados

Boa tarde meu queridos amigos, estou com um problema nesse código, sera que uma alma generosa poderia dar uma olhada?

 

<#include <stdio.h>
<#include <stdlib.h>
<#define MAX 100
<#include <locale.h>



//O sistema a ser construído necessitará atender aos requisitos funcionais abaixo:
//Possuir um menu de opção. (Funcionando)
//Incluir o registro das obras.
//Listar todos os livros.(quando tento listar, ele esta selecionando ambos, revistar e livros)
//Listar todas as revistas.
//Listar as obras por caixa.(nao consegui criar esta parte, estou a 1 semana nesse código e empaquei).



typedef struct cadastro
{
    char descricao[50];
    int categoria;
    int quantidadeEstoque;
    int categoriaLivro;
    int categoriaResvistas;
    int caixa;
} Cadastro;

void identificacao();
void cadastroItens(Cadastro produto[MAX]);
void ListarTodosLivros(Cadastro produto[MAX]);
void ListarTodasRevistas(Cadastro produto[MAX]);
void ListarProdutosCaixa(int buscaLocal, Cadastro produto[MAX]);
int contarRegistro(Cadastro produto[MAX]);

int main()
{
    Cadastro produto[MAX];
    setlocale(LC_ALL, "Portuguese");
    
    int op, buscaLocal, buscaCategoria;
    do{
        identificacao();
        printf("\n1 - Cadastro de Livros e Revistas");
        printf("\n2 - Listar todos os livros");
        printf("\n3 - Listar todas as Revistas");
        printf("\n4 - Listar produto por Caixas");
        printf("\n0 - Sair");
        printf("\nEscolha Opção: ");
        scanf("%d", &op);
        
        switch(op){
            case 1:
                cadastroItens(produto);
                break;
            case 2:
                ListarTodosLivros(produto);
                printf("\n");
                system("pause");
                break;
            case 3:         
                ListarTodasRevistas(produto);
                printf("\n");
                system("pause");
                break;
            case 4: 
                printf("Informe a caixa que deseja selecionar");;
                fflush(stdin);
                scanf("%d", &buscaLocal);
                ListarProdutosCaixa(buscaLocal, produto);
                printf("\n");
                system("pause");
                break;
            case 0:
                printf("\nSaindo do sistema!!!");
                break;
            default:
                printf("\nErro! Opcao Invalida\n");
                system("pause");
                break;
        }    
    }while(op!=0);
    return 0;
}

void identificacao(){
    system("cls");
    int t;
    for(t=0; t<50; t++) printf("-");
    printf("\n >>>> Diego Fernando de Jesus Barrufi <<<<");
    printf("\n >>>> RA: 20115177-5 <<<< ");
    printf("\n >>>> Engenharia de Software <<<< \n");
    for(t=0; t<50; t++) printf("-");
}
void cadastroItens(Cadastro produto[MAX])
{
    identificacao();
    int i;
    int sec;
    FILE * arq;
 
    arq = fopen("dadosDosLivros.txt", "a+");

    if(arq != NULL)
    {
        for(i = 0; i < 1; i++){
            printf("\nNome do Livro/Revista: ");
            fflush(stdin);
            gets(produto.descricao);
            printf("\nCategorias: \n[1] Livro | [2] Resvita\n");
            fflush(stdin);
            scanf ("%d", &sec);
                switch(sec){
                    case 1:
                        (produto.categoriaLivro = 1);
                        break;
                    case 2:                        
                        (produto.categoriaResvistas = 1);
                        break;
                    default:
                        printf ("\nOpacao invalida");
                } //scanf("%d", &produto.categoria);
            fwrite(&produto, sizeof(Cadastro), 1, arq);
        }
        fclose(arq); 
    }
    else
    {
        printf("\nErro ao abrir o arquivo para leitura!\n");
        exit(1); 
    }
}

int contarRegistro(Cadastro produto[MAX])
{
    FILE * arq = fopen("dadosDosLivros.txt", "r");
    if(arq != NULL)
    {
        int contador = 0;
        while(1)
        {
            Cadastro p;
        
            int registro = fread(&p, sizeof(Cadastro), 1, arq);
            
            if(registro < 1)
                break;
            else
                produto[contador] = p;
            contador++;
        }
        fclose(arq); 
        return contador;
    }
    else
    {
        printf("\nErro ao abrir o arquivo para leitura!\n");
        exit(1);
    }
}


void ListarTodosLivros(Cadastro produto[MAX]){    
    identificacao();
    
    int quantidadeLivro = contarRegistro(produto);
    int i;
    
    printf("\n>>>> Lista de Livros<<<< %d\n", quantidadeLivro);
    
    printf("ITEM \t | DESCRIÇÃO \t\t| CATEGORIA \t | LOTE");
    for(i = 0; i < quantidadeLivro; i++)
    {
        printf("\n%d \t | %s \t\t| %d \t\t | %d \t\t | %d", i+1, produto.descricao, produto.categoriaLivro, produto.caixa);    
    }
}


void ListarTodasRevistas(Cadastro produto[MAX]){    
    identificacao();
    
    int quantidadeDeRevistas = contarRegistro(produto);
    int i;
    
    printf("\n>>>> Lista de Revistas <<<< %d\n", quantidadeDeRevistas);
    
    printf("ITEM \t | DESCRIÇÃO \t\t| CATEGORIA \t | CAIXA");
    for(i = 0; i < quantidadeDeRevistas; i++)
    {
        printf("\n%d \t | %s \t\t | %d \t\t | %d \t\t | %d", i+1, produto.descricao, produto.categoriaResvistas, produto.caixa);    
    }
}


void ListarProdutosCaixa(int buscarLote, Cadastro produto[MAX]){
    identificacao();
    
    int quantidadeproduto = contarRegistro(produto);
    int i;
    
    printf("\n>>>> Lista de Produtos por caixa <<<< \n");
    printf("Lote pesquisado: %d \n", buscarLote);
    
    printf("CODIGO \t | DESCRIÇÃO \t\t | CATEGORIA \t | CAIXA");
    for(i = 0; i < quantidadeproduto; i++)
    {
        if(produto.caixa == buscarLote){
            printf("\n%d \t | %s \t\t | %d \t\t | %d \t\t | %d", i+1, produto.descricao, produto.categoria, produto.caixa);    
        }
    }
}>

 

Link para o comentário
Compartilhar em outros sites

typedef struct cadastro
{
    char descricao[50];
    int categoria;
    int quantidadeEstoque;
    int categoriaLivro;
    int categoriaResvistas;
    int caixa;
} Cadastro;
    //Possuir um menu de opção. (Funcionando)

No futuro considere a sugestão de nunca escrever o menu antes de terminar o programa. Só faz você perder tempo.

 

  • Porque tem 3 campos para categoria?
  • Porque não escreveu uma função simples desde o início para listar TODO o cadastro do jeito que está?
  • Como controla o tamanho do cadastro? 
  • Porque não criou uma estrutura tipo itens e colocou todos dentro do cadastro? Faria sua vida mais fácil
    Poderia declarar apenas
    Cadastro	loja;
    	
    	loja.N = 0; // vazio no início

    Se escrevesse

  • typedef struct
    {
        char descricao[50];
        int categoria;
        int quantidadeEstoque;
        int categoriaLivro;
        int categoriaResvistas;
        int caixa;
    }   Item;
    
    typedef struct
    {
        int     N;
        Item    item[MAX];
    } Cadastro;
    

E isso?

 

  • image.thumb.png.d0902e436c2dec85c8d9092a761909f1.png
  • Para que um loop que só lê um produto?
  • Está errado: produto é do tipo Cadastro[] certo? Qual o índice? Sim, devia ser i só que usou apenas 1 no loop então de nada serve... Pense nisso. Você quer ler produto e variar i 
Para acessar produto aí dentro precisa de -> e não ponto já na função recebeu apenas o endereço.
adicionado 4 minutos depois

Esqueci de comentar sobre listar por caixas. 

Não precisa inventar nada: apenas escreva uma função tipo compara_obras que compara duas obras

e compara os registros, retornando 1 se a caixa da segunda obra é maior que a caixa da primeira, 0 se for a mesma caixa e -1 se a caixa do primeiro for menor.

Ai você chama sort() e diz pra usar essa função que escreveu. Ela vai classificar seu cadastro e retornar as obras separadas.

Link para o comentário
Compartilhar em outros sites

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