SlideShare una empresa de Scribd logo
1 de 15
Descargar para leer sin conexión
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 An");
39 printf("(B) - Clase Bn");
40 printf("(C) - Clase Cn");
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 disponiblesn");
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 disponiblesn");
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 disponiblesn");
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,"%dn",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.

Más contenido relacionado

La actualidad más candente

La actualidad más candente (16)

Corrección epu
Corrección epu Corrección epu
Corrección epu
 
Estructura basica para_c_(2)
Estructura basica para_c_(2)Estructura basica para_c_(2)
Estructura basica para_c_(2)
 
Estructura basica para_c_ (1)
Estructura basica para_c_ (1)Estructura basica para_c_ (1)
Estructura basica para_c_ (1)
 
Otra introducción a apuntadores
Otra introducción a apuntadoresOtra introducción a apuntadores
Otra introducción a apuntadores
 
Estructura basica C++
Estructura basica C++Estructura basica C++
Estructura basica C++
 
Codigo fuente
Codigo fuenteCodigo fuente
Codigo fuente
 
Guia Programacion 1
Guia Programacion 1Guia Programacion 1
Guia Programacion 1
 
prueba lenguajes de programacion
prueba lenguajes de programacionprueba lenguajes de programacion
prueba lenguajes de programacion
 
Curso c ii
Curso c iiCurso c ii
Curso c ii
 
6.funciones y recursividad en c++
6.funciones y recursividad en c++6.funciones y recursividad en c++
6.funciones y recursividad en c++
 
Guía de trabajo
Guía de trabajoGuía de trabajo
Guía de trabajo
 
Precentacion
PrecentacionPrecentacion
Precentacion
 
Estructura basica de_un_programa_en_c_(2)
Estructura basica de_un_programa_en_c_(2)Estructura basica de_un_programa_en_c_(2)
Estructura basica de_un_programa_en_c_(2)
 
Centro de estudios_tecnologicos_industrial_y_de_servicios(2)
Centro de estudios_tecnologicos_industrial_y_de_servicios(2)Centro de estudios_tecnologicos_industrial_y_de_servicios(2)
Centro de estudios_tecnologicos_industrial_y_de_servicios(2)
 
Programación C++ - DEV C++
Programación C++ - DEV C++Programación C++ - DEV C++
Programación C++ - DEV C++
 
IF-ELSE EN Csharp C#
IF-ELSE EN Csharp C#IF-ELSE EN Csharp C#
IF-ELSE EN Csharp C#
 

Similar a Info proyecto4

Tema vi guia de c
Tema vi guia de cTema vi guia de c
Tema vi guia de cMaye Re
 
A1 u1-16230227
A1 u1-16230227A1 u1-16230227
A1 u1-16230227erikalejo
 
Curso migración de aplicaciones nsl nk90 a tmp
Curso migración de aplicaciones nsl nk90 a tmpCurso migración de aplicaciones nsl nk90 a tmp
Curso migración de aplicaciones nsl nk90 a tmpEdgar Solis
 
5. PROGRAMACION ESTRUCTURADA C++.pptx
5. PROGRAMACION ESTRUCTURADA C++.pptx5. PROGRAMACION ESTRUCTURADA C++.pptx
5. PROGRAMACION ESTRUCTURADA C++.pptxDieguess
 
PARADIGMAS FP Y OOP USANDO TÉCNICAS AVANZADAS DE PROGRAMACIÓN ASÍNCRONA
PARADIGMAS FP  Y OOP USANDO TÉCNICAS AVANZADAS DE PROGRAMACIÓN ASÍNCRONAPARADIGMAS FP  Y OOP USANDO TÉCNICAS AVANZADAS DE PROGRAMACIÓN ASÍNCRONA
PARADIGMAS FP Y OOP USANDO TÉCNICAS AVANZADAS DE PROGRAMACIÓN ASÍNCRONAVíctor Bolinches
 
(Meta 5.1)función sin parámetros que no retorna valor dev c++
(Meta 5.1)función sin parámetros que no retorna valor dev c++ (Meta 5.1)función sin parámetros que no retorna valor dev c++
(Meta 5.1)función sin parámetros que no retorna valor dev c++ Eli Diaz
 
Temario programacion basica
Temario programacion basicaTemario programacion basica
Temario programacion basicaconaleptareas
 
Actividad Obligatoria N° 2 - RÍOS, M. Fernanda
Actividad Obligatoria N° 2 - RÍOS, M. FernandaActividad Obligatoria N° 2 - RÍOS, M. Fernanda
Actividad Obligatoria N° 2 - RÍOS, M. FernandaM. Fernanda Rios
 
WPF 10. mejorando la funcionalidad y usabilidad de las aplicaciones
WPF 10. mejorando la funcionalidad y usabilidad de las aplicacionesWPF 10. mejorando la funcionalidad y usabilidad de las aplicaciones
WPF 10. mejorando la funcionalidad y usabilidad de las aplicacionesDanae Aguilar Guzmán
 

Similar a Info proyecto4 (20)

Tema vi guia de c
Tema vi guia de cTema vi guia de c
Tema vi guia de c
 
A1 u1-16230227
A1 u1-16230227A1 u1-16230227
A1 u1-16230227
 
Curso migración de aplicaciones nsl nk90 a tmp
Curso migración de aplicaciones nsl nk90 a tmpCurso migración de aplicaciones nsl nk90 a tmp
Curso migración de aplicaciones nsl nk90 a tmp
 
5. PROGRAMACION ESTRUCTURADA C++.pptx
5. PROGRAMACION ESTRUCTURADA C++.pptx5. PROGRAMACION ESTRUCTURADA C++.pptx
5. PROGRAMACION ESTRUCTURADA C++.pptx
 
Sesion 4
Sesion 4Sesion 4
Sesion 4
 
PARADIGMAS FP Y OOP USANDO TÉCNICAS AVANZADAS DE PROGRAMACIÓN ASÍNCRONA
PARADIGMAS FP  Y OOP USANDO TÉCNICAS AVANZADAS DE PROGRAMACIÓN ASÍNCRONAPARADIGMAS FP  Y OOP USANDO TÉCNICAS AVANZADAS DE PROGRAMACIÓN ASÍNCRONA
PARADIGMAS FP Y OOP USANDO TÉCNICAS AVANZADAS DE PROGRAMACIÓN ASÍNCRONA
 
Cplus
CplusCplus
Cplus
 
C++
C++C++
C++
 
Programación en c++
Programación en c++Programación en c++
Programación en c++
 
(Meta 5.1)función sin parámetros que no retorna valor dev c++
(Meta 5.1)función sin parámetros que no retorna valor dev c++ (Meta 5.1)función sin parámetros que no retorna valor dev c++
(Meta 5.1)función sin parámetros que no retorna valor dev c++
 
Programa
ProgramaPrograma
Programa
 
Temario programacion basica
Temario programacion basicaTemario programacion basica
Temario programacion basica
 
Air plane
Air planeAir plane
Air plane
 
Taller mapsforge
Taller mapsforgeTaller mapsforge
Taller mapsforge
 
Apun c
Apun cApun c
Apun c
 
Actividad Obligatoria N° 2 - RÍOS, M. Fernanda
Actividad Obligatoria N° 2 - RÍOS, M. FernandaActividad Obligatoria N° 2 - RÍOS, M. Fernanda
Actividad Obligatoria N° 2 - RÍOS, M. Fernanda
 
Programación C++.pdf
Programación C++.pdfProgramación C++.pdf
Programación C++.pdf
 
Funcionesclase1
Funcionesclase1Funcionesclase1
Funcionesclase1
 
WPF 10. mejorando la funcionalidad y usabilidad de las aplicaciones
WPF 10. mejorando la funcionalidad y usabilidad de las aplicacionesWPF 10. mejorando la funcionalidad y usabilidad de las aplicaciones
WPF 10. mejorando la funcionalidad y usabilidad de las aplicaciones
 
Computación 3 sb04003 2013
Computación 3 sb04003 2013Computación 3 sb04003 2013
Computación 3 sb04003 2013
 

Más de Boris Seminario

Laboratorio5 dinamica rotacional
Laboratorio5 dinamica rotacionalLaboratorio5 dinamica rotacional
Laboratorio5 dinamica rotacionalBoris Seminario
 
Laboratorio4 trabajo y energía
Laboratorio4 trabajo y energíaLaboratorio4 trabajo y energía
Laboratorio4 trabajo y energíaBoris Seminario
 
Laboratorio3 segunda ley de newton
Laboratorio3 segunda ley de newtonLaboratorio3 segunda ley de newton
Laboratorio3 segunda ley de newtonBoris Seminario
 
Laboratorio2 velocidad y aceleracion instantanea
Laboratorio2 velocidad y aceleracion instantaneaLaboratorio2 velocidad y aceleracion instantanea
Laboratorio2 velocidad y aceleracion instantaneaBoris Seminario
 
Informe de laboratorio 1 errores y mediciones
Informe de laboratorio 1 errores y medicionesInforme de laboratorio 1 errores y mediciones
Informe de laboratorio 1 errores y medicionesBoris Seminario
 
Laboratorio 4: electroquímica y corrosión
Laboratorio 4: electroquímica y corrosiónLaboratorio 4: electroquímica y corrosión
Laboratorio 4: electroquímica y corrosiónBoris Seminario
 
Informe de laboratorio 3: Tabla periódica
Informe de laboratorio 3: Tabla periódicaInforme de laboratorio 3: Tabla periódica
Informe de laboratorio 3: Tabla periódicaBoris Seminario
 

Más de Boris Seminario (10)

Tarea2 informatica
Tarea2 informaticaTarea2 informatica
Tarea2 informatica
 
Laboratorio5 dinamica rotacional
Laboratorio5 dinamica rotacionalLaboratorio5 dinamica rotacional
Laboratorio5 dinamica rotacional
 
Tarea info
Tarea infoTarea info
Tarea info
 
Laboratorio4 trabajo y energía
Laboratorio4 trabajo y energíaLaboratorio4 trabajo y energía
Laboratorio4 trabajo y energía
 
Laboratorio3 segunda ley de newton
Laboratorio3 segunda ley de newtonLaboratorio3 segunda ley de newton
Laboratorio3 segunda ley de newton
 
Laboratorio2 velocidad y aceleracion instantanea
Laboratorio2 velocidad y aceleracion instantaneaLaboratorio2 velocidad y aceleracion instantanea
Laboratorio2 velocidad y aceleracion instantanea
 
Informe de laboratorio 1 errores y mediciones
Informe de laboratorio 1 errores y medicionesInforme de laboratorio 1 errores y mediciones
Informe de laboratorio 1 errores y mediciones
 
Monografía grafeno
Monografía grafenoMonografía grafeno
Monografía grafeno
 
Laboratorio 4: electroquímica y corrosión
Laboratorio 4: electroquímica y corrosiónLaboratorio 4: electroquímica y corrosión
Laboratorio 4: electroquímica y corrosión
 
Informe de laboratorio 3: Tabla periódica
Informe de laboratorio 3: Tabla periódicaInforme de laboratorio 3: Tabla periódica
Informe de laboratorio 3: Tabla periódica
 

Último

BREEAM ES Urbanismo como herramienta para un planeamiento sostenible - Miguel...
BREEAM ES Urbanismo como herramienta para un planeamiento sostenible - Miguel...BREEAM ES Urbanismo como herramienta para un planeamiento sostenible - Miguel...
BREEAM ES Urbanismo como herramienta para un planeamiento sostenible - Miguel...ITeC Instituto Tecnología Construcción
 
Caso de éxito de Hervian con el ERP Sage 200
Caso de éxito de Hervian con el ERP Sage 200Caso de éxito de Hervian con el ERP Sage 200
Caso de éxito de Hervian con el ERP Sage 200Opentix
 
Manual de Usuario APPs_AppInventor-2023.pdf
Manual de Usuario APPs_AppInventor-2023.pdfManual de Usuario APPs_AppInventor-2023.pdf
Manual de Usuario APPs_AppInventor-2023.pdfmasogeis
 
Unidad_3_T1_AutomatasFinitos presentacion
Unidad_3_T1_AutomatasFinitos presentacionUnidad_3_T1_AutomatasFinitos presentacion
Unidad_3_T1_AutomatasFinitos presentacionarmando_cardenas
 
Segmentacion Segmantica_Modelos UNET and DEEPLABV3
Segmentacion Segmantica_Modelos UNET and DEEPLABV3Segmentacion Segmantica_Modelos UNET and DEEPLABV3
Segmentacion Segmantica_Modelos UNET and DEEPLABV3AlexysCaytanoMelndez1
 
PARTES DEL TECLADO Y SUS FUNCIONES - EJEMPLO
PARTES DEL TECLADO Y SUS FUNCIONES - EJEMPLOPARTES DEL TECLADO Y SUS FUNCIONES - EJEMPLO
PARTES DEL TECLADO Y SUS FUNCIONES - EJEMPLOSelenaCoronadoHuaman
 
Introducción a Funciones LENGUAJE DART FLUTTER
Introducción a Funciones LENGUAJE DART FLUTTERIntroducción a Funciones LENGUAJE DART FLUTTER
Introducción a Funciones LENGUAJE DART FLUTTEREMMAFLORESCARMONA
 

Último (7)

BREEAM ES Urbanismo como herramienta para un planeamiento sostenible - Miguel...
BREEAM ES Urbanismo como herramienta para un planeamiento sostenible - Miguel...BREEAM ES Urbanismo como herramienta para un planeamiento sostenible - Miguel...
BREEAM ES Urbanismo como herramienta para un planeamiento sostenible - Miguel...
 
Caso de éxito de Hervian con el ERP Sage 200
Caso de éxito de Hervian con el ERP Sage 200Caso de éxito de Hervian con el ERP Sage 200
Caso de éxito de Hervian con el ERP Sage 200
 
Manual de Usuario APPs_AppInventor-2023.pdf
Manual de Usuario APPs_AppInventor-2023.pdfManual de Usuario APPs_AppInventor-2023.pdf
Manual de Usuario APPs_AppInventor-2023.pdf
 
Unidad_3_T1_AutomatasFinitos presentacion
Unidad_3_T1_AutomatasFinitos presentacionUnidad_3_T1_AutomatasFinitos presentacion
Unidad_3_T1_AutomatasFinitos presentacion
 
Segmentacion Segmantica_Modelos UNET and DEEPLABV3
Segmentacion Segmantica_Modelos UNET and DEEPLABV3Segmentacion Segmantica_Modelos UNET and DEEPLABV3
Segmentacion Segmantica_Modelos UNET and DEEPLABV3
 
PARTES DEL TECLADO Y SUS FUNCIONES - EJEMPLO
PARTES DEL TECLADO Y SUS FUNCIONES - EJEMPLOPARTES DEL TECLADO Y SUS FUNCIONES - EJEMPLO
PARTES DEL TECLADO Y SUS FUNCIONES - EJEMPLO
 
Introducción a Funciones LENGUAJE DART FLUTTER
Introducción a Funciones LENGUAJE DART FLUTTERIntroducción a Funciones LENGUAJE DART FLUTTER
Introducción a Funciones LENGUAJE DART FLUTTER
 

Info proyecto4

  • 1. 2016-2 CB-411: Tarea 4 Boris Hermes Seminario Arista 20141076H Sección: O Profesor: Arturo Vilca Román
  • 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.
  • 4. 3 2016-2 3. Arquitectura del diseño 3.a Algoritmos de las funciones de la biblioteca reservación.h
  • 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
  • 9. 8 2016-2 33 34 35 void menuClase() 36 { 37 printf("nElija la clase en la que desae viajar:n"); 38 printf("(A) - Clase An"); 39 printf("(B) - Clase Bn"); 40 printf("(C) - Clase Cn"); 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)
  • 10. 9 2016-2 72 { 73 case 'A': 74 if(a >= nA) 75 { 76 printf("No hay asientos disponiblesn"); 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 disponiblesn"); 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 disponiblesn"); 105 break; 106 } 107 else 108 {
  • 11. 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,"%dn",pasaje.idOperacion); 133 }
  • 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
  • 14. 13 2016-2 Se observa el filtro de valores incorrectos
  • 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.