Ir ao conteúdo

Posts recomendados

Postado

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);    
        }
    }
}>

 

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

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

LANÇAMENTO!

eletronica2025-popup.jpg


CLIQUE AQUI E BAIXE AGORA MESMO!