116 lines
2.6 KiB
C++
116 lines
2.6 KiB
C++
|
#include "listaLonja.h"
|
||
|
using namespace std;
|
||
|
|
||
|
//Funciones auxiliares:
|
||
|
bool busquedaRecursiva(tListaLotes & lista, tLotes& nuevo, int& ini, int& fin, int& pos);
|
||
|
|
||
|
|
||
|
void inicializar(tListaLotes & lista){
|
||
|
lista.cont = 0;
|
||
|
}
|
||
|
|
||
|
int numLotes(tListaLotes & lista){
|
||
|
return lista.cont;
|
||
|
}
|
||
|
|
||
|
bool insertar(tListaLotes & lista, tLotes& nuevo){
|
||
|
bool insertado = false;
|
||
|
int pos = 0;
|
||
|
|
||
|
|
||
|
if (!buscar(lista, nuevo, pos)) {
|
||
|
lista.lote[lista.cont] = new tLotes;
|
||
|
lista.lote[lista.cont]->lote = nuevo.lote;
|
||
|
lista.lote[lista.cont]->tipo = nuevo.tipo;
|
||
|
lista.lote[lista.cont]->precio = nuevo.precio;
|
||
|
lista.lote[lista.cont]->peso = nuevo.peso;
|
||
|
lista.cont++;
|
||
|
}
|
||
|
else {
|
||
|
lista.lote[lista.cont] = new tLotes;
|
||
|
for (int i = lista.cont; i > pos; i--){
|
||
|
lista.lote[i] = lista.lote[i - 1];
|
||
|
}
|
||
|
lista.lote[pos]->tipo = nuevo.tipo;
|
||
|
lista.lote[pos]->lote = nuevo.lote;
|
||
|
lista.lote[pos]->precio = nuevo.precio;
|
||
|
lista.lote[pos]->peso = nuevo.peso;
|
||
|
lista.cont++;
|
||
|
insertado = true;
|
||
|
}
|
||
|
|
||
|
return insertado;
|
||
|
}
|
||
|
|
||
|
bool cargar(tListaLotes & lista){
|
||
|
bool carga = false;
|
||
|
ifstream archivo;
|
||
|
tLotes aux;
|
||
|
inicializar(lista);
|
||
|
|
||
|
archivo.open("datos.txt");
|
||
|
if (!archivo.is_open()) {
|
||
|
cout << "Error al caragar el archivo." << endl;
|
||
|
}
|
||
|
else {
|
||
|
while (!archivo.fail() && lista.cont < MAX_LOTES) {
|
||
|
archivo >> aux.lote;
|
||
|
archivo >> aux.tipo;
|
||
|
archivo >> aux.precio;
|
||
|
archivo >> aux.peso;
|
||
|
if (!archivo.eof()) {
|
||
|
insertar(lista, aux);
|
||
|
}
|
||
|
}
|
||
|
carga = true;
|
||
|
}
|
||
|
|
||
|
return carga;
|
||
|
}
|
||
|
|
||
|
bool buscar(tListaLotes& lista, tLotes& nuevo, int& pos){
|
||
|
bool encontrado = false;
|
||
|
int ini = 0, fin = lista.cont - 1;
|
||
|
|
||
|
encontrado = busquedaRecursiva(lista, nuevo, ini, fin, pos);
|
||
|
|
||
|
return encontrado;
|
||
|
}
|
||
|
|
||
|
bool busquedaRecursiva(tListaLotes& lista, tLotes& nuevo, int& ini, int& fin, int& pos) {
|
||
|
bool encontrado = false;
|
||
|
|
||
|
if (ini <= fin) {
|
||
|
pos = (ini + fin) / 2;
|
||
|
if (nuevo < *lista.lote[pos]) {
|
||
|
fin = pos - 1;
|
||
|
encontrado = busquedaRecursiva(lista, nuevo, ini, fin, pos);
|
||
|
}
|
||
|
else if (*lista.lote[pos] < nuevo){
|
||
|
ini = pos + 1;
|
||
|
encontrado = busquedaRecursiva(lista, nuevo, ini, fin, pos);
|
||
|
}
|
||
|
else {
|
||
|
encontrado = true;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
return encontrado;
|
||
|
}
|
||
|
|
||
|
void obeternerLote(tListaLotes& lista, tLotes* lote, int& pos){
|
||
|
lote = lista.lote[pos];
|
||
|
}
|
||
|
|
||
|
void mostrar(tListaLotes& lista, tListaComprador& comprador){
|
||
|
for (int i = 0; i < comprador.cont; i++){
|
||
|
mostrarPrecio(*lista.lote[i], *comprador.comprador[i]);
|
||
|
}
|
||
|
}
|
||
|
|
||
|
void liberar(tListaLotes & lista){
|
||
|
for (int i = 0; i < lista.cont; i++){
|
||
|
delete lista.lote[i];
|
||
|
}
|
||
|
}
|