-
Notifications
You must be signed in to change notification settings - Fork 0
/
mercado.c
180 lines (162 loc) · 5.41 KB
/
mercado.c
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
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
#include "mercado.h"
#include <stdio.h>
cliente clientes[20];
produto produtos[20];
FILE* fp_cliente;
FILE* fp_produto;
/*A função inicializa a lista de clientes com valores inválidos*/
void inicializa_lista_clientes(){
for(int i=0;i<20;i++){
clientes[i].cod = -1;
clientes[i].nome[0] = '\0',
clientes[i].idade = -1;
}
}
/*A função inicializa a lista de produtos com valores inválidos*/
void inicializa_lista_produtos(){
for(int i=0;i<20;i++){
produtos[i].cod = -1;
produtos[i].nome[0] = '\0';
produtos[i].valor = 0.0;
}
}
/*A função adiciona cliente pega um registro do tipo cliente e adiciona
na primeira posição que está livre (com valor inválido de cod)
senão encontrar, a lista está cheia e avisa como o printf*/
void adiciona_cliente(cliente novo_cliente){
int cont = 0;
while(cont<20){
if(clientes[cont].cod==-1){
clientes[cont] = novo_cliente;
return;
}
cont++;
}
printf("Lista de clientes esta cheia!!!!!");
}
/*A função adiciona produto pega um registro do tipo produto e adiciona
na primeira posição que está livre (com valor inválido de cod)
senão encontrar, a lista está cheia e avisa como o printf*/
void adiciona_produto(produto novo_produto){
for(int i=0;i<20;i++){
if(produtos[i].cod == -1){
produtos[i] = novo_produto;
return;
}
}
printf("Lista de produtos esta cheia!!!!!");
}
/*A função encontra o cliente pelo seu atributo código
Importante que na hora de cadastrar sejam valores únicos
Se ele não encontrar, retornar nulo. Se ele encontrar,
retorna um ponteiro pra posição do elemento na lista*/
cliente* busca_cliente_por_codigo(int cod){
int cont =0;
while(cont<20){
if(clientes[cont].cod == cod){
return clientes+cont;
}
cont++;
}
return NULL;
}
/*A função encontra o produto pelo seu atributo código
Importante que na hora de cadastrar sejam valores únicos
Se ele não encontrar, retornar nulo. Se ele encontrar,
retorna um ponteiro pra posição do elemento na lista*/
produto* busca_produto_por_codigo(int cod){
for(int i=0;i<20;i++){
if(produtos[i].cod == cod){
return produtos+i;
}
}
return NULL;
}
/*Printf Estilizado pra produto*/
void mostrar_um_produto(produto meu_produto){
printf("\n<<|| ");
printf("codigo: %d nome:%s valor:%6.3f",meu_produto.cod, meu_produto.nome,meu_produto.valor);
printf(" ||>>\n");
}
/*Printf Estilizado pra cliente*/
void mostrar_um_cliente(cliente meu_cliente){
printf("\n## ");
printf("codigo: %d nome:%s idade:%d",meu_cliente.cod, meu_cliente.nome,meu_cliente.idade);
printf(" ##\n");
}
/*a função excluir_um_produto_por_codigo procura o elemento com o código
passado como parâmetro. Se ele encontrar, deixo o campo inválido. Indicando
que está livre*/
void excluir_um_produto_por_codigo(int cod){
produto* produto_a_excluir = busca_produto_por_codigo(cod);
if(produto_a_excluir!=NULL){
produto_a_excluir->cod = -1;
produto_a_excluir->nome[0] = '\0';
produto_a_excluir->valor=0.0;
}
}
/*a função excluir_um_cliente_por_codigo procura o elemento com o código
passado como parâmetro. Se ele encontrar, deixo o campo inválido. Indicando
que está livre*/
void excluir_um_cliente_por_codigo(int cod){
cliente* cliente_a_excluir = busca_cliente_por_codigo(cod);
if(cliente_a_excluir!=NULL){
cliente_a_excluir->cod = -1;
cliente_a_excluir->nome[0] = '\0';
cliente_a_excluir->idade = -1;
}
}
/*A função salvar_clientes pega o estado atual da lista de clientes e salva no arquivo*/
void salvar_clientes(void){
fp_cliente = fopen(FP_CLIENTE,"wb");
for(int i=0;i<20;i++){
if(clientes[i].cod!=-1){
if(fwrite(clientes+i,sizeof(cliente),1,fp_cliente)!=1)
printf("Erro na escrita do arquivo!\n");
}
}
}
/*A função salvar_clientes pega o estado atual da lista de produtos e salva no arquivo*/
void salvar_produtos(void){
fp_produto = fopen(FP_PRODUTO,"wb");
for(int i=0;i<20;i++){
if(produtos[i].cod!=-1){
if(fwrite(produtos+i,sizeof(produto),1,fp_produto)!=1)
printf("Erro na escrita do arquivo!\n");
}
}
}
/*A função ler clientes faz a leitura do arquivo e armazena na lista de clientes*/
void ler_clientes(void){
fp_cliente = fopen(FP_CLIENTE,"rb");
for(int i=0;i<20;i++){
if(fread(clientes+i,sizeof(cliente),1,fp_cliente)!=1){
if(feof(fp_cliente)) break;
}
}
}
/*A função ler produtos faz a leitura do arquivo e armazena na lista de produtos*/
void ler_produtos(void){
fp_produto = fopen(FP_PRODUTO,"rb");
for(int i=0;i<20;i++){
if(fread(produtos+i,sizeof(produto),1,fp_produto)!=1){
if(feof(fp_produto)) break;
}
}
}
/*Esta função primeira tenta abrir os arquivos,
se ela conseguir carrega nas listas o que tinha em cada um
Senão, deixa as listas com valores inválidos mesmo*/
void recupera_os_dados(void){
fp_cliente = fopen(FP_CLIENTE,"rb");
fp_produto = fopen(FP_PRODUTO,"rb");
if(fp_cliente!=NULL && fp_produto!=NULL){
inicializa_lista_clientes();
inicializa_lista_produtos();
ler_clientes();
ler_produtos();
} else {
inicializa_lista_clientes();
inicializa_lista_produtos();
}
}