Advertisement
Guest User

Untitled

a guest
Jun 24th, 2017
52
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 35.62 KB | None | 0 0
  1. //Librerias
  2. #include <time.h>
  3. #include <stdio.h>
  4. #include <stdlib.h>
  5. #include <conio.h>
  6. #include <string.h>
  7. #include <ctype.h>
  8. #include <dos.h>
  9.  
  10. //Tracking de Mejoras pendientes
  11.  
  12. //ME: Carga de parametros para comparacion contra los resultados de la evacuacion
  13. //GER: revisar que cuando se ingresa la opcion numero 5 dentro del menu del administrador, tira un "opcion incorrecta"
  14. //y vuelve al menu principal. Esto último es bizarro. siendo que la funcion deberia permitir el retorno al menu
  15. //al presionar la tecla 5.    (LISTO)
  16. /*Con MAYOR PRIORIDAD hay que revisar la funcion de evacuacion en ultimo piso del edificio. Una vez que termina la evacua
  17. cion de ese piso, no sigue con la del de abajo!  (LISTO)
  18. Ademas, una vez que termina la simulacion, vuelve al menu principal, cosa que está bien, pero si quiero correr la simulacion
  19. nuevamente, el programa se cuelga. (ENCONTRÉ LA SOLUCIÓN (AL MANEJAR VIA ARCHIVOS, YA ESTARÍA) FALTA APLICARLA) */
  20.  
  21.  
  22. //Definicion de Constantes
  23. #define FILE_USUARIOS "usuarios.dat"
  24. #define FILE_CONFIG "config.dat"
  25.  
  26. //*****Declaración de Estructuras*****
  27.  
  28. //ESTRUCTURAS PARA EL MANEJO DE USUARIOS
  29. typedef struct
  30. {
  31.     char propiedad[30]; //Estructura para verificar la existencia del archivo usuarios
  32.     char valor[30];
  33. } Config;
  34.  
  35. typedef struct
  36. {
  37.     int valido; //Estructura para la validacion del usuario que se esta logueando
  38.     char clave[11];
  39. } Validacion;
  40.  
  41. typedef struct
  42. {
  43.     char nombre[50];
  44.     char clave[11];
  45. }Usuario; //Struct que almacena usuario
  46.  
  47. /* typedef struct
  48. {
  49.     int codigo;
  50.     long posicion;
  51. }Indice; //Revisar*/
  52.  
  53. //ESTRUCTURAS PARA EL MANEJO DE LA SIMULACIÓN
  54. typedef struct
  55. {
  56.     int     c_pisos;  //cantidad de pisos.
  57.     int     h_piso;   //altura de un piso.
  58.    float c_escal;  //aqui se autocalculará la cantidad de escalones, a sabiendas que la altura reglamentaria para los mismos es 18 cm.
  59.    int  m2xpiso;  //metros cuadrados de un piso (se utilizara para medir la cantidad de humo soportable). //PARA TERMINAR.
  60.    int  c_per_x_piso[8];//Hoy dia es hardcode la cantidad de pisos. //Ver si se puede colocar en forma dinamica
  61. }edificio;  // Esta estructura se guarda en el archivo. Los unicos que corren la simulacion son los ADMINISTRADORES, no los usuarios finales.
  62.  
  63. typedef struct
  64. {
  65.     int fire_alarm;  //cant de segs a los que se dará la alarma de incendio.
  66.    int evac_1ro;    //cant de segs a los que comenzara la evacuacion del piso. // Del primer piso a evacuar.
  67.    int duracc;      //cant de segs que durara la simulacion.
  68. }tsimulac;
  69.  
  70. typedef struct
  71. {
  72.     int fc_pisos;
  73.    int fc_per_x_piso[8];
  74. }f_evac;  //  Estructura auxiliar. No esta dentro del codigo. REVISAR
  75.  
  76. typedef struct        //GER: AGREGAR!!!
  77. {
  78.    //Campos de la estructura edificio:
  79.     int c_pisos;
  80.    int h_piso;
  81.    float c_escal;
  82.    int m2xpiso;
  83.    int c_per_x_piso[8];
  84.    //Campos de la estructura tsimulac:
  85.    int fire_alarm;
  86.    int evac_1ro;
  87.    int duracc;
  88. }parametros;
  89.  
  90. typedef struct
  91. {
  92.     time_t  t1;
  93.    time_t   t2;
  94.    time_t   taux;
  95.    double   diferencia;
  96.    int      minutos;
  97.    int      segundos;
  98.    int      temp;
  99. }ejecsimul; //todas estas variables son las necesarias para el avance del tiempo en la simulacion.ME: es como un reloj interno para la simulacion.
  100.  
  101. //*****PROTOTIPOS DE FUNCIONES*****
  102.  
  103. //*****Funciones Login*****
  104. // Funcion Helper
  105. int             ExisteArchivo(char* FileName) ;
  106.  
  107. // Archivo de configuracion
  108. Config      LeerPropiedad(char* propiedad); //Verificar dado que la funcion no esta en el codigo
  109. void            EscribirPropiedad(char* propiedad, char* valor);
  110. void ruiditos(int);
  111.  
  112. //*****Funciones Validaciones de Usuario*****
  113. void            AgregarUsuario(void);
  114. void            alta_usuario(void);
  115. int             RealizarValidacion(char* usu);
  116. void            ingreso_de_clave(void);
  117. char            menu(void);
  118. Validacion  validar_usuario(char*);
  119.  
  120. //*****Funciones Menu*****
  121. int             menu_principal(void);
  122. int             menu_admin1(void);
  123. int             menu_simulacion(void);
  124.  
  125. //*****Funciones de Carga de Datos Del Administrador*****
  126. void            carga_edif(edificio*);
  127. void            carga_tiempos(tsimulac*);
  128.  
  129. //*****Funcion para grabar los parametros ingresados por el administrador en el HD*****
  130. void AgregarParametros(edificio*, tsimulac*);  //AGREGAR!
  131.  
  132. /* GER: PENDIENTE!! MUY IMPORTANTE!!!
  133. //***Funciones de Registro de los Parametros Igresados
  134. void ModificarParametros(void);   //AGREGAR!
  135. long ObtenerPosicionParametro(int);  //AGREGAR!
  136.  
  137. //*****Funciones de Progreso de la Simulacion*****
  138. void            correr_simulacion(tsimulac *,ejecsimul *);
  139. void            evacuacion(edificio* /*,tsimulac *ts*/); //Ger: Le agregué los sets de tiempos de puntos clave en la simulación, definidos por el admin.
  140.  
  141. //*****Funcion para Revisar los Parámetros de la Simulación*****
  142. void            ver_parametros(edificio*, tsimulac*);
  143.  
  144. //*****Funciones de Consulta*****
  145. void            consulta_usuarios(void);
  146.  
  147. //*****MAIN Inicio*****
  148. main()
  149. {
  150.     tsimulac    ts;
  151.    edificio     edif;
  152.    ejecsimul    cronometro;
  153.    int          op, opsubmenu;  //variables que almacenan las selecciones en los menues.
  154.    int          intentosFallidos=0;
  155.    char                 usu[11];
  156.  
  157.     do
  158.     {
  159.         if (RealizarValidacion(usu) == 0)
  160.             break;
  161.         else
  162.                 {
  163.                    FILE  * flog;
  164.                    struct tm *tlocal;
  165.                    time_t tiempo;
  166.                    char fechahora[64];
  167.  
  168.            intentosFallidos++;
  169.  
  170.                tiempo = time(0);
  171.                    tlocal = localtime(&tiempo);
  172.                    strftime(fechahora,64,"%c",tlocal);
  173.  
  174.                    flog = fopen( "logins.txt", "a+" );
  175.                    fprintf( flog, "%s %s", usu, fechahora );
  176.                    fclose(flog);
  177.                 }
  178.  
  179.         if (intentosFallidos == 3) exit(0);
  180.     }   while (intentosFallidos < 3);
  181.  
  182.     if(ExisteArchivo(FILE_CONFIG)==0)
  183.     {
  184.         EscribirPropiedad("codclien","1");
  185.         EscribirPropiedad("codpeli","1");
  186.     }
  187.    clrscr();
  188.  
  189.    do
  190.    {
  191.     op=menu_principal();
  192.  
  193.       switch(op)
  194.       {
  195.         case 1:
  196.          do
  197.          {
  198.             opsubmenu=menu_admin1();
  199.             if (opsubmenu == 1){ carga_edif(&edif); clrscr();}
  200.             if (opsubmenu == 2){ carga_tiempos(&ts);  clrscr();}
  201.             if (opsubmenu == 3){ alta_usuario(); clrscr();}
  202.             if (opsubmenu == 4){ consulta_usuarios(); clrscr();}
  203.  
  204.  
  205.  
  206.          }while(opsubmenu!=5);
  207.  
  208.          break;
  209.  
  210.          case 2:
  211.  
  212.          do
  213.          {
  214.             opsubmenu=menu_simulacion();
  215.  
  216.                 if (opsubmenu == 1) correr_simulacion(&ts,&cronometro);
  217.                clrscr();
  218.  
  219.             if (opsubmenu == 2) evacuacion(&edif/*,&ts*/);
  220.             clrscr();
  221.  
  222.             if (opsubmenu == 3) ver_parametros(&edif,&ts);
  223.  
  224.             //La funcion 2 sera la muestra de datos estadisticos.
  225.                clrscr();
  226.  
  227.          }while(opsubmenu!=4);
  228.  
  229.          break;
  230.       }
  231.    }while(op < 3);
  232.  
  233.    return 0;
  234. }
  235. //*****MAIN Fin*****
  236.  
  237. // INICIO - Manejo de Claves
  238.  
  239. void EscribirPropiedad(char* propiedad, char* valor)    //Propiedad es un flag para corroborar si existe el archivo. Si existe dejo una marca para no
  240.                                                                           //tener que hacer el control nuevamente
  241. {
  242.     FILE    *p1;
  243.     int existe,cant;
  244.     long posicion;
  245.     Config aux,*paux;
  246.  
  247.     paux = &aux;
  248.  
  249.     // Si el archivo no existe, lo crea
  250.     if (ExisteArchivo(FILE_CONFIG)==0)
  251.     {
  252.         if((p1 = fopen(FILE_CONFIG,"w+b")) == NULL)
  253.         {
  254.             gotoxy(35,35);//Pie de pagina estandar para el comunicado de errores al usuario
  255.         printf("Error al generar el archivo de configuracion. Presione una tecla para continuar.");
  256.             getch();
  257.             return;
  258.         }
  259.         else
  260.         {
  261.             fclose(p1);
  262.         }
  263.     }
  264.  
  265.     // Lo abro en modo lectura primero para buscar si la propiedad existe.
  266.     if((p1 = fopen(FILE_CONFIG,"r+b")) == NULL)
  267.     {
  268.        gotoxy(35,35);//Pie de pagina estandar para el comunicado de errores al usuario
  269.         printf("Error al abrir el archivo. Presione una tecla para continuar.");
  270.         getch();
  271.         return;
  272.     }
  273.  
  274.     for( ; ; )
  275.     {
  276.         posicion = ftell(p1);
  277.         cant = fread(&aux,sizeof(Config),1,p1);
  278.  
  279.         if(cant!=1)
  280.         {
  281.             if(feof(p1)!=0)
  282.             {
  283.                 existe = 0;
  284.                 break;
  285.             }
  286.             else
  287.             {
  288.                 clreol();
  289.                gotoxy(35,35);//Pie de pagina estandar para el comunicado de errores al usuario
  290.                 printf("\n Error al leer el archivo. Presione una Tecla para continuar.");
  291.                 getch();
  292.                 return;
  293.             }
  294.         }
  295.         else
  296.         {
  297.             if(strcmpi(paux->propiedad,propiedad)==0)
  298.             {
  299.                 existe = 1;
  300.                 break;
  301.             }
  302.         }
  303.     }
  304.  
  305.     strcpy(paux->propiedad,propiedad);
  306.     strcpy(paux->valor,valor);
  307.  
  308.     // Se posiciona el puntero o abre el archivo en modo Append segun corresponda
  309.     if (existe == 1)
  310.     {
  311.         fseek(p1,posicion,SEEK_SET);
  312.     }
  313.     else
  314.     {
  315.         fclose(p1);
  316.         if((p1 = fopen(FILE_CONFIG,"a+b")) == NULL)
  317.         {
  318.            gotoxy(35,35);//Pie de pagina estandar para el comunicado de errores al usuario
  319.             printf("Error al abrir el archivo. Presione una Tecla para continuar.");
  320.             getch();
  321.             return;
  322.         }
  323.     }
  324.     // Escribimos el dato
  325.     if (fwrite(&aux,sizeof(Config),1,p1)!=1)
  326.     {
  327.        gotoxy(35,35);//Pie de pagina estandar para el comunicado de errores al usuario
  328.         printf("Error de escritura en el archivo. Presione una Tecla para continuar.");
  329.         getch();
  330.         return;
  331.     }
  332.     fclose(p1);
  333. }
  334.  
  335.  
  336. int ExisteArchivo(char* FileName)
  337. {
  338.   FILE *EXISTEARCHIVO;
  339.  
  340.   if ((EXISTEARCHIVO=fopen(FileName,"rb"))==NULL)
  341.   {
  342.         return 0;
  343.   }
  344.   else
  345.   {
  346.         fclose(EXISTEARCHIVO);
  347.         return 1;
  348.   }
  349. }
  350.  
  351. int RealizarValidacion( char* usuario ) //Valida Login
  352. {
  353.    // 0 Usuario OK, 1 - Clave Incorrecta - 1 Usuario Inexistente
  354.     char pass[11],car;
  355.     char usu[11];
  356.     int i=0;
  357.     Validacion x;
  358.  
  359.     clrscr();
  360.     gotoxy(30,16);
  361.  
  362.    printf("Usuario>");
  363.  
  364.     fflush(stdin);
  365.     gets(usu);
  366.  
  367.     x=validar_usuario(usu);
  368.  
  369.     if(x.valido==1)
  370.     {
  371.        gotoxy(30,18);
  372.     printf("Clave>");
  373.  
  374.         while((car=(char)getch())!='\r'&& i <11 )
  375.         {
  376.             pass[i++]=car;
  377.             printf("%c",'*');
  378.         }
  379.  
  380.         pass[i]=NULL;
  381.  
  382.         if(strcmp(x.clave,pass)==0)
  383.             return 0;
  384.         else
  385.             return 1;
  386.     }
  387.     else
  388.         return -1;
  389. }  
  390.  
  391. void alta_usuario(void) //Las altas de usuario las da el ADMIN.
  392. {
  393.     FILE *ptr;
  394.     char aux[50],cla1[11],cla2[11], car='\0';
  395.     int i=0, j=0;
  396.     Usuario reg;
  397.    //Inicializacion de vectores
  398.  
  399.    aux[50] =NULL;
  400.    cla1[0]=NULL;
  401.    cla2[0]=NULL;
  402.  
  403.  
  404.     ptr=fopen(FILE_USUARIOS,"a+b");
  405.  
  406.     clrscr();
  407.    printf("\n =----------------------------------=");
  408.    printf("\n  INGRESO DE DATOS DE NUEVO USUARIO");
  409.    printf("\n =----------------------------------=");
  410.    gotoxy(35,25);
  411.    printf("\n =----------------------------------------------------------=");
  412.    printf("\n Notas");
  413.    printf("\n");
  414.    printf("\n - Cantidad maxima de caracteres para la clave: 9");
  415.    printf("\n - El nombre de usuario reconoce mayusculas y minusculas.");
  416.    printf("\n =----------------------------------------------------------=");
  417.    gotoxy(10,10);
  418.     printf("\n Ingrese el Nombre y Apellido: ");
  419.  
  420.     fflush(stdin);
  421.  
  422.     gets(aux);
  423.  
  424.     strcpy(reg.nombre,aux);
  425.  
  426.     printf("\n Ingrese clave : ");
  427.  
  428.     if ((car=(char)getch())=='\r')
  429.    {
  430.        gotoxy(35,35);//Pie de pagina estandar para el comunicado de errores al usuario
  431.     printf("\n\n Ingrese la clave correctamente! ");
  432.         getch();
  433.    }
  434.    else
  435.     {
  436.         cla1[i++]=car;
  437.         printf("%c",'*');
  438.  
  439.     while((car=(char)getch())!='\r'&& i <10)
  440.         {
  441.  
  442.             cla1[i++]=car;
  443.             printf("%c",'*');
  444.       }
  445.  
  446.        cla1[i]='\0';
  447.  
  448.         printf("\n\n Confirme clave: ");
  449.  
  450.       if ((car=(char)getch())=='\r')
  451.     {
  452.            gotoxy(35,35);//Pie de pagina estandar para el comunicado de errores al usuario
  453.         printf("\n\n Ingrese la clave correctamente! ");
  454.             getch();
  455.       }
  456.  
  457.       else
  458.  
  459.       {
  460.         cla2[j++]=car;
  461.             printf("%c",'*');
  462.  
  463.          while((car=(char)getch())!='\r'&& i <10)
  464.             {
  465.                 cla2[j++]=car;
  466.                 printf("%c",'*');
  467.  
  468.             }
  469.          cla2[j]='\0';
  470.        }
  471.     }
  472.  
  473.         if(strcmp(cla1,cla2)==0)
  474.         {
  475.             strcpy(reg.clave,cla1);
  476.             fwrite(&reg,sizeof(reg),1,ptr);
  477.            gotoxy(35,35);//Pie de pagina estandar para el comunicado de errores al usuario
  478.         printf ("\n\n\n\n Usuario creado exitosamente. Presione una tecla para continuar. ");
  479.         }
  480.       else
  481.       {
  482.            gotoxy(35,35);//Pie de pagina estandar para el comunicado de errores al usuario
  483.         printf ("\n\n\n\n Las claves no coinciden. Por favor ingrese los datos nuevamente. ");
  484.  
  485.       }
  486.  
  487.       getch();
  488.        clrscr();
  489.         fclose(ptr);
  490. }
  491.  
  492. Validacion validar_usuario(char*usu)
  493. {
  494.     FILE *ptr;
  495.     Usuario reg;
  496.     Validacion reg1;
  497.     int x=0;
  498.  
  499.     if (strcmpi(usu,"admin") == 0)
  500.     {
  501.         reg1.valido = 1;
  502.         strcpy(reg1.clave,"admin123");
  503.     }
  504.     else //Sino es admin voy al archivo de claves para validar usuario
  505.     {
  506.         ptr=fopen(FILE_USUARIOS,"rb");
  507.  
  508.         fread(&reg,sizeof(reg),1,ptr);
  509.  
  510.         while(!feof(ptr))
  511.         {
  512.  
  513.             if(strcmp(reg.nombre,usu)==0)
  514.             {
  515.                 strcpy(reg1.clave,reg.clave);
  516.                 x=1;
  517.                 break;
  518.             }
  519.             fread(&reg,sizeof(reg),1,ptr);
  520.         }
  521.  
  522.         reg1.valido=x;
  523.         fclose(ptr);
  524.     }
  525.     return reg1;
  526. }
  527. // FIN - Manejo de Claves
  528.  
  529.  
  530. // INICIO - Funciones de Carga de Datos del Administrador -
  531.  
  532. void carga_edif(edificio *edif)
  533. {
  534.    int i;
  535.  
  536.     clrscr();
  537.  
  538.    printf("\n\n- PARAMETROS DEL EDIFICIO -");
  539.    printf("\n\nIngrese la cantidad de pisos (menor a 8): ");
  540.    scanf("%d",&edif->c_pisos);
  541.    printf("\n\nIngrese la altura de un piso en metros: ");
  542.    scanf("%d",&edif->h_piso);
  543.    edif->c_escal=((edif->h_piso)/(0.18));
  544.    printf("\n\nLa cantidad de escalones entre pisos ha sido calculada automaticamente: %.f",edif->c_escal);
  545.    printf("\n\nIngrese la superficie en metros cuadrados de un piso: "); //Esto sera para el calculo de la densidad maxima a tolerar de humo
  546.    scanf("%d",&edif->m2xpiso);
  547.    printf("\n\nPersonas por piso");
  548.  
  549.    for(i=0;i<edif->c_pisos;i++)
  550.    {
  551.     printf("\nCantidad de personas en el piso %d: ",i+1);
  552.       scanf("%d",&edif->c_per_x_piso[i]);
  553.    }
  554.  
  555.    gotoxy(35,35);//Pie de pagina estandar para el comunicado de errores al usuario
  556.    printf("\n\nCarga de parametros finalizada. Presione una tecla.");
  557.  
  558.    getch();
  559.    clrscr();
  560. }
  561.  
  562. void carga_tiempos(tsimulac *ts)
  563. {
  564.     clrscr();
  565.    printf("\n\n-PARAMETROS DE TIEMPO-");
  566.    printf("\n\nIngrese la cantidad de segundos a los que se \ndara la alarma de incendio: ");
  567.    scanf("%d",&ts->fire_alarm);
  568.    printf("\n\nIngrese la cantidad de segundos a los que comenzara \nla evacuacion de un piso desde que se da la alarma: ");
  569.    scanf("%d",&ts->evac_1ro);
  570.    printf("\n\nIngrese la cantidad de segundos que durara la simulacion: ");
  571.    scanf("%d",&ts->duracc);
  572.    printf("\n\nCarga de parametros finalizada. Presione una tecla.");
  573.    getch();
  574.    clrscr();
  575. }
  576.  
  577. // FIN - Funciones de Carga de Datos del Administrador -
  578.  
  579. // INICIO - FUNCIONES DE MENU -  (Impresion de menues)
  580.  
  581. int menu_principal(void)
  582. {
  583.     int op;
  584.     do
  585.     {
  586.         clrscr();
  587.         gotoxy(30,16);
  588.         printf("- ME QUEMO-SYSTEM -");
  589.         gotoxy(30,20);
  590.         printf("1 - Menu Administrador");  //Solo para administradores
  591.       gotoxy(30,22);
  592.         printf("2 - Menu Simulacion");   //Para usuarios finales y administradores
  593.       gotoxy(30,24);
  594.         printf("3 - Salir");
  595.       gotoxy(30,26);
  596.       printf("Ingrese opcion: ");
  597.       scanf("%d",&op);
  598.  
  599.     if(op<1 || op>3)
  600.       {
  601.         gotoxy(35,35);//Pie de pagina estandar para el comunicado de errores al usuario
  602.             printf ("Opcion invalida. Presione una tecla para continuar.");
  603.          getch();
  604.       }
  605.  
  606.    }while(op<1||op>3);
  607.     return op;
  608. }
  609.  
  610. int menu_admin1(void)
  611. {
  612.     int op;
  613.     do
  614.     {
  615.         clrscr();
  616.         gotoxy(30,16);
  617.         printf("- MENU ADMINISTRADOR -");
  618.         gotoxy(30,18);
  619.         printf("1 - Carga de parametros del edificio");
  620.       gotoxy(30,20);
  621.         printf("2 - Carga de tiempos de la simulacion");
  622.       gotoxy(30,22);
  623.         printf("3 - Crear usuario");
  624.       gotoxy(30,24);
  625.         printf("4 - Consultar usuario (Listado)");
  626.       gotoxy(30,26);
  627.         printf("5 - Volver al Menu Principal");
  628.       gotoxy(30,28);
  629.       printf("Ingrese opcion: ");
  630.       scanf("%d",&op);
  631.  
  632.       if(op<1 || op>5)
  633.       {
  634.         printf ("Opcion invalida. Presione una tecla para continuar.");
  635.          getch();
  636.       }
  637.    }while(op<1||op>6);
  638.     return op;
  639. }
  640.  
  641. int menu_simulacion(void)
  642. {
  643.     int op;
  644.    do
  645.    {
  646.     clrscr();
  647.       gotoxy(30,16);
  648.       printf("- MENU SIMULACION -");
  649.       gotoxy(30,20);
  650.       printf("1 - Iniciar simulacion en tiempo real");
  651.       gotoxy(30,22);
  652.       printf("2 - Iniciar simulacion con estadisticas y avisos");
  653.       gotoxy(30,24);
  654.       printf("3 - Ver Parametros Seteados");
  655.       gotoxy(30,26);
  656.       printf("4 - Volver al Menu Principal");
  657.       gotoxy(30,28);
  658.       printf("Ingrese opcion: ");
  659.       scanf("%d",&op);
  660.  
  661.          if(op<1 || op>5)
  662.           {
  663.                gotoxy(35,35);//Pie de pagina estandar para el comunicado de errores al usuario
  664.             printf ("\n\n Opcion invalida. Presione una tecla para continuar.");
  665.             getch();
  666.        }
  667.  
  668.    }while(op<1||op>5);
  669.    return op;
  670. }
  671.  
  672. // FIN - FUNCIONES DE MENU -
  673.  
  674. // INICIO - Funciones de Progreso de la Simulacion -
  675.  
  676. void correr_simulacion(tsimulac *ts, ejecsimul *cronometro)
  677. {
  678.     clrscr();
  679.    printf("\n\nComienzo de la simulacion");
  680.    gotoxy(35,35);//Pie de pagina estandar para el comunicado de errores al usuario
  681.    printf("\nPresione una tecla.");
  682.    getch();
  683.  
  684.    cronometro->segundos=0;
  685.    cronometro->t1=time(NULL); //Obtengo tiempo 1
  686.  
  687.    while(cronometro->diferencia < ts->duracc)
  688.    {
  689.     cronometro->t2=time(NULL); //Obtengo tiempo 2
  690.       cronometro->diferencia=difftime(cronometro->t2,cronometro->t1); //difftime me devuelve un double
  691.       cronometro->minutos=cronometro->diferencia / 60.0;
  692.       cronometro->segundos=cronometro->diferencia - cronometro->minutos * 60;
  693.  
  694.       if(cronometro->temp != cronometro->segundos) //Ha transcurrido un segundo
  695.       {
  696.         cronometro->temp=cronometro->segundos; //Guarda el valor previo
  697.  
  698.          if(cronometro->segundos==ts->fire_alarm && cronometro->minutos==0)
  699.         {
  700.             clrscr();
  701.  
  702.             printf("\n%02d:%02d\n",cronometro->minutos,cronometro->segundos);
  703.  
  704.             printf("\nFUEGO EN EL EDIFICIO!!");
  705.  
  706.                gotoxy(35,35);//Pie de pagina estandar para el comunicado de errores al usuario
  707.  
  708.             printf("\nPresione una tecla para continuar la simulacion.");
  709.  
  710.             getch();
  711.  
  712.             cronometro->taux=time(NULL);
  713.  
  714.             cronometro->t1+=difftime(cronometro->taux,cronometro->t2);
  715.          }
  716.          if(cronometro->segundos==(ts->fire_alarm + ts->evac_1ro))
  717.          {
  718.             printf("\nEl piso 'x' esta listo para comenzar la evacuacion ");  //Aca deberia figurar el piso que seleccione como comienzo de la evacuacion.
  719.  
  720.                gotoxy(35,35);//Pie de pagina estandar para el comunicado de errores al usuario
  721.  
  722.             printf("\nPresione una tecla para continuar la simulacion ");
  723.  
  724.             getch();
  725.  
  726.             cronometro->taux=time(NULL);
  727.  
  728.             cronometro->t1+=difftime(cronometro->taux,cronometro->t2);
  729.          }
  730.          clrscr();
  731.          printf("\n%02d:%02d\n",cronometro->minutos,cronometro->segundos);
  732.       }
  733.    }
  734.     gotoxy(35,35);//Pie de pagina estandar para el comunicado de errores al usuario
  735.    printf("\n\nSimulacion realizada con exito!");
  736.    printf("\n\nPresione una tecla para volver al Menu Principal.");
  737.    getch();
  738. }
  739.  
  740. void ver_parametros(edificio *edif, tsimulac *ts)        //GER: REEMPLAZAR!!!!
  741. {
  742.    int i,aux;
  743.    i=aux=0;
  744.  
  745.    clrscr();
  746.  
  747.    gotoxy(10,5);
  748.     printf("-Parametros actuales con los que corre la simulacion-");
  749.    gotoxy(10,6);
  750.    printf("-----------------------------------------------------");
  751.  
  752.    gotoxy(10,8);
  753.    printf("-Parametros del edificio-");
  754.    gotoxy(10,9);
  755.    printf("-------------------------");
  756.    gotoxy(10,10);
  757.    printf("Cantidad de Pisos: %d",edif->c_pisos);
  758.    gotoxy(10,11);
  759.    printf("Altura de los pisos: %d",edif->h_piso);
  760.    gotoxy(10,12);
  761.    printf("Cantidad de escalones calculada: %.f",edif->c_escal);
  762.    gotoxy(10,13);
  763.    printf("Metros cuadrados de un piso: %d",edif->m2xpiso);
  764.    gotoxy(10,14);
  765.    printf("Personas por piso: ");
  766.    for(i=0;i<edif->c_pisos;i++)
  767.    {
  768.     printf("%d ",edif->c_per_x_piso[i]);
  769.       aux+=(edif->c_per_x_piso[i]);
  770.    }
  771.    gotoxy(10,15);
  772.    printf("Total de personal en el edificio: %d",aux);
  773.    gotoxy(10,17);
  774.    printf("-Parametros del correr del tiempo-");
  775.    gotoxy(10,18);
  776.    printf("----------------------------------");
  777.    gotoxy(10,20);
  778.    printf("Cant de segs a los que se dara la alarma de incendio: %d",ts->fire_alarm);
  779.    gotoxy(10,22);
  780.    printf("Cant de segs a los que comenzara la evacuacion del piso seleccionado: %d",ts->evac_1ro);
  781.    gotoxy(10,24);
  782.    printf("Cant de segs que durara la simulacion: %d",ts->duracc);
  783.    gotoxy(10,26);
  784.    printf("Presione una tecla para volver al menu anterior ");
  785.    getch();
  786. }
  787.  
  788. void evacuacion(edificio *edif, tsimulac *ts)        //GER: REEMPLAZAR!!
  789. {
  790.    //ESTADO ACTUAL:
  791.    //Función de evacuación corriendo. (Ger: está hardcodeada en 7. Implementación de archivos PENDIENTE!)
  792.  
  793.    int pisos[7]; //A este array le incorporo los datos de la carga inicial de parametros.
  794.    int acumul[7]={0}; //Este array acumulará la cantidad de personas en descenso por tramo de escalera.
  795.    int evacuados[7]={0}; //Este array se usará como flag para identificar a los pisos ya evacuados.
  796.    int primero;
  797.    int max=7;
  798.    int cpisos=edif->c_pisos;
  799.    int cescalxp=edif->c_escal; //Levanto la cantidad de escalones por piso, de acuerdo a lo seteado por el admin.
  800.    int i,j,k,m,n,o,p,q;
  801.    int aux, aux2, aux3;
  802.    int cantescal=0;
  803.    int cantidad=0;
  804.    int *escal;
  805.    int cuentasegs=0; //Este acumulador me permitira medir posibles riesgos durante el transcurso de la simulación. Además de permitirme efectuar los correspondientes reportes.
  806.  
  807.    //Calculo la cantidad de personas que puede haber descendiendo en la escalera.
  808.    cantidad=(max*(cescalxp/2));
  809.  
  810.    clrscr();
  811.    printf("\nControl: ");
  812.    printf("\nCantidad de posiciones a descender: %d",cantidad);
  813.    getch();
  814.    clrscr();
  815.  
  816.    if((escal=(int*)malloc(cantidad))==NULL) //Esta asignación dinámica me parece que es cualquier cosa! Revisarla. Pero por algún motivo, funciona :S
  817.    {
  818.       printf("\nNo hay memoria suficiente para alojar el buffer");
  819.       exit(1);
  820.    }
  821.  
  822.  
  823.    //Inicio todas las escaleras con cero personas en ellas.
  824.    for(i=0;i<cantidad;i++)
  825.    {
  826.       //clrscr();
  827.       //printf("\nEscal %d: %d",i,escal[i]);
  828.     escal[i]=0;
  829.       //printf("\nEscal %d: %d",i,escal[i]);
  830.    }
  831.  
  832.    //Inicio el acumulador de personas en las escaleras con cero.
  833.    for(i=0;i<7;i++)
  834.    {
  835.       //clrscr();
  836.       //printf("\nEscal %d: %d",i,escal[i]);
  837.     acumul[i]=0;
  838.       //printf("\nEscal %d: %d",i,escal[i]);
  839.    }
  840.  
  841.  
  842.    //Levanto la cantidad de personas asignada durante la carga de parámetros.
  843.    pisos[0]=0; // Defino que en planta baja no va a haber nadie...
  844.    for(i=0;i<7;i++)
  845.    {
  846.       pisos[i+1]=edif->c_per_x_piso[i];
  847.    }
  848.    clrscr();
  849.  
  850.  
  851.    do
  852.    {
  853.     printf("\nIngrese el numero de piso donde se iniciara la simulacion de incendio: ");
  854.     scanf("%d",&primero);
  855.    }while(primero<0 && primero>7);
  856.  
  857.    //Este método de evacuación funciona!!
  858.     aux=0;
  859.     aux2=0;
  860.       do
  861.       {
  862.          //Cuando comienza la evacuación, resto una persona y la hago descender una posición en la escalera.
  863.          if(aux==0)
  864.          {
  865.             pisos[primero]--;
  866.             escal[((primero)*(cescalxp/2))-1]++;
  867.          }
  868.          clrscr();
  869.  
  870.          //FUNCION DE DESPLAZAMIENTO DE LAS PERSONAS EN LA ESCALERA.-
  871.  
  872.         if(aux>0)
  873.          {
  874.             for(i=0;i<7;i++)
  875.             {
  876.                for(j=0;j<(cescalxp/2);j++)    //aca borre un -1 , que me parece que es totalmente correcto...
  877.                 {
  878.                   aux2=escal[((i*(cescalxp/2))+j)];    //aca borre un +1
  879.                   escal[((i*(cescalxp/2))+j)-1]=+aux2;
  880.                 escal[((i*(cescalxp/2))+j)]-aux2;
  881.                }
  882.             }
  883.             //Una vez que las personas se desplazaron, evacúo al siguiente.
  884.             if(pisos[primero]>0)
  885.             {
  886.                 pisos[primero]--;
  887.                 escal[((primero)*(cescalxp/2))-1]++;
  888.             }
  889.  
  890.             //Controlo si ya termino de evacuar el 1er piso. En ese caso, sigo con el inmediatamente superior.
  891.             //Mientras no sea la azotea, claro esta, para lo cual tambien hago ese control.
  892.  
  893.             if((primero < cpisos) && ((pisos[primero])==0) && (pisos[primero+1]>0))
  894.             {
  895.                if(evacuados[primero]==0)
  896.                {
  897.                 printf("\nPiso %d sin personal. Comenzando la evacuacion del piso %d.\n",primero,primero+1);
  898.                   printf("\nCiclos transcurridos: %d\n",cuentasegs);
  899.                   evacuados[primero]++;
  900.                }
  901.                 pisos[(primero+1)]--;
  902.                 escal[((primero+1)*(cescalxp/2))-1]++;
  903.             }
  904.  
  905.             //Ahora hago lo mismo, pero para el piso inferior al primero que se evacuo. Si no es planta baja.
  906.  
  907.             if((primero < cpisos) && (primero > 1) && ((pisos[primero])==0) && (pisos[primero+1]==0) && (pisos[primero-1]>0))
  908.             {
  909.                if(evacuados[primero]>0)
  910.                {
  911.                 printf("\nPiso %d sin personal. Comenzando la evacuacion del piso %d.\n",primero+1,primero-1);
  912.                   printf("\nCiclos transcurridos: %d\n",cuentasegs);
  913.                   evacuados[primero]++;
  914.                }
  915.                 pisos[(primero-1)]--;
  916.                 escal[((primero-1)*(cescalxp/2))-1]++;
  917.             }
  918.          }
  919.  
  920.          //Acumulo la cantidad de ciclos transcurridos.-
  921.          cuentasegs++;
  922.  
  923.          //FUNCION DE ACUMULADOR POR TRAMOS DE ESCALERA.-
  924.  
  925.          for(k=0;k<7;k++)  //GER: ESTE 7 ESTA SUPER HARDCODEADO. REVISARLO!!
  926.         {
  927.             aux3=acumul[k];
  928.             acumul[k]=acumul[k]-aux3;
  929.             for(m=0;m<((cescalxp/2));m++)
  930.             {
  931.                 acumul[k]=acumul[k]+escal[((k*(cescalxp/2))+m)];
  932.                if(acumul[k] > (cescalxp/2))
  933.                 printf("\nEn el piso %d se predice un amontonamiento de personal en evacuacion no recomendado",k); //GER: Esto lo agregue hoy.
  934.             }
  935.  
  936.             //printf("\nacumul i%d : %d",k,acumul[k]);
  937.         }
  938.  
  939.          //En este ciclo for acumulo la cantidad de personas que hay en evacuación en las escaleras.
  940.  
  941.          //FUNCION DE IMPRESION
  942.          for(q=cpisos;q>(-1);q--)
  943.          {
  944.             printf("\n   --------   //  %d   //",acumul[q]);
  945.             printf("\nP%d | %d   |   //      //",q,pisos[q]);
  946.             printf("\n   --------   //      //");
  947.          }
  948.  
  949.          cantescal=0;
  950.          //Lo reseteo cada vez porque en algún momento debe dar cero (esa es mi condición para terminar con el ciclo principal)
  951.          for(p=0;p<7;p++)
  952.          {
  953.             cantescal=cantescal+acumul[p];
  954.          }
  955.  
  956.          /*Ger: A Desarrollar:
  957.                  - Corregir el desplazamiento por las escaleras y la representación gráfica. LISTO!
  958.                 - Habría que permitir una comparación entre el estado de la evacuación y el momento en que llegarían
  959.                   los bomberos. PENDIENTE.
  960.                   (De acuerdo a las noticias leidas, estos arriban entre 4 y 10 minutos después del llamado.)
  961.                 - Guardar y notificar el momento en que se evacúa el 1er piso (utilizando el nuevo "acumulador
  962.                   de segundos" y un auxiliar). LISTO!
  963.                 - Precisar el tiempo que toma el control efectivo de todos el personal del primer piso evacuado
  964.                   y la consecuente notificación al lider de evacuación del piso inmediatamente superior.
  965.                   Luego de ello, comenzaría la evacuación de este piso. LISTO!
  966.                   Este punto, por supuesto que hay que setearlo en la carga de parametros. COMPARACION PENDIENTE
  967.                 - Lo mismo para el piso de abajo. Siempre y cuando, no sea la planta baja. LISTO! (la 1er parte)
  968.                 - Ver por qué no vuelve al menú principal. LISTO!
  969.         */
  970.  
  971.  
  972.         //Incremento este auxiliar. Es mi punto de corte del while que simula la evacuacion.
  973.          aux++;
  974.  
  975.          getch();
  976.          clrscr();
  977.       }while(cantescal!=0); //A esta condición va a haber que agregarle que el acumulador de la escalera esté totalmente en CERO.
  978.      //GER: Listo, esa funcionalidad ya está agregada.
  979.  
  980.      printf("\nSALIO!!");
  981.  
  982.      getch();
  983. }
  984.  
  985.  
  986. // FIN - Funciones de Progreso de la Simulacion -
  987.  
  988. void consulta_usuarios()         //Agregue el prototipo de esta funciòn
  989. {
  990.     FILE *p;
  991.    Usuario dato;
  992.  
  993.    p = fopen (FILE_USUARIOS, "rb+");
  994.  
  995.    if(p == NULL)
  996.    {
  997.     printf("Error al abrir el archivo FILE_USUARIOS...");
  998.         exit(1);
  999.     }
  1000.  
  1001.    fseek (p, 0L, SEEK_SET);
  1002.  
  1003.    fread(&dato, sizeof(Usuario), 1, p);
  1004.  
  1005.    while (!feof(p))
  1006.    {
  1007.     printf("\n %100s", dato.nombre);
  1008.  
  1009.       fread(&dato, sizeof(Usuario), 1, p);
  1010.    }
  1011.  
  1012.    fclose(p);
  1013.     getch();
  1014. }
  1015.  
  1016.  
  1017. //Funciones de Registro de Parametros Ingresados por el Admin
  1018. //Versión con índice 01;
  1019. /*
  1020. void AgregarParametros(edificio *edif, tsimulac *ts)
  1021. {
  1022.  
  1023. //GER: voy a tener que cambiar el enfoque, a fin de simplificar la obtencion de los parametros para su consecuente
  1024. //registro y utilizacion en la funcion de evacuacion (LISTO!).
  1025.  
  1026.     long cantreg;
  1027.     int cantidad;
  1028.    int i;
  1029.     int codigo=0;
  1030.     char codigoStr[30];
  1031.     Config config;
  1032.     FILE *p1,*p2;
  1033.  
  1034.     //Creo las estructuras auxiliares
  1035.     parametros reg; //GER: ESTRUCTURA QUE AGRUPARA TODOS LOS PARAMETROS: LISTO, DEFINIDA.
  1036.     Indice reg1;
  1037.     p1=fopen(FILE_PARAMETROS,"a+b");
  1038.     p2=fopen(FILE_PARAMETROS_INDICE,"a+b");
  1039.  
  1040.     //El almacenamiento de los archivos va a ser en la ubicacion por default.
  1041.  
  1042.     //Obtengo la cantidad de registros de "Parametros" ya almacenados.
  1043.     fseek(p1,0l,SEEK_END);
  1044.     cantreg=ftell(p1)/sizeof(reg);
  1045.     clrscr();
  1046.  
  1047.     //CARGA DE DATOS
  1048.     //Hay que crear una función para obtener el código automáticamente: LISTO.
  1049.     //codigo_parametro(codigo);
  1050.  
  1051.     printf("\n\n- CARGA DE PARAMETROS -");
  1052.  
  1053.    //ACA SE COPIA A UNA UNICA ESTRUCT TODO LO INGRESADO PREVIAMENTE EN LOS PROCESOS DE CARGA.
  1054.  
  1055.    reg.c_pisos=edif->c_pisos;  //cantidad de pisos.
  1056.     reg.h_piso=edif->h_piso;   //altura de un piso.
  1057.    reg.c_escal=edif->c_escal;  //aqui se autocalculará la cantidad de escalones, a sabiendas que la altura reglamentaria para los mismos es 18 cm.
  1058.    reg.m2xpiso=edif->m2xpiso;  //metros cuadrados de un piso (se utilizara para medir la cantidad de humo soportable). //GER: TERMINAR.
  1059.    for(i=0;i<reg.c_pisos;i++)
  1060.     reg.c_per_x_piso[i]=edif->c_per_x_piso[i];
  1061.     reg.fire_alarm=ts->fire_alarm;  //cant de segs a los que se dará la alarma de incendio.
  1062.    reg.evac_1ro=ts->evac_1ro;    //cant de segs a los que comenzara la evacuacion del piso. // Del primer piso a evacuar.
  1063.    reg.duracc=ts->duracc;
  1064.  
  1065.    //GER: IMPORTANTE: AHORA HAY QUE ADECUAR LA FUNCION PRINCIPAL PARA QUE LEVANTE LOS DATOS DESDE EL ARCHIVO.
  1066.  
  1067.     config = LeerPropiedad("codparam");
  1068.     printf("Codigo: ");
  1069.     printf("%s",config.valor);
  1070.     codigo = atoi(config.valor);
  1071.     reg.codigo=codigo;
  1072.  
  1073.    //la carga de los parametros ya esta definida en una funcion externa.
  1074.    //Esta funcion lo unico que hace es fusionar los dos tipos de datos ingresados por el administrador
  1075.    //y grabarlos en un archivo.
  1076.  
  1077.  
  1078.     // Informacion para archivo "Indice"  (GER: IMPORTANTE: Tengo que definir esta estructura!!)
  1079.     reg1.codigo=reg.codigo;
  1080.     reg1.posicion=cantreg;
  1081.  
  1082.     //Grabamos archivo "Registro" e "Indice"
  1083.     if (fwrite(&reg,sizeof(reg),1,p1) != 1 || fwrite(&reg1,sizeof(reg1),1,p2)!=1)  //GER: Revisar esta sentencia.
  1084.     {
  1085.         printf("ERROR DE ESCRITURA");
  1086.         getch();
  1087.     }
  1088.     else
  1089.     {
  1090.         // Grabo bien y actualizamos el Codigo de los Parametros
  1091.         codigo++;
  1092.         EscribirPropiedad("codparam",itoa(codigo,codigoStr, 10));
  1093.    }
  1094.     fclose(p1);
  1095.     fclose(p2);
  1096. }
  1097.  
  1098. long ObtenerPosicionParametro(int codigo)
  1099. {
  1100.     parametros reg;
  1101.     FILE    *p1;
  1102.     int ss;
  1103.     long ret;
  1104.  
  1105.     p1=fopen(FILE_PARAMETROS,"rb");
  1106.     if(p1==NULL)
  1107.     {
  1108.         clrscr();
  1109.         gotoxy(22,10);
  1110.         printf("ERROR EN APERTURA DE ARCHIVO");
  1111.       fflush(stdout);
  1112.         getch();
  1113.         exit(1);
  1114.     }
  1115.  
  1116.     rewind(p1);
  1117.     while(!feof(p1))
  1118.     {
  1119.         flushall();
  1120.         ret = ftell(p1);
  1121.         if(fread(&reg,sizeof(parametros),1,p1)!=1 && (!feof(p1)))exit(1);
  1122.  
  1123.         ss=0;
  1124.         if(codigo == reg.codigo)
  1125.         {
  1126.             ss=1;
  1127.             break;
  1128.         }
  1129.     }
  1130.     fclose(p1);
  1131.     if(ss==0)
  1132.     {
  1133.         // Parametro No Encontrado
  1134.         ret = -1;
  1135.     }
  1136.     return ret;
  1137. }
  1138.  
  1139. Config LeerPropiedad(char* propiedad) //GER: AGREGAR!! (Esta función revisa los codigos generados hasta el momento)
  1140. {
  1141.     Config reg;
  1142.     FILE    *p1;
  1143.     int s = 0;
  1144.  
  1145.     p1=fopen(FILE_CONFIG,"rb");
  1146.     if(p1==NULL)
  1147.     {
  1148.         clrscr();
  1149.         gotoxy(22,10);
  1150.         printf("ERROR EN APERTURA DE ARCHIVO");
  1151.         getch();
  1152.         exit(1);
  1153.     }
  1154.  
  1155.     rewind(p1);
  1156.     while(!feof(p1))
  1157.     {
  1158.         if(!feof(p1))
  1159.         {
  1160.             flushall();
  1161.             if(fread(&reg,sizeof(Config),1,p1)!=1 && (!feof(p1)))exit(1);
  1162.  
  1163.             if (strcmp(strlwr(propiedad),strlwr(reg.propiedad))==0)
  1164.             {
  1165.                 s = 1;
  1166.                 break;
  1167.             }
  1168.         }
  1169.     }
  1170.     fclose(p1);
  1171.     if(s==0)
  1172.     {
  1173.         strcpy(reg.valor,"");
  1174.         strcpy(reg.propiedad,"");
  1175.     }
  1176.     return reg;
  1177. }
  1178.  
  1179. Parametro* EncuentraParametros(void) //EliminarPel...
  1180. {
  1181.    /*
  1182.     Para recordar la estructura de la struct parametros
  1183.    //Campos de la estructura edificio:
  1184.     int c_pisos;
  1185.    int h_piso;
  1186.    float c_escal;
  1187.    int m2xpiso;
  1188.    int c_per_x_piso[8];
  1189.    //Campos de la estructura tsimulac:
  1190.    int fire_alarm;
  1191.    int evac_1ro;
  1192.    int duracc;
  1193.    //Agrego un codigo de identificacion del usuario para poder utilizarlo indexado.
  1194.    int codigo;
  1195.  
  1196.  
  1197.     int codigo;
  1198.     char otro,conf;
  1199.     parametros param_aux;
  1200.     long posicion;
  1201.     FILE *p1;
  1202.  
  1203.     clrscr();
  1204.     gotoxy(24,1);
  1205.     printf("Codigo del Admin?: ");
  1206.     scanf("%d",&codigo);
  1207.     posicion=ObtenerPosicionParametro(codigo);
  1208.  
  1209.    clrscr();
  1210.     if(posicion == -1)
  1211.     {
  1212.         gotoxy(25,20);
  1213.         printf("PARAMETRO NO ENCONTRADO");
  1214.         getch();
  1215.         return;
  1216.     }
  1217.  
  1218.     // Carga previa del archivo de parametros
  1219.     if((p1 = fopen(FILE_PARAMETROS,"r+b")) == NULL)
  1220.     {
  1221.         gotoxy(25,13);
  1222.         printf("ERROR AL GENERAR ARCHIVO DE PARAMETROS %s",FILE_PARAMETROS);
  1223.         getch();
  1224.         return;
  1225.     }
  1226.  
  1227.     fseek(p1,posicion,SEEK_SET); //Cambiar nombre de funcion y modificar codigo
  1228.  
  1229.     if (fread(&param_aux,sizeof(parametros),1,p1) != 1)
  1230.     {
  1231.         clreol();
  1232.         printf("\aERROR AL LEER ARCHIVO!!!!");
  1233.         getch();
  1234.         return;
  1235.     }
  1236.  
  1237.     clrscr();
  1238.    return param_aux;
  1239.  
  1240.    fclose(p1);
  1241. }*/
  1242.  
  1243.  
  1244. //FUNCION PARA AGREGARLE SONIDOS AL SISTEMA.-
  1245. //GER: AGREGAR!!
  1246. void ruiditos(int tipo)
  1247. {
  1248.   switch (tipo)
  1249.   {
  1250.     case 1:
  1251.         // sound(1000);
  1252.         // delay(50);
  1253.         // sound(3000);
  1254.         // delay(50);
  1255.         // sound(2000);
  1256.         // delay(50);
  1257.         // nosound();
  1258.         break;
  1259.      case 2:
  1260.         // sound(120);
  1261.         // delay(500);
  1262.         // sound(100);
  1263.         // delay(800);
  1264.         // nosound();
  1265.      break;
  1266.   }
  1267. }
  1268.  
  1269.  
  1270. //Funciones de Registro de Parametros Ingresados por el Admin
  1271. //Versión sin índice 01;
  1272.  
  1273. void AgregarParametros(edificio *edif, tsimulac *ts)
  1274. {
  1275.    FILE *ptr;
  1276.     int valida,i;
  1277.     char otro,conf;
  1278.     parametros reg;
  1279.  
  1280.    // textcolor(WHITE);
  1281.     // textbackground(BLACK);
  1282.  
  1283.     //if((ptr=fopen(FILE_PARAMETROS,"a+b"))==NULL)
  1284.     if((ptr = fopen(FILE_PARAMETROS,"w+b"))==NULL)   //if((p1 = fopen(FILE_CONFIG,"w+b")) == NULL)
  1285.     {
  1286.         ruiditos(2);
  1287.         gotoxy(25,13);
  1288.         printf("ERROR AL ABRIR ARCHIVO DE PARAMETROS");
  1289.         getch();
  1290.         return;
  1291.     }
  1292.  
  1293.     //ACA SE COPIA A UNA UNICA ESTRUCT TODO LO INGRESADO PREVIAMENTE EN LOS PROCESOS DE CARGA.
  1294.  
  1295.    reg.c_pisos=edif->c_pisos;  //cantidad de pisos.
  1296.     reg.h_piso=edif->h_piso;   //altura de un piso.
  1297.    reg.c_escal=edif->c_escal;
  1298.    reg.m2xpiso=edif->m2xpiso;  //metros cuadrados de un piso (se utilizara para medir la cantidad de humo soportable). //GER: TERMINAR.
  1299.    for(i=0;i<reg.c_pisos;i++)
  1300.     reg.c_per_x_piso[i]=edif->c_per_x_piso[i];
  1301.     reg.fire_alarm=ts->fire_alarm;  //cant de segs a los que se dará la alarma de incendio.
  1302.    reg.evac_1ro=ts->evac_1ro;    //cant de segs a los que comenzara la evacuacion del piso. // Del primer piso a evacuar.
  1303.    reg.duracc=ts->duracc;
  1304.  
  1305.     //proceso de grabación en el archivo.
  1306.  
  1307.     rewind(ptr);
  1308.     ruiditos(1);
  1309.     if (fwrite(&reg,sizeof(parametros),1,ptr)!=1)   //fwrite(&reg,sizeof(reg),1,ptr);
  1310.     {
  1311.         gotoxy(25,16);
  1312.         printf("ERROR DE ESCRITURA");
  1313.         ruiditos(2);
  1314.     }
  1315.     else
  1316.     {
  1317.         gotoxy(25,17);
  1318.         printf("PARAMETROS ALMACENADOS");
  1319.         ruiditos(1);
  1320.     }
  1321.    
  1322.   fclose(ptr);
  1323. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement