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];
|
|||
|
}
|
|||
|
}
|