Foro de elhacker.net

Programación => Java => Mensaje iniciado por: Burnhack en 2 Marzo 2008, 23:37 pm



Título: Agenda java
Publicado por: Burnhack en 2 Marzo 2008, 23:37 pm
Pues bien es un ejercicio que me mandaron en clase, y lo he intentado hasta el dia de hoy, ya no le veo muchas mas soluciones, es hacer una agenda en java con cuatro metodos agregar,buscar, modificar y eliminar
Concretamente, consegui hacer funcionar el metodo agregar y creo que he detectado el fallo de mi code en los metodos buscar modificar y arreglar pero no me funciona.He conseguido hacer que me busque pero me devuelve valores nulos.Yo creo que se deberia de cambiar unicamente while de agregar en vez de pasare una posicion nula sustituirlo por lo que tiene que buscar pero a mi no me funciona...Me serviria que lo respondieran para mañana , porque hasta ese dia me daban de plazo pero sino no importa no es caso de vida y muerte ahora pondre aqui la clase principal y en los dos post siguientes las otras dos clases

PD: Deje el code listo para compilar y ejecutar el programa. Solo almacenaria los datos ya que lo unico que esta es el de agregar.Recomiendo completar primero el de buscar ya que creo que sera el mas facil pero yo no lo logre funcionar dado que tengo mal casi seguro el bucle while y entonces no me funcionaba en ninguno de los 3

Código:

public class Agenda {
static InputStreamReader isr = new InputStreamReader(System.in);
static BufferedReader br = new BufferedReader(isr);
static Registro registros[];

public static void main(String[] args)throws IOException {
String opcion;
int i=0;
registros = new Registro [2];
for (i=0; i<registros.length; i++)
registros[i] = null;
System.out.println("1 - Añadir");
System.out.println("2 - Modificar");
System.out.println("3 - eliminiar");
System.out.println("4 - Buscar");
System.out.println("5 - Salir");
opcion = br.readLine();
while (!opcion.equals ("0")){
if (opcion.equals("1"))
agregar();
else if (opcion.equals("2"))
modificar ();
else if (opcion.equals("3"))
eliminar();
else if (opcion.equals("4"))
buscar();
else
System.out.println ("Opción incorrecta..");
System.out.println("1 - Añadir");
System.out.println("2 - Modificar");
System.out.println("3 - eliminiar");
System.out.println("4 - Buscar");
System.out.println("5 - Salir");
opcion = br.readLine();

}
}
static void agregar()throws IOException{
String nombre, localidad, calle, provincia;
int numero, piso, cp, i=0;
char letra;
long telefono;

while (registros [i] != null && i<registros.length)
i++;
if (i<registros.length){
System.out.print("Nombre: ");
nombre = br.readLine();
System.out.print("Calle: ");
calle = br.readLine();
System.out.print("Numero: ");
numero = Integer.parseInt(br.readLine());
System.out.print("Piso: ");
piso = Integer.parseInt(br.readLine());
System.out.print("Letra: ");
letra = br.readLine().charAt(0);
System.out.print("Codigo postal: ");
cp = Integer.parseInt(br.readLine());
System.out.print("Localidad: ");
localidad = br.readLine();
System.out.print("Provincia: ");
provincia = br.readLine();
System.out.print("Telefono: ");
telefono = Long.parseLong(br.readLine());
Direccion aux = new Direccion(calle, numero, piso,
letra, cp, localidad, provincia);
registros[i]= new Registro(nombre, aux, telefono);
}
}


static void modificar()throws IOException{
 }
                static void eliminar() throws IOException {
}
static void buscar() throws IOException {     
}
static void salir() throws IOException {
 }
}

Aqui va la clase direccion, aqui creo que no hay que modificar nada, solo hay que hacerlo en la clase agenda pero bueno revisen el code
Código:
public class Direccion {
private String calle, localidad, provincia;
private int numero, piso, cp;
private char letra;

public Direccion(String calle, int numero, int piso,  char letra,
int cp, String localidad, String provincia){
this.calle = new String (calle);
this.piso = piso;
this.letra =letra;
this.cp = cp;
this.localidad = new String (localidad);
this.provincia = new String (provincia);
this.numero = numero;
}

public Direccion(Direccion d){
calle = new String (d.calle);
numero = d.numero;
piso = d.piso;
letra = d.letra;
cp = d.cp;
localidad = d.localidad;
provincia = d.provincia;
}//fin metodo direcion

public void setCalle (String calle){
this.calle = new String (calle);
}//fin metodo set Calle

public void setNumero (int numero){
this.numero = numero;
}//fin metodo seyNumero

public void setPiso(int piso){
this.piso = piso;
}//fin metodo setPiso

public void setLocalidad (String localidad){
this.localidad = new String (localidad);
}//fin metodo setLocalidad

public void setProvincia (String provincia){
this.provincia = new String (provincia);
}//fin metodo setProvincia

public void setCp (int cp){
this.cp = cp;
}//fin metodo setCp

public void setLetra (char letra){
this.letra = letra;
}//fi metodo setLetra

public void print (){
System.out.println(calle + ", " + numero + " - " + piso + letra);
System.out.println(cp + " - "+ localidad);
System.out.println(provincia);
}
}//fin metodo print

Y por ultimo la clase registro

Código:
public class Registro {
String nombre;
Direccion direccion;
long  telefono;

Registro (String nombre, Direccion direccion, long telefono){
this.nombre = new String (nombre);
this.direccion = new Direccion(direccion);
this.telefono =telefono;
}

public void setNombre (String nombre){this.nombre = new String (nombre); }

public void setDireccion(Direccion direccion){
this.direccion = new Direccion(direccion);}

public void setDireccion(String calle, int numero, int piso,
char letra, int cp, String localidad, String provincia){
direccion = new Direccion (calle, numero, piso, letra, cp,
localidad, provincia);
}

public void setTelefono (long telefono){this.telefono = telefono;}

public String getNombre(){return nombre;}

public Direccion getDireccion(){return direccion;}

public long getTelefono(){return telefono;}

Registro (Registro r){
nombre = new String (r.nombre);
direccion = new Direccion(r.direccion);
telefono = r.telefono;
}

public void print (){
System.out.println("Nombre: " + nombre);
System.out.println("Direccion: ");
direccion.print();
System.out.println("Telefono: " + telefono);
}
}


Título: Re: Terminar Metodos Agenda java(urgente)
Publicado por: Casidiablo en 3 Marzo 2008, 19:24 pm
Ok... pero muestra lo que tienes para buscar y modificar?


Título: Re: Terminar Metodos Agenda java(urgente)
Publicado por: Burnhack en 3 Marzo 2008, 19:34 pm
Concretamente creo que si hago el de moficar, ya utilizaria el bucle para los otros dos a ver que te parece..
Ok este es el post...a partir de aqui ya no funciona:

Código:
		
static void buscar() throws IOException {
                                  String nombre;
  int i;
  System.out.println("Escriba el nombra a buscar");
  nombre = br.readLine();

    while(registros[i] != null && registros[i].getNombre() != nombre)
       i++;
     
if (registros[i].getNombre == nombre){
System.out.print(registros[i])+nombre;
}

else{

  System.out.println("No existe o no se pudo encontrar");}
 




Título: Re: Terminar Metodos Agenda java(urgente)
Publicado por: Burnhack en 3 Marzo 2008, 19:41 pm
Este es el de modificar....en este no trabaje porque si tengo mal el de buscar tengo mal el resto entonces... por eso no lo postee bien...ademas habria que ir preguntando en cada dato introducido si ese es el que desea modificar y si dice que no que pase al siguiente y pregunte lo mismo

ATENCION no tengas en cuenta que pueda haber varios tios que se llamen igual ya que es una miniagenda solo puede haber,,,un pepe,un jose, un luis....es raro pero bueno es sencilla en ese sentido


Código:
  static void modificar() throws IOException {
    String nombre, localidad, calle, provincia;
    int numero, piso, cp, i = 0;
    char letra;
    long telefono;

    System.out.print("Nombre: ");
    nombre = br.readLine();

    for (i = 0; i < registros.length; i++) {
      if (!registros.equals(nombre)) {
        System.out.print("El nombre introducido es incorrecto");
      }
      else {
        System.out.print("Nuevo Nombre: ");
        nombre = br.readLine();
        System.out.print("Nueva Calle: ");
        calle = br.readLine();
        System.out.print("Nuevo Numero: ");
        numero = Integer.parseInt(br.readLine());
        System.out.print("Nuevo Piso: ");
        piso = Integer.parseInt(br.readLine());
        System.out.print("Nueva Letra: ");
        letra = br.readLine().charAt(0);
        System.out.print("Nuevo Codigo postal: ");
        cp = Integer.parseInt(br.readLine());
        System.out.print("Nueva Localidad: ");
        localidad = br.readLine();
        System.out.print("Nueva Provincia: ");
        provincia = br.readLine();
        System.out.print("Nuevo Telefono: ");
        telefono = Long.parseLong(br.readLine());
      }
    }
  }


Título: Re: Terminar Metodos Agenda java(urgente)
Publicado por: Burnhack en 3 Marzo 2008, 19:43 pm
Aqui te dejo el de eliminar que la unica diferencia que creo que hay que hacer es igualar la posiciona  nula para que quede eliminado pero como en los anteriores..sin el de buscar...no hago nada


Código:
  static void eliminar() throws IOException {
    String nombre;
    System.out.print("Nombre: ");
    nombre = br.readLine();

    for (int i = 0; i < registros.length; i++) {

      if (!registros[i].equals(nombre))
        System.out.println("no existe ese registro");

      else
       registros[i]=null;
       System.out.println("El registro ha sido borrado correctamente");
    }
 
  }


Título: Re: Terminar Metodos Agenda java(urgente)
Publicado por: Casidiablo en 3 Marzo 2008, 19:52 pm
Mira, la verdad realizar el ejercicio te concierne solo a ti. Por tanto en esto foro se te colabora con problemas específicos. Por lo visto no has hecho nada para buscar, pero en base al que tienes para eliminar (que estaba mal), te pongo la corrección del mismo, que te ayudará a resolver los demás:

Código:
static void eliminar() throws IOException {
    String nombre;
    System.out.print("Nombre: ");
    nombre = br.readLine();

    for (int i = 0; i < registros.length; i++) {

      if (!registros[i].getNombre().equals(nombre))
        System.out.println("no existe ese registro");

      else
       registros[i]=null;
       System.out.println("El registro ha sido borrado correctamente");
break;
    }

Lo pillas? es necesario que uses adecuadamente los métodos get de las clases Registro y Direccion.

Un saludo!


Título: Re: Terminar Metodos Agenda java(urgente)
Publicado por: Burnhack en 3 Marzo 2008, 20:01 pm
Vale no te preocupes ahora lo ire probando, con eso creo que ya me vale para ir aclarandonme, nosi se que del codigo que te pase de mis intentos , hay algun fallo gordo, pero ya le diera tantas vueltas que al final lo deje ahi...a lo que saliera jajaja.


Y ya se que el foro no esta para hacer deberes a nadie pero bueno era la unica forma que me quedaba...de todas formas gracias. Cuando este el code completo y me funcione (espero) jeje pues si quieres lo posteo a modo de ejemplo para que otros no sufran tanto jeje.

Saludos y gracias


Título: Re: Terminar Metodos Agenda java(urgente)
Publicado por: Ragnarok en 3 Marzo 2008, 21:02 pm
Una agenda es un map que tiene por clave el nombre de la persona y por campo un objeto de tipo entrada agenda (aka registro). Si se quiere hacer la búsqueda por algo más que el nombre se puede añadir como clave de otro map para el que los campos son los mismos.

Mira, la verdad realizar el ejercicio te concierne solo a ti. Por tanto en esto foro se te colabora con problemas específicos.

Modera sin miedo.


Título: Re: Terminar Metodos Agenda java(urgente)
Publicado por: Casidiablo en 3 Marzo 2008, 21:07 pm
Modera sin miedo.

Vale.... es que tengo un corazón muy grande :(


Título: Re: Terminar Metodos Agenda java(urgente)
Publicado por: Burnhack en 3 Marzo 2008, 22:38 pm
Bueno gracias a los dos...el problema ya esta arreglado asi que si quereis ponerle un candado al tema y cerrarlo ...Ahora la posteo en otro tema..para que sirva para otros users


Saludos


Título: Agenda Java [By Burnhack & colaboradores]
Publicado por: Burnhack en 3 Marzo 2008, 22:49 pm
Bueno aqui postee ayer la agenda y puse colaboradores, porque CasiDiablo me presto su ayuda, Fulapol y Phicar tambien colaboraron ...a ellos gracias por ayudarme a terminarla y ahora pondre una agenda para ejecutar en consola que almacena,modifica, elimina y busca un registro introducido por teclado.Esta agenda la mejorare en este mismo post pero para que tengais un ejemplo aqui os la dejo

Código:
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;

public class Agenda {
static InputStreamReader isr = new InputStreamReader(System.in);
static BufferedReader br = new BufferedReader(isr);
static Registro registros[];

public static void main(String[] args)throws IOException {
String opcion;
int i=0;
registros = new Registro [2];
for (i=0; i<registros.length; i++)
registros[i] = null;
System.out.println("1 - Añadir");
System.out.println("2 - Modificar");
System.out.println("3 - eliminiar");
System.out.println("4 - Buscar");
System.out.println("5 - Salir");
opcion = br.readLine();
while (!opcion.equals ("5")){
if (opcion.equals("1"))
agregar();
else if (opcion.equals("2"))
modificar ();
else if (opcion.equals("3"))
eliminar();
else if (opcion.equals("4"))
buscar();
else
System.out.println ("Opción incorrecta..");
System.out.println("1 - Añadir");
System.out.println("2 - Modificar");
System.out.println("3 - eliminiar");
System.out.println("4 - Buscar");
System.out.println("5 - Salir");
opcion = br.readLine();

}
}
static void agregar()throws IOException{
String nombre, localidad, calle, provincia;
int numero, piso, cp, i=0;
char letra;
long telefono;

while (registros [i] != null && i<registros.length)
i++;
if (i<registros.length){
System.out.print("Nombre: ");
nombre = br.readLine();
System.out.print("Calle: ");
calle = br.readLine();
System.out.print("Numero: ");
numero = Integer.parseInt(br.readLine());
System.out.print("Piso: ");
piso = Integer.parseInt(br.readLine());
System.out.print("Letra: ");
letra = br.readLine().charAt(0);
System.out.print("Codigo postal: ");
cp = Integer.parseInt(br.readLine());
System.out.print("Localidad: ");
localidad = br.readLine();
System.out.print("Provincia: ");
provincia = br.readLine();
System.out.print("Telefono: ");
telefono = Long.parseLong(br.readLine());
Direccion aux = new Direccion(calle, numero, piso,
letra, cp, localidad, provincia);
registros[i]= new Registro(nombre, aux, telefono);
}
}
 static void modificar() throws IOException {
    String nombre, localidad, calle, provincia;
    int numero, piso, cp ;
    char letra;
    long telefono;

    System.out.print("Nombre: ");
    nombre = br.readLine();

    for (int i = 0; i < registros.length; i++) {

      if (!registros[i].getNombre().equals(nombre))
        System.out.println("No existe ese registro");

      else {
       registros[i].getNombre() .equals(nombre);

        System.out.print("Nuevo Nombre: ");
        nombre = br.readLine();
        System.out.print("Nueva Calle: ");
        calle = br.readLine();
        System.out.print("Nuevo Numero: ");
        numero = Integer.parseInt(br.readLine());
        System.out.print("Nuevo Piso: ");
        piso = Integer.parseInt(br.readLine());
        System.out.print("Nueva Letra: ");
        letra = br.readLine().charAt(0);
        System.out.print("Nuevo Codigo postal: ");
        cp = Integer.parseInt(br.readLine());
        System.out.print("Nueva Localidad: ");
        localidad = br.readLine();
        System.out.print("Nueva Provincia: ");
        provincia = br.readLine();
        System.out.print("Nuevo Telefono: ");
        telefono = Long.parseLong(br.readLine());
      }
       break;}
}
static void buscar() throws IOException {     
String nombre;
     
    System.out.print("Nombre: ");
    nombre = br.readLine();

    for (int i = 0; i < registros.length; i++) {

      if (!registros[i].getNombre().equals(nombre))
        System.out.println("No existe ese registro");

      else{
       registros[i].getNombre() .equals(nombre);
       System.out.println("Nombre: "+registros[i].getNombre());
       Direccion dirTemp = registros[i].getDireccion();
       System.out.println("Calle: "+dirTemp.getCalle());
       System.out.println("Codigo Postal: "+dirTemp.getCp());
       System.out.println("Localidad: "+dirTemp.getLocalidad());
       System.out.println("Provincia: "+dirTemp.getProvincia());
       System.out.println("Piso: "+dirTemp.getPiso());
       System.out.println("Letra: "+dirTemp.getLetra());
       System.out.println("Telefono: "+registros[i].getTelefono());
      }
       break;}
    }
static void eliminar() throws IOException {
    String nombre;
    System.out.print("Nombre: ");
    nombre = br.readLine();

    for (int i = 0; i < registros.length; i++) {

      if (!registros[i].getNombre().equals(nombre))
        System.out.println("No existe ese registro");

      else
{
       registros[i]=null;
       System.out.println("El registro ha sido borrado correctamente");
}
break;
}
    }

static void salir()throws IOException{
return;}
}


Título: Re: Agenda Java [By Burnhack & colaboradores]
Publicado por: Burnhack en 3 Marzo 2008, 22:55 pm
Clase Dirección:

Código:
public class Direccion {
private String calle, localidad, provincia;
private int numero, piso, cp;
private char letra;

public Direccion(String calle, int numero, int piso,  char letra,
int cp, String localidad, String provincia){
this.calle = new String (calle);
this.piso = piso;
this.letra =letra;
this.cp = cp;
this.localidad = new String (localidad);
this.provincia = new String (provincia);
this.numero = numero;
}

public Direccion(Direccion d){
calle = new String (d.calle);
numero = d.numero;
piso = d.piso;
letra = d.letra;
cp = d.cp;
localidad = d.localidad;
provincia = d.provincia;
}//fin metodo direcion

public void setCalle (String calle){
this.calle = new String (calle);
}//fin metodo set Calle

public void setNumero (int numero){
this.numero = numero;
}//fin metodo seyNumero

public void setPiso(int piso){
this.piso = piso;
}//fin metodo setPiso

public void setLocalidad (String localidad){
this.localidad = new String (localidad);
}//fin metodo setLocalidad

public void setProvincia (String provincia){
this.provincia = new String (provincia);
}//fin metodo setProvincia

public void setCp (int cp){
this.cp = cp;
}//fin metodo setCp

public void setLetra (char letra){
this.letra = letra;
}//fi metodo setLetra


public String getCalle(){return calle;}
public int getCp(){return cp;}
public String getLocalidad(){return localidad;}
public String getProvincia(){return provincia;}
public int getPiso(){return piso;}
public char getLetra(){return letra;}





public void print (){
System.out.println(calle + ", " + numero + " - " + piso + letra);
System.out.println(cp + " - "+ localidad);
System.out.println(provincia);
}
}//fin metodo print


Título: Re: Agenda Java [By Burnhack & colaboradores]
Publicado por: Burnhack en 3 Marzo 2008, 22:56 pm
Clase Registro:

Código:
public class Registro {
String nombre;
Direccion direccion;
long  telefono;

Registro (String nombre, Direccion direccion, long telefono){
this.nombre = new String (nombre);
this.direccion = new Direccion(direccion);
this.telefono =telefono;
}

public void setNombre (String nombre){this.nombre = new String (nombre); }

public void setDireccion(Direccion direccion){
this.direccion = new Direccion(direccion);}

public void setDireccion(String calle, int numero, int piso,
char letra, int cp, String localidad, String provincia){
direccion = new Direccion (calle, numero, piso, letra, cp,
localidad, provincia);
}

public void setTelefono (long telefono){this.telefono = telefono;}

public String getNombre(){return nombre;}

public Direccion getDireccion(){return direccion;}

public long getTelefono(){return telefono;}


Registro (Registro r){
nombre = new String (r.nombre);
direccion = new Direccion(r.direccion);
telefono = r.telefono;
}

public void print (){
System.out.println("Nombre: " + nombre);
System.out.println("Direccion: ");
direccion.print();
System.out.println("Telefono: " + telefono);
}
}


Título: Re: Agenda java(urgente)
Publicado por: Burnhack en 6 Marzo 2008, 00:47 am
Bueno revisando hoy el code, me di cuenta de un par de fallos, el principal y mas gordo es que el bucle for solo recorre el registro 0 jajaja por lo tanto tendriamos una agenda en la que solo almacena un tio y podrias trabajar solo con ese registro pero bueno lo digo de cara a los usuarios que esta agenda es un ejemplo , que hay mucho todavia que mejorar, esto es por decirlo de alguna forma, la agenda mas cutre que puede existir jejeje.Pero eso si muy buen ejemplo.

Bueno como no voy a estar cada poco incluyendole mejoras , simplemente cuando tenga el interface listo y alguna cosa mas , la posteare completa en este mismo post.

De momento aqui teneis para que funcione bien el bucle es este

Código:
		while (i<registros.length && (registros[i] == null || !registros[i].nombre.equals(nombre)))
i++;
if (i==registros.length){

Saludos