Este documento describe un sistema de reservaciones de vuelos desarrollado en lenguaje C. El sistema permite reservar asientos en diferentes clases, verifica la disponibilidad, registra los datos del pasajero y genera un ticket. El código fue desarrollado de forma modular dividiendo las funcionalidades en funciones independientes. El sistema cumple con su objetivo de realizar reservaciones y almacenar los datos en un archivo.
2. 1
2016-2
1. Descripción general del sistema
1.a La necesidad
Una pequeña empresa de transporte aéreo de pasajeros dispone de una flota
de aviones que disponen de un número determinado de asientos para pasajeros, se
pide diseñar y codificar un programa para realizar reservaciones de vuelos.
1.b Los requerimientos
Los usuarios del programa serán trabajadores de la aerolínea.
El programa debe comprobar que haya asientos disponibles, para luego
requerir los datos de los pasajeros y luego, imprimir los tickets.
El programa debe tener un registro en el que almacenará los datos que se
ingresaron.
El avión tiene 10 asientos; 2 son de la clase A, 3 de la clase B y 5 de la clase C.
El programa deberá ser escalable en caso de requerir nuevas funcionalidades.
Las funciones escritas deben ser legibles y fáciles de emplear.
1.c Los recursos disponibles del lenguaje de programación y el
programador
Dado que el programa será codificado en lenguaje C, se puede hacer uso de
ficheros para almacenar los registros a modo de base de datos.
Si se almacenan los datos, se hará uso del formato csv (valores separados por
coma), ya que este es de fácil manipulación en hojas de cálculo.
1.d La interfaz del usuario
La interfaz será de modo texto.
Se mostrarán menús y opciones que serán ingresadas por el teclado;
mostrando mensajes de error en caso de haber ingresado una opción
incorrecta.
Se imprimirá un ticket en pantalla al realizar la reservación.
3. 2
2016-2
2. Modelos del sistema
Para crear el algoritmo del programa se usó el enfoque divide & conquer
(divide y conquistarás), además de la recursividad de las funciones.
En el desarrollo del algoritmo de este programa se enfatizó en la modularidad,
es decir: se desarrolló una librería de funciones y parámetros que serían fácilmente
identificables por cualquier otro desarrollador.
Bajo el enfoque DQ, se dividieron las funcionalidades del programa en
pequeñas tareas, cada una de las cuales fueron probadas independientemente, esto
permite disminuir la incidencia de errores al implementar la función principal del
programa final.
Luego, mediante el uso de la recursividad de funciones, se utilizaron las
funciones que leen datos en otras que los procesan. De esta manera, y con el uso de
variables globales como las estructuras, constantes y otras variables, se logró el
desarrollo de una librería llamada reservacion.h que puede ser usada e implementada
en cualquier función main para fines asociados a los requerimientos.
7. 6
2016-2
4. Programas + recursos
4.a El diseño
Los diagramas de flujo se realizaron en la aplicación web Lucidchart
https://www.lucidchart.com
4.b El software
El programa se codificó usando el IDE de NetBeans y el compilador estándar de C: gcc.
4.c Las pruebas del software
Las primeras pruebas del sistema se realizaron en un sistema operativo Windows, que
albergó el IDE y el compilador.
También se realizaron pruebas en un entorno Linux, en el que se puede apreciar de
mejor manera el funcionamiento del sistema.
8. 7
2016-2
5. Código fuente en C
5.a La librería reservación.h
1 #define nA 2
2 #define nB 3
3 #define nC 5
4 int a, b, c;//Variables para controlar el numero de asientos asignados
5
6 typedef struct
7 {
8 char nombre[22];
9 char dni[10];
10 }Datos;
11
12 typedef struct
13 {
14 Datos datos;
15 char clase;
16 int idOperacion;
17 }Pasaje;
18
19 FILE* db;
20
21 void menuClase();
22 //Imprime eol menu de clases a elegir
23 char seleccionaClase();
24 //Recoge el dato de la clase seleccionada, filtra otras opciones no consideradas
25 Datos leeDatos();
26 //Lee los datos personales de un pasajero
27 Pasaje reservacion(int a , int b, int c);
28 //Verifica la disponibilidad de asientos según la clase elegida y lo reserva
29 void imprimeBoleto(Pasaje pasaje);
30 //Imprime el boleto por pantalla
31 void guardaDatos(Pasaje pasaje);
32 //Guarda los datos en la base de datos
12. 11
2016-2
5.b Implementación de la función main
1 #include <stdio.h>
2 #include "reservacion.h"
3
4
5 int main()
6 {
7
//Se inicializan las variables antes de comenzar a
manipularlas
8 a=0;
9 b=0;
10 c=0;
11 db = fopen("database.csv","w");
12 Pasaje pasaje;
13 while(a+b+c < 10)//restringido por el numero de asientos
14 {
15 pasaje = reservacion(a,b,c);
16 imprimeBoleto(pasaje);
17 }
18
19
20 return 0;
21 }
13. 12
2016-2
6. Muestras de la funcionalidad del Sistema
El sistema lee los datos y los imprime en forma de ticket, tambien se puede apreciar que al
saturarse la clase A, no permite más reservaciones
15. 14
2016-2
6. Observaciones y Conclusiones
El programa cumple con su objetivo principal que es hacer un sistema de
reservaciones y luego almacenarlos en una base de datos.
A partir del código fuente proporcionado, y agregando otras funciones, se
pueden añadir nuevas funcionalidades como:
Cancelar una reservación
Reservar un grupo de asientos
Mostrar un historial de reservaciones
Mostrar en una tabla todas las reservaciones.
Al hacer un programa de manera modular, es decir: dividir el algoritmo en
pequeñas tareas para facilitar el desarrollo y optimización de las mismas, se
pueden hacer cambios con mayor facilidad, además de ofrecer la posibilidad de
agregarle más funcionalidades, como lo expuesto en el punto anterior.
La forma de diseño para este programa es difícilmente aplicable para el
desarrollo de un software de mayor complejidad.
El uso de una estructura de datos hubiese sido también apropiada para este
programa, incluso se podrían crear funcionalidades para implementarla en la
librería reservación.h, sin embargo se pudo prescindir de estas estructuras para el
desarrollo de la primera versión del programa.