Recetario de Cocina 1.0

Ir abajo

Recetario de Cocina 1.0

Mensaje  Admin (Viruz) el Miér Ene 09, 2013 4:24 am

Después de un largo tiempo he podido sacar otra aplicación sencilla, aunque aún no esta al 100% ya se encuentra funcional y con el objetivo de que si el usuario desea alguna mejora puedan comentar o en el mejor de los casos si modifican alguno de los Bugs que se encuentren que en realidad son mas validaciones de campos que cualquier otra cosa pero ya estoy trabajando en ello.

La aplicación se trata de un recetario de cocina donde se pueda llevar el control de tus recetas (válgase la redundancia) y por consecuente los pasos de esta que pueda llevar y solo lo realizamos con puros arreglos que a lo largo de todo este tiempo hemos visto ejemplos, esta en su versión 1 igual e iré mejorando hasta llevarlo a una base de datos.

Lo que se necesita conocer
Nota: Estas entradas son muy importantes ya que se manejan funcionalidades en esta aplicación.

¿Como funciona el programa?

El programa es un poco extenso por lo que resumiré las clases más importantes y los métodos que se debe conocer su funcionamiento (ya ustedes al descargar el programa se darán de cuenta que es lo que hacen todas las clases). El proyecto cuenta con 6 clases (1 clase Main, 2 clases de set y get, 1 JFrame Form que es la ventana principal, 2 JDialog Form).

1. Empezando por la clase Recetas se almacenan:

  • nombre: Una receta debe de tener un nombre para identificación.
  • elementos: Es un arreglo de la clase que se utilizará para asociar la receta con los pasos.
Código

Clase Recetas

/**
*
* @author Viruz
*/
public class Recetas {
private String nombre;
private PasosdeRecetas[] elementos;

public Recetas(String nombre, PasosdeRecetas[] elementos) {
this.nombre = nombre;
this.elementos = elementos;
}

/**
* @return the elementos
*/
public PasosdeRecetas[] getElementos() {
return elementos;
}

/**
* @param elementos the elementos to set
*/
public void setElementos(PasosdeRecetas[] elementos) {
this.elementos = elementos;
}

/**
* @return the nombre
*/
public String getNombre() {
return nombre;
}

/**
* @param nombre the nombre to set
*/
public void setNombre(String nombre) {
this.nombre = nombre;
}
}


2. La clase PasosdeRecetas tendrá la información (variables) de cada receta que se crea anteriormente aquí los métodos set y get son:

  • pasos: Número o un índice de pasos que tiene cada receta.
  • información: Texto que el usuario vaya agregando en cada paso.
Clases PasosdeRecetas

/**
*
* @author Viruz
*/
public class PasosdeRecetas {

private String informacion;
private PasosdeRecetas pasos;

public PasosdeRecetas (String infor) {
this.informacion = infor;
}

/**
* @return the informacion
*/
public String getInformacion() {
return informacion;
}

/**
* @param informacion the informacion to set
*/
public void setInformacion(String informacion) {
this.informacion = informacion;
}

/**
* @return the pasos
*/
public PasosdeRecetas getPasos() {
return pasos;
}

/**
* @param pasos the pasos to set
*/
public void setPasos(PasosdeRecetas pasos) {
this.pasos = pasos;
}
}


3. Dentro de la ventana principal se encontrarán los eventos de botón en el que hacen el ABC (Alta, Baja y Consulta) del programa. Aquí hay 2 métodos importantes que son:

  • agregarPasos(): Primero dentro de un ciclo do-while se pregunta si el usuario desea agregar mas pasos si la respuesta es igual con la opción No se sale.
do {
String paso = JOptionPane.showInputDialog (this,"Inserte el paso "+(contador+1));
if (primero) {
primerNodo.setInformacion(paso);
primero = false;
} else {
otroNodo = new PasosdeRecetas (paso);
}
nodoAux.setPasos(otroNodo);
nodoAux = otroNodo;
contador++;
respuesta2 = JOptionPane.showConfirmDialog(null, "¿Desea insertar otro paso?","¿Continuar?", JOptionPane.YES_NO_OPTION);

if (respuesta2 != 0 && contador == 1) {
JOptionPane.showMessageDialog(null, "Solamente se pueden ingresar Recetas con 2 o más pasos");
respuesta2 = 0;
}
} while (respuesta2 == 0);

En el mismo método al salir del ciclo se realiza un método de ordenamiento para los pasos agregados y por último se pasan como parámetros a la clase de Recetas.

PasosdeRecetas[] elementos = new PasosdeRecetas [contador];
otroNodo = primerNodo;
int i = 0;
do {
try {
elementos[i] = otroNodo;
otroNodo = otroNodo.getPasos();
i++;
} catch (Exception e) {
break;
}
} while (otroNodo != null);
unaLista = new Recetas (nombre, elementos);
listas[indiceListas] = unaLista;
indiceListas++;

El segundo método se utiliza cuando se eliminan las recetas en la aplicación y sirve para el recorrido de indices en los arreglos.

/* Método que Actualiza los Indices al Eliminar una Receta*/
public void setListas (Recetas[] recetas) {
listas = recetas;
for (int i = 0; i < listas.length; i++) {
if (listas == null) {
this.indiceListas = i;
return;
}
}
}

El JDialog Form de ModificarRecetas cuenta con 5 opciones que son las siguientes:

  • Modificar paso.
  • Eliminar paso.
  • Nuevo paso antes.
  • Nuevo paso después.
  • Salir.
Con la excepción de Salir y Modificar Paso en las otras 3 se deben realizar las mismas validaciones pero con diferente operación este es un ejemplo con Eliminar Paso.

Nota: Encerre en Try- catch por los OptionPane.


try {
paso = Integer.parseInt (JOptionPane.showInputDialog("Inserte el Paso a eliminar"));

/***********Validaciones*********/
if (paso == 1) {
nodos[paso-1].setInformacion(null);
nodos[paso-1].setPasos(null);
nodos[paso-1] = null;
PasosdeRecetas []listaNueva = new PasosdeRecetas [nodos.length];
int cont1 = 0;
int cont2 = 0;
do {
if (nodos[cont1] != null) {
listaNueva[cont2] = nodos[cont1];
cont2++;
}
cont1++;
} while (cont1 < nodos.length);
laLista.setElementos(listaNueva);
JOptionPane.showMessageDialog(null,"Paso Eliminado");
this.dispose();
return;
}

if (paso == nodos.length) {
nodos[paso-2].setPasos(null);
nodos[paso-1].setInformacion(null);
nodos[paso-1].setPasos(null);
nodos[paso-1] = null;
PasosdeRecetas []listaNueva = new PasosdeRecetas [nodos.length];
int cont1 = 0;
int cont2 = 0;
do {
if (nodos[cont1] != null) {
listaNueva[cont2] = nodos[cont1];
cont2++;
}
cont1++;
} while (cont1 < nodos.length);
laLista.setElementos(listaNueva);
JOptionPane.showMessageDialog(null,"Paso Eliminado");
this.dispose();
return;
}

if (nodos[paso-1] != null) {
nodos[paso-1].setInformacion(null);
nodos[paso-2].setPasos(nodos[paso]);
nodos[paso-1].setPasos(null);
nodos[paso-1] = null;
PasosdeRecetas []listaNueva = new PasosdeRecetas [nodos.length];
int cont1 = 0;
int cont2 = 0;
do {
if (nodos[cont1] != null) {
listaNueva[cont2] = nodos[cont1];
cont2++;
}
cont1++;
} while (cont1 < nodos.length);
laLista.setElementos(listaNueva);
JOptionPane.showMessageDialog(null,"Paso Eliminado");
this.dispose();
}

else {
JOptionPane.showMessageDialog (null, "El Paso seleccionado no existe");
}

} catch (HeadlessException | NumberFormatException e) {
JOptionPane.showMessageDialog(null, "Error: Invalid Input!",
"Error", JOptionPane.ERROR_MESSAGE);
}


Validaciones:

  • Nombre de la receta - no null.
  • Mínimo 2 pasos en una receta.
  • Nombre de pasos de recetas - no null.
  • Recorrer indices cuando se elimina.
  • Modificaciones, consultas y eliminaciones no pueden ir null en los JOptionPane (todos).
Bugs:

  • Validar que se consulte cuando no tenga pasos.
  • Al borrar y volver insertar se actualice la lista.
  • Validar que al dar aceptar no acepta nada.
Vídeo

[Tienes que estar registrado y conectado para ver este vínculo]

Descarga el código
[Tienes que estar registrado y conectado para ver este vínculo]

Autor: Viruz study
Enlace: [Tienes que estar registrado y conectado para ver este vínculo]

_________________
[Tienes que estar registrado y conectado para ver esa imagen]
avatar
Admin (Viruz)
Admin

Mensajes : 148
Fecha de inscripción : 23/09/2012
Edad : 30
Localización : Desktop

http://viruz.foroactivo.mx

Volver arriba Ir abajo

Volver arriba


 
Permisos de este foro:
No puedes responder a temas en este foro.