103 lines
2.7 KiB
C++
103 lines
2.7 KiB
C++
#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];
|
||
}
|
||
} |