{"id":6847,"date":"2014-06-01T01:38:32","date_gmt":"2014-05-31T23:38:32","guid":{"rendered":"http:\/\/www.palentino.es\/blog\/?p=6847"},"modified":"2014-11-24T12:52:06","modified_gmt":"2014-11-24T11:52:06","slug":"agenda-en-java-codigo-fuente-ejemplo-para-propositos-formativos","status":"publish","type":"post","link":"https:\/\/www.palentino.es\/blog\/agenda-en-java-codigo-fuente-ejemplo-para-propositos-formativos\/","title":{"rendered":"Agenda en JAVA. C\u00f3digo fuente. Ejemplo para prop\u00f3sitos formativos."},"content":{"rendered":"<p>En esta entrada os dejo el c\u00f3digo fuente en JAVA, creado empleando el\u00a0IDE Netbeans.<\/p>\n<p>Es ideal para prop\u00f3sitos formativos, ciclos superiores, etc. Como pr\u00e1ctica extensa de varios d\u00edas o entrega de proyecto.<br \/>\nPermite introducir al estudiante en los conceptos relacionados con la<strong> OOP o Programaci\u00f3n Orientada a Objetos y programaci\u00f3n JAVA en general.<\/strong><\/p>\n<p><strong>El enunciado del programa es el siguiente:<\/strong><\/p>\n<p><span style=\"color: #333399;\"><em>Es necesario crear un programa que permite gestionar una agenda de tel\u00e9fonos, los cuales se almacenar\u00e1n en un array de 100 elementos.<\/em><\/span><\/p>\n<p><span style=\"color: #333399;\"><em>Cada contacto de la agenda ser\u00e1 un objeto de tipo contacto, con 2 datos, &#8220;nombre&#8221; y &#8220;tel\u00e9fono&#8221;. No se podr\u00e1n crear contactos sin nombre ni tel\u00e9fono.<\/em><\/span><\/p>\n<p><span style=\"color: #333399;\"><em>La agenda permitir\u00e1 realizar las siguientes operaciones:<\/em><\/span><\/p>\n<p><span style=\"color: #333399;\"><em>A\u00f1adir, buscar, modificar, eliminar, mostrar y vaciar.<\/em><\/span><\/p>\n<p><span style=\"color: #333399;\"><em>A\u00f1adir: Permite agregar un nuevo contacto. Si ya existe un contacto con ese nombre se le informar\u00e1 al usuario previo almacenamiento.<\/em><\/span><\/p>\n<p><span style=\"color: #333399;\"><em>Buscar: Permite localizar un contacto por nombre. Si existen varios con dicho nombre, se mostrar\u00e1n todos.<\/em><\/span><\/p>\n<p><span style=\"color: #333399;\"><em>Modificar: Modifica los datos de un contacto.<\/em><\/span><\/p>\n<p><span style=\"color: #333399;\"><em>Eliminar: Elimina los datos de un contacto.<\/em><\/span><\/p>\n<p><span style=\"color: #333399;\"><em>Mostrar: Muestra un listado de todos los contactos almacenados en la agenda.<\/em><\/span><\/p>\n<p><span style=\"color: #333399;\"><em>Vaciar: Elimina todo el contenido de la agenda, previa confirmaci\u00f3n del usuario.<\/em><\/span><\/p>\n<p><span style=\"color: #333399;\"><em>Observaciones: En todo momento, la agenda se mantendr\u00e1 ordenada por &#8220;nombre&#8221; del contacto.\u00a0<\/em><\/span><\/p>\n<p>Es necesario realizar todo mediante t\u00e9cnicas <strong>orientadas a objetos<\/strong>.<\/p>\n<p>El c\u00f3digo fuente es:<!--more--><\/p>\n<p>He creado <strong>3 ficheros dentro de un paquete llamado ejercicio<\/strong>.<\/p>\n<p>Posee 3 ficheros: <strong>Agenda<\/strong>, <strong>contacto<\/strong> y <strong>ejercicio<\/strong> (programa principal).<\/p>\n<p><strong>Ejercicio.java<\/strong><\/p>\n<pre class=\"lang:java decode:true\">package ejercicio;\r\n\r\n\r\nimport java.io.BufferedReader;\r\nimport java.io.IOException;\r\nimport java.io.InputStreamReader;\r\nimport java.util.logging.Level;\r\nimport java.util.logging.Logger;\r\n\r\n\r\n\/**\r\n *\r\n * @author Oscar de la Cuesta - www.palentino.es\r\n *\/\r\npublic class ejercicio {\r\n    \r\n    \r\n    public static void main(String[] args) {\r\n        try {\r\n            BufferedReader teclado = new BufferedReader(new InputStreamReader(System.in));\r\n            String texto=\"\";\r\n            char opcion='1';\r\n            Agenda mi_agenda= new Agenda();\r\n            while ((opcion=='1') || (opcion=='2') || (opcion=='3') || (opcion=='4')|| (opcion=='5') || (opcion=='6') )\r\n            {\r\n                System.out.println(\"......................\");\r\n                System.out.println(\"AGENDA\");\r\n                System.out.println(\"......................\");\r\n                System.out.println(\"1-Nuevo contacto\");\r\n                System.out.println(\"2-Buscar contacto\");\r\n                System.out.println(\"3-Modificar contacto\");\r\n                System.out.println(\"4-Eliminar contacto\");\r\n                System.out.println(\"5-Listado de contactos\");\r\n                System.out.println(\"6-Vaciar agenda\");\r\n                System.out.println(\"0-Salir\");\r\n                System.out.println(\"......................\");\r\n                texto=teclado.readLine();\r\n                opcion= texto.charAt(0);\r\n                System.out.println(\"Opci\u00f3n: \");\r\n                System.out.println(\"......................\");\r\n                \r\n                switch(opcion){\r\n                    case '1':\r\n                        String nombre;\r\n                        String telefono;\r\n                        boolean validar;\r\n                        System.out.println(\"Por favor introduzca el nombre:\");\r\n                        nombre=teclado.readLine();\r\n                        System.out.println(\"Por favor introduzca el tel\u00e9fono(numero):\");\r\n                        telefono=teclado.readLine();\r\n                        validar=esNumerica(telefono);\r\n                        if (validar){\r\n                             int telefono_entero= Integer.parseInt(telefono);\r\n                             mi_agenda.Consultar(nombre, telefono_entero);\r\n                             mi_agenda.Anadir(nombre, telefono_entero);\r\n                        }\r\n                        else{\r\n                             System.out.println(\"No es un n\u00famero, formato de telefono incorrecto.\");}\r\n                        \r\n                       \r\n                        break;\r\n                       \r\n                                \r\n                    case '2':\r\n                        System.out.println(\"Nombre a buscar:\");\r\n                        nombre=teclado.readLine().toUpperCase();\r\n                        mi_agenda.Buscar(nombre);\r\n                        break;\r\n                    case '3':\r\n                        mi_agenda.Modificar();\r\n                         break;\r\n                    case '4':\r\n                        mi_agenda.Eliminar();\r\n                        break;\r\n                    case '5':\r\n                        mi_agenda.Mostrar();\r\n                        break;\r\n                    case '6':\r\n                       mi_agenda.Vaciar();\r\n                        break;\r\n                    case '0':\r\n                        System.out.println(\"Ha salido del programa\");\r\n                        break;\r\n                     \r\n                    default:\r\n                        System.out.println(\"Opci\u00f3n incorrecta ...\");\r\n                        opcion='1';\r\n                     \r\n                }\r\n                \r\n            }    \r\n            \r\n                    } catch (IOException ex) {\r\n            Logger.getLogger(ejercicio.class.getName()).log(Level.SEVERE, null, ex);\r\n        }\r\n    }\r\n    \r\n    \r\n    public static boolean esNumerica(String str)\r\n{\r\n    for (char c : str.toCharArray())\r\n    {\r\n        if (!Character.isDigit(c)) return false;\r\n    }\r\n    return true;\r\n}\r\n}\r\n<\/pre>\n<p>Ahora el fichero <strong>Contacto.java<\/strong><\/p>\n<pre class=\"lang:java decode:true\">package ejercicio;\r\n\r\n\/**\r\n *\r\n * @author Oscar de la Cuesta - www.palentino.es\r\n *\/\r\npublic class Contacto {\r\n    private String nombre;\r\n    private int telefono;\r\n\r\n    public Contacto()\r\n    {\r\n    this.nombre=null;\r\n    this.telefono=0;\r\n    }\r\n    public Contacto(String nombre, int telefono) {\r\n        this.nombre = nombre;\r\n        this.telefono = telefono;\r\n    }\r\n    public void set_nombre(String nomb){        \r\n        this.nombre=nomb.toUpperCase();\r\n    }\r\n    public void set_telefono(int telf){\r\n        this.telefono=telf;\r\n    }\r\n\r\n    public String getNombre() {\r\n        return this.nombre;\r\n    }\r\n\r\n    public int getTelefono() {\r\n        return telefono;\r\n    }\r\n    \r\n    \r\n    \r\n}\r\n<\/pre>\n<p>Para finalizar el fichero<strong> Agenda.java<\/strong>, el m\u00e1s complejo que incorpora la OOP, m\u00e9todos de ordenaci\u00f3n, etc.<\/p>\n<pre class=\"lang:java decode:true\">package ejercicio;\r\n\r\nimport java.io.BufferedReader;\r\nimport java.io.IOException;\r\nimport java.io.InputStreamReader;\r\nimport java.util.logging.Level;\r\nimport java.util.logging.Logger;\r\n\r\n\/*\r\n \r\n * @author Oscar de la Cuesta Campillo. www.palentino.es\r\n *\/\r\npublic class Agenda {\r\n\r\n    Contacto[] lista_contactos = new Contacto[99];\r\n    private int contador_contactos = 0; \/\/ Contador de objetos creados. Variable muy importante.\r\n\r\n    public void Consultar(String nombre, int telefono) {\r\n        for (int i = 0; i &lt; this.contador_contactos; i++) {\r\n\r\n            if (nombre.equals(this.lista_contactos[i].getNombre())) {\r\n                System.out.println(\"Ya existe un contacto con ese nombre\");\r\n            }\r\n        }\r\n\r\n    }\r\n\r\n    public void Anadir(String nombre, int telefono) {\r\n        if (contador_contactos &lt; 99) {\r\n            this.lista_contactos[contador_contactos] = new Contacto();\r\n            this.lista_contactos[contador_contactos].set_nombre(nombre);\r\n            this.lista_contactos[contador_contactos].set_telefono(telefono);\r\n            this.contador_contactos++;\r\n            Ordenar();\r\n        } else {\r\n            System.out.println(\"La agenda est\u00e1 llena\");\r\n        }\r\n\r\n    }\r\n\r\n    public void Buscar(String nombre) {\r\n        boolean encontrado = false;\r\n\r\n        for (int i = 0; i &lt; contador_contactos; i++) {\r\n            if (nombre.equals(this.lista_contactos[i].getNombre())) {\r\n                System.out.println(this.lista_contactos[i].getNombre() + \"-\" + \"Tf:\" + this.lista_contactos[i].getTelefono());\r\n                encontrado = true;\r\n            }\r\n        }\r\n        if (!encontrado) {\r\n            System.out.println(\"Contacto inexistente\");\r\n        }\r\n    }\r\n\r\n    public void Ordenar() {\r\n        \/\/Este m\u00e9todo ordenar\u00e1 el array de contacos por el nombre mediante el M\u00e9todo Burbuja\r\n        int N = this.contador_contactos;\r\n        String nombre1;\r\n        String nombre2;\r\n        \/\/Optimizo para cuando tenga m\u00e1s de dos elementos al menos.\r\n        if (contador_contactos &gt;= 2) {\r\n            for (int i = 1; i &lt;= N - 1; i++) {\r\n                for (int j = 1; j &lt;= N - i; j++) {\r\n                    nombre1 = this.lista_contactos[j - 1].getNombre();\r\n                    nombre2 = this.lista_contactos[j].getNombre();\r\n                    if (nombre1.charAt(0) &gt; nombre2.charAt(0)) {\r\n                        Contacto tmp = this.lista_contactos[j - 1];\r\n                        this.lista_contactos[j - 1] = this.lista_contactos[j];\r\n                        this.lista_contactos[j] = tmp;\r\n                    }\r\n                }\r\n            }\r\n        }\r\n    }\r\n\r\n    public void Mostrar() {\r\n        if (this.contador_contactos == 0) {\r\n            System.out.println(\"No hay contactos\");\r\n        } else {\r\n            for (int t = 0; t &lt; this.contador_contactos; t++) {\r\n                \/\/ Es necesario por precauci\u00f3n usar el this para el metodo, puesto que si se ejecuta muchas veces la referencias a memoria pueden fallar.\r\n                System.out.println(this.lista_contactos[t].getNombre() + \"-\" + \"Tf:\" + Integer.toString(this.lista_contactos[t].getTelefono()));\r\n            }\r\n        }\r\n    }\r\n\r\n    public void Vaciar() {\r\n        try {\r\n            System.out.println(\"Se eliminar\u00e1n todos los contactos\");\r\n            System.out.println(\"\u00bfEstas seguro (S\/N)?\");\r\n            String respuesta;\r\n            BufferedReader teclado = new BufferedReader(new InputStreamReader(System.in));\r\n            respuesta = teclado.readLine();\r\n            respuesta = respuesta.toUpperCase();\r\n            if (respuesta.equals(\"S\")) {\r\n\r\n                \/\/Lo hago por mera formalidad porque java se encarga de liberar los objetos no referenciados creados. El garbage collector\r\n                for (int i = 0; i &lt; this.contador_contactos; i++) {\r\n                    this.lista_contactos[i].set_nombre(\"\");\r\n                    this.lista_contactos[i].set_telefono(0);\r\n                }\r\n                contador_contactos = 0;\r\n                System.out.println(\"Agenda vaciada correctamente\");\r\n            } else {\r\n                System.out.println(\"Acci\u00f3n cancelada\");\r\n            }\r\n        } catch (IOException ex) {\r\n            Logger.getLogger(Agenda.class.getName()).log(Level.SEVERE, null, ex);\r\n        }\r\n\r\n    }\r\n\r\n    public void Eliminar() {\r\n        try {\r\n            boolean encontrado = false;\r\n            BufferedReader teclado = new BufferedReader(new InputStreamReader(System.in));\r\n            System.out.println(\"Nombre de contacto a eliminar:\");\r\n            String eliminar = teclado.readLine().toUpperCase();\r\n            if (contador_contactos == 0) {\r\n                System.out.println(\"No hay contactos\");\r\n            } else {\r\n                for (int i = 0; i &lt; contador_contactos; i++) {\r\n\r\n                    if (eliminar.equals(this.lista_contactos[i].getNombre())) {\r\n                        System.out.println(i + 1 + \". \" + this.lista_contactos[i].getNombre() + \"-\" + \"Tf:\" + this.lista_contactos[i].getTelefono());\r\n                        encontrado = true;\r\n                    }\r\n                }\r\n                if (encontrado) {\r\n                    System.out.println(\"\u00bfQu\u00e9 contacto quieres eliminar, introduce el n\u00famero asociado?\");\r\n                    int eliminar_numero = Integer.parseInt(teclado.readLine());\r\n                    eliminar_numero--;\r\n                    System.out.println(\"\u00bfEstas seguro (S\/N)?\");\r\n                    String respuesta;\r\n                    respuesta = teclado.readLine();\r\n                    respuesta = respuesta.toUpperCase();\r\n                    if (respuesta.equals(\"S\")) {\r\n                        Contacto[] temporal = new Contacto[99];\r\n                        int ii = 0;\r\n                        boolean encontrado2=false;\r\n                        for (int i = 0; i &lt; this.contador_contactos; i++) {\r\n\r\n                            if (i != eliminar_numero) {\r\n                                \/\/ Creo el objeto temporal para el borrado\r\n                                if (!encontrado2)\r\n                                {\r\n                                  temporal[ii] = this.lista_contactos[ii];\r\n                                  ii++;\r\n                                }\r\n                                else\r\n                                {\r\n                                    if (ii&lt;this.contador_contactos)\r\n                                    { temporal[ii] = this.lista_contactos[ii+1];\r\n                                     ii++;\r\n                                    }\r\n                                }\r\n\r\n                            } else {\r\n                                temporal[ii] = this.lista_contactos[ii + 1];\r\n                                ii++;\r\n                                encontrado2=true;\r\n\r\n                            }\r\n                        }\r\n                        this.contador_contactos--;\r\n                        System.out.println(\"Contacto eliminado correctamente\");\r\n                        for (int j = 0; j &lt; this.contador_contactos; j++) {\r\n                            this.lista_contactos[j] = temporal[j];\r\n\r\n                        }\r\n\r\n                    }\r\n\r\n                } else {\r\n                    System.out.println(\"Lo siento, No se ha encontrado el nombre\");\r\n                }\r\n            }\r\n        } catch (IOException ex) {\r\n            Logger.getLogger(Agenda.class.getName()).log(Level.SEVERE, null, ex);\r\n        }\r\n    }\r\n\r\n    public void Modificar() {\r\n        try {\r\n            boolean encontrado = false;\r\n            BufferedReader teclado = new BufferedReader(new InputStreamReader(System.in));\r\n            System.out.println(\"Nombre de contacto a modificar:\");\r\n            String eliminar = teclado.readLine().toUpperCase();\r\n            if (contador_contactos == 0) {\r\n                System.out.println(\"No hay contactos\");\r\n            } else {\r\n                for (int i = 0; i &lt; this.contador_contactos; i++) {\r\n\r\n                    if (eliminar.equals(this.lista_contactos[i].getNombre())) {\r\n                        System.out.println(i + 1 + \". \" + this.lista_contactos[i].getNombre() + \"-\" + \"Tf:\" + this.lista_contactos[i].getTelefono());\r\n                        encontrado = true;\r\n                    }\r\n                }\r\n                if (encontrado) {\r\n                    System.out.println(\"\u00bfQu\u00e9 contacto quieres modificar?, introduce el n\u00famero:\");\r\n                    int modificar_numero = Integer.parseInt(teclado.readLine());\r\n\r\n                    System.out.println(\"Introduce nombre:\");\r\n                    String nombre_nuevo = teclado.readLine();\r\n                    System.out.println(\"Introduce tel\u00e9fono, formato numerico:\");\r\n                    int telefono_nuevo = Integer.parseInt(teclado.readLine());\r\n\r\n                    this.lista_contactos[modificar_numero - 1].set_nombre(nombre_nuevo);\r\n                    this.lista_contactos[modificar_numero - 1].set_telefono(telefono_nuevo);\r\n                    Ordenar();\r\n                } else {\r\n                    System.out.println(\"No hay contactos con ese nombre\");\r\n                }\r\n\r\n            }\r\n        } catch (IOException ex) {\r\n            Logger.getLogger(Agenda.class.getName()).log(Level.SEVERE, null, ex);\r\n        }\r\n    }\r\n\r\n}\r\n<\/pre>\n<p>Nota: Por favor, recuerda si te ha gustado, puedes contribuir con aportaciones publicitarias, \u00a0para caf\u00e9s al menos <img decoding=\"async\" class=\"wp-smiley\" src=\"http:\/\/www.palentino.es\/blog\/wp-includes\/images\/smilies\/icon_wink.gif\" alt=\";-)\" \/><\/p>\n<p>Esto es todo, espero que os sirva.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>En esta entrada os dejo el c\u00f3digo fuente en JAVA, creado empleando el\u00a0IDE Netbeans. Es ideal para prop\u00f3sitos formativos, ciclos superiores, etc. Como pr\u00e1ctica extensa de varios d\u00edas o entrega de proyecto. Permite introducir al estudiante en los conceptos relacionados con la OOP o Programaci\u00f3n Orientada a Objetos y programaci\u00f3n JAVA en general. El enunciado del programa es el siguiente: Es necesario crear un programa que permite gestionar una agenda de tel\u00e9fonos, los cuales se almacenar\u00e1n en un array de 100 elementos. Cada contacto de la agenda ser\u00e1 un objeto de tipo contacto, con 2 datos, &#8220;nombre&#8221; y &#8220;tel\u00e9fono&#8221;. No se podr\u00e1n crear contactos sin nombre ni tel\u00e9fono. La agenda permitir\u00e1 realizar las siguientes operaciones: A\u00f1adir, buscar, modificar, eliminar, mostrar y vaciar. A\u00f1adir: Permite agregar un nuevo contacto. Si ya existe un contacto con ese nombre se le informar\u00e1 al usuario previo almacenamiento. Buscar: Permite localizar un contacto por nombre. Si existen varios con dicho nombre, se mostrar\u00e1n todos. Modificar: Modifica los datos de un contacto. Eliminar: Elimina los datos de un contacto. Mostrar: Muestra un listado de todos los contactos almacenados en la agenda. Vaciar: Elimina todo el contenido de la agenda, previa confirmaci\u00f3n del usuario. Observaciones: En todo momento, la agenda se mantendr\u00e1 ordenada por &#8220;nombre&#8221; del contacto.\u00a0 Es necesario realizar todo mediante t\u00e9cnicas orientadas a objetos. El c\u00f3digo fuente es:<\/p>\n","protected":false},"author":1,"featured_media":5784,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[492,5,14],"tags":[57,62,129,61,44],"class_list":["post-6847","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-java-2","category-programacion","category-varios","tag-java","tag-objetos","tag-oop","tag-poo","tag-programacion-2"],"_links":{"self":[{"href":"https:\/\/www.palentino.es\/blog\/wp-json\/wp\/v2\/posts\/6847","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.palentino.es\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.palentino.es\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.palentino.es\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.palentino.es\/blog\/wp-json\/wp\/v2\/comments?post=6847"}],"version-history":[{"count":6,"href":"https:\/\/www.palentino.es\/blog\/wp-json\/wp\/v2\/posts\/6847\/revisions"}],"predecessor-version":[{"id":7416,"href":"https:\/\/www.palentino.es\/blog\/wp-json\/wp\/v2\/posts\/6847\/revisions\/7416"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.palentino.es\/blog\/wp-json\/wp\/v2\/media\/5784"}],"wp:attachment":[{"href":"https:\/\/www.palentino.es\/blog\/wp-json\/wp\/v2\/media?parent=6847"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.palentino.es\/blog\/wp-json\/wp\/v2\/categories?post=6847"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.palentino.es\/blog\/wp-json\/wp\/v2\/tags?post=6847"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}