código fuente

30
Código fuente Carrito de Compras ASP.NET y C# En este post tratare de explicar y hacer un carrito de compras para ello lo programare en ASP.NET junto con C#. Veamos en teoría cuando escuchamos carrito de compras se nos iene la mente uno de los !ue ocupamos en el supermercado" la l gica del uso de ese carrito es mu simple$ Veamos como utili%amos un carrito de compras del supermercado$ &. Primero lo o'tenemos en la entrada del mismo supermercado. (. Segundo al encontrar el producto deseado lo introducimos en al carrito. ). Cuando hemos terminado de comprar amos a la caja registradora emos el total !ue hay en el carrito y pagamos. Agrandes rasgos eso es lo !ue me iene a la mente cuando se trata de este tipo de carrito compras" pero para nuestro caso es un carrito es online !ue permita a nuestros clientes hac compra en nuestro sitio *e'.

Upload: luiskenyoquispegamboa

Post on 03-Nov-2015

6 views

Category:

Documents


0 download

DESCRIPTION

CARRITO DE COMPRA

TRANSCRIPT

Cdigo fuenteCarrito de Compras ASP.NET yC#En este post tratare de explicar y hacer un carrito de compras para ello lo programare enASP.NETjunto con C#. Veamos en teora cuando escuchamos carrito de compras se nos viene a la mente uno de los que ocupamos en el supermercado, la lgica del uso de ese carrito es muy simple:

Veamos como utilizamos un carrito de compras del supermercado:1. Primero lo obtenemos en la entrada del mismo supermercado.2. Segundo al encontrar el producto deseado lo introducimos en al carrito.3. Cuando hemos terminado de comprar vamos a la caja registradora vemos el total que hay en el carrito y pagamos.Agrandes rasgos eso es lo que me viene a la mente cuando se trata de este tipo de carrito de compras, pero para nuestro caso es un carrito es online que permita a nuestros clientes hacer una compra en nuestro sitio Web.

Veamos como funcionaria nuestro carrito.1. Primero a diferencia del carito del sper el de nosotros no es necesario que se tome (crearlo) al principio; no mas llegue a nuestro sitio el cliente. Sino que el cliente puede revisar el catalogo de productos y hasta que este listo a comprar se le asignara un carrito donde introducir su compra.2. Segundo en el carro de supermercado es capaz de contener una gran cantidad de productos a la vez, nuestro carro de compras debe ser capaz de hacer lo mismo.3. Tercero el carro de supermercado me permite introducir de un productos varios del mismo, el que programaremos debe ser capaz de hacerlo.4. Cuarto cuando llega a pagar en el supermercado totaliza su compra a partir de los subtotales de todas sus productos esto lo hace mentalmente, de esta forma decide si dejar algo por que no le alcanza el dinero. Nuestro carro de compras debe ser capaz de mostrarnos el subtotal a partir de cada producto que llevamos y as como en el supermercado me debe de permitir eliminar un producto si no me alcanza el dinero.5. Y por ultimo en el carro de compras me debe permitir actualizar la cantidad de producto si quiero mas de un producto del mismo tipo o quiero dejar de ese producto uno.Bueno esto es lo que tenemos que programar en nuestro carito de compras. Para ello crearemos un proyecto webASP.NETvaco:

Hoy comenzaremos creando una clase que se encargue de los productos que pondr en mi sitio.

Esta clase contendr los siguientes atributos.Clase Producto1. usingSystem;2. usingSystem.Collections.Generic;3. usingSystem.Linq;4. usingSystem.Web;5. 6. namespaceCarroDeComprasEjemplo7. {8. publicclassProducto9. {10. publicintId {get;set; }11. publicdecimalPrecio {get;set; }12. publicstringDescripcion {get;set; }13. }14. }Ahora solo tendramos que hacer un catalogo de productos que me los maneje esta clase. Para ello haremos un constructor al cual le pase el Id del producto y me devuelva el la descripcin y el precio del mismo.Clase Producto1. namespaceCarroDeComprasEjemplo2. {3. publicclassProducto4. {5. publicintId {get;set; }6. publicdecimalPrecio {get;set; }7. publicstringDescripcion {get;set; }8. 9. publicProducto(intpId)10. {11. Id = pId;12. //esta ser la lista de productos y precios13. switch(pId)14. {15. case1:16. Descripcion =Zapatos Deportivos;17. //lo puedo convertir para que me lo tome como decimal18. Precio =Convert.ToDecimal(50.90);19. break;20. case2:21. Descripcion =Camisas Deportivas;22. //es igual que convertirlo solo que le estoy diciendo que es decimal23. Precio = 15.50m;24. break;25. case3:26. Descripcion =Pantalones Cortos;27. Precio = 12.50m;28. break;29. case4:30. Descripcion =Sandalias;31. Precio = 5m;32. break;33. case5:34. Descripcion =Bxer;35. Precio = 2.75m;36. break;37. }38. }39. }40. }Ahora tendramos que crear una clase que me maneje los productos y la cantidad de los mismos que sern enviados al carro de compras.

Esta clase tiene que ser capaz de decirme o encontrarme un producto de los que estoy introduciendo en el carro de compras. Para ello utilizare una interfaz genrica que me los filtre, la que ocupare ser IEquatable.Clase ProductosAlCarro1. namespaceCarroDeComprasEjemplo2. {3. publicclassProductosAlCarro:IEquatable4. {5. }6. }Colocare las atributos siguientes.Clase ProductosAlCarro1. namespaceCarroDeComprasEjemplo2. {3. publicclassProductosAlCarro:IEquatable4. {5. publicintCantidad {get;set; }6. privateint_IdProducto;7. privateProducto_producto =null;8. }9. }En esta clase tenemos que manejar tres cosas la cantidad de producto el id del producto y una instancia que me permita tener acceso al catalogo de productos. encapsularemos el id y producto nos quedara as:Clase ProductosAlCarro1. namespaceCarroDeComprasEjemplo2. {3. publicclassProductosAlCarro:IEquatable4. {5. publicintCantidad {get;set; }6. privateint_IdProducto;7. privateProducto_producto =null;8. 9. publicintIdProducto10. {11. get{return_IdProducto; }12. set13. {14. _producto =null;15. _IdProducto =value;16. }17. }18. 19. publicProductoProducto20. {21. get22. {23. if(_producto ==null)24. {25. _producto =newProducto(IdProducto);26. }27. return_producto;28. }29. }30. }31. }En el encapsulador del id hay que hacer un nuevo producto volvindolo null para que siempre nos introduzca un nuevo producto al carro de compras. En el de productos solo hay que ver si el producto viene vaco o no.Bueno ahora hay que hacer unas propiedades que me manejen la descripcin del producto y el precio unitario de cada producto adems del total de productos:Clase ProductosAlCarro1. namespaceCarroDeComprasEjemplo2. {3. publicclassProductosAlCarro:IEquatable4. {5. publicintCantidad {get;set; }6. privateint_IdProducto;7. privateProducto_producto =null;8. 9. publicintIdProducto10. {11. get{return_IdProducto; }12. set13. {14. _producto =null;15. _IdProducto =value;16. }17. }18. 19. publicProductoProducto20. {21. get22. {23. if(_producto ==null)24. {25. _producto =newProducto(IdProducto);26. }27. return_producto;28. }29. }30. 31. publicstringDescripcion32. {33. get{returnProducto.Descripcion; }34. }35. publicdecimalPrecioUnitario36. {37. get{returnProducto.Precio; }38. }39. publicdecimalTotal40. {41. get{returnPrecioUnitario * Cantidad; }42. }43. }44. }Con esto solo necesitare un constructor que me tome como parmetro el id del producto as como usar el mtodo Equals para filtrar los distintos productos que tenga en mi carro de compras.Clase ProductosAlCarro1. namespaceCarroDeComprasEjemplo2. {3. publicclassProductosAlCarro:IEquatable4. {5. publicintCantidad {get;set; }6. privateint_IdProducto;7. privateProducto_producto =null;8. 9. publicintIdProducto10. {11. get{return_IdProducto; }12. set13. {14. _producto =null;15. _IdProducto =value;16. }17. }18. 19. publicProductoProducto20. {21. get22. {23. if(_producto ==null)24. {25. _producto =newProducto(IdProducto);26. }27. return_producto;28. }29. }30. 31. publicstringDescripcion32. {33. get{returnProducto.Descripcion; }34. }35. publicdecimalPrecioUnitario36. {37. get{returnProducto.Precio; }38. }39. publicdecimalTotal40. {41. get{returnPrecioUnitario * Cantidad; }42. }43. 44. publicProductosAlCarro(intpId)45. {46. IdProducto = pId;47. }48. 49. publicboolEquals(ProductosAlCarropItem)50. {51. returnpItem.IdProducto == IdProducto;52. }53. }54. }Con esto tengo dos clase una que me maneja los producto y otra que me maneja dichos productos en el carro de compras. Hoy solo tengo que tener una clase que me maneje el carro de compras y me guarde en una lista los productos que han sido comprados o seleccionados.

Esta clase que me permitira seleccionar un producto, guardar uno producto y eliminar un producto del carro de compras. Primero crearemos una lista para guardar todos los productos dentro del carro de compras:Clase CarroDeCompras1. namespaceCarroDeComprasEjemplo2. {3. publicclassCarroDeCompras4. {5. publicList ListaProductos {get;privateset; }6. }7. }Crearemos un mtodo que me capture el producto que ser enviado al carro de compras (la lista), para este caso usaremos unas variables de seccin entre la pagina que muestra el catalogo y laque me muestra los productos en al carro de compras.Clase CarroDeCompras1. namespaceCarroDeComprasEjemplo2. {3. publicclassCarroDeCompras4. {5. publicList ListaProductos {get;privateset; }6. 7. publicstaticCarroDeComprasCapturarProducto()8. {9. CarroDeCompras_carrito = (CarroDeCompras)HttpContext.Current.Session[ASPCarroDeCompras];10. if(_carrito ==null)11. {12. HttpContext.Current.Session[ASPCarroDeCompras] = _carrito =newCarroDeCompras();13. }14. return_carrito;15. }16. }17. }Ahora hay que hacer un constructor que me permita hacer una lista de productos, recuerda que nos solo una persona comprara en lnea as que cada persona hay que hacerle una lista de productos.Crearemos un mtodo me debe de identificar si ya hay productos en el carro de compras si los hay solo tenemos que sumar a la cantidad de producto un producto mas sino hay hay que agregarle una a la cantidad de producto as que veamos como queda:Clase CarroDeCompras1. namespaceCarroDeComprasEjemplo2. {3. publicclassCarroDeCompras4. {5. publicList ListaProductos {get;privateset; }6. 7. publicstaticCarroDeComprasCapturarProducto()8. {9. CarroDeCompras_carrito = (CarroDeCompras)HttpContext.Current.Session[ASPCarroDeCompras];10. if(_carrito ==null)11. {12. HttpContext.Current.Session[ASPCarroDeCompras] = _carrito =newCarroDeCompras();13. }14. return_carrito;15. }16. 17. protectedCarroDeCompras()18. {19. ListaProductos =newList();20. }21. 22. publicvoidAgregar(intpIdProducto)23. {24. ProductosAlCarroNuevoProducto =newProductosAlCarro(pIdProducto);25. if(ListaProductos.Contains(NuevoProducto))26. {27. foreach(ProductosAlCarroiteminListaProductos)28. {29. if(item.Equals(NuevoProducto))30. {31. item.Cantidad++;32. return;33. }34. }35. }36. else37. {38. NuevoProducto.Cantidad = 1;39. ListaProductos.Add(NuevoProducto);40. }41. }42. }43. }Hoy tenemos que hacer un mtodo que me permita eliminar un producto de la lista que tengo si ya no lo quiero esto es relativamente fcil quedara as:Clase CarroDeCompras1. namespaceCarroDeComprasEjemplo2. {3. publicclassCarroDeCompras4. {5. publicList ListaProductos {get;privateset; }6. 7. publicstaticCarroDeComprasCapturarProducto()8. {9. CarroDeCompras_carrito = (CarroDeCompras)HttpContext.Current.Session[ASPCarroDeCompras];10. if(_carrito ==null)11. {12. HttpContext.Current.Session[ASPCarroDeCompras] = _carrito =newCarroDeCompras();13. }14. return_carrito;15. }16. 17. protectedCarroDeCompras()18. {19. ListaProductos =newList();20. }21. 22. publicvoidAgregar(intpIdProducto)23. {24. ProductosAlCarroNuevoProducto =newProductosAlCarro(pIdProducto);25. if(ListaProductos.Contains(NuevoProducto))26. {27. foreach(ProductosAlCarroiteminListaProductos)28. {29. if(item.Equals(NuevoProducto))30. {31. item.Cantidad++;32. return;33. }34. }35. }36. else37. {38. NuevoProducto.Cantidad = 1;39. ListaProductos.Add(NuevoProducto);40. }41. }42. 43. publicvoidEliminarProductos(intpIdProducto)44. {45. ProductosAlCarroeliminaritems =newProductosAlCarro(pIdProducto);46. ListaProductos.Remove(eliminaritems);47. }48. }49. }Hoy tendramos que hacer un mtodo queme permita ver o saber la cantidad de productos en el carro de compras para que me sirve esto es para actualizar la cantidad cuando compre mas del mismo producto o cuando compre otro producto, que daria as:Clase CarroDeCompras1. namespaceCarroDeComprasEjemplo2. {3. publicclassCarroDeCompras4. {5. publicList ListaProductos {get;privateset; }6. 7. publicstaticCarroDeComprasCapturarProducto()8. {9. CarroDeCompras_carrito = (CarroDeCompras)HttpContext.Current.Session[ASPCarroDeCompras];10. if(_carrito ==null)11. {12. HttpContext.Current.Session[ASPCarroDeCompras] = _carrito =newCarroDeCompras();13. }14. return_carrito;15. }16. 17. protectedCarroDeCompras()18. {19. ListaProductos =newList();20. }21. 22. publicvoidAgregar(intpIdProducto)23. {24. ProductosAlCarroNuevoProducto =newProductosAlCarro(pIdProducto);25. if(ListaProductos.Contains(NuevoProducto))26. {27. foreach(ProductosAlCarroiteminListaProductos)28. {29. if(item.Equals(NuevoProducto))30. {31. item.Cantidad++;32. return;33. }34. }35. }36. else37. {38. NuevoProducto.Cantidad = 1;39. ListaProductos.Add(NuevoProducto);40. }41. }42. 43. publicvoidEliminarProductos(intpIdProducto)44. {45. ProductosAlCarroeliminaritems =newProductosAlCarro(pIdProducto);46. ListaProductos.Remove(eliminaritems);47. }48. 49. publicvoidCantidadDeProductos(intpIdProducto,intpCantidad)50. {51. if(pCantidad == 0)52. {53. EliminarProductos(pIdProducto);54. return;55. }56. ProductosAlCarroupdateProductos =newProductosAlCarro(pIdProducto);57. foreach(ProductosAlCarroiteminListaProductos)58. {59. if(item.Equals(updateProductos))60. {61. item.Cantidad = pCantidad;62. return;63. }64. }65. }66. }67. }Por ultimo en esta clase sacaremos los subtotales por producto que hemos agregado al carro de compras:Clase CarroDeCompras1. namespaceCarroDeComprasEjemplo2. {3. publicclassCarroDeCompras4. {5. publicList ListaProductos {get;privateset; }6. 7. publicstaticCarroDeComprasCapturarProducto()8. {9. CarroDeCompras_carrito = (CarroDeCompras)HttpContext.Current.Session[ASPCarroDeCompras];10. if(_carrito ==null)11. {12. HttpContext.Current.Session[ASPCarroDeCompras] = _carrito =newCarroDeCompras();13. }14. return_carrito;15. }16. 17. protectedCarroDeCompras()18. {19. ListaProductos =newList();20. }21. 22. publicvoidAgregar(intpIdProducto)23. {24. ProductosAlCarroNuevoProducto =newProductosAlCarro(pIdProducto);25. if(ListaProductos.Contains(NuevoProducto))26. {27. foreach(ProductosAlCarroiteminListaProductos)28. {29. if(item.Equals(NuevoProducto))30. {31. item.Cantidad++;32. return;33. }34. }35. }36. else37. {38. NuevoProducto.Cantidad = 1;39. ListaProductos.Add(NuevoProducto);40. }41. }42. 43. publicvoidEliminarProductos(intpIdProducto)44. {45. ProductosAlCarroeliminaritems =newProductosAlCarro(pIdProducto);46. ListaProductos.Remove(eliminaritems);47. }48. 49. publicvoidCantidadDeProductos(intpIdProducto,intpCantidad)50. {51. if(pCantidad == 0)52. {53. EliminarProductos(pIdProducto);54. return;55. }56. ProductosAlCarroupdateProductos =newProductosAlCarro(pIdProducto);57. foreach(ProductosAlCarroiteminListaProductos)58. {59. if(item.Equals(updateProductos))60. {61. item.Cantidad = pCantidad;62. return;63. }64. }65. }66. 67. publicdecimalSubTotal()68. {69. decimalsubtotal = 0;70. foreach(ProductosAlCarroiteminListaProductos)71. {72. subtotal +=item.Total;73. }74. returnsubtotal;75. }76. }77. }Con esto solo seria dibujar nuestros webform y programarlos y as ya tenemos nuestro carro de compras los siguiente no vamos a hondar mucho solo seria implementar esta programacin.Comencemos la implementacin creando un WeBForms que llamaremos CatalogoProductos.CatalogoProductos1. 2. 3.