import javax.swing.JOptionPane;
public class Main
{
public static void llenar(Niño nod)
{
int e;
do
{
e = Integer.parseInt(JOptionPane.showInputDialog(null,"Ingrese edad del niño:"));
}
while (e < 1 || e > 6);
nod.setEdad(e);
String n = JOptionPane.showInputDialog(null,"Ingrese nombre del niño:");
nod.setNombre(n);
int n_r = Integer.parseInt(JOptionPane.showInputDialog(null,"Ingrese número de registro civil del niño:"));
nod.setRegistroCivil(n_r);
float a = Float.parseFloat(JOptionPane.showInputDialog(null,"Ingrese altura del niño:"));
nod.setAltura(a);
int p = Integer.parseInt(JOptionPane.showInputDialog(null,"Ingrese peso del niño:"));
nod.setPeso(p);
int id = Integer.parseInt(JOptionPane.showInputDialog(null,"Ingrese número de identificación del padre/madre del niño:"));
nod.setIdPadre(id);
String n_p = JOptionPane.showInputDialog(null,"Ingrese nombre del padre/madre del niño:");
nod.setNombrePadre(n_p);
int m;
do
{
m = Integer.parseInt(JOptionPane.showInputDialog(null,
"Ingrese municipio donde vive el niño\n" +
"1. Sahagún\n" +
"2. Montería\n" +
"3. Lorica\n"));
}
while (m < 1 || m > 3);
nod.setMunicipio(m);
}
public static String mostrarMunicipio(int opc)
{
switch (opc)
{
case 1:
return "Sahagún";
case 2:
return "Montería";
default:
return "Lorica";
}
}
public static void mostrar(Niño nod)
{
String datos = "";
datos += String.valueOf(
"Nombre: " + nod.getNombre() + "\n" +
"Edad: " + nod.getEdad() + "\n" +
"Registro Civil: " + nod.getRegistroCivil() + "\n" +
"Altura: " + nod.getAltura() + "\n" +
"Peso: " + nod.getPeso() + "\n" +
"Nombre representante: " + nod.getNombrePadre() + "\n" +
"ID representante: " + nod.getIdPadre() + "\n" +
"Municipio: " + mostrarMunicipio(nod.getMunicipio()) + "\n\n");
JOptionPane.showMessageDialog(null,datos);
}
public static void listar(ProgramaDepartamental obj)
{
Niño temp = obj.getCabeza();
while (temp != null)
{
mostrar(temp);
temp = temp.getSiguiente();
}
}
public static void listarPorMunicipio(ProgramaDepartamental obj)
{
for (int i = 1; i <= 3; i++)
{
JOptionPane.showMessageDialog(null, "[Niños del municipio de " + mostrarMunicipio(i) + "]");
Niño temp = obj.getCabeza();
while (temp != null)
{
if (temp.getMunicipio() == i)
{
mostrar(temp);
}
temp = temp.getSiguiente();
}
JOptionPane.showMessageDialog(null, "Hay " + obj.contarNiñosMunicipio(i) + " niño(s) en el municipio de " + mostrarMunicipio(i));
}
}
public static void listarPorCondicionesPeso(ProgramaDepartamental obj)
{
JOptionPane.showMessageDialog(null, "[Niños de 2 y 3 o 4 y 6 años en condiciones de bajo peso]");
for (int i = 1; i <= 3; i++)
{
Niño temp = obj.getCabeza();
while (temp != null)
{
if (temp.getMunicipio() == i && ((temp.getEdad() >= 2 && temp.getEdad() <= 3) && temp.getPeso() < 15) || temp.getMunicipio() == i && ((temp.getEdad() >= 4 && temp.getEdad() <= 6) && temp.getPeso() < 25))
{
mostrar(temp);
}
temp = temp.getSiguiente();
}
JOptionPane.showMessageDialog(null, "Hay " + obj.contarNiñosMunicipioPeso(i) + " niño(s) en el municipio de " + mostrarMunicipio(i) + " en condiciones de bajo peso.");
}
}
public static void listarPorAltura(ProgramaDepartamental obj)
{
JOptionPane.showMessageDialog(null, "[Niños entre 4 y 6 años que miden menos de 1 metro]");
for (int i = 1; i <= 3; i++)
{
Niño temp = obj.getCabeza();
while (temp != null)
{
if (temp.getMunicipio() == i && ((temp.getEdad() >= 4 && temp.getEdad() <= 6) && temp.getAltura() < 1))
{
mostrar(temp);
}
temp = temp.getSiguiente();
}
JOptionPane.showMessageDialog(null, "Hay " + obj.contarNiñosPorAltura(i) + " niño(s) en el municipio de " + mostrarMunicipio(i) + " en condiciones de bajo peso.");
}
}
public static int menu()
{
int opc;
do
{
opc = Integer.parseInt(JOptionPane.showInputDialog(null,
"==================MENU==================\n" +
"1. Agregar información del niño y su representante por el final.\n" +
"2. Insertar entre dos nodos existentes.\n" +
"3. Agregar información del niño y su representante por el principio.\n" +
"4. Buscar por número de registro civil.\n" +
"5. Ordenar la información, teniendo en cuenta el peso de los niños.\n" +
"6. Eliminar la información de un niño y su representante.\n" +
"7. Listado por municipios.\n" +
"8. Listado por condiciones bajos de peso.\n" +
"9. Listado por altura.\n" +
"10. Mostrar toda la lista\n" +
"11. Salir"));
}
while (opc < 0 || opc > 11);
return opc;
}
public static void main(String[] args)
{
ProgramaDepartamental obj = new ProgramaDepartamental();
Niño aux;
int opcion, num_reg;
do
{
opcion = menu();
switch(opcion)
{
case 1:
aux = new Niño();
llenar(aux);
obj.agregarFinal(aux);
JOptionPane.showMessageDialog(null,"Se ha agregado correctamente la información");
break;
case 2:
num_reg = Integer.parseInt(JOptionPane.showInputDialog(null,"Ingrese número de registro del nodo anterior al que desea agregar:"));
aux = obj.buscar(num_reg);
if(aux != null)
{
aux = new Niño();
llenar(aux);
obj.agregarEntreNodos(obj.buscar(num_reg), aux);
JOptionPane.showMessageDialog(null,"Se ha agregado correctamente la información");
}
else
{
JOptionPane.showMessageDialog(null,"No se ha encontrado el nodo!");
}
break;
case 3:
aux = new Niño();
llenar(aux);
obj.agregarInicio(aux);
JOptionPane.showMessageDialog(null,"Se ha agregado correctamente la información");
break;
case 4:
num_reg = Integer.parseInt(JOptionPane.showInputDialog(null,"Ingrese número de registro del nodo anterior al que desea agregar:"));
aux = obj.buscar(num_reg);
if(aux != null)
{
mostrar(obj.buscar(num_reg));
}
else
{
JOptionPane.showMessageDialog(null,"No se ha encontrado el nodo!");
}
break;
case 5:
aux = obj.getCabeza();
if (aux != null)
{
if(obj.contarNodos() > 1)
{
aux = obj.getCabeza();
obj.ordenarIntercambio(aux);
listar(obj);
}
else
{
JOptionPane.showMessageDialog(null, "Solo hay un niño, agregue por lo menos 1 niño mas para ordenar.");
}
}
break;
case 6:
aux = obj.getCabeza();
obj.eliminarNodo(aux);
JOptionPane.showMessageDialog(null, "Se elimino correctamente.");
break;
case 7:
listarPorMunicipio(obj);
break;
case 8:
listarPorCondicionesPeso(obj);
break;
case 9:
listarPorAltura(obj);
break;
case 10:
listar(obj);
break;
default:
break;
}
}
while (opcion != 11);
}
}
public class Niño
{
private int edad;
private String nombre;
private int registro_civil;
private float altura;
private int peso;
private int id_padre;
private String nombre_padre;
private int municipio;
private Niño siguiente;
private Niño anterior;
public Niño()
{
edad = 0;
nombre = "";
registro_civil = 0;
altura = 0;
peso = 0;
id_padre = 0;
nombre_padre = "";
municipio = 0;
siguiente = null;
anterior = null;
}
public void setEdad(int val)
{
edad = val;
}
public int getEdad()
{
return edad;
}
public void setNombre(String val)
{
nombre = val;
}
public String getNombre()
{
return nombre;
}
public void setRegistroCivil(int val)
{
registro_civil = val;
}
public int getRegistroCivil()
{
return registro_civil;
}
public void setAltura(float val)
{
altura = val;
}
public float getAltura()
{
return altura;
}
public void setPeso(int val)
{
peso = val;
}
public int getPeso()
{
return peso;
}
public void setIdPadre(int val)
{
id_padre = val;
}
public int getIdPadre()
{
return id_padre;
}
public void setNombrePadre(String val)
{
nombre_padre = val;
}
public String getNombrePadre()
{
return nombre_padre;
}
public void setMunicipio(int val)
{
municipio = val;
}
public int getMunicipio()
{
return municipio;
}
public void setSiguiente(Niño val)
{
siguiente = val;
}
public Niño getSiguiente()
{
return siguiente;
}
public void setAnterior(Niño val)
{
anterior = val;
}
public Niño getAnterior()
{
return anterior;
}
public void copiar(Niño nd)
{
edad = nd.getEdad();
nombre = nd.getNombre();
registro_civil = nd.getRegistroCivil();
altura = nd.getAltura();
peso = nd.getPeso();
id_padre = nd.getIdPadre();
nombre_padre = nd.getNombrePadre();
}
}
public class ProgramaDepartamental
{
private Niño cabeza;
public ProgramaDepartamental()
{
cabeza = null;
}
public void setCabeza(Niño val)
{
cabeza = val;
}
public Niño getCabeza()
{
return cabeza;
}
public Niño ultimo()
{
Niño temp = cabeza;
while(temp != null)
{
if (temp.getSiguiente() == null)
{
break;
}
else
{
temp = temp.getSiguiente();
}
}
return temp;
}
public void agregarFinal(Niño nuevo)
{
Niño temp = ultimo();
if (cabeza != null)
{
temp.setSiguiente(nuevo);
nuevo.setAnterior(temp);
nuevo.setSiguiente(null);
}
else
{
cabeza = nuevo;
nuevo.setAnterior(null);
}
}
public void agregarEntreNodos(Niño nd, Niño nuevo)
{
nuevo.setSiguiente(nd.getSiguiente());
if (nd.getSiguiente() != null)
{
nd.getSiguiente().setAnterior(nuevo);
}
nd.setSiguiente(nuevo);
nuevo.setAnterior(nd);
}
public void agregarInicio(Niño nuevo)
{
if (cabeza != null)
{
nuevo.setSiguiente(cabeza);
cabeza.setAnterior(nuevo);
nuevo.setAnterior(null);
setCabeza(nuevo);
}
else
{
cabeza = nuevo;
nuevo.setAnterior(null);
}
}
public void eliminarNodo(Niño nd)
{
Niño anterior;
if (nd == cabeza)
{
cabeza = cabeza.getSiguiente();
}
else
{
anterior = cabeza;
while (anterior.getSiguiente() != nd)
{
anterior = anterior.getSiguiente();
}
anterior.setSiguiente(nd.getSiguiente());
nd.getSiguiente().setAnterior(anterior);
}
nd.setSiguiente(null);
nd.setAnterior(null);
}
public Niño buscar(int num_r)
{
Niño temp;
temp = cabeza;
while(temp != null)
{
if (temp.getRegistroCivil() == num_r)
{
break;
}
else
{
temp = temp.getSiguiente();
}
}
return temp;
}
public int contarNodos()
{
Niño temp = cabeza;
int contador = 0;
while(temp != null)
{
contador++;
temp = temp.getSiguiente();
}
return contador;
}
public int contarNiñosMunicipio(int mun)
{
Niño temp = cabeza;
int contador = 0;
while(temp != null)
{
if (temp.getMunicipio() == mun)
{
contador++;
}
temp = temp.getSiguiente();
}
return contador;
}
public int contarNiñosMunicipioPeso(int mun)
{
Niño temp = cabeza;
int contador = 0;
while(temp != null)
{
if (temp.getMunicipio() == mun && ((temp.getEdad() >= 2 && temp.getEdad() <= 3) && temp.getPeso() < 15) || temp.getMunicipio() == mun && ((temp.getEdad() >= 4 && temp.getEdad() <= 6) && temp.getPeso() < 25))
{
contador++;
}
temp = temp.getSiguiente();
}
return contador;
}
public int contarNiñosPorAltura(int mun)
{
Niño temp = cabeza;
int contador = 0;
while(temp != null)
{
if (temp.getMunicipio() == mun && ((temp.getEdad() >= 4 && temp.getEdad() <= 6) && temp.getAltura() < 1))
{
contador++;
}
temp = temp.getSiguiente();
}
return contador;
}
public void ordenarIntercambio(Niño n)
{
Niño actual, siguiente;
actual = n;
while(actual.getSiguiente() != null)
{
siguiente = actual.getSiguiente();
while(siguiente != null)
{
if(actual.getPeso() > siguiente.getPeso())
{
cambiar(actual, siguiente);
}
/ se salta al siguiente nodo de siguiente
siguiente = siguiente.getSiguiente();
}
actual = actual.getSiguiente();
}
}
public void cambiar(Niño p1, Niño p2)
{
Niño temp = new Niño();
temp.copiar(p1);
p1.copiar(p2);
p2.copiar(temp);
}
}