Programando con Café

Programando con Café es el lugar de encuentro de todos sus tutoriales de programación que usted necesita en diferentes lenguajes de programación y base de datos

lunes, marzo 28, 2011

VB.Net - Subir imagen al servidor en sistema escritorio


"Si usa algún código del siguiente tutorial, den el icono de ME GUSTA del Facebook que se encuentra en su mano derecha, para que se vuelva Seguidor del Blog y también comentenos que tal les pareció el tutorial"

1. Introducción


Hoy tuve la necesidad de subir una imagen al servidor de la empresa, ya que me pidieron que adjunte el sistema imágenes de los desperfectos de las unidades. El ERP de la empresa es una aplicación del tipo Desktop.

2. Desarrollo


Solo para subir un archivo al servidor deben de poner la siguiente linea.

My.Computer.Network.UploadFile("DIRECCIONDELARCHIVO\NOMBREDELARCHIVO", "\\ubicacionDelServidor\NOMBREDELARCHIVO", "USARIO", "CLAVE", False, 500)

Deben de tener en cuenta que el usuario debe tener privilegios de "ESCRITURA" en la carpeta del servidor.

Ejemplo


martes, marzo 22, 2011

Java - Compilar y Ejecutar un aplicación en Java por Linea de Comandos


"Si usa algún código del siguiente tutorial, den el icono de ME GUSTA del Facebook que se encuentra en su mano derecha, para que se vuelva Seguidor del Blog y también comentenos que tal les pareció el tutorial"

1. Entorno


JDK 1.6.
Windows 7
Block de notas :P

2. Introducción


El objetivo de la práctica es usar el Kit de desarrollo de Java (JDK) y aprender a configurar las variables del sistema que utiliza el lenguaje de programación Java, ejecutar un aplicación usando la linea de comandos y solo con un bloc de notas.

3. Desarrollo


3.1. Configurando las variables de entorno

Antes de hacer cualquier aplicación en Java se debe de configurar las variables del sistema, en este caso vamos a configurar las tres mas importantes que utiliza el lenguaje Java como son CLASSPATH, PATH Y JAVA_HOME.

3.1.1. Clic derecho en el icono “Mi PC” y clic en propiedades













3.1.2. Nos mostrara la ventana de propiedades del sistema, luego nos debemos de dirigir a la pestaña “Opciones Avanzadas” y hacer clic en el botón de “Variables de entorno”













3.1.3. Luego hacemos clic en “Nueva” o “Modificar” en los rectángulo de “Variables del Sistema” según sea el caso, si es que las variables CLASSPATH, PATH Y JAVA_HOME ya existieran, se recomienda agregarles un punto y coma (;) al final de la dirección que ellos tienen, para luego agregarle la nueva dirección a la que se desea que apunte, para no alterar cualquier funcionamiento de la computadora.

PATH:
C:\Archivos de programa\Java\jdkVERSION\bin
CLASSPATH
C:\Archivos de programa\Java\jdkVERSION\src.zip
JAVA_HOME
C:\Archivos de programa\Java\jdkVERSION\















Nota: Si no existiera la variable CLASSPATH, se tiene que poner antes de la dirección un punto seguido de un punto y coma (.;). Por ejemplo:
.;C:\Archivos de programa\Java\jdkVERSION\src.zip


3.2. Creando nuestra aplicación

Crear una carpeta dentro del disco “C” que se llame “Practicas”. Luego abrir el block de notas y copiar el siguiente código:

//Archivo HolaMundo.java


public class HolaMundo{
public static void main(String args[]){
System.out.println("Hola mundo");
}
}

Guardar el archivo con el nombre “HolaMundo.java”, no cerrar el block de notas para verificar los errores

3.3. Ejecutando la Aplicación

3.3.1. Abrir una ventana de DOS y navegar hasta nuestra carpeta “Practicas” y verificar si nuestro archivo existe.











3.3.2. Compilar nuestro archivo “HolaMundo.java”, con la sentencia

javac HolaMundo.java











3.3.3. Si nuestro código esta correcto no debería salir ningún mensaje de advertencia y se generara un archivo “HolaMundo.class” junto con nuestro archivo “HolaMundo.java”. Para probar el código escribimos la siguiente sentencia

java HolaMundo











Nota: Cuando se va usar la sentencia “java“, después de esa sentencia se pone el nombre del archivo con extensión “.class” que se genero y se tiene que tener en cuenta las mayúsculas y minúsculas del nombre del archivo.

sábado, marzo 12, 2011

Carrito de Compras con PHP y MySQL - Resumen


"Si usa algún código del siguiente tutorial, den el icono de ME GUSTA del Facebook que se encuentra en su mano derecha, para que se vuelva Seguidor del Blog y también comentenos que tal les pareció el tutorial"


Espero que el tutorial que les prepare de como hacer un carrito de compras PHP y MySQL les haya servido mucho para su aprendizaje. Como vieron el tutorial se desarrollo pensando en una programación en capas pasando por:

La creación de la base de datos
La Capa de Datos
La Capa de Negocios
La Capa de Presentación


Y fue creado solamente para fines didácticos, es por eso que la base de datos solo tiene tres tablas, cuando debería tener mas. El código completo lo pueden bajar desde AQUI. Muchas gracias por sus visitas y no se olviden de volverse fan de mi blog por Facebook para que esten al dia con los tutoriales que subo :) .... Y me despido con una buena canción que estaba escuchando por mientras preparaba el tutorial.



PHP - Carrito de Compras Parte IV - Creación de la Capa de Presentación


"Si usa algún código del siguiente tutorial, den el icono de ME GUSTA del Facebook que se encuentra en su mano derecha, para que se vuelva Seguidor del Blog y también comentenos que tal les pareció el tutorial"

1. Entorno


  • NetBeans IDE 6.9.1
  • WampServer 2.1.

2. Introducción


En esta parte mostraremos los formularios con la cual es usuario interactuara con el sistema. Y veremos cómo crear un reporte en Excel con PHP

3. Desarrollo


3.1. Crear Carpeta

Vamos a crear una carpeta que se llamara "Include", en esta carpeta pondremos los archivos que serán comunes para todas las paginas en PHP. Como por ejemplo el menú de opciones del sistema. Y en esa carpeta crearemos un archivo que se llamara "Cabezera.php"















Y el archivo tendrá el siguiente código fuente:


<h1>Programando con Café - Carrito Compras con PHP<br>Ing. Henry Joe Wong Urquiza</h1>
    <div>
        <a href="index.php">Inicio</a> |
        <a href="registrarProducto.php">Registrar Producto</a> |
        <a href="registrarVenta.php">Registrar Venta</a> |
        <a href="verVenta.php">Consultar Ventas</a> |
        <a href="reporteVentas.php">Reporte Producto</a>
    </div>
<br>


3.2. Archivo index.php

En este archivo mostraremos todos los productos que tenemos en el sistema. Y tendrá el siguiente código


<?php
include_once 'CapaDatos/Producto.php';
$pro = new Producto();
$lista = $pro->buscarProductoTodos();
?>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
        <title>Programando con Café - Carrito de compras con PHP</title>
    </head>
    <body>
        <?php include_once 'Include/Cabezera.php'; ?>
        <div>
        <table border="1">
            <tr style="background-color: chocolate">
                <td colspan="4" >Listado Producto</td>
            </tr>
            <tr style="background-color: chocolate">
                <td>Código</td>
                <td>Nombre</td>
                <td>Precio</td>
                <td>Proceso</td>
            </tr>
        <?php
         if(count($lista)>0){
             for($i=0;$i<(count($lista));$i++) {
                $dirModifica="modificarProducto.php?codigoProducto=".$lista[$i]['codigoProducto'];
                $dirAnadir="anadirCarrito.php?codigoProducto=".$lista[$i]['codigoProducto'];
        ?>
            <tr>
                <td><?php echo ($lista[$i]['codigoProducto']);?></td>
                <td><?php echo ($lista[$i]['nombre']);?></td>
                <td><?php echo ($lista[$i]['precio']);?></td>
                <td><a href="<?php echo $dirModifica;?>">Modificar</a> |
                    <a href="<?php echo $dirAnadir;?>">Añadir</a>
                </td>
            </tr>
        <?php
             }
         }
        ?>
        </table>
        </div>
    </body>
</html>

3.3. Archivo registrarProducto.php

Este archivo PHP es el encargado de mostrar al usuario el formulario para registrar los productos a la base de datos. Su código html es el siguiente


<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
        <title>Programando con Café - Carrito de compras con PHP</title>
    </head>
    <body>
        <?php include_once 'Include/Cabezera.php'; ?>
        <form method="post" action="CapaNegocios/Prod_RegistrarProducto.php">
            <div>
                <table border="1">
                        <tr>
                            <td>Nombre</td>
                            <td><input type="text" name="txtNombre" value="" /></td>
                        </tr>
                        <tr>
                            <td>Precio</td>
                            <td><input type="text" name="txtPrecio" value="0" /></td>
                        </tr>
                        <tr>
                            <td></td>
                            <td><input type="submit" value="Registrar" name="btnRegistrar" /></td>
                        </tr>
                </table>
                </div>
        </form>

    </body>
</html>

3.4. Archivo modificarProducto.php

Este archivo recibe el código del producto por medio del archivo "index.php". Muestra la información del producto que deseamos modificar y nos permite editar su información


<?php
include_once 'CapaDatos/Producto.php';
$pro = new Producto();
$pro->setCodigoProducto($_REQUEST['codigoProducto']);
$lista = $pro->buscarProducto();
?>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
        <title>Programando con Café - Carrito de compras con PHP</title>
    </head>
    <body>
        <?php include_once 'Include/Cabezera.php'; ?>
        <form method="post" action="CapaNegocios/Prod_ModificarProducto.php">
            <div>
                <table border="1">
                        <tr>
                            <td>Codigo</td>
                            <td><input type="text" name="txtCodigo" value="<?php echo ($lista[0]['codigoProducto']);?>" readonly /></td>
                        </tr>
                        <tr>
                            <td>Nombre</td>
                            <td><input type="text" name="txtNombre" value="<?php echo($lista[0]['nombre']);?>" /></td>
                        </tr>
                        <tr>
                            <td>Precio</td>
                            <td><input type="text" name="txtPrecio" value="<?php echo($lista[0]['precio']);?>" /></td>
                        </tr>
                        <tr>
                            <td></td>
                            <td><input type="submit" value="Actualizar" name="btnActualizar" /></td>
                        </tr>
                </table>
                </div>
        </form>

    </body>
</html>

3.5. Archivo anadirCarrito.php

Este formulario recibe el código del producto que deseamos añadir al carrito de compras desde la pagina "index.php". Muestra toda la información del producto y nos pide la cantidad que deseamos añadir al carrito. Su codigo fuente es el siguiente



<?php
include_once 'CapaDatos/Producto.php';
$pro = new Producto();
$pro->setCodigoProducto($_REQUEST['codigoProducto']);
$lista = $pro->buscarProducto();

?>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
        <title>Programando con Café - Carrito de compras con PHP</title>
    </head>
    <body>
        <?php include_once 'Include/Cabezera.php'; ?>
        <form action="registrarVenta.php" method="post">
            <div>
                <table border="1">
                        <tr>
                            <td>Codigo</td>
                            <td><input type="text" name="txtCodigo" value="<?php echo ($lista[0]['codigoProducto']);?>" readonly /></td>
                        </tr>
                        <tr>
                            <td>Nombre</td>
                            <td><input type="text" name="txtNombre" value="<?php echo($lista[0]['nombre']);?>" readonly /></td>
                        </tr>
                        <tr>
                            <td>Precio</td>
                            <td><input type="text" name="txtPrecio" value="<?php echo($lista[0]['precio']);?>" readonly /></td>
                        </tr>
                        <tr>
                            <td>Cantidad Pedir</td>
                            <td><input type="text" name="txtCantidad" value="0" /></td>
                        </tr>
                        <tr>
                            <td></td>
                            <td><input type="submit" value="Añadir" name="btnAnadir" /></td>
                        </tr>
                </table>
                </div>
              
        </form>

    </body>
</html>

3.6. Archivo registrarVenta.php

Este archivo es el encargado de mostrar al usuario el formulario para concluir la venta. Lo que hace es traer todos los productos que están en sesión y mostrarlos en una tabla, para que asi veamos todos los productos que tenemos en el carrito de compras y poder decirle que lo registra a la base de datos


<?php
session_start();
session_register('itemsEnCesta');
//Estableciendo los datos al carrito
$codigo = $_REQUEST['txtCodigo'];
$nombre = $_REQUEST['txtNombre'];
$cantidad = $_REQUEST['txtCantidad'];
$pu = $_REQUEST['txtPrecio'];
$parcial = ($cantidad * $pu);
$descuento = 0;
if ($parcial > 50) {
    $descuento = ($parcial * 0.05);
}
$itemsEnCesta = $_SESSION['itemsEnCesta'];
if ($codigo) {
    if (!isset($itemsEnCesta)) {
        $itemsEnCesta[$codigo] = array("codigo" => $codigo,
            "nombre" => $nombre,
            "cantidad" => $cantidad,
            "pu" => $pu,
            "parcial" => $parcial,
            "descuento" => $descuento,
            "subtotal" => ($parcial - $descuento));
    } else {
        $itemsEnCesta[$codigo] = array("codigo" => $codigo,
            "nombre" => $nombre,
            "cantidad" => $cantidad,
            "pu" => $pu,
            "parcial" => $parcial,
            "descuento" => $descuento,
            "subtotal" => ($parcial - $descuento));
    }
}
$_SESSION['itemsEnCesta'] = $itemsEnCesta;
?>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
        <title>Programando con Café - Carrito de compras con PHP</title>
    </head>
    <body>
<?php include_once 'Include/Cabezera.php'; ?>
        <div>
            <form action="CapaNegocios/Vent_RegistrarVenta.php" method="post">
                <table border="1">
                    <tr style="background-color: chocolate">
                        <td colspan="6" >Carrito de Compras</td>
                    </tr>
                    <tr style="background-color: chocolate">
                        <td>Cliente</td>
                        <td colspan="5" ><input type="text" name="txtCliente" value="" /></td>
                    </tr>
                    <tr style="background-color: chocolate">
                        <td>Nombre</td>
                        <td>Cantidad</td>
                        <td>Precio</td>
                        <td>Parcial</td>
                        <td>Descuento</td>
                        <td>Sub.Total</td>
                    </tr>
<?php
if (isset($itemsEnCesta)) {
foreach ($itemsEnCesta as $k => $v) {
?>
                    <tr>
                        <td><?php echo ($v['nombre']); ?></td>
                        <td><?php echo number_format(($v['cantidad']), 2); ?></td>
                        <td><?php echo number_format(($v['pu']), 2); ?></td>
                        <td><?php echo number_format(($v['parcial']), 2); ?></td>
                        <td><?php echo number_format(($v['descuento']), 2); ?></td>
                        <td><?php echo number_format(($v['subtotal']), 2); ?></td>
                    </tr>
<?php
                }
}
?>
                    <tr style="background-color: chocolate">
                        <td colspan="6" ><input type="submit" value="Registrar Venta" name="btnRegistrarVenta" /></td>
                    </tr>
                </table>
            </form>
        </div>
    </body>
</html>


3.6. Archivo verVenta.php

Este archivo nos permite ver todas las ventas en formato HTML. Su código seria el siguiente


<?php
include_once 'CapaDatos/Venta.php';
$ven = new Venta();
$lista = $ven->buscarVenta();
?>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
        <title>Programando con Café - Carrito de compras con PHP</title>
    </head>
    <body>
        <?php include_once 'Include/Cabezera.php'; ?>
        <div>
        <table border="1">
            <tr style="background-color: chocolate">
                <td>Código</td>
                <td>Cliente</td>
                <td>Producto</td>
                <td>Precio</td>
                <td>Cantidad</td>
                <td>Parcial</td>
                <td>Descuento</td>
                <td>Sub. Total</td>
                <td>Total</td>
            </tr>
        <?php
         if(count($lista)>0){
             for($i=0;$i<(count($lista));$i++) {
        ?>
            <tr>
                <td><?php echo ($lista[$i]['CodigoVenta']);?></td>
                <td><?php echo ($lista[$i]['Cliente']);?></td>
                <td><?php echo ($lista[$i]['Nombre']);?></td>
                <td><?php echo number_format(($lista[$i]['Precio']),2);?></td>
                <td><?php echo number_format(($lista[$i]['Cantidad']),2);?></td>
                <td><?php echo number_format(($lista[$i]['Parcial']),2);?></td>
                <td><?php echo number_format(($lista[$i]['Descuento']),2);?></td>
                <td><?php echo number_format(($lista[$i]['SubTotal']),2);?></td>
                <td><?php echo number_format(($lista[$i]['TotalPagar']),2);?></td>
            </tr>
        <?php
             }
         }
        ?>
        </table>
        </div>
    </body>
</html>


3.7. Archivo reporteVentas.php

Este archivo PHP nos permite crear un reporte en Excel. Su código fuente es el siguiente


<?php
header('Content-type: application/vnd.ms-excel');
header('Content-Disposition: attachment; filename=reporteVentas.xls');
header('Pragma: no-cache');
header('Expires: 0');
include_once 'CapaDatos/Venta.php';
$ven = new Venta();
$lista = $ven->buscarVenta();
?>
<table border="1">
    <tr >
        <td style="background-color: chocolate">Cod</td>
        <td style="background-color: chocolate">Cliente</td>
        <td style="background-color: chocolate">Producto</td>
        <td style="background-color: chocolate">Precio</td>
        <td style="background-color: chocolate">Cantidad</td>
        <td style="background-color: chocolate">Parcial</td>
        <td style="background-color: chocolate">Descuento</td>
        <td style="background-color: chocolate">Sub. Total</td>
        <td style="background-color: chocolate">Total</td>
    </tr>
    <?php
    if (count($lista) > 0) {
        for ($i = 0; $i < (count($lista)); $i++) {
    ?>
            <tr>
                <td><?php echo ($lista[$i]['CodigoVenta']); ?></td>
                <td><?php echo ($lista[$i]['Cliente']); ?></td>
                <td><?php echo ($lista[$i]['Nombre']); ?></td>
                <td><?php echo number_format(($lista[$i]['Precio']), 2); ?></td>
                <td><?php echo number_format(($lista[$i]['Cantidad']), 2); ?></td>
                <td><?php echo number_format(($lista[$i]['Parcial']), 2); ?></td>
                <td><?php echo number_format(($lista[$i]['Descuento']), 2); ?></td>
                <td><?php echo number_format(($lista[$i]['SubTotal']), 2); ?></td>
                <td><?php echo number_format(($lista[$i]['TotalPagar']), 2); ?></td>
            </tr>
    <?php
        }
    }
    ?>
</table>

4. Ejemplo de la Aplicación


domingo, marzo 06, 2011

PHP - Carrito de Compras Parte III - Creación de la Capa de Negocios


"Si usa algún código del siguiente tutorial, den el icono de ME GUSTA del Facebook que se encuentra en su mano derecha, para que se vuelva Seguidor del Blog y también comentenos que tal les pareció el tutorial"


1. Entorno


NetBeans IDE 6.9.1
WampServer 2.1.

2. Introducción


Ya vimos que en la Parte II del tutorial creamos la Capa de Dato de nuestro sistema, la cual es la encargada de comunicarse con la base de datos. Ahora nos tocaría desarrollar la Capa de Negocios que es la capa en la cual se implementa la lógica del negocio de la empresa como obtener descuentos, aumentos, etc.

3. Desarrollo


3.1. Creando la carpeta

Debemos de crear la carpeta que recibirá el nombre de "CapaNegocios"












3.2. Creando el archivo Prod_RegistrarProducto

Este archivo en PHP va a ser el encargado de recibir los datos de la capa de presentación del proyecto y llamar a la capa de datos, específicamente a la clase "Producto", para poder registrar un producto a la base de datos. Su código fuente es el siguiente.

<?php
include_once '../CapaDatos/Producto.php';
//Crea un objeto producto
$pro=new Producto();
//Establece el nombre del producto y lo convierte a mayusculas
$pro->setNombre(strtoupper($_REQUEST['txtNombre']));
//Establece el precio
$pro->setPrecio($_REQUEST['txtPrecio']);
//Llama al metodo insertar producto de producto
$rpta=$pro->insertarProducto();
//Si la respuesta es verdadera es porque se registro el producto
if($rpta){
    //Redireccionamos a un archivo que se llama mensaje para mostrar el resultado
    //del registro
    header("Location: ../mensaje.php?mensaje=Se registro el producto de manera correcta");
}else{
    header("Location: ../mensaje.php?mensaje=No se pudo registrar el producto");
}
?>

3.3. Creando el archivo Prod_ModificarProducto

Este archivo en PHP va a ser el encargado de llamar al método "actualizarProducto" de la clase "Producto".

<?php
include_once '../CapaDatos/Producto.php';
//Crea un objeto producto
$pro=new Producto();
//Establece el codigo del producto
$pro->setCodigoProducto($_REQUEST['txtCodigo']);
//Establece el nombre del producto
$pro->setNombre(strtoupper($_REQUEST['txtNombre']));
//Establece el precio del producto
$pro->setPrecio($_REQUEST['txtPrecio']);
//Llama al metodo actualizarProducto
$rpta=$pro->actualizarProducto();
//Si rpta es verdadero es porque se actualizo el Producto
if($rpta){
    header("Location: ../mensaje.php?mensaje=Se modifico el producto de manera correcta");
}else{
    header("Location: ../mensaje.php?mensaje=No se pudo modificar el producto");
}
?>

3.4. Creando el archivo Vent_RegistrarVenta

Quizás este archivo es el mas importante, ya que es el encargado de registrar la venta a la base de datos. Lo que hace es obtener todos los items que están almacenados en nuestro carrito de compras, específicamente en la sesión de la aplicación y llama a la clase "Venta" para poder registrar la venta a la base de datos. Su código fuente debería ser el siguiente.

<?php
//Obtenemos la sesion
session_start();
session_register('itemsEnCesta');
include_once '../CapaDatos/Venta.php';
//Creamos una clase venta
$ven=new Venta();
//Establecemos  el nombre del cliente
$ven->setCliente(strtoupper($_REQUEST['txtCliente']));
//Obtenemos el objeto que esta en la sesion
$itemsEnCesta=$_SESSION['itemsEnCesta'];
//Establece el detalle con la informacion de la sesion
$ven->setDetalleVenta($itemsEnCesta);
//Llamamos al metodo insertar ventar
$rpta=$ven->insertarVenta();
//Si rpta es verdadero es proque se inserto
if($rpta){
    //Eliminamos la sesion
    session_destroy();
    //Redireccionamos a un archivo para que nos muestre el mensaje
    header("Location: ../mensaje.php?mensaje=Se registro la venta de manera correcta");
}else{
    header("Location: ../mensaje.php?mensaje=No se pudo registrar la venta");
}
?>

4. Resumen


Al final deberíamos tener la siguiente estructura

PHP - Carrito de Compras Parte II - Creación de la Capa de Datos


"Si usa algún código del siguiente tutorial, den el icono de ME GUSTA del Facebook que se encuentra en su mano derecha, para que se vuelva Seguidor del Blog y también comentenos que tal les pareció el tutorial"


1. Entorno


  • NetBeans IDE 6.9.1
  • WampServer 2.1.

2. Introducción


2.1. Programación por capas

La programación por capas es un estilo de programación en el que el objetivo primordial es la separación de la lógica de negocios de la lógica de diseño. La ventaja principal de este estilo es que el desarrollo se puede llevar a cabo en varios niveles y, en caso de que sobrevenga algún cambio, sólo se ataca al nivel requerido sin tener que revisar entre código mezclado. Un buen ejemplo de este método de programación sería el modelo de interconexión de sistemas abiertos

2.2. Programación en tres capas

  • Capa de presentación: es la que ve el usuario (también se la denomina "capa de usuario"), presenta el sistema al usuario, le comunica la información y captura la información del usuario en un mínimo de proceso (realiza un filtrado previo para comprobar que no hay errores de formato). Esta capa se comunica únicamente con la capa de negocio. También es conocida como interfaz gráfica y debe tener la característica de ser "amigable" (entendible y fácil de usar) para el usuario.
  • Capa de negocio: es donde residen los programas que se ejecutan, se reciben las peticiones del usuario y se envían las respuestas tras el proceso. Se denomina capa de negocio (e incluso de lógica del negocio) porque es aquí donde se establecen todas las reglas que deben cumplirse. Esta capa se comunica con la capa de presentación, para recibir las solicitudes y presentar los resultados, y con la capa de datos, para solicitar al gestor de base de datos para almacenar o recuperar datos de él. También se consideran aquí los programas de aplicación.
  • Capa de datos: es donde residen los datos y es la encargada de acceder a los mismos. Está formada por uno o más gestores de bases de datos que realizan todo el almacenamiento de datos, reciben solicitudes de almacenamiento o recuperación de información desde la capa de negocio.

3. Desarrollo


3.1. Creando el Proyecto

Primero debemos de crear un proyecto en Netbeans 6.9.1., para eso abrimos el Netbeans y nos vamos al menú de "File-->New Proyect" y escogemos una aplicación PHP.














A nuestro proyecto lo llamaremos "CarritoCompras"














Y hacemos que se cree una copia de nuestro proyecto en la carpeta "WWW" del WampServer y presionamos el botón "Finish".













Y finalmente creamos una carpeta que se llamara "CapaDatos"

















3.2. La clase Conexion

Para agregar una clase en PHP debemos hacer clic derecho en la carpeta "CapaDatos" que hemos creado y nos vamos a la opción "New->PHP Class" y a nuestra clase lo llamamos "Conexion.php"

















Su código fuente seria el siguiente:

<?php
class Conexion {
    var $BaseDatos;
    var $Servidor;
    var $Usuario;
    var $Clave;
    var $Conexion_ID;
    var $Consulta_ID;
    var $Errno = 0;
    var $Error = "";
    //Constructor de la clase Conexion
    function  Conexion() {
        $this->BaseDatos = "bdtutorial";
        $this->Servidor = "localhost";
        $this->Usuario = "root";
        $this->Clave = "";
    }
    //Metodo para conectarnos a la base de datos
    function conectar() {
        $this->Conexion_ID = mysql_connect($this->Servidor, $this->Usuario, $this->Clave);
        if (!$this->Conexion_ID) {
            $this->Error = "Ha fallado la conexion.";
            return 0;
        }

        if (!@mysql_select_db($this->BaseDatos, $this->Conexion_ID)) {
            $this->Error = "Imposible abrir " . $this->BaseDatos;
            return 0;
        }
        return $this->Conexion_ID;
    }
}

?>

3.3. La clase Producto

Esta clase se encarga de conectar la clase Producto con MySQL

<?php
include_once("Conexion.php");
//Declaracion
class Producto {
    //Variable de la clase
    private $codigoProducto;
    private $nombre;
    private $precio;
    //Metodo utilizado para obtener el codigo siguiente del producto
    function codigoSiguiente($cn) {
        $cod = 0;
        $sql = "SELECT IFNULL(MAX(codigoProducto),0)+1 as codigo FROM Producto";
        try {
            $result = mysql_query($sql, $cn);
            $registros = array();
            while ($reg = mysql_fetch_array($result)) {
                $cod = $reg['codigo'];
                break;
            }
        } catch (exception $e) {

        }
        return $cod;
    }
    //Metodo utilizado para insertar un producto a la base de datos
    function insertarProducto() {
        $rpta;
        try {
            //Creamos un objeto de la clase conexion
            $miconexion = new Conexion();
            //Obtenemos la conexion
            $cn = $miconexion->conectar();
            //Comenzamos la transaccion
            mysql_query("BEGIN", $cn);
            //Obtenemos el codigo del siguiente producto
            $this->codigoProducto =$this->codigoSiguiente($cn);
            //Elaboramos la sentencia
            $sql = "INSERT INTO Producto VALUES($this->codigoProducto,'$this->nombre',$this->precio)";
            //Ejecutamos la sentencia
            $result = mysql_query($sql, $cn);
            if (!$result) {
                //Si no obtiene resultados anulamos la transaccion
                mysql_query("ROLLBACK", $cn);
                $rpta = false;
            } else {
                //Si obtiene resultados confirmamos la transaccion
                mysql_query("COMMIT", $cn);
                $rpta = true;
            }
            //Cerramos la conexion
            mysql_close($cn);
        } catch (exception $e) {
            try {
                mysql_query("ROLLBACK", $cn);
            } catch (exception $e1) {

            }
            try {
                mysql_close($cn);
            } catch (exception $e1) {

            }
            $rpta = false;
        }
        return $rpta;
    }
    //Metodo utilizado para actualizar un producto
    function actualizarProducto() {
        $rpta;
        try {
            //Creamos un objeto de la clase conexion
            $miconexion = new Conexion();
            //Obtenemos la conexion
            $cn = $miconexion->conectar();
            //Comenzamos la transaccion
            mysql_query("BEGIN", $cn);
            //Elaboramos la sentencia
            $sql = "UPDATE Producto SET nombre='$this->nombre', precio=$this->precio WHERE codigoProducto=$this->codigoProducto";
            //Ejecutamos la sentencia
            $result = mysql_query($sql, $cn);
            $rpta;
            if (!$result) {
                //Si no obtiene resultados anulamos la transaccion
                mysql_query("ROLLBACK", $cn);
                $rpta = false;
            } else {
                //Si obtiene resultados confirmamos la transaccion
                mysql_query("COMMIT", $cn);
                $rpta = true;
            }
            //Cerramos la conexion
            mysql_close($cn);
        } catch (exception $e) {
            try {
                mysql_query("ROLLBACK", $cn);
            } catch (exception $e1) {

            }
            try {
                mysql_close($cn);
            } catch (exception $e1) {

            }
            $rpta = false;
        }
        return $rpta;
    }
    //Metodo utilizado para obtener un producto
    function buscarProducto() {
        //Le deciamos que la locacion es lenguaje español
        setlocale(LC_CTYPE, 'es');
        //La sentencia a ejecutar
        $sql = "SELECT * FROM Producto WHERE codigoProducto=$this->codigoProducto";
        try {
            //Creamos un objeto de la clase conexion
            $miconexion = new Conexion();
            //Obtenemos la conexion
            $cn = $miconexion->conectar();
            //Ejecutamos la sentencia
            $rs = mysql_query($sql, $cn);
            //Creamos un array que almacenara los datos de la sentencia
            $registros = array();
            //Recorremos el resultado de la consulta y lo almacenamos en el array
            while ($reg = mysql_fetch_array($rs)) {
                array_push($registros, $reg);
            }
            //Liberamos recursos
            mysql_free_result($rs);
            mysql_close($cn);
        } catch (exception $e) {
            try {
                mysql_free_result($rs);
            } catch (exception $e) {

            }
            try {
                mysql_close($cn);
            } catch (exception $e) {

            }
        }
        return $registros;
    }
    //Metodo utilizado para obtener todos los productos
    function buscarProductoTodos() {
        //Le deciamos que la locacion es lenguaje español
        setlocale(LC_CTYPE, 'es');
        //La sentencia a ejecutar
        $sql = "SELECT * FROM Producto ORDER BY nombre";
        try {
            //Creamos un objeto de la clase conexion
            $miconexion = new Conexion();
            //Obtenemos la conexion
            $cn = $miconexion->conectar();
            //Ejecutamos la sentencia
            $rs = mysql_query($sql, $cn);
            //Creamos un array que almacenara los datos de la sentencia
            $registros = array();
            //Recorremos el resultado de la consulta y lo almacenamos en el array
            while ($reg = mysql_fetch_array($rs)) {
                array_push($registros, $reg);
            }
            //Liberamos recursos
            mysql_free_result($rs);
            mysql_close($cn);
        } catch (exception $e) {
            try {
                mysql_free_result($rs);
            } catch (exception $e) {

            }
            try {
                mysql_close($cn);
            } catch (exception $e) {

            }
        }
        return $registros;
    }
    //Get y Set de la clase
    function getCodigoProducto() {
        return $this->codigoProducto;
    }

    function getNombre() {
        return $this->nombre;
    }

    function getPrecio() {
        return $this->precio;
    }

    function setCodigoProducto($codigoProducto) {
        $this->codigoProducto = $codigoProducto;
    }

    function setNombre($nombre) {
        $this->nombre = $nombre;
    }

    function setPrecio($precio) {
        $this->precio = $precio;
    }
}
?>

3.4. Clase DetalleVenta

El código fuente de la clase seria el siguiente

<?php
include_once("Conexion.php");

class DetalleVenta {
    private $codigoVenta;
    private $codigoProducto;
    private $cantidad;
    private $descuento;
    //Metodo utilizado para insertar un detalle de venta a la base de datos
    //como variable pide la conexion que va a usar
    function insertarDetalleVenta($cn) {
        $rpta;
        try {
            //Elaboramos la sentencia
            $sql = "INSERT INTO DetalleVenta VALUES($this->codigoVenta, $this->codigoProducto,$this->cantidad,$this->descuento)";
            //Ejecutamos la sentencia
            $result = mysql_query($sql, $cn);
            if (!$result) {
                $rpta = false;
            } else {
                $rpta = true;
            }

        } catch (exception $e) {
            $rpta = false;
        }
        return $rpta;
    }

    function getCodigoVenta() {
        return $this->codigoVenta;
    }

    function getCodigoProducto() {
        return $this->codigoProducto;
    }

    function getCantidad() {
        return $this->cantidad;
    }
    function getDescuento() {
        return $this->descuento;
    }

    function setCodigoVenta($codigoVenta) {
        $this->codigoVenta= $codigoVenta;
    }

    function setCodigoProducto($codigoProducto) {
        $this->codigoProducto = $codigoProducto;
    }

    function setCantidad($cantidad) {
        $this->cantidad = $cantidad;
    }

    function setDescuento($descuento) {
        $this->descuento = $descuento;
    }
}
?>

3.5. Clase Venta

El código fuente de la clase Venta seria el siguiente

<?php
include_once("Conexion.php");
include_once("DetalleVenta.php");

class Venta {
    private $codigoVenta;
    private $cliente;
    private $fecha;
    private $detalleVenta;
    //Metodo utilizado para obtener el codigo siguiente del producto
    function codigoSiguiente($cn) {
        $cod = 0;
        $sql = "SELECT IFNULL(MAX(codigoVenta),0)+1 as codigo FROM Venta";
        try {
            $result = mysql_query($sql, $cn);
            $registros = array();
            while ($reg = mysql_fetch_array($result)) {
                $cod = $reg['codigo'];
                break;
            }
        } catch (exception $e) {

        }
        return $cod;
    }
    //Metodo utilizado para insertar una venta a la base de datos
    function insertarVenta() {
        $rpta;
        try {
            //Creamos un objeto de la clase conexion
            $miconexion = new Conexion();
            //Obtenemos la conexion
            $cn = $miconexion->conectar();
            //Comenzamos la transaccion
            mysql_query("BEGIN", $cn);
            //Obtenemos el codigo del siguiente producto
            $this->codigoVenta=$this->codigoSiguiente($cn);
            //Elaboramos la sentencia
            $sql = "INSERT INTO Venta VALUES($this->codigoVenta,'$this->cliente',CURDATE())";
            //Ejecutamos la sentencia
            $result = mysql_query($sql, $cn);
            if (!$result) {
                //Si no obtiene resultados anulamos la transaccion
                mysql_query("ROLLBACK", $cn);
                $rpta = false;
            } else {
                //Recorremos el detalle y lo insertamos
                foreach($this->detalleVenta as $k => $v){
                    $detalle=new DetalleVenta();
                    $detalle->setCodigoVenta($this->codigoVenta);
                    $detalle->setCodigoProducto($v['codigo']);
                    $detalle->setCantidad($v['cantidad']);
                    $detalle->setDescuento($v['descuento']);
                    $rpta=$detalle->insertarDetalleVenta($cn);
                    if(!$rpta){
                        break;
                    }
                }
                if($rpta){
                    //Confirmamos la transaccion si se registra todos los detalles
                    mysql_query("COMMIT", $cn);
                }else{
                    //Negamos al transaccion si no se registra algun detalle
                    mysql_query("ROLLBACK", $cn);
                }
            }
            //Cerramos la conexion
            mysql_close($cn);
        } catch (exception $e) {
            try {
                mysql_query("ROLLBACK", $cn);
            } catch (exception $e1) {

            }
            try {
                mysql_close($cn);
            } catch (exception $e1) {

            }
            $rpta = false;
        }
        return $rpta;
    }

     //Metodo utilizado para obtener un producto
    function buscarVenta() {
        //Le deciamos que la locacion es lenguaje español
        setlocale(LC_CTYPE, 'es');
        //La sentencia a ejecutar
        $sql="SELECT ";
        $sql.="v.codigoVenta AS CodigoVenta, ";
        $sql.="v.cliente AS Cliente, ";
        $sql.="v.fecha AS Fecha, ";
        $sql.="d.codigoProducto AS CodigoProducto, ";
        $sql.="p.nombre AS Nombre, ";
        $sql.="p.precio AS Precio, ";
        $sql.="d.cantidad AS Cantidad, ";
        $sql.="d.descuento AS Descuento, ";
        $sql.="p.precio*d.cantidad AS Parcial, ";
        $sql.="((p.precio*d.cantidad)-d.descuento) AS SubTotal, ";
        $sql.="( ";
        $sql.="SELECT ";
        $sql.="SUM((dT.cantidad * pT.precio)-dT.descuento) AS TotalPagar ";
        $sql.="FROM ";
        $sql.="DetalleVenta AS dT INNER JOIN ";
        $sql.="Producto AS pT ON dT.codigoProducto = pT.codigoProducto ";
        $sql.="WHERE ";
        $sql.="dT.codigoVenta=v.codigoVenta ";
        $sql.=") AS TotalPagar ";
        $sql.="FROM ";
        $sql.="Venta AS v INNER JOIN ";
        $sql.="DetalleVenta AS d ON v.codigoVenta = d.codigoVenta INNER JOIN ";
        $sql.="Producto AS p ON d.codigoProducto = p.codigoProducto ";
        $sql.="ORDER BY ";
        $sql.="CodigoVenta, Nombre";
        try {
            //Creamos un objeto de la clase conexion
            $miconexion = new Conexion();
            //Obtenemos la conexion
            $cn = $miconexion->conectar();
            //Ejecutamos la sentencia
            $rs = mysql_query($sql, $cn);
            //Creamos un array que almacenara los datos de la sentencia
            $registros = array();
            //Recorremos el resultado de la consulta y lo almacenamos en el array
            while ($reg = mysql_fetch_array($rs)) {
                array_push($registros, $reg);
            }
            //Liberamos recursos
            mysql_free_result($rs);
            mysql_close($cn);
        } catch (exception $e) {
            try {
                mysql_free_result($rs);
            } catch (exception $e) {

            }
            try {
                mysql_close($cn);
            } catch (exception $e) {

            }
        }
        return $registros;
    }

    function getCodigoVenta() {
        return $this->codigoVenta;
    }

    function getCliente() {
        return $this->cliente;
    }
 
    function getFecha() {
        return $this->fecha;
    }

    function getDetalleVenta() {
        return $this->detalleVenta;
    }

    function setCodigoVenta($codigoVenta) {
        $this->codigoProducto = $codigoVenta;
    }

    function setCliente($cliente) {
        $this->cliente = $cliente;
    }

    function setFecha($fecha) {
        $this->fecha = $fecha;
    }

    function setDetalleVenta($detalleVenta) {
        $this->detalleVenta = $detalleVenta;
    }
}

?>

4. Resumen


Al final deberíamos tener la siguiente estructura

PHP - Carrito de Compras Parte I - Creación de la Base de Datos


"Si usa algún código del siguiente tutorial, den el icono de ME GUSTA del Facebook que se encuentra en su mano derecha, para que se vuelva Seguidor del Blog y también comentenos que tal les pareció el tutorial"

1. Entorno


  • NetBeans IDE 6.9.1
  • WampServer 2.1.

2. Introducción


En el siguiente tutorial vamos a desarrollar un carrito de compras o lo que seria un sistema de ventas usando el lenguaje de programación PHP, como base de datos vamos a usar el MySQL 5.1. y tambien crearemos un reporte en formato excel de las ventas. La base de datos que vamos a crear es una base de datos con fines didácticos, dado que nos faltaría crear mas tablas, como la tabla cliente, categoría, unidad de medida, etc pero si nos explayamos mucho nos quedaría muy largo el tutorial. Ademas en el ejemplo no se explica como disminuir un stock, debido a que eso siempre se les pide a los alumnos universitario que investiguen como hacerlo, pero si quieren una ayudita lo pueden hacer creando Triggers en la base de datos. La aplicación se desarrollara en un formato web usando el modelo de Programación en Capas.
Para poder ejecutar el MySQL debemos de tener instalador el WampServer 2.1. en nuestra computadora.

3. Desarrollo


La base de datos tendría las siguientes tablas. Venta, Producto y DetalleVenta













A continuación les paso el script de creación de la base de datos

-- CREADO POR: HENRY JOE WONG URQUIZA
-- FECHA: 24FEB2011
-- ------------------------------------------------------
-- TUTORIAL DE COMO HACER UN CARRITO DE COMPRAS USANDO
-- EL MODELO VISTA CONTROLADOR
--
-- Creando la base de datos
--

CREATE DATABASE IF NOT EXISTS bdtutorial;
USE bdtutorial;

--
-- Creando la tabla `detalleventa`
--

DROP TABLE IF EXISTS `detalleventa`;
CREATE TABLE `detalleventa` (
  `codigoVenta` int(11) NOT NULL,
  `codigoProducto` int(11) NOT NULL,
  `cantidad` decimal(18,2) NOT NULL,
  `descuento` decimal(18,2) NOT NULL,
  PRIMARY KEY  (`codigoVenta`,`codigoProducto`),
  KEY `FK_DetalleVenta_Producto` (`codigoProducto`),
  CONSTRAINT `FK_DetalleVenta_Producto` FOREIGN KEY (`codigoProducto`) REFERENCES `producto` (`codigoProducto`),
  CONSTRAINT `FK_DetalleVenta_Venta` FOREIGN KEY (`codigoVenta`) REFERENCES `venta` (`codigoVenta`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1;

--
-- Creando la tabla `producto`
--

DROP TABLE IF EXISTS `producto`;
CREATE TABLE `producto` (
  `codigoProducto` int(11) NOT NULL,
  `nombre` varchar(100) NOT NULL,
  `precio` decimal(18,2) NOT NULL,
  PRIMARY KEY  (`codigoProducto`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1;

--
-- Creando la tabla venta
--

DROP TABLE IF EXISTS `venta`;
CREATE TABLE `venta` (
  `codigoVenta` int(11) NOT NULL,
  `cliente` varchar(100) NOT NULL,
  `fecha` datetime NOT NULL,
  PRIMARY KEY  (`codigoVenta`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1;

sábado, marzo 05, 2011

Carrito de Compras con JSP y MYSQL - Resumen


"Si usa algún código del siguiente tutorial, den el icono de ME GUSTA del Facebook que se encuentra en su mano derecha, para que se vuelva Seguidor del Blog y también comentenos que tal les pareció el tutorial"


Espero que el tutorial que les prepare de como hacer un carrito de compras com JSP, MySQL e iReport 4.0.0. les haya servido mucho para su aprendizaje. Como vieron el tutorial se desarrollo pensando en una programación usando el patrón Modelo-Vista-Controlador:


Y fue creado solamente para fines didácticos, la solución completa lo pueden bajar de AQUI , es por eso que la base de datos solo tiene tres tablas, cuando debería tener mas. Muchas gracias por sus visitas y no se olviden de volverse fan de mi blog por Facebook para que esten al dia con los tutoriales que subo :) .... Y me despido con una buena canción que estaba escuchando por mientras preparaba el tutorial.

Java - Aplicación Web, Carrito de Compras Parte V - Creación del Reporte


"Si usa algún código del siguiente tutorial, den el icono de ME GUSTA del Facebook que se encuentra en su mano derecha, para que se vuelva Seguidor del Blog y también comentenos que tal les pareció el tutorial"

1. Entorno


  • MySQL 5.1.
  • NetBeans IDE 6.9.1
  • Apache Tomcat
  • JDK 1.6.0 - 21
  • iReport-4.0.0

2. Introducción


Para realizar reportes en Java hay un programa que se llama iReport. Este programa se puede integrar muy facil a Netbeans o tenerlo instalado de forma separada. Yo recomiendo que lo instalen de forma separada, debido a que le da mas funcionalidades propias del programa. El iReport lo pueden bajar de aqui y pueden buscar en internet un poco de información mas detallada sobre esta herramienta.

3. Desarrollo


3.1. Diseñando el reporte

Lo primero que debe de hacer es diseñar el reporte en iReport, para eso les prepare el siguiente vídeo



Para llenar el reporte, hemos usado el código del procedimiento almacenado que se llama spF_Venta_All. Que creamos en la primera parte del tutorial.

3.2. Agregando el reporte al Netbans

Luego que diseñamos el reporte debemos de crear un carpeta dentro de nuestro proyecto en Netbeans que se llame "reportes". Para eso haces clic derecho en donde dice "Web Page" y nos vamos a la opción que dice New y seleccionamos Folder











De ahi debemos de copiar y pegar el reporte que hemos diseñado a esta carpeta













Y al final nuestra carpeta debería contener los siguientes archivos: reporteDeVentas.jasper y reporteDeVentas.jrxl













3.3. Agregando librerías

Tienen que agregar a su proyecto de Netbeans los siguientes jar


  • commons-beanutils-1.8.2
  • commons-collections-3.2.1
  • commons-digester-1.7
  • commons-logging-1.1
  • groovy-all-1.7.5
  • iText-2.1.7
  • iTextAsian
  • jasperreports-4.0.0
  • jasperreports-fonts-4.0.0
  • jasperreports-javaflow-4.0.0
  • jcommon-1.0.15
  • jfreechart-1.0.12
  • png-encoder-1.5


Estas librerías se encuentras en las carpetas dist o lib en donde se instalo el iReport iReport-4.0.0. para eso hacen clic derecho en su proyecto y se van a propiedades













De ahi se van a la opción "Libraries", presionan el botón "Add Jar" y agregan todos los jar anteriormente mencionados
















3.4. Creando el Servlet: Reporte

En nuestro paquete controlador debemos de crear un nuevo servlet que se llamara "Reporte". Este servlet sera el encargado de mostrar el reporte creado en formato PDF.



















Y este servlet tendra el siguiente codigo fuente:


package Controlador;

import Modelo.Conexion;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.OutputStream;
import java.sql.SQLException;
import java.util.HashMap;
import java.util.Map;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import net.sf.jasperreports.engine.JasperManager;
import net.sf.jasperreports.engine.JasperPrint;
import net.sf.jasperreports.engine.JasperReport;

//@autor Henry Joe Wong Urquiza
public class Reporte extends HttpServlet {

  @Override
  protected void doGet(HttpServletRequest request, HttpServletResponse response)
    throws ServletException, IOException {
    createReport(request, response);
  }

  @Override
  protected void doPost(HttpServletRequest request, HttpServletResponse response)
      throws ServletException, IOException {
      createReport(request, response);
  }

  protected void createReport(HttpServletRequest request, HttpServletResponse response)
      throws ServletException, IOException {
      //Mostrar el reporte en formato PDF
      response.setContentType("application/pdf");
      java.sql.Connection cn;
      try {
        cn = Conexion.getConexion();
        //El que obtiene el diseño del reporte
        JasperReport jasperReport = null;
        Map parameterMap = new HashMap();
        //La direccion del reporte
        String reporteJasper = request.getSession().getServletContext().getRealPath("reporte/reporteDeVentas.jasper");
        //Cargamos el reporte
        jasperReport = JasperManager.loadReport(new FileInputStream(reporteJasper));
        //Llenamos con informacion al reporte
        JasperPrint jasperPrint = JasperManager.fillReport(jasperReport, parameterMap, cn);
        OutputStream oS = null;
        oS = response.getOutputStream();
        //Y lo convertimos a PDF el reporte
        JasperManager.printReportToPdfStream(jasperPrint, oS);
        cn.close();
        } catch (SQLException ex) {
        ex.printStackTrace();
        } catch (Exception ex) {
        ex.printStackTrace();
        }

  }
}

3.5. Modificando la Vista

Luego para ponder invocar al reporte que hemos creado, ir cada JSP que tenemos y buscar la linea que dice


<a href="#">Reporte Producto</a>

Y reemplazarla por


<a href="Reporte">Reporte Producto</a>

4. Ejemplo de la Aplicación


jueves, marzo 03, 2011

Java - Manejo de Fechas (java.util.Date)


"Si usa algún código del siguiente tutorial, den el icono de ME GUSTA del Facebook que se encuentra en su mano derecha, para que se vuelva Seguidor del Blog y también comentenos que tal les pareció el tutorial"


A continuación les voy a pasar un clase que yo uso para manejar las fechas. Tiene métodos importantes para el manejo de fechas como: Fecha actual, hora actual, sumar días a una Fecha, etc. Espero que les ayude mucho en la programación con el lenguaje de programación Java.
import java.text.DateFormat;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
import java.util.GregorianCalendar;
//@author  Henry Joe Wong Urquiza
public class ManejadorFechas {

    //Metodo usado para obtener la fecha actual
    //@return Retorna un <b>STRING</b> con la fecha actual formato "dd-MM-yyyy"
    public static String getFechaActual() {
        Date ahora = new Date();
        SimpleDateFormat formateador = new SimpleDateFormat("dd-MM-yyyy");
        return formateador.format(ahora);
    }

    //Metodo usado para obtener la hora actual del sistema
    //@return Retorna un <b>STRING</b> con la hora actual formato "hh:mm:ss"
    public static String getHoraActual() {
        Date ahora = new Date();
        SimpleDateFormat formateador = new SimpleDateFormat("hh:mm:ss");
        return formateador.format(ahora);
    }

    //Sumarle dias a una fecha determinada
    //@param fch La fecha para sumarle los dias
    //@param dias Numero de dias a agregar
    //@return La fecha agregando los dias
    public static java.sql.Date sumarFechasDias(java.sql.Date fch, int dias) {
        Calendar cal = new GregorianCalendar();
        cal.setTimeInMillis(fch.getTime());
        cal.add(Calendar.DATE, dias);
        return new java.sql.Date(cal.getTimeInMillis());
    }

    //Restarle dias a una fecha determinada
    //@param fch La fecha
    //@param dias Dias a restar
    //@return La fecha restando los dias
    public static synchronized java.sql.Date restarFechasDias(java.sql.Date fch, int dias) {
        Calendar cal = new GregorianCalendar();
        cal.setTimeInMillis(fch.getTime());
        cal.add(Calendar.DATE, -dias);
        return new java.sql.Date(cal.getTimeInMillis());
    }

    //Diferencias entre dos fechas
    //@param fechaInicial La fecha de inicio
    //@param fechaFinal  La fecha de fin
    //@return Retorna el numero de dias entre dos fechas
    public static synchronized int diferenciasDeFechas(Date fechaInicial, Date fechaFinal) {

        DateFormat df = DateFormat.getDateInstance(DateFormat.MEDIUM);
        String fechaInicioString = df.format(fechaInicial);
        try {
            fechaInicial = df.parse(fechaInicioString);
        } catch (ParseException ex) {
        }

        String fechaFinalString = df.format(fechaFinal);
        try {
            fechaFinal = df.parse(fechaFinalString);
        } catch (ParseException ex) {
        }

        long fechaInicialMs = fechaInicial.getTime();
        long fechaFinalMs = fechaFinal.getTime();
        long diferencia = fechaFinalMs - fechaInicialMs;
        double dias = Math.floor(diferencia / (1000 * 60 * 60 * 24));
        return ((int) dias);
    }

    //Devuele un java.util.Date desde un String en formato dd-MM-yyyy
    //@param La fecha a convertir a formato date
    //@return Retorna la fecha en formato Date
    public static synchronized java.util.Date deStringToDate(String fecha) {
        SimpleDateFormat formatoDelTexto = new SimpleDateFormat("dd-MM-yyyy");
        Date fechaEnviar = null;
        try {
            fechaEnviar = formatoDelTexto.parse(fecha);
            return fechaEnviar;
        } catch (ParseException ex) {
            ex.printStackTrace();
            return null;
        }
    }
}

martes, marzo 01, 2011

Java - Aplicación Web, Carrito de Compras Parte IV - Creación de la Vista


"Si usa algún código del siguiente tutorial, den el icono de ME GUSTA del Facebook que se encuentra en su mano derecha, para que se vuelva Seguidor del Blog y también comentenos que tal les pareció el tutorial"

1. Entorno


  • MySQL 5.1.
  • NetBeans IDE 6.9.1
  • Apache Tomcat
  • JDK 1.6.0 - 21

2. Introducción


La vista sirve para interactuar con el usuario, toma datos del usuario para registrar en la base de datos o mostrar los datos resultantes de una consultas.

2.1. JSP

JavaServer Pages (JSP) es una tecnología Java que permite generar contenido dinámico para web, en forma de documentos HTML, XML o de otro tipo. Esta tecnología es un desarrollo de la compañía Sun Microsystems. La Especificación JSP 1.2 fue la primera que se liberó y en la actualidad está disponible la Especificación JSP 2.1. Las JSP's permiten la utilización de código Java mediante scripts. Además, es posible utilizar algunas acciones JSP predefinidas mediante etiquetas. Estas etiquetas pueden ser enriquecidas mediante la utilización de Bibliotecas de Etiquetas (TagLibs o Tag Libraries) externas e incluso personalizadas.

3. Desarrollo


3.1. Crear los JSP

Primero lo que debemos de hacer es crear los JSP, que será la parte con la cual el usuario interactuara con el sistema. Para eso hacemos clic derecho en la carpeta que dice Web Pages de ahí nos vamos New y luego JSP.

















Y creamos siete JSP:


  • index --> Que nos mostrara un listado de todos los productos que tenemos y que deseamos modificar
  • registrarProducto --> Registrar un producto nuevo al sistema
  • actualizarProducto --> Sirve para modificar un producto del sistema
  • anadirCarrito --> Añade un detalle al carrito de compras
  • registrarVenta --> Registrar la venta
  • verVentas --> Reporte de las ventas
  • mensaje --> Muestra los mensajes de realización exitosa o fallo




















3.2. index.jsp

El diseño del index.jsp, seria el siguiente

















Y su código fuente seria el siguiente:


<%-- Importaciones que son necesarias para que se muestre el JSP --%>
<%@page import="java.util.ArrayList"%>
<%@page import="Modelo.*" %>
<%@page import="java.util.*" %>

<%@page contentType="text/html" pageEncoding="UTF-8"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
    "http://www.w3.org/TR/html4/loose.dtd">

<html>
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
        <title>.:Programando con Café - Carrito de Compras - Ing. Henry Wong</title>
    </head>
    <body>
        <h1>Programando con Café<br>Ing. Henry Joe Wong Urquiza</h1>
        <div>
            <%-- Menu de opciones --%>
            <a href="index.jsp">Inicio</a> |
            <a href="registrarProducto.jsp">Registrar Producto</a> |
            <a href="registrarVenta.jsp">Registrar Venta</a> |
            <a href="verVentas.jsp">Consultar Ventas</a> |
            <a href="Reporte">Reporte Producto</a>
        </div>
        <br >
        <div>
            <table border="1">
                <tr style="background-color: chocolate">
                    <td colspan="4">Lista de Productos</td>

                </tr>
                <tr style="background-color: chocolate">
                    <td>Codigo</td>
                    <td>Nombre</td>
                    <td>Precio</td>
                    <td>Proceso</td>
                </tr>
                <%-- Lista de todos los productos --%>
                <%
                            ArrayList<Producto> lista = ProductoBD.obtenerProducto();
                            for (Producto p : lista) {
                %>
                <tr>
                    <td><%= p.getCodigoProducto()%></td>
                    <td><%= p.getNombre()%></td>
                    <td><%= p.getPrecio()%></td>
                    <%-- Enlaces a las paginas de actualizar o anadir al carrito --%>
                    <td><a href="actualizarProducto.jsp?id=<%= p.getCodigoProducto()%>">Modificar</a> |
                        <a href="anadirCarrito.jsp?id=<%= p.getCodigoProducto()%>">Añadir</a>
                    </td>
                </tr>
                <%
                            }
                %>

            </table>
        </div>


    </body>
</html>



3.3. registrarProducto.jsp

El diseño seria el siguiente


















Su código fuente seria el siguiente:


<%@page import="java.util.ArrayList"%>
<%@page import="Modelo.*" %>
<%@page import="java.util.*" %>

<%@page contentType="text/html" pageEncoding="UTF-8"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
    "http://www.w3.org/TR/html4/loose.dtd">

<html>
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
        <title>.:Programando con Café - Carrito de Compras - Ing. Henry Wong</title>
    </head>
    <body>
        <h1>Programando con Café<br>Ing. Henry Joe Wong Urquiza</h1>
        <div>
            <a href="index.jsp">Inicio</a> |
            <a href="registrarProducto.jsp">Registrar Producto</a> |
            <a href="registrarVenta.jsp">Registrar Venta</a> |
            <a href="verVentas.jsp">Consultar Ventas</a> |
            <a href="Reporte">Reporte Producto</a>
        </div>
        <br >
        <%-- En el action del formulario le decimos que llama al Controlador --%>
        <form method="post" action="Controlador">
            <div>
                <input type="hidden" name="accion" value="RegistrarProducto" />
                <table border="1">
                    <tr>
                        <td>Nombre</td>
                        <td><input type="text" name="txtNombre" value="" /></td>
                    </tr>
                    <tr>
                        <td>Precio</td>
                        <td><input type="text" name="txtPrecio" value="0" /></td>
                    </tr>
                    <tr>
                        <td></td>
                        <td><input type="submit" value="Registrar" name="btnRegistrar" /></td>
                    </tr>
                </table>
            </div>
        </form>

    </body>
</html>


3.4. actualizarProducto.jsp

Este formulario recibe por petición GET el código del producto seleccionado desde la pagina index.jsp y muestra su información para luego actualizar. Su diseño del formulario seria el siguiente.

















Su código fuente seria el siguiente:


<%@page import="java.util.ArrayList"%>
<%@page import="Modelo.*" %>
<%@page import="java.util.*" %>

<%@page contentType="text/html" pageEncoding="UTF-8"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
    "http://www.w3.org/TR/html4/loose.dtd">
<%-- Obtenemos el id o el codigo del producto que deseamos modificar o actualizar --%>
<%
    Producto p=ProductoBD.obtenerProducto(Integer.parseInt(request.getParameter("id")));
%>
<html>
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
        <title>.:Programando con Café - Carrito de Compras - Ing. Henry Wong</title>
    </head>
    <body>
        <h1>Programando con Café<br>Ing. Henry Joe Wong Urquiza</h1>
        <div>
            <a href="index.jsp">Inicio</a> |
            <a href="registrarProducto.jsp">Registrar Producto</a> |
            <a href="registrarVenta.jsp">Registrar Venta</a> |
            <a href="verVentas.jsp">Consultar Ventas</a> |
            <a href="Reporte">Reporte Producto</a>
        </div>
        <br >
        <%-- En el action del formulario le decimos que llama al Controlador --%>
        <form method="post" action="Controlador">
            <div>
                <%-- Indica al controlador que vamos hacer una modificacion --%>
                <input type="hidden" name="accion" value="ModificarProducto" />
                <table border="1">
                    <tr>
                        <td>Codigo</td>
                        <%-- Escribimos el codigo del producto a modificar --%>
                        <td><input type="text" name="txtCodigo" value="<%= p.getCodigoProducto()%>" readonly /></td>
                    </tr>
                    <tr>
                        <td>Nombre</td>
                        <%-- Escribimos el nombre del producto a modificar --%>
                        <td><input type="text" name="txtNombre" value="<%= p.getNombre()%>" /></td>
                    </tr>
                    <tr>
                        <td>Precio</td>
                        <%-- Escribimos el precio del producto a modificar --%>
                        <td><input type="text" name="txtPrecio" value="<%= p.getPrecio()%>" /></td>
                    </tr>
                    <tr>
                        <td></td>
                        <td><input type="submit" value="Actualizar" name="btnActualizar" /></td>
                    </tr>
                </table>
            </div>
        </form>

    </body>
</html>



3.5. anadirCarrito.jsp

Este formulario nos sirve para añadir un elemento al carrito de compras que tenemos en sesion. Su diseño seria el siguiente:


<%@page import="java.util.ArrayList"%>
<%@page import="Modelo.*" %>
<%@page import="java.util.*" %>

<%@page contentType="text/html" pageEncoding="UTF-8"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
    "http://www.w3.org/TR/html4/loose.dtd">
<%-- Obtenemos el id o el codigo del producto que deseamos añadir al carrito --%>
<%
    Producto p=ProductoBD.obtenerProducto(Integer.parseInt(request.getParameter("id")));
%>
<html>
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
        <title>.:Programando con Café - Carrito de Compras - Ing. Henry Wong</title>
    </head>
    <body>
        <h1>Programando con Café<br>Ing. Henry Joe Wong Urquiza</h1>
        <div>
            <a href="index.jsp">Inicio</a> |
            <a href="registrarProducto.jsp">Registrar Producto</a> |
            <a href="registrarVenta.jsp">Registrar Venta</a> |
            <a href="verVentas.jsp">Consultar Ventas</a> |
            <a href="Reporte">Reporte Producto</a>
        </div>
        <br >
        <form method="post" action="Controlador">
            <div>
                <input type="hidden" name="accion" value="AnadirCarrito" />
                <table border="1">
                    <tr>
                        <td>Codigo</td>
                        <td><input type="text" name="txtCodigo" value="<%= p.getCodigoProducto()%>" readonly /></td>
                    </tr>
                    <tr>
                        <td>Nombre</td>
                        <td><input type="text" name="txtNombre" value="<%= p.getNombre()%>" readonly /></td>
                    </tr>
                    <tr>
                        <td>Precio</td>
                        <td><input type="text" name="txtPrecio" value="<%= p.getPrecio()%>" readonly /></td>
                    </tr>
                    <tr>
                        <td>Cantidad Pedir</td>
                        <td><input type="text" name="txtCantidad" value="0" /></td>
                    </tr>
                    <tr>
                        <td></td>
                        <td><input type="submit" value="Añadir" name="btnAnadir" /></td>
                    </tr>
                </table>
            </div>
        </form>

    </body>
</html>


3.6. registrarVenta.jsp

Este formulario es el encargado de llamar los métodos que registraran todos los productos guardados en la sesión a la base de datos. Su diseño del formulario es el siguiente

















Su codigo fuente seria:


<%@page import="java.util.ArrayList"%>
<%@page import="Modelo.*" %>
<%@page import="java.util.*" %>

<%@page contentType="text/html" pageEncoding="UTF-8"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
    "http://www.w3.org/TR/html4/loose.dtd">

<html>
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
        <title>.:Programando con Café - Carrito de Compras - Ing. Henry Wong</title>
    </head>
    <body>
        <h1>Programando con Café<br>Ing. Henry Joe Wong Urquiza</h1>
        <div>
            <a href="index.jsp">Inicio</a> |
            <a href="registrarProducto.jsp">Registrar Producto</a> |
            <a href="registrarVenta.jsp">Registrar Venta</a> |
            <a href="verVentas.jsp">Consultar Ventas</a> |
            <a href="Reporte">Reporte Producto</a>
        </div>
        <br >
        <div>
            <form method="post" action="Controlador">
                <%-- Llamamos a la accion Registrar Venta --%>
                <input type="hidden" name="accion" value="RegistrarVenta" />
                <table border="1">
                        <tr style="background-color: chocolate">
                            <td colspan="5">Carrito de Compras</td>
                        </tr>
                        <tr style="background-color: chocolate">
                            <td>Cliente:</td>
                            <td colspan="4"><input type="text" name="txtCliente" value="" /></td>
                        </tr>
                        <tr style="background-color: chocolate">
                            <td>Nombre</td>
                            <td>Precio</td>
                            <td>Cantidad</td>
                            <td>Descuento</td>
                            <td>Sub. Total</td>
                        </tr>
                        <%-- Los productos que tenemos en la sesion que se llama carrito --%>
                        <%
                                    ArrayList<DetalleVenta> lista = (ArrayList<DetalleVenta>)session.getAttribute("carrito");
                                    if(lista!=null){
                                        for (DetalleVenta d : lista) {
                        %>
                                        <tr>
                                            <td><%= d.getProducto()%></td>
                                            <td><%= d.getProducto().getPrecio()%></td>
                                            <td><%= d.getCantidad()%></td>
                                            <td><%= d.getDescuento()%></td>
                                            <td><%= (d.getProducto().getPrecio() * d.getCantidad())-d.getDescuento()%></td>
                                        </tr>
                        <%
                                        }
                                    }
                        %>
                        <tr >
                            <td colspan="5"><input type="submit" value="Registrar Venta" name="btnVenta" /></td>
                        </tr>
                    </table>
                </form>
        </div>


    </body>
</html>


4. Ejemplo de la Aplicación