Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <stdio.h>
- #include <stdlib.h>
- #include <string.h>
- #include <dirent.h>
- #define MAXHORARIOS 5
- #define PRECIO_TICKET 500
- //---------------------------------------------------------------------------
- //Prototipos de funciones
- int BuscarCine(char *nombreCine);
- int ListarCines(void);
- int ListarSalasDeCine(char *nombreCine);
- int CrearCine(char *nombreCine);
- int RellenarFileCine(char *path);
- int BuscarPelicula(char *nombreCine, char *nombrePeli, char *hora, int opcion);
- int VentaTickets(char *nombreCine, char *nombrePelicula, char *hora, int tickets);
- int Pagar(int tickets);
- int EditarSala(char *nombreCine);
- void Menu(void);
- //---------------------------------------------------------------------------
- //Globales
- const char * dir_name = "Cines"; /* nombre del directorio */
- struct _horario{
- char nombrePeli[200];
- char hora[6];
- int asientosLibres;
- }Horarios;
- struct _cine{
- char nombreCine[50]; //nombre del cine
- int sala;
- struct _horario horario[MAXHORARIOS];
- }Cine;
- //---------------------------------------------------------------------------
- int main(int argc, char* argv[])
- {
- int retval, tickets, salir = 0;
- char nombreCine[200], nombrePelicula[200], hora[6];
- do{
- Menu();
- printf("Elija una opcion: ");
- scanf("%i",&retval);
- switch(retval){
- case 1:
- system("CLS");
- printf("\nLISTADO DE LOS CINES QUE EXISTEN ACTUALMENTE\n");
- printf("--------------------------------------------\n");
- retval = ListarCines();
- printf("--------------------------------------------\n\n");
- fflush(stdin);
- getchar();
- break;
- case 2:
- system("CLS");
- printf("Escriba el nombre de un cine para crearlo: ");
- scanf("%s",nombreCine);
- retval = CrearCine(nombreCine);
- fflush(stdin);
- getchar();
- break;
- case 3:
- system("CLS");
- printf("Escriba el nombre de un cine para ver sus salas: ");
- scanf("%s",nombreCine);
- if(BuscarCine(nombreCine) == 1){
- ListarSalasDeCine(nombreCine);
- }else{
- printf("No existe o no se pudo abrir el cine \"%s\"\n", nombreCine);
- }
- fflush(stdin);
- getchar();
- break;
- case 4:
- printf("Introduce el nombre del cine: ");
- scanf("%s", nombreCine);
- if(BuscarCine(nombreCine)){
- printf("Introduce la pelicula deseada: ");
- scanf("%s", nombrePelicula);
- if(BuscarPelicula(nombreCine, nombrePelicula, NULL, 0)){
- printf("Elije el horario: ");
- scanf("%s", hora);
- system("CLS");
- if(BuscarPelicula(nombreCine, nombrePelicula, hora, 1)){
- printf("Introduce el numero de tickets a comprar: ");
- scanf("%i", &tickets);
- system("CLS");
- retval = VentaTickets(nombreCine, nombrePelicula, hora, tickets);
- if(retval == tickets){
- printf("Venta realizada satisfactoriamente.\n");
- }else if(retval == 0){
- printf("No se encontró ninguna coincidencia.\n");
- }else if(retval == -1){
- printf("No hay suficientes tickets disponibles.\n");
- }else if(retval == -2){
- printf("Se ha cancelado la venta.\n");
- }else if(retval == -3){
- printf("Huvo un error al realizar la venta. No se pudo actualizar el archivo.\n");
- }
- }else{
- printf("No existe el horario introducido para la pelicula \"%s\" en el cine \"%s\".\n", nombrePelicula, nombreCine);
- }
- }else{
- printf("No existe la pelicula introducida.\n");
- }
- }else{
- printf("No existe el cine introducido.\n");
- }
- fflush(stdin);
- getchar();
- break;
- case 5:
- printf("Introduce el nombre del cine: ");
- scanf("%s", nombreCine);
- if(BuscarCine(nombreCine)){
- system("CLS");
- if(ListarSalasDeCine(nombreCine) > 0){
- retval = EditarSala(nombreCine);
- switch(retval){
- case 0:
- printf("No existe esa sala en este cine.\n");
- break;
- case -3:
- printf("Huvo un error al realizar la venta. No se pudo actualizar el archivo.\n");
- break;
- case 1:
- printf("Edicion de sala exitosa.\n");
- }
- }else{
- printf("No existen salas en este cine.\n");
- }
- }else{
- printf("No existe el cine introducido.\n");
- }
- fflush(stdin);
- getchar();
- break;
- case 6:
- salir = 1;
- break;
- default:
- printf("No existe la opcion elejida. Pulse intro para volver a intentarlo.", nombreCine);
- fflush(stdin);
- getchar();
- }
- }while(!salir);
- return 0;
- }
- //---------------------------------------------------------------------------
- void Menu(void){
- system("CLS");
- printf("\tMENU\n");
- printf("\t====\n\n");
- printf("1-Listar los cines existentes\n");
- printf("2-Crear un cine nuevo\n");
- printf("3-Listar las salas de un cine existente\n");
- printf("4-Vender una entrada\n");
- printf("5-Editar sala\n");
- printf("6-Salir\n\n");
- }
- //---------------------------------------------------------------------------
- int ListarCines(){
- int retval;
- DIR * dir_ptr = NULL;
- struct dirent * dirent_ptr;
- if((dir_ptr = opendir(dir_name)) != NULL){
- while ((dirent_ptr = readdir(dir_ptr)) != NULL) {
- if(strcmp(dirent_ptr->d_name, ".") != 0 && strcmp(dirent_ptr->d_name, "..") != 0)
- printf( "Nombre del cine: %s\n", dirent_ptr->d_name );
- }
- closedir(dir_ptr);
- retval = 0;
- }else{
- printf( "No existe o no se pudo abrir el directorio '%s'\n", dir_name );
- retval = -1;
- }
- return retval;
- }
- //---------------------------------------------------------------------------
- int BuscarCine(char *nombreCine){
- int retval = 0;
- DIR * dir_ptr = NULL;
- struct dirent * dirent_ptr;
- if((dir_ptr = opendir(dir_name)) != NULL){
- while ((dirent_ptr = readdir(dir_ptr)) != NULL) {
- if(strcmp(dirent_ptr->d_name, nombreCine) == 0){
- retval = 1;
- break;
- }
- }
- closedir(dir_ptr);
- }else{
- printf("No existe o no se pudo abrir el directorio \"%s\"\n", dir_name);
- }
- return retval;
- }
- //---------------------------------------------------------------------------
- int ListarSalasDeCine(char *nombreCine){
- FILE *fcine;
- int nSalas = 0, i;
- char path[1024] = "Cines\\";
- strcat(path,nombreCine);
- if((fcine = fopen(path, "r")) != NULL){
- do{
- if(fread(&Cine, sizeof(struct _cine), 1, fcine) == 1){
- printf("\nSala: %i\n", Cine.sala);
- printf("---------\n");
- for(i=0; i<MAXHORARIOS; i++){
- printf("Horario: %s\n", Cine.horario[i].hora);
- printf("Nombre de la pelicula: %s\n", Cine.horario[i].nombrePeli);
- printf("Asientos libres: %i\n\n", Cine.horario[i].asientosLibres);
- }
- nSalas++;
- }
- }while(!feof(fcine));
- fclose(fcine);
- }
- return nSalas;
- }
- //---------------------------------------------------------------------------
- int CrearCine(char *nombreCine){
- FILE *fcine;
- int nSalas;
- char continuar;
- char path[1024] = "Cines\\";
- strcat(path,nombreCine);
- if((fcine = fopen(path, "r")) == NULL){
- nSalas = RellenarFileCine(path);
- }else{
- fclose(fcine);
- printf("El cine con ese nombre ya existe. ¿Desea sobreescribirlo?\n (S/N): ");
- scanf("%c", &continuar);
- continuar = toupper(continuar);
- if(continuar == 'S'){
- remove(path);
- nSalas = RellenarFileCine(path);
- }
- }
- return nSalas;
- }
- //---------------------------------------------------------------------------
- int RellenarFileCine(char *path){
- FILE *fcine;
- int nSalas = 0, i=0;
- char continuar;
- if((fcine = fopen(path, "w")) != NULL){
- do{
- Cine.sala = nSalas;
- nSalas++;
- printf("\nSala: %i\n", i);
- printf("---------\n");
- for(i=0; i<MAXHORARIOS; i++){
- printf("\tHorario: ");
- scanf("%s", &Cine.horario[i].hora);
- printf("\tNombre de la pelicula: ");
- scanf("%s", &Cine.horario[i].nombrePeli);
- printf("\tAsientos: ");
- scanf("%i", &Cine.horario[i].asientosLibres);
- printf("\n");
- }
- if(fwrite(&Cine, sizeof(struct _cine), 1, fcine) == 1){
- printf("Sala guardada satisfactoriamente. ¿Insertar otra sala para este cine? (S/N): ");
- scanf("%c", &continuar);
- continuar = toupper(continuar);
- }else{
- printf("Huvo un error al guardar en el archivo.");
- nSalas--;
- continuar = 'N';
- }
- }while(continuar == 'S');
- fclose(fcine);
- }else{
- printf("No se pudo crear el archivo para este cine.");
- }
- return nSalas;
- }
- //---------------------------------------------------------------------------
- int BuscarPelicula(char *nombreCine, char *nombrePeli, char *hora, int opcion){
- FILE *fcine;
- char path[1024] = "Cines\\";
- int i, retval = 0, abortar = 0;
- strcat(path,nombreCine);
- if((fcine = fopen(path, "r")) != NULL){
- do{
- if(fread(&Cine, sizeof(struct _cine), 1, fcine) == 1){
- for(i=0; i<MAXHORARIOS && abortar != 1; i++){
- switch(opcion){
- case 0:
- if(strcmp(Cine.horario[i].nombrePeli, nombrePeli) == 0){
- printf("\nSala: %i\n", Cine.sala);
- printf("---------\n");
- printf("Horario: %s\n", Cine.horario[i].hora);
- printf("Nombre de la pelicula: %s\n", Cine.horario[i].nombrePeli);
- printf("Asientos libres: %i\n\n", Cine.horario[i].asientosLibres);
- retval = 1;
- }
- break;
- case 1:
- if(strcmp(Cine.horario[i].nombrePeli, nombrePeli) == 0 && strcmp(Cine.horario[i].hora, hora) == 0){
- printf("\nSala: %i\n", Cine.sala);
- printf("---------\n");
- printf("Horario: %s\n", Cine.horario[i].hora);
- printf("Nombre de la pelicula: %s\n", Cine.horario[i].nombrePeli);
- printf("Asientos libres: %i\n\n", Cine.horario[i].asientosLibres);
- retval = 1;
- }
- break;
- default:
- printf("Parametro incorrecto.\n");
- abortar = 1;
- }
- }
- }
- }while(!feof(fcine));
- fclose(fcine);
- }
- return retval;
- }
- //---------------------------------------------------------------------------
- int VentaTickets(char *nombreCine, char *nombrePelicula, char *hora, int tickets){
- int retval = 0, pos, salir = 0;
- FILE *fcine;
- int i;
- char path[1024] = "Cines\\";
- strcat(path,nombreCine);
- if((fcine = fopen(path, "r+")) != NULL){
- do{
- if(fread(&Cine, sizeof(struct _cine), 1, fcine) == 1){
- for(i=0; i<MAXHORARIOS && salir == 0; i++){
- if(strcmp(nombrePelicula, Cine.horario[i].nombrePeli) == 0 && strcmp(hora, Cine.horario[i].hora) == 0){
- if(tickets > Cine.horario[i].asientosLibres){
- salir = 1;
- retval = -1; //No quedan asientos suficientes disponibles
- }else{
- if(Pagar(tickets)){
- Cine.horario[i].asientosLibres -= tickets;
- pos = ftell(fcine) - sizeof(struct _cine);
- fseek(fcine, pos, SEEK_SET);
- if(fwrite(&Cine,sizeof(struct _cine), 1, fcine) == 1){
- retval = tickets; //Venta realizada satisfactoriamente
- }else{
- retval = -3; //No se pudo actualizar el archivo
- }
- }else{
- retval = -2; //Venta cancelada
- }
- salir = 1;
- }
- }
- }
- }
- }while(!feof(fcine) && !salir);
- fclose(fcine);
- }
- return retval;
- }
- //---------------------------------------------------------------------------
- int Pagar(int tickets){
- float ingreso, ingresoTotal = 0;
- int retval = 1, salir = 0;
- printf("Total a pagar: %.2f\n", 1.0 * tickets * PRECIO_TICKET);
- printf("Ingreso (0 para cancelar): ");
- scanf("%f", &ingreso);
- if(ingreso == 0){
- printf("Venta cancelada.\n");
- retval = 0;
- salir = 1;
- }else{
- do{
- ingresoTotal +=ingreso;
- if((tickets * PRECIO_TICKET) - ingresoTotal <= 0){
- printf("Disfrute de sus entradas.\n");
- printf("Su cambio: %i\n", abs(ingresoTotal - tickets * PRECIO_TICKET));
- salir = 1;
- }else{
- printf("Faltan %.2f\n", (tickets * PRECIO_TICKET) - ingresoTotal);
- printf("Completar el ingreso (0 para cancelar): ");
- scanf("%f", &ingreso);
- if(ingreso == 0){
- printf("Venta cancelada.\n");
- printf("Devolucion: %.2f\n", ingresoTotal);
- retval = 0;
- salir = 1;
- }
- }
- }while(!salir);
- }
- return retval;
- }
- //---------------------------------------------------------------------------
- int EditarSala(char *nombreCine){
- int retval = 0, pos, sala, i, salir = 0;
- FILE *fcine;
- char path[1024] = "Cines\\";
- char hora[6];
- strcat(path,nombreCine);
- if((fcine = fopen(path, "r+")) != NULL){
- printf("Indroduce el numero de sala que desea modificar: ");
- scanf("%i", &sala);
- system("CLS");
- do{
- if(fread(&Cine, sizeof(struct _cine), 1, fcine) == 1){
- for(i=0; i<MAXHORARIOS && salir == 0; i++){
- if(Cine.sala == sala){
- for(i=0; i<MAXHORARIOS && salir == 0; i++){
- printf("\nSala: %i\n", Cine.sala);
- printf("---------\n");
- printf("Horario: %s\n", Cine.horario[i].hora);
- printf("Nombre de la pelicula: %s\n", Cine.horario[i].nombrePeli);
- printf("Asientos libres: %i\n\n", Cine.horario[i].asientosLibres);
- retval = 1;
- }
- salir = 1;
- }
- }
- }
- }while(!feof(fcine) && !salir);
- if(retval){
- retval = 0;
- salir = 0;
- printf("Elije el horario a modificar: ");
- scanf("%s",hora);
- for(i=0; i<MAXHORARIOS && salir == 0; i++){
- if(strcmp(hora, Cine.horario[i].hora) == 0){
- system("CLS");
- printf("Nuevo nombre de pelicula: ");
- scanf("%s", Cine.horario[i].nombrePeli);
- printf("Nuevo horario: ");
- scanf("%s", Cine.horario[i].hora);
- printf("Nuevo cupo de asientos libres: ");
- scanf("%i", &Cine.horario[i].asientosLibres);
- pos = ftell(fcine) - sizeof(struct _cine);
- fseek(fcine, pos, SEEK_SET);
- if(fwrite(&Cine,sizeof(struct _cine), 1, fcine) != 1){
- retval = -3; //No se pudo actualizar el archivo
- }
- retval = 1;
- break;
- }
- }
- }
- fclose(fcine);
- }
- return retval;
- }
- //---------------------------------------------------------------------------
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement