Cpp/Exámenes Resueltos (Segundo.../Junio2016_2/ListaEstudiantes.cpp

64 lines
1.5 KiB
C++

#include "ListaEstudiantes.h"
using namespace std;
bool cargar(tListaEstudiantes& lista, ifstream& archivo, int& numAlumnos) {
bool carga = false;
lista.estudiante = new tEstudiante[numAlumnos];
lista.cont = 0;
if (insertar(lista, numAlumnos, archivo)) {
carga = true;
}
return carga;
}
bool buscar(tListaEstudiantes& lista, std::string NIF, int& ini, int& fin, int& pos) {
bool encontrado = false;
if (ini <= fin) {
pos = (ini + fin) / 2;
if (NIF < lista.estudiante[pos].NIF) {
fin = pos - 1;
encontrado = buscar(lista, NIF, ini, fin, pos);
}
else if (lista.estudiante[pos].NIF < NIF) {
ini = pos + 1;
encontrado = buscar(lista, NIF, ini, fin, pos);
}
else {
encontrado = true;
}
}
return encontrado;
}
bool insertar(tListaEstudiantes& estudiante, int& numAlumnos, ifstream& archivo) {
bool insertado = false;
int ini = 0, fin = estudiante.cont - 1, pos = 0;
for (int i = 0; i < numAlumnos; i++) {
if (!buscar(estudiante, estudiante.estudiante[estudiante.cont].NIF, ini, fin, pos)) {
for (int i = estudiante.cont; i > 0; i--){
estudiante.estudiante[i] = estudiante.estudiante[i - 1];
}
if (cargar(estudiante.estudiante[pos], archivo)) {
estudiante.cont++;
insertado = true;
}
}
}
return insertado;
}
void mostrar(tListaEstudiantes& estudiante) {
for (int i = 0; i < estudiante.cont; i++){
mostrar(estudiante.estudiante[i]);
}
}
void destruir(tListaEstudiantes& estudiantes) {
delete[] estudiantes.estudiante;
}