Mostrando entradas con la etiqueta TallerEntregaFinal. Mostrar todas las entradas
Mostrando entradas con la etiqueta TallerEntregaFinal. Mostrar todas las entradas

viernes, 15 de julio de 2011

Demostracion Final

Aqui dejo lo que son mis ligas de Documentacion y del codigo fuente:

Codigo Fuente
En caso de no funcionar el link de megauplod esta es otra opcion:Codigo Fuente

Y aqui el manual de usuario:Manual


Eventos, excepciones y errores

Las excepciones que maneje en mi programa fueron las siguientes
Aqui un ejemplo:
En este ejemplo la Excepcion que se maneja es que en caso de que no se pudiera hacer una conexion con la base de datos te arrojaria el mensaje de que no se pudo conectar.Esta excepcion fue la que use en todo lo que inclucraba hacer modificaciones a la base de datos para saber si se habia ingresado correctamente la informacion.


st= basedatos.createStatement();
}catch(Exception e){
System.out.println("No se pudo conectar a la base de datos");//En caso de no conectarse manda la siguiente excepcion//


Aqui podemos ver que si no logra hacer lo que se pide arrija la excepcion que mostre antes y si si lo logra arroga el mensaje de estado que fue declarado como conexion satisfactoria.


public void agregar(String NombreE,int Edad,String Puesto)//Metodo para agregar un empleado//
{
try{
st.executeUpdate("INSERT INTO Empleados(Nombre,Edad,Puesto) VALUES('"+NombreE+"','"+Edad+"','"+Puesto+"')");
}catch(SQLException ex){
estado = ex.getMessage();
}
}//Fin agregar//

En general solo maneje esto de excepcion solo para confirmar la conexion con la base de datos si era correcta o incorrecta asi que todos mis campos de modificacion de la base de datos incluyen esas sentencias.


En cuanto a los errores en este ejemplo tenemos que se busca un empleado a eliminar si existe entraria al if pero en caso de no existir arrojaria el mensaje de error de que no fue encontrado verificar la informacion. De igual forma la mayoria de los errores que maneje fueron de este tipo de retornar un mensaje con verificar la informacion.


imprime("\nIngrese el nombre del Empleado a eliminar: ");
String Elim = Lectura.nextLine();
ResultSet resu= con.buscar(Elim);
if(resu.next())
{
con.Eliminar(Elim);
}else
imprime("Empleado no encontrado verifique la informacion");


Eventos
Para los eventos solo podria incluir lo que seria en mi caso que no pude realizar la interfaz pues lo que vendria siendo el switch case.Como vemos el switch es de la variable opcion en caso de que sea digamos el Caso 1 el evento que se desencadenaria seria el siguiente ejemplo.

switch(opcion)
{
case 1: //caso 1 Agregar Empleado//
imprime("Ingrese la siguiente informacion");
imprime("\nNombre: ");

String NombreE = Lectura.nextLine();
imprime("Edad: ");

int Edad = Integer.parseInt(Lectura.nextLine());

imprime("Puesto: ");
String Puesto = Lectura.nextLine();
con.agregar(NombreE,Edad,Puesto);
break;

Sistemas distribuidos Taller

Para poder distribuir mi software primero que nada creo que habria que terminarlo e implementar la interfaz grafica para que sea de facil manejo. Otro punto es que necesitaria ser open-source y atraves de internet para que se pueda adaptar segun al hotel que se quiera usar ya que yo en mi ejemplo solo manejo 15 habitaciones y 3 tipos pero esta informacion puede variar. Habria tambien que disenar un manual de usuario donde se incluyeran las especifaciones para poder usarlo como lo que se requiere que seria java ya al momento de hacerlo como un ejecutable sin necesidad de la termina, esto ya con la idea de que este termindo completamente, otro aspecto para distribuirlo bien seria gratis tambien. Por ultimo la seguridad habria que disenar un login para que solo los administradores tengan acceso a el programa.

Pruebas Unitarias Taller

Aqui unas capturas del resultado de las pruebas sobre mis clases hecho con Junit





Tambien las pruebas que habia planeado hacer en la clase


Aqui comprobe que realmente funcionara y la pueba fue exitosa al momento de hacer check in se obtienen los datos y se cambia el estado por Ocupada.





Aqui comprobe que realmente funcionara y la pueba fue exitosa el estado vuelve a "Vacio" y los datos se reinician.



Aqui comprobe que realmente funcionara y la pueba fue exitosa los datos de empleado que se proporcionan son agregados a la tabla.

Patrones de diseño Taller

Bueno un patron de diseño que implemente en mi codigo fue:
Flyweight (Peso ligero): Reduce la redundancia cuando gran cantidad de objetos poseen idéntica información. Utlice esto para ahorra escribir todo el System.out.println a la hora de querer imprimir algo en la pantalla de esta forma solo colocando imprime llamo a lo que es el System.out.println. Aqui el codigo de donde lo utilice

La declaracion

public static void imprime(String imprime)//Metodo para ahorrar codigo a la hora de Imprimir//
{
System.out.println(imprime);
}//fin de Impresor//


Y a la hora de querer usarlo solo lo mandamos a llamar a como lo hayamos definido en este caso "imprime"


imprime("Habitacion Disponible");
imprime("\nCuarto: "+Tipo.getString("Numero"));
String Num=Tipo.getString("Numero");
imprime("Estado: "+Tipo.getString("Estado"));

Interfaz Grafica Taller

Desafortunadamente por el tiempo de entrega y problemas que surgieron con la base ya no me dio tiempo de implementar la interfaz grafica que tenia en mente, asi que solo dejo las capturas de la Terminal de los Menus que le hice para poder hacerla funcionar.

El menu principal


El menu de Empleados


El menu de habitaciones

Documentacion Tecnica Taller

Aqui esta la liga con la documentacion de mi proyecto realizada con javadoc:
Descarga Aqui(El zip incluye ambos archivos):
Documentacion

jueves, 14 de julio de 2011

Auto-generacion de codigo

Bueno primero que nada solo de las clases hechas con la herramienta CASE solo agrege las mismas que logre hacer debido al poco tiempo, las clases con las que trabaje son Empleados,Habitaciones y la base de datos. Que cambio a comparacion del codigo generado por la herramienta? Primero que nada tenia 2 clases una llamada Habitacion y la otra Habitaciones al ir codificando me di cuenta de que no habia necesidad de tener estas dos clases separadas ya que estaban muy relacionadas y dependian una de la otra y termino siendo una sola clase. En la base de datos en el diagrama no tenia bien definido todo lo que se hiba a hacer, en el codigo ya toda la estructura tomo forma para tener todos los metodos que nos sirven para almacenar toda la informacion que necesitamos. Otro cambio notable puede ser los nombres de los metodos y atibutos muchos si cambiaron por cuestiones de tener muchas cosas parecidas decidi ser mas especifico con los nombres entonces se vieron modificados algunos, algunos otros si fueron respetados del diagrama original. En cuanto a la reserva tenia pensado implementarla pero tambien por cuestiones de tiempo ya no me fue posible pero mas o menos pienso que tambien hubiera estado en la clase habitacion siendo solo otro estado de disponibilidad no es necesario tener otra clase. Otra cosa que veo que cambio son los tipos que maneje en el diagrama ya que al momento de hacerlo no estaba muy seguro de como hiba a funcionar y al momento de codificar ya te das cuenta de realmente que tipo necesitan sea String,int o alguno otro. Eso seria todo los cambios mas notable que noto entre los codigos.




Este es el codigo generado con Umbrello la herramiento CASE que yo utlice


public class Empleados {
private String Altas;
private String Bajas;
private String Informacion;

public Empleados () { };//Constructor
private void setAltas ( String newVar ) {
Altas = newVar;
}
private String getAltas ( ) {
return Altas;
}
private void setBajas ( String newVar ) {
Bajas = newVar;
}
private String getBajas ( ) {
return Bajas;
}
private void setInformacion ( String newVar ) {
Informacion = newVar;
}
private String getInformacion ( ) {
return Informacion;
}

public String ObtenerDatos( )
{
}//Fin obtenerdatos
public String Eliminar( )
{
}// Fin Eliminar
public String VerInformacion( )
{
}//Fin Verinformacion
}//Fin clase Empleados

public class Habitacion {

private int Disponibilidad;

public Habitacion () { };

private void setDisponibilidad ( int newVar ) {
Disponibilidad = newVar;
}//Fin setDisponiblidad

private int getDisponibilidad ( ) {
return Disponibilidad;
}//Fin getDisponibilidad

public void CheckIn( )
{
}//Fin CheckIn

public String CheckOut( )
{
}//Fin CheckOut

public void Reservar( )
{
}//Fin Reservar


}//Fin clase Habitacion

public Habitaciones () { };//Constructor

private void setDisponibilidad ( int newVar ) {
Disponibilidad = newVar;
}

private int getDisponibilidad ( ) {
return Disponibilidad;
}

public int MuestraDisponible( )
{
}//Fin MuestraDisponible

public int Muestra_Ocupado( )
{
}//Fin MuestraOcupado

public int MuestraReservada( )
{
}//Fin MuestraReservada

}//Fin Habitaciones


import java.util.*;


public class BaseDatos {

public BaseDatos () { };



}


Este es el codigo que realice yo
Para la base de datos:


import java.sql.*;
import com.mysql.jdbc.jdbc2.optional.MysqlDataSource;
import java.sql.ResultSet;


public class basedatos// Inicia Clase basedatos//
{
MysqlDataSource datasource;
private Connection basedatos;
private Statement st;
String estado= "Conexion Satisfactoria";

public basedatos()//Constructor con datos para conectar a la base de datos//
{
datasource = new MysqlDataSource();//Conexion a la base de datos de nombre Hotel//
datasource.setUser("root");
datasource.setPassword("68952043");
datasource.setDatabaseName("Hotel");
datasource.setServerName("localhost");
try{
basedatos = datasource.getConnection();
st= basedatos.createStatement();
}catch(Exception e){
System.out.println("No se pudo conectar a la base de datos");//En caso de no conectarse manda la siguiente excepcion//
}
}//fin de constructor(BaseDatos)

public void agregar(String NombreE,int Edad,String Puesto)//Metodo para agregar un empleado//
{
try{
st.executeUpdate("INSERT INTO Empleados(Nombre,Edad,Puesto) VALUES('"+NombreE+"','"+Edad+"','"+Puesto+"')");
}catch(SQLException ex){
estado = ex.getMessage();
}
}//Fin agregar//
public ResultSet buscar(String search)//Metodo para buscar un empleado//
{
ResultSet resultado = null;
try{
resultado = st.executeQuery("Select * from Empleados Where Nombre = '"+search+"'");
}catch(SQLException ex){
estado = ex.getMessage();
}
return resultado;
}//fin buscar//
public void Modificar(String NombreMod,String NombreM,int EdadM,String PuestoM)//Metodo para Modificar la informacion del empleado//
{
try {
st.executeUpdate("UPDATE Empleados SET Nombre='"+NombreM+"',Edad='"+EdadM+"', Puesto='"+PuestoM+"' WHERE Nombre='"+NombreMod+"'");
} catch (SQLException ex) {
estado=ex.getMessage();
}
}//Fin Modificar//
public void Eliminar(String Elim)//Metodo para eliminar empleados//
{
try{
st.executeUpdate("DELETE FROM Empleados WHERE Nombre='"+Elim+"'");
}catch(SQLException ex){
estado = ex.getMessage();
}
}//Fin Eliminar//

public void VerEmpleados(){//Metodo para ver todos los empleados//
try{
ResultSet rs = st.executeQuery("SELECT * FROM Empleados");
while(rs.next()){

System.out.println(rs.getString(1)+" "+rs.getString(2)+" "+rs.getString(3));
}
}catch(Exception e){
System.out.println("Error al realizar la consulta");
}
}//Fin VerEmpleados//

public void VerHabitaciones(){//Metodo para ver todas las habitaciones con su estado//
try{
ResultSet rs = st.executeQuery("SELECT * FROM Habitaciones");
while(rs.next()){

System.out.println(rs.getString("Numero")+" "+rs.getString("Estado")+" "+rs.getString("Costo"));
}
}catch(Exception e){
System.out.println("Error al realizar la consulta");
}

}//Fin VerHabitaciones//


public ResultSet Asignacion(int Prec){// Metodo para asignar una habitacion al cliente//
ResultSet pre=null;
try{
pre=st.executeQuery("Select * from Habitaciones Where Estado='Vacia' AND Costo="+Prec);

}catch(SQLException ex){
System.out.println(ex.getMessage());
}
return pre;

}//Fin Asignacion

public void Cam(String Num,String NomC,int Dias){//Metodo para cambiar el estado de la habitacion//

try{
st.executeUpdate("UPDATE Habitaciones SET Estado='Ocupada', Dias='"+Dias+"',Nombre='"+NomC+"' WHERE Numero='"+Num+"' ");

}catch(SQLException ex){
System.out.println(ex.getMessage());
}


}//Fin Cam//


public ResultSet Ocupada(int num){// Metodo para buscar una habitacion ocupada//
ResultSet nm=null;
try{
nm=st.executeQuery("Select * from Habitaciones Where Estado='Ocupada' AND Numero="+num);

}catch(SQLException ex){
System.out.println(ex.getMessage());
}
return nm;

}//Fin Asignacion
public void Salida(String nume,String nom){//Metodo para cambiar el estado de la habitacion//

try{
st.executeUpdate("UPDATE Habitaciones SET Estado='Vacia', Dias='0',Nombre='' WHERE Numero='"+nume+"' AND Nombre='"+nom+"' ");

}catch(SQLException ex){
System.out.println(ex.getMessage());
}


}//Fin Salida//





}//Fin Clase BaseDatos//



Para Habitacion y Empleados:


import java.io.*;
import java.sql.ResultSet;
import java.util.*;
public class Hotel{
public static void main(String[] args)throws Exception{//MAIN//
Scanner Lectura= new Scanner(System.in);//Declaracion de Lector//
basedatos con = new basedatos();
basedatos bdm = new basedatos();

int opci=0;
do{
System.out.println("\nMenu\n1.Archivo de Empleados\n2.Habitaciones\n3.Salir");
opci = Integer.parseInt(Lectura.nextLine());
switch(opci){
case 1:
int opcion=0;
do{
imprime("\nMenu Empleados");//Menu Empleados//
imprime("1.-Agregar Empleado");
imprime("2.-Buscar Empleado");
imprime("3.-Modificar Informacion de Empleado");
imprime("4.-Dar de baja Empleado");
imprime("5.-Ver Todos los Empleados");
imprime("6.-Volver al Menu principal");
opcion= Integer.parseInt(Lectura.nextLine());
switch(opcion)
{
case 1: //caso 1 Agregar Empleado//
imprime("Ingrese la siguiente informacion");
imprime("\nNombre: ");

String NombreE = Lectura.nextLine();
imprime("Edad: ");

int Edad = Integer.parseInt(Lectura.nextLine());

imprime("Puesto: ");
String Puesto = Lectura.nextLine();
con.agregar(NombreE,Edad,Puesto);
break;

case 2://caso 2 Buscar Empleado //
imprime("\nIngrese el nombre del Empleado a buscar: ");
String search = Lectura.nextLine();
ResultSet resultado=con.buscar(search);
if(resultado.next())
{
imprime("\nNombre: "+resultado.getString("Nombre"));
imprime("Edad: "+resultado.getString("Edad"));
imprime("Puesto: \n"+resultado.getString("Puesto"));
}else
imprime("Empleado no encontrado verifique la informacion");
imprime(con.estado);
break;

case 3://caso 3 Modificacion//
imprime("\nIngrese el Nombre del Empleado cuya informacion desea Modificar: ");
String NombreMod =Lectura.nextLine();
ResultSet res=con.buscar(NombreMod);
if(res.next())
{
imprime("\nIngrese la nueva informacion");
imprime("Nombre: ");
String NombreM=Lectura.nextLine();
imprime("Edad: ");
int EdadM= Integer.parseInt(Lectura.nextLine());
imprime("Puesto: \n");
String PuestoM=Lectura.nextLine();
con.Modificar(NombreMod,NombreM,EdadM,PuestoM);
}else
imprime("Empleado no encontrado verifique la informacion");
imprime(con.estado);
break;

case 4://caso 4 Eliminar//
imprime("\nIngrese el nombre del Empleado a eliminar: ");
String Elim = Lectura.nextLine();
ResultSet resu= con.buscar(Elim);
if(resu.next())
{
con.Eliminar(Elim);
}else
imprime("Empleado no encontrado verifique la informacion");
break;
case 5://caso 5 VerEmpleados//
imprime("\n");
bdm.VerEmpleados();
break;
}//Fin Switch

}while(opcion!=6);//Fin Do while//
break;


case 2:
int opcion2=0;
do
{
imprime("\nMenu Habitacion");//Menu Habitacion//
imprime("1.-Check In");
imprime("2.-Check Out");
imprime("3.-Ver Todas las Habitaciones");
imprime("4.-Volver al Menu principal");
opcion2= Integer.parseInt(Lectura.nextLine());
switch(opcion2)
{
case 1: //Check In//
imprime("Ingrese la siguiente informacion");
imprime("Ingrese el numero de la habitacion deseada\nTipo de Habitacion\n1.-Sencilla $100\n2.-Doble $300\n3.-Suite $600");
int Prec = Integer.parseInt(Lectura.nextLine());
if(Prec==1){
Prec=100;

}
if(Prec==2){
Prec=300;

}
if(Prec==3){

Prec=600;
}
ResultSet Tipo=con.Asignacion(Prec);
if(Tipo.next())
{

imprime("Habitacion Disponible");
imprime("\nCuarto: "+Tipo.getString("Numero"));
String Num=Tipo.getString("Numero");
imprime("Estado: "+Tipo.getString("Estado"));
imprime("Precio:"+Tipo.getString("Costo"));
imprime("\nNombre del cliente");
String NomC=Lectura.nextLine();
imprime("Ingrese los dias de estancia");
int Dias= Integer.parseInt(Lectura.nextLine());
int Total=Prec*Dias;
imprime("El total a pagar es de $"+Total);
con.Cam(Num,NomC,Dias);


}else imprime("No hay cuartos de ese tipo disponible");

break;

case 2://Check Out//
imprime("Ingrese el numero de la habitacion de la cual sale el cliente");
int num=Integer.parseInt(Lectura.nextLine());
ResultSet oc=con.Ocupada(num);
if(oc.next())
{
imprime("Informacion de Habitacion a dar de baja");
imprime("\nCuarto: "+oc.getString("Numero"));
String nume=oc.getString("Numero");
imprime("Estado: "+oc.getString("Estado"));
imprime("Nombre:"+oc.getString("Nombre"));
String nom=oc.getString("Nombre");

con.Salida(nume,nom);
}else imprime("Esa habitacion no esta ocupada");
break;

case 3://caso 3 VerHabitacion//
imprime("\n");
bdm.VerHabitaciones();
break;
}//Fin Switch

}while(opcion2!=4);//Fin Do while//
break;

}//Fin Switch//

}while(opci!=3);//Fin Do while//
}//Fin Main











public static void imprime(String imprime)//Metodo para ahorrar codigo a la hora de Imprimir//
{
System.out.println(imprime);
}//fin de Impresor//




}//Fin clase Hotel