2016-2
CB-411: Tarea 4
Boris Hermes Seminario Arista 20141076H
Sección: O
Profesor: Arturo Vilca Román
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.
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.
3
2016-2
3. Arquitectura del diseño
3.a Algoritmos de las funciones de la biblioteca reservación.h
4
2016-2
5
2016-2
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.
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
8
2016-2
33
34
35 void menuClase()
36 {
37 printf("\nElija la clase en la que desae viajar:\n");
38 printf("(A) - Clase A\n");
39 printf("(B) - Clase B\n");
40 printf("(C) - Clase C\n");
41 }
42 char seleccionaClase()
43 {
44 char clase;
45 clase = 'W';
46 while(clase)
47 {
48 menuClase();
49 scanf("%c",&clase);
50 if(clase == 'A' || clase == 'B' || clase == 'C')
51 break;
52 }
53 return clase;
54 }
55
56 Datos leeDatos()
57 {
58 Datos datos;
59 printf("Nombre");
60 scanf("%s",&datos.nombre);
61 printf("\nDNI");
62 scanf("%s",&datos.dni);
63 return datos;
64 }
65
66 Pasaje reservacion(int a , int b, int c)
67 {
68 Pasaje pasaje;
69 char clase;
70 clase = seleccionaClase();
71 switch(clase)
9
2016-2
72 {
73 case 'A':
74 if(a >= nA)
75 {
76 printf("No hay asientos disponibles\n");
77 break;
78 }
79 else
80 {
81 a = a+1;
82 pasaje.datos = leeDatos();
83 pasaje.clase = 'A';
84 pasaje.idOperacion = a;
85 }
86 break;
87 case 'B':
88 if(b >= nB)
89 {
90 printf("No hay asientos disponibles\n");
91 break;
92 }
93 else
94 {
95 b = b+1;
96 pasaje.datos = leeDatos();
97 pasaje.clase = 'B';
98 pasaje.idOperacion = b+2;
99 }
100 break;
101 case 'C':
102 if(c >= nC)
103 {
104 printf("No hay asientos disponibles\n");
105 break;
106 }
107 else
108 {
10
2016-2
109 c = c+1;
110 pasaje.datos = leeDatos();
111 pasaje.clase = 'C';
112 pasaje.idOperacion = c+5;
113 }
114 break;
115 }
116 return pasaje;
117 }
118 void imprimeBoleto(Pasaje pasaje)
119 {
120 printf("\n*****************************************\n");
121 printf("Nombre:%s",pasaje.datos.nombre);
122 printf("\nDNI:%s",pasaje.datos.dni);
123 printf("\nClase: %c",pasaje.clase);
124 printf("\nid Operacion: %d",pasaje.idOperacion);
125 printf("\n*****************************************\n");
126 }
127 void guardaDatos(Pasaje pasaje)
128 {
129 fprintf(db,"%s;",pasaje.datos.nombre);
130 fprintf(db,"%s;",pasaje.datos.dni);
131 fprintf(db,"%c;",pasaje.clase);
132 fprintf(db,"%d\n",pasaje.idOperacion);
133 }
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 }
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
13
2016-2
Se observa el filtro de valores incorrectos
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.