Preciso adicionar uma parte ao código que emita um relatório final com as seguintes informações:
- numero total de itens vendidos de cada produto
- total pago para cada produto
- total arrecadado
- média de valor pago por pedido
Estou em dúvida se crio uma funcão e nela adiciono os dados para quando o pedido é encerrado/solicitada uma nova venda, ou se adiciono mais um while ao inicio do código, para caso a opção de finalizar/nova venda seja selecionada, os dados armazenados nas variaveis sejam apresentados conforme solicitado, poderiam me auxiliar?
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <time.h>
#define ITENS_MENU 5
int codigos[ITENS_MENU] = { 100,101,102,103,104 } ;
char *produtos[ITENS_MENU] = { "Refrigerante", "Casquinha Simples", "Casquinha Dupla", "Sundae", "Banana Split" } ;
float precos[ITENS_MENU] = { 3.5, 4, 5, 6, 8.5 } ;
int ped_prod[ITENS_MENU]; // o pedido máximo terá ITENS_MENU itens
int ped_qtde[ITENS_MENU];
int tot_itens; // total de itens no pedido corrente
// essa função exibe o cardápio
void exibe_menu() {
int i;
printf("\nMenu\n\nCod Produto Preco\n");
for (i=0;i<5;i++){
printf("%3d %18s %6.2f\n",codigos[i],produtos[i],precos[i]);
};
};
// essa função adicione um novo item (se a quantidade for > 0)
// se o item já existir, altera a quantidade
// se o item não existir e a quantidade for >0, adiciona
// se o item existir e a quantidade for 0, remove o item
void novo_item( int produto, int qtde) {
int i;
int j;
int nao_achou = 1;
for (i=0;i<tot_itens;i++) {
if ( ped_prod[i] == produto) { // achou
nao_achou =0; // avisa que achou
if (qtde >0) { // qtde > 0
ped_qtde[i] = qtde; // altera qtde
break;
}
else {
for (j=i;j<tot_itens;j++){ // qtde = 0 !! vamos tirar
ped_prod[j] = ped_prod[j+1]; // tira o elemento do vetor
ped_qtde[j] = ped_prod[j+1];
};
tot_itens--; // diminui o número de itens pedidos
break;
};
};
};
if (nao_achou) { // não achou, vamos incluir o item no pedido
if (qtde>0) { // mas só se a qtde for > 0
ped_prod[tot_itens] = produto;
ped_qtde[tot_itens] = qtde;
tot_itens++; // incluimos +1 item no pedido
};
};
}
// exibe os itens do pedido até o momento
void exibe_pedido() {
int i;
int wint; // para calcular o índice dos itens
float subtotal =0;
printf("\nSeu pedido atual eh: \n");
for (i=0;i<tot_itens;i++) {
wint = ped_prod[i]-100;
printf("%3d %18s %6.2f X %3d = %6.2f\n",ped_prod[i],produtos[wint],precos[wint],ped_qtde[i],precos[wint]*ped_qtde[i]);
subtotal +=precos[wint]*ped_qtde[i];
};
printf(" Total %8.2f\n",subtotal);
}
int main() {
int wopcao =1;
int i;
int wqtde;
int continua =1;
float total;
int wint;
int geralPedido;
while (continua) {
wopcao = 1;
// zerar o pedido
printf("\nIniciando novo pedido\n");
total = 0;
tot_itens =0;
for (i=0;i<100;i++){
ped_prod[i] = 0;
ped_qtde[i] = 0;
};
while (wopcao) {
if (tot_itens) {
exibe_pedido();
}
else {
exibe_menu();
};
printf("\nInforme um codigo de produto ou selecione a opcao desejada\n");
printf("0=fechar, 1=revisar o pedido 2=exibir menu -> ");
scanf("%d",&wopcao);
switch (wopcao) {
case 1:
exibe_pedido();
break;
case 2:
exibe_menu();
break;
case 0:
printf("\n--Pedido encerrado--\n");
break;
default:
if (wopcao < codigos[0] || wopcao > codigos[ITENS_MENU-1]) {
printf("Opcao errada. Informe um codigo valido\n");
}
else {
do {
printf("Informe a quantidade desejada: ");
scanf("%d",&wqtde);
if (wqtde >=0) {
novo_item( wopcao,wqtde);
};
} while (wqtde <0);
};
};
};
if (tot_itens) {
exibe_pedido();
total = 0;
for (i=0;i<tot_itens;i++){
wint = ped_prod[i]-100;
total += precos[wint] * ped_qtde[i];
};
printf("\nSeu pedido vai custar %6.2f.\n",total);
};
printf ("Tecle 1 para novo pedido ou 0 para fechar o caixa: \n");
scanf("%d",&continua);
};
}