Twitter Flickr Pinterest LinkedIn YouTube Google Maps E-mail RSS
formats

Agenda en JAVA. Código fuente. Ejemplo para propósitos formativos.

En esta entrada os dejo el código fuente en JAVA, creado empleando el IDE Netbeans.

Es ideal para propósitos formativos, ciclos superiores, etc. Como práctica extensa de varios días o entrega de proyecto.
Permite introducir al estudiante en los conceptos relacionados con la OOP o Programación Orientada a Objetos y programación JAVA en general.

El enunciado del programa es el siguiente:

Es necesario crear un programa que permite gestionar una agenda de teléfonos, los cuales se almacenarán en un array de 100 elementos.

Cada contacto de la agenda será un objeto de tipo contacto, con 2 datos, «nombre» y «teléfono». No se podrán crear contactos sin nombre ni teléfono.

La agenda permitirá realizar las siguientes operaciones:

Añadir, buscar, modificar, eliminar, mostrar y vaciar.

Añadir: Permite agregar un nuevo contacto. Si ya existe un contacto con ese nombre se le informará al usuario previo almacenamiento.

Buscar: Permite localizar un contacto por nombre. Si existen varios con dicho nombre, se mostrarán 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ón del usuario.

Observaciones: En todo momento, la agenda se mantendrá ordenada por «nombre» del contacto. 

Es necesario realizar todo mediante técnicas orientadas a objetos.

El código fuente es:

He creado 3 ficheros dentro de un paquete llamado ejercicio.

Posee 3 ficheros: Agenda, contacto y ejercicio (programa principal).

Ejercicio.java

package ejercicio;


import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.logging.Level;
import java.util.logging.Logger;


/**
 *
 * @author Oscar de la Cuesta - www.palentino.es
 */
public class ejercicio {
    
    
    public static void main(String[] args) {
        try {
            BufferedReader teclado = new BufferedReader(new InputStreamReader(System.in));
            String texto="";
            char opcion='1';
            Agenda mi_agenda= new Agenda();
            while ((opcion=='1') || (opcion=='2') || (opcion=='3') || (opcion=='4')|| (opcion=='5') || (opcion=='6') )
            {
                System.out.println("......................");
                System.out.println("AGENDA");
                System.out.println("......................");
                System.out.println("1-Nuevo contacto");
                System.out.println("2-Buscar contacto");
                System.out.println("3-Modificar contacto");
                System.out.println("4-Eliminar contacto");
                System.out.println("5-Listado de contactos");
                System.out.println("6-Vaciar agenda");
                System.out.println("0-Salir");
                System.out.println("......................");
                texto=teclado.readLine();
                opcion= texto.charAt(0);
                System.out.println("Opción: ");
                System.out.println("......................");
                
                switch(opcion){
                    case '1':
                        String nombre;
                        String telefono;
                        boolean validar;
                        System.out.println("Por favor introduzca el nombre:");
                        nombre=teclado.readLine();
                        System.out.println("Por favor introduzca el teléfono(numero):");
                        telefono=teclado.readLine();
                        validar=esNumerica(telefono);
                        if (validar){
                             int telefono_entero= Integer.parseInt(telefono);
                             mi_agenda.Consultar(nombre, telefono_entero);
                             mi_agenda.Anadir(nombre, telefono_entero);
                        }
                        else{
                             System.out.println("No es un número, formato de telefono incorrecto.");}
                        
                       
                        break;
                       
                                
                    case '2':
                        System.out.println("Nombre a buscar:");
                        nombre=teclado.readLine().toUpperCase();
                        mi_agenda.Buscar(nombre);
                        break;
                    case '3':
                        mi_agenda.Modificar();
                         break;
                    case '4':
                        mi_agenda.Eliminar();
                        break;
                    case '5':
                        mi_agenda.Mostrar();
                        break;
                    case '6':
                       mi_agenda.Vaciar();
                        break;
                    case '0':
                        System.out.println("Ha salido del programa");
                        break;
                     
                    default:
                        System.out.println("Opción incorrecta ...");
                        opcion='1';
                     
                }
                
            }    
            
                    } catch (IOException ex) {
            Logger.getLogger(ejercicio.class.getName()).log(Level.SEVERE, null, ex);
        }
    }
    
    
    public static boolean esNumerica(String str)
{
    for (char c : str.toCharArray())
    {
        if (!Character.isDigit(c)) return false;
    }
    return true;
}
}

Ahora el fichero Contacto.java

package ejercicio;

/**
 *
 * @author Oscar de la Cuesta - www.palentino.es
 */
public class Contacto {
    private String nombre;
    private int telefono;

    public Contacto()
    {
    this.nombre=null;
    this.telefono=0;
    }
    public Contacto(String nombre, int telefono) {
        this.nombre = nombre;
        this.telefono = telefono;
    }
    public void set_nombre(String nomb){        
        this.nombre=nomb.toUpperCase();
    }
    public void set_telefono(int telf){
        this.telefono=telf;
    }

    public String getNombre() {
        return this.nombre;
    }

    public int getTelefono() {
        return telefono;
    }
    
    
    
}

Para finalizar el fichero Agenda.java, el más complejo que incorpora la OOP, métodos de ordenación, etc.

package ejercicio;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.logging.Level;
import java.util.logging.Logger;

/*
 
 * @author Oscar de la Cuesta Campillo. www.palentino.es
 */
public class Agenda {

    Contacto[] lista_contactos = new Contacto[99];
    private int contador_contactos = 0; // Contador de objetos creados. Variable muy importante.

    public void Consultar(String nombre, int telefono) {
        for (int i = 0; i < this.contador_contactos; i++) {

            if (nombre.equals(this.lista_contactos[i].getNombre())) {
                System.out.println("Ya existe un contacto con ese nombre");
            }
        }

    }

    public void Anadir(String nombre, int telefono) {
        if (contador_contactos < 99) {
            this.lista_contactos[contador_contactos] = new Contacto();
            this.lista_contactos[contador_contactos].set_nombre(nombre);
            this.lista_contactos[contador_contactos].set_telefono(telefono);
            this.contador_contactos++;
            Ordenar();
        } else {
            System.out.println("La agenda está llena");
        }

    }

    public void Buscar(String nombre) {
        boolean encontrado = false;

        for (int i = 0; i < contador_contactos; i++) {
            if (nombre.equals(this.lista_contactos[i].getNombre())) {
                System.out.println(this.lista_contactos[i].getNombre() + "-" + "Tf:" + this.lista_contactos[i].getTelefono());
                encontrado = true;
            }
        }
        if (!encontrado) {
            System.out.println("Contacto inexistente");
        }
    }

    public void Ordenar() {
        //Este método ordenará el array de contacos por el nombre mediante el Método Burbuja
        int N = this.contador_contactos;
        String nombre1;
        String nombre2;
        //Optimizo para cuando tenga más de dos elementos al menos.
        if (contador_contactos >= 2) {
            for (int i = 1; i <= N - 1; i++) {
                for (int j = 1; j <= N - i; j++) {
                    nombre1 = this.lista_contactos[j - 1].getNombre();
                    nombre2 = this.lista_contactos[j].getNombre();
                    if (nombre1.charAt(0) > nombre2.charAt(0)) {
                        Contacto tmp = this.lista_contactos[j - 1];
                        this.lista_contactos[j - 1] = this.lista_contactos[j];
                        this.lista_contactos[j] = tmp;
                    }
                }
            }
        }
    }

    public void Mostrar() {
        if (this.contador_contactos == 0) {
            System.out.println("No hay contactos");
        } else {
            for (int t = 0; t < this.contador_contactos; t++) {
                // Es necesario por precaución usar el this para el metodo, puesto que si se ejecuta muchas veces la referencias a memoria pueden fallar.
                System.out.println(this.lista_contactos[t].getNombre() + "-" + "Tf:" + Integer.toString(this.lista_contactos[t].getTelefono()));
            }
        }
    }

    public void Vaciar() {
        try {
            System.out.println("Se eliminarán todos los contactos");
            System.out.println("¿Estas seguro (S/N)?");
            String respuesta;
            BufferedReader teclado = new BufferedReader(new InputStreamReader(System.in));
            respuesta = teclado.readLine();
            respuesta = respuesta.toUpperCase();
            if (respuesta.equals("S")) {

                //Lo hago por mera formalidad porque java se encarga de liberar los objetos no referenciados creados. El garbage collector
                for (int i = 0; i < this.contador_contactos; i++) {
                    this.lista_contactos[i].set_nombre("");
                    this.lista_contactos[i].set_telefono(0);
                }
                contador_contactos = 0;
                System.out.println("Agenda vaciada correctamente");
            } else {
                System.out.println("Acción cancelada");
            }
        } catch (IOException ex) {
            Logger.getLogger(Agenda.class.getName()).log(Level.SEVERE, null, ex);
        }

    }

    public void Eliminar() {
        try {
            boolean encontrado = false;
            BufferedReader teclado = new BufferedReader(new InputStreamReader(System.in));
            System.out.println("Nombre de contacto a eliminar:");
            String eliminar = teclado.readLine().toUpperCase();
            if (contador_contactos == 0) {
                System.out.println("No hay contactos");
            } else {
                for (int i = 0; i < contador_contactos; i++) {

                    if (eliminar.equals(this.lista_contactos[i].getNombre())) {
                        System.out.println(i + 1 + ". " + this.lista_contactos[i].getNombre() + "-" + "Tf:" + this.lista_contactos[i].getTelefono());
                        encontrado = true;
                    }
                }
                if (encontrado) {
                    System.out.println("¿Qué contacto quieres eliminar, introduce el número asociado?");
                    int eliminar_numero = Integer.parseInt(teclado.readLine());
                    eliminar_numero--;
                    System.out.println("¿Estas seguro (S/N)?");
                    String respuesta;
                    respuesta = teclado.readLine();
                    respuesta = respuesta.toUpperCase();
                    if (respuesta.equals("S")) {
                        Contacto[] temporal = new Contacto[99];
                        int ii = 0;
                        boolean encontrado2=false;
                        for (int i = 0; i < this.contador_contactos; i++) {

                            if (i != eliminar_numero) {
                                // Creo el objeto temporal para el borrado
                                if (!encontrado2)
                                {
                                  temporal[ii] = this.lista_contactos[ii];
                                  ii++;
                                }
                                else
                                {
                                    if (ii<this.contador_contactos)
                                    { temporal[ii] = this.lista_contactos[ii+1];
                                     ii++;
                                    }
                                }

                            } else {
                                temporal[ii] = this.lista_contactos[ii + 1];
                                ii++;
                                encontrado2=true;

                            }
                        }
                        this.contador_contactos--;
                        System.out.println("Contacto eliminado correctamente");
                        for (int j = 0; j < this.contador_contactos; j++) {
                            this.lista_contactos[j] = temporal[j];

                        }

                    }

                } else {
                    System.out.println("Lo siento, No se ha encontrado el nombre");
                }
            }
        } catch (IOException ex) {
            Logger.getLogger(Agenda.class.getName()).log(Level.SEVERE, null, ex);
        }
    }

    public void Modificar() {
        try {
            boolean encontrado = false;
            BufferedReader teclado = new BufferedReader(new InputStreamReader(System.in));
            System.out.println("Nombre de contacto a modificar:");
            String eliminar = teclado.readLine().toUpperCase();
            if (contador_contactos == 0) {
                System.out.println("No hay contactos");
            } else {
                for (int i = 0; i < this.contador_contactos; i++) {

                    if (eliminar.equals(this.lista_contactos[i].getNombre())) {
                        System.out.println(i + 1 + ". " + this.lista_contactos[i].getNombre() + "-" + "Tf:" + this.lista_contactos[i].getTelefono());
                        encontrado = true;
                    }
                }
                if (encontrado) {
                    System.out.println("¿Qué contacto quieres modificar?, introduce el número:");
                    int modificar_numero = Integer.parseInt(teclado.readLine());

                    System.out.println("Introduce nombre:");
                    String nombre_nuevo = teclado.readLine();
                    System.out.println("Introduce teléfono, formato numerico:");
                    int telefono_nuevo = Integer.parseInt(teclado.readLine());

                    this.lista_contactos[modificar_numero - 1].set_nombre(nombre_nuevo);
                    this.lista_contactos[modificar_numero - 1].set_telefono(telefono_nuevo);
                    Ordenar();
                } else {
                    System.out.println("No hay contactos con ese nombre");
                }

            }
        } catch (IOException ex) {
            Logger.getLogger(Agenda.class.getName()).log(Level.SEVERE, null, ex);
        }
    }

}

Nota: Por favor, recuerda si te ha gustado, puedes contribuir con aportaciones publicitarias,  para cafés al menos ;-)

Esto es todo, espero que os sirva.

Etiquetas:, , , ,

Deja un comentario

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.

Home JAVA Agenda en JAVA. Código fuente. Ejemplo para propósitos formativos.
© www.palentino.es, desde el 2012 - Un Blog para compartir conocimientos ...

Uso de cookies en mi sitio palentino.es

Este sitio web utiliza cookies para que tengamos la mejor experiencia de usuario. Si continúas navegando estás dando tu consentimiento para la aceptación de las mencionadas cookies y la aceptación de la política de cookies

ACEPTAR
Aviso de cookies