Iteración 1 - AndresGutierrezCR/In4MatesSD_P1 GitHub Wiki

Iteración 1

En esta iteración se va a desarrollar el primer caso de uso: Ver configuracion de mesas

Documento Resumen de la Iteración 1

Documento Resumen Iteración 1

Requisitos

El jefe de sala tiene a su disposición una pantalla donde aparecen los tres turnos que hay por comida y por cena, con una configuración de mesas de 2, 4 y 6 comensales.

Análisis

Diagrama de análisis de la iteración 1 V1.0.0

Image from Gyazo

Se dispone de una interfaz especializada en controles de mesas (IU_P_ConfMesas), la cual accede a la funcionalidad de ControlMesas, y recoge datos de la base de datos de mesas (BBDD_Mesas).

Diagrama de secuencia de la iteración 1 V1.0.0

Image from Gyazo

El jefe de sala pide los datos sobre las mesas al sistema. El sistema devuelve al jefe de sala los datos de las mesas.

Diagrama de secuencia alternativo de la iteración 1 V1.0.0

Image from Gyazo

El jefe de sala pide los datos sobre las mesas al sistema, pero recibe un error de vuelta por parte del sistema al no haber podido comprobar los datos de las mesas.

Diagrama de comunicación de la iteración 1 V1.0.0

Image from Gyazo

El Jefe de Sala presiona sobre la pestaña Mesa en la interfaz de Configuración de Mesas, ésta pide datos de mesas a la función ControlMesas que recogerá lo necesario de la base de datos de mesas y los vuelca a la interfaz para poder ser visualizados por el Jefe de Sala.

Diagrama de comunicación alternativo de la iteración 1 V1.0.0

Image from Gyazo

El Jefe de Sala presiona sobre la pestaña Mesa en la interfaz de Configuración deMesas, ésta pide datos de mesas a la función ControlMesas que fallará al recoger los datos sobrelas mesas y vuelca un error sobre la a la interfaz.

Diseño

Diagrama de clases de la iteración 1 V1.0.0

Image from Gyazo

En la capa de Presentación solo estará la interfaz de visualizar la configuración de mesas(IU_VerConfMesas) que se relaciona con la clase Mesa sobre la capa de Dominio (la cual presenta una relación con una clase de enumeración para establecer los diferentes estados de cada una de las mesas). Por último, la clase Mesa se relaciona con el GestorMesa sobre la capa de Persistencia, la cual cuenta con un Agente.

Diagrama de secuencia de la iteración 1 V1.0.0

Image from Gyazo

El Jefe de Sala carga las mesas sobre la interfaz IU_VerConfMesas; a partir de ahí se crea un nuevo objeto Mesa de la cual mandamos leer todos los datos, para lo cual llama al GestorMesa que se encargará, con la ayuda del Agente, de añadir nuevas mesas (tantas como se necesiten cargar). Una vez se hayan añadido todas las mesas, se devuelven los datos de las mesas y se muestran todas ellas mediante la interfaz.

Tablas de la iteración 1 V1.0.0

Image from Gyazo

La tabla Mesa contará con Estado, Comensales y el IdMesa, siendo esta última la clave primaria.

Panel de la iteración 1 V1.0.0

Image from Gyazo

Cada una de las filas de la tabla corresponde a un objeto de tipo Mesa, con su correspondiente identificador de mesas (1, 2, 3, ...), el número de comensales (4, 6, 2, ...), y el estado en que se encuentra (LIBRE, OCUPADA, EN ESPERA, ...).

Implementación

Presentación

Image from Gyazo

Cada una de las filas de la tabla, ya implementada, corresponde a un objeto de tipo Mesa con su correspondiente identificador de mesas, el número de comensales, el estado en que se encuentra la mesa, y la fecha y hora del último cambio de estado realizado sobre cada mesa.

Dominio

Clase Mesa

Clase mesa para la generación de objetos de tipo mesa, para su creación primero declaramos los distintos atributos y creamos un constructor vacío y otro con todos los atributos, a su vez creamos los distintos getters y setters.

package org.ReservaMesas.Dominio;

import org.ReservaMesas.Persistencia.GestorMesa;

public class Mesa {

private int idMesa;
private int comensales;
private Estados estado;

private GestorMesa gestorMesa;

public Mesa() {
	this.gestorMesa= new GestorMesa();
}

public Mesa(int idMesa, int comensales, Estados estado) {
	this.idMesa=idMesa;
	this.comensales=comensales;
	this.estado=estado;
	this.gestorMesa= new GestorMesa();
}

public int getIdMesa() {
	return idMesa;
}

public void setIdMesa(int idMesa) {
	this.idMesa = idMesa;
}

public int getComensales() {
	return comensales;
}

public void setComensales(int comensales) {
	this.comensales = comensales;
}

public Estados getEstado() {
	return estado;
}

public void setEstado(Estados estado) {
	this.estado = estado;
}

public GestorMesa getGestorMesa() {
	return gestorMesa;
}


public void eliminar() {
	gestorMesa.delete(this);
}

public void modificar() {
	gestorMesa.update(this);
}

public void insertar() {
	gestorMesa.insert(this);
}

public void leer() {
	gestorMesa.read(this);
}

public void leerTodo() {
	gestorMesa.readAll();
}

}

Enumerado Estados

Creamos una clase de enumerados que tendrá los distintos estados en los que se puede encontrar una mesa.

package org.ReservaMesas.Dominio;

public enum Estados {

LIBRE, 
RESERVADA,
OCUPADA,
PIDIENDO,
ESPERA_COMIDA,
SERVIDOS,
ESPERA_CUENTA,
PAGANDO,
PREPARACION

}

Persistencia

Clase Agente

Se crea la clase agente que nos permitirá conectarnos a la BBDD y añadir, eliminar, leer y borrar los distintos datos necesarios para el funcionamiento de nuestra aplicación.

package org.ReservaMesas.Persistencia;

import java.awt.List; import java.sql.*; import java.util.LinkedList; import java.util.Vector;

public class Agente {

protected static Agente mInstancia = null;
protected static Connection mBD;
private static String url = "jdbc:oracle:thin:in4mates@//localhost:1521/xe";
private static String driver = "oracle.jdbc.driver.OracleDriver";


private Agente() throws Exception {
    conectar();

}


public static Agente getAgente() throws Exception {
    if (mInstancia == null) {
        mInstancia = new Agente();
    }
    return mInstancia;
}

private void conectar() throws Exception {
    Class.forName(driver);
    mBD = DriverManager.getConnection(url, "in4mates", "in4mates");;
}


public void desconectar() throws Exception {
    mBD.close();
}


public int modificar(String SQL) throws SQLException, Exception {
    PreparedStatement stmt = mBD.prepareStatement(SQL);
    int res = stmt.executeUpdate();
    stmt.close();
    desconectar();
    return res;
}


public ResultSet leer(String SQL) throws SQLException, Exception {
    

    PreparedStatement stmt = mBD.prepareStatement(SQL);
    ResultSet resultado = stmt.executeQuery(SQL);

    
    return resultado;
}

}

Clase Gestor Mesa

El gestor de mesas nos servirá de intermediario ente el agente de la base de datos y la capa de dominio, para ello crearemos una lista de mesas donde se recogerán las distintas mesas que estén registradas en la BBDD, este gestor nos permitirá, añadir, leer, eliminar y modificar mesas en nuestra BBDD.

package org.ReservaMesas.Persistencia;

import java.sql.ResultSet; import java.sql.SQLException; import java.util.ArrayList;

import org.ReservaMesas.Dominio.Estados; import org.ReservaMesas.Dominio.Mesa;

public class GestorMesa {

private ArrayList <Mesa> listaMesas;

public GestorMesa() {
	listaMesas=new ArrayList <Mesa>();
}

public ArrayList<Mesa> getListaMesas() {
	return listaMesas;
}

public void setListaMesas(ArrayList<Mesa> listaMesas) {
	this.listaMesas = listaMesas;
}

public void delete(Mesa mesa) {
	try {
		Agente.getAgente().modificar("DELETE FROM mesas WHERE idMesa = "+mesa.getIdMesa()+";");
	} catch (SQLException e) {
		// TODO Auto-generated catch block
		e.printStackTrace();
	} catch (Exception e) {
		// TODO Auto-generated catch block
		e.printStackTrace();
	}
}

public void update(Mesa mesa) {
	try {
		Agente.getAgente().modificar("UPDATE mesas SET comensales="+mesa.getComensales()+", "
				+ "estado='"+mesa.getEstado()+"' WHERE idMesa = "+mesa.getIdMesa()+";");
	} catch (SQLException e) {
		// TODO Auto-generated catch block
		e.printStackTrace();
	} catch (Exception e) {
		// TODO Auto-generated catch block
		e.printStackTrace();
	}
}

public void insert(Mesa mesa) {
	try {
		Agente.getAgente().modificar("INSERT INTO mesas VALUES("+mesa.getIdMesa()+","+mesa.getComensales()+
				",'"+mesa.getEstado()+"');");
	} catch (SQLException e) {
		// TODO Auto-generated catch block
		e.printStackTrace();
	} catch (Exception e) {
		// TODO Auto-generated catch block
		e.printStackTrace();
	}
}

public void read(Mesa mesa) {
	ResultSet resultado;
	try {
		resultado = Agente.getAgente().leer("SELECT * FROM mesas WHERE idmesa="+mesa.getIdMesa()+";");
		while(resultado.next()) {
			mesa.setComensales(resultado.getInt(2));
			Estados estado=Estados.valueOf(resultado.getString(3));
			mesa.setEstado(estado);
		}
	} catch (SQLException e) {
		// TODO Auto-generated catch block
		e.printStackTrace();
	} catch (Exception e) {
		// TODO Auto-generated catch block
		e.printStackTrace();
	}
	
}

public void readAll() {
	ResultSet resultado;
	
	try {
		resultado = Agente.getAgente().leer("SELECT * FROM mesas ORDER BY idMesa");
		Mesa mesa;
		
		while (resultado.next()){
			
			Estados estado=Estados.valueOf(resultado.getString(3));
			mesa=new Mesa(resultado.getInt(1),resultado.getInt(2),estado);
			listaMesas.add(mesa);
		}
	} catch (SQLException e) {
		// TODO Auto-generated catch block
		e.printStackTrace();
	} catch (Exception e) {
		// TODO Auto-generated catch block
		e.printStackTrace();
	}
	
}

}

⚠️ **GitHub.com Fallback** ⚠️