1
resposta

Problema com exercício de Struct

Olá, estou com um problema que meu professor da faculdade passou para estudar para prova que é o seguinte:

Criar um programa que contenha uma estrutura para representar informações de um produto, como o código a descrição, o valor, a quantidade disponível em estoque e um status para conter informação se o produto é ativo ou não. Criar uma segunda estrutura que representa um carrinho de de compras, com as seguintes informações: Número do item, a quantidade, o código do produto (representada na primeira estrutura), o valor unitário e o valor total. O programa principal deve ter dois menus principais como apresentado abaixo:

1- Cadastro do Produto            
2- Abrir Venda
9 - Sair
***1-Cadastro do Produto***
1- Inserir
2-Procurar
3-Alterar
4-Listar
9-Sair
***2. Abrir Venda***
1- Incluir Item
2-Fechar Venda

9-Sair

O programa deve funcionar da seguinte forma: O cadastro de produtos pode armazenar no máximo 100 produtos, use um vetor de ponteiros e alocação dinâmica para definí-lo. Ao abrir uma venda, você poderá inserir itens no seu carrinho de compras, para tanto use o código do produto para trazer o preço unitário (campo valor da primeira estrutura). Ao fechar a venda deverá apresentar em tela todos os itens do carrinho e o valor total a pagar, exemplo:

ITEM Cód. Produto Descrição Vlr. Unit. Total ITEM 1 10 Coca-Cola 2.90 29.00

2 20 Fanta 4.00 40.00

Total Compra--> 69.00

Acredito que eu tenha resolvido uns 70% do exercício. Eu estou com dificuldades de inserir os produtos no carrinho.

Eu consegui desenvolver até essa parte:

#include <stdio.h>
#include <stdlib.h>
struct Produto{
    int cod_prod;
    int vlr_prod;
    int quant;
    char nome_prod[51];
};
struct Carrinho{
    int num_item;
    int quant;
    int cod_prod;
    int vlr_unit;
    int vlr_total;
};
#define MAX 100
typedef struct Produto *ptr_prod;
ptr_prod p_prod[MAX];

int p; //variavel para controlar posicao

void inserir();
void procurar(int cod_prodproc);
void alterar(int cod_prodproc);
void listar();
void imprimir(int i);
void inicializa();

void inserir(){
    if(p<MAX){
        p_prod[p] = (ptr_prod) malloc(sizeof(struct Produto));
        printf("Digite o codigo: \n");
        scanf("%d", &p_prod[p]->cod_prod);
        fflush(stdin);
        printf("Digite o nome_prod do Produto: \n");
        gets(p_prod[p]->nome_prod);
        printf("Inserido com sucesso...\n");
        system("pause");
        p++;
    }else{
        printf("Memoria Cheia..\n");
        system("pause");
    }
}
void procurar(int cod_prodproc){
    int i;
    for(i=0; i<p; i++){
            if(cod_prodproc == p_prod[i]->cod_prod){
                printf("Registro encontrado \n");
                imprimir(i);
                system("pause");
            }
    }
}
void alterar(int cod_prodproc){
     int i;
     for(i=0; i<p; i++){
            if(cod_prodproc == p_prod[i]->cod_prod){
                printf("Registro encontrado \n");
                imprimir(i);
                printf("Digite o novo nome: \n");
                fflush(stdin);
                gets(p_prod[i]->nome_prod);
                printf("Nome alterado com sucesso..\n");
                system("pause");
            }
    }
}
void listar(){
    int i;
    for(i=0; i<p; i++){
        imprimir(i);
    }
    system("pause");
}
void imprimir(int i){
    printf("codigo do Produto:  %d \n", p_prod[i]->cod_prod);
    printf("Nome do Produto: %s \n", p_prod[i]->nome_prod);
    printf("-------------------------------------\n");
}
void inicializa(){
    int i;
    for(i=0; i<MAX; i++){
        p_prod[i] = NULL;
    }
}


int main()
{
    inicializa();
    p=0;
    int opc=0;
    int cod_prodproc=0;
        while(opc!=9){
             system("cls");
             printf("1. Cadastro do Produto \n");
             printf("2. Abrir Venda \n");
             printf("Escolha sua opcao: ");
             scanf("%d", &opc);
            switch(opc){
              case 1:
                while(opc!=9){
                        system("cls");
                        printf("1. Inserir \n");
                        printf("2. Procurar \n");
                        printf("3. Alterar \n");
                        printf("4. Listar \n");
                        printf("9. Voltar \n");
                        printf("Escolha sua opcao: ");
                        scanf("%d", &opc);
                        switch(opc){
                        case 1:
                            inserir();
                            break;
                        case 2:
                            printf("Digite o codigo a ser encontrado: ");
                            scanf("%d", &cod_prodproc);
                            procurar(cod_prodproc);
                            break;
                        case 3:
                             printf("Digite o codigo a ser alterado: ");
                            scanf("%d", &cod_prodproc);
                            alterar(cod_prodproc);
                            break;
                        case 4:
                            listar();
                            break;
                        case 9:
                            main();
                            break;
                        default:
                            printf("Opcao invalida \n");
                         }
                    }
              break;
              case 2:
                printf("VENDA\nEscolha a opcao:");
                while(opc!=9){
                 system("cls");
                        printf("1. Incluir Item \n");
                        printf("2. Fechar Venda \n");
                        printf("9. Voltar\n");
                        printf("Escolha sua opcao: \n");
                        scanf("%d", &opc);
                        switch(opc){
                        case 1:
                            printf("Ïnserir venda\n");
                            inserir();
                            break;
                        case 2:
                            printf("Fechar Venda\n");
                            break;
                        case 9:
                            main();
                            break;
                        default:
                            printf("Opcao invalida \n");
                         }
                }
            }
        }
    return 0;
}

Preciso de ajuda para pensar em uma maneira de armazenar os produtos que eu cadastrei no carrinho mas não sei como.

1 resposta

Olá Douglas,

Imagino que você deva estar confundindo na parte do Carrinho, pois declarou uma struct Carrinho ao invés de declarar uma struct Item_Do_Carrinho. A situação aqui é análoga ao Produto, você precisar criar uma estrutura para representar apenas um item e depois utilizar um vetor para guardar o conjunto completo de Produtos ou o Carrinho.

Talvez fique mais claro se você fizer um desenho em um papel, focando no quê significa um Produto, um Item_Do_Carrinho e seus respectivos vetores.

Além disso, você pode guardar esse Item_Do_Carrinho de duas maneiras, procurando o produto pelo código e guardando suas informações diretamente (como você já começou a fazer, declarando um vlr_unit, por exemplo) ou guardar um ponteiro para o seu produto, acessando as informações somente quando for necessário.

Qualquer uma delas vai funcionar, escolha a que você achar melhor.