Está en la página 1de 12

// Atributos:

private String curso; // Nombre del curso: cadena no vacía.

private LinkedList<Persona> personas; // Lista Enlazada (LinkedList) de

// personas: contiene estudiantes y trabajadores.

private LinkedList<Integer> cedulas;

private boolean estaOrdenadoAlfabetico;

private boolean estaOrdenadoNumerico;

private boolean listasCreadas ; // false, por defecto. Cambiar al valor

// true cuando las listas sean creadas en el constructor.

// Constructor:

public Curso( String curso ) {

this.curso = curso.trim().toUpperCase();

// ---------------------------------------

personas = new LinkedList<>();

cedulas = new LinkedList<>();

listasCreadas = true;

estaOrdenadoAlfabetico = false;

estaOrdenadoNumerico = false;

// ---------------------------------------

} // Fin del Constructor

// Uno de los Getters (o métodos de consulta):

public boolean getListasCreadas() { return listasCreadas ; }

@Override

public String toString(){

String listado = "El curso: " + curso + "\n";


ListIterator iter = personas.listIterator();

Persona p;

while(iter.hasNext()){

p = (Persona) iter.next();

listado += p.mostrarDatos() + "\n";

return listado;

public boolean yaExiste(int cedula){

boolean existe = true;

ListIterator iter = cedulas.listIterator();

int ce;

while(iter.hasNext()){

ce = (Integer) iter.next();

if(ce == cedula){

return existe;

cedulas.add(cedula);

return !existe;

public void agregarPersonas(Persona p){


if(yaExiste(p.getCedula())){

String msj = "Ya existe una cedula con el numero " + p.getCedula();

JOptionPane.showMessageDialog(null, msj, "Cedula repetida", 0);

System.out.println(msj);

return;

personas.add(p);

estaOrdenadoAlfabetico = false;

estaOrdenadoNumerico = false;

public void quickSort_porCedula(){

if(!estaOrdenadoNumerico){

quickSort_porCedula(personas);

estaOrdenadoAlfabetico = false;

estaOrdenadoNumerico = true;

public void quickSort_porNombreCompleto(){

if(!estaOrdenadoAlfabetico){

quickSort_porNombreCompleto(personas);

estaOrdenadoNumerico = false;

estaOrdenadoAlfabetico = true;
}

public String busquedaBinaria_porCedula(int cel){

String msj = "";

quickSort_porCedula();

int indice = busquedaBinaria_porCedula(cel, 0, personas.size()-1);

if(indice == -1){

msj = "No existe una cedula con el numero " + cel;

}else{

msj = personas.get(indice).mostrarDatos();

return msj;

private void quickSort_porNombreCompleto(List<Persona> person){

if(person.size()>1){

List<Persona> iguales = new LinkedList<>();

List<Persona> der = new LinkedList<>();

List<Persona> izq = new LinkedList<>();

Persona pivote = person.get(person.size()/2);

String nombreCompleto = pivote.getNombreC();

ListIterator iter = person.listIterator();

Persona p;
while(iter.hasNext()){

p = (Persona) iter.next();

if(p.getNombreC().compareTo(nombreCompleto)<0){

izq.add(p);

}else if(p.getNombreC().compareTo(nombreCompleto)>0){

der.add(p);

}else{

iguales.add(p);

quickSort_porNombreCompleto(izq);

quickSort_porNombreCompleto(der);

person.clear();

person.addAll(izq);

person.addAll(iguales);

person.addAll(der);

private void quickSort_porCedula(List<Persona> person){

if(person.size()>1){

List<Persona> iguales = new LinkedList<>();


List<Persona> der = new LinkedList<>();

List<Persona> izq = new LinkedList<>();

Persona pivote = person.get(person.size()/2);

int cel = pivote.getCedula();

ListIterator iter = person.listIterator();

Persona p;

while(iter.hasNext()){

p = (Persona) iter.next();

if(p.getCedula()>cel){

izq.add(p);

}else if(p.getCedula()<cel){

der.add(p);

}else{

iguales.add(p);

quickSort_porCedula(izq);

quickSort_porCedula(der);

person.clear();

person.addAll(izq);

person.addAll(iguales);

person.addAll(der);

}
}

private int busquedaBinaria_porCedula(int cel, int izq, int der){

if(izq>der){

return -1;

int mitad = (izq+der)/2;

Persona p = personas.get(mitad);

if(p.getCedula()<cel){

return busquedaBinaria_porCedula(cel, izq, mitad-1);

}else if(p.getCedula()>cel){

return busquedaBinaria_porCedula(cel, mitad+1, der);

}else{

return mitad;

public String eliminacionBinariaPorCedula(int cel){

quickSort_porCedula();

String msj = "";

int indice = busquedaBinaria_porCedula(cel, 0, personas.size()-1);

if(indice == -1){

msj = "Eliminación fallida, pues no existe una cedula con el numero: " + cel;

}else{

Persona p = personas.remove(indice);

cedulas.remove(p.getCedula());
estaOrdenadoNumerico = false;

estaOrdenadoAlfabetico = false;

msj = "Se eliminó la persona exitosamente " + p.mostrarDatos();

return msj;

public double determinarMayorPuntajeTrabajador(){

if(personas.isEmpty()){

String msj = "La lista está vacía";

System.out.println(msj);

JOptionPane.showMessageDialog(null, msj, "Lista vacia", 0);

return Double.NaN;

double mayor = personas.get(0).getPuntaje();

ListIterator iter = personas.listIterator();

Persona p;

while(iter.hasNext()){

p = (Persona) iter.next();

if(p.getTipo() == 1){

if(p.getPuntaje()>mayor){

mayor = p.getPuntaje();

}
return mayor;

public double determinarMayorPuntajeEstudiante(){

if(personas.isEmpty()){

String msj = "La lista está vacía";

System.out.println(msj);

JOptionPane.showMessageDialog(null, msj, "Lista vacia", 0);

return Double.NaN;

double mayor = personas.get(0).getPuntaje();

ListIterator iter = personas.listIterator();

Persona p;

while(iter.hasNext()){

p = (Persona) iter.next();

if(p.getTipo() == 2){

if(p.getPuntaje()>mayor){

mayor = p.getPuntaje();

return mayor;

}
public String cuantosTienenMayorPuntaje(){

if( personas.isEmpty() ) {

return "¡ Lista vacía !";

String cuales = "" ;

double mayorTrabajador = this.determinarMayorPuntajeTrabajador();

double mayorEstudiante = this.determinarMayorPuntajeEstudiante();

ListIterator iter = personas.listIterator();

Persona p;

int numT = 0;

int numE = 0;

while( iter.hasNext() ) {

p = (Persona) iter.next();

if(p.getTipo()== 1){

if( p.getPuntaje() == mayorTrabajador ) {

numT += 1;

}else{

if(p.getPuntaje() == mayorEstudiante)

numE += 1;

cuales = numT + " son los trabajadores con el mayor puntaje" + " y " + numE + " son los
estudiantes con mayor puntaje";

return cuales ;
}

public String ajustarMatricula(){

ListIterator iter = personas.listIterator();

Persona p;

String msj = "";

while(iter.hasNext()){

p = (Persona) iter.next();

if(p.getTipo()==2){

if(p.obtenerNivel() == 'A' || p.obtenerNivel() == 'B'){

msj += p.ajustarValor() + "\n";

return msj;

public String ajustarSalario(){

ListIterator iter = personas.listIterator();

Persona p;

String msj = "";

while(iter.hasNext()){

p = (Persona) iter.next();

if(p.getTipo()==1){

if(p.obtenerNivel() == 'A'){
msj += p.ajustarValor() + "\n";

return msj;

También podría gustarte