Cpp/Exámenes Resueltos (Segundo Semestre)/Junio2018CEG/ListaContratos.cpp
2019-06-20 13:06:16 +02:00

103 lines
2.7 KiB
C++
Raw Permalink Blame History

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