Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: JulioHacker en 23 Marzo 2022, 04:25 am



Título: Porque ocurre esto en mi codigo en c
Publicado por: JulioHacker en 23 Marzo 2022, 04:25 am
Hola buenos dias, tardes o noches, les pido que me ayuden con esto por favor, estoy realizando un programa en c que emula el sistema de reservacion de vuelos, el programa que realice compila y ejecuta bien, pero dentro del programa no puedo utilizar 2 veces la opción 1 que se muestra en pantalla, solo puedo utilizarlo 1 ves y después no deja que pueda reservar otro vuelo, me gustaría que me ayudaran con esto:


Código
  1. #include<stdio.h>
  2. #include<conio.h>
  3. #include<string.h>
  4. #include<stdlib.h>
  5. #define  N 50
  6. /*
  7.  
  8. 3. Una compañía dedicada al transporte de pasajeros por vía aérea, desea contratar sus servicios con el fin de automatizar
  9.  el proceso de reservación de sus vuelos.
  10.  Para ello Ud. deberá definir una estructura de datos en Lenguaje C que permita almacenar dicha información.
  11.  Además se solicita que realice un programa que permita:
  12. a. Reservar un asiento en un vuelo.
  13. b. Cancelar una reservación.
  14. c. Confirmar una reservación.
  15.  
  16.  
  17. */
  18. typedef struct{
  19.  
  20. char ciudad[N];
  21. char destino[N];
  22. char fecha[N];
  23. char regreso[N];
  24.  
  25. int lleno;
  26.  
  27. }vuelo;
  28. vuelo r[N];
  29. void reservar();
  30.  
  31. void cancelar();
  32.  
  33. void confirmar();
  34. void cambio (char palabra[N]);
  35.  
  36. void menu();
  37. int i,aux,cont=0;
  38. int cancel,close;
  39.  
  40. int main(){
  41.  
  42. menu();
  43. getch();
  44. return 0;
  45. }
  46. void reservar(){
  47.  
  48. printf("Sistema de reservacion de vuelos de aerolineas Julio\n\n");
  49.  
  50.  
  51. for(i=0;i<N && aux == 0;i++){
  52.  
  53.    if(r[i].lleno==0){
  54.  
  55.  
  56. printf("Ciudad de origen? : ");
  57. fflush(stdin);
  58. fgets(r[i].ciudad,N,stdin);
  59.  
  60. printf("Ciudad de destino? : ");
  61.    fflush(stdin);
  62.    fgets(r[i].destino,N,stdin);
  63.  
  64.    printf("Fecha de ida : ");
  65.    fflush(stdin);
  66.    fgets(r[i].fecha,N,stdin);
  67.  
  68.    printf("Fecha de regreso : ");
  69.    fflush(stdin);
  70.    fgets(r[i].regreso,N,stdin);
  71.  
  72.  
  73.    cont++;
  74.    r[i].lleno=1;
  75.    aux=1;
  76.  
  77. }
  78.  
  79.  
  80. printf("Vuelo reservado con exito!! :D ");
  81. printf("\n\n");
  82.  
  83. }
  84.  
  85. }
  86.  
  87. void cancelar(){
  88. if(cont==0){
  89. printf("No tiene vuelos reservados\n");
  90. printf("Por favor reserve un vuelo \n");
  91.  
  92. getch();
  93. system("cls");
  94. }else{
  95. printf("Sistema de cancelacion de vuelo \n\n");
  96.  
  97. int cancel,close;
  98.  
  99. printf("Actualmente tiene %i reservados ",cont);
  100.  
  101. printf("Cuantos vuelos desea cancelar? : ");
  102. scanf("%i",&cancel);
  103.  
  104.  
  105. close = cancel-cont;
  106.  
  107. printf("Cancelacion realizada!!\n\n");
  108.  
  109.  
  110. printf("Quedan %i vuelos disponibles \n\n ",close);
  111.  
  112. printf("\n\n\n");
  113. }
  114.  
  115.  
  116. }
  117.  
  118. void confirmar(){
  119.  
  120. if(cont==0){
  121.  
  122. printf("No tiene vuelos reservados\n");
  123. printf("Por favor reserve un vuelo \n");
  124.  
  125. getch();
  126. system("cls");
  127. }else{
  128.  
  129. printf("Actualmente hay %i vuelos confirmados \n\n",cont);
  130.  
  131.  
  132. system("cls");
  133.  
  134. }
  135. }
  136.  
  137.  
  138. void menu(){
  139.  
  140. int op;
  141.  
  142.  
  143.  
  144. printf("Aerolineas Julio, Volamos contigo!!\n\n\n");
  145.  
  146.  
  147. while(op!=4){
  148.  
  149. printf("Que desea hacer? : \n\n");
  150. printf("1) Reservar un asiento \n");
  151. printf("2) Cancelar una reservacion \n");
  152. printf("3) Confirmar una reservacion \n");
  153. printf("4) Salir");
  154. printf("\n");
  155. scanf("%i",&op);
  156.  
  157. system("cls");
  158.  
  159. switch(op){
  160.  
  161. case 1:
  162.  
  163. reservar();
  164. break;
  165.  
  166. case 2:
  167. cancelar();
  168. break;
  169.  
  170. case 3:
  171. confirmar();
  172. break;
  173.  
  174.  
  175. }}}
  176.  







Título: Re: Porque ocurre esto en mi codigo en c
Publicado por: fary en 23 Marzo 2022, 20:14 pm
Tienes que hacer un planteamiento de programa antes de empezar... solo tienes las letras  :-\

Te e escrito un poquito de código para que veas mas o menos, a ver que te parece.

Código
  1. #include <stdio.h>
  2. #include <string.h>
  3.  
  4. #define MAX 50
  5. #define MAXPasajeros 60 // El máximo de pasageros por avión
  6. #define MAXDestinos 5   // El máximo de destinos
  7.  
  8. const char * Destinos[MAXDestinos] = {"Madrid", "Barcelona","Sevilla","Valencia", "Badajoz"}; // Destinos de los vuelos.
  9.  
  10. struct Vuelo  // Nuestra estructura.
  11. {
  12.    char Origen[MAX];
  13.    char Destino[MAX];
  14.    char FechaIda[MAX];
  15.    char FechaVuelta[MAX];
  16.  
  17.    int NumeroPasajeros;
  18. };
  19.  
  20. struct Vuelo _Vuelo[MAXDestinos]; // Declaro el array de la estructura que contendrá los datos.
  21.  
  22. void Inicializar() // Inicializo las estructuras
  23. {
  24.    int i;
  25.  
  26.    for (i=0; i<5; i++)
  27.    {
  28.        strcpy(_Vuelo[i].Destino, Destinos[i]);
  29.        _Vuelo[i].NumeroPasajeros = 0;
  30.    }
  31. }
  32.  
  33. int Reservar()
  34. {
  35.    int i;
  36.    int NumeroVuelo;
  37.  
  38.    for (i=0; i < MAXDestinos; i++)
  39.    {
  40.        printf("%i - ", i);
  41.        printf("%s\n",_Vuelo[i].Destino);
  42.    }
  43.  
  44.    printf("Seleccione el número e vuelo que desea: ");
  45.    scanf("%i",&NumeroVuelo);
  46.  
  47.    if (_Vuelo[NumeroVuelo].NumeroPasajeros > 59) // Si el vuelo esta lleno, informamos y salimos
  48.    {
  49.        printf("Lo sentimos, el vuelo esta lleno...\n");
  50.        return 0;
  51.    }
  52.  
  53.    printf("Fecha de ida: ");
  54.    scanf("%s",_Vuelo[NumeroVuelo].FechaIda);
  55.  
  56.    printf("Fecha de la vuelta: ");
  57.    scanf("%s",_Vuelo[NumeroVuelo].FechaVuelta);
  58.  
  59.    printf("Ciudad de origen: ");
  60.    scanf("%s", _Vuelo[NumeroVuelo].Origen);
  61.  
  62.    _Vuelo[NumeroVuelo].NumeroPasajeros++;
  63.    printf("Vuelo reservado, total reservas: %i\n",_Vuelo[NumeroVuelo].NumeroPasajeros);
  64.    return 0;
  65. }
  66.  
  67. int main()
  68. {
  69.    Inicializar();
  70.  
  71.    int Operacion;
  72.    while (1)
  73.    {
  74.        Operacion = 0;
  75.  
  76.        printf("Seleccione la operación que desea realizar: \n");
  77.        printf("1- Reservar un asiento\n");
  78.        printf("2- Cancelar reserva\n");
  79.        printf("3- Salir\n");
  80.  
  81.        scanf("%i",&Operacion);        
  82.  
  83.        switch(Operacion)
  84.        {
  85.            case 1:
  86.                Reservar();
  87.                break;
  88.            case 2:
  89.  
  90.                break;
  91.            case 3:
  92.                return 0;
  93.        }
  94.    }
  95.  
  96.    return 0;
  97. }

Si quieres hacer algo como esto bien tienes que contar con más cosas como por ejemplo para reservar billete y contar como va el avión de lleno no pueden tener fechas diferentes... con lo cual se complica más la cosa.

Tambień puedes identar bien el código, fijate que diferencia entre el tuyo (Practicamente ilegible, se te quitan las ganas) con el mio, a simple vista ves donde empiezan y comienzan los bucles, las funciones, etc.


Título: Re: Porque ocurre esto en mi codigo en c
Publicado por: JulioHacker en 24 Marzo 2022, 04:07 am
Ya, con ese código  logre comprender mejor  ::), y si ,tienes razón con las recomendaciones, me servirá para mejorar y terminar el ejercicio que tengo planteado , muchas gracias  :D