Вы находитесь на странице: 1из 24

Ing.

Maribel Molina Barriga Gestin y administracin Web

Prctica

06

PROGRAMACIN
POR CAPAS

OBJETIVOS
Conocer la programacin por capas
Disear un proyecto web con programacin por capas
MARCO TERICO

La programacin por capas

La programacin por capas es una arquitectura cliente-servidor en el que el objetivo primordial es


la separacin de la lgica de negocios de la lgica de diseo; un ejemplo bsico de esto consiste en
separar la capa de datos de la capa de presentacin al usuario.

Acceso a
Datos

La ventaja principal de este estilo es que el desarrollo se puede llevar a cabo en varios niveles y, en
caso de que sobrevenga algn cambio, slo se ataca al nivel requerido sin tener que revisar entre
cdigo mezclado. Un buen ejemplo de este mtodo de programacin sera el modelo de
interconexin de sistemas abiertos.
Adems, permite distribuir el trabajo de creacin de una aplicacin por niveles; de este modo,
cada grupo de trabajo est totalmente abstrado del resto de niveles, de forma que basta con
conocer la API que existe entre niveles.

Ing. Maribel Molina Barriga Gestin y administracin Web

En el diseo de sistemas informticos actual se suelen usar las arquitecturas multinivel o


Programacin por capas. En dichas arquitecturas a cada nivel se le confa una misin simple, lo que
permite el diseo de arquitecturas escalables (que pueden ampliarse con facilidad en caso de que
las necesidades aumenten).
El diseo ms utilizado actualmente es el diseo en tres niveles (o en tres capas).
CAPAS Y NIVELES
1. Capa de presentacin: es la que ve el usuario (tambin se la denomina "capa de usuario"),
presenta el sistema al usuario, le comunica la informacin y captura la informacin del usuario
en un mnimo de proceso (realiza un filtrado previo para comprobar que no hay errores de
formato). Tambin es conocida como interfaz grfica y debe tener la caracterstica de ser
"amigable" (entendible y fcil de usar) para el usuario. Esta capa se comunica nicamente con
la capa de negocio.
2. Capa de negocio: es donde residen los programas que se ejecutan, se reciben las peticiones del
usuario y se envan las respuestas tras el proceso. Se denomina capa de negocio (e incluso de
lgica del negocio) porque es aqu donde se establecen todas las reglas que deben cumplirse.
Esta capa se comunica con la capa de presentacin, para recibir las solicitudes y presentar los
resultados, y con la capa de datos, para solicitar al gestor de base de datos almacenar o
recuperar datos de l. Tambin se consideran aqu los programas de aplicacin.
3. Capa de datos: es donde residen los datos y es la encargada de acceder a los mismos. Est
formada por uno o ms gestores de bases de datos que realizan todo el almacenamiento de
datos, reciben solicitudes de almacenamiento o recuperacin de informacin desde la capa de
negocio.
Todas estas capas pueden residir en un nico ordenador, si bien lo ms usual es que haya una
multitud de ordenadores en donde reside la capa de presentacin (son los clientes de la
arquitectura cliente/servidor). Las capas de negocio y de datos pueden residir en el mismo
ordenador, y si el crecimiento de las necesidades lo aconseja se pueden separar en dos o ms
ordenadores. As, si el tamao o complejidad de la base de datos aumenta, se puede separar en
varios ordenadores los cuales recibirn las peticiones del ordenador en que resida la capa de
negocio.
Si, por el contrario, fuese la complejidad en la capa de negocio lo que obligase a la separacin, esta
capa de negocio podra residir en uno o ms ordenadores que realizaran solicitudes a una nica
base de datos. En sistemas muy complejos se llega a tener una serie de ordenadores sobre los
cuales corre la capa de negocio, y otra serie de ordenadores sobre los cuales corre la base de
datos.
En una arquitectura de tres niveles, los trminos "capas" y "niveles" no significan lo mismo ni son
similares.
El trmino "capa" hace referencia a la forma como una solucin es segmentada desde el punto de
vista lgico:

Ing. Maribel Molina Barriga Gestin y administracin Web

Presentacin.
Lgica de Negocio.
Datos.

En cambio, el trmino "nivel" corresponde a la forma en que las capas lgicas se encuentran
distribuidas de forma fsica. Por ejemplo:

Una solucin de tres capas (presentacin, lgica del negocio, datos) que residen en un solo
ordenador (Presentacin+lgica+datos). Se dice que la arquitectura de la solucin es de
tres capas y un nivel.
Una solucin de tres capas (presentacin, lgica del negocio, datos) que residen en dos
ordenadores (presentacin+lgica por un lado; lgica+datos por el otro lado). Se dice que
la arquitectura de la solucin es de tres capas y dos niveles.

ACTIVIDADES
Venta de productos por Internet
El siguiente sistema permite la elaboracin de un Carrito de Compras, utilizando programacin por
capas; pero antes debemos de crear lo siguiente:
1.
2.
3.
4.
5.

Crear un proyecto en xampp, un sitio llamado compras


Dentro de Compras crear una carpeta llamada CapaDatos
Dentro de Compras crear una carpeta llamada Include
Dentro de Compras crear una carpeta llamada CapaNegocios
Subir el proyecto a su dominio gratuito

Capa de Datos:
1.

La base de datos tendra las siguientes tablas. Venta, Producto y DetalleVenta. Esto tendra
que crearlo en localhost/Phpmyadmin

Ing. Maribel Molina Barriga Gestin y administracin Web

A continuacin les paso el script de creacin de la base de datos


-- 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;

2. Dentro de la carpeta CapaDatos, colocar el siguiente cdigo:


Conexin.php
DetalleVenta.php
Producto.php
Venta.php

A continuacin el cdigo siguiente

Ing. Maribel Molina Barriga Gestin y administracin Web

A. La clase Conexin, se codifica el cdigo:


Conexin.php
<?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;
}
}
?>

B. Esta clase se encarga de conectar la clase Producto con MySQL:


Producto.php
<?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'];

Ing. Maribel Molina Barriga Gestin y administracin Web

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);

Ing. Maribel Molina Barriga Gestin y administracin Web

//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 espaol
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) {

Ing. Maribel Molina Barriga Gestin y administracin Web

}
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 espaol
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) {

Ing. Maribel Molina Barriga Gestin y administracin Web

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

C. La clase DetalleVenta
DetalleVenta.php
<?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() {

Ing. Maribel Molina Barriga Gestin y administracin Web

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;
}
}
?>

D. La clase Venta

Venta.php
<?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

10

Ing. Maribel Molina Barriga Gestin y administracin Web

$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 espaol
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, ";

11

Ing. Maribel Molina Barriga Gestin y administracin Web

$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;
}

12

Ing. Maribel Molina Barriga Gestin y administracin Web

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;
}
}
?>

Capa de Negocios:
Es la capa en la cual se implementa la lgica del negocio de la empresa como obtener descuentos,
aumentos, etc.
Dentro de la carpeta CapaNegocios se codificar:
Prod_RegistrarProducto.php
Prod_ModificarProducto.php
Vent_RegistrarVenta.php

A. Prod_RegistrarProducto
Este archivo en PHP es el encargado de recibir los datos de la capa de presentacin del
proyecto y llamar a la capa de datos, especficamente a la clase "Producto", para poder
registrar un producto a la base de datos. Su cdigo 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

13

Ing. Maribel Molina Barriga Gestin y administracin Web

//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");
}
?>

B. Prod_ModificarProducto.php
Este archivo en PHP va a ser el encargado de llamar al mtodo "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");
}
?>

C. Vent_RegistrarVenta.php
Este archivo es el ms importante, ya que es el encargado de registrar la venta a la base de datos. Lo
que hace es obtener todos los tems o productos que estn almacenados en nuestro carrito de compras,
especficamente en la sesin de la aplicacin y llama a la clase "Venta" para poder registrar la venta a la
base de datos. Su cdigo fuente debera 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');
}

14

Ing. Maribel Molina Barriga Gestin y administracin Web

?>

Capa de Presentacin:
En esta parte mostraremos los formularios con la cual es usuario interactuara con el sistema. Y
veremos cmo crear un reporte en Excel con PHP.
1. Dentro de la carpeta Include se codificar, En esta carpeta pondremos los archivos que sern
comunes para todas las pginas en PHP. Como por ejemplo el men de opciones del sistema. Y
en esa carpeta crearemos un archivo que se llamara:
Cabezera.php
<h1>Carrito de Compras<br>
</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>

2.

Tenemos otros archivos los cuales estn dentro de la carpeta de sitio compras, que est en
htdocs de xampp:
index.php
registrarProducto.php
modificarProducto.php
anadirCarrito.php
registrarVenta.php
verVenta.php
reporteVentas.php

A. Archivo index.php
En este archivo mostraremos todos los productos que tenemos en el sistema. Y tendr el
siguiente cdigo:
<?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">

15

Ing. Maribel Molina Barriga Gestin y administracin Web

<title>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>Cdigo</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;?>">Aadir</a>
</td>
</tr>
<?php
}
}
?>
</table>
</div>

</body>
</html>

B. 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 cdigo html es el siguiente:
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Carrito de compras con PHP</title>
</head>
<body>

16

Ing. Maribel Molina Barriga Gestin y administracin Web

<?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>

C. Archivo modificarProducto.php
Este archivo recibe el cdigo del producto por medio del archivo "index.php". Muestra la
informacin del producto que deseamos modificar y nos permite editar su informacin.
<?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>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">

17

Ing. Maribel Molina Barriga Gestin y administracin Web

<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>

D. Archivo anadirCarrito.php
Este formulario recibe el cdigo del producto que deseamos aadir al carrito de compras
desde la pagina "index.php". Muestra toda la informacin del producto y nos pide la
cantidad que deseamos aadir al carrito. Su cdigo 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>Carrito de compras con PHP</title>
</head>
<body>
<?php include_once 'Include/Cabezera.php'; ?>

18

Ing. Maribel Molina Barriga Gestin y administracin Web

<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="Aadir" name="btnAnadir" /></td>
</tr>
</table>
</div>
</form>
</body>
</html>

E. 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 estn en sesin y mostrarlos en una tabla, para
que as 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');

19

Ing. Maribel Molina Barriga Gestin y administracin Web

//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>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

20

Ing. Maribel Molina Barriga Gestin y administracin Web

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>

F. Archivo verVenta.php
Este archivo nos permite ver todas las ventas en formato HTML. Su cdigo sera el
siguiente:
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Carrito de compras con PHP</title>
</head>
<body>
<?php include_once 'Include/Cabezera.php'; ?>
<div>
<table border="1">
<tr style="background-color: chocolate">
<td>Cdigo</td>
<td>Cliente</td>
<td>Producto</td>
<td>Precio</td>
<td>Cantidad</td>
<td>Parcial</td>

21

Ing. Maribel Molina Barriga Gestin y administracin Web

<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>

G. Archivo reporteVentas.php
Este archivo PHP nos permite crear un reporte en Excel. Su cdigo 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>

22

Ing. Maribel Molina Barriga Gestin y administracin Web

<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>

23

Ing. Maribel Molina Barriga Gestin y administracin Web

24

Вам также может понравиться