import javax.swing.JOptionPane;
public class Main
{
public static void mostrarVector(Ordenamiento obj)
{
String datosVector = "";
for (int i = 0; i < obj.getTamano(); i++)
{
datosVector = datosVector+String.valueOf("ID: " + obj.getVectorDocentes(i).getId() + "\n" +
"Nombre: " + obj.getVectorDocentes(i).getNombre() + "\n" +
"Asignatura: " + obj.getVectorDocentes(i).getAsignatura() + "\n" +
"Numero telefonico: " + obj.getVectorDocentes(i).getNumeroTelefono() + "\n\n");
}
JOptionPane.showMessageDialog(null, "============ ELEMENTOS DEL VECTOR ============" + "\n" + datosVector);
}
public static void llenar(Docentes est)
{
int id = Integer.parseInt(JOptionPane.showInputDialog("Digite ID del docente:"));
est.setId(id);
String nom = JOptionPane.showInputDialog("Digite nombre del docente:");
est.setNombre(nom);
String asig =JOptionPane.showInputDialog("Digite la asignatura del docente:");
est.setAsignatura(asig);
int tel = Integer.parseInt(JOptionPane.showInputDialog("Digite número telefonico del docente:"));
est.setNumeroTelefono(tel);
}
public static int menu()
{
int opcion = 0;
do
{
opcion = Integer.parseInt(JOptionPane.showInputDialog("====== MENU ====== \n" +
"1. Buscar docente mediante el ID\n" +
"2. Buscar docente mediante el número telefonico\n" +
"3. Ordenar por Nombres \n" +
"4. Ordenar por Asignaturas\n" +
"5. Salir \n\n" +
"Seleccione una opcion del 1 al 5"));
}
while(opcion <= 0 || opcion > 5);
return opcion;
}
public static void main(String[] args)
{
Ordenamiento obj = new Ordenamiento();
Docentes est;
int numeroElementos = Integer.parseInt(JOptionPane.showInputDialog(null, "Digite el número de elementos del vector:"));
obj.setTamano(numeroElementos);
obj.crearVector();
for(int i = 0; i < obj.getTamano(); i++)
{
est = new Docentes();
JOptionPane.showMessageDialog(null, "============ DOCENTES ============" + "\n \n" +
"Ingresar la Informacón del estudiante (" + (i+1) + ")");
llenar(est);
obj.setVectorDocentes(i, est);
}
mostrarVector(obj);
int datoBuscar;
int posicionDato;
int opcion;
do{
opcion = menu();
switch(opcion) {
case 1:
datoBuscar = Integer.parseInt(JOptionPane.showInputDialog(null, "Digite el ID del docente que desea buscar:"));
posicionDato = obj.bsuquedaBinaria(datoBuscar);
if(posicionDato != -1)
{
JOptionPane.showMessageDialog(null, "Nombre: " + obj.getVectorDocentes(posicionDato).getNombre() + "\n" +
"Asignatura: " + obj.getVectorDocentes(posicionDato).getAsignatura() + "\n" +
"Numero de telefono: " + obj.getVectorDocentes(posicionDato).getNumeroTelefono());
}
else
{
JOptionPane.showMessageDialog(null, "El docente no se encuentra en el vector");
}
break;
case 2:
datoBuscar = Integer.parseInt(JOptionPane.showInputDialog(null, "Digite el numero del docente que desea buscar:"));
posicionDato = obj.busquedaLineal(datoBuscar);
if(posicionDato != -1)
{
JOptionPane.showMessageDialog(null, "Nombre: " + obj.getVectorDocentes(posicionDato).getNombre() + "\n" +
"Asignatura: " + obj.getVectorDocentes(posicionDato).getAsignatura() + "\n" +
"Numero de telefono: " + obj.getVectorDocentes(posicionDato).getNumeroTelefono());
}
else
{
JOptionPane.showMessageDialog(null, "El docente no se encuentra en el vector");
}
break;
case 3:
obj.ordenarShell();
mostrarVector(obj);
break;
case 4:
obj.ordenarIntercambio();
mostrarVector(obj);
break;
default:
break;
}
}while(opcion != 5);
}
}
public class Docentes
{
private int id;
private String nombre;
private String asignatura;
private int num_telefono;
public Docentes()
{
id = 0;
String nombre = "";
String asignatura = "";
num_telefono = 0;
}
public void setId(int val)
{
id = val;
}
public void setNombre(String val)
{
nombre = val;
}
public void setAsignatura(String val)
{
asignatura = val;
}
public void setNumeroTelefono(int val)
{
num_telefono = val;
}
public int getId()
{
return id;
}
public String getNombre()
{
return nombre;
}
public String getAsignatura()
{
return asignatura;
}
public int getNumeroTelefono()
{
return num_telefono;
}
}
public class Ordenamiento
{
int tamano;
private Docentes vectorDocentes[];
public Ordenamiento()
{
tamano = 0;
vectorDocentes = null;
}
public void crearVector()
{
vectorDocentes = new Docentes[tamano];
}
public void setTamano(int val)
{
tamano = val;
}
public int getTamano()
{
return tamano;
}
public void setVectorDocentes(int p, Docentes obj)
{
vectorDocentes[p] = obj;
}
public Docentes getVectorDocentes(int p)
{
return vectorDocentes[p];
}
public void cambiar(int p1, int p2)
{
Docentes temp;
temp = getVectorDocentes(p1);
setVectorDocentes(p1, getVectorDocentes(p2));
setVectorDocentes(p2, temp);
}
public void ordenarShell()
{
int n, cont;
n = (getTamano()-1)/2;
while (n != 0)
{
cont = 1;
while (cont != 0)
{
cont = 0;
for (int i = n; i < getTamano(); i++)
{
if (getVectorDocentes(i-n).getNombre().compareTo(getVectorDocentes(i).getNombre()) > 0){
cambiar(i, i-n);
cont = cont + 1;
}
}
}
n = n/2;
}
}
public void ordenarIntercambio()
{
for (int i = 0; i < getTamano(); i++)
{
for (int j = i+1; j < getTamano(); j++)
{
if (getVectorDocentes(i).getAsignatura().compareTo(getVectorDocentes(j).getAsignatura()) > 0)
{
cambiar(i, j);
}
}
}
}
public void ordenarBurbuja()
{
for (int i=0; i < getTamano(); i++)
{
for (int j = 0; j < getTamano()-2; j++)
{
if (getVectorDocentes(j).getId() > getVectorDocentes(j+1).getId())
{
cambiar(j, j+1);
}
}
}
}
public int bsuquedaBinaria(int dato)
{
int posicion, izq, der, centro;
ordenarBurbuja();
izq = 0;
der = getTamano()-1;
posicion = -1;
while ((izq <= der) && (posicion == -1))
{
centro = (izq + der) / 2;
if (dato == (getVectorDocentes(centro).getId()))
{
posicion = centro;
}
else if (dato < (getVectorDocentes(centro).getId()))
{
der = centro-1;
}
else
{
izq = centro+1;
}
}
return posicion;
}
public int busquedaLineal(int dato)
{
int i;
int posicion;
posicion = -1;
i = 0;
while ((i <= getTamano()-1) && (posicion == -1))
{
if (getVectorDocentes(i).getNumeroTelefono() == dato)
{
posicion=i;
}
else
{
i = i+1;
}
}
return posicion;
}
}