#include "ListaContratos.h" using namespace std; //Funciones auxiliares: bool buscar(tListaContratos& lista, string& nif, int& ini, int& fin, int& pos); bool cargarContratos(tListaContratos& lista, tPrioridades& prioridades) { bool carga = false; ifstream archivo; int numContratos = 0; lista.cont = 0; archivo.open("contratos.txt"); if (!archivo.is_open()) { cout << "Error al cargar los contratos." << endl; } else { archivo >> numContratos; archivo.ignore(); while(!archivo.fail() && lista.cont < numContratos){ lista.contrato[lista.cont] = new tContrato; if (insertarContrato(lista, prioridades, archivo)) { lista.cont++; } } carga = true; } archivo.close(); return carga; } bool insertarContrato(tListaContratos& lista, tPrioridades& prioridades, ifstream& archivo) { bool insertado = false; int ini = 0, fin = lista.cont - 1, pos = 0, numTareas = 0; if (!buscar(lista, lista.contrato[lista.cont]->nif, ini, fin, pos)) { getline(archivo, lista.contrato[lista.cont]->nombre); archivo >> lista.contrato[lista.cont]->nif; archivo >> lista.contrato[lista.cont]->sueldo; archivo >> numTareas; lista.contrato[lista.cont]->lista.cont = 0; while (!archivo.fail() && lista.contrato[lista.cont]->lista.cont < numTareas) { if (cargarTareas(lista.contrato[lista.cont]->lista, prioridades, archivo)) { lista.contrato[lista.cont]->lista.cont++; } } insertado = true; } return insertado; } // bool buscar(tListaContratos& lista, string& nif, int& ini, int& fin, int& pos) { bool encontrado = false; if (ini <= fin) { pos = (ini + fin) / 2; if (nif < lista.contrato[pos]->nif) { fin = pos - 1; encontrado = buscar(lista, lista.contrato[lista.cont]->nif, ini, fin, pos);; } else if (lista.contrato[pos]->nif < nif) { ini = pos + 1; encontrado = buscar(lista, lista.contrato[lista.cont]->nif, ini, fin, pos);; } else { encontrado = true; } } return encontrado; } // void mostrarContratos(tListaContratos& lista) { for (int i = 0; i < lista.cont; i++){ cout << right << setw(3) << i + 1 << ".-" << setw(30) << lista.contrato[i]->nombre << setw(15) << lista.contrato[i]->nif << setw(5) << "(" << lista.contrato[i]->lista.cont << ")" << setw(10) << fixed << setprecision(2) << lista.contrato[i]->sueldo << endl; } } int seleccionarContratos(tListaContratos& lista) { int linea = 0; mostrarContratos(lista); cout << endl << "Introduzca el número la linea del contrato que desea seleccionar: "; cin >> linea; linea--; return linea; } void liberar(tListaContratos& lista) { for (int i = 0; i < lista.cont; i++){ delete lista.contrato[i]; } }