1 /* 2 * To change this template, choose Tools | Templates 3 * and open the template in the editor. 4 */ 5 6 package entidades; 7 8 import java.util.Calendar; 9 import java.util.GregorianCalendar; 10 11 /** 12 * 13 * @author igor 14 */ 15 public class Persona { 16 private String nombre; 17 private String domicilio; 18 private String telefono; 19 private String email; 20 private GregorianCalendar fechaNacimiento; 21 22 public Persona() { 23 //lamando al contructor de alli abajo 24 this("Undefined", "Undefined", "Undefined", "Undefined", 25 new GregorianCalendar(1800, 0, 1)); 26 } 27 28 public Persona(String nombre, String domicilio, String telefono, 29 String email, GregorianCalendar fechaNacimiento) { 30 this.nombre = nombre; 31 this.domicilio = domicilio; 32 this.telefono = telefono; 33 this.email = email; 34 this.fechaNacimiento = fechaNacimiento; 35 } 36 37 public String getDomicilio() { 38 return domicilio; 39 } 40 41 public void setDomicilio(String domicilio) { 42 this.domicilio = domicilio; 43 } 44 45 public String getEmail() { 46 return email; 47 } 48 49 public void setEmail(String email) { 50 this.email = email; 51 } 52 53 public GregorianCalendar getFechaNacimiento() { 54 return fechaNacimiento; 55 } 56 57 /* 58 * se preguntaran porque? hay dos métodos con el mismo nombre, pues son 59 * métodos sobrecargados en lo único que se diferencian es en el 60 * número de parámetros que reciben. 61 * el primero recibe un objeto de tipo GregorianCalendar, mientras 62 * que el segundo recibe 3 parametros de tipo entero. 63 * <Se puede hacer lo mismo de distintas maneras> :D 64 */ 65 public void setFechaNacimiento(GregorianCalendar fechaNacimiento) { 66 this.fechaNacimiento = fechaNacimiento; 67 } 68 69 public void setFechaNacimiento(int dia, int mes, int año){ 70 this.fechaNacimiento.set(año, mes - 1, dia); 71 } 72 73 public String getNombre() { 74 return nombre; 75 } 76 77 public void setNombre(String nombre) { 78 this.nombre = nombre; 79 } 80 81 public String getTelefono() { 82 return telefono; 83 } 84 85 public void setTelefono(String telefono) { 86 this.telefono = telefono; 87 } 88 89 public int getEdad(){ 90 GregorianCalendar fechaActual = new GregorianCalendar(); 91 int edad = fechaActual.get(Calendar.YEAR) - fechaNacimiento.get( 92 Calendar.YEAR); 93 if(fechaActual.get(Calendar.MONTH) < fechaNacimiento.get( 94 Calendar.MONTH)) 95 edad = edad - 1; 96 else if(fechaActual.get(Calendar.MONTH) == fechaNacimiento.get( 97 Calendar.MONTH)){ 98 if(fechaActual.get(Calendar.DAY_OF_MONTH) < fechaNacimiento.get( 99 Calendar.DAY_OF_MONTH)) 100 edad = edad - 1; 101 } 102 return edad; 103 } 104 105 @Override 106 public String toString() { 107 return "\nPersona{" + "" 108 + "\nnombre=" + nombre + "" 109 + "\ndomicilio=" + domicilio + "" 110 + "\ntelefono=" + telefono + "" 111 + "\nemail=" + email + "" 112 + "\nfechaNacimiento=" + fechaNacimiento.get( 113 Calendar.DAY_OF_MONTH) + '/'+ (fechaNacimiento.get( 114 Calendar.MONTH)+1) + '/'+ fechaNacimiento.get( 115 Calendar.YEAR) 116 +"\nedad="+getEdad() + '}'; 117 } 118 } 119 120
1 /* 2 * To change this template, choose Tools | Templates 3 * and open the template in the editor. 4 */ 5 6 package datos; 7 8 import java.io.BufferedReader; 9 import java.io.IOException; 10 import java.io.InputStreamReader; 11 12 /** 13 * 14 * @author igor 15 */ 16 public class Lectura { 17 /* 18 * BufferedReader, un objeto de esta clase: 19 * Lee texto a partir de una secuencia de caracteres de entrada, 20 * almacenando en un búfer de caracteres a fin proporcionar para la 21 * lectura eficiente de caracteres, matrices, y líneas. 22 * 23 * para inicializar un objeto de este tipo se invoca al contructor 24 * que recibe como parametro un objeto de tipo InputStreamReader el 25 * cual tambien se inicializa llamando al constructor que recibe 26 * al objeto in que es de tipo InputStream. 27 */ 28 private static BufferedReader candena = new BufferedReader( 29 new InputStreamReader(System.in)); 30 31 /* 32 * Creando un metodo para la lectura de caracteres desde el teclado 33 * añadir cláusula IOException para propagar la excepción 34 */ 35 36 public static String leer(String mensaje) throws IOException{ 37 System.out.print(mensaje); 38 return candena.readLine(); 39 } 40 } 41
1 /* 2 * To change this template, choose Tools | Templates 3 * and open the template in the editor. 4 */ 5 6 package datos; 7 8 import entidades.Persona; 9 10 /** 11 * 12 * @author igor 13 */ 14 15 /* 16 * Esta es una clase que se encargará de crear objetos que van a representar 17 * a listas de personas, todas las personas que se ingresen a esta lista 18 * se almacenarán en memoria volatil :\. 19 * 20 * La lista tiene un tamaño predefinido de 10, solo puede almacenar 10 21 * personas, si en el caso se ingrese una más, la lista incrementará su tamaño 22 * en 10 posiciones más. 23 */ 24 public class ListPersonas { 25 public static int tamaño = 10; 26 public static int i = -1; 27 /* 28 * Las clases en java tambien son tipos de datos esto nos ayuda para 29 * poder declarar arreglos que almacenan referencias a objetos. 30 * (arreglo que almacena objetos del tipo de dato con el que declaró 31 */ 32 public Persona lista[]; 33 34 /** 35 * Constructor: 36 * inicializa el arreglo que contendrá a las referencias de tipo 37 * persona 38 */ 39 public ListPersonas(){ 40 lista = new Persona[tamaño]; 41 } 42 43 /** 44 * addPersona(Persona persona) 45 * recibe a la persona que va almacenar 46 */ 47 public void addPersona(Persona persona){ 48 //verificar si el indice de la lista ha llegado a la última posición 49 //si llego llamar al metodo expandir 50 if(i + 1 == lista.length){ 51 expandir(); 52 } 53 //si es que no se llega a cumplir la condición el elemento se agrega 54 lista[++i] = persona; 55 } 56 57 /** 58 * expandir() 59 * método interno declarado privado solo para lista es el encargado 60 * se agregar 10 espacios adicionales. 61 */ 62 private void expandir(){ 63 //crear una lista auxiliar con el tamaño original de la lista 64 //original y adicionar 10 espacios más 65 Persona[] listaAux = new Persona[lista.length+10]; 66 //proceso de copiar los elementos de la lista original a la lista 67 //auxiliar 68 for(int j = 0; j<=i; j++){ 69 listaAux[j] = lista[j]; 70 } 71 //ahora la lista original apunta a la dirección de memoria de listaAux 72 //lista ya tiene 10 espacios mas listos para recibir mas personas! 73 lista = listaAux; 74 } 75 76 public String listar(){ 77 String cadena = ""; 78 for(int j=0; j<=i; j++) 79 cadena += "\n["+j+"]: " +lista[j].toString(); 80 return cadena; 81 } 82 83 /** 84 * burbuja() 85 * método que utiliza el algoritmo de ordenación de la burbuja 86 * @return 87 */ 88 private void burbuja(int criterio){ 89 for(int j = 0; j < i; j++){ 90 for(int k = j+1; k <= i; k++){ 91 if(criterio == 1){ 92 if(lista[k].getNombre().compareTo( 93 lista[j].getNombre()) < 0){ 94 Persona personaAux = lista[k]; 95 lista[k] = lista[j]; 96 lista[j] = personaAux; 97 } 98 } 99 if(criterio == 2){ 100 if(lista[k].getEdad() < lista[j].getEdad()){ 101 Persona personaAux = lista[k]; 102 lista[k] = lista[j]; 103 lista[j] = personaAux; 104 } 105 } 106 } 107 } 108 } 109 110 /** 111 * listarPersonas(int order) 112 * order = 0, retorna todos los elementos listados en el orden que se 113 * agregaron. 114 * orden = 1, retorna todos los elementos listados ordenados 115 * ascendentemente por el nombre; 116 * @param orden 117 * @return un String con los elmentos listados según el criterio de orden 118 */ 119 public String listarPesonas(int opcion){ 120 String cadena = ""; 121 switch(opcion){ 122 case 0: 123 cadena = listar(); 124 break; 125 case 1: 126 burbuja(1); 127 cadena = listar(); 128 break; 129 case 2: 130 burbuja(2); 131 cadena = listar(); 132 break; 133 default: 134 cadena = "Opción incorrecta"; 135 break; 136 137 } 138 return cadena; 139 } 140 } 141 142
1 /* 2 * To change this template, choose Tools | Templates 3 * and open the template in the editor. 4 */ 5 6 package pruebas; 7 8 import datos.Lectura; 9 import datos.ListPersonas; 10 import entidades.Persona; 11 import java.io.IOException; 12 import java.util.GregorianCalendar; 13 14 /** 15 * 16 * @author iAlexander 17 */ 18 public class PruebaListPersonas { 19 /* 20 * Método estatico para el menu de opciones 21 */ 22 public static int menu() throws IOException{ 23 int opcion = 0; 24 String menu = "\nMENU:" 25 + "\n1. Agregar una persona" 26 + "\n2. Listar Personas" 27 + "\n3. Ordenar por nombre" 28 + "\n4. Ordenar por edad" 29 + "\n5. Salir" 30 + "\nDigite Opcion: "; 31 opcion = Integer.parseInt(Lectura.leer(menu)); 32 return opcion; 33 } 34 35 /* 36 * Método main 37 */ 38 public static void main(String[] args) throws IOException { 39 int opcion = 0; 40 int dia, mes, año; 41 String nombre, domicilio, telefono, eMail; 42 Persona persona; 43 ListPersonas lista = new ListPersonas(); 44 /* 45 * Utilizar un do-while asegura que el bloque de código que 46 * está dentro se ejecute al menos una vez. 47 */ 48 do{ 49 opcion = menu(); 50 switch(opcion){ 51 case 1: 52 nombre = Lectura.leer("Nombre: "); 53 domicilio = Lectura.leer("Domicilio: "); 54 telefono = Lectura.leer("Telefono: "); 55 eMail = Lectura.leer("Email: "); 56 dia = Integer.parseInt(Lectura.leer( 57 "FechaNacimiento(DD): ")); 58 mes = Integer.parseInt(Lectura.leer( 59 "FechaNacimiento(MM): ")); 60 año = Integer.parseInt(Lectura.leer( 61 "FechaNacimiento(AA): ")); 62 persona = new Persona(nombre, domicilio, telefono, 63 eMail, new GregorianCalendar(año, mes-1, dia)); 64 lista.addPersona(persona); 65 break; 66 case 2: 67 System.out.println(lista.listarPesonas(0)); 68 break; 69 case 3: 70 System.out.println(lista.listarPesonas(1)); 71 break; 72 case 4: 73 System.out.println(lista.listarPesonas(2)); 74 break; 75 } 76 }while(opcion > 0 && opcion < 5); 77 } 78 } 79 80
run:
MENU:
1. Agregar una persona
2. Listar Personas
3. Ordenar por nombre
4. Ordenar por edad
5. Salir
Digite Opcion: 1
Nombre: Rosa
Domicilio: San Rafael
Telefono: 561992
Email: rouse_22@hotmail.com
FechaNacimiento(DD): 5
FechaNacimiento(MM): 6
FechaNacimiento(AA): 1990
MENU:
1. Agregar una persona
2. Listar Personas
3. Ordenar por nombre
4. Ordenar por edad
5. Salir
Digite Opcion: 1
Nombre: Igor
Domicilio: Trujillo 543
Telefono: 569984
Email: ialexander21@hotmail.com
FechaNacimiento(DD): 4
FechaNacimiento(MM): 12
FechaNacimiento(AA): 1990
MENU:
1. Agregar una persona
2. Listar Personas
3. Ordenar por nombre
4. Ordenar por edad
5. Salir
Digite Opcion: 1
Nombre: Jenny
Domicilio: Guadalupe 257
Telefono: 4556377
Email: jenn_4@live.com
FechaNacimiento(DD): 9
FechaNacimiento(MM): 7
FechaNacimiento(AA): 1993
MENU:
1. Agregar una persona
2. Listar Personas
3. Ordenar por nombre
4. Ordenar por edad
5. Salir
Digite Opcion: 2
[0]:
Persona{
nombre=Rosa
domicilio=San Rafael
telefono=561992
email=rouse_22@hotmail.com
fechaNacimiento=5/6/1990
edad=23}
[1]:
Persona{
nombre=Igor
domicilio=Trujillo 543
telefono=569984
email=ialexander21@hotmail.com
fechaNacimiento=4/12/1990
edad=22}
[2]:
Persona{
nombre=Jenny
domicilio=Guadalupe 257
telefono=4556377
email=jenn_4@live.com
fechaNacimiento=9/7/1993
edad=20}
MENU:
1. Agregar una persona
2. Listar Personas
3. Ordenar por nombre
4. Ordenar por edad
5. Salir
Digite Opcion: 3
[0]:
Persona{
nombre=Igor
domicilio=Trujillo 543
telefono=569984
email=ialexander21@hotmail.com
fechaNacimiento=4/12/1990
edad=22}
[1]:
Persona{
nombre=Jenny
domicilio=Guadalupe 257
telefono=4556377
email=jenn_4@live.com
fechaNacimiento=9/7/1993
edad=20}
[2]:
Persona{
nombre=Rosa
domicilio=San Rafael
telefono=561992
email=rouse_22@hotmail.com
fechaNacimiento=5/6/1990
edad=23}
MENU:
1. Agregar una persona
2. Listar Personas
3. Ordenar por nombre
4. Ordenar por edad
5. Salir
Digite Opcion: 4
[0]:
Persona{
nombre=Jenny
domicilio=Guadalupe 257
telefono=4556377
email=jenn_4@live.com
fechaNacimiento=9/7/1993
edad=20}
[1]:
Persona{
nombre=Igor
domicilio=Trujillo 543
telefono=569984
email=ialexander21@hotmail.com
fechaNacimiento=4/12/1990
edad=22}
[2]:
Persona{
nombre=Rosa
domicilio=San Rafael
telefono=561992
email=rouse_22@hotmail.com
fechaNacimiento=5/6/1990
edad=23}
MENU:
1. Agregar una persona
2. Listar Personas
3. Ordenar por nombre
4. Ordenar por edad
5. Salir
Digite Opcion: 5
GENERACIÓN CORRECTA (total time: 3 minutes 46 seconds)
Descargate este archivo: iGorBlog3
No hay comentarios:
Publicar un comentario