Olá, pessoal.
Então, eu to fazendo um trabalho para faculdade, onde devo criar um programa em C que gerencie um estoque. O programa deve ter as seguintes funções:
1. Cadastrar produto;
2. Mostrar catalogo;
3. Mostrar estoque;
4. Aumentar estoque;
5. Diminuir estoque;
As 3 primeiras eu fiz de boa, o problema ta na função 4, pois eu consigo mudar o atributo de quantidade (qntd) dentro da função, mas não consigo mante-lo fora dela (no resto do código). Eu sei que tenho que usar ponteiro (como usei no catalogo), mas não consegui escrever o código pra isso (ponteiro de vetor de estrutura).
Segue o código:
PS: Deixei a função com parâmetros que não são ponteiros de propósito, já que não sei como declara.
#include <stdio.h>
#define MAX 100
typedef struct
{
int codigo;
char nome[50];
float valor;
}Produto;
typedef struct
{
Produto prod;
int qntd;
}Item;
int menu(Produto catalogo[], int *tam_catalogo, Item estoque[]);
void cadastrar_produto(Produto catalogo[], int *tam_catalogo);
void mostrar_catalogo(Produto catalogo[], int *tam_catalogo);
void mostrar_estoque(Item estoque[], Produto catalogo[], int *tam_catalogo);
void aumentar_estoque(Item estoque[]);
int main()
{
Produto catalogo[MAX];
Item estoque[MAX];
int i;
for (i = 0; i < MAX; i++)
{
estoque.qntd = 0;
}
int tam_catalogo = 0;
int *ptc = &tam_catalogo;
int continuar;
do
{
continuar = menu(catalogo, &ptc, estoque);
}
while (continuar);
return 0;
}
int menu(Produto catalogo[], int *tam_catalogo, Item estoque[])
{
int opcao;
printf ("\n-- MENU DE opções --\n");
printf ("\n1. Cadastrar produto");
printf ("\n2. Mostrar catalogo");
printf ("\n3. Mostrar estoque");
printf ("\n4. Aumentar estoque");
printf ("\n5. Diminuir estoque");
printf ("\n0. Sair\n");
printf ("\nSelecione uma opcao: ");
scanf ("%d", &opcao);
switch (opcao)
{
case 1:
{
cadastrar_produto(catalogo, *tam_catalogo);
break;
}
case 2:
{
mostrar_catalogo(catalogo, *tam_catalogo);
break;
}
case 3:
{
mostrar_estoque(estoque, catalogo, *tam_catalogo);
break;
}
case 4:
{
aumentar_estoque(estoque);
break;
}
case 5:
{
//ainda vou fazer, pois preciso da função 4 pronta;
}
case 0:
{
system ("cls || clear");
printf ("Obrigado por usar! Ate a proxima!\n");
break;
}
default:
{
printf ("\nOpcao invalida!\n");
}
}
return opcao;
}
void cadastrar_produto(Produto catalogo[], int *tam_catalogo)
{
printf ("\nDigite o codigo do produto: ");
scanf ("%d", &catalogo[*tam_catalogo].codigo);
printf ("Digite o nome do produto: ");
fflush(stdin);
gets(catalogo[*tam_catalogo].nome);
printf ("Digite o valor do produto: R$ ");
scanf ("%f", &catalogo[*tam_catalogo].valor);
*tam_catalogo = *tam_catalogo + 1;
}
void mostrar_catalogo(Produto catalogo[], int *tam_catalogo)
{
int i;
printf ("\n ---------- CATALOGO DE PRODUTOS ----------\n");
printf ("\n COD - NOME - VALOR\n");
for (i = 0; i < *tam_catalogo; i++)
{
printf (" %2d - %20s - R$ %6.2f\n", catalogo.codigo, catalogo.nome, catalogo.valor);
}
}
void mostrar_estoque(Item estoque[], Produto catalogo[], int *tam_catalogo)
{
int i;
for (i = 0; i < *tam_catalogo; i++)
{
estoque.prod = catalogo;
}
printf ("\n ---------- ESTOQUE DE PRODUTOS ----------\n");
printf ("\n COD - NOME - VALOR - ESTOQUE\n");
for (i = 0; i < *tam_catalogo; i++)
{
printf (" %2d - %20s - R$ %6.2f - %d\n", estoque.prod.codigo, estoque.prod.nome, estoque.prod.valor, estoque.qntd);
}
}
void aumentar_estoque(Item estoque[])
{
int escolha, quantidade;
printf ("\nDe qual produto deseja adicionar estoque? ");
scanf ("%d", &escolha);
printf ("\nQuantos itens do produto deseja adicionar: ");
scanf ("%d", &quantidade);
estoque[escolha].qntd += quantidade;
printf ("\n");
}
Desde já agradeço.