Advertisement
Guest User

Untitled

a guest
Sep 25th, 2015
335
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 16.52 KB | None | 0 0
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <string.h>
  4. #include <dirent.h>
  5.  
  6. #define MAXHORARIOS 5
  7. #define PRECIO_TICKET 500
  8. //---------------------------------------------------------------------------
  9.  
  10. //Prototipos de funciones
  11. int BuscarCine(char *nombreCine);
  12. int ListarCines(void);
  13. int ListarSalasDeCine(char *nombreCine);
  14. int CrearCine(char *nombreCine);
  15. int RellenarFileCine(char *path);
  16. int BuscarPelicula(char *nombreCine, char *nombrePeli, char *hora, int opcion);
  17. int VentaTickets(char *nombreCine, char *nombrePelicula, char *hora, int tickets);
  18. int Pagar(int tickets);
  19. int EditarSala(char *nombreCine);
  20. void Menu(void);
  21. //---------------------------------------------------------------------------
  22.  
  23. //Globales
  24. const char * dir_name = "Cines"; /* nombre del directorio */
  25. struct _horario{
  26.    char nombrePeli[200];
  27.    char hora[6];
  28.    int asientosLibres;
  29. }Horarios;
  30.  
  31. struct _cine{
  32.    char nombreCine[50]; //nombre del cine
  33.    int sala;
  34.    struct _horario horario[MAXHORARIOS];
  35. }Cine;
  36. //---------------------------------------------------------------------------
  37.  
  38. int main(int argc, char* argv[])
  39. {
  40.    int retval, tickets, salir = 0;
  41.    char nombreCine[200], nombrePelicula[200], hora[6];
  42.  
  43.    do{
  44.       Menu();
  45.       printf("Elija una opcion: ");
  46.       scanf("%i",&retval);
  47.  
  48.       switch(retval){
  49.          case 1:
  50.             system("CLS");
  51.             printf("\nLISTADO DE LOS CINES QUE EXISTEN ACTUALMENTE\n");
  52.             printf("--------------------------------------------\n");
  53.             retval = ListarCines();
  54.             printf("--------------------------------------------\n\n");
  55.             fflush(stdin);
  56.             getchar();
  57.             break;
  58.          case 2:
  59.             system("CLS");
  60.             printf("Escriba el nombre de un cine para crearlo: ");
  61.             scanf("%s",nombreCine);
  62.             retval = CrearCine(nombreCine);
  63.             fflush(stdin);
  64.             getchar();
  65.             break;
  66.          case 3:
  67.             system("CLS");
  68.             printf("Escriba el nombre de un cine para ver sus salas: ");
  69.             scanf("%s",nombreCine);
  70.             if(BuscarCine(nombreCine) == 1){
  71.                ListarSalasDeCine(nombreCine);
  72.             }else{
  73.                  printf("No existe o no se pudo abrir el cine \"%s\"\n", nombreCine);
  74.              }
  75.             fflush(stdin);
  76.             getchar();
  77.             break;
  78.          case 4:
  79.             printf("Introduce el nombre del cine: ");
  80.             scanf("%s", nombreCine);
  81.             if(BuscarCine(nombreCine)){
  82.                printf("Introduce la pelicula deseada: ");
  83.                scanf("%s", nombrePelicula);
  84.                if(BuscarPelicula(nombreCine, nombrePelicula, NULL, 0)){
  85.                   printf("Elije el horario: ");
  86.                   scanf("%s", hora);
  87.                   system("CLS");
  88.                   if(BuscarPelicula(nombreCine, nombrePelicula, hora, 1)){
  89.                      printf("Introduce el numero de tickets a comprar: ");
  90.                      scanf("%i", &tickets);
  91.                      system("CLS");
  92.                      retval = VentaTickets(nombreCine, nombrePelicula, hora, tickets);
  93.  
  94.                      if(retval == tickets){
  95.                         printf("Venta realizada satisfactoriamente.\n");
  96.                      }else if(retval == 0){
  97.                         printf("No se encontró ninguna coincidencia.\n");
  98.                      }else if(retval == -1){
  99.                         printf("No hay suficientes tickets disponibles.\n");
  100.                      }else if(retval == -2){
  101.                         printf("Se ha cancelado la venta.\n");
  102.                      }else if(retval == -3){
  103.                         printf("Huvo un error al realizar la venta. No se pudo actualizar el archivo.\n");
  104.                      }
  105.                   }else{
  106.                      printf("No existe el horario introducido para la pelicula \"%s\" en el cine \"%s\".\n", nombrePelicula, nombreCine);
  107.                   }
  108.                }else{
  109.                   printf("No existe la pelicula introducida.\n");
  110.                }
  111.             }else{
  112.                printf("No existe el cine introducido.\n");
  113.             }
  114.             fflush(stdin);
  115.             getchar();
  116.             break;
  117.          case 5:
  118.             printf("Introduce el nombre del cine: ");
  119.             scanf("%s", nombreCine);
  120.             if(BuscarCine(nombreCine)){
  121.                system("CLS");
  122.                if(ListarSalasDeCine(nombreCine) > 0){
  123.                   retval = EditarSala(nombreCine);
  124.                   switch(retval){
  125.                      case 0:
  126.                         printf("No existe esa sala en este cine.\n");
  127.                         break;
  128.                      case -3:
  129.                         printf("Huvo un error al realizar la venta. No se pudo actualizar el archivo.\n");
  130.                         break;
  131.                      case 1:
  132.                         printf("Edicion de sala exitosa.\n");
  133.                   }
  134.                }else{
  135.                   printf("No existen salas en este cine.\n");
  136.                }
  137.             }else{
  138.                printf("No existe el cine introducido.\n");
  139.             }
  140.             fflush(stdin);
  141.             getchar();
  142.             break;
  143.          case 6:
  144.             salir = 1;
  145.             break;
  146.          default:
  147.             printf("No existe la opcion elejida. Pulse intro para volver a intentarlo.", nombreCine);
  148.             fflush(stdin);
  149.             getchar();
  150.       }
  151.    }while(!salir);
  152.  
  153.    return 0;
  154. }
  155. //---------------------------------------------------------------------------
  156.  
  157. void Menu(void){
  158.    system("CLS");
  159.    printf("\tMENU\n");
  160.    printf("\t====\n\n");
  161.    printf("1-Listar los cines existentes\n");
  162.    printf("2-Crear un cine nuevo\n");
  163.    printf("3-Listar las salas de un cine existente\n");
  164.    printf("4-Vender una entrada\n");
  165.    printf("5-Editar sala\n");
  166.    printf("6-Salir\n\n");
  167. }
  168. //---------------------------------------------------------------------------
  169.  
  170. int ListarCines(){
  171.    int retval;
  172.    DIR * dir_ptr = NULL;
  173.    struct dirent * dirent_ptr;
  174.  
  175.    if((dir_ptr = opendir(dir_name)) != NULL){
  176.       while ((dirent_ptr = readdir(dir_ptr)) != NULL) {
  177.          if(strcmp(dirent_ptr->d_name, ".") != 0 && strcmp(dirent_ptr->d_name, "..") != 0)
  178.              printf( "Nombre del cine: %s\n", dirent_ptr->d_name );
  179.       }
  180.       closedir(dir_ptr);
  181.       retval = 0;
  182.    }else{
  183.         printf( "No existe o no se pudo abrir el directorio '%s'\n", dir_name );
  184.         retval = -1;
  185.     }
  186.    return retval;
  187. }
  188. //---------------------------------------------------------------------------
  189.  
  190. int BuscarCine(char *nombreCine){
  191.    int retval = 0;
  192.    DIR * dir_ptr = NULL;
  193.    struct dirent * dirent_ptr;
  194.  
  195.    if((dir_ptr = opendir(dir_name)) != NULL){
  196.       while ((dirent_ptr = readdir(dir_ptr)) != NULL) {
  197.          if(strcmp(dirent_ptr->d_name, nombreCine) == 0){
  198.              retval = 1;
  199.             break;
  200.          }
  201.       }
  202.       closedir(dir_ptr);
  203.    }else{
  204.         printf("No existe o no se pudo abrir el directorio \"%s\"\n", dir_name);
  205.     }
  206.    return retval;
  207. }
  208. //---------------------------------------------------------------------------
  209.  
  210. int ListarSalasDeCine(char *nombreCine){
  211.    FILE *fcine;
  212.    int nSalas = 0, i;
  213.    char path[1024] = "Cines\\";
  214.  
  215.    strcat(path,nombreCine);
  216.  
  217.    if((fcine = fopen(path, "r")) != NULL){
  218.       do{
  219.          if(fread(&Cine, sizeof(struct _cine), 1, fcine) == 1){
  220.             printf("\nSala: %i\n", Cine.sala);
  221.             printf("---------\n");
  222.  
  223.             for(i=0; i<MAXHORARIOS; i++){
  224.                printf("Horario: %s\n", Cine.horario[i].hora);
  225.                printf("Nombre de la pelicula: %s\n", Cine.horario[i].nombrePeli);
  226.                printf("Asientos libres: %i\n\n", Cine.horario[i].asientosLibres);
  227.             }
  228.             nSalas++;
  229.          }
  230.       }while(!feof(fcine));
  231.       fclose(fcine);
  232.    }
  233.    return nSalas;
  234. }
  235. //---------------------------------------------------------------------------
  236.  
  237. int CrearCine(char *nombreCine){
  238.    FILE *fcine;
  239.    int nSalas;
  240.    char continuar;
  241.    char path[1024] = "Cines\\";
  242.  
  243.    strcat(path,nombreCine);
  244.    if((fcine = fopen(path, "r")) == NULL){
  245.       nSalas = RellenarFileCine(path);
  246.    }else{
  247.       fclose(fcine);
  248.       printf("El cine con ese nombre ya existe. ¿Desea sobreescribirlo?\n (S/N): ");
  249.       scanf("%c", &continuar);
  250.       continuar = toupper(continuar);
  251.       if(continuar == 'S'){
  252.          remove(path);
  253.          nSalas = RellenarFileCine(path);
  254.       }
  255.    }
  256.    return nSalas;
  257. }
  258. //---------------------------------------------------------------------------
  259.  
  260. int RellenarFileCine(char *path){
  261.    FILE *fcine;
  262.    int nSalas = 0, i=0;
  263.    char continuar;
  264.  
  265.    if((fcine = fopen(path, "w")) != NULL){
  266.       do{
  267.          Cine.sala = nSalas;
  268.          nSalas++;
  269.          printf("\nSala: %i\n", i);
  270.          printf("---------\n");
  271.  
  272.          for(i=0; i<MAXHORARIOS; i++){
  273.             printf("\tHorario: ");
  274.             scanf("%s", &Cine.horario[i].hora);
  275.             printf("\tNombre de la pelicula: ");
  276.             scanf("%s", &Cine.horario[i].nombrePeli);
  277.             printf("\tAsientos: ");
  278.             scanf("%i", &Cine.horario[i].asientosLibres);
  279.             printf("\n");
  280.          }
  281.          if(fwrite(&Cine, sizeof(struct _cine), 1, fcine) == 1){
  282.             printf("Sala guardada satisfactoriamente. ¿Insertar otra sala para este cine? (S/N): ");
  283.             scanf("%c", &continuar);
  284.             continuar = toupper(continuar);
  285.          }else{
  286.             printf("Huvo un error al guardar en el archivo.");
  287.             nSalas--;
  288.             continuar = 'N';
  289.          }
  290.       }while(continuar == 'S');
  291.       fclose(fcine);
  292.    }else{
  293.       printf("No se pudo crear el archivo para este cine.");
  294.    }
  295.    return nSalas;
  296. }
  297. //---------------------------------------------------------------------------
  298.  
  299. int BuscarPelicula(char *nombreCine, char *nombrePeli, char *hora, int opcion){
  300.    FILE *fcine;
  301.    char path[1024] = "Cines\\";
  302.    int i, retval = 0, abortar = 0;
  303.  
  304.    strcat(path,nombreCine);
  305.    if((fcine = fopen(path, "r")) != NULL){
  306.       do{
  307.          if(fread(&Cine, sizeof(struct _cine), 1, fcine) == 1){
  308.             for(i=0; i<MAXHORARIOS && abortar != 1; i++){
  309.                switch(opcion){
  310.                   case 0:
  311.                      if(strcmp(Cine.horario[i].nombrePeli, nombrePeli) == 0){
  312.                         printf("\nSala: %i\n", Cine.sala);
  313.                         printf("---------\n");
  314.                         printf("Horario: %s\n", Cine.horario[i].hora);
  315.                         printf("Nombre de la pelicula: %s\n", Cine.horario[i].nombrePeli);
  316.                         printf("Asientos libres: %i\n\n", Cine.horario[i].asientosLibres);
  317.                         retval = 1;
  318.                      }
  319.                      break;
  320.                   case 1:
  321.                      if(strcmp(Cine.horario[i].nombrePeli, nombrePeli) == 0 && strcmp(Cine.horario[i].hora, hora) == 0){
  322.                         printf("\nSala: %i\n", Cine.sala);
  323.                         printf("---------\n");
  324.                         printf("Horario: %s\n", Cine.horario[i].hora);
  325.                         printf("Nombre de la pelicula: %s\n", Cine.horario[i].nombrePeli);
  326.                         printf("Asientos libres: %i\n\n", Cine.horario[i].asientosLibres);
  327.                         retval = 1;
  328.                      }
  329.                      break;
  330.                   default:
  331.                      printf("Parametro incorrecto.\n");
  332.                      abortar = 1;
  333.                }
  334.             }
  335.          }
  336.       }while(!feof(fcine));
  337.       fclose(fcine);
  338.    }
  339.    return retval;
  340. }
  341. //---------------------------------------------------------------------------
  342.  
  343. int VentaTickets(char *nombreCine, char *nombrePelicula, char *hora, int tickets){
  344.    int retval = 0, pos, salir = 0;
  345.    FILE *fcine;
  346.    int i;
  347.    char path[1024] = "Cines\\";
  348.  
  349.    strcat(path,nombreCine);
  350.    if((fcine = fopen(path, "r+")) != NULL){
  351.       do{
  352.          if(fread(&Cine, sizeof(struct _cine), 1, fcine) == 1){
  353.             for(i=0; i<MAXHORARIOS && salir == 0; i++){
  354.                if(strcmp(nombrePelicula, Cine.horario[i].nombrePeli) == 0 && strcmp(hora, Cine.horario[i].hora) == 0){
  355.                   if(tickets > Cine.horario[i].asientosLibres){
  356.                      salir = 1;
  357.                      retval = -1; //No quedan asientos suficientes disponibles
  358.                   }else{
  359.                      if(Pagar(tickets)){
  360.                         Cine.horario[i].asientosLibres -= tickets;
  361.                         pos = ftell(fcine) - sizeof(struct _cine);
  362.                         fseek(fcine, pos, SEEK_SET);
  363.  
  364.                         if(fwrite(&Cine,sizeof(struct _cine), 1, fcine) == 1){
  365.                            retval = tickets; //Venta realizada satisfactoriamente
  366.                         }else{
  367.                            retval = -3; //No se pudo actualizar el archivo
  368.                         }
  369.                      }else{
  370.                         retval = -2; //Venta cancelada
  371.                      }
  372.                      salir = 1;
  373.                   }
  374.                }
  375.             }
  376.          }
  377.       }while(!feof(fcine) && !salir);
  378.       fclose(fcine);
  379.    }
  380.    return retval;
  381. }
  382. //---------------------------------------------------------------------------
  383.  
  384. int Pagar(int tickets){
  385.    float ingreso, ingresoTotal = 0;
  386.    int retval = 1, salir = 0;
  387.  
  388.    printf("Total a pagar: %.2f\n", 1.0 * tickets * PRECIO_TICKET);
  389.    printf("Ingreso (0 para cancelar): ");
  390.    scanf("%f", &ingreso);
  391.  
  392.    if(ingreso == 0){
  393.       printf("Venta cancelada.\n");
  394.       retval = 0;
  395.       salir = 1;
  396.    }else{
  397.       do{
  398.          ingresoTotal +=ingreso;
  399.          if((tickets * PRECIO_TICKET) - ingresoTotal <= 0){
  400.             printf("Disfrute de sus entradas.\n");
  401.             printf("Su cambio: %i\n", abs(ingresoTotal - tickets * PRECIO_TICKET));
  402.             salir = 1;
  403.          }else{
  404.             printf("Faltan %.2f\n", (tickets * PRECIO_TICKET) - ingresoTotal);
  405.             printf("Completar el ingreso (0 para cancelar): ");
  406.             scanf("%f", &ingreso);
  407.  
  408.             if(ingreso == 0){
  409.                printf("Venta cancelada.\n");
  410.                printf("Devolucion: %.2f\n", ingresoTotal);
  411.                retval = 0;
  412.                salir = 1;
  413.             }
  414.          }
  415.       }while(!salir);
  416.    }
  417.    return retval;
  418. }
  419. //---------------------------------------------------------------------------
  420.  
  421. int EditarSala(char *nombreCine){
  422.    int retval = 0, pos, sala, i, salir = 0;
  423.    FILE *fcine;
  424.    char path[1024] = "Cines\\";
  425.    char hora[6];
  426.  
  427.    strcat(path,nombreCine);
  428.    if((fcine = fopen(path, "r+")) != NULL){
  429.       printf("Indroduce el numero de sala que desea modificar: ");
  430.       scanf("%i", &sala);
  431.       system("CLS");
  432.      
  433.       do{
  434.          if(fread(&Cine, sizeof(struct _cine), 1, fcine) == 1){
  435.             for(i=0; i<MAXHORARIOS && salir == 0; i++){
  436.                if(Cine.sala == sala){
  437.                   for(i=0; i<MAXHORARIOS && salir == 0; i++){
  438.                      printf("\nSala: %i\n", Cine.sala);
  439.                      printf("---------\n");
  440.                      printf("Horario: %s\n", Cine.horario[i].hora);
  441.                      printf("Nombre de la pelicula: %s\n", Cine.horario[i].nombrePeli);
  442.                      printf("Asientos libres: %i\n\n", Cine.horario[i].asientosLibres);
  443.                      retval = 1;
  444.                   }
  445.                   salir = 1;
  446.                }
  447.             }
  448.          }
  449.       }while(!feof(fcine) && !salir);
  450.       if(retval){
  451.          retval = 0;
  452.          salir = 0;
  453.          printf("Elije el horario a modificar: ");
  454.          scanf("%s",hora);
  455.  
  456.          for(i=0; i<MAXHORARIOS && salir == 0; i++){
  457.             if(strcmp(hora, Cine.horario[i].hora) == 0){
  458.                system("CLS");
  459.                printf("Nuevo nombre de pelicula: ");
  460.                scanf("%s", Cine.horario[i].nombrePeli);
  461.                printf("Nuevo horario: ");
  462.                scanf("%s", Cine.horario[i].hora);
  463.                printf("Nuevo cupo de asientos libres: ");
  464.                scanf("%i", &Cine.horario[i].asientosLibres);
  465.                pos = ftell(fcine) - sizeof(struct _cine);
  466.                fseek(fcine, pos, SEEK_SET);
  467.  
  468.                if(fwrite(&Cine,sizeof(struct _cine), 1, fcine) != 1){
  469.                   retval = -3; //No se pudo actualizar el archivo
  470.                }
  471.                retval = 1;
  472.                break;
  473.             }
  474.          }
  475.       }
  476.       fclose(fcine);
  477.    }
  478.    return retval;
  479. }
  480. //---------------------------------------------------------------------------
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement