-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathCarrinho.cpp
156 lines (146 loc) · 5.09 KB
/
Carrinho.cpp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
#include "Carrinho.h"
#include "estoque.h"
#include "utiil.h"
#include <iostream>
#include <stdlib.h>
using namespace std;
int carrinhoVazio(Carrinho * carrinho) {
/*verifica se o carrinho está vazio*/
return (carrinho->pilha == NULL);
}
void criaCarrinho(Carrinho * carrinho) {
/*cria um carrinho vazio*/
carrinho->pilha = NULL;
carrinho->tamanho = 0;
}
int carrinhoPush(Carrinho * carrinho, Produto * produto, int quantidade) {
/*cria um novo nó de carrinho e verifica se foi alocada a memoria, se não foi retorna erro*/
Nodec * novo;
novo = (Nodec *) malloc(sizeof (Nodec));
if (novo == NULL) {
(void) fprintf(stderr, "ERRO: Impossivel alocar no item em carrinho.\n");
return 0;
}
/*salva os dados novos no nó criado*/
novo->produto.codigo = produto->codigo;
novo->produto.valor = produto->valor;
novo->produto.quantidade = quantidade;
/*verifica se o carrinho está vazio se estiver o nó anterior da pilha é definido como vazio*/
if (carrinhoVazio(carrinho)) {
novo->proximo = NULL;
} else {
novo->proximo = carrinho->pilha;
}
/*define a onó novo como topo da pilha e aumenta o tamanho da pilha*/
carrinho->pilha = novo;
carrinho->tamanho++;
return 1;
}
int carrinhoPop(Carrinho * carrinho, Produto * produto) {
/*verifica se o carrinho está vazio*/
if (carrinhoVazio(carrinho)) {
return 0;
}
Nodec * aux;
aux = carrinho->pilha;
/*recupera o produto do alto da pilha do carrinho*/
*produto = carrinho->pilha->produto;
carrinho->pilha = aux->proximo;
/*libera o espaço alocado do produto do alto do carrinho*/
free(aux);
/*diminui o tamanho do carrinho*/
carrinho->tamanho--;
return 1;
}
int carrinhoStackPop(Carrinho * carrinho, Produto * produto) {
/*verifica se o carrinho está vazio*/
if (carrinhoVazio(carrinho)) {
return 0;
}
/*recupera o produto do alto do carrinnho*/
*produto = carrinho->pilha->produto;
return 1;
}
void printCarrinho(Carrinho * carrinho) {
/*verifica se o carrinho está vazio*/
if (carrinhoVazio(carrinho)) {
cout << "carrinho vazio" << endl;
return;
}
/*percorre todos os nós do carrinho*/
Nodec * aux;
aux = carrinho->pilha;
while (aux != NULL) {
/*imprime os produtos do carrinho*/
printProduto(&(aux->produto));
aux = aux->proximo;
}
return;
}
int escolheProdutos(Carrinho * carrinho, Estoque * estoque, int quantidade, Repor * repor) {
Produto * produto;
/*codigo do produto que será comprado*/
int codigo_produto;
/*quantidade de produto que será comprado*/
int quantidade_produto;
int tentativas = 25;
/*enquanto a quantidade de produtos não for alcançada o cliente oontinua comprando*/
while (quantidade > 0) {
/*escole o produto*/
codigo_produto = aleatorio(codigo_produto_max, 0);
/*procura o produto*/
produto = procura(estoque, codigo_produto);
if (produto == NULL) {
/*produt inexistente, tem que salvar para comprar depois*/
// cout << "produto em falta " << codigo_produto << endl;
/*se não achar o produto reduz a quantidade de tentativas*/
tentativas--;
adicionaRepor(repor, codigo_produto);
} else {
/*escolhe a quantidade de produto*/
quantidade_produto = aleatorio(quantida_produto_padrao, 1);
/*
* verifica se a quantidade de produtos escolhido é maior do que a
* quantidade de produtos que o cliente ainda pode comprar
*/
if (quantidade_produto > quantidade) {
quantidade_produto = quantidade;
}
/*
* verifica se a quantidade do produtos escolhido é maior do que a
* desejada
*/
if (quantidade_produto < produto->quantidade) {
carrinhoPush(carrinho, produto, quantidade_produto);
produto->quantidade -= quantidade_produto;
quantidade -= quantidade_produto;
} else {
/*
* se for escolhido mais produtoo do que a quantidade em estoque,
* o produto é removido do estoque
*/
carrinhoPush(carrinho, produto, produto->quantidade);
quantidade -= produto->quantidade;
removeProduto(estoque, codigo_produto);
}
}
/*caso tenha procurado varios produtos e não conseguiu achar, verifica se o cliente conseguiu ou não compra algo*/
if (tentativas <= 0) {
if (carrinhoVazio(carrinho)) {
return 0;
} else {
return 1;
}
}
}
/*retorna true*/
return 1;
}
Produto * primeiroCarrinho(Carrinho * carrinho) {
/*verifica se o carrinho está vazio, se estiver volta pontiero para NULL*/
if (carrinhoVazio(carrinho)) {
return NULL;
}
/*retorn o ponteiro para carrinho*/
return &(carrinho->pilha->produto);
}