Info proyecto4

15
2016-2 CB-411: Tarea 4 Boris Hermes Seminario Arista 20141076H Sección: O Profesor: Arturo Vilca Román

Transcript of Info proyecto4

Page 1: Info proyecto4

2016-2

CB-411: Tarea 4

Boris Hermes Seminario Arista 20141076H

Sección: O

Profesor: Arturo Vilca Román

Page 2: Info proyecto4

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.

Page 3: Info proyecto4

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.

Page 4: Info proyecto4

3

2016-2

3. Arquitectura del diseño

3.a Algoritmos de las funciones de la biblioteca reservación.h

Page 5: Info proyecto4

4

2016-2

Page 6: Info proyecto4

5

2016-2

Page 7: Info proyecto4

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.

Page 8: Info proyecto4

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

Page 9: Info proyecto4

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)

Page 10: Info proyecto4

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 {

Page 11: Info proyecto4

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 }

Page 12: Info proyecto4

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 }

Page 13: Info proyecto4

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

Page 14: Info proyecto4

13

2016-2

Se observa el filtro de valores incorrectos

Page 15: Info proyecto4

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.