documentacion final
Post on 08-Apr-2016
291 Views
Preview:
DESCRIPTION
TRANSCRIPT
PHARMACY CONTROL CENTER Proyecto Final
29 DE MAYO DE 2013 TEAM UMBRELLA Farmacias Torres
TEAM UMBRELLA 1
Proyecto Final de la materia de Fundamentos de Ingeniería de
Software
Alumno: Emanuel Chablé Concepción
Emanuel.chable@gmail.com
Alumna: Janeth Velázquez Guzmán
valentine_javg23@hotmail.com
Versión: 1.0
TEAM UMBRELLA 2
Datos del Proyecto
Título del proyecto: Pharmacy Control Center
Nombre del Equipo del proyecto: Team Umbrella
Autores: Emanuel Chablé Concepción y Janeth Velázquez Guzmán
Materia: Fundamentos de Ingeniería de Software
Director: Nicolás Torres Martínez
Empresa: Farmacias Torres
TEAM UMBRELLA 3
Contenido 1. Introducción ................................................................................................................................ 5
1.1 Organización de la documentación ..................................................................................... 5
1.2 Situación .............................................................................................................................. 6
1.3 Motivación .......................................................................................................................... 6
1.4 Alcance ................................................................................................................................ 7
1.5 Objetivo General ................................................................................................................. 7
1.5.1 Objetivos ..................................................................................................................... 7
2 Datos de la Empresa y/o Organización ....................................................................................... 8
3 Planeación del proyecto de Software ....................................................................................... 10
3.1 Diagrama de Gantt ............................................................................................................ 10
3.2 Informe del Presupuesto ................................................................................................... 10
4 Análisis y Administración de los riesgos del proyecto de software .......................................... 12
5 Desarrollo del proyecto de TI .................................................................................................... 14
5.1 Metodología de desarrollo ................................................................................................ 14
5.1.1 Metodología escogida ............................................................................................... 16
6 Consideración para el desarrollo de proyectos de sistemas de información ........................... 18
6.1 Análisis inicial .................................................................................................................... 18
6.2 Análisis de requerimientos ................................................................................................ 18
6.2.1 Requerimientos funcionales...................................................................................... 18
6.2.2 Requerimientos no funcionales ................................................................................ 19
6.3 Planificación ...................................................................................................................... 19
7 Especificación ............................................................................................................................ 20
7.1 Diagramas de Flujo ............................................................................................................ 20
7.1.1 Actividades del personal ........................................................................................... 21
7.2 Casos de uso ...................................................................................................................... 23
7.2.1 Aplicación de escritorio ............................................................................................. 24
7.3 Diagrama de Clases ........................................................................................................... 36
7.4 Tabla de la Base de Datos.................................................................................................. 37
7.4.1 Diagrama de Entidad – Relación ............................................................................... 38
7.4.2 Diccionario de datos .................................................................................................. 39
8 Construcción y Desarrollo de la Aplicación ............................................................................... 41
8.1 Diagrama de estructura ..................................................................................................... 41
TEAM UMBRELLA 4
8.2 Descripción de Módulos .................................................................................................... 42
8.3 Diseño de interfaz externa ................................................................................................ 43
8.4 Script (Código del software) .............................................................................................. 46
8.4.1 Código fuente de Inicio de Sesión ............................................................................. 46
8.4.2 Código fuente de la ventana principal con sus módulos. ......................................... 53
9 Prueba del sistema .................................................................................................................. 102
9.1 Matriz de tipos de pruebas ............................................................................................. 102
10 Puesta en Marcha del Proyecto .......................................................................................... 103
10.1 Instalación del proyecto .................................................................................................. 103
11 Documentación ................................................................................................................... 103
11.1 Técnica operativa ............................................................................................................ 103
11.2 Manual técnico ................................................................................................................ 104
11.3 Manual de usuario .......................................................................................................... 104
11.4 Observaciones ................................................................................................................. 111
11.5 Recomendaciones ........................................................................................................... 111
12 Conclusión ........................................................................................................................... 111
13 Anexos ................................................................................................................................. 112
13.1 Cuestionario .................................................................................................................... 112
13.2 Análisis del cuestionario .................................................................................................. 113
TEAM UMBRELLA 5
1. Introducción
Este documento pretende materializar el trabajo realizado durante el desarrollo del proyecto final
de Pharmacy Control Center. Se ha realizado la documentación conforme el modelo más realista
posible, así como la descripción adecuada de cada una de las fases por las que generalmente pasa
un proyecto de estas características (desarrollo de software).
1.1 Organización de la documentación
La documentación se ha estructurado de la siguiente forma:
En el capítulo introducción se presenta el proyecto y se definen los conceptos importantes que
envuelven su desarrollo, ya sea las principales motivaciones y objetivos, así como la metodología a
seguir durante todo el periodo de desarrollo.
Seguidamente se realiza un análisis inicial de todos los elementos importantes a tener en cuenta
antes de comenzar su desarrollo, incluyendo el análisis de requerimientos del producto, una
planificación de tiempo detallada, así como un análisis sobre las alternativas tecnológicas para llevar
a cabo su implementación. El capítulo finaliza con una descripción detallada del análisis económico
realizado inicialmente.
A continuación encontramos la descripción de cada una de las fases más comunes en el desarrollo
de software. Primero se presenta la especificación, incluyendo los casos de uso de cada una de las
funcionalidades de la aplicación a desarrollar, así como su modelo conceptual y de comportamiento.
Después encontramos toda la fase de diseño, dividida en la arquitectura lógica del sistema.
Finalmente, en el capítulo de implementación y en el de pruebas se documentan todas las
funcionalidades desarrolladas durante el proyecto, y las pruebas realizadas de la aplicación.
Una vez se ha descrito las etapas más comunes en el desarrollo de software, se da un repaso a la
planificación realizada inicialmente analizando las posibles desviaciones y comprobando si los
objetivos iniciales marcados se han cumplido. También se expresan las sensaciones y experiencias
vividas, así como mejoras de la aplicación, todo ello en el capítulo de conclusiones, ampliaciones y
mejoras.
Finalmente, encontramos un glosario, donde se describen los acrónimos utilizados durante toda la
documentación, bibliografía y anexos, donde se encuentran pequeños documentos que permiten la
ampliación y concretización de algunas partes mencionadas durante todo el documento, así como
otra diversa documentación y un manual de usuario.
TEAM UMBRELLA 6
1.2 Situación
En la era en que vivimos, el rápido avance en el ámbito tecnológico ha permitido mejorar
considerablemente las herramientas de trabajo en el ámbito laboral y, más concretamente en el
ámbito de gestión de negocios, los negocios que están a la vanguardia tecnológica tienden a tener
un mejor control de sus recursos, llevándole la delantera a los negocios que emplean tecnologías
tradicionales, al día de hoy esto es una situación que afecta gravemente a los negocios pequeños
que no son gestionados por tecnologías de la información, esto se debe ya sea porque el negocio
no cuenta con los recursos para implementar la tecnología o por que el dueño del negocio tiene una
resistencia al cambio, esta situación ha provocado que muchos negocios cierren pues sus
competidores les tomaron la delantera al implementar tecnologías de información para optimizar
el control de sus recursos.
Si bien hay negocios que desean implementar estas tecnologías de control, carecen de conocimiento
o personal para implementarlas y/o mantenerlas, a esta situación se le agrega lo costoso que puede
ser para un negocio pequeño la implementación de estas tecnologías.
1.3 Motivación
En estos tiempos, donde el nivel de demanda es muy grande, emplear sistemas tradicionales para
el manejo de comercios dedicados a la venta de fármacos se ha convertido en algo obsoleto y
contraproducente, los clientes requieren de un servicio muy eficiente, las nuevas generaciones
están acostumbradas a un servicio rápido, eficiente y de calidad, es por ello que se crea el software
Pharmacy Control Center, este software de control permitirá al administrador del negocio llevar un
control de: Empleados, Mercancía disponible, Control de proveedores, Ventas más optimas y
Generación de reporte de ventas. Esta herramienta que destaca por ser intuitiva de fácil manejo y
muy eficiente, se propone aumentar el rendimiento en el control de inventarios e empleados,
además de facilitar las ventas.
Agregando que el software Pharmacy Control Center, fue diseñado para ser de bajo costo para los
negocios y que cuenta con la facilidad de poder instalarlo en cualquier sistema, darle mantenimiento
y actualización, ya que fue desarrollado en lenguaje JAVA.
TEAM UMBRELLA 7
1.4 Alcance
Una de las primeras tareas en todo proyecto, es la definición de su alcance, o dicho de otra forma,
delimitar las funcionalidades a desarrollar (en el caso de un producto de software) para poder
cumplir con todos sus objetivos, al finalizar el proyecto.
Se podría decir que un proyecto que en el que no se defina su alcance de forma correcta, tendría
muchas posibilidades de ser un proyecto condenado a grandes problemas en su planificación,
ejecución y control, por lo que su probabilidad de éxito se reduciría considerablemente. En el caso
de Pharmacy Control Center, es muy importante definir su alcance de forma correcta, ya que una
ampliación considerable de sus funcionalidades, podría convertirlo en un producto no deseado, y
ha de ser una herramienta muy fácil de usar:
Se pretende que los clientes puedan gestionar su negocio y puedan ver una serie de estadísticas de
ventas y control de recursos. Para ello, se pretende desarrollar una aplicación de escritorio
multiplataforma, gestionada por una base de datos que se encontrar en un servidor local dedicado,
cabe mencionar que siendo un solo servidor local dedicado, no se garantiza el 100% de
disponibilidad de este en caso de algún incidente.
1.5 Objetivo General
El objetivo principal de Pharmacy Control Center es facilitar el control de recursos y ventas del
negocio, de tal manera que el dueño puede emplear su tiempo de control del negocio de una
manera más óptima. Para ello, se necesitan alcanzar los siguientes objetivos:
Desarrollar una aplicación de escritorio
Que el software desarrollado sea multiplataforma
1.5.1 Objetivos
De la aplicación de escritorio, soporte multiplataforma:
o Inicio de sesión para cada uno de los empleados, lo que permitirá la realización de
ventas, consultas y reportes.
o Inicio de sesión para administradores, tendrá acceso completo a todo el sistema.
o Interfaz limpia e intuitiva, el software destaca por su facilidad de uso.
o Compatibilidad con todos los sistemas operativos (Windows, Mac y Linux).
TEAM UMBRELLA 8
2 Datos de la Empresa y/o Organización
Nombre de la Empresa: Farmacias Torres
Ubicación: Calle Abasolo #25, Tila, Chiapas
Antecedentes:
Filosofía Organizacional:
Misión:
Visión:
Objetivos:
Valores:
Organigrama:
TEAM UMBRELLA 9
Análisis FODA
Se procede a mostrar el análisis de investigación FODA, que se realizó, para una mejor comprensión
sobre la situación actual del cliente.
Fuerzas (+) Debilidades (-)
Internas
Apertura al cambio por parte del personal
Buna ubicación de la “Farmacia”
Buena percepción de la calidad de los servicios y productos ofrecidos
El personal esta desmotivado
El edificio es pequeño
Externas
Oportunidades
Poca competencia
Se cuenta con varios proveedores
Alternativas Fuerzas / Oportunidades
El personal se encuentra capacitado en técnicas iterativas de mejora de calidad.
Existe coordinación con otros proveedores para cubrir todas las necesidades de los usuarios
Alternativas Debilidades /
Oportunidades
Remodelar las instalaciones
Otorgar incentivos por desempeño a los trabajadores
Amenazas
Carreteras en mal estado
Sueldos bajos
Falta de presupuesto
Paradigmas de los proveedores
Alternativas Fuerzas / Amenazas
Recuperación de costos por medicamentos y servicios con ofertas a los usuarios
Alternativas Debilidades /
Amenazas
Revisión de procedimientos para disminuir los costos y tiempos de espera.
TEAM UMBRELLA 10
3 Planeación del proyecto de Software A continuación se procede a mostrar la información en lo referente a los tiempos que se emplearon
en la elaboración y desarrollo del proyecto, al igual de sus costos.
3.1 Diagrama de Gantt A continuación podemos ver de forma detallada, toda la planificación inicial representada por un
diagrama de Gantt, todas las tareas planificadas inicialmente:
3.2 Informe del Presupuesto Con el cómputo de todas las horas dedicadas al proyecto, se puede llevar a cabo el análisis
económico total. Fundamentalmente va estar compuesto por el valor de los recursos humanos y
recursos materiales. A continuación se va a detallar el coste de cada uno de ellos.
1. Recursos humanos: Durante todo el desarrollo del proyecto, se ha utilizado dos únicos
recursos humanos que han asumido todos los roles que podamos encontrar en un equipo
de desarrollo de software, los trabajos fueron divididos por mitad, aunque en un caso real,
estos roles serian desempeñados por personas calificadas para ello. Los costes han sido
calculados mediante el cómputo total de horas de desarrollo, y la asignación de recursos a
cada una de las tareas realizadas ha sido realizada de forma aproximada, con 30 horas de
carga de trabajo semanal, y sobreesfuerzo los últimos meses del proyecto.
Rol Horas de trabajo $/hora Coste total en $
Gestor de proyecto 55 50 2,750
Analista 80 40 3,200
Programador 180 30 5,400
Diseñador 130 30 3,900
Tester 70 25 3,500
Total recursos 18,750
Tabla 25: Costes totales de recursos humanos
TEAM UMBRELLA 11
2. Recursos físicos: Podemos clasificar los recursos físicos en recursos software y hardware.
En cuanto a los recursos software, uno de los objetivos era utilizar todo el material gratuito
(software libre) para minimizar costes, y por ello el software utilizado, en gran parte ha sido
libre, a excepción de Microsoft office, Visio y Project (con licencias de estudiante),
CorelDraw y Photoshop (Versiones de Prueba). En cuanto al material hardware, los mayores
costes son el equipo utilizado para el desarrollo de la aplicación, y el servidor beta local,
muy importante para la parte de testeo de funcionalidades. Por otro lado, una vez acabado
y desarrollado todo el proyecto en el servidor beta local (propio), se va a necesitar un
servidor dedicado que cuente con las instalaciones correctas.
Software Tipo Coste total en $
Microsoft Windows 8 Licencia Universitaria 0
Microsoft Visio 2013 Licencia Universitaria 0
Microsoft Project 2013 Licencia Universitaria 0
NetBeans Gratuito 0
CorelDraw X6 Periodo de Prueba 0
Adobe Photoshop CS6 Periodo de Prueba 0
ArgoUML Gratuito 0
Total recursos 0
Tabla 26: Costes del software utilizado
Hardware Cantidad Precio Normal
(por equipo)
Depreciación Coste total en
$
Equipos portátiles 3 12,000 30% 2,307.94
Servidor 1 6,000 30% 246.57
Impresora 1 8,000 30% 394.52
Total recursos 2,949.03
Tabla 27: Costes del hardware utilizado
Otros recursos Cantidad Precio Normal
(por recurso)
Depreciación Coste total en
$
Papelería
(paquete de
cartuchos de
tinta, hojas
blancas, etc.)
2 2,000 30% 82.19
Luz, Teléfono,
etc. 4 5,000 30% 320.54
Total recursos 402.73
Tabla 28: Costes de otros recursos
Entonces, el coste total de los recursos presupuestados a Pharmacy Control Center, asciende a
$ 22,101.76.
TEAM UMBRELLA 12
4 Análisis y Administración de los riesgos del proyecto de software
A petición de nuestro cliente, se procede a mostrar el análisis de riesgo que se estudió para la
organización, se debe destacar que la inclusión de este análisis es un extra, ya que el mismo no
debe de ir en las documentaciones, solo por esta vez se ofrece una excepción.
No Riesgos Probabilidad Impacto Plan de
Contención Plan de
Contingencia
1 Un mal uso del
cliente 4% Critico
Crear un manual del software
Reparar el daño
2 Abandono de
un miembro del equipo
8%
Catastrófico
Establecer un contrato con
todos los integrantes
Buscar a otro programador
3
El cliente solicita
modificación del software
6%
Catastrófico
Ser claros desde el principio
Modificar el software
4 El cliente viola
el contrato
6%
Catastrófico
Explicar al cliente que no puede
violar el contrato
Tratar de llegar a un
acuerdo
5
Un diseño
inadecuado del sistema
2%
Medio
Hablar con el personal y
establecer un buen diseño de
software
Reparar los errores del software
6
Perdida del proyecto
15%
Catastrófico
Tener varios respaldo del
proyecto
Hablar de lo ocurrido con el cliente y tratar de conseguir más tiempo
7 Accidente de
un miembro del equipo
5%
Critico
Tener el mayor cuidado en la seguridad de
todo el personal
Buscar nuevo
personal
8 El proyecto no es terminado a
tiempo
8%
Catastrófico
Hablar con todo el personal sobre
el tiempo de entrega
Solicitar al cliente tiempo
extra
9
La interfaz gráfica no se
ajusta al software
2%
Medio
Comunicación entre
programador y diseñador
Adaptar la
interfaz
TEAM UMBRELLA 13
10
El personal tarda en la entrega del
subsistema del proyecto
5%
Critico
Dar a conocer fechas límites de
cada miembro
Presionar a la persona para
la entrega
11 Los recursos no se encuentran
disponibles
6%
Catastrófico
Buscar de antemano todo los recursos a
utilizar
Buscar nuevas alternativas
12
Error en la
estimación del presupuesto
6%
Catastrófico
Planear con
anticipación el gasto
El líder del proyecto
pondrá de su bolsillo el resto
del dinero
13
Falta de comunicación
entre los miembros del
equipo
2%
Medio
Dejar en claro
que es un trabajo de equipo
Buscar maneras más
confiables para una
mejor comunicación
14
Falta de
conocimiento del proyecto
2%
Medio
Dar a conocer la mayor
información de lo que el cliente
ha solicitado
Repasar todo
el informe con el personal
15
Problema familiar de un miembro del
equipo
2%
Medio
Problemas familiares no
mezclarse con el trabajo
Tratar de ayudar al
compañero
16 La muerte de un integrante
del equipo
4%
Critico
Tener el mayor cuidado en la seguridad de
todo el personal
Buscar un
nuevo personal
17
Fallo de todas
la herramientas a utilizar
6%
Catastrófico
Revisar que todo las herramientas
a utilizar se encuentre en buen estado
Buscar nuevas herramientas
18
Falta de interés
por parte del cliente
3%
Critico
Dar a conocer los avances al
cliente para que vaya agarrando
interés en su software
Cancelar el proyecto para el desinterés
del cliente
TEAM UMBRELLA 14
19
La recolección
de datos en pobre
2%
Critico
Recolectar la mayor
información posible
Buscar información
más extensa y evitar el
fracaso del proyecto
20
El software no cumple con el propósito del
cliente
6%
Catastrófico
Planear con anticipación todo
el funcionamiento
del software
Reparar todas las fallas
encontradas
5 Desarrollo del proyecto de TI
5.1 Metodología de desarrollo
Una vez visto los objetivos que hay que alcanzar, es necesario desarrollar un método de trabajo que
nos permita llevar a cabo todo lo planteado.
Existe una cantidad considerable de modelos de desarrollo de software, por lo que solo se
estudiaran algunos de los más conocidos en ingeniería de software.
Solo se realizara una breve explicación de cada uno de ellos, pero no se hará un análisis extenso ya
que no se ha creído necesario.
Las metodologías se han dividido en dos vértices.
Metodologías genéricas
Las siguientes metodologías son consideradas de enfoque más genérico en el desarrollo de
proyectos de software. Todas ellas pueden clasificarse en frameworks lineales y/o iterativos.
Modelo en cascada (lineal): proceso secuencial de desarrollo de las fases genéricas de
desarrollo de software (análisis de requerimientos, especificación, diseño, implementación,
pruebas y mantenimiento), que permite cierta superposición y flujo entre fases. Hace
hincapié en la utilización de documentación escrita para llevar un control riguroso del
proyecto.
Lo bueno de este modelo es que el tiempo invertido en la especificación y diseño de
software dará más posibilidades al proyecto para alcanzar sus objetivos, así como evitara
posibles desvíos de planificaciones realizadas, además al no haber paralelismo, el cliente
específico como quiere el producto.
TEAM UMBRELLA 15
Lo malo es su estrecha rigidez, adecuada en casos de desarrollos estables, sin cambios en
requerimientos y desvíos de planificación fácilmente gestionables. Además, si al cliente no
le gusta el producto final, probablemente se tendría que volver a comenzar todo el proceso,
por lo que es una metodología lenta.
Prototipado (iterativo): Es un framework de actividades dedicado al desarrollo de software
prototipo, que debe ser construido en poco tiempo y con el uso de pocos recursos, y una
vez aprobado, cuando se puede iniciar el verdadero desarrollo de software. Se centra en las
necesidades del cliente lo que permite al desarrollador entender mejor lo que se ha de
hacer:
Este modelo es útil cuando el cliente conoce los objetivos generales para el software, pero
no identifica sus requerimientos de entrada o salida. También ofrece un mejor enfoque
cuando los responsables del desarrollo no están seguros de la eficacia de ciertos procesos
de desarrollo.
Lo malo es el tiempo requerido en un proyecto de estas características, y que la rápida
implementación de sistemas para que el cliente pueda ver ciertas funcionalidades, puede
hacer que se desatiendan otros aspectos importantes como la calidad y el mantenimiento
del proyecto a largo plazo.
Incremental (lineal e iterativo): Esta metodología provee de una estrategia para controlar
la complejidad y los riesgos en el desarrollo de un producto, ya que se van desarrollando
ciertas partes que después son revisadas. De esta forma se va produciendo el software de
forma incremental. Para ello se definen los requerimientos antes de proceder con lo
evolutivo y se realiza una mini-cascada de desarrollo de cada uno de los incrementos del
sistema.
Modelo útil, al ser desarrollo incremental donde se va aprendiendo del desarrollo de partes
anteriores.
Espiral (lineal e iterativa): Las tareas a realizar según esta metodología, conforman una
espiral en la que cada bucle e iteración representa un conjunto de actividades no fijadas a
priori, si no que van eligiendo en función del análisis de riesgo. Cada viaje atraviesa cuatro
cuadrantes básicos: (1) determinar objetivos, alternativas y desencadenantes de la
iteración, (2) evaluar alternativas, identificar y resolver riesgos, (3) desarrollar y verificar
resultados de la iteración y (4) plan de la próxima iteración.
Lo positivo del modelo, es que se centra en la evaluación y reducción del riesgo del
proyecto dividiéndolo en segmentos más pequeños y proporcionando más facilidad de
cambio durante el desarrollo.
TEAM UMBRELLA 16
Metodologías ágiles
Las alternativas a los métodos genéricos, que suelen ser menos adaptativos, pesados y laboriosos,
es el desarrollo ágil de software, un concepto de ingeniería de software que promueve iteraciones
en el desarrollo a lo largo del ciclo de vida del proyecto. La mayoría de las metodologías agiles
minimizan riesgos, mediante el desarrollo en cortos lapsos de tiempo de ciertas funcionalidades.
Cada una de las iteraciones incluye el ciclo de vida genérico de un proyecto (análisis de
requerimientos, especificación…) y al final de cada una de ellas se han de evaluar las prioridades del
proyecto.
Estos métodos enfatizan las comunicaciones entre individuos en vez de la documentación. La
mayoría de equipos agiles mantienen una colaboración con sus clientes de tal forma que prevalezca
sobre la negociación de contratos, además de enfatizar el software funcional como primera medida
del progreso. Es por lo que este tipo de métodos son criticados como “indisciplinados” por la falta
de documentación técnica.
ILUSTRACIÓN 1: DEFINICIÓN GRAFICA PARA LOS MÉTODOS DE DESARROLLO AGILES
Algunas de las metodologías agiles más conocidas son Scrum, Programacion Extrema, Kanban, Test-
Driven Desing y Open Unified Process, la mayoría de ellos basados en principios similares en torno
al proceso iterativo e incremental.
5.1.1 Metodología escogida
La metodología seguida, aunque nunca de forma rigurosa, ha sido la de modelo en cascada con
algunos tintes de metodologías agiles en la parte de diseño.
La realización de una documentación inicial defendiendo el proyecto y su alcance, el análisis de
requerimientos, así como la especificación de funcionalidades, diseño, implementación y pruebas,
se ha realizado acorde al modelo en cascada.
TEAM UMBRELLA 17
En cuanto a la fase de mantenimiento, se podría decir que hay expectativas puestas en el futuro de
Pharmacy Control Center, por lo que habrá un mantenimiento del producto durante un tiempo
indeterminado.
Debido a pequeñas desviaciones en la toma de decisiones sobre el diseño de la aplicación (como
por ejemplo anexión de módulos en la interfaz del usuario), se han aplicado metodologías agiles, ya
que se tuvo que realizar una iteración de alguna funcionalidad agregada al software y aprobada por
el usuario.
A continuación podemos ver una descripción grafica del modelo en cascada utilizado
Ilustración 2: Descripción grafica del modelo en cascada
TEAM UMBRELLA 18
6 Consideración para el desarrollo de proyectos de sistemas de
información
6.1 Análisis inicial
En este capítulo se detalla el análisis realizado durante la fase inicial del proyecto. En primer lugar,
y como fase inicial de un proyecto de desarrollo de software, se realizó un análisis de
requerimientos, basados en los objetivos del proyecto, y que nos definen el sistema que tenemos
que construir. Seguidamente se realizó una planificación inicial de las tareas a llevar a cabo, con su
respectivo análisis económico. Finalmente se realizó un análisis de las tecnologías que se podían
utilizar, y así justificar la tecnología que finalmente se escogió.
Ilustración 17: Etapas de desarrollo de software (Análisis de Requerimientos)
6.2 Análisis de requerimientos
6.2.1 Requerimientos funcionales
De la aplicación de escritorio:
Alta, baja y modificación de productos, empleados y proveedores.
Consulta de medicamentos
Consulta de proveedores
Capacidad de gestionar ventas
Generación de reportes de ventas (Día, Semana y Mes)
TEAM UMBRELLA 19
6.2.2 Requerimientos no funcionales
Genéricos
Es necesaria la elaboración de un manual de usuario, para que todos nuestros clientes, a
pesar de ser una aplicación fácil de usar, conozcan los servicios y funcionalidades que ofrece
el software.
Usabilidad: El software ha de tener una interfaz limpia e intuitiva
Escalabilidad: Ha de ser posible añadir nuevas funcionalidades de forma sencilla
Utilidad: Las funciones de la aplicación han de ser útiles para el usuario
Portabilidad: El software será multiplataforma
Servidor de base de datos: Un servidor local dedicado, que almacenara la base de datos.
6.3 Planificación
Una vez definido el alcance del proyecto y sus requerimientos, la elaboración de la planificación es
más realista. Aunque la planificación ha sido elaborada en fase inicial de proyecto, se incluyen todas
las tareas a llevar a cabo para cumplir con éxito todos los objetivos fijados.
Al tener una fecha fijada con un cliente de antemano, la planificación del tiempo que va a durar todo
el desarrollo, se ha estimado en base al primer día en que el cliente solicito el producto. El tiempo
invertido se puede dividir en dos grandes secciones, detalladas a continuación:
Documentación: La memoria es el documento donde se encuentra toda la información
relacionada con el proyecto. Su elaboración está presente desde el día de inicio del
proyecto, con el fin de entender y justificar todas las decisiones tomadas en las diferentes
fases del proyecto, ya sea el estudio de mercado realizado, o la elección de la tecnología a
utilizar en cada una de las aplicaciones, así como toda la documentación técnica (análisis de
requerimientos, especificación, diseño, etc.).
Desarrollo: De la aplicación de escritorio su desarrollo y testeo depende de la capacidad de
conectividad de la aplicación, existe una gran dependencia entre el programa y la base de
datos que usara, por lo cual las dos serán desarrolladas simultáneamente.
TEAM UMBRELLA 20
7 Especificación
La especificación es un documento técnico que describe, en la forma más precisa posible y en
términos simples, las necesidades y funciones específicas de un determinado sistema.
Ilustración 31: Etapas de desarrollo de software (Especificación)
En el primer apartado se definirán los diagramas de flujo del personal de la empresa, después los
casos de uso, técnica que sirve para definir interacciones entre un sistema y sus actores, en
respuesta a un evento que inicia un actor principal sobre el sistema y que surgen de la captura de
requisitos funcionales del sistema. Primeramente se mostraran los diagramas de flujo, después los
diagramas de casos de uso, que definirán de forma gráfica los casos de uso, y seguidamente se
describirá cada uno de ellos de forma detallada.
En el segundo apartado se describirán los modelos conceptuales o diagramas de clases, diagramas
estáticos que describen la estructura del sistema, mostrando clases, atributos y relaciones entre
ellos.
Finalmente se describirá el modelo de comportamiento del sistema, formado por los diagramas de
secuencia del sistema y los contratos de las operaciones.
7.1 Diagramas de Flujo
Se procederá a mostrar los diagramas de flujo del personal de la farmacia, estos diagramas ya
fueron previamente aprobados por nuestro cliente y se mostraran para que se lleve una relación
de qué es lo que realiza el personal y como el programa deberá seguir esos patrones, las
funcionalidades específicas del programa se explicaran en los casos de uso.
TEAM UMBRELLA 21
7.1.1 Actividades del personal
Ilustración 32: Diagrama de flujo del servicio de salud
Ilustración 33: Diagrama de flujo de venta de fármacos
TEAM UMBRELLA 22
Ilustración 35: Diagrama de flujo de venta de productos
TEAM UMBRELLA 23
Ilustración 36: Diagrama de flujo de compra a proveedores
7.2 Casos de uso
Acabada de ver la definición de los casos de uso, se va a proceder a mostrar los actores y
diagramas para cada uno de los sistemas. Cabe destacar que hay dos sistemas diferentes, donde
los actores (que son toda entidad externa al sistema que guarda relación con este y que le
demanda una funcionalidad) estarán diferenciados debido a los requerimientos funcionales de
cada uno de los sistemas.
TEAM UMBRELLA 24
7.2.1 Aplicación de escritorio
Actores
En este sistema encontramos dos actores claramente diferenciados, el empleado que tendrá
acceso a funcionalidades limitadas, el cliente que no tendrá acceso a ninguna funcionalidad y el
administrador que tendrá acceso a las funcionalidades de todo el sistema.
Ilustración 37: Jerarquización de los actores de la aplicación de escritorio
Diagrama de casos de uso
A continuación podemos ver la siguiente figura que ilustra los casos de uso de la aplicación de
escritorio:
Ilustración 38: Diagrama de casos de uso del empleado
TEAM UMBRELLA 25
Ilustración 39: Diagrama de casos de uso del cliente
Ilustración 40: Diagrama de casos de uso del proveedor
Ilustración 41: Diagrama de casos de uso del administrador
TEAM UMBRELLA 26
Descripción de casos de uso
Seguidamente se detallan cada uno de los casos de uso de la aplicación de escritorio:
Acerca de la aplicación
Descripción: Se desea conocer más información de la aplicación que se está utilizando.
La información a mostrar se compone de agradecimientos e información de autoría.
Autores: Empleado y/o Administrador.
Precondiciones: -
Flujo Principal:
1. El usuario selecciona la opción “Acerca de” para obtener más información sobre la
aplicación.
2. El sistema muestra la información compuesta por agradecimientos del autor e
información de la empresa autora de la aplicación.
3. Acaba el caso de uso
Acceso al sistema
Descripción: Se desea identificarse en el sistema para acceder a las funciones del mismo.
Autores: Empleado y/o Administrador.
Precondiciones: Contar con una autenticación valida.
Flujo principal:
1. El usuario selecciona la opción de iniciar sesión en el sistema.
2. El sistema muestra una ventana solicitando usuario y contraseña.
3. El usuario introduce usuario y contraseña.
4. El sistema verifica los datos y asigna el nivel de privilegios (limitados o totales).
5. El sistema otorga acceso a las funciones
6. Acaba el caso de uso
Flujo Alternativo (datos incorrectos):
1. Si los datos son incorrectos, el sistema muestra un mensaje de error con la leyenda
“Usuario o Contraseña incorrectos”.
2. El caso de uso vuelve al punto 2 del flujo principal.
Flujo Alternativo (cancelación):
1. El usuario cancela el inicio de sesión del sistema
2. El caso de uso vuelve al punto 1 del flujo principal
Flujo Alternativo (conexión de datos):
1. Durante el inicio de sesión, el sistema determina que no hay conexión de datos.
2. El caso de uso vuelve al punto 1 del flujo principal.
TEAM UMBRELLA 27
Venta de fármacos
Descripción: Se desea vender un fármaco y/o producto.
Autores: Empleado y/o Administrador (Autentificado).
Precondiciones: -
Flujo principal:
1. El usuario selecciona la opción de ventas.
2. El sistema muestra una ventana solicitando se ingresen los productos y/o fármacos
a vender.
3. El usuario introduce los productos y/o fármacos que desea vender.
4. El sistema va mostrando los productos y/o fármacos, además de su precio conforme
se ingresan.
5. El usuario selecciona la opción vender.
6. El sistema muestra un mensaje de confirmación al usuario.
7. El usuario aprueba la venta.
8. El sistema registra la venta, imprime la información y actualiza la base de datos.
9. Acaba el caso de uso.
Flujo alterno (cancelación):
1. El usuario cancela la venta.
2. El caso de uso vuelve al punto 1 del flujo principal.
Flujo alterno: (conexión de datos):
1. Durante la venta, el sistema determina que no hay conexión de datos.
2. El caso de uso vuelve al punto 1 del flujo principal.
Generación de reporte de ventas
Descripción: Se desea generar el reporte de ventas del día.
Autores: Empleado y/o Administrador (Autentificado).
Precondiciones: El reporte deberá generarse al finalizar el día de labores.
Flujo principal:
1. El usuario selecciona la opción generar reporte.
2. El sistema muestra un mensaje de confirmación al usuario.
3. El usuario confirma la generación del reporte.
4. El sistema muestra al usuario la información de ventas del día, y la almacena en la
base de datos.
5. Acaba el caso de uso.
Flujo alterno (cancelación):
1. El usuario cancela la generación del reporte de ventas del día.
2. El caso de uso vuelve al punto 1 del flujo principal.
Flujo alterno (conexión de datos):
TEAM UMBRELLA 28
1. Durante la generación del reporte, el sistema determina que no hay conexión de
datos.
2. El caso de uso vuelve al punto 1 del flujo principal.
Consulta de productos y/o fármacos
Descripción: Se desea consultar la información de un producto y/o fármaco.
Autores: Empleado y/o Administrador (Autentificado).
Precondiciones: Conocer el ID o Nombre del producto y/o fármaco.
Flujo principal:
1. El usuario selecciona la opción consultas.
2. El sistema muestra una ventana con opción de búsqueda.
3. El usuario ingresa el ID o Nombre del producto y/o fármaco a consultar.
4. El sistema muestra la información del producto encontrado.
5. Acaba el caso de uso.
Flujo alterno (producto y/o fármaco no encontrado).
1. El sistema muestra un mensaje de error informando que el producto y/o fármaco
buscado no se encuentra en la base de datos.
2. El caso de uso vuelve al punto 2 del flujo principal.
Flujo alterno (Conexión de datos):
1. Durante la búsqueda, el sistema determina que no hay conexión de datos.
2. El caso de uso vuelve al punto 1 del flujo principal.
Consulta de proveedores
Descripción: Se desea consultar la lista de proveedores.
Autores: Administrador (Autentificado).
Precondiciones: Estar autentificado como administrador.
Flujo principal:
1. El usuario selecciona la opción consulta de proveedores.
2. El sistema muestra una ventana que contiene la lista de proveedores con su
respectiva información.
3. Acaba el caso de uso
Flujo alterno (conexión de datos):
1. Durante la consulta de la lista de proveedores, el sistema determina que no hay
conexión de datos.
2. El caso de uso vuelve al punto 1 del flujo principal
TEAM UMBRELLA 29
Consulta de empleados
Descripción: Se desea consultar la lista de empleados.
Autores: Administrador (Autentificado).
Precondiciones: Estar autentificado como administrador.
Flujo principal:
4. El usuario selecciona la opción consulta de empleados.
5. El sistema muestra una ventana que contiene la lista de empleados con su respectiva
información.
6. Acaba el caso de uso
Flujo alterno (conexión de datos):
3. Durante la consulta de la lista de empleados, el sistema determina que no hay
conexión de datos.
4. El caso de uso vuelve al punto 1 del flujo principal
Alta de fármacos y/o productos
Descripción: Se desea dar de alta nuevos fármacos y/o productos, en la base de datos.
Autores: Administrador (Autentificado).
Precondiciones: Estar autentificado como administrador.
Flujo principal:
1. El usuario selecciona la opción modificar
2. En modificar el usuario selecciona la opción fármacos y productos.
3. El sistema muestra una ventana solicitando la información del producto o fármaco
a registrar.
4. El usuario ingresa los datos y le da de alta al producto o fármaco.
5. El sistema muestra un mensaje de confirmación.
6. El usuario confirma el alta del fármaco o producto.
7. El sistema registra el fármaco o producto en la base de datos.
8. Acaba el caso de uso
Flujo alterno (coincidencia de ID):
1. Durante el registro del fármaco o producto, el sistema detecta que el ID coincide
con el ID de otro producto o fármaco, el sistema muestra un mensaje de error
otorgando la información del mismo al usuario.
2. El caso de uso vuelve al punto 2 del flujo principal.
Flujo alterno (cancelación):
1. El usuario cancela el alta del producto o fármaco.
2. El caso de uso vuelve al punto 1 del flujo principal.
TEAM UMBRELLA 30
Flujo alterno (conexión de datos):
1. Durante el alta del producto o fármaco, el sistema determina que no hay conexión
de datos.
2. El caso de uso vuelve al punto 1 del flujo principal.
Modificación de fármacos y/o productos
Descripción: Se desea modificar los fármacos y/o productos, en la base de datos
Autores: Administrador (Autentificado).
Precondiciones: Estar autentificado como administrador.
Flujo principal:
1. El usuario selecciona la opción modificar
2. En modificar el usuario selecciona la opción fármacos y productos.
3. El usuario busca y selecciona el fármaco o producto que desea modificar.
4. El sistema muestra una ventana solicitando la información del producto o fármaco
a modificar.
5. El usuario ingresa los datos y le da modificar al producto o fármaco.
6. El sistema muestra un mensaje de confirmación.
7. El usuario confirma la modificación del fármaco o producto.
8. El sistema actualiza la información del fármaco o producto en la base de datos.
9. Acaba el caso de uso
Flujo alterno (coincidencia de ID):
1. Durante la actualización del fármaco o producto, el sistema detecta que el ID
coincide con el ID de otro producto o fármaco (si se cambió el ID original por otro),
el sistema muestra un mensaje de error otorgando la información del mismo al
usuario.
2. El caso de uso vuelve al punto 2 del flujo principal.
Flujo alterno (cancelación):
1. El usuario cancela la modificación del producto o fármaco.
2. El caso de uso vuelve al punto 1 del flujo principal.
Flujo alterno (conexión de datos):
1. Durante la modificación del producto o fármaco, el sistema determina que no hay
conexión de datos.
2. El caso de uso vuelve al punto 1 del flujo principal.
TEAM UMBRELLA 31
Baja de fármacos y/o productos
Descripción: Se desea dar de baja a los fármacos y/o productos, en la base de datos
Autores: Administrador (Autentificado).
Precondiciones: Estar autentificado como administrador.
Flujo principal:
1. El usuario selecciona la opción modificar
2. En modificar el usuario selecciona la opción fármacos y productos.
3. El usuario busca y selecciona el fármaco o producto que desea dar de baja.
4. El usuario selecciona la opción dar de baja.
5. El sistema muestra un mensaje de confirmación.
6. El usuario confirma la baja del fármaco o producto.
7. El sistema elimina la información del fármaco o producto en la base de datos.
8. Acaba el caso de uso
Flujo alterno (cancelación):
1. El usuario cancela la baja del producto o fármaco.
2. El caso de uso vuelve al punto 1 del flujo principal.
Flujo alterno (conexión de datos):
1. Durante la baja del producto o fármaco, el sistema determina que no hay conexión
de datos.
2. El caso de uso vuelve al punto 1 del flujo principal.
Alta de empleados
Descripción: Se desea dar de alta a empleados en la base de datos.
Autores: Administrador (Autentificado).
Precondiciones: Estar autentificado como administrador.
Flujo principal:
1. El usuario selecciona la opción modificar.
2. En modificar el usuario selecciona la opción empleados.
3. En empleados el usuario selecciona la opción alta de empleados.
4. El sistema muestra una ventana solicitando la información del nuevo empleado.
5. El usuario ingresa la información y da de alta al empleado.
6. El sistema muestra una ventana de confirmación.
7. El usuario confirma.
8. El sistema agrega al nuevo empleado en la base de datos.
9. Acaba el caso de uso.
Flujo alterno (coincidencia de matrícula):
1. Durante el alta del empleado el sistema determina que la nueva matricula coincide
con la matrícula de otro empleado.
TEAM UMBRELLA 32
2. El caso de uso vuelve al punto 5 del flujo principal.
Flujo alterno (cancelación):
1. El usuario cancela el alta de empleado.
2. El caso de uso vuelve al punto 1 del flujo principal.
Flujo alterno (conexión de datos):
1. Durante el alta del empleado, el sistema determina que no hay conexión de datos.
2. El caso de uso vuelve al punto 1 del flujo principal.
Modificación de empleados
Descripción: Se desea modificar la información de un empleado en la base de datos.
Autores: Administrador (Autentificado).
Precondiciones: Estar autentificado como administrador.
Flujo principal:
1. El usuario selecciona la opción modificar.
2. En modificar selecciona empleados
3. El usuario busca y selecciona al empleado a modificar y da opción en modificar
empleado.
4. El sistema muestra una ventana solicitando al usuario la información a modificar.
5. El usuario ingresa la información y da en modificar empleado.
6. El sistema muestra un mensaje de confirmación.
7. El usuario confirma.
8. El sistema actualiza la información del empleado modificado en la base de datos.
9. Acaba el caso de uso.
Flujo alterno (coincidencia de matrícula):
1. Durante la modificación de la matrícula del empleado el sistema determina que esta
coincide con la matrícula de otro empleado.
2. El caso de uso vuelve al punto 4 del flujo principal.
Flujo alterno (cancelación):
1. El usuario cancela la modificación de empleado.
2. El caso de uso vuelve al punto 1 del flujo principal.
Flujo alterno (conexión de datos):
1. Durante la modificación de empleado, el sistema determina que no hay conexión
de datos.
2. El caso de uso vuelve al punto 1 del flujo principal.
TEAM UMBRELLA 33
Baja de empleados
Descripción: Se desea dar de baja a un empleado en la base de datos.
Autores: Administrador (Autentificado).
Precondiciones: Estar autentificado como administrador.
Flujo principal:
1. El usuario selecciona la opción modificar.
2. En modificar selecciona empleados.
3. El usuario busca y selecciona al empleado que desea dar de baja, y da en opción
baja de empleado.
4. El sistema muestra una ventana de confirmación.
5. El usuario confirma la baja.
6. El sistema elimina al empleado de la base de datos.
7. Acaba el caso de uso.
Flujo alterno (cancelación):
1. El usuario cancela la baja de empleado.
2. El caso de uso vuelve al punto 1 del flujo principal.
Flujo alterno (conexión de datos):
1. Durante la baja de empleados, el sistema determina que no hay conexión de datos.
2. El caso de uso vuelve al punto 1 del flujo principal.
Alta de proveedores
Descripción: Se desea dar de alta a un proveedor en la base de datos
Autores: Administrador (Autentificado).
Precondiciones: Estar autentificado como administrador.
Flujo principal:
1. El usuario selecciona la opción modificar.
2. En modificar selecciona la opción proveedores.
3. El usuario selecciona la opción alta de proveedores.
4. El sistema muestra una ventana solicitando la información del proveedor que se
desea dar de alta.
5. El usuario ingresa los datos y da de alta al proveedor.
6. El sistema muestra una ventana de confirmación.
7. El usuario confirma el alta.
8. El sistema agrega al nuevo proveedor en la base de datos.
Flujo alterno (cancelación):
1. El usuario cancela el alta de proveedores.
2. El caso de uso vuelve al punto 1 del flujo principal.
TEAM UMBRELLA 34
Flujo alterno (conexión de datos):
1. Durante el alta del nuevo proveedor, el sistema determina que no hay conexión de
datos.
2. El caso de uso vuelve al punto 1 del flujo principal.
Modificación de proveedores.
Descripción: Se desea modificar la información de un proveedor en la base de datos.
Autores: Administrador (Autentificado).
Precondiciones: Estar autentificado como administrador.
Flujo principal:
1. El usuario selecciona la opción modificar.
2. En modificar selecciona la opción proveedores.
3. El usuario busca el proveedor y selecciona modificar proveedor.
4. El sistema muestra una ventana solicitando la información a modificar.
5. El usuario modifica la información del proveedor y da modificar.
6. El sistema muestra una ventana de confirmación.
7. El usuario confirma.
8. El sistema actualiza la nueva información del proveedor en la base de datos.
9. Acaba el caso de uso.
Flujo alterno (cancelación):
1. El usuario cancela la modificación de proveedores.
2. El caso de uso vuelve al punto 1 del flujo principal.
Flujo alterno (conexión de datos):
1. Durante la modificación del proveedor, el sistema determina que no hay conexión
de datos.
2. El caso de uso vuelve al punto 1 del flujo principal.
TEAM UMBRELLA 35
Baja de proveedores
Descripción: Se desea dar de baja a un proveedor de la base de datos.
Autores: Administrador (Autentificado).
Precondiciones: Estar autentificado como administrador
Flujo principal:
1. El usuario selecciona la opción modificar.
2. En modificar selecciona la opción proveedores.
3. El usuario busca y selección al proveedor que desea dar de baja y selecciona dar de
baja al proveedor.
4. El sistema muestra una ventana de confirmación.
5. El usuario confirma.
6. El sistema elimina al proveedor de la base de datos.
Flujo alterno (cancelación):
1. El usuario cancela la baja del proveedor.
2. El caso de uso vuelve al punto 1 del flujo principal.
Flujo alterno (conexión de datos):
1. Durante la baja de proveedores, el sistema determina que no hay conexión de datos.
2. El caso de uso vuelve al punto 1 del flujo principal.
TEAM UMBRELLA 36
7.3 Diagrama de Clases
TEAM UMBRELLA 37
7.4 Tabla de la Base de Datos
Una vez determinados los casos de uso, se procede a mostrar las bases de datos, estas son
detalladas y al mismo tiempo destacan por su simplicidad y eficiencia, al ser un negocio pequeño,
no se requiere de más información, no obstante la portabilidad del software permitiría la anexión
de datos y ampliación de la base de datos.
A continuación se muestra la base de datos para Pharmacy Control Center.
TEAM UMBRELLA 38
7.4.1 Diagrama de Entidad – Relación
A continuación se muestra el diagrama de Entidad – Relación, con los aspectos básicos en los que
trabajara la base de datos, como se podrá apreciar, destaca por su simplicidad pero al mismo tiempo
por su eficiencia y facilidad de comprensión.
TEAM UMBRELLA 39
7.4.2 Diccionario de datos
Tabla_Trabajador
Campo Descripción Tipo Longitud Restricciones Función del
dato Ejemplo
Matricula Clave que
identifica al usuario
String Indefinido Matricula
única Clave
primaria M11H80
Nombre Nombre del
usuario Char Indefinido 20 caracteres Campo Juan
Apellido Apellido del
usuario Char Indefinido 30 caracteres Campo Perez
Cargo Rango del
usuario en el sistema
Char Indefinido 20 caracteres Campo Administrador
Contraseña Clave de
acceso del usuario
String indefinido Ninguna Campo JP12#3
Curp Clave de
identificación federal
String Indefinido Ninguna Campo 125M594F584
RFC Clave de registro federal
String Indefinido Ninguna Campo 45741rt5515
Teléfono Teléfono del trabajador
Byte Indefinido 0 – 9 Campo 99-55-66-99
Correo Correo del trabajador
String Indefinido Ninguna Campo Jp.pl@live.com
Tabla_Ventas
Campo Descripción Tipo Longitud Restricciones Función del dato
Ejemplo
Venta_Dia Genera reporte de ventas del día
Float Indefinido Ninguno Campo 3,598.23
Venta_Semana Genera reporte de ventas de la semana
Float Indefinido Ninguno Campo 15,489.25
Venta_Mes Genera reporte de ventas del mes
Float Indefinido Ninguno Campo 28,598.54
TEAM UMBRELLA 40
Tabla_Proveedor
Campo Descripció
n Tipo Longitud Restricciones
Función del dato
Ejemplo
Nombre Nombre de la empresa
Char Indefinido 50
caracteres Clave
primaria Laboratorios Astra SA.
De C.V
Servicios Servicios
que ofrece Char Indefinido Ninguno Campo Venta de fármacos
Dirección
Dirección en donde
se encuentra ubicada la empresa
String Indefinido Ninguno Campo AV. Jose gorostiza
num. 206, col. 2 de mayo
Teléfono Teléfono
de la empresa
Byte Indefinido 0-9 Campo 99-35-98-08-25
Correo Correo de la empresa
String Indefinido 20
caracteres campo
Astra_85@ceneca.com
Tabla_Productos
Campo Descripción Tipo Longitud Restricciones Función del dato
Ejemplo
ID Identificador
del producto
String Indefinido ninguno Clave
primaria P12564
Nombre Nombre del
producto char indefinido
50 caracteres
Campo Tempra
Categoría Categoría
del producto
Char indefinido 20
caracteres Campo Fármaco
Descripción Datos del producto
Char Indefinido Ninguno Campo Eficaz
contra la fiebre
Precio Precio
unitario del producto
Float Indefinido Ninguno Campo 50.36
Cantidad
Cantidad en existencia
en almacén del
producto
Int Indefinido Ninguno Campo 35
TEAM UMBRELLA 41
8 Construcción y Desarrollo de la Aplicación
8.1 Diagrama de estructura
TEAM UMBRELLA 42
8.2 Descripción de Módulos Se procede a mostrar una breve y clara descripción de los principales módulos del sistema,
aclarando que más adelante se procederá a otorgar capturas de pantalla para mejor comprensión
de la funcionalidad del sistema.
Modulo Descripción
Ventas Modulo que se encarga de recibir la id de los productos a vender, otorga precio y
tipo de cobro.
Consultas Módulo de búsqueda rápida, se ingresa la id o nombre de lo que se desea buscar y
este lo muestra.
Reportes Modulo encargado de generar el informe de ventas diarias, semanales y mensuales.
Proveedor Modulo que otorga la información que se tiene de cada proveedor registrado en el
sistema.
Modificar
Módulo especial, de acceso restringido solo al administrador, este módulo
permite dar de alta, baja y modificar la información de la base de datos.
TEAM UMBRELLA 43
8.3 Diseño de interfaz externa A continuación se procede a mostrar la interface que tendrá el software.
Figura 01: Ventana de inicio de sesión
Figura 02: Modulo de Ventas
TEAM UMBRELLA 44
Figura 03: Modulo de Consulta
Figura 04: Modulo de Reporte
TEAM UMBRELLA 45
Figura 05: Modulo de Proveedor
Figura 06: Modulo de Modificar
TEAM UMBRELLA 46
8.4 Script (Código del software) Se procede a mostrar el código fuente como parte del acuerdo de la licencia del programa (Open
Source). La ventaja de que este código sea en Java y con licencia Open Source, es que puede ser
modificado con mucha facilidad, y tiene una gran capacidad de anexión de funcionalidades.
Cabe aclarar que por cuestiones de tiempo y falta de personal, al ser un equipo conformado por 2
personas, no se logró implementar la funcionalidad al software, el cliente quedo de acuerdo en
que a futuro, se concluirá el proyecto.
8.4.1 Código fuente de Inicio de Sesión Se procede a mostrar el código de la interface de la ventana de inicio de sesión.
/**
* @Author Janeth and Emanuel
* Team: Umbrella
*/
public class AccesoSistema extends javax.swing.JFrame {
public AccesoSistema() {
initComponents();
}
@SuppressWarnings("unchecked")
// <editor-fold defaultstate="collapsed" desc="Generated Code">
private void initComponents() {
jPanel1 = new javax.swing.JPanel();
Titulo = new javax.swing.JLabel();
Usuario = new javax.swing.JLabel();
txtUsuario = new javax.swing.JTextField();
Contraseña = new javax.swing.JLabel();
Imagen1 = new javax.swing.JLabel();
Imagen2 = new javax.swing.JLabel();
txtContraseña = new javax.swing.JPasswordField();
jButton1 = new javax.swing.JButton();
TEAM UMBRELLA 47
setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);
setAlwaysOnTop(true);
setBackground(new java.awt.Color(102, 102, 255));
setForeground(new java.awt.Color(51, 51, 255));
setPreferredSize(new java.awt.Dimension(640, 400));
setResizable(false);
jPanel1.setBackground(new java.awt.Color(255, 204, 204));
jPanel1.setBorder(javax.swing.BorderFactory.createLineBorder(new java.awt.Color(102, 102,
102)));
Titulo.setBackground(new java.awt.Color(255, 255, 255));
Titulo.setFont(new java.awt.Font("Constantia", 0, 48)); // NOI18N
Titulo.setForeground(new java.awt.Color(0, 102, 102));
Titulo.setText("Farmacia Torres");
Usuario.setFont(new java.awt.Font("Constantia", 0, 24)); // NOI18N
Usuario.setForeground(new java.awt.Color(0, 102, 102));
Usuario.setText("Usuario");
txtUsuario.setFont(new java.awt.Font("Constantia", 0, 24)); // NOI18N
Contraseña.setFont(new java.awt.Font("Constantia", 0, 24)); // NOI18N
Contraseña.setForeground(new java.awt.Color(0, 102, 102));
Contraseña.setText("Contraseña");
Imagen1.setBackground(new java.awt.Color(255, 255, 255));
Imagen1.setIcon(new
javax.swing.ImageIcon(getClass().getResource("/ImagenesFarmacia/1367307177_gnome-keyring-
manager.png"))); // NOI18N
TEAM UMBRELLA 48
Imagen2.setBackground(new java.awt.Color(255, 255, 255));
Imagen2.setIcon(new
javax.swing.ImageIcon(getClass().getResource("/ImagenesFarmacia/1367306794_heart_love_com
puter.png"))); // NOI18N
txtContraseña.setFont(new java.awt.Font("Constantia", 0, 24)); // NOI18N
jButton1.setBackground(new java.awt.Color(204, 255, 204));
jButton1.setFont(new java.awt.Font("Constantia", 0, 18)); // NOI18N
jButton1.setForeground(new java.awt.Color(0, 102, 102));
jButton1.setText("Entrar");
javax.swing.GroupLayout jPanel1Layout = new javax.swing.GroupLayout(jPanel1);
jPanel1.setLayout(jPanel1Layout);
jPanel1Layout.setHorizontalGroup(
jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(jPanel1Layout.createSequentialGroup()
.addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(jPanel1Layout.createSequentialGroup()
.addGap(3, 3, 3)
.addComponent(Imagen2)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
.addComponent(Contraseña)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED,
javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
.addGroup(jPanel1Layout.createSequentialGroup()
.addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
.addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(javax.swing.GroupLayout.Alignment.TRAILING,
jPanel1Layout.createSequentialGroup()
TEAM UMBRELLA 49
.addComponent(Titulo)
.addGap(98, 98, 98))
.addComponent(jButton1, javax.swing.GroupLayout.Alignment.TRAILING)
.addGroup(javax.swing.GroupLayout.Alignment.TRAILING,
jPanel1Layout.createSequentialGroup()
.addComponent(Usuario)
.addGap(40, 40, 40)
.addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING,
false)
.addComponent(txtContraseña,
javax.swing.GroupLayout.Alignment.TRAILING, javax.swing.GroupLayout.DEFAULT_SIZE, 160,
Short.MAX_VALUE)
.addComponent(txtUsuario, javax.swing.GroupLayout.Alignment.TRAILING))))
.addGap(18, 18, 18)))
.addComponent(Imagen1, javax.swing.GroupLayout.PREFERRED_SIZE, 137,
javax.swing.GroupLayout.PREFERRED_SIZE)
.addGap(206, 206, 206))
);
jPanel1Layout.setVerticalGroup(
jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(jPanel1Layout.createSequentialGroup()
.addGap(18, 18, 18)
.addComponent(Titulo)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED,
javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
.addComponent(Imagen2, javax.swing.GroupLayout.PREFERRED_SIZE, 156,
javax.swing.GroupLayout.PREFERRED_SIZE)
.addGap(27, 27, 27))
.addGroup(jPanel1Layout.createSequentialGroup()
.addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
TEAM UMBRELLA 50
.addGroup(jPanel1Layout.createSequentialGroup()
.addGap(104, 104, 104)
.addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
.addComponent(Usuario)
.addComponent(txtUsuario, javax.swing.GroupLayout.PREFERRED_SIZE,
javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
.addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(jPanel1Layout.createSequentialGroup()
.addGap(21, 21, 21)
.addComponent(Contraseña))
.addGroup(jPanel1Layout.createSequentialGroup()
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
.addComponent(txtContraseña, javax.swing.GroupLayout.PREFERRED_SIZE,
javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))))
.addGroup(jPanel1Layout.createSequentialGroup()
.addGap(70, 70, 70)
.addComponent(Imagen1, javax.swing.GroupLayout.PREFERRED_SIZE, 143,
javax.swing.GroupLayout.PREFERRED_SIZE)))
.addGap(22, 22, 22)
.addComponent(jButton1)
.addContainerGap(57, Short.MAX_VALUE))
);
javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());
getContentPane().setLayout(layout);
layout.setHorizontalGroup(
layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addComponent(jPanel1, javax.swing.GroupLayout.PREFERRED_SIZE, 632,
javax.swing.GroupLayout.PREFERRED_SIZE)
);
TEAM UMBRELLA 51
layout.setVerticalGroup(
layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addComponent(jPanel1, javax.swing.GroupLayout.DEFAULT_SIZE,
javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
);
pack();
}// </editor-fold>
public static void main(String args[]) {
try {
for (javax.swing.UIManager.LookAndFeelInfo info :
javax.swing.UIManager.getInstalledLookAndFeels()) {
if ("Nimbus".equals(info.getName())) {
javax.swing.UIManager.setLookAndFeel(info.getClassName());
break;
}
}
} catch (ClassNotFoundException ex) {
java.util.logging.Logger.getLogger(AccesoSistema.class.getName()).log(java.util.logging.Level.SEVE
RE, null, ex);
} catch (InstantiationException ex) {
java.util.logging.Logger.getLogger(AccesoSistema.class.getName()).log(java.util.logging.Level.SEVE
RE, null, ex);
} catch (IllegalAccessException ex) {
java.util.logging.Logger.getLogger(AccesoSistema.class.getName()).log(java.util.logging.Level.SEVE
RE, null, ex);
} catch (javax.swing.UnsupportedLookAndFeelException ex) {
TEAM UMBRELLA 52
java.util.logging.Logger.getLogger(AccesoSistema.class.getName()).log(java.util.logging.Level.SEVE
RE, null, ex);
}
//</editor-fold>
/* Create and display the form */
java.awt.EventQueue.invokeLater(new Runnable() {
public void run() {
new AccesoSistema().setVisible(true);
}
});
}
// Variables declaration - do not modify
private javax.swing.JLabel Contraseña;
private javax.swing.JLabel Imagen1;
private javax.swing.JLabel Imagen2;
private javax.swing.JLabel Titulo;
private javax.swing.JLabel Usuario;
private javax.swing.JButton jButton1;
private javax.swing.JPanel jPanel1;
private javax.swing.JPasswordField txtContraseña;
private javax.swing.JTextField txtUsuario;
// End of variables declaration
}
TEAM UMBRELLA 53
8.4.2 Código fuente de la ventana principal con sus módulos. Se procede a mostrar la totalidad del código fuente de la interface del software.
/**
* @Author Janeth and Emanuel
* Team: Umbrella
*/
public class Ventanas extends javax.swing.JFrame {
public Ventanas() {
initComponents();
}
@SuppressWarnings("unchecked")
// <editor-fold defaultstate="collapsed" desc="Generated Code">
private void initComponents() {
Fondo = new javax.swing.JPanel();
Pestañas = new javax.swing.JPanel();
Comados = new javax.swing.JTabbedPane();
Ventas = new javax.swing.JPanel();
PublicoG = new javax.swing.JLabel();
jSeparator1 = new javax.swing.JSeparator();
jPanel1 = new javax.swing.JPanel();
jScrollPane1 = new javax.swing.JScrollPane();
tbVenta = new javax.swing.JTable();
Codigo = new javax.swing.JLabel();
txtCodigo = new javax.swing.JTextField();
TEAM UMBRELLA 54
Total = new javax.swing.JLabel();
txtTotal = new javax.swing.JTextField();
Pago = new javax.swing.JLabel();
Credito = new javax.swing.JButton();
Debito = new javax.swing.JButton();
Efectivo = new javax.swing.JButton();
CancelarV = new javax.swing.JButton();
Consulta = new javax.swing.JPanel();
ConsultaG = new javax.swing.JLabel();
jSeparator2 = new javax.swing.JSeparator();
jPanel2 = new javax.swing.JPanel();
jScrollPane2 = new javax.swing.JScrollPane();
tbConsulta = new javax.swing.JTable();
txtBuscar = new javax.swing.JTextField();
Buscar = new javax.swing.JButton();
Reporte = new javax.swing.JPanel();
ReporteG = new javax.swing.JLabel();
jSeparator3 = new javax.swing.JSeparator();
Dia = new javax.swing.JButton();
Semana = new javax.swing.JButton();
Mes = new javax.swing.JButton();
jPanel3 = new javax.swing.JPanel();
jScrollPane3 = new javax.swing.JScrollPane();
tbReporte = new javax.swing.JTable();
Proveedor = new javax.swing.JPanel();
ProveedorG = new javax.swing.JLabel();
jSeparator4 = new javax.swing.JSeparator();
jPanel4 = new javax.swing.JPanel();
jScrollPane4 = new javax.swing.JScrollPane();
TEAM UMBRELLA 55
tbProveedor = new javax.swing.JTable();
Modificar = new javax.swing.JPanel();
ModificarDatos = new javax.swing.JLabel();
jSeparator5 = new javax.swing.JSeparator();
jPanel5 = new javax.swing.JPanel();
PestañaModif = new javax.swing.JTabbedPane();
producto = new javax.swing.JPanel();
jPanel6 = new javax.swing.JPanel();
jScrollPane5 = new javax.swing.JScrollPane();
tbProducto = new javax.swing.JTable();
AltaPro = new javax.swing.JButton();
BajaPro = new javax.swing.JButton();
ModifPro = new javax.swing.JButton();
Farmaco = new javax.swing.JPanel();
jPanel8 = new javax.swing.JPanel();
jScrollPane6 = new javax.swing.JScrollPane();
tbFarmaco = new javax.swing.JTable();
AltaFar = new javax.swing.JButton();
BajaFarm = new javax.swing.JButton();
ModifFarm = new javax.swing.JButton();
Empleados = new javax.swing.JPanel();
jPanel7 = new javax.swing.JPanel();
jScrollPane7 = new javax.swing.JScrollPane();
tbEmpleado = new javax.swing.JTable();
AltaEmple = new javax.swing.JButton();
BajaEmple = new javax.swing.JButton();
ModifEmple = new javax.swing.JButton();
Provee = new javax.swing.JPanel();
jPanel9 = new javax.swing.JPanel();
TEAM UMBRELLA 56
jScrollPane8 = new javax.swing.JScrollPane();
tbProvee = new javax.swing.JTable();
AltaModif = new javax.swing.JButton();
BajaModif = new javax.swing.JButton();
Modifprovee = new javax.swing.JButton();
jComboBox1 = new javax.swing.JComboBox();
jTextField1 = new javax.swing.JTextField();
setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);
setBackground(new java.awt.Color(255, 255, 255));
setPreferredSize(new java.awt.Dimension(1080, 700));
setResizable(false);
Fondo.setBackground(new java.awt.Color(255, 255, 255));
Fondo.setRequestFocusEnabled(false);
Fondo.setVerifyInputWhenFocusTarget(false);
Pestañas.setBackground(new java.awt.Color(255, 255, 255));
Comados.setBackground(new java.awt.Color(255, 255, 255));
Comados.setFont(new java.awt.Font("Constantia", 0, 14)); // NOI18N
Ventas.setBackground(new java.awt.Color(255, 255, 255));
Ventas.setRequestFocusEnabled(false);
Ventas.setVerifyInputWhenFocusTarget(false);
PublicoG.setBackground(new java.awt.Color(255, 255, 255));
PublicoG.setFont(new java.awt.Font("Constantia", 0, 18)); // NOI18N
PublicoG.setText("Publico General");
TEAM UMBRELLA 57
PublicoG.setRequestFocusEnabled(false);
PublicoG.setVerifyInputWhenFocusTarget(false);
jPanel1.setBackground(new java.awt.Color(255, 255, 255));
jPanel1.setBorder(javax.swing.BorderFactory.createLineBorder(new java.awt.Color(0, 0, 0)));
jScrollPane1.setBackground(new java.awt.Color(255, 255, 255));
jScrollPane1.setFont(new java.awt.Font("Constantia", 0, 18)); // NOI18N
tbVenta.setFont(new java.awt.Font("Constantia", 0, 14)); // NOI18N
tbVenta.setModel(new javax.swing.table.DefaultTableModel(
new Object [][] {
{null, null, null, null, null},
{null, null, null, null, null},
{null, null, null, null, null},
{null, null, null, null, null},
{null, null, null, null, null},
{null, null, null, null, null},
{null, null, null, null, null},
{null, null, null, null, null},
{null, null, null, null, null},
{null, null, null, null, null},
{null, null, null, null, null},
{null, null, null, null, null},
{null, null, null, null, null},
{null, null, null, null, null},
{null, null, null, null, null},
{null, null, null, null, null},
{null, null, null, null, null},
TEAM UMBRELLA 58
{null, null, null, null, null},
{null, null, null, null, null},
{null, null, null, null, null},
{null, null, null, null, null},
{null, null, null, null, null},
{null, null, null, null, null},
{null, null, null, null, null},
{null, null, null, null, null},
{null, null, null, null, null},
{null, null, null, null, null},
{null, null, null, null, null},
{null, null, null, null, null},
{null, null, null, null, null}
},
new String [] {
"Codigo", "Nombre", "Descripción", "Cantidad", "Precio"
}
) {
Class[] types = new Class [] {
java.lang.String.class, java.lang.Object.class, java.lang.String.class, java.lang.String.class,
java.lang.Byte.class
};
boolean[] canEdit = new boolean [] {
false, false, false, false, false
};
public Class getColumnClass(int columnIndex) {
return types [columnIndex];
}
TEAM UMBRELLA 59
public boolean isCellEditable(int rowIndex, int columnIndex) {
return canEdit [columnIndex];
}
});
jScrollPane1.setViewportView(tbVenta);
javax.swing.GroupLayout jPanel1Layout = new javax.swing.GroupLayout(jPanel1);
jPanel1.setLayout(jPanel1Layout);
jPanel1Layout.setHorizontalGroup(
jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addComponent(jScrollPane1, javax.swing.GroupLayout.DEFAULT_SIZE, 714,
Short.MAX_VALUE)
);
jPanel1Layout.setVerticalGroup(
jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addComponent(jScrollPane1, javax.swing.GroupLayout.DEFAULT_SIZE, 299,
Short.MAX_VALUE)
);
Codigo.setFont(new java.awt.Font("Constantia", 0, 18)); // NOI18N
Codigo.setText("Codigo");
txtCodigo.setFont(new java.awt.Font("Constantia", 0, 14)); // NOI18N
Total.setFont(new java.awt.Font("Constantia", 0, 18)); // NOI18N
Total.setText("Total");
txtTotal.setFont(new java.awt.Font("Constantia", 0, 18)); // NOI18N
TEAM UMBRELLA 60
Pago.setBackground(new java.awt.Color(255, 255, 255));
Pago.setFont(new java.awt.Font("Constantia", 0, 24)); // NOI18N
Pago.setForeground(new java.awt.Color(0, 102, 102));
Pago.setIcon(new
javax.swing.ImageIcon(getClass().getResource("/ImagenesFarmacia/1367464996_06.png"))); //
NOI18N
Pago.setText("Forma de Pago");
Pago.setHorizontalTextPosition(javax.swing.SwingConstants.LEFT);
Credito.setBackground(new java.awt.Color(204, 255, 204));
Credito.setFont(new java.awt.Font("Constantia", 0, 18)); // NOI18N
Credito.setForeground(new java.awt.Color(0, 102, 102));
Credito.setText("Tarjeta de Credito");
Debito.setBackground(new java.awt.Color(204, 255, 204));
Debito.setFont(new java.awt.Font("Constantia", 0, 18)); // NOI18N
Debito.setForeground(new java.awt.Color(0, 102, 102));
Debito.setText("Tarjeta de Debito");
Efectivo.setBackground(new java.awt.Color(204, 255, 204));
Efectivo.setFont(new java.awt.Font("Constantia", 0, 18)); // NOI18N
Efectivo.setForeground(new java.awt.Color(0, 102, 102));
Efectivo.setText("Efectivo");
CancelarV.setBackground(new java.awt.Color(204, 255, 204));
CancelarV.setFont(new java.awt.Font("Constantia", 0, 18)); // NOI18N
CancelarV.setForeground(new java.awt.Color(0, 102, 102));
CancelarV.setText("Cancelar Venta");
javax.swing.GroupLayout VentasLayout = new javax.swing.GroupLayout(Ventas);
TEAM UMBRELLA 61
Ventas.setLayout(VentasLayout);
VentasLayout.setHorizontalGroup(
VentasLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(VentasLayout.createSequentialGroup()
.addGroup(VentasLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(VentasLayout.createSequentialGroup()
.addGap(57, 57, 57)
.addGroup(VentasLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(VentasLayout.createSequentialGroup()
.addComponent(Codigo)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
.addComponent(txtCodigo, javax.swing.GroupLayout.PREFERRED_SIZE, 138,
javax.swing.GroupLayout.PREFERRED_SIZE)
.addGap(148, 148, 148)
.addComponent(CancelarV))
.addGroup(VentasLayout.createSequentialGroup()
.addComponent(jPanel1, javax.swing.GroupLayout.PREFERRED_SIZE,
javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
.addGap(34, 34, 34)
.addGroup(VentasLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING)
.addComponent(Pago)
.addComponent(Credito, javax.swing.GroupLayout.Alignment.LEADING)
.addComponent(Debito, javax.swing.GroupLayout.Alignment.LEADING,
javax.swing.GroupLayout.PREFERRED_SIZE, 177, javax.swing.GroupLayout.PREFERRED_SIZE)
.addComponent(Efectivo, javax.swing.GroupLayout.Alignment.LEADING,
javax.swing.GroupLayout.PREFERRED_SIZE, 177, javax.swing.GroupLayout.PREFERRED_SIZE)))))
.addGroup(VentasLayout.createSequentialGroup()
.addContainerGap()
TEAM UMBRELLA 62
.addComponent(PublicoG))
.addComponent(jSeparator1, javax.swing.GroupLayout.PREFERRED_SIZE, 1089,
javax.swing.GroupLayout.PREFERRED_SIZE)
.addGroup(VentasLayout.createSequentialGroup()
.addGap(517, 517, 517)
.addComponent(Total)
.addGap(54, 54, 54)
.addComponent(txtTotal, javax.swing.GroupLayout.PREFERRED_SIZE, 149,
javax.swing.GroupLayout.PREFERRED_SIZE)))
.addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
);
VentasLayout.setVerticalGroup(
VentasLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(VentasLayout.createSequentialGroup()
.addGap(38, 38, 38)
.addComponent(PublicoG)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addComponent(jSeparator1, javax.swing.GroupLayout.PREFERRED_SIZE, 10,
javax.swing.GroupLayout.PREFERRED_SIZE)
.addGap(38, 38, 38)
.addGroup(VentasLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
.addComponent(Codigo)
.addComponent(txtCodigo, javax.swing.GroupLayout.PREFERRED_SIZE,
javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
.addComponent(CancelarV))
.addGap(42, 42, 42)
.addGroup(VentasLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(VentasLayout.createSequentialGroup()
.addComponent(Pago)
TEAM UMBRELLA 63
.addGap(41, 41, 41)
.addComponent(Credito)
.addGap(18, 18, 18)
.addComponent(Debito)
.addGap(18, 18, 18)
.addComponent(Efectivo))
.addComponent(jPanel1, javax.swing.GroupLayout.PREFERRED_SIZE,
javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
.addGap(18, 18, 18)
.addGroup(VentasLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addComponent(Total)
.addComponent(txtTotal, javax.swing.GroupLayout.PREFERRED_SIZE,
javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
.addContainerGap(108, Short.MAX_VALUE))
);
Comados.addTab("Ventas", new
javax.swing.ImageIcon(getClass().getResource("/ImagenesFarmacia/1367303474_shopping_cart_a
dd.png")), Ventas); // NOI18N
Consulta.setBackground(new java.awt.Color(255, 255, 255));
Consulta.setPreferredSize(new java.awt.Dimension(1075, 700));
Consulta.setRequestFocusEnabled(false);
Consulta.setVerifyInputWhenFocusTarget(false);
ConsultaG.setFont(new java.awt.Font("Constantia", 0, 18)); // NOI18N
ConsultaG.setText("Consulta General");
jPanel2.setBackground(new java.awt.Color(255, 255, 255));
jPanel2.setBorder(javax.swing.BorderFactory.createLineBorder(new java.awt.Color(0, 0, 0)));
TEAM UMBRELLA 64
jScrollPane2.setBackground(new java.awt.Color(255, 255, 255));
tbConsulta.setFont(new java.awt.Font("Constantia", 0, 14)); // NOI18N
tbConsulta.setModel(new javax.swing.table.DefaultTableModel(
new Object [][] {
{null, null, null, null},
{null, null, null, null},
{null, null, null, null},
{null, null, null, null},
{null, null, null, null},
{null, null, null, null},
{null, null, null, null},
{null, null, null, null},
{null, null, null, null},
{null, null, null, null},
{null, null, null, null},
{null, null, null, null},
{null, null, null, null},
{null, null, null, null},
{null, null, null, null},
{null, null, null, null},
{null, null, null, null},
{null, null, null, null},
{null, null, null, null},
{null, null, null, null},
{null, null, null, null},
{null, null, null, null},
{null, null, null, null},
TEAM UMBRELLA 65
{null, null, null, null},
{null, null, null, null},
{null, null, null, null},
{null, null, null, null},
{null, null, null, null},
{null, null, null, null},
{null, null, null, null}
},
new String [] {
"ID", "Nombre", "Precio", "Cantidad"
}
) {
Class[] types = new Class [] {
java.lang.Integer.class, java.lang.String.class, java.lang.Float.class, java.lang.Integer.class
};
boolean[] canEdit = new boolean [] {
false, false, false, false
};
public Class getColumnClass(int columnIndex) {
return types [columnIndex];
}
public boolean isCellEditable(int rowIndex, int columnIndex) {
return canEdit [columnIndex];
}
});
jScrollPane2.setViewportView(tbConsulta);
TEAM UMBRELLA 66
javax.swing.GroupLayout jPanel2Layout = new javax.swing.GroupLayout(jPanel2);
jPanel2.setLayout(jPanel2Layout);
jPanel2Layout.setHorizontalGroup(
jPanel2Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addComponent(jScrollPane2, javax.swing.GroupLayout.DEFAULT_SIZE, 921,
Short.MAX_VALUE)
);
jPanel2Layout.setVerticalGroup(
jPanel2Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addComponent(jScrollPane2, javax.swing.GroupLayout.DEFAULT_SIZE, 362,
Short.MAX_VALUE)
);
txtBuscar.setFont(new java.awt.Font("Constantia", 0, 14)); // NOI18N
Buscar.setIcon(new
javax.swing.ImageIcon(getClass().getResource("/ImagenesFarmacia/1367607129_search_b.png")))
; // NOI18N
javax.swing.GroupLayout ConsultaLayout = new javax.swing.GroupLayout(Consulta);
Consulta.setLayout(ConsultaLayout);
ConsultaLayout.setHorizontalGroup(
ConsultaLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addComponent(jSeparator2)
.addGroup(ConsultaLayout.createSequentialGroup()
.addGroup(ConsultaLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(ConsultaLayout.createSequentialGroup()
.addContainerGap()
.addComponent(ConsultaG))
.addGroup(ConsultaLayout.createSequentialGroup()
TEAM UMBRELLA 67
.addGap(68, 68, 68)
.addComponent(jPanel2, javax.swing.GroupLayout.PREFERRED_SIZE,
javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
.addGroup(ConsultaLayout.createSequentialGroup()
.addGap(145, 145, 145)
.addComponent(txtBuscar, javax.swing.GroupLayout.PREFERRED_SIZE, 116,
javax.swing.GroupLayout.PREFERRED_SIZE)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addComponent(Buscar, javax.swing.GroupLayout.PREFERRED_SIZE, 40,
javax.swing.GroupLayout.PREFERRED_SIZE)))
.addContainerGap(86, Short.MAX_VALUE))
);
ConsultaLayout.setVerticalGroup(
ConsultaLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(ConsultaLayout.createSequentialGroup()
.addGap(40, 40, 40)
.addComponent(ConsultaG)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addComponent(jSeparator2, javax.swing.GroupLayout.PREFERRED_SIZE, 10,
javax.swing.GroupLayout.PREFERRED_SIZE)
.addGap(26, 26, 26)
.addGroup(ConsultaLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addComponent(Buscar, javax.swing.GroupLayout.PREFERRED_SIZE, 42,
javax.swing.GroupLayout.PREFERRED_SIZE)
.addGroup(ConsultaLayout.createSequentialGroup()
.addGap(9, 9, 9)
.addComponent(txtBuscar, javax.swing.GroupLayout.PREFERRED_SIZE,
javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)))
.addGap(30, 30, 30)
.addComponent(jPanel2, javax.swing.GroupLayout.PREFERRED_SIZE,
javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
TEAM UMBRELLA 68
.addContainerGap(103, Short.MAX_VALUE))
);
Comados.addTab("Consulta", new
javax.swing.ImageIcon(getClass().getResource("/ImagenesFarmacia/1367303711_add-
notes.png")), Consulta); // NOI18N
Reporte.setBackground(new java.awt.Color(255, 255, 255));
Reporte.setPreferredSize(new java.awt.Dimension(1075, 700));
ReporteG.setFont(new java.awt.Font("Constantia", 0, 18)); // NOI18N
ReporteG.setText("Reporte General");
Dia.setBackground(new java.awt.Color(204, 255, 204));
Dia.setFont(new java.awt.Font("Constantia", 0, 18)); // NOI18N
Dia.setForeground(new java.awt.Color(0, 102, 102));
Dia.setText("Por Día");
Semana.setBackground(new java.awt.Color(204, 255, 204));
Semana.setFont(new java.awt.Font("Constantia", 0, 18)); // NOI18N
Semana.setForeground(new java.awt.Color(0, 102, 102));
Semana.setText("Por Semana");
Mes.setBackground(new java.awt.Color(204, 255, 204));
Mes.setFont(new java.awt.Font("Constantia", 0, 18)); // NOI18N
Mes.setForeground(new java.awt.Color(0, 102, 102));
Mes.setText("Por mes");
jPanel3.setBackground(new java.awt.Color(255, 255, 255));
jPanel3.setBorder(javax.swing.BorderFactory.createLineBorder(new java.awt.Color(0, 0, 0)));
TEAM UMBRELLA 69
jScrollPane3.setBackground(new java.awt.Color(255, 255, 255));
tbReporte.setFont(new java.awt.Font("Constantia", 0, 14)); // NOI18N
tbReporte.setModel(new javax.swing.table.DefaultTableModel(
new Object [][] {
{null, null, null, null, null},
{null, null, null, null, null},
{null, null, null, null, null},
{null, null, null, null, null},
{null, null, null, null, null},
{null, null, null, null, null},
{null, null, null, null, null},
{null, null, null, null, null},
{null, null, null, null, null},
{null, null, null, null, null},
{null, null, null, null, null},
{null, null, null, null, null},
{null, null, null, null, null},
{null, null, null, null, null},
{null, null, null, null, null},
{null, null, null, null, null},
{null, null, null, null, null},
{null, null, null, null, null},
{null, null, null, null, null},
{null, null, null, null, null},
{null, null, null, null, null},
{null, null, null, null, null},
{null, null, null, null, null},
TEAM UMBRELLA 70
{null, null, null, null, null},
{null, null, null, null, null},
{null, null, null, null, null},
{null, null, null, null, null},
{null, null, null, null, null},
{null, null, null, null, null},
{null, null, null, null, null}
},
new String [] {
"ID del Producto", "Nombre del Producto", "Cantidad Vendida", "Ganancia", "Almacen"
}
) {
Class[] types = new Class [] {
java.lang.Integer.class, java.lang.String.class, java.lang.Integer.class, java.lang.Byte.class,
java.lang.Byte.class
};
boolean[] canEdit = new boolean [] {
false, false, false, false, false
};
public Class getColumnClass(int columnIndex) {
return types [columnIndex];
}
public boolean isCellEditable(int rowIndex, int columnIndex) {
return canEdit [columnIndex];
}
});
jScrollPane3.setViewportView(tbReporte);
TEAM UMBRELLA 71
javax.swing.GroupLayout jPanel3Layout = new javax.swing.GroupLayout(jPanel3);
jPanel3.setLayout(jPanel3Layout);
jPanel3Layout.setHorizontalGroup(
jPanel3Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addComponent(jScrollPane3, javax.swing.GroupLayout.DEFAULT_SIZE, 807,
Short.MAX_VALUE)
);
jPanel3Layout.setVerticalGroup(
jPanel3Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addComponent(jScrollPane3, javax.swing.GroupLayout.DEFAULT_SIZE, 363,
Short.MAX_VALUE)
);
javax.swing.GroupLayout ReporteLayout = new javax.swing.GroupLayout(Reporte);
Reporte.setLayout(ReporteLayout);
ReporteLayout.setHorizontalGroup(
ReporteLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addComponent(jSeparator3)
.addGroup(ReporteLayout.createSequentialGroup()
.addGroup(ReporteLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(ReporteLayout.createSequentialGroup()
.addContainerGap()
.addComponent(ReporteG))
.addGroup(ReporteLayout.createSequentialGroup()
.addGap(118, 118, 118)
.addComponent(Dia)
.addGap(139, 139, 139)
.addComponent(Semana)
TEAM UMBRELLA 72
.addGap(155, 155, 155)
.addComponent(Mes))
.addGroup(ReporteLayout.createSequentialGroup()
.addGap(63, 63, 63)
.addComponent(jPanel3, javax.swing.GroupLayout.PREFERRED_SIZE,
javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)))
.addContainerGap(205, Short.MAX_VALUE))
);
ReporteLayout.setVerticalGroup(
ReporteLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(ReporteLayout.createSequentialGroup()
.addGap(35, 35, 35)
.addComponent(ReporteG)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addComponent(jSeparator3, javax.swing.GroupLayout.PREFERRED_SIZE, 10,
javax.swing.GroupLayout.PREFERRED_SIZE)
.addGap(13, 13, 13)
.addGroup(ReporteLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
.addComponent(Dia)
.addComponent(Semana)
.addComponent(Mes))
.addGap(28, 28, 28)
.addComponent(jPanel3, javax.swing.GroupLayout.PREFERRED_SIZE,
javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
.addContainerGap(133, Short.MAX_VALUE))
);
Comados.addTab("Reporte", new
javax.swing.ImageIcon(getClass().getResource("/ImagenesFarmacia/1367303790_todo_list_add.p
ng")), Reporte); // NOI18N
TEAM UMBRELLA 73
Proveedor.setBackground(new java.awt.Color(255, 255, 255));
ProveedorG.setFont(new java.awt.Font("Constantia", 0, 18)); // NOI18N
ProveedorG.setText("Proveedor General");
jPanel4.setBackground(new java.awt.Color(255, 255, 255));
jPanel4.setBorder(javax.swing.BorderFactory.createLineBorder(new java.awt.Color(0, 0, 0)));
jScrollPane4.setBackground(new java.awt.Color(255, 255, 255));
tbProveedor.setFont(new java.awt.Font("Constantia", 0, 14)); // NOI18N
tbProveedor.setModel(new javax.swing.table.DefaultTableModel(
new Object [][] {
{null, null, null, null},
{null, null, null, null},
{null, null, null, null},
{null, null, null, null},
{null, null, null, null},
{null, null, null, null},
{null, null, null, null},
{null, null, null, null},
{null, null, null, null},
{null, null, null, null},
{null, null, null, null},
{null, null, null, null},
{null, null, null, null},
{null, null, null, null},
{null, null, null, null},
TEAM UMBRELLA 74
{null, null, null, null},
{null, null, null, null},
{null, null, null, null},
{null, null, null, null},
{null, null, null, null},
{null, null, null, null},
{null, null, null, null},
{null, null, null, null},
{null, null, null, null},
{null, null, null, null},
{null, null, null, null},
{null, null, null, null},
{null, null, null, null},
{null, null, null, null},
{null, null, null, null}
},
new String [] {
"Nombre del Proveedor", "Dirección", "Num. Telefonico", "Tipo de Servicio"
}
) {
Class[] types = new Class [] {
java.lang.String.class, java.lang.String.class, java.lang.Byte.class, java.lang.String.class
};
boolean[] canEdit = new boolean [] {
false, false, false, false
};
public Class getColumnClass(int columnIndex) {
return types [columnIndex];
TEAM UMBRELLA 75
}
public boolean isCellEditable(int rowIndex, int columnIndex) {
return canEdit [columnIndex];
}
});
jScrollPane4.setViewportView(tbProveedor);
javax.swing.GroupLayout jPanel4Layout = new javax.swing.GroupLayout(jPanel4);
jPanel4.setLayout(jPanel4Layout);
jPanel4Layout.setHorizontalGroup(
jPanel4Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addComponent(jScrollPane4, javax.swing.GroupLayout.DEFAULT_SIZE, 862,
Short.MAX_VALUE)
);
jPanel4Layout.setVerticalGroup(
jPanel4Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addComponent(jScrollPane4, javax.swing.GroupLayout.DEFAULT_SIZE, 366,
Short.MAX_VALUE)
);
javax.swing.GroupLayout ProveedorLayout = new javax.swing.GroupLayout(Proveedor);
Proveedor.setLayout(ProveedorLayout);
ProveedorLayout.setHorizontalGroup(
ProveedorLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addComponent(jSeparator4)
.addGroup(ProveedorLayout.createSequentialGroup()
.addGroup(ProveedorLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(ProveedorLayout.createSequentialGroup()
TEAM UMBRELLA 76
.addContainerGap()
.addComponent(ProveedorG))
.addGroup(ProveedorLayout.createSequentialGroup()
.addGap(59, 59, 59)
.addComponent(jPanel4, javax.swing.GroupLayout.PREFERRED_SIZE,
javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)))
.addContainerGap(154, Short.MAX_VALUE))
);
ProveedorLayout.setVerticalGroup(
ProveedorLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(ProveedorLayout.createSequentialGroup()
.addGap(38, 38, 38)
.addComponent(ProveedorG)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addComponent(jSeparator4, javax.swing.GroupLayout.PREFERRED_SIZE, 10,
javax.swing.GroupLayout.PREFERRED_SIZE)
.addGap(42, 42, 42)
.addComponent(jPanel4, javax.swing.GroupLayout.PREFERRED_SIZE,
javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
.addContainerGap(157, Short.MAX_VALUE))
);
Comados.addTab("Proveedor", new
javax.swing.ImageIcon(getClass().getResource("/ImagenesFarmacia/1367303797_network_add.pn
g")), Proveedor); // NOI18N
Modificar.setBackground(new java.awt.Color(255, 255, 255));
ModificarDatos.setFont(new java.awt.Font("Constantia", 0, 18)); // NOI18N
ModificarDatos.setText("Modificación de Datos");
TEAM UMBRELLA 77
jPanel5.setBackground(new java.awt.Color(255, 255, 255));
jPanel5.setBorder(javax.swing.BorderFactory.createLineBorder(new java.awt.Color(0, 0, 0)));
PestañaModif.setBackground(new java.awt.Color(255, 255, 255));
PestañaModif.setFont(new java.awt.Font("Constantia", 0, 14)); // NOI18N
producto.setBackground(new java.awt.Color(255, 255, 255));
jPanel6.setBackground(new java.awt.Color(255, 255, 255));
jPanel6.setBorder(javax.swing.BorderFactory.createLineBorder(new java.awt.Color(153, 153,
153)));
jScrollPane5.setBackground(new java.awt.Color(255, 255, 255));
tbProducto.setFont(new java.awt.Font("Constantia", 0, 14)); // NOI18N
tbProducto.setModel(new javax.swing.table.DefaultTableModel(
new Object [][] {
{null, null, null, null},
{null, null, null, null},
{null, null, null, null},
{null, null, null, null},
{null, null, null, null},
{null, null, null, null},
{null, null, null, null},
{null, null, null, null},
{null, null, null, null},
{null, null, null, null},
{null, null, null, null},
{null, null, null, null},
TEAM UMBRELLA 78
{null, null, null, null},
{null, null, null, null},
{null, null, null, null},
{null, null, null, null},
{null, null, null, null},
{null, null, null, null},
{null, null, null, null},
{null, null, null, null},
{null, null, null, null},
{null, null, null, null},
{null, null, null, null},
{null, null, null, null},
{null, null, null, null},
{null, null, null, null},
{null, null, null, null},
{null, null, null, null},
{null, null, null, null},
{null, null, null, null}
},
new String [] {
"ID", "Nombre", "Cantidad", "Precio"
}
) {
Class[] types = new Class [] {
java.lang.String.class, java.lang.String.class, java.lang.Byte.class, java.lang.Float.class
};
boolean[] canEdit = new boolean [] {
false, false, true, true
};
TEAM UMBRELLA 79
public Class getColumnClass(int columnIndex) {
return types [columnIndex];
}
public boolean isCellEditable(int rowIndex, int columnIndex) {
return canEdit [columnIndex];
}
});
jScrollPane5.setViewportView(tbProducto);
javax.swing.GroupLayout jPanel6Layout = new javax.swing.GroupLayout(jPanel6);
jPanel6.setLayout(jPanel6Layout);
jPanel6Layout.setHorizontalGroup(
jPanel6Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addComponent(jScrollPane5, javax.swing.GroupLayout.DEFAULT_SIZE, 553,
Short.MAX_VALUE)
);
jPanel6Layout.setVerticalGroup(
jPanel6Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addComponent(jScrollPane5, javax.swing.GroupLayout.DEFAULT_SIZE, 348,
Short.MAX_VALUE)
);
AltaPro.setBackground(new java.awt.Color(204, 255, 204));
AltaPro.setFont(new java.awt.Font("Constantia", 0, 18)); // NOI18N
AltaPro.setForeground(new java.awt.Color(0, 102, 102));
AltaPro.setText("Alta");
BajaPro.setBackground(new java.awt.Color(204, 255, 204));
TEAM UMBRELLA 80
BajaPro.setFont(new java.awt.Font("Constantia", 0, 18)); // NOI18N
BajaPro.setForeground(new java.awt.Color(0, 102, 102));
BajaPro.setText("Baja");
ModifPro.setBackground(new java.awt.Color(204, 255, 204));
ModifPro.setFont(new java.awt.Font("Constantia", 0, 18)); // NOI18N
ModifPro.setForeground(new java.awt.Color(0, 102, 102));
ModifPro.setText("Modificar");
javax.swing.GroupLayout productoLayout = new javax.swing.GroupLayout(producto);
producto.setLayout(productoLayout);
productoLayout.setHorizontalGroup(
productoLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(productoLayout.createSequentialGroup()
.addGap(27, 27, 27)
.addComponent(jPanel6, javax.swing.GroupLayout.PREFERRED_SIZE,
javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
.addGap(40, 40, 40)
.addGroup(productoLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addComponent(AltaPro)
.addComponent(BajaPro)
.addComponent(ModifPro))
.addContainerGap(144, Short.MAX_VALUE))
);
productoLayout.setVerticalGroup(
productoLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(productoLayout.createSequentialGroup()
.addGroup(productoLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
TEAM UMBRELLA 81
.addGroup(productoLayout.createSequentialGroup()
.addGap(35, 35, 35)
.addComponent(jPanel6, javax.swing.GroupLayout.PREFERRED_SIZE,
javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
.addGroup(productoLayout.createSequentialGroup()
.addGap(114, 114, 114)
.addComponent(AltaPro)
.addGap(41, 41, 41)
.addComponent(BajaPro)
.addGap(42, 42, 42)
.addComponent(ModifPro)))
.addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
);
PestañaModif.addTab("Producto", producto);
Farmaco.setBackground(new java.awt.Color(255, 255, 255));
jPanel8.setBackground(new java.awt.Color(255, 255, 255));
jPanel8.setBorder(javax.swing.BorderFactory.createLineBorder(new java.awt.Color(102, 102,
102)));
jScrollPane6.setBackground(new java.awt.Color(255, 255, 255));
tbFarmaco.setFont(new java.awt.Font("Constantia", 0, 14)); // NOI18N
tbFarmaco.setModel(new javax.swing.table.DefaultTableModel(
new Object [][] {
{null, null, null, null},
{null, null, null, null},
{null, null, null, null},
TEAM UMBRELLA 82
{null, null, null, null},
{null, null, null, null},
{null, null, null, null},
{null, null, null, null},
{null, null, null, null},
{null, null, null, null},
{null, null, null, null},
{null, null, null, null},
{null, null, null, null},
{null, null, null, null},
{null, null, null, null},
{null, null, null, null},
{null, null, null, null},
{null, null, null, null},
{null, null, null, null},
{null, null, null, null},
{null, null, null, null},
{null, null, null, null},
{null, null, null, null},
{null, null, null, null},
{null, null, null, null},
{null, null, null, null},
{null, null, null, null},
{null, null, null, null},
{null, null, null, null},
{null, null, null, null},
{null, null, null, null}
},
new String [] {
TEAM UMBRELLA 83
"ID", "Nombre", "Cantidad", "Precio"
}
) {
boolean[] canEdit = new boolean [] {
false, false, false, false
};
public boolean isCellEditable(int rowIndex, int columnIndex) {
return canEdit [columnIndex];
}
});
jScrollPane6.setViewportView(tbFarmaco);
javax.swing.GroupLayout jPanel8Layout = new javax.swing.GroupLayout(jPanel8);
jPanel8.setLayout(jPanel8Layout);
jPanel8Layout.setHorizontalGroup(
jPanel8Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addComponent(jScrollPane6, javax.swing.GroupLayout.DEFAULT_SIZE, 553,
Short.MAX_VALUE)
);
jPanel8Layout.setVerticalGroup(
jPanel8Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addComponent(jScrollPane6, javax.swing.GroupLayout.DEFAULT_SIZE, 348,
Short.MAX_VALUE)
);
AltaFar.setBackground(new java.awt.Color(204, 255, 204));
AltaFar.setFont(new java.awt.Font("Constantia", 0, 18)); // NOI18N
AltaFar.setForeground(new java.awt.Color(0, 102, 102));
AltaFar.setText("Alta");
TEAM UMBRELLA 84
BajaFarm.setBackground(new java.awt.Color(204, 255, 204));
BajaFarm.setFont(new java.awt.Font("Constantia", 0, 18)); // NOI18N
BajaFarm.setForeground(new java.awt.Color(0, 102, 102));
BajaFarm.setText("Baja");
ModifFarm.setBackground(new java.awt.Color(204, 255, 204));
ModifFarm.setFont(new java.awt.Font("Constantia", 0, 18)); // NOI18N
ModifFarm.setForeground(new java.awt.Color(0, 102, 102));
ModifFarm.setText("Modificar");
javax.swing.GroupLayout FarmacoLayout = new javax.swing.GroupLayout(Farmaco);
Farmaco.setLayout(FarmacoLayout);
FarmacoLayout.setHorizontalGroup(
FarmacoLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(FarmacoLayout.createSequentialGroup()
.addGap(27, 27, 27)
.addComponent(jPanel8, javax.swing.GroupLayout.PREFERRED_SIZE,
javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
.addGap(40, 40, 40)
.addGroup(FarmacoLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addComponent(AltaFar)
.addComponent(BajaFarm)
.addComponent(ModifFarm))
.addContainerGap(144, Short.MAX_VALUE))
);
FarmacoLayout.setVerticalGroup(
FarmacoLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(FarmacoLayout.createSequentialGroup()
TEAM UMBRELLA 85
.addGroup(FarmacoLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(FarmacoLayout.createSequentialGroup()
.addGap(114, 114, 114)
.addComponent(AltaFar)
.addGap(41, 41, 41)
.addComponent(BajaFarm)
.addGap(42, 42, 42)
.addComponent(ModifFarm))
.addGroup(FarmacoLayout.createSequentialGroup()
.addGap(35, 35, 35)
.addComponent(jPanel8, javax.swing.GroupLayout.PREFERRED_SIZE,
javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)))
.addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
);
PestañaModif.addTab("Farmaco", Farmaco);
Empleados.setBackground(new java.awt.Color(255, 255, 255));
jPanel7.setBackground(new java.awt.Color(255, 255, 255));
jPanel7.setBorder(javax.swing.BorderFactory.createLineBorder(new java.awt.Color(0, 0, 0)));
jScrollPane7.setBackground(new java.awt.Color(255, 255, 255));
tbEmpleado.setFont(new java.awt.Font("Constantia", 0, 14)); // NOI18N
tbEmpleado.setModel(new javax.swing.table.DefaultTableModel(
new Object [][] {
{null, null, null, null},
{null, null, null, null},
TEAM UMBRELLA 86
{null, null, null, null},
{null, null, null, null},
{null, null, null, null},
{null, null, null, null},
{null, null, null, null},
{null, null, null, null},
{null, null, null, null},
{null, null, null, null},
{null, null, null, null},
{null, null, null, null},
{null, null, null, null},
{null, null, null, null},
{null, null, null, null},
{null, null, null, null},
{null, null, null, null},
{null, null, null, null},
{null, null, null, null},
{null, null, null, null},
{null, null, null, null},
{null, null, null, null},
{null, null, null, null},
{null, null, null, null},
{null, null, null, null},
{null, null, null, null},
{null, null, null, null},
{null, null, null, null},
{null, null, null, null},
{null, null, null, null}
},
TEAM UMBRELLA 87
new String [] {
"Matricula", "Nombre", "Apellido", "Cargo"
}
) {
boolean[] canEdit = new boolean [] {
false, false, true, false
};
public boolean isCellEditable(int rowIndex, int columnIndex) {
return canEdit [columnIndex];
}
});
jScrollPane7.setViewportView(tbEmpleado);
javax.swing.GroupLayout jPanel7Layout = new javax.swing.GroupLayout(jPanel7);
jPanel7.setLayout(jPanel7Layout);
jPanel7Layout.setHorizontalGroup(
jPanel7Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addComponent(jScrollPane7, javax.swing.GroupLayout.DEFAULT_SIZE, 553,
Short.MAX_VALUE)
);
jPanel7Layout.setVerticalGroup(
jPanel7Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addComponent(jScrollPane7, javax.swing.GroupLayout.DEFAULT_SIZE, 348,
Short.MAX_VALUE)
);
AltaEmple.setBackground(new java.awt.Color(204, 255, 204));
AltaEmple.setFont(new java.awt.Font("Constantia", 0, 18)); // NOI18N
AltaEmple.setForeground(new java.awt.Color(0, 102, 102));
TEAM UMBRELLA 88
AltaEmple.setText("Alta");
BajaEmple.setBackground(new java.awt.Color(204, 255, 204));
BajaEmple.setFont(new java.awt.Font("Constantia", 0, 18)); // NOI18N
BajaEmple.setForeground(new java.awt.Color(0, 102, 102));
BajaEmple.setText("Baja");
ModifEmple.setBackground(new java.awt.Color(204, 255, 204));
ModifEmple.setFont(new java.awt.Font("Constantia", 0, 18)); // NOI18N
ModifEmple.setForeground(new java.awt.Color(0, 102, 102));
ModifEmple.setText("Modificar");
javax.swing.GroupLayout EmpleadosLayout = new javax.swing.GroupLayout(Empleados);
Empleados.setLayout(EmpleadosLayout);
EmpleadosLayout.setHorizontalGroup(
EmpleadosLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(EmpleadosLayout.createSequentialGroup()
.addGap(27, 27, 27)
.addComponent(jPanel7, javax.swing.GroupLayout.PREFERRED_SIZE,
javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
.addGap(40, 40, 40)
.addGroup(EmpleadosLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addComponent(BajaEmple)
.addComponent(AltaEmple)
.addComponent(ModifEmple))
.addContainerGap(144, Short.MAX_VALUE))
);
EmpleadosLayout.setVerticalGroup(
EmpleadosLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
TEAM UMBRELLA 89
.addGroup(EmpleadosLayout.createSequentialGroup()
.addGroup(EmpleadosLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(EmpleadosLayout.createSequentialGroup()
.addGap(35, 35, 35)
.addComponent(jPanel7, javax.swing.GroupLayout.PREFERRED_SIZE,
javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
.addGroup(EmpleadosLayout.createSequentialGroup()
.addGap(114, 114, 114)
.addComponent(AltaEmple)
.addGap(41, 41, 41)
.addComponent(BajaEmple)
.addGap(42, 42, 42)
.addComponent(ModifEmple)))
.addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
);
PestañaModif.addTab("Empleados", Empleados);
Provee.setBackground(new java.awt.Color(255, 255, 255));
jPanel9.setBackground(new java.awt.Color(255, 255, 255));
jPanel9.setBorder(javax.swing.BorderFactory.createLineBorder(new java.awt.Color(102, 102,
102)));
jScrollPane8.setBackground(new java.awt.Color(255, 255, 255));
tbProvee.setModel(new javax.swing.table.DefaultTableModel(
new Object [][] {
{null, null, null, null},
TEAM UMBRELLA 90
{null, null, null, null},
{null, null, null, null},
{null, null, null, null},
{null, null, null, null},
{null, null, null, null},
{null, null, null, null},
{null, null, null, null},
{null, null, null, null},
{null, null, null, null},
{null, null, null, null},
{null, null, null, null},
{null, null, null, null},
{null, null, null, null},
{null, null, null, null},
{null, null, null, null},
{null, null, null, null},
{null, null, null, null},
{null, null, null, null},
{null, null, null, null},
{null, null, null, null},
{null, null, null, null},
{null, null, null, null},
{null, null, null, null},
{null, null, null, null},
{null, null, null, null},
{null, null, null, null},
{null, null, null, null},
{null, null, null, null},
{null, null, null, null}
TEAM UMBRELLA 91
},
new String [] {
"Nombre", "Tipo de Servicio", "Dirección", "Num. Telefono"
}
) {
boolean[] canEdit = new boolean [] {
false, false, false, false
};
public boolean isCellEditable(int rowIndex, int columnIndex) {
return canEdit [columnIndex];
}
});
jScrollPane8.setViewportView(tbProvee);
javax.swing.GroupLayout jPanel9Layout = new javax.swing.GroupLayout(jPanel9);
jPanel9.setLayout(jPanel9Layout);
jPanel9Layout.setHorizontalGroup(
jPanel9Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addComponent(jScrollPane8, javax.swing.GroupLayout.DEFAULT_SIZE, 553,
Short.MAX_VALUE)
);
jPanel9Layout.setVerticalGroup(
jPanel9Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addComponent(jScrollPane8, javax.swing.GroupLayout.DEFAULT_SIZE, 348,
Short.MAX_VALUE)
);
AltaModif.setBackground(new java.awt.Color(204, 255, 204));
AltaModif.setFont(new java.awt.Font("Constantia", 0, 18)); // NOI18N
TEAM UMBRELLA 92
AltaModif.setForeground(new java.awt.Color(0, 102, 102));
AltaModif.setText("Alta");
BajaModif.setBackground(new java.awt.Color(204, 255, 204));
BajaModif.setFont(new java.awt.Font("Constantia", 0, 18)); // NOI18N
BajaModif.setForeground(new java.awt.Color(0, 102, 102));
BajaModif.setText("Baja");
Modifprovee.setBackground(new java.awt.Color(204, 255, 204));
Modifprovee.setFont(new java.awt.Font("Constantia", 0, 18)); // NOI18N
Modifprovee.setForeground(new java.awt.Color(0, 102, 102));
Modifprovee.setText("Modificar");
javax.swing.GroupLayout ProveeLayout = new javax.swing.GroupLayout(Provee);
Provee.setLayout(ProveeLayout);
ProveeLayout.setHorizontalGroup(
ProveeLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(ProveeLayout.createSequentialGroup()
.addGap(27, 27, 27)
.addComponent(jPanel9, javax.swing.GroupLayout.PREFERRED_SIZE,
javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
.addGap(40, 40, 40)
.addGroup(ProveeLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addComponent(AltaModif)
.addComponent(BajaModif)
.addComponent(Modifprovee))
.addContainerGap(144, Short.MAX_VALUE))
);
ProveeLayout.setVerticalGroup(
TEAM UMBRELLA 93
ProveeLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(ProveeLayout.createSequentialGroup()
.addGroup(ProveeLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(ProveeLayout.createSequentialGroup()
.addGap(35, 35, 35)
.addComponent(jPanel9, javax.swing.GroupLayout.PREFERRED_SIZE,
javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
.addGroup(ProveeLayout.createSequentialGroup()
.addGap(114, 114, 114)
.addComponent(AltaModif)
.addGap(41, 41, 41)
.addComponent(BajaModif)
.addGap(42, 42, 42)
.addComponent(Modifprovee)))
.addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
);
PestañaModif.addTab("Proveedor", Provee);
javax.swing.GroupLayout jPanel5Layout = new javax.swing.GroupLayout(jPanel5);
jPanel5.setLayout(jPanel5Layout);
jPanel5Layout.setHorizontalGroup(
jPanel5Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addComponent(PestañaModif)
);
jPanel5Layout.setVerticalGroup(
jPanel5Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addComponent(PestañaModif)
);
TEAM UMBRELLA 94
javax.swing.GroupLayout ModificarLayout = new javax.swing.GroupLayout(Modificar);
Modificar.setLayout(ModificarLayout);
ModificarLayout.setHorizontalGroup(
ModificarLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addComponent(jSeparator5)
.addGroup(ModificarLayout.createSequentialGroup()
.addGroup(ModificarLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(ModificarLayout.createSequentialGroup()
.addContainerGap()
.addComponent(ModificarDatos))
.addGroup(ModificarLayout.createSequentialGroup()
.addGap(59, 59, 59)
.addComponent(jPanel5, javax.swing.GroupLayout.PREFERRED_SIZE,
javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)))
.addContainerGap(136, Short.MAX_VALUE))
);
ModificarLayout.setVerticalGroup(
ModificarLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(ModificarLayout.createSequentialGroup()
.addGap(35, 35, 35)
.addComponent(ModificarDatos)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addComponent(jSeparator5, javax.swing.GroupLayout.PREFERRED_SIZE, 10,
javax.swing.GroupLayout.PREFERRED_SIZE)
.addGap(37, 37, 37)
.addComponent(jPanel5, javax.swing.GroupLayout.PREFERRED_SIZE,
javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
.addContainerGap(103, Short.MAX_VALUE))
TEAM UMBRELLA 95
);
Comados.addTab("Modificar", new
javax.swing.ImageIcon(getClass().getResource("/ImagenesFarmacia/1367303844_cog_add.png")),
Modificar); // NOI18N
jComboBox1.setFont(new java.awt.Font("Constantia", 0, 14)); // NOI18N
jComboBox1.setModel(new javax.swing.DefaultComboBoxModel(new String[] {
"Administrador", "Perfil", "Salir" }));
jTextField1.setEditable(false);
javax.swing.GroupLayout PestañasLayout = new javax.swing.GroupLayout(Pestañas);
Pestañas.setLayout(PestañasLayout);
PestañasLayout.setHorizontalGroup(
PestañasLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addComponent(Comados, javax.swing.GroupLayout.PREFERRED_SIZE, 1082,
Short.MAX_VALUE)
.addGroup(javax.swing.GroupLayout.Alignment.TRAILING,
PestañasLayout.createSequentialGroup()
.addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
.addComponent(jTextField1, javax.swing.GroupLayout.PREFERRED_SIZE, 42,
javax.swing.GroupLayout.PREFERRED_SIZE)
.addGap(29, 29, 29)
.addComponent(jComboBox1, javax.swing.GroupLayout.PREFERRED_SIZE,
javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
.addGap(28, 28, 28))
);
PestañasLayout.setVerticalGroup(
PestañasLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(javax.swing.GroupLayout.Alignment.TRAILING,
PestañasLayout.createSequentialGroup()
TEAM UMBRELLA 96
.addGroup(PestañasLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING,
false)
.addGroup(PestañasLayout.createSequentialGroup()
.addContainerGap()
.addComponent(jComboBox1, javax.swing.GroupLayout.PREFERRED_SIZE,
javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
.addComponent(jTextField1))
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED,
javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
.addComponent(Comados, javax.swing.GroupLayout.PREFERRED_SIZE, 690,
javax.swing.GroupLayout.PREFERRED_SIZE))
);
javax.swing.GroupLayout FondoLayout = new javax.swing.GroupLayout(Fondo);
Fondo.setLayout(FondoLayout);
FondoLayout.setHorizontalGroup(
FondoLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addComponent(Pestañas, javax.swing.GroupLayout.PREFERRED_SIZE,
javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
);
FondoLayout.setVerticalGroup(
FondoLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(javax.swing.GroupLayout.Alignment.TRAILING,
FondoLayout.createSequentialGroup()
.addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
.addComponent(Pestañas, javax.swing.GroupLayout.PREFERRED_SIZE,
javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
.addGap(127, 127, 127))
);
javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());
TEAM UMBRELLA 97
getContentPane().setLayout(layout);
layout.setHorizontalGroup(
layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(layout.createSequentialGroup()
.addComponent(Fondo, javax.swing.GroupLayout.PREFERRED_SIZE,
javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
.addGap(0, 46, Short.MAX_VALUE))
);
layout.setVerticalGroup(
layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(layout.createSequentialGroup()
.addContainerGap()
.addComponent(Fondo, javax.swing.GroupLayout.PREFERRED_SIZE, 740,
Short.MAX_VALUE)
.addGap(134, 134, 134))
);
pack();
}// </editor-fold>
/**
* @param args the command line arguments
*/
public static void main(String args[]) {
try {
for (javax.swing.UIManager.LookAndFeelInfo info :
javax.swing.UIManager.getInstalledLookAndFeels()) {
if ("Nimbus".equals(info.getName())) {
javax.swing.UIManager.setLookAndFeel(info.getClassName());
TEAM UMBRELLA 98
break;
}
}
} catch (ClassNotFoundException ex) {
java.util.logging.Logger.getLogger(Ventanas.class.getName()).log(java.util.logging.Level.SEVERE,
null, ex);
} catch (InstantiationException ex) {
java.util.logging.Logger.getLogger(Ventanas.class.getName()).log(java.util.logging.Level.SEVERE,
null, ex);
} catch (IllegalAccessException ex) {
java.util.logging.Logger.getLogger(Ventanas.class.getName()).log(java.util.logging.Level.SEVERE,
null, ex);
} catch (javax.swing.UnsupportedLookAndFeelException ex) {
java.util.logging.Logger.getLogger(Ventanas.class.getName()).log(java.util.logging.Level.SEVERE,
null, ex);
}
//</editor-fold>
/* Create and display the form */
java.awt.EventQueue.invokeLater(new Runnable() {
public void run() {
new Ventanas().setVisible(true);
}
});
}
// Variables declaration - do not modify
private javax.swing.JButton AltaEmple;
private javax.swing.JButton AltaFar;
TEAM UMBRELLA 99
private javax.swing.JButton AltaModif;
private javax.swing.JButton AltaPro;
private javax.swing.JButton BajaEmple;
private javax.swing.JButton BajaFarm;
private javax.swing.JButton BajaModif;
private javax.swing.JButton BajaPro;
private javax.swing.JButton Buscar;
private javax.swing.JButton CancelarV;
private javax.swing.JLabel Codigo;
private javax.swing.JTabbedPane Comados;
private javax.swing.JPanel Consulta;
private javax.swing.JLabel ConsultaG;
private javax.swing.JButton Credito;
private javax.swing.JButton Debito;
private javax.swing.JButton Dia;
private javax.swing.JButton Efectivo;
private javax.swing.JPanel Empleados;
private javax.swing.JPanel Farmaco;
private javax.swing.JPanel Fondo;
private javax.swing.JButton Mes;
private javax.swing.JButton ModifEmple;
private javax.swing.JButton ModifFarm;
private javax.swing.JButton ModifPro;
private javax.swing.JPanel Modificar;
private javax.swing.JLabel ModificarDatos;
private javax.swing.JButton Modifprovee;
private javax.swing.JLabel Pago;
private javax.swing.JTabbedPane PestañaModif;
private javax.swing.JPanel Pestañas;
TEAM UMBRELLA 100
private javax.swing.JPanel Provee;
private javax.swing.JPanel Proveedor;
private javax.swing.JLabel ProveedorG;
private javax.swing.JLabel PublicoG;
private javax.swing.JPanel Reporte;
private javax.swing.JLabel ReporteG;
private javax.swing.JButton Semana;
private javax.swing.JLabel Total;
private javax.swing.JPanel Ventas;
private javax.swing.JComboBox jComboBox1;
private javax.swing.JPanel jPanel1;
private javax.swing.JPanel jPanel2;
private javax.swing.JPanel jPanel3;
private javax.swing.JPanel jPanel4;
private javax.swing.JPanel jPanel5;
private javax.swing.JPanel jPanel6;
private javax.swing.JPanel jPanel7;
private javax.swing.JPanel jPanel8;
private javax.swing.JPanel jPanel9;
private javax.swing.JScrollPane jScrollPane1;
private javax.swing.JScrollPane jScrollPane2;
private javax.swing.JScrollPane jScrollPane3;
private javax.swing.JScrollPane jScrollPane4;
private javax.swing.JScrollPane jScrollPane5;
private javax.swing.JScrollPane jScrollPane6;
private javax.swing.JScrollPane jScrollPane7;
private javax.swing.JScrollPane jScrollPane8;
private javax.swing.JSeparator jSeparator1;
private javax.swing.JSeparator jSeparator2;
TEAM UMBRELLA 101
private javax.swing.JSeparator jSeparator3;
private javax.swing.JSeparator jSeparator4;
private javax.swing.JSeparator jSeparator5;
private javax.swing.JTextField jTextField1;
private javax.swing.JPanel producto;
private javax.swing.JTable tbConsulta;
private javax.swing.JTable tbEmpleado;
private javax.swing.JTable tbFarmaco;
private javax.swing.JTable tbProducto;
private javax.swing.JTable tbProvee;
private javax.swing.JTable tbProveedor;
private javax.swing.JTable tbReporte;
private javax.swing.JTable tbVenta;
private javax.swing.JTextField txtBuscar;
private javax.swing.JTextField txtCodigo;
private javax.swing.JTextField txtTotal;
// End of variables declaration
}
TEAM UMBRELLA 102
9 Prueba del sistema Se procedió a realizar una simulación de las funcionalidades del sistema desarrollado, cabe
destacar que los resultados de dicha prueba son ficticios, puesto que el mismo aún no ha sido
concluido.
9.1 Matriz de tipos de pruebas
ID de
prueb
a Tipo Caso a probar
Requerimientos
Descripción amplia del
caso a probar
Resultados esperados
Resultados
obtenidos
Estatus de
la prueb
a
Propietario del
caso de prueba
Observaciones o
Comentarios
111 Funcional Ejecución del software
S.O Windows 7
Se testeara el software en un S.O para probar su rendimiento y consumo de recursos.
El software debe de ejecutarse de forma normal en el sistema, sin consumo excesivo de recursos
El software ejecuto y funciono de una manera normal, el consumo de recursos es mínimo
OK Tester
El consumo de recursos por parte del programa, depende del sistema operativo que se esté usando
112 Aceptación Muestro del software al cliente
Testeo del software por parte del cliente
Se mostrara el software terminado al cliente y este procederá a probarlo, para así verificar que el software cumpla con lo que el contrato establece
El software deberá satisfacer al usuario y cumplir con las funcionalidades que se solicitaron
El cliente ha mostrado satisfacción con el software y ha declarado que este cumple con sus expectativas
OK Cliente
El cliente ha solicitado un "Plus" para el software, la petición es básica así que se puede otorgar
113 Integridad de datos
Testeo de la base de datos
Conectividad con la base de datos
Se procederá a verificar la manera en que la base de datos almacena los datos que recibe
La base de datos tendrá control total de la información que maneja, y la almacenara de forma correcta
La base de datos maneja de manera normal y segura los datos que le son otorgados
OK Tester
La Convergencia de la base de datos depende directamente del tipo de conexión que se maneja
114 Interfaz de
usuario Testeo de calidad intuitiva
Interfaz terminada
Se procederá a verificar si la interfaz del software es de un fácil manejo
La interfaz de usuario será limpia e intuitiva
La interfaz de usuario demostró ser limpia e intuitiva
OK Tester
La interfaz ha pesar de ser de fácil manejo he intuitiva, deja algunos espacios libres que pueden ser usados a futuro
TEAM UMBRELLA 103
115 Seguridad y control de
acceso
Testeo del sistema de privilegios(usuario, Administrador)
Conectividad con la base de datos
Se procederá a buscar que el software y la base de datos, otorga los privilegios correctamente a cada usuario
El sistema controla bien los privilegios, un usuario normal no tiene privilegios administrativos
El sistema tiene en regla su control sobre los privilegios que tiene cada usuario
OK Tester
Por motivos de seguridad, solo se permite un Administrador
116 Recuperación y falla
Testeo de desconexión y cierre inesperado del software
Software concluido
Se procederá a probar la capacidad del programa ante un fallo del sistema (S.O), y la capacidad que tiene este de recuperar los datos con los que trabajaba.
El sistema es capaz de recuperar la última información con la que estaba trabajando
El sistema fue incapaz de recuperar la información con la que trabajaba, esto es por un factor externo (fallo del S.O)
FALLO Tester
El software demostró no tener la capacidad de recuperar su información, después de un análisis se determinó que la capacidad de recuperación, depende del S.O que se esté usando
10 Puesta en Marcha del Proyecto
10.1 Instalación del proyecto Esta sección queda en fase Alpha, ya que no pertenece a la materia en sí, y el software no ha sido
concluido.
11 Documentación La documentación que se muestra a continuación, está basada en la teoría en la que el software
está finalizado, si bien los documentos referidos al software están completos, servirán como guía
para el diseño de los manuales.
11.1 Técnica operativa La técnica que se empleó para la elaboración de este proyecto fue la de Factibilidad de Fecha, ya
que el proyecto que se necesita está limitado por una fecha, cabe destacar que por la inexperiencia
laboral de los miembros del equipo, se incurrió en capacitarlos y esto tomo tiempo, pero todo estaba
dentro del plan de desarrollo de la documentación, pues gracias a la factibilidad de fecha, se fijaron
periodos en los cuales deberían de estar terminados los documentos, es imprescindible decir que la
documentación está concluida en un 90% y el software desarrollado solo está avanzado en un 15%.
TEAM UMBRELLA 104
11.2 Manual técnico La siguiente información que se muestra está basada en la emulación del software funcionando, si
bien el software que se planea desarrollar destaca por su facilidad de manejo, es muy importante
dar referencia de las tecnologías que se usaran en él.
Paradigma de programación usada y sus beneficios:
Se decidió emplear el lenguaje de programación JAVA, ya que es un lenguaje fuertemente tipiado,
y destaca por ser orientado a objetos, esto constituye una fortaleza para el desarrollo del software
en este proyecto, ya que se ahorró tiempo al poder dividir el programa por módulos y luego irlos
acoplando, de esta manera, se aseguró el éxito en la funcionalidad del software y una gran
capacidad de actualización o anexión de nuevas funcionalidades
11.3 Manual de usuario El propósito de este Manual es facilitar al usuario la operación de las diferentes Pantallas de captura y consulta de la información que se administra en el Sistema Informático de Contraloría Social.
1) Implementación del sistema:
a) Requerimientos de hardware: Contar con:
Computadora cliente (Sera la computadora cliente)
Computadora servidor (contiene la base de datos)
Conexión intranet
b) Requerimientos de software
Contar con:
Sistema operativo Windows o Linux
2) Ingresando al sistema Importante: Se aclara al usuario que el software se maneja por un sistema de logins con un determinado nivel de privilegios, el único usuario que puede tener acceso a la totalidad del sistema es el Administrador, y el software está configurado para poseer solo un Administrador, por lo que no se puede dar de alta a otro usuario de tipo administrador.
TEAM UMBRELLA 105
Se procede a ejecutar el software y este mostrara la siguiente ventana.
Como se puede apreciar, la ventana muestra 2 campos, en el campo de usuario se ingresara la Matricula que le fue asignada por el administrador, en el campo contraseña, ingresara la contraseña que de igual manera le fue otorgada por el administrador, cuando haya ingresado los datos en sus respectivos campos, dará clic en el botón entrar. Importante: Si después de insertan iniciar sesión le aparece un mensaje de error de conexión, es posible que el servidor al que se conecta el software no esté trabajando, en ese caso se le pide le comunique al administrador sobre el problema.
3) Funcionalidad General La interface del software se compone de 5 módulos, el módulo de bienvenida por defecto es el de ventas, en la muestra de funcionamiento de los módulos, se ha iniciado sesión como administrador para así, tener acceso a todas las funcionalidades el software.
TEAM UMBRELLA 106
Módulo de ventas
Como se puede observar, este módulo está constituido por 4 botones, y 3 frames de información, el funcionamiento de estos serán explicados a continuación:
En el recuadro blanco, ingresara el código del producto que desea buscar de forma instantánea, una vez escrito presiona la tecla enter, si el producto se encuentra lo mostrara en el
frame de abajo, si no es así le aparecerá un mensaje con el siguiente mensaje “El producto no está registrado”
Como se puede apreciar, al dar enter en la búsqueda rápida, o bien el software al detectar el código de barras del producto, muestra la información en la pantalla.
En este frame se muestra el total que se cobrara al cliente.
Al hacer clic en este botón, se cancela la venta.
TEAM UMBRELLA 107
A continuación se describen los botones de formas de pago: Botón que controla la máquina de verificación de crédito. Botón que controla la máquina de verificación de debito Botón que controla la caja registradora
Módulo de Consulta El uso de módulo de consulta se emplea solo cuando se desea obtener la información de algún producto, pero que no será vendido.
Para buscar introduzca el ID del producto y luego haga clic en la lupa o bien presione la tecla enter.
Es importante destacar que en la sección “cantidad”, muestra cuantos productos hay disponibles en el inventario
Estos son los resultados que mostrara al realizar la búsqueda
TEAM UMBRELLA 108
Módulo de Reporte En este módulo se realizan los reportes de ventas, consta de 3 botones y un frame de información.
Dependiendo del tipo de reporte que se desea generar se seleccionara el botón correspondiente.
Botón que genera y muestra un reporte de las ventas del día
Botón que genera y muestra un reporte de las ventas de la semana
Botón que genera y muestra un reporte de las ventas del mes
Al hacer clic en alguno de los 3 botones aparecerá información del reporte generado como se muestra a continuación:
TEAM UMBRELLA 109
Módulo de Proveedor La función de este módulo es solo de otorgar la información de los proveedores que se tienen registrados en el sistema, con solo seleccionar el modulo, la información es mostrada en el frame.
Modulo modificar Este módulo solo está disponible para el usuario “Administrador”, dado que la funcionalidad de este módulo es solo dar de alta, baja y modificar datos en la base de datos, se aplican los mismos criterios para todas las opciones de modificación, altas y bajas. Se procede a explicar las pestañas del módulo Proveedor
Pestaña que muestra la información de los proveedores registrados en el sistema Pestaña que muestra la información de los empleados registrados en el sistema
Pestaña que muestra la información de los fármacos registrados en el sistema Pestaña que muestra la información de los productos registrados en el sistema
TEAM UMBRELLA 110
Se procede a mostrar la interface del módulo Modificar
Como se podrá apreciar, el modulo contiene 3 botones (Alta, Baja y Modificación), estos botones son de uso general, y sus funciones aplican a todas las pestañas (Producto, Fármaco, Empleados y Proveedor). Se procede a describir el funcionamiento de los botones.
Botón que da de alta (dependiendo de la pestaña seleccionada) nueva información en el sistema. Botón que da baja (dependiendo de la pestaña seleccionada) la información que se encuentra en el sistema.
Botón que modifica (dependiendo de la pestaña seleccionada) la información que se encuentra en el sistema.
Para dar de alta, modificar o dar de baja un dato del sistema, solo seleccione la pestaña en la que desea modificar la información, seleccione el botón deseado, le aparecerá una ventana solicitando datos y confirmación, al ingresar la información solicitada solo quedara cliquear en aceptar o pulse enter y la información se actualizara en el sistema.
TEAM UMBRELLA 111
11.4 Observaciones
Durante el desarrollo de la documentación, se fueron encontrando nuevas necesidades y
modificaciones, es por ello que el software se diseñó con una estructura que le permita añadirle
nuevas funcionalidades y modificar las que este ya posee, al igual que en alguna situación de
actualización, se le podrían quitar funciones que se denominaran ya “obsoletas” sin que esto genere
problemas en el funcionamiento del mismo.
Igualmente, se descubrió que la estabilidad y rendimiento del software, está determinado por el
sistema operativo en el cual se esté ejecutando, por lo que cualquier fallo del sistema operativo,
podría afectar la funcionalidad y rendimiento del software, cabe destacar que esto no es crítico, ya
que el software tiene la capacidad de recuperarse ante estos fallos, pero si es posible que note una
baja de velocidad del sistema durante el primer arranque del software después de un fallo crítico,
esto se debe, a que el software buscara e intentara restaurar la última tarea con la que se estaba
trabajando en él.
11.5 Recomendaciones
Se recomienda al usuario que el equipo en el que se vaya a usar el software, sea un equipo
dedicado, esto quiere decir, que solo sea usado por el software, se debe de evitar también que el
equipo que maneje la base de datos del software sea de uso compartido, esto es por motivos de
seguridad y estabilidad.
También se recomienda que cada 15 días como mínimo se realice una copia de seguridad de la
base de datos del software, pues en caso de falla del servidor y que sus datos se tornen
irrecuperables, podrá continuar trabajando con la copia de seguridad de la base de datos.
Es importante que se capacite de manera básica en el manejo del a los usuarios, no por que este
sea complejo, si no para que de una manera rápida saquen el máximo provecho y experimenten
las grandes ventajas que el software otorga.
12 Conclusión
A lo largo de la creación de esta documentación, se pudo obtener un nuevo aprendizaje, de una
manera nueva, se tocaron temas que tal vez no eran de la materia en sí, pero es de agradecer, pues
ya se tienen los fundamentos necesarios para seguir adelante con el proyecto, la documentación
que aquí se muestra producto del aprendizaje obtenido, tanto del profesor como de los libros,
conforme se iba desarrollando la documentación, surgían dudas y curiosidades acerca de cómo se
gestionaba la misma, aunque se conoce que en la práctica, no se aplican dl todo los métodos de
documentación, se ha obtenido una gran base para mejorarla y entregar trabajos con mejor calidad.
TEAM UMBRELLA 112
13 Anexos
13.1 Cuestionario
Se procede a mostrar el cuestionario que le fue aplicado a nuestro cliente, para conocer sus
necesidades y en base a ello diseñar el software.
¿Quién está detrás de la solicitud de trabajo?
R = Dra. A. Susana Pérez López
¿Quién usara la solicitud?
R = Dra. A. Susana Pérez
¿Cuál será el beneficio económico de una solicitud exitosa?
R = Obtener mayores ingresos mediante la oferta de fármacos
¿Qué problemas resolverá esta solución?
R = Control de fármacos, agenda paciente, control proveedor.
¿Puede mostrar lo describir el ambiente de negocios en el que se usaría la descripción?
R = Optimización en los procesos de ventas, control de ingresos y egresos.
¿Hay aspectos especiales del desempeño o restricciones que afecten el modo en el que se
enfoque la solución?
R = Las consultas pueden variar de horarios
¿Qué funciones desea que realizar el software?
R = Consulta inventario, empleados, paciente
¿Va a redistribuir el software?
R = No
¿Puede dar otra persona información adicional?
R = No
¿Debería preguntar yo algo más?
R = Funcionalidad
TEAM UMBRELLA 113
13.2 Análisis del cuestionario
Basados en el cuestionario que contesto nuestro cliente, se procedió a realizar un análisis del
mismo, el resultado de este fue mostrado al cliente y aprobado por el mismo.
Control de Versiones
Versión: 0.1 Aprobada por: NTM
Hecha por: EU Fecha: 08-03-13
Revisada por: NTM Motivo: Versión Alpha
Documentación de Requisitos
Nombre del Proyecto: Gestión de Farmacia Siglas: Apa
Necesidad el negocio u oportunidad a aprovechar: describir las limitaciones de la situación actual
y las razones por las cuales se emprender el proyecto.
Control de fármacos, paciente, control proveedor. La única limitación registrada es: Las consultas pueden variar de horarios. Las razones por las que se emprende el proyecto son para tener un mayor control sobre el
gestionamiento de la farmacia del cliente.
Objetivos del negocio y del proyecto: definir con claridad los objetivos del negocio y del proyecto
para permitir las trazabilidad de estos.
Los objetivos del negocio son: Obtener mayores ingresos mediante la oferta de fármacos. Los objetivos del proyecto son: Optimización total del gestionamiento, control sobre las
ventas, ingresos y egresos.
TEAM UMBRELLA 114
Requisitos funcionales: Describir procesos del negocio, información con el producto, etc.
Stakeholder
Prioridad otorgada por el Stakeholder
Nicolás Torres Martínez
Muy alta R1 Se dará asesoría del manejo sobre del software.
Alta R2 Interfaz intuitiva y simplicidad en el manejo del software.
Baja R3 Se presentara un avance del proyecto cada 15 días.
Requisitos Funcionales: Describir requisitos tales como nivel de servicio, performance, seguridad,
adecuación, etc.
Stakeholder
Prioridad otorgada por el Stakeholder
Nicolás Torres Martínez
Muy alta R4 El software tendrá un sistema de usuarios con diferentes
privilegios.
Alta R5 El software tendrá capacidad de recuperar su último estado tras
un fallo del sistema.
Baja R6 Se entregaran betas del software al cliente para testeo
de funcionalidad.
Requisitos de calidad: Describir requisitos relativos a normas o estándares de calidad, o la
satisfacción y cumplimiento de factores relevantes de calidad.
Stakeholder
Prioridad otorgada por el Stakeholder
Nicolás Torres
Martínez
Muy alta
R7
El software debe cumplir con las normas de administración.
Requisitos
Código Descripción
Código Descripción
Requerimiento
Código Descripción
Requerimiento
TEAM UMBRELLA 115
Criterios de aceptación: Especificaciones o requisitos de rendimiento, funcionalidad, etc., que
deben cumplirse antes de aceptar el proyecto.
Conceptos Criterios de Aceptación
1. Técnicos El software deberá tener documentos de cada función. 2. De Calidad Cumplir con una normalización certificada. 3. Administrativos Cumplir con los acuerdos presentes en la propuesta, y respetar los
requerimientos del cliente. 4. Comerciales El software no se distribuirá. 5. Sociales Manejo practico del software 6. Otros Concluir el proyecto en el plazo solicitado por el cliente.
Reglas del negocio: Reglas principales que fijan los principios guías de la organización.
Cuando se registra un inventario menos del 20% se procede a pedir los productos al proveedor.
Se da prioridad a la atención de pacientes.
Impactos en otras áreas organizacionales
Se espera el aumento de la eficiencia de las áreas de ventas y consultas.
Impactos en otras entidades: Dentro o fuera de la organización ejecutante.
Al tener mejor gestionamiento sobre los inventarios se espera mayor eficiencia en los proveedores.
Impacto en otras entidades: Dentro o fuera de la organización ejecutante.
Al tener mejor gestionamiento sobre los inventarios se espera mayor eficiencia en los proveedores.
Requerimiento de soporte y entrenamiento
Se contara con un soporte técnico de 60 días después de la aprobación e implementación del software.
Se capacitara a los trabajadores para el manejo del software.
Supuesto relativos a requisitos
Capacidad para añadir funciones al software en un futuro.
Restricciones relativas a requisitos.
Las consultas pueden varias de horarios.
top related