64 lines
1.5 KiB
C++
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;
|
|
}
|