Loading...

📘 Manual de Usuario - Gestor Aeropuerto++

Tabla de Contenidos

  1. Introducción
  2. Instalación y Compilación
  3. Estructura del Proyecto
  4. Menú Principal
  5. Guía de Uso por Opción
  6. Formatos de Archivos
  7. Reportes y Visualización
  8. Ejemplos de Uso
  9. Solución de Problemas

Introducción

Gestor Aeropuerto++ es un sistema completo de gestión aeroportuaria que permite administrar:

  • ✈️ Aviones (disponibles y en mantenimiento)
  • 👥 Pasajeros (registro y consulta)
  • 🎒 Equipaje (gestión de carga)
  • 📊 Reportes visuales (con Graphviz)

El sistema implementa varias estructuras de datos avanzadas:

  • Listas Circulares Dobles para aviones
  • Colas (FIFO) para registro de pasajeros
  • Pilas (LIFO) para equipaje
  • Listas Doblemente Enlazadas para pasajeros ordenados

Instalación y Compilación

Requisitos Previos

  • Compilador: GCC con C++17 o superior (MSYS64/MinGW en Windows)
  • Graphviz: Instalado en el sistema para generar reportes visuales
  • Make: Herramienta de compilación (incluida en MSYS64)

Pasos de Compilación

1. Navegar al Directorio del Proyecto

1
cd C:\Users\[usuario]\Documents\USAC\201318644_EDD_Practica

2. Limpiar Compilaciones Anteriores (Opcional)

1
make clean

3. Compilar el Proyecto

1
make

4. Ejecutar el Programa

1
make run

O directamente:

1
.\aeropuerto.exe

Salida Esperada de Compilación

1
g++ -I include/ -Wall -g -o aeropuerto.exe [archivos fuente...]

Si la compilación es exitosa, se crea el archivo aeropuerto.exe.


Estructura del Proyecto

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
201318644_EDD_Practica/
├── makefile # Configuración de compilación
├── README.md # Documentación técnica
├── MANUAL_USUARIO.md # Este archivo
├── data/ # Archivos de datos
│ ├── aviones.json # Datos de aviones
│ ├── pasajeros.json # Datos de pasajeros
│ └── Cambios.txt # Archivo de movimientos
├── include/ # Archivos de cabecera
│ ├── models/ # Definiciones de clases
│ │ ├── Avion.h
│ │ ├── Pasajero.h
│ │ └── Equipaje.h
│ ├── nodes/ # Nodos de estructuras
│ │ ├── NodoAvion.h
│ │ ├── NodoPasajero.h
│ │ └── NodoEquipaje.h
│ ├── structures/ # Estructuras de datos
│ │ ├── ListaCircularDoble.h
│ │ ├── ListaDoble.h
│ │ ├── Cola.h
│ │ └── Pila.h
│ └── utils/ # Utilidades
│ ├── JsonParser.h
│ ├── Graphviz.h
│ └── json.hpp
├── src/ # Implementaciones
│ ├── main.cpp # Programa principal
│ ├── models/ # Implementaciones de clases
│ ├── nodes/ # Implementaciones de nodos
│ ├── structures/ # Implementaciones de estructuras
│ └── utils/ # Implementaciones de utilidades
└── reports/ # Reportes generados
├── aviones_disponibles.png
├── aviones_mantenimiento.png
├── cola_registro.png
├── pila_equipaje.png
└── lista_pasajeros.png

Cuando ejecutas el programa, verás el siguiente menú:

1
2
3
4
5
6
7
8
9
************ GESTOR AEROPUERTO++ ************
1. Carga de aviones
2. Carga de pasajeros
3. Carga de movimientos
4. Consultar pasajero
5. Visualizar reportes
6. Salir
************************************************
Seleccione una opcion:

Cada opción realiza una función específica. Ingresa el número (1-6) y presiona Enter.


Guía de Uso por Opción

1️⃣ Carga de Aviones

Descripción: Carga los datos de aviones desde un archivo JSON.

Pasos:

  1. Selecciona opción 1
  2. Ingresa la ruta del archivo JSON:
    1
    Ingrese la ruta del archivo JSON de aviones: data/aviones.json
  3. El sistema cargará todos los aviones en dos listas:
    • Aviones Disponibles: Listos para volar
    • Aviones en Mantenimiento: No disponibles

Formato del archivo: Ver sección Formatos de Archivos

Validaciones:

  • ✓ Verifica que el archivo exista
  • ✓ Verifica que sea un JSON válido
  • ✓ Separa automáticamente por estado

Ejemplo de mensaje de éxito:

1
2
3
Archivo cargado correctamente.
Se cargaron 5 aviones disponibles
Se cargaron 2 aviones en mantenimiento

2️⃣ Carga de Pasajeros

Descripción: Carga los pasajeros que llegan al aeropuerto en la cola de registro.

Pasos:

  1. Selecciona opción 2
  2. Ingresa la ruta del archivo JSON:
    1
    Ingrese la ruta del archivo JSON de pasajeros: data/pasajeros.json
  3. Los pasajeros se agregarán a la cola de registro (FIFO)

Importante:

  • Los pasajeros se procesan en el orden que llegaron
  • La cola respeta el principio FIFO (Primero en Entrar, Primero en Salir)
  • No se pueden consultar aquí, solo se registran

Estructura esperada: Ver sección Formatos de Archivos


3️⃣ Carga de Movimientos

Descripción: Procesa movimientos de pasajeros y cambios de estado de aviones.

Pasos:

  1. Selecciona opción 3
  2. Ingresa la ruta del archivo de movimientos:
    1
    Ingrese la ruta del archivo de movimientos: data/Cambios.txt
  3. El sistema procesa cada línea del archivo

Tipos de Movimientos:

a) Ingreso de Equipajes (IngresoEquipajes)

1
IngresoEquipajes;
  • Desencola el siguiente pasajero de la cola de registro
  • Lo añade a la lista de pasajeros (ordenada por vuelo y asiento)
  • Si tiene equipaje facturado, lo añade a la pila de equipaje

b) Mantenimiento de Aviones

1
2
MantenimientoAviones,Ingreso,N12345;
MantenimientoAviones,Salida,N54321;

Ingreso a Mantenimiento:

  • Mueve el avión de “Disponibles” a “Mantenimiento”
  • Ejemplo: MantenimientoAviones,Ingreso,N12345;

Salida de Mantenimiento:

  • Mueve el avión de “Mantenimiento” a “Disponibles”
  • Ejemplo: MantenimientoAviones,Salida,N12345;

Validaciones:

  • El número de registro debe existir
  • Se muestra un mensaje de confirmación

Ejemplo de archivo completo:

1
2
3
4
5
6
IngresoEquipajes;
IngresoEquipajes;
MantenimientoAviones,Ingreso,N12345;
IngresoEquipajes;
MantenimientoAviones,Salida,N12345;
IngresoEquipajes;

4️⃣ Consultar Pasajero

Descripción: Busca la información completa de un pasajero específico.

Pasos:

  1. Selecciona opción 4
  2. Ingresa el número de pasaporte:
    1
    Ingrese el numero de pasaporte: P123456789
  3. Se muestra toda la información del pasajero si existe

Información Mostrada:

1
2
3
4
5
6
7
8
9
=== Información del Pasajero ===
Nombre: John Doe
Nacionalidad: Estados Unidos
Número de Pasaporte: P123456789
Vuelo: A100
Asiento: 12
Destino: New York
Origen: Los Angeles
Equipaje Facturado: 2 piezas

Casos:

  • Encontrado: Se muestra toda la información
  • No encontrado: Mensaje “Pasajero no encontrado.”

Nota: Solo se pueden consultar pasajeros que hayan pasado por la opción “Carga de Movimientos” (opción 3).


5️⃣ Visualizar Reportes

Descripción: Genera y muestra reportes visuales de todas las estructuras de datos.

Menú de Reportes:

1
2
3
4
5
6
7
8
9
************ REPORTES ************
1. Lista de aviones disponibles
2. Lista de aviones en mantenimiento
3. Cola de registro
4. Pila de equipaje
5. Lista de pasajeros
6. Volver
************************************
Seleccione una opcion:

Reporte 1: Aviones Disponibles

  • Estructura: Lista Circular Doble
  • Visualización: Diagrama de nodos conectados circularmente
  • Información: Número de registro, modelo, capacidad
  • Archivo generado: reports/aviones_disponibles.png

Reporte 2: Aviones en Mantenimiento

  • Estructura: Lista Circular Doble
  • Visualización: Diagrama de nodos conectados circularmente
  • Información: Número de registro, modelo, capacidad
  • Archivo generado: reports/aviones_mantenimiento.png

Reporte 3: Cola de Registro

  • Estructura: Cola (FIFO)
  • Visualización: Flujo horizontal (CABEZA → … → FIN)
  • Información: Nombres de pasajeros en orden de llegada
  • Archivo generado: reports/cola_registro.png

Reporte 4: Pila de Equipaje

  • Estructura: Pila (LIFO)
  • Visualización: Flujo vertical (CIMA → … → BASE)
  • Información: Pasaporte del propietario, cantidad de piezas
  • Archivo generado: reports/pila_equipaje.png

Reporte 5: Lista de Pasajeros

  • Estructura: Lista Doblemente Enlazada Ordenada
  • Visualización: Diagrama bidireccional (← → )
  • Información: Nombre, vuelo, asiento
  • Archivo generado: reports/lista_pasajeros.png
  • Ordenamiento: Por vuelo, luego por asiento

Proceso de Generación:

  1. El programa genera el código DOT (formato Graphviz)
  2. Invoca a Graphviz para convertirlo a PNG
  3. Abre automáticamente la imagen en el visor predeterminado

6️⃣ Salir

Descripción: Finaliza el programa.

Pasos:

  1. Selecciona opción 6
  2. Se muestra: “Saliendo del sistema EDD…”
  3. Se libera toda la memoria
  4. Se cierra el programa

Formatos de Archivos

Archivo de Aviones (JSON)

Ubicación recomendada: data/aviones.json

Formato:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
[
{
"vuelo": "A100",
"numero_de_registro": "N12345",
"modelo": "Boeing 737",
"fabricante": "Boeing",
"ano_fabricacion": 2015,
"capacidad": 180,
"peso_max_despliegue": 79000,
"aerolinea": "AirlineX",
"estado": "Disponible"
},
{
"vuelo": "A102",
"numero_de_registro": "N54321",
"modelo": "Airbus A320",
"fabricante": "Airbus",
"ano_fabricacion": 2018,
"capacidad": 150,
"peso_max_despliegue": 77000,
"aerolinea": "AirlineY",
"estado": "Disponible"
},
{
"vuelo": "A104",
"numero_de_registro": "N13579",
"modelo": "Boeing 787",
"fabricante": "Boeing",
"ano_fabricacion": 2020,
"capacidad": 242,
"peso_max_despliegue": 242500,
"aerolinea": "AirlineZ",
"estado": "Mantenimiento"
}
]

Campos Requeridos:

  • vuelo (string): Código del vuelo (ej: “A100”)
  • numero_de_registro (string): Matrícula del avión (ej: “N12345”)
  • modelo (string): Modelo del avión
  • fabricante (string): Fabricante
  • ano_fabricacion (integer): Año de construcción
  • capacidad (integer): Número de pasajeros
  • peso_max_despliegue (integer): Peso máximo en kg
  • aerolinea (string): Nombre de la aerolínea
  • estado (string): “Disponible” o “Mantenimiento”

Validaciones:

  • ✓ JSON válido y bien formado
  • ✓ Todos los campos obligatorios presentes
  • ✓ El estado debe ser “Disponible” o “Mantenimiento”

Archivo de Pasajeros (JSON)

Ubicación recomendada: data/pasajeros.json

Formato:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
[
{
"nombre": "John Doe",
"nacionalidad": "Estados Unidos",
"numero_de_pasaporte": "P123456789",
"vuelo": "A100",
"asiento": 12,
"destino": "New York",
"origen": "Los Angeles",
"equipaje_facturado": 2
},
{
"nombre": "Jane Smith",
"nacionalidad": "Reino Unido",
"numero_de_pasaporte": "P987654321",
"vuelo": "A200",
"asiento": 5,
"destino": "Londres",
"origen": "París",
"equipaje_facturado": 1
},
{
"nombre": "Carlos García",
"nacionalidad": "España",
"numero_de_pasaporte": "P456789123",
"vuelo": "A100",
"asiento": 15,
"destino": "New York",
"origen": "Madrid",
"equipaje_facturado": 0
}
]

Campos Requeridos:

  • nombre (string): Nombre completo del pasajero
  • nacionalidad (string): País de origen
  • numero_de_pasaporte (string): Pasaporte único (identificador)
  • vuelo (string): Código del vuelo (ej: “A100”)
  • asiento (integer): Número de asiento
  • destino (string): Ciudad de destino
  • origen (string): Ciudad de origen
  • equipaje_facturado (integer): Cantidad de piezas de equipaje (0 o más)

Validaciones:

  • ✓ Número de pasaporte único
  • ✓ Asiento >= 1
  • ✓ Equipaje facturado >= 0

Archivo de Movimientos (TXT)

Ubicación recomendada: data/Cambios.txt

Formato:

1
2
3
4
5
6
7
8
IngresoEquipajes;
IngresoEquipajes;
MantenimientoAviones,Ingreso,N12345;
IngresoEquipajes;
MantenimientoAviones,Salida,N12345;
IngresoEquipajes;
IngresoEquipajes;
MantenimientoAviones,Ingreso,N54321;

Reglas:

  • Una línea por movimiento
  • Cada línea termina con punto y coma (;)
  • IngresoEquipajes: Sin parámetros adicionales
  • MantenimientoAviones: Formato MantenimientoAviones,Acción,NumeroRegistro
    • Acciones: Ingreso (a mantenimiento) o Salida (de mantenimiento)
    • Número de registro debe existir

Ejemplo Completo:

1
2
3
4
5
6
7
IngresoEquipajes;
IngresoEquipajes;
IngresoEquipajes;
MantenimientoAviones,Ingreso,N12345;
IngresoEquipajes;
IngresoEquipajes;
MantenimientoAviones,Salida,N54321;

Reportes y Visualización

Tecnología Utilizada: Graphviz

El sistema usa Graphviz para generar visualizaciones profesionales de las estructuras de datos.

Instalación de Graphviz

En Windows (MSYS64)

1
pacman -S mingw-w64-x86_64-graphviz

Verificar Instalación

1
dot --version

Debe mostrar algo como:

1
dot - graphviz version ... (...)

Estructura de Archivos Generados

Los reportes se guardan automáticamente en reports/:

  • .dot - Código fuente de Graphviz
  • .png - Imagen final (se abre automáticamente)

Interpretación de Reportes

Listas Circulares Dobles (Aviones)

1
2
3
[N12345: Boeing 737] <-> [N54321: Airbus A320] <-> ...
↓ ↓
└──────────────────── (vuelven al inicio) ────┘
  • Las flechas bidireccionales muestran la naturaleza doble de la lista
  • El círculo indica que al final se vuelve al inicio

Cola FIFO (Pasajeros en Registro)

1
CABEZA -> [John Doe] -> [Jane Smith] -> [Carlos] -> FIN
  • Los pasajeros se procesan de izquierda a derecha
  • Primero en entrar, primero en salir

Pila LIFO (Equipaje)

1
2
3
4
5
6
7
8
9
  CIMA

[Pasajero 1 | 2 piezas]

[Pasajero 2 | 1 pieza]

[Pasajero 3 | 3 piezas]

BASE
  • El equipaje más reciente está en la cima
  • Último en entrar, primero en salir

Lista Doble Ordenada (Pasajeros)

1
[John: A100, 12] <-> [Carlos: A100, 15] <-> [Jane: A200, 5]
  • Ordenada primero por vuelo (A100, A200, …)
  • Luego por asiento (12, 15, … dentro de cada vuelo)
  • Conexiones bidireccionales

Ejemplos de Uso

Escenario Completo: Un Día en el Aeropuerto

Paso 1: Cargar Aviones

1
2
3
Seleccione una opcion: 1
Ingrese la ruta del archivo JSON de aviones: data/aviones.json
Archivo cargado correctamente.

Paso 2: Cargar Pasajeros

1
2
3
Seleccione una opcion: 2
Ingrese la ruta del archivo JSON de pasajeros: data/pasajeros.json
Se cargaron 10 pasajeros en la cola de registro.

Paso 3: Procesar Movimientos

1
2
3
4
5
6
7
Seleccione una opcion: 3
Ingrese la ruta del archivo de movimientos: data/Cambios.txt
IngresoEquipajes: Pasajero John Doe procesado
IngresoEquipajes: Pasajero Jane Smith procesada
MantenimientoAviones,Ingreso,N12345: Avion N12345 movido a mantenimiento.
...
Movimientos procesados correctamente.

Paso 4: Consultar Pasajero

1
2
3
4
5
6
7
8
9
10
11
12
Seleccione una opcion: 4
Ingrese el numero de pasaporte: P123456789

=== Información del Pasajero ===
Nombre: John Doe
Nacionalidad: Estados Unidos
Número de Pasaporte: P123456789
Vuelo: A100
Asiento: 12
Destino: New York
Origen: Los Angeles
Equipaje Facturado: 2 piezas

Paso 5: Generar Reportes

1
2
3
4
5
6
7
8
9
10
11
12
13
Seleccione una opcion: 5

************ REPORTES ************
1. Lista de aviones disponibles
2. Lista de aviones en mantenimiento
3. Cola de registro
4. Pila de equipaje
5. Lista de pasajeros
6. Volver
************************************
Seleccione una opcion: 1

(Se genera y abre lista_pasajeros.png)

Paso 6: Salir

1
2
Seleccione una opcion: 6
Saliendo del sistema EDD...

Ejemplo de Búsqueda Fallida

1
2
3
4
Seleccione una opcion: 4
Ingrese el numero de pasaporte: INVALIDO123

Pasajero no encontrado.

Errores Comunes

Error: Archivo No Encontrado

1
2
3
Seleccione una opcion: 1
Ingrese la ruta del archivo JSON de aviones: datos/aviones.json
Error al abrir el archivo

Solución: Verifica la ruta del archivo. Usa rutas relativas desde la carpeta raíz del proyecto (ej: data/aviones.json).

Error: JSON Inválido

1
Error en formato JSON

Solución: Verifica que el archivo JSON esté bien formado. Usa un validador JSON en línea si es necesario.

Error: Avión No Encontrado

1
Avion N99999 no encontrado

Solución: Verifica que el número de registro existe en la lista de aviones. Usa los números de registro del archivo de aviones.


Solución de Problemas

P: El programa no compila

R:

  • Verifica que tengas instalado GCC con C++17
  • Asegúrate de que make está disponible
  • Intenta make clean seguido de make

P: Las imágenes de Graphviz no se abren

R:

  • Verifica que Graphviz está instalado: dot --version
  • En Windows, instala con: pacman -S mingw-w64-x86_64-graphviz
  • Las imágenes se generan en reports/

P: No puedo encontrar un pasajero

R:

  • El pasajero debe haber sido procesado con “Carga de Movimientos”
  • Verifica que el número de pasaporte es exacto (distingue mayúsculas/minúsculas)
  • No se pueden consultar pasajeros que están en la cola

P: Se perdió la memoria al salir

R:

  • Es normal. El programa libera toda la memoria automáticamente.
  • Si necesitas guardar datos, modifica el programa para exportar a JSON

P: Los reportes muestran estructuras vacías

R:

  • Asegúrate de haber cargado los datos en el orden correcto
  • Verifica que los archivos contengan datos válidos
  • Algunos reportes pueden estar vacíos si no hay datos (ej: mantenimiento vacío)

P: Números de asiento duplicados

R:

  • Es válido tener asientos duplicados en diferentes vuelos
  • La lista ordena por vuelo primero, luego por asiento
  • Ejemplo: A100-12 y A101-12 son válidos

Notas Importantes

Sobre la Privacidad de Datos

Este es un sistema educativo. Los datos de ejemplo son ficticios.

Sobre el Rendimiento

  • El sistema está optimizado para aeropuertos medianos
  • Con más de 10,000 pasajeros simultáneos, considera optimizaciones

Sobre la Persistencia de Datos

El programa NO guarda datos entre ejecuciones. Todos los datos se pierden al cerrar.

Sobre las Estructuras de Datos

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
LISTAS CIRCULARES DOBLES (Aviones)
- Permite iteración bidireccional
- Perfecto para listas que vuelven al inicio

COLAS FIFO (Pasajeros en Registro)
- Primero en entrar, primero en salir
- Simula ventanillas de atención

PILAS LIFO (Equipaje)
- Último en entrar, primero en salir
- Simula apilamiento físico

LISTAS DOBLEMENTE ENLAZADAS (Pasajeros Ordenados)
- Permite búsqueda eficiente
- Mantiene orden automáticamente

Contacto y Soporte

Para problemas técnicos o mejoras sugeridas:

  • Revisa el archivo README.md para detalles técnicos
  • Consulta el código fuente en src/
  • Los headers están en include/

Última actualización: Diciembre 2025
Versión: 1.0
Desarrollador: 201318644 - Estructura de Datos

avatar
Mynor Cifuentes
Mynor's personal blog
Follow Me
Announcement
Todo el código fuente compartido en este blog se encuentra bajo la licencia MIT. Puedes usar, modificar y distribuir el código para cualquier propósito, siempre y cuando incluyas la nota de copyright y la licencia original.