Hola kabuto a continuación te paso el enunciado, tratare de escribirlo todo pero hay algunas imágenes de referencia, en todo caso te coloco un link para que lo veas mejor:
https://drive.google.com/file/d/1_WM6vL4aNPrBO4Y0W1QIqibWjYMHW1Zw/view?usp=sharingrutas son los destinos , y unidades son los buses
este es el enunciado Sección del administrador.
En esta sección se describen los procesos que pueden ser vistos y gestionados
únicamente por el administrador; los usuarios de tipo pasajero no pueden ingresar
a ninguna de estas opciones del sistema.
Login.
• Debe existir un archivo para almacenar todos los usuarios del sistema; en este
archivo, estará el administrador previamente creado, es decir, no se registra en
el sistema.
• Para iniciar sesión (login) el usuario indicará su cédula y contraseña, el sistema
deberá detectar de manera automática si se trata de un administrador o un
pasajero; esto porque, tanto el administrador como cada pasajero que se registra
se encuentran en el mismo archivo.
• En la interfaz, la contraseña debe estar encriptada, esto aplica para todos los
usuarios del sistema.
• El sistema no debe permitir ingresar a otra pantalla del sistema si no se ha hecho
inicio de sesión.
• El sistema debe permitir cerrar sesión para poder cambiar de usuarios en el
sistema.
Lugares (estructura de datos)
• Por defecto en el sistema debe estar creada una estructura de datos con los
lugares predeterminados que se utilizarán, los lugares son: San José, Alajuela,
Heredia, Cartago, San Carlos, Puntarenas, Limón.
Menú
• El sistema debe contar con un menú para acceder a las opciones del sistema.
Toda la información se gestiona a través de mantenimientos, lo que se conoce
como un CRUD (Crear, Leer, Modificar, Eliminar).
• Las opciones del menú son los siguientes:
o Mantenimiento de Terminales.
o Mantenimiento de Unidades.
o Mantenimiento de Rutas.
o Reportes.
Mantenimiento de Terminales
• Debe considerar que, si una terminal ya está asignada a una ruta, ésta no se
puede modificar y/o eliminar.
• Cada lugar solo puede tener un máximo de dos terminales.
• Debe crear un archivo donde se almacena la siguiente información:
Campo Descripción Componente RestricciónIdentificador Id de la terminal. Debe ser autogenerado.
Nombre Nombre de la terminal. TextField
Lugar Nombre del lugar donde ComboBox Se carga la lista de
está la terminal lugares desde el
código
Número de Número de la terminal de ComboBox Solo existe terminal salida del bus. terminal 1 y 2
Mantenimiento de Unidades• Debe considerar que, si una unidad ya está asignada a una ruta, ésta no se
puede modificar y/o eliminar.
• Cada unidad solo puede estar asignada a una única terminal, por lo tanto, cada
terminal puede tener un máximo de dos unidades asignadas.
• De acuerdo con lo anterior, debe controlar la cantidad de unidades que se han
asignado a cada terminal.
• Debe crear un archivo donde se almacena la siguiente información:
Campo Descripción Componente RestricciónPlaca Placa de la unidad. Debe ser autogenerado.
Además, construida por
3 letras (no pueden ser
vocales) y 3 números;
ejemplo: BQT145.
Capacidad Capacidad de campos Spinner Debe limitarse de 0 a 36
en la unidad. campos
Nombre de Se asigna el nombre de ComboBox Se carga la lista de
la terminal la terminal a la que nombres desde el
pertenece archivo de las
terminales que han sido
registradas.
Mantenimiento de RutasEn esta sección convergen todos los datos suministrados anteriormente; lo cual,
utilizando interfaz gráfica se van a crear las rutas en el sistema. La creación de una
nueva ruta requiere de las siguientes acciones:
• Debe considerar que, si una ruta ya tiene compra de boletos por los usuarios,
ésta no se puede modificar y/o eliminar.
• Para efectos del proyecto solo se van a considerar rutas de ida, es decir, que un
pasajero se desplaza de un lugar X a un lugar Y, sin devolverse.
• Para que se creen las rutas, el administrador debe indicar los siguientes datos:
lugar de origen (salida de la unidad), lugar de destino (llegada de la unidad), el
precio del viaje, la fecha y hora de salida, la fecha y hora de llegada
Campo Descripción Componente RestricciónOrigen Lista de lugares. ComboBox Se carga la lista de
lugares desde el código
Destino Lista de lugares ComboBox Se carga la lista de
lugares desde el código
Precio Precio del viaje TextField
Fecha y Fecha y hora para la DateChooser Deben ser componentes
hora salida y llegada por aparte, uno para
salida y otro para llegada.
• Debe hacer validaciones como por ejemplo que no se elija el mismo lugar de
salida como de llegada, además, que la fecha de llegada sea mayor a la fecha
de salida, entre otros.
• El sistema de manera automática (es decir, no se escoge en interfaz, sino que
un algoritmo en el código realiza el proceso) deberá asignar la terminal, y, por
ende, se asigna una de las dos posibles unidades que están asociadas a esa
terminal. Recuerde que estos podrían no estar disponibles, en caso de que
suceda esto la ruta no podrá crearse.
• Además, con base a las fechas que se seleccionaron (salida y llegada) debe
calcular la duración en horas y minutos del viaje.
• Una vez realizadas las acciones anteriores, se debe almacenar la información
en el archivo de rutas; los datos que se registran son los siguientes:
Campo DescripciónIdentificador Id de la ruta
Id de la terminal Id de la terminal
Placa Placa de la unidad.
Precio Precio del viaje.
Fecha y hora salida Fecha y hora de salida del viaje
Origen Nombre del lugar de salida del viaje.
Fecha y hora llegada Fecha y hora de llegada del viaje.
Destino Nombre del lugar de llegada del viaje.
Duración Duración en horas y minutos del viaje.
Sección del pasajeroRegistro y login.• Para registrarse el usuario debe colocar el número de cédula, nombre, correo
electrónico, fecha de nacimiento, género y contraseña. Recuerde que estos
datos se almacenan en el mismo archivo donde esta quemado el administrador.
• Para iniciar sesión (login) el usuario indicará su número de cédula y contraseña.
Recuerde que se utiliza la misma pantalla de inicio de sesión que se indicó en la
sección del administrador.
• Debe permitir cerrar sesión
Campo Descripción Componente RestricciónCédula(ID) Cédula del pasajero. TextField
Nombre Nombre del pasajero TextField
Fecha de Fecha de nacimiento DateChooser
nacimiento del pasajero
Edad Edad del pasajero. TextField (no Se calcula a través de la
editable) fecha de nacimiento
Email Correo electrónico del TextField Debe ser un correo
pasajero electrónico válido.
Género Género del pasajero. RadioButton
Contraseña Contraseña de acceso Password Debe estar encriptada
del pasajero en la interfaz .
Búsqueda de rutas• El pasajero tendrá la posibilidad de buscar una ruta de ida.
• Debe solamente colocar el nombre de los lugares de origen y destino, además,
la fecha de salida. Para los lugares utilice el componente ComboBox y cargue
los lugares desde el código; y, para la fecha utilice el componente DateChooser.
• Ahora, el sistema debe ser capaz de realizar las siguientes acciones:
o Buscar las rutas directas de acuerdo con los datos suministrados por el
usuario; es decir, donde el origen, destino y fecha de salida coincidan.
o Es importante considerar que, un viaje podría no ser precisamente
directo, cabe la posibilidad que el pasajero llegue a su destino pasando
por un lugar intermedio. Por ejemplo: asuma que las siguientes rutas
fueron creadas: San Carlos – San José, Puntarenas – San José y San
Carlos – Puntarenas; por su parte, el pasajero quiere viajar de San Carlos
hacia San José, entonces para el caso anterior, el sistema detecta que
hay dos posibles rutas que le puede ofrecer al pasajero, una es de manera
directa, y la otra es pasando por Puntarenas como lugar intermedio, lo
cual, ambas podrían ser válidas.
o Por su parte, para que una ruta con un lugar intermedio sea válida, se
debe cumplir con los siguientes criterios:
▪ La terminal del lugar de origen debe ser igual a la terminal del lugar
intermedio, por ejemplo: la ruta San Carlos – Puntarenas sale de
la terminal número 1, y, la ruta Puntarenas – San José también
sale de la terminal número 1.
▪ Validar que la fecha y hora tanto de salida como de llegada entre
las rutas, no se traslapen.
▪ Validar que ambas unidades tienen campos disponibles.
▪ Para efectos prácticos, solo se contemplará un lugar intermedio.
• El costo del viaje será calculado con la suma de todos los precios de las rutas,
debe considerar si hay o no lugares intermedios.
• El tiempo de viaje será calculado sumando la duración, considerando si existe o
no un lugar intermedio.
• Una vez realizado todos los puntos anteriores, debe mostrar en un Table al
usuario la lista de rutas disponibles para que pueda elegir uno; debe imprimir:
nombre de lugar de origen, nombre de lugar intermedio (si hay), nombre de lugar
de destino, fecha y hora de salida (origen), fecha y hora de llegada (destino),
duración total del viaje, precio total del viaje.
Compra de boletos y asignación de asientos• El usuario selecciona de la lista la ruta que le convenga.
• Adicional, el usuario debe indicar cuántas personas viajan con él (para efectos
prácticos no puede ser más de 5 personas). Utilice un Spinner para esta acción.
• Si el pasajero que está comprando boletos tiene 65 o más años, se considera
como un adulto mayor, por lo tanto, se le hace un descuento del 50% del total
del precio del viaje.
• Una vez elegida la ruta e indicando la cantidad de personas que viajan, el
sistema automáticamente hace la asignación de los asientos y muestra en la
pantalla el resultado, respetando las siguientes condiciones:
o Al estar el mundo en tiempo de pandemia, la columna del centro de cada
ala (B y E respectivamente) siempre estará deshabilitada, es decir el
sistema no puede asignar personas en esos campos. Ver ejemplo en las
filas 1 y 2.
o La única manera en que la columna del centro de una o ambas alas pueda
estar habilitada es que las personas que viajan sean de una misma
familia. Ver ejemplo en la fila 3, suponiendo que dos parejas distintas han
ingresado al sistema y compran boletos cada uno por su cuenta. Otro
ejemplo, suponiendo que viaja una familia de 5 personas, podrían
acomodarse ya sea como esta en la fila 4 o como se representa en las
filas 5 y 6.
o Además, debe validar el cupo máximo de la unidad, en donde solo estarán
disponibles esas 6 filas por cada ala; por lo cual, debe llevar el control de
los asientos que ya están asignados