Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: Alexh3 en 22 Noviembre 2015, 16:43 pm



Título: Reservaciones de un cine ¿Qué pasa?
Publicado por: Alexh3 en 22 Noviembre 2015, 16:43 pm
Amigos, soy nuevo en este foro y agradecería enormemente una pequeña ayuda con un código.
Como dice en el asunto, es un sistema de reservaciones de un cine, pero no puedo lograr que la función que evalúa las opciones de película, día, horario , llame correctamente a la función que reserva los asientos.
Amigos, ya me quemé la cabeza intentándolo, de verdad agradecería su ayuda enormemente, les paso todo mi código.
Código:
#include<stdio.h>
#include<stdlib.h>
#include<windows.h>
void gotoxy(int x, int y);
void datos(void);
void asientos(void);
struct guardar
{
char *pelicula[5]={"Avengers", "Terminator", "Principito", "Enredados", "Megamente"}, cliente[60], *horario[4]={"1-3pm", "3-5pm", "5-7pm", "7-9pm"}, *dia[5]={"Viernes","Sabado","Domingo"};
int adultos, ninos, ndia, nhorario, npelicula;
double coston, costoa, pago;
}c;
main()
{
int j;
char nombre[50];
gotoxy(35, 8);
puts("CINE");
gotoxy(17, 13);
puts("Presiona tres veces la tecla Enter para continuar");
getchar();
getchar();
system("cls");
getchar();
puts("Ingresa tu nombre");
scanf(" %[^\n]", &nombre);
j=0;
while (j<1)
{
printf("¿Qué película quieres reservar %s? Tenemos las siguientes opciones: \n Avengers ---->1\n Terminator -->2\n Principito -->3\n Enredados -->4\n Megamente -->5\n", nombre);
scanf("%d", &c.npelicula);
switch(c.npelicula)
{
case 1:
case 2:
case 3:
case 4:
case 5:
printf("ha elegido la pelicula %s",c.pelicula[c.npelicula-1]);
datos();
j++;
break;
default:
puts("Opcion invalida");
   break;
}
}
}
void gotoxy(int x, int y)
{
COORD coord;
coord.X=x;
coord.Y=y;
SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE), coord);
}
void datos(void)
{
int i, h;
long boletos, boletost;
puts("¿En que dia de la semana deseas ver la pelicula? \n Lunes-->1\n Martes-->2\n Miercoles-->3 \n Jueves-->4\n Viernes-->5 ");
scanf("%i", &c.ndia);
printf("Tu funcion sera el dia %s \nEscribe el horario en el que deseas reservar tus boletos  \n\n 1 a 3 pm-->1\n 3 a 5 pm-->2\n 5 a 7 pm-->3\n 7 a 9 pm-->4\n",c.dia[c.ndia-1]);
scanf("%i", &c.nhorario);
asientos();
getchar();
}
void asientos(void)
{
int asientos[5][5]={{1,1,1,1,1},{1,1,1,1,1},{1,1,1,1,1},{1,1,1,1,1},{1,1,1,1,1}},i,j,fila,numero,numeroasientos,asientosdisponibles=25,cont,d;

            for(i=0;i<5;i=i+1)
                        {
                            for(j=0;j<5;j=j+1)
                            {
                                if (asientos[i][j]==1)
                                {
                                    asientosdisponibles+1;
                                }
                                else asientosdisponibles+0;
                            }
                        }
            printf("\nAsientos disponibles: %d", asientosdisponibles);
         printf("\nHa elegido el horario de %s\ningrese el numero de boletos para adultos", c.horario[c.nhorario-1]);
scanf("%d", &c.adultos);
puts("ingrese el numero de boletos para ninos/3era edad");
scanf("%d", &c.ninos);
numeroasientos=c.adultos+c.ninos;
printf("\nnumeroasientos: %d\n", numeroasientos);
if (asientosdisponibles<numeroasientos)
{
puts("la funcion se ha agotado");
}
else
            {
            if(numeroasientos>=0 && numeroasientos<=25)
            {
                while(cont<numeroasientos)
                {
                        d=0;
                        for(i=0;i<5;i=i+1)
                        {
                            for(j=0;j<5;j=j+1)
                            {
                                if (j==0)
                                {
                                    do
                                    {
                                        printf("Fila %d -->  ",c);
                                        printf("  |%d|  ",asientos[i][j]);
                                        d=d+1;
                                    }
                                    while(d==0);
                                }
                        printf("\n");
                        }
                        printf("                    **Pantalla**\n");
                        printf("               0      1      2      3      4  --> Numero de Asiento\n");
                puts("\nIngrese la fila que desee:\n");
                scanf("%i", &fila);
                switch(fila)
                        {
                            case 0:
                            case 1:
                            case 2:
                            case 3:
                            case 4:
                                puts("Ingrese el numero de asiento que desee:\n");
                                scanf("%i", &numero);
                                switch(numero)
                                {
                                    case 0:
                                    case 1:
                                    case 2:
                                    case 3:
                                    case 4:
                                                if(asientos[fila][numero]==1)
                                                {
                                                    printf("Ha elegido correctamente el asiento\n");
                                                    asientos[fila][numero]=0;
                                                    cont=cont+1;
                                                    getchar();
                                                    getchar();
                                                }
                                                else
                                                {
                                                    printf("El asiento esta ocupado, presione enter para continuar\n");
                                                    getchar();
                                                    getchar();
                                                }

                                    break;
                                    default:
                                        printf("Error, presione enter para continuar");
                                        getchar();
                                        getchar();
                                    break;
                                 }
                            break;
                            default:
                               printf("Error, presione enter para continuar");
                               getchar();
                               getchar();
                            break;
                        }
                system("cls");
                }
            }
            else printf("Error");
            getchar();
            getchar();
            }
    }
                 else
                                printf("  |%d|  ",asientos[i][j]);
                            }
                        printf("\n");
                        }
                        printf("                    **Pantalla**\n");
                        printf("               0      1      2      3      4  --> Numero de Asiento\n");
                puts("\nIngrese la fila que desee:\n");
                scanf("%i", &fila);
                switch(fila)
                        {
                            case 0:
                            case 1:
                            case 2:
                            case 3:
                            case 4:
                                puts("Ingrese el numero de asiento que desee:\n");
                                scanf("%i", &numero);
                                switch(numero)
                                {
                                    case 0:
                                    case 1:
                                    case 2:
                                    case 3:
                                    case 4:
                                                if(asientos[fila][numero]==1)
                                                {
                                                    printf("Ha elegido correctamente el asiento\n");
                                                    asientos[fila][numero]=0;
                                                    cont=cont+1;
                                                    getchar();
                                                    getchar();
                                                }
                                                else
                                                {
                                                    printf("El asiento esta ocupado, presione enter para continuar\n");
                                                    getchar();
                                                    getchar();
                                                }

                                    break;
                                    default:
                                        printf("Error, presione enter para continuar");
                                        getchar();
                                        getchar();
                                    break;
                                 }
                            break;
                            default:
                               printf("Error, presione enter para continuar");
                               getchar();
                               getchar();
                            break;
                        }
                system("cls");
                }
            }
            else printf("Error");
            getchar();
            getchar();
            }
    }


Título: Re: Reservaciones de un cine ¿Qué pasa?
Publicado por: 0xFer en 22 Noviembre 2015, 18:19 pm
Código
  1. for(i=0;i<5;i=i+1)
  2. {
  3.     for(j=0;j<5;j=j+1)
  4.      {
  5.         if (asientos[i][j]==1)
  6.            {
  7.                 //asientosdisponibles+1
  8.                 asientosdisponibles++;
  9.             }
  10.           /*else
  11.                  asientosdisponibles+0;
  12.         }*/
  13. }

Te lo he corregido un poco, asientosdisponibles+1; aunque creas que esa linea aumenta el valor de asientosdisponibles en realidad no lo hace, el else no es necesario.

Ah y recuerda inicializar tus variables.

Código
  1.  asientosdisponibles = 0;
  2. numeroasientos = 0;
fijate cuáles deben tener a fuerzas un valor que no sea basura, es decir, un número cualquiera que se les asigna a las variables por el sistema sólo porque el programador no las inicializa después de crear las variables.


Título: Re: Reservaciones de un cine ¿Qué pasa?
Publicado por: Alexh3 en 23 Noviembre 2015, 03:51 am
Amigo, de verdad te lo agradezco, tu consejo me sirvió bastante :P
Pero es un proyecto escolar y no funcionaba bien, así que decidí hacerlo más simple pero más a prueba de errores (aunque más largo)
pero igual me están costando trabajo nun par de cositas, te agradecería que me apoyes de nuevo en mi código actual.
de antemano, muchísimas graciias! !!!
(te dejo el link del nuevo post)
https://foro.elhacker.net/programacion_cc/reservaciones-t444671.0.html;msg2048053#msg2048053