PROYECTO FINAL DE TALLER
DE PROGRAMACION
“DESARROLLO DE UN SISTEMA PARA UNA
TIENDA"
DOCENTE: Ing. Eder Nicanor Figueroa
Piscoya.
ALUMNO: Antoni Valle Magallan.
CURSO: Taller de Programación I.
CICLO: IV
AÑO:
1.- Análisis
OBJETIVOS:
1. Desarrollar un programa para una tienda, el cual permita el ingreso de
clientes, productos y sus respectivas compras, mediante una interfaz
gráfica.
2. Implementar el uso de base de datos al código java.
3. Realizar las validaciones necesarias, con el uso de expresiones regulares.
4. Aplicar los conceptos básicos de la Programación Orientada a Objetos,
como son: Polimorfismo, herencia, etc.
ESPECIFICACIONES
Ø El programa que se va a implementar se lo ha realizara en la plataforma
NetBeans, lo cual se debe tener en cuenta al momento de compilarlo y/o
ejecutarlo.
Ø Para la generación de la base de datos se usó SQL Server.
MARCO TEÓRICO
Programación Orientada a Objetos con Java
Como es sabido hay muchos lenguajes de programación orientada a objetos
POO que tienen muchas similitudes entre sí, pero puntualmente nos enfocaremos
en Java, utilizaremos para tal efecto un modelo de fábrica de objetos, para
introducir los términos clase, objeto, método, propiedad, estático, dinámico, donde
la fábrica de objetos será el entorno de ejecución o JRE.
Clases en Java
Las clases son el centro de la Programación Orientada a
Objetos.
Algunos conceptos importantes de la POO son los siguientes:
Encapsulación. Las clases pueden ser declaradas como públicas
(public) y como package(accesibles sólo para otras clases del package).
La variable miembro y los métodos pueden ser public, private,
protected y package. De esta forma se puede controlar el acceso y evitar
un uso inadecuado.
Herencia. Una clase puede derivar de otra (extends), y en ese caso
hereda todas sus variables y métodos. Una clase derivada puede añadir
nuevas variables y métodos y/o redefinir las variables y métodos
heredados.
Polimorfismo. Los objetos de distintas clases pertenecientes a una
misma jerarquía o que implementan una misma interface pueden
tratarse de una forma general e individualizada, al mismo tiempo.
El polimorfismo tiene que ver con la relación que se establece entre la llamada
a un método y el código que efectivamente se asocia con dicha llamada. A esta
relación se llama vinculación (binding). La vinculación puede ser temprana (en
tiempo de compilación) o tardía (en tiempo de ejecución). Con funciones
normales o sobrecargadas se utiliza vinculación temprana (es posible y es lo
más eficiente). Con funciones redefinidas en Java se utiliza siempre vinculación
tardía, excepto si el método es final.
El polimorfismo es la opción por defecto en Java.
Herencia soportada por Java
Java no soporta herencia múltiple, es decir no podemos fabricar un objeto más
complejo con dos diferentes más simples, sino que sólo podremos heredar objetos
nuevos de un sólo objeto padre, que proveerá los métodos y propiedades básicas
que serán extendidas y/o ampliadas por el nuevo objeto. Es decir no podríamos
tener un objeto Lámpara Reloj que derive del objeto Lámpara y del objeto Reloj,
sino que tendríamos que usar otros mecanismos para proporcionar esa
funcionalidad, interfaces y alojamiento de objetos.
Esto podría comprenderse como:
Interfaces: Permiten que sean implementadas por objetos para adquirir
comportamiento, pero el comportamiento no es provisto por la interfaz, sino
que el programador debe proporcionar una manera eficaz de construir los
métodos definidos en dicha interfaz uno por uno. Pueden implementarse
varias interfaces al mismo tiempo, en todos los casos es necesario codificar
funciones o métodos.
Alojamiento: Podemos pensar que al objeto Lámpara le insertamos en su
interior un objeto Reloj entonces podemos llamar a los métodos del Reloj que
está en la Lámpara, esto lo veremos más adelante en algunos ejemplos. Ya no
sería la Lámpara Reloj, pero sería una Lámpara con Reloj.
Herencia: Nos permite crear un objeto nuevo en base a uno existente, es una
nueva clase de objeto, puede utilizar el alojamiento de otros objetos como
propiedades para adquirir funcionalidad.
Arreglos o Vectores.
Los arreglos son como un vector, con varias componentes incluso en
programación un arreglo puede representar una matriz de varias dimensiones. Por
ejemplo si tenemos 10 frases que enseñaremos según un número del 1 al 10,
podemos utilizar un vector de una sola dimensión, donde indicaremos con un
subíndice a los elementos que este mismo almacene.
En Java un arreglo se representa por un objeto que tiene un límite de elementos
al ser definido, o en alguna parte de nuestro programa le asignaremos un objeto
arreglo de cierto tipo. Los elementos que pondremos en nuestro arreglo de datos
deben estar definidos en cantidad, no en valor, si creemos que podemos necesitar
más o menos 10+/3 elementos asignaremos 13 por más que a veces usemos 7. Los
arreglos tienen una cantidad de elementos, pero el subíndice que usaremos para
acceder al contenido de cada elemento irá del 0 a ELEMENTOS
Expresiones regulares
Una expresión regular, a menudo llamada también patrón, es una expresión
que describe un conjunto de cadenas sin enumerar sus elementos. Por ejemplo, el
grupo formado por las cadenas Handel, Händel y Haendel se describe mediante el
patrón "H(a|ä|ae)ndel".
En el área de la programación las expresiones regulares son un método por
medio del cual se pueden realizar búsquedas dentro de cadenas de caracteres. Sin
importar si la búsqueda requerida es de dos caracteres en una cadena de 10 o si es
necesario encontrar todas las apariciones de un patrón definido de caracteres en un
archivo de millones de caracteres, las expresiones regulares proporcionan una
solución para el problema.
Adicionalmente, un uso derivado de la búsqueda de patrones es la validación de
un formato específico en una cadena de caracteres dada, como por ejemplo fechas o
identificadores.
NetBeans
La plataforma NetBeans permite que las aplicaciones sean desarrolladas a partir de un
conjunto de componentes de software llamados módulos. Un módulo es un archivo Java que
contiene clases de java escritas para interactuar con las APIs de NetBeans y un archivo
especial (manifest file) que lo identifica como módulo. Las aplicaciones construidas a partir
de módulos pueden ser extendidas agregándole nuevos módulos. Debido a que los módulos
pueden ser desarrollados independientemente, las aplicaciones basadas en la plataforma
NetBeans pueden ser extendidas fácilmente por otros desarrolladores de software.
La Plataforma NetBeans
Durante el desarrollo del NetBeans IDE ocurrió una cosa interesante. La gente empezó a
construir aplicaciones usando el NetBeans core runtime con sus propios plug-ins, de hecho,
esto se convirtió en un mercado bastante grande.
La Plataforma NetBeans es una base modular y extensible usada como una estructura de
integración para crear aplicaciones de escritorio grandes. Empresas independientes
asociadas, especializadas en desarrollo de software, proporcionan extensiones adicionales
que se integran fácilmente en la plataforma y que pueden también utilizarse para desarrollar
sus propias herramientas y soluciones.
La plataforma ofrece servicios comunes a las aplicaciones de escritorio, permitiéndole al
desarrollador enfocarse en la lógica específica de su aplicación. Entre las características de
la plataforma están:
6
Administración de las interfaces de usuario (ej. menús y barras
de herramientas)
Administración de las configuraciones del usuario
Administración del almacenamiento (guardando y cargando cualquier tipo de
dato)
Administración de ventanas
Framework basado en asistentes (diálogos paso a paso)
JDBC(Java Data Base Conection)
Introducción a JDBC
JDBC es un API de Java para ejecutar sentencias SQL. Está formado por un conjunto
de clases e interfaces programadas con el propio Java. Permite interactuar con bases de
datos, de forma transparente al tipo de la misma. Es decir, es una forma única de
programar el acceso a bases de datos desde Java, independiente del tipo de la base de
datos. JDBC realiza llamadas directas a SQL.
Existen cuatro categorías de drivers que soportan la conectividad JDBC3, por ejemplo:
puente JDBC-ODBC, drivers de red, drivers nativos.
En la práctica utilizaremos un driver específico que permite la comunicación directa de
JDBC con SQL Server.
Este driver es necesario tenerlo instalado en el cliente y cambiar la variable
CLASSPATH para que contenga la ruta del fichero .jar o de las carpetas org y com del
driver. Para utilizarlo desde un entorno como el Eclipse, es necesario cambiar las
7
propiedades del proyecto y añadir el .jar del driver como un jar externo. Una vez
seleccionado el driver el resto del código es independiente del SGBD
Paquete java.sql
Las clases que conforman el API JDBC4 se encuentran agrupadas en el paquete
java.sql. Este paquete contiene clases para cargar los drivers, realizar las conexiones a las
bases de datos, consultar los datos y manejar un conjunto de registros. También posee las
clases para el manejo de excepciones que se produzcan en el acceso a bases de datos. A
continuación mostramos un esquema en el cual se encuentran las interfaces y clases
fundamentales del paquete java.sql.
8
La interface Driver es la interface que todos los drivers deben implementar. Cada driver
que quiera ser utilizado para conectarse a una base de datos desde Java debe suministrar una
clase que implemente la interface Driver.
La clase DriverManager proporciona el servicio básico para manejar un conjunto de
drivers JDBC.
La interface Connection representa una conexión o sesión con una base de datos
específica.
La clase Types define las constantes que se utilizarán para identificar tipos genéricos
SQL, estas constantes son llamadas tipos JDBC.
Las clases Date y Time se utilizan para representar los valores de fecha y hora desde el
código de Java permitiendo a JDBC identificarlos como SQL DATE y SQL TIME.
Las interfaces DatabaseMetaData y ResulSetMetaData permitirán obtener
información referente al diseño y estructura de la base de datos y de los ResultSet que se
obtengan respectivamente.
La clase SQLException representa a las excepciones relacionadas con el acceso a base
de datos y proporciona información acerca del error que ha ocurrido.
Pasos para crear una aplicación JDBC
Cargar el driver JDBC.
Conectarse a la Base de Datos
utilizando la clase Connection.
Crear sentencias SQL, utilizando objetos de tipo Statement.
Ejecutar las sentencias SQL a través de los objetos de tipo Statement.
9
En caso que sea necesario, procesar el conjunto de registros
resultante utilizando la clase ResultSet.
Para comunicar Java con un SGB Para comunicar Java con un SGBD
Hay que conocer:
Fichero físico que contiene el driver (jar/zip) (debe estar incluido en el
CLASSPATH de la aplicación)
Nombre de la clase driver de Java (opcional)
URL de conexión
Algunos driver JDBC
MySql
ü Clase Driver : com.mysql.jdbc.Driver
ü URL de Conexión:
jdbc:mysql://<host>/<database> Fichero .jar/.zip:
mysql-connector-java-5.0.4-bin.jar
SQLServer
Clase Driver: com.microsoft.jdbc.sqlserver.SQLServerDriver
URL de Conexión: jdbc:microsoft:sqlserver://localhost:1433
Fichero .jar/.zip: mssqlserver.jar, msbase.jar, msutil.jar
AWT y Swing
Los componentes que se utilizan en Java para crear interfaces gráficas de usuario se
agrupan en dos paquetes (y sus correspondientes subpaquetes):
java.awt (Abstract Window Toolkit)
10
Los componentes AWT dependen de las facilidades gráficas ofrecidas por cada sistema
operativo: los programas escritos con AWT tendrán un “look and feel” distinto en
Windows y en UNIX.
javax.swing
SWING es 100% Java y, por tanto, completamente independiente de la plataforma: los
componentes gráficos se pintan en tiempo de ejecución (por lo que las aplicaciones
SWING suelen ser algo más lentas que las AWT).
En la práctica, las aplicaciones Java con interfaces gráficas de usuariosuelen mezclar
AWT y SWING (porque AWT se encarga de toda la gestión de eventos y SWING ofrece
componentes más sofisticados).
Frames
Los frames (marcos) son ventanas en las que se pueden colocar otros controles de los
que se utilizan para crear las interfaces gráficas de usuario (botones, etiquetas, cajas de
texto, listas desplegables, menús, etcétera).NG
2.- Diseño
Para el diseño del programa se utilizaron cierto tipo de expresiones regulares y ciertas librerías
tales como:
11
^ Comienzo de una línea
$ Fin de una línea
[ab a, b, o c
c]
[^a Cualquier caracter
bc] excepto a, b, o c
(negación)
\\ Representa
obligatoriedad
| Representa v/ó
d{2 Número de dígitos para
} cierta expresión (en
este caso 2)
ostermiller.jar Es una librería la cual utilizamos para codificar y
decodificar el password del administrador.
MySQL JDBC JDBC es un API de Java para ejecutar sentencias SQL.
PhpmyAdmin
Para el diseño también se utilizaron JPanel, JFrame y JTextArea para mostrar los resultados y
lo demás ha sido implementado con cosas ya utilizadas anteriormente.
3.- Implementación
¿COMO FUNCIONA NUESTRO PROGRAMA?
Inicialmente el programa nos nuestra una ventana de login donde debemos ingresar
nombre de usuario y contraseña de administrador, previamente el administrador debe
estar registrado.
12
Si los parámetros son ingresados incorrectamente (No consta como administrador) el
programa desplegara una pantalla de error hasta que los datos sean ingresados
correctamente.
Si los datos del administrador son ingresados correctamente se desplegara un Frame
con toda la información que nuestro proyecto contiene.
Aquí el usuario podrá interactuar con el programa ya sea añadiendo o
eliminando los campos expuestos en el Frame.
13
Si el usuario decide trabajar en la parte de Administradores presentara las
siguientes opciones:
Ø Insertar Administrador
Se mostrara un nuevo Frame con los campos que describen la información personal del nuevo
administrador, cada uno de estos se encuentra validado mediante expresiones regulares
correspondientes a los mismos. Si alguno de los datos ingresados son incorrectos aparecerá un
mensaje de error indicando cual ha sido el error cometido por el usuario. Así:
14
Caso contrario si los datos ingresados por el usuario son correctos, se mostrara lo siguiente:
Así el nuevo administrador estará listo para acceder en un nuevo login de usuario.
Ø Eliminar Administrador
Aquí el usuario tiene la libertad de eliminar a cualquier persona de la lista de administradores
excepto el usuario admin que ha sido tomado como root de nuestro programa.
Si el usuario decide trabajar en la parte de Productos presentara características
similares a lo mencionado en la parte de Administradores.
15
Si el usuario decide trabajar en la parte de Clientes presentara características
similares a lo mencionado en la parte de Administradores.
16
Si el usuario decide trabajar en la parte de Órdenes presentara las siguientes
características.
Ø Agregar orden
El usuario deberá insertar la C.I. del cliente en cuestión, el programa
detectara si la identificación existe o no dentro de nuestra base de datos, diviendose
así el proceso en dos partes:
1. Para un nuevo cliente
17
Aparecerá el siguiente mensaje:
Para nuestro ejemplo hemos insertado la C.I. 4534231213, la misma que no se
encuentra registrada en nuestra base de datos, por tanto el programa permite crear un
nuevo registro del cliente.
Una vez ingresados los datos del cliente se creara la orden de compra.
18
2. Para un cliente ya existente
Al ingresar la C.I. el programa automáticamente detectara que la identificación ya existe
en nuestra base de datos y así se mostrara instantáneamente la orden de compra con los
datos completos del cliente registrado.
Una vez ingresados los datos completos del cliente a la orden de compra se
procederá a elegir los productos que este necesite adquirir a través del botón agregar
ítem desplegándose la siguiente ventana:
19
Aquí el cliente elegirá el producto y la cantidad que desea comprar, todos los productos
seleccionados se añadirán a la orden de compra creada a dicho cliente mostrando el valor
total a pagar.
Una vez finalizada la elección de productos se procederá a realizar la compra respectiva
presionando el botón comprar. Apareciendo un mensaje de confirmación y así se creara la
orden en nuestra base de datos con sus respectivos campos.
20
Como última instancia tenemos la pestaña About donde se especifica el objetivo de
nuestro programa y muestra lista de integrantes de grupo (Poogramers).
21
PRUEBAS
Para constatar que nuestro programa está funcionando adecuadamente, es necesario verificar
que los cambios que se realizan en la interfaz gráfica afecten a nuestra base de datos realizando lo
siguiente:
ü Iniciamos un explorador en cual ingresaremos la dirección http://localhost/phpmyadmin/
para cargar nuestra base de datos.
ü Una vez localizada la base podemos observar las distintas entidades con sus respectivos
campos utilizados en el programa.
ü Dentro de cada una de las entidades se podrán visualizar los cambios efectuados a través
de la interfaz gráfica.
A continuación presentaremos un ejemplo de los cambios realizados en el programa.
TABLA CLIENTES
22
TABLA ORDEN
TABLA PRODUCTO
23