Curso: Programación 1.
Universidad Central.
“Felicilandia”
Año: 2025
Integrantes:
• Airan Córdoba Molina
• Esteban Acuña Cubero
• Esteban Blanco Gutiérrez
• José David Hidalgo Zúñiga
• Marcos Sánchez Montenegro
Profesor. José Manrique Pérez Sancho.
1
Tabla de Contenido
1. PROPUESTA DE PROYECTO .......................................................................................................... 3
2. INTRODUCCIÓN ........................................................................................................................... 5
3. ANTECEDENTES ............................................................................................................................... 6
3. DEFINICIÓN DEL PROBLEMA ....................................................................................................... 7
4. OBJETIVO GENERAL ..................................................................................................................... 8
5. OBJETIVOS ESPECÍFICOS .............................................................................................................. 8
6. JUSTIFICACIÓN............................................................................................................................. 9
7. ALCANCE .................................................................................................................................... 10
10. CRONOGRAMA DE ACTIVIDADES .............................................................................................. 20
11. Bibliografía................................................................................................................................. 23
2
1. PROPUESTA DE PROYECTO
Sistema de Compra de Boletas y Selección de Actividades en un Parque de Diversiones
Tecnología: Python .
Duración: 8 semanas
El presente documento contempla las diferentes funcionalidades, métodos, estructuras y
diagramas para la creación de un software con las siguientes capacidades:
1. Login admin
Usuario administrador y contraseña, en este caso para poner a a trabajar el programa se
preestablece un login inicial de administrador con user “admin” y pass “password” lo que
permitirá ingresar al primer submenú donde se podrán registrar los usuarios/clientes que
haran uso de los servicios del centro de atracciones.
2. Menú
Este menú es una consola o bien, una interfaz gráfica dónde el usuario puede elegir diferentes
funciones, según su necesidad. Ya sea crear un nuevo usuario, reservar una actividad de
“Felicilandia” o bien, crear una factura.
3
3. Crear nuevo usuario (Cliente)
Esta función nos va a permitir agregar un usuario por medio de la inserción de nuevos valores
a una tabla dinámica que creamos dentro de nuestro código.
4. Mostrar Usuarios registrados
Esta función permite visualizar (imprimir) en consola los usuarios ingresados o
registrados en el sistema, dicha función será accesible en el menú de opciones
mediante la opción #3.
5. Crear nueva factura.
Al igual que la creación del nuevo usuario, este método nos permite agregar datos a una
tabla dinámica o vector que estamos trabajando. Se reitera que son datos variables
dentro del código, no se hace una consulta a una base de datos como tal.
6. Mostrar facturas.
De igual manera una vez el usuario registrado finalice la facturación del servicio de
atracción seleccionado se tendrá la posibilidad mediante esta funcionalidad (opción
#2) de imprimir en pantalla la o las facturas de los servicios de manera que incluye
nombre del cliente, atracción seleccionada, monto.
7. Revisión de datos.
Esta función se refiere a todo lo que sea pertinente a revisar lo que tenemos escrito dentro de
nuestro código, o las variables y registros que se han agregado. Tanto los usuarios, cómo
facturas. Así también cómo los diferentes espacios para reservar tiempos en las diferentes
atracciones de nuestra propuesta.
4
2. INTRODUCCIÓN
En el marco del curso Programación I, se desarrolla el presente proyecto titulado
"Felicilandia", cuyo enfoque como proyecto practico para poner a prueba las habilidades y
conocimientos adquiridos durante el curso, es la creación de un programa funcional enfocado
a la solución de compra de boletos y selección de actividades en un parque de diversiones.
Este proyecto tiene como finalidad aplicar los principios de desarrollo de software y
programación web utilizando Python y tecnologías complementarias, asegurando la
implementación de un sistema eficiente, seguro y accesible para los usuarios. Para ello, se
emplearán herramientas de desarrollo web modernas que garanticen una experiencia de
usuario óptima, además de una arquitectura escalable y segura.
5
Desde una perspectiva académica, este proyecto fomenta la aplicación práctica de los
conocimientos adquiridos en programación, diseño de bases de datos, gestión de
autenticación y estructuración de aplicaciones web.
El proyecto se llevará a cabo a lo largo del primer cuatrimestre del año 2025, siguiendo un
enfoque en las tecnologías de la información y basado en metodologías que permitan el
aprendizaje grupal, con el fin de optimizar los tiempos de desarrollo y asegurar la entrega de
un producto funcional y de calidad.
3. ANTECEDENTES
Se ha identificado que a nivel nacional los centros de atracciones cuentan con sistemas de
reservación y compra de boleterías lentos y pocos sofisticados en relación con las tecnologías
actuales.
Si bien es cierto En el ámbito tecnológico, existen diversos sistemas de compra de boletos y
reserva de actividades que han sido implementados en parques temáticos y centros de
entretenimiento.
Algunos ejemplos relevantes incluyen:
1. Disneyland y Walt Disney World implementaron el sistema "MagicBand" que
permite a los visitantes hacer reservas, pagos y acceso a las atracciones mediante una
pulsera RFID vinculada a la cuenta del usuario.
6
2. Universal Studio utiliza un sistema de reserva en línea para la compra de boletos,
selección de horarios y acceso preferencial mediante pases rápidos.
3. Six Flags implementó una aplicación móvil que permite a los usuarios gestionar su
visita, realizar compras y obtener acceso a las atracciones mediante códigos QR
generados en la aplicación.
4. Parques nacionales y centros recreativos ya han adoptado sistemas de reserva en línea
para controlar el acceso y optimizar la experiencia del visitante.
Todos estos sistemas mencionados como ejemplo ofrecen soluciones sumamente efectivas
sin embargo también su desarrollo e implementación está asociado a costos económicos muy
elevados lo cual es un limitante para un país en desarrollo como Costa Rica, porque la
solución propuesta pretende venir a solventar esa limitante, con la creación de un sistema
funcional, pero con costo de desarrollo e implementación moderado.
3. DEFINICIÓN DEL PROBLEMA
Tomando como referencia el Parque Nacional de Diversiones donde se implementará el
sistema enfrenta múltiples problemas relacionados con una gestión mixta de la venta de
boletos y la selección de actividades, lo que afecta negativamente tanto a la experiencia de
los visitantes como a la eficiencia operativa del parque.
1. Actualmente, los visitantes deben hacer largas filas para ingresar a las atracciones.
Esto genera una mala experiencia para los clientes y reduce el tiempo disponible para
disfrutar de las atracciones.
7
2. La administración del parque no cuenta con un sistema eficiente para controlar el
aforo y la disponibilidad de cada atracción. Lo que provoca que algunas atracciones
estén sobrecargadas, mientras que otras operan por debajo de su capacidad.
3. El proceso de validación de boletos en la entrada es lento, ya que depende de la
verificación manual.
4. El parque solo acepta pagos en efectivo o tarjeta de crédito en el punto de venta físico.
Esto limita las opciones de pago para los visitantes y causa congestión en las taquillas
principalmente los fines de semana cuando las visitas al parque son más concurrentes.
5. Los visitantes no pueden consultar el aforo en las atracciones en tiempo real lo que
provoca que realicen desplazamientos y largas filas en las atracciones sin ningún
control.
4. OBJETIVO GENERAL
Poner en práctica los conocimientos del curso aplicados a una solución que permita resolver
un problema detectado en los centros de atracciones en Costa Rica.
5. OBJETIVOS ESPECÍFICOS
• Diseñar e implementar una plataforma accesible que permita a los visitantes
registrarse, consultar la disponibilidad de actividades, ingresar usuarios nuevos, crear
y revisar facturas de manera rápida y sencilla.
• Implementar un sistema automatizado de control de disponibilidad y reservas para
evitar la sobreocupación y el solapamiento de reservas mediante un sistema de control
dinámico de capacidad.
• Incluir funcionalidades para la consulta de datos.
8
6. JUSTIFICACIÓN
Según el equipo de redacción de la UPN (Universidad Privada del Norte) en su artículo “Desarrollo
de software ¿Qué es y cuál es su importancia?” ([Link]
desarrollo-de-software, 22 de octubre del 2024)
“El desarrollo de software es un proceso integral y multifacético, esencial en la creación y
mantenimiento de aplicaciones, frameworks y otros componentes de software.
Este proceso, además de involucrar la escritura de código, contiene una serie de pasos
críticos que aseguran que el software final sea funcional, eficiente y satisfaga las necesidades
del usuario.”
El desarrollo de software es una herramienta de transformación social. Como señala el equipo de
redacción de la Universidad Privada del Norte, este proceso no se limita a escribir líneas de código,
sino que engloba análisis, diseño, pruebas y mantenimiento, con el fin de generar soluciones
funcionales, eficientes y centradas en el usuario (UPN, 2024).
Este proyecto busca resolver una necesidad básica de organización: la gestión de usuarios, reservas y
facturación para un sistema de atracciones. Aunque simple en su estructura, representa un ejercicio
práctico del ciclo completo de desarrollo, permitiéndonos aplicar principios fundamentales como la
reutilización de código, estructuras de control y estructuras de datos. Además, este tipo de sistemas
fomenta el orden, la trazabilidad y la transparencia, valores esenciales no solo en programación, sino
en toda estructura que aspire al progreso.
9
7. ALCANCE
Desarrollar haciendo uso de las herramientas y conceptos aprendidos en Python una
funcionalidad que permita optimizar el flujo de reservación y selección de actividades en un
centro de atracción mediante la creación de un modelo virtual que permita mostrar mediante
la ejemplificación de este proyecto funcional la dinámica para que los usuarios puedan tener
una grata experiencia en dicho centro de atracciones sin tener la mala sensación de las largas
filas al momento de visitar cada atracción.
Modulo de Logueo inicial
Se definió en el primera línea del código un diccionario con un user y pass default , los cuales
serán solicitados mediante las funciones imput analizados por el modulo de logueo dentro de
la función login () que es el punto de entrada al sistema cunado requiere realizar un primer
logueo , al mismo tiempo se incluyo un contador con disminución de intentos de manera
mientras la cantidad de intentos sea mayor a 3(se puede variar si se quiere amentar la cantidad
de intentos dispobibles) el usuario tendrá posibilidad de realizar nuevos intentos de logue,
para esto como se observa en la captura se implementó un bucle while
Dentro de la función login se definió la variable Current _User la cual es declarada al inicio
del código ,como global , lo que permitirá que la misma sea llamada desde cualquier lugar
que se requiera en dentro del código para validar el usuario que esta logueado actualmente.
10
Modulo para registrar Nuevos Usuarios
Para poder registrar un nuevo usuario se debe hacer uso de la variable users declarada al
inicio del código la cual es un diccionario donde de irán almacenando los usuarios que se
registren de manera que se debe declarar como global para poder hacer uso de la misma
dentro del módulo, de manera que mediante la función register user se solicita ingresar un
valor a la variable username(input) , el cual será validado mediante la condional if y si el
usuario ya existe nos devolverá al menu de registro , pero sino existe dentro de la lista , se le
solicitara ingresar el valor a la variable password y lo almacenara . acto seguido imprime en
consola con la funcion print que el usuario fue registrado exitosamente y mediante la función
inout nuevamente se solicita enter para llevarnos al menú.
11
Modulo para Crear facturas
Se definió al inicio del código una lista vacia donde se deberán ir almacenando las facturas
creadas por el modulo
Se define La función créate_invoice la cual va recibir como argumento el usuario logueado
actualmente en el sistema, esto es importante ya que en métodos de control siempre es
necesario exista una huella del usuario que crea la factura.
Posterior dentro de esta función se solicita ingresar(input) un valor a la variable Client y
posterior solicita ingresar un monto(input) el cual será definido como numero de punto
flotante(float); posterior a ello almacenará en la lista INVOICES[] los datos recién ingresados
mediante el método [Link]… y nos imprime en pantalla la factura creada (Print…)
Modulo para Mostrar Facturas
12
En este modulo se define la función show_invoices y como argumento se toma el usuario
autenticado actualmente de manera que se filtran únicamente las facturas creadas por dicho
usuario.
Para realizar esto , utiliza la función user_invoices la cual es una lista por comprensión de
manera que esta hará un recorrido dentro de la lista INVOICES[] dentro de la cual se han ido
almacendo diccionarios con los datos de las facturas creadas, y dentro de este recorrido el
sistema ira filtrando los diccionarios que coincidan el usuario actualmente autenticado y
almacenado dentro de la variable global current_user.
Si (if)en este recorrido de la función user_invoices , no se encuentra una factura asociada al
username autenticado , se imprime en pantalla (print..) un mensaje indicando que no hay
facturas. Si si (else) se encuentran facturas; nos dará el contenido del diccionario asociado
dentro de invoice y la mismas se enumerarán con un numero de índice a partir de 1 , ya que
así de define en el segundo argumento de enumerate(x,y).
Finalmente nos imprime en pantalla el resultado concatenado del Id asignado(idx) y los datos
de la factura(cliente ,monto , atracción ).
Modulo para mostar los Usuarios Registrados
Para este modulo se define la función show_users sin ningún argumento en este caso no
requiere hacer huso de otra variable.
Inicialmente se decide que mediante la función print se muestre en pantalla un mensaje para
identificar la sección de usuarios registrados.
Posteriormente con la función for se hará un recorrido por los nombres de usuario
resgistrados dentro del diccionario USERS definido al inicio del código esperando que los
usuario se almacenen como claves([Link]) y la contraseñas como valores dentro del
diccionario [Link] manera que se devuelve una vista dela claves(usuarios) dentro
13
del diccionario y le asigna un id o número de índice (enumerate) partiendo de 1 como se
definió en segundo argumento de enmerate(x,y).
Finalmente, con la función print se imprime en pantalla cada usuario con el respectivo
número de id /índice asignado.
Modulo para la Reserva de Atracciones
Para efecto de explicación de este bloque se incluye imagen del codigo desde menú de
atracciones pasando por el inicio de la primera atracción hasta el inicio de la segunda
atracción ya que el bloque es repetitivo para cada atracción.
Se define la función atracciones_dispobibles tomando como argumento el Usuario
autenticado actualmente(current_user) y se imprimen todas las opciones de atracción
disponibles.
Posteriormente se definen las variables opción, reserva y la variable horario siguiendo el
orden de identacion opción>reserva>horario.
En la variable Opción se solicita al usuario ingresar (input) el valor requerido según el menú
de atracciones impreso en pantalla y se inicia un bucle si(if), elif (sino sí) de manera que el
sistema ira comparando el número de índice ingresado hasta llegar al bloque correspondiente
a dicha atracción.
14
En caso de que la opción 1 es True , nos imprimirá el nombre de la atracción , la duración
aproximada, los horarios disponibles y nos imprimirá además la pregunta si deseamos hacer
reservación todo lo anterior con la función print , seguido se incluye la variable reserva que
solo solicita ingresar un valor (input) 1 para si(if) y 2 para no(elif) de manera que: si la opción
es 1 nos el programa nos imprime los horarios disponibles para hacer reservación de la
atracción seguido de la variable horario la cual solicita(input) una entrada según la lista de
horarios disponibles y comienza un nuevo bucle if/elif comparando el valor ingresado en la
variable hasta llegar al horario seleccionado; una vez la comparación elif encuentra un true
en la opción ingresada en la variable horario nos imprime en pantalla(print) un mensaje
indicado que la reservación fue creada para la hora x y no solicitara ingresar un valor a la
variable NOMBRE esto para efectos de generar una factura para la atraccion seleccionada,
para efecto de la factura como se observa en la imagen del código se ingreso en cada horario
una variable MONTO con un valor predefinido(3000).
Y una función [Link] la cual almacenara un diccionario dentro de la lista
INVOICES [] con los datos de la factura creada.
Adicional imprime en pantalla (print ) un mensaje indicando que se ha generado una factura
de C3000.
Finalmente, si en la variable reserva se ingresa un valor 2 el programa se saltará(elif) todo
bucle correspondiente a la variable horario y nos devolverá al menú principal de atracciones
nuevamente.
15
Módulo de Menu Principal(main_menu)
Este bloque define la función main_menu tomando como argumento el nombre del usuario
que hizo logue exitosamente(current_user) y empieza un bucle infinito while (mientras) de
manera que si el usuario que este logueado es el usuario admin, imprime(print) en pantalla
las opciones para: 1. Registrar un nuevo usuario 2. Salir y si se selecciona la opción 1 llama
la función REGISTER_USER que agregara el usuario creado al diccionario USERS (); Si el
valor almacenado en current_user no es el usuario admin(else) nos imprime en pantalla el
otro menú que incluye las opciones (crear factura, mostrar facturas, mostrar usuarios, mostrar
atracciones, salir)
16
Como se puede ver se crearon dos menús según el rol de usuario(admin/others)
Para la ejecución del menú de usuarios normales (NO ADMIN) según el valor que se ingrese
a la variable opción=input (“seleccione una opción: ”) el sistema comparara el valor de la
variable y si coincide con alguno de los cuatro posibles llamara la función
respectiva(créate_invoice/show_invoices/show_users()/atracciones_disponibles) , esto
siempre tomando como argumento el usuario logueado actualmente(current_user)
8. REQUERIMIENTOS FUNCIONALES
17
La solución de desarrollo del sistema de gestión de atracciones y reservas para usuarios del
centro de atracciones deberá incluir servicios correspondientes a los siguientes elementos
funcionales:
· Registro e inicio de sesión de Usuarios (SISTEMA DE LOGIN Y CREACIÓN DE
USUARIO)
· Consulta de disponibilidad de actividades (SE VE EL TIEMPO Y LA ATRACCIÓN)
· Selección y reserva de actividades (SE VE EL TIEMPO, ATRACCIÓN Y EL USUARIO
RELACIONADO)
· Almacenamiento de datos de usuario (USUARIO Y CONTRASEÑA)
· Almacenamiento de datos de facturas. (CLIENTE Y MONTO)
· Impresión de cronograma de actividades a usuarios (EL USUARIO AL FINAL VE QUE
RESERVÓ Y A QUÉ HORA)
La solución de desarrollo del sistema de gestión de atracciones y reservas para usuarios del
centro de atracciones deberá incluir los siguientes servicios y comportamientos funcionales:
8.1 Registro e inicio de sesión de usuarios
• El sistema permitirá a los usuarios registrarse utilizando un nombre de usuario y una
contraseña.
• Los usuarios podrán iniciar sesión para acceder a su perfil y gestionar sus reservas.
• El sistema deberá permitir la gestión de perfiles para actualizar información personal
(nombre y contraseña).
8.2 Consulta de disponibilidad de actividades
• El sistema mostrará en tiempo real la disponibilidad de actividades y horarios.
• La disponibilidad se actualizará dinámicamente en función de las reservas
confirmadas.
8.3 Selección y reserva de actividades
• Los usuarios podrán seleccionar actividades y horarios en una compra.
18
• Las reservas podrán visualizarse en el perfil del usuario.
8.4 Almacenamiento de datos de usuario
• El sistema almacenará de manera segura la información del usuario, incluyendo
nombre y contraseña.
8.5 Impresión de cronograma de actividades para usuarios
• El sistema permitirá a los usuarios ver las actividades reservadas.
9. REQUERIMIENTOS NO FUNCIONALES
• La interfaz gráfica (Tkinter) será intuitiva, clara y fácil de navegar para usuarios sin
conocimientos técnicos.
• El código será modular y documentado, usando nombres de variables en formato
snake_case, para facilitar futuras modificaciones.
• El sistema debe funcionar en cualquier equipo con Python instalado, sin necesidad de
configuración compleja.
• La aplicación debe poder ejecutarse sin necesidad de conexión a internet, al tratarse
de una solución local.
19
10. DIAGRAMA DE FLUJO
11. CRONOGRAMA DE ACTIVIDADES
El cronograma de actividades de este proyecto estará dividido de la siguiente manera:
Todos los integrantes de este proyecto, debemos hacer un listado de actividades durante el
primer cuatrimestre del 2025. Trabajaremos a través de las 15 semanas del cuatrimestre y
debemos completar el listado de actividades que son las siguientes:
1. La portada se trabajará en la semana 3, lo trabajaremos en conjunto para lograr
entregarlo en la semana asignada para el primer avance.
2. Introducción, idea principal, objetivos, prototipo del programa y uso de normas APA.
Esto lo trabajaremos en conjunto, de igual manera, esto lo realizaremos en la semana
4 para lograr tenerlo listo en la semana asignada para la entrega del primer avance.
3. Esta es una de las partes fundamentales del proyecto, por lo cual, se deberá trabajar
durante varias semanas del cuatrimestre. Para esta sección dividimos las partes del
trabajo escrito entre los integrantes y autores de este proyecto de la siguiente manera:
20
• PROPUESTA DEL PROYECTO: Aíran Córdoba Molina
• ANTECEDENTES: Esteban Acuña Cubero
• DEFINICIÓN DEL PROBLEMA: Esteban Blanco Gutiérrez
• JUSTIFICACIÓN DEL PROYECTO: José David Hidalgo Zúñiga
• OBJETIVO GENERALES Y OBJETIVOS ESPECÍFICOS: Marcos Sánchez
Montenegro
• ALCANCE: Airan Córdoba Molina
• TIPOS DE REQUISITOS FUNCIONALES: Esteban Acuña Cubero
• REQUISITOS NO FUNCIONALES: Esteban Blanco Gutiérrez
• ENTREGABLES: José David Hidalgo Zúñiga
• METODOLOGÍA: José David Hidalgo Zúñiga
• CRONOGRAMA DE ACTIVIDADES: Marcos Sánchez Montenegro y Esteban
Blanco Gutierrez
• REFERENCIAS BIBLIOGRÁFICAS: Airan Córdoba Molina
• ANEXO A: Esteban Acuña Cubero
• ANEXO B: LISTA DE ENTREGABLES DEL PROYECTO: Esteban Blanco
Gutiérrez
-Modelo de casos de uso: José David Hidalgo Zúñiga
-Diagramas de colaboración de actividades y de clases:
-Especificaciones de casos de uso: Marcos Sánchez Montenegro
-Prototipos de interfaces de usuario: Esteban Acuña Cubero
-Modelo de análisis de diseño: Esteban Blanco Gutiérrez
-Modelo de datos: José David Hidalgo Zúñiga
-Modelo de implementación:
-Modelo de despliegue: Marcos Sánchez Montenegro
-Casos de prueba: Airan Córdoba Molina
-Solicitud de cambio: Esteban Acuña Cubero
-Lista de riesgos: Esteban Blanco Gutiérrez
4. Este lo trabajaremos durante la mayoría de las semanas, con el apoyo de las clases y
los avances de aprendizajes adquiridos.
21
5. Este lo trabajaremos en varias semanas, que serán: semana 7, semana 8, semana 9 y
semana 10.
6. Lo trabajaremos en varias semanas, para completarlo trabajaremos en semana 10,
semana 11, semana 12, semana 13, semana 14 y semana 15.
7. Este lo trabajaremos para completarlo y tenerlo listo en las semanas 13, 14 y 15.
8. Este lo terminaremos de trabajar en las semanas 13, 14 y 15.
CRONOGRAMA DE TRABAJO Y ACTIVIDADES PARA EL PROYECTO
ACTIVIDAD SEM SEM SEM
POR SEMANA SEMANA ANA ANA SEMA SEMA SEMA ANA RESPONSA
REALIZAR SEMANA 3 4 SEMANA 5 SEMANA 6 SEMANA 7 SEMANA 8 9 10 11 NA 12 NA 13 NA 14 15 BLES
Sistema de José
David
Login y Hidalgo
Registro Zúñiga
Esteban
Facturació Acuña
n Cubero
Entrega
primera
avance
Gestión de
Usuarios y Marcos
Sánchez
Menú Montene
Principal gro
Atraccione
sy
Reservas
(estructura
Esteban
y Blanco
selección) Gutiérrez
Entrega
segundo
avance
22
Horarios y
Esteban
Reservació Blanco
n General Gutiérrez
Presentaci
ón final
12. Bibliografía
1. [Link] 31, 2024),
Tutoriales Paso a Paso para Proyectos de Programación, admin
2. [Link] (agosto 27, 2021),
Introducción a Tcl/Tk (tkinter) (Recursos Python)
3. [Link] (22 de octubre del 2024)
Desarrollo de software ¿Qué es y cuál es su importancia”
23