elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Guía actualizada para evitar que un ransomware ataque tu empresa


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  Aplicacion explota en varios stream (FILE *)
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] 2 Ir Abajo Respuesta Imprimir
Autor Tema: Aplicacion explota en varios stream (FILE *)  (Leído 4,226 veces)
Fire544

Desconectado Desconectado

Mensajes: 85


"Escucha el sonido del 0, 1"


Ver Perfil WWW
Aplicacion explota en varios stream (FILE *)
« en: 3 Diciembre 2012, 03:36 am »

Estoy desarrollando una aplicacion tipo Cuentas por Cobrar, intento reabrir un descriptor de fichero como lectura y modificacion binaria, para poder modificar contenido con fseek(), puedo modificar el contenido x veces en tiempo de ejecucion, cuando estoy intentando la 3ra modificacion, entonces explota, pero he verificado las salidas de los descriptores y solo el descriptor que utiliza la funcion getPos() devuelve error, al parecer no pudo abrir el descriptor, pero a que se debe, he cerrado todos los ficheros correctamente, he colocado reposicionamiento al SET 0 de mi descriptor utilizando fseek(), pero nada todo igual.

Código
  1. //codigo boton  
  2.     posFich=getPos(cedulaPg);
  3.     getPosFich(posFich-1, modifFichero);
  4.     pagoActual=mntPagoClt(cedulaPg);
  5.     sumaPagada=sumar(mntPago, mntCount);
  6.     //suma de pago
  7.     pagoSumado=pagoActual-sumaPagada;
  8.  
  9.     sprintf(usuario.deuda, "%i", pagoSumado);
  10.     //guardamos estructura de datos en fichero
  11.     fwrite(&usuario, sizeof(struct user), 1, modifFichero);
  12.     //cerramos fichero
  13.     fclose(modifFichero);
  14.  

La funcion getPos(), con esta funcion devuelvo la posicion fisica actual del fichero.
Código
  1. int getPos(char *cedulaPago)
  2. {
  3.     FILE *dato = fopen("fixcom.fix", "rb");
  4.     int pos=0;
  5.     //fseek(dato, 0L, SEEK_SET);
  6.     verificarFichero(dato,"dato");
  7.  
  8.     while(fread(&usuario, sizeof(struct user), 1, dato)!=0)
  9.     {
  10.                           pos++;
  11.                           if(strcmp(cedulaPago, usuario.cedula)==0)
  12.                           {
  13.                                                 fclose(dato);
  14.                                                 return pos;
  15.                                                 }
  16.                           }
  17.     }
  18.  

La funcion mntPagoClt(), la utilizo para sacar el ultimo pago que realizo el cliente.

Código
  1. int mntPagoClt(char *cedula)
  2. {
  3.     int prestamoD=0;
  4.  
  5.     FILE *fichLeer=fopen("fixcom.fix", "rb");
  6.  
  7.     while(fread(&usuario, sizeof(struct user), 1, fichLeer)!=0)
  8.     {
  9.     if(strcmp(cedula, usuario.cedula)==0)
  10.     {
  11.  
  12.     fclose(fichLeer);
  13.  
  14.     return prestamoD=atoll(usuario.deuda);
  15.             }
  16.             }
  17.     }
  18.  

De esta manera estoy abriendo los descriptores de fichero:

Código
  1. modifFichero=fopen("fixcom.fix","rb+");//lectura binaria y para actualizar descriptor
  2. fdiskR=fopen("fixcom.fix","rb");//leer el fichero completo hasta encontrar lo buscado con strcmp()
  3. fdiskW=fopen("fixcom.fix","a"); //para guardar siempre en la ultima linea del fichero

La funcion getPosFich(). Con esta funcion me posiciono en donde quiero en el descriptor

Código
  1. void getPosFich(int pos, FILE *filePtr)
  2. {
  3.     fseek(filePtr, pos*sizeof(struct user), SEEK_SET);
  4.     }
Nota: Todos los datos se alojan en un fichero, llamado fixcon.fix.


« Última modificación: 3 Diciembre 2012, 03:40 am por Fire544 » En línea

"Si enseñas a pezcar a un niño lo ayudas para toda la vida, si pezcas para alimentarlo lo ayudas por un momento".
naderST


Desconectado Desconectado

Mensajes: 625



Ver Perfil WWW
Re: Aplicacion explota en varios stream (FILE *)
« Respuesta #1 en: 3 Diciembre 2012, 04:22 am »

Valida que fopen no te esté retornando NULL y además verifica que no estés abriendo el fichero dos veces o algo por el estilo.

¿Qué tal si esta condición no se cumple?

Código
  1. strcmp(cedulaPago, usuario.cedula)==0
  2.  

No se cerraría el fichero y ahí tenemos un problema.


« Última modificación: 3 Diciembre 2012, 04:27 am por naderST » En línea

durasno


Desconectado Desconectado

Mensajes: 373


Ver Perfil
Re: Aplicacion explota en varios stream (FILE *)
« Respuesta #2 en: 3 Diciembre 2012, 04:55 am »

Ademas de lo que te marcaron, tambien esta mal empleado los retornos en las funciones. Solo si entra al while y se cumple el if retornas un valor, y si nose cumple nada????

Tambien tendrias q cambiar la condicion de los bucles, mira el manual de fread:
http://c.conclase.net/librerias/?ansifun=fread



Saludos
En línea

Ahorrate una pregunta, lee el man
Fire544

Desconectado Desconectado

Mensajes: 85


"Escucha el sonido del 0, 1"


Ver Perfil WWW
Re: Aplicacion explota en varios stream (FILE *)
« Respuesta #3 en: 3 Diciembre 2012, 21:15 pm »

naderST: Gracias por responder, si mira verifico que el descriptor ande bien !! fijate en esta funcion luego de abrir el descriptor verificarFichero(dato,"dato");, y su cuerpo:

Código:
void verificarFichero(FILE *fil, char *nameFich)
{
     if(fil==NULL)
     {
                  fprintf(stdout, "Error de fichero %s", nameFich);
                  }
     }

Nota: Cuando intento verificar el descriptor, entonces me lanza error en el fichero de lectura. Tiene error para abrir creo, pero a que se debe esto !!!

He intentado rebobinar el descriptor con ayuda de rewind(), pero nada todo igual !!.
« Última modificación: 3 Diciembre 2012, 21:28 pm por Fire544 » En línea

"Si enseñas a pezcar a un niño lo ayudas para toda la vida, si pezcas para alimentarlo lo ayudas por un momento".
durasno


Desconectado Desconectado

Mensajes: 373


Ver Perfil
Re: Aplicacion explota en varios stream (FILE *)
« Respuesta #4 en: 3 Diciembre 2012, 22:03 pm »

Usa la funcion perror() para saber cual puede ser la causa


Saludos
En línea

Ahorrate una pregunta, lee el man
Fire544

Desconectado Desconectado

Mensajes: 85


"Escucha el sonido del 0, 1"


Ver Perfil WWW
Re: Aplicacion explota en varios stream (FILE *)
« Respuesta #5 en: 4 Diciembre 2012, 23:45 pm »

Si mira durasno, el mensaje que me lanza perror():

Código:
Fichero dato: No error
Fichero dato: No error
Fichero dato: No error
Fichero dato: Too many open files

Por lo que veo no detecta errores !!!, ahora voy a ver que pasa si modifico algo, lo que pasa es que trabajo con el motor grafico de SDL, para graficar y tengo que estar metiendo while() por todos lados !!
En línea

"Si enseñas a pezcar a un niño lo ayudas para toda la vida, si pezcas para alimentarlo lo ayudas por un momento".
Fire544

Desconectado Desconectado

Mensajes: 85


"Escucha el sonido del 0, 1"


Ver Perfil WWW
Re: Aplicacion explota en varios stream (FILE *)
« Respuesta #6 en: 5 Diciembre 2012, 00:01 am »

Voy a publica el codigo, pero creo que sera dificil leerlo, carece de organizacion (Optimizacion).

Código
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <SDL.h>
  4. #include <SDL_image.h>
  5. #include <SDL_ttf.h>
  6. #include <sys/time.h>
  7. #include "include/components.cpp"
  8. #include "include/ventanas.c"
  9. #include "include/struct_clientes.h"
  10. #include "include/def_cv.h"
  11. #include "include/suma.cpp"
  12. //estructura para manejar datos clientes
  13. void seccion_de_botones(int);
  14. void presentar_fecha();
  15. void save_array(int,int,char);
  16. void save_disk();
  17. float calculaPrest();
  18. void dato_prestamo(int, int);
  19. int getPos(char *);
  20. void getPosFich(int, FILE *);
  21. int mntPagoClt(char *);
  22.  
  23. char buscarCedula[TAM], cedulaPg[TAM];
  24. int contPrestamo=0, pagos=0, verdad=DISABLE, cant=0, cuota=0, contCheckbox=0, posFich=0,
  25. mntPago[TAM], mntCount=0, permit=ENABLE;
  26. unsigned int sumaPagada=0, pagoActual=0, pagoSumado=0;
  27.  
  28. struct user{
  29.        char nombre[TAM],
  30.        apellido[TAM],
  31.        cedula[TAM],
  32.        fecha[TAM],
  33.        prestms[TAM],
  34.        prestamoPorCuota[TAM],
  35.        numeroPagos[TAM],
  36.        fFinal[TAM],
  37.        deuda[TAM];
  38.        int prest[TAM], numPagos[TAM];
  39.        }usuario;
  40.  
  41. typedef struct mesDia{
  42.             int mes, dia;
  43.             };
  44.  
  45. int main(int argc, char *argv[])
  46. {
  47. vent ventana[3];
  48. check checkbox;
  49.  
  50. int color=AZUL, sig_boton, sig_y_boton, sig_tex, sig_y_tex;
  51. int done = 0, bit_fecha=0, evento_keyboard=DISABLE,
  52. active_texbox, checked=0, xsig, ysig;    
  53. char *texto_texbox="", fecha2[10], *texbox_texto=""/*accion*/;
  54.  
  55. crear_pantalla(600, 400, CARGA_PANT, "FIXCOM");
  56. //inicializamos checkbox a DISABLE
  57. checkbox.select=0;
  58. // texto checkbox
  59. inicializarTextoCheckbox[1]="2-C";
  60. inicializarTextoCheckbox[2]="4-C";
  61. inicializarTextoCheckbox[3]="6-C";
  62. inicializarTextoCheckbox[4]="8-C";
  63. //desactivamos ventanas
  64. ventana[MENU].select=ENABLE; //dejamos menu porque es pantalla inicial
  65. ventana[ADD_USERS].select=DISABLE;
  66. ventana[LIST_USERS].select=DISABLE;
  67. ventana[HACER_PAGOS].select=DISABLE;
  68. //elementos ventanas
  69. elementos_ventana();
  70. //bucle o loop de aplicacion
  71. while(done == DISABLE)
  72. {
  73. //esperamos eventos en cola
  74. SDL_WaitEvent(&event);
  75. //consultamos eventos en cola
  76. if (event.type == SDL_QUIT)
  77. {
  78. done = 1;
  79. }
  80. //cambiamos apariencia a botones
  81. create_button(sig_boton, sig_y_boton, texto_texbox, 10, color);
  82.  
  83. if(event.type==SDL_MOUSEBUTTONDOWN&CLICKPRESIONADO)
  84. {fprintf(stdout, "X=%i, Y=%i\n", event.button.x, event.button.y);}
  85.  
  86. if(bit_texbox==ENABLE)
  87. {
  88. create_imagen(sig_tex,sig_y_tex,"images/tapa_label.jpg");
  89. create_label(sig_tex,sig_y_tex,texbox_texto,15,AZUL);
  90. }
  91.  
  92. bit_texbox=DISABLE;
  93. color=AZUL;
  94. checked=0;
  95. //eventos botones ventana menu
  96. if(ventana[MENU].select==ENABLE)
  97. {
  98. //boton agregar users
  99. if((EVENTOX>=151&EVENTOX<=258)&&(EVENTOY>=84&EVENTOY<=113))
  100. {
  101.     sig_boton=150;
  102.     sig_y_boton=80;
  103.     texto_texbox="Agregar Users";
  104.     color=BOTON_ILUM;
  105.     //click
  106.     if(EVENTOCLICK==1&CLICKLIBERADO)
  107.     {
  108.     //efecto boton
  109.     create_button_efecto(150, 80);
  110.     SDL_Delay(50);
  111.     create_button(150, 80, texto_texbox, 10, AZUL);                              
  112.     //codigo boton
  113.     ventana[MENU].select=DISABLE;
  114.     ventana[ADD_USERS].select=ENABLE;
  115.     //llama a ventana
  116.     sig_boton=-150,sig_y_boton=-150;
  117.     checkbox.select=DISABLE;
  118.     checked=DISABLE;
  119.  
  120.     create_imagen(0,0,"images/imagen.jpg");
  121.     v(ADD_USERS);
  122.     //ejecutamos botones de ventanas
  123.     seccion_de_botones(ADD_USERS);
  124.     //fin codigo boton agregar users
  125.     }
  126.     }
  127. //boton listar users
  128. else if((EVENTOX>=148&EVENTOX<=260)&(EVENTOY>=155&EVENTOY<=185))
  129. {
  130.     sig_boton=150;
  131.     sig_y_boton=150;
  132.     texto_texbox="Buscar Users";
  133.     color=BOTON_ILUM;
  134.     //click
  135.     if(EVENTOCLICK==1&CLICKLIBERADO)
  136.     {
  137.     //efecto boton
  138.     create_button_efecto(150, 150);
  139.     SDL_Delay(50);
  140.     create_button(150, 150, texto_texbox, 10, AZUL);
  141.     //codigo boton  
  142.     //desactivamos ventana menu
  143.     ventana[MENU].select=DISABLE;
  144.     ventana[LIST_USERS].select=ENABLE; //activamos ventana listar users
  145.  
  146.     create_imagen(0,0,"images/imagen.jpg");
  147.  
  148.     sig_boton=-150,sig_y_boton=-150;
  149.     v(LIST_USERS);    
  150.     seccion_de_botones(LIST_USERS);
  151.     //fin codigo boton listar_users                          
  152.     }                                                                                                          
  153. }
  154. //boton hacer pagos
  155. else if((EVENTOX>=151&EVENTOX<=258)&&(EVENTOY>=220&EVENTOY<=255))
  156. {
  157.     sig_boton=151;
  158.     sig_y_boton=220;
  159.     texto_texbox="Hacer Pagos";
  160.     color=BOTON_ILUM;
  161.     //click
  162.     if(EVENTOCLICK==1&CLICKLIBERADO)
  163.     {
  164.     //efecto boton
  165.     create_button_efecto(150, 220);
  166.     SDL_Delay(50);
  167.     create_button(150, 220, texto_texbox, 10, AZUL);                              
  168.     //codigo boton
  169.     ventana[MENU].select=DISABLE;
  170.     ventana[HACER_PAGOS].select=ENABLE;
  171.     //llama a ventana
  172.     sig_boton=-150,sig_y_boton=-150;
  173.     create_imagen(0,0,"images/imagen.jpg");
  174.     v(HACER_PAGOS);
  175.     //ejecutamos botones de ventanas
  176.     seccion_de_botones(HACER_PAGOS);
  177.     //fin codigo boton agregar users
  178.     }
  179.     }
  180. //fin eventos botones ventana menu  
  181. }
  182. //sección botones add_users
  183. if(ventana[ADD_USERS].select==ENABLE)
  184. {
  185. //eventos botones
  186. //boton ir a menu
  187. if(bit_fecha==0)
  188. {
  189. presentar_fecha();
  190. bit_fecha=1;
  191. }
  192. if((EVENTOX>=349&EVENTOX<=463)&(EVENTOY>=355&EVENTOY<=382))
  193. {
  194.     sig_boton=350;
  195.     sig_y_boton=350;
  196.     texto_texbox="Ir a Menu";
  197.     color=BOTON_ILUM;
  198.     //click
  199.     if(EVENTOCLICK==1&CLICKLIBERADO)
  200.     {
  201.     //efecto boton
  202.     create_button_efecto(350, 350);
  203.     SDL_Delay(50);
  204.     create_button(350, 350, texto_texbox, 10, AZUL);
  205.     //codigo boton  
  206.     //desactivamos ventana menu
  207.     ventana[ADD_USERS].select=DISABLE;
  208.     ventana[MENU].select=ENABLE;
  209.  
  210.     create_imagen(0,0,"images/imagen.jpg");
  211.  
  212.     sig_boton=-150,sig_y_boton=-150;
  213.     sig_tex=-71,sig_y_tex=-18;
  214.     evento_keyboard=DISABLE;
  215.  
  216.     bit_fecha=0;
  217.     pagos=0;
  218.     contPrestamo=0;
  219.     cant=0;
  220.  
  221.     limpiarArray(usuario.apellido,TAM);
  222.     limpiarArray(usuario.nombre,TAM);
  223.     limpiarArray(usuario.cedula,TAM);
  224.     limpiarArray(usuario.deuda,TAM);
  225.     limpiarArray(usuario.fecha,TAM);
  226.     limpiarArray(usuario.fFinal,TAM);
  227.     limpiarArray(usuario.numeroPagos,TAM);
  228.     limpiarArray(usuario.prestamoPorCuota,7);
  229.     limpiarArray(usuario.prestms,TAM);
  230.     limpiarArray(buscarCedula,TAM);
  231.     limpiarArrayEntero(usuario.prest,3);
  232.     limpiarArrayEntero(usuario.numPagos,3);
  233.  
  234.     elementos_ventana();
  235.     //fin codigo boton add_users                          
  236.     }                                                                                                          
  237. }  
  238. //boton limpiar
  239. if((EVENTOX>=49&EVENTOX<=159)&(EVENTOY>=355&EVENTOY<=382))
  240. {
  241.     sig_boton=50;
  242.     sig_y_boton=350;
  243.     texto_texbox="Limpiar";
  244.     color=BOTON_ILUM;
  245.     //click
  246.     if(EVENTOCLICK==1&CLICKLIBERADO)
  247.     {
  248.     //efecto boton
  249.     create_button_efecto(50, 350);
  250.     SDL_Delay(50);
  251.     create_button(50, 350, texto_texbox, 10, AZUL);
  252.     //codigo boton  
  253.     //desactivamos ventana menu
  254.     sig_boton=-150,sig_y_boton=-150;
  255.     sig_tex=-71,sig_y_tex=-18;
  256.     evento_keyboard=DISABLE;
  257.  
  258.     pagos=0;
  259.     contPrestamo=0;
  260.     cant=0;
  261.     //limpiamos cuadros de textos erroneos
  262.     clear_error(400, 150);
  263.     clear_error(400, 10);
  264.     create_imagen(5, 300, "images/tapa_error.jpg");
  265.     create_imagen(5, 315, "images/tapa_error.jpg");
  266.  
  267.     limpiarArray(usuario.apellido,TAM);
  268.     limpiarArray(usuario.nombre,TAM);
  269.     limpiarArray(usuario.cedula,TAM);
  270.     limpiarArray(usuario.deuda,TAM);
  271.     limpiarArray(usuario.fecha,TAM);
  272.     limpiarArray(usuario.fFinal,TAM);
  273.     limpiarArray(usuario.numeroPagos,TAM);
  274.     limpiarArray(usuario.prestamoPorCuota,7);
  275.     limpiarArray(usuario.prestms,TAM);
  276.     limpiarArray(buscarCedula,TAM);
  277.     limpiarArrayEntero(usuario.prest,3);
  278.     limpiarArrayEntero(usuario.numPagos,3);
  279.     //fin codigo boton add_users                          
  280.     }                                                                                                          
  281. }  
  282. //evento boton agregar
  283. if((EVENTOX>=194&EVENTOX<=312)&(EVENTOY>=355&EVENTOY<=382))
  284. {
  285.     sig_boton=200;
  286.     sig_y_boton=350;
  287.     texto_texbox="Agregar";
  288.     color=BOTON_ILUM;
  289.     //click
  290.     if(EVENTOCLICK==1&CLICKLIBERADO)
  291.     {
  292.     //efecto boton
  293.     create_button_efecto(200, 350);
  294.     SDL_Delay(50);
  295.     create_button(200, 350, texto_texbox, 10, AZUL);
  296.     //codigo boton  
  297.  
  298.     active_texbox=SAVE_DISK;
  299.  
  300.     if(pagos==0)
  301.     {
  302.     /*mensaje de error*/mod_error(400, 10, "Seleccione Pago", 10);
  303.      permit=DISABLE;
  304.      }
  305.  
  306.      if(pagos!=0)
  307.      {
  308.      clear_error(400,10);
  309.      }
  310.  
  311.     if(usuario.nombre[0]=='\0'||usuario.cedula[0]=='\0'||usuario.prestms[0]=='\0')
  312.     {/*mensaje de error*/
  313.     create_imagen(5, 300, "images/tapa_error.JPG");
  314.     create_label(5, 300, "ES OBLIGATORIO: Nombre, Cedula y Prestms", 10, ROJO);
  315.     //desactivamos los que nos permite guardar
  316.     permit=DISABLE;
  317.     }
  318.  
  319.     if(usuario.nombre[0]!='\0'&usuario.cedula[0]!='\0'&usuario.prestms[0]!='\0')
  320.     {/*mensaje de error*/
  321.     create_imagen(5, 300, "images/tapa_error.JPG");
  322.     }
  323.  
  324.     if(strlen(usuario.cedula)<=10)
  325.     {
  326.     clear_error(400,150);
  327.     mod_error(400, 150, "Cedula debe tener 11 Digitos", 10);                              
  328.     permit=DISABLE;
  329.     }
  330.  
  331.     if(strlen(usuario.cedula)>=11)
  332.     {
  333.     clear_error(400,150);                              
  334.     }
  335.  
  336.     if(permit==ENABLE)
  337.     {
  338.     clear_error(400,10);
  339.     save_disk();
  340.     create_imagen(5, 315, "images/tapa_error.jpg");
  341.     create_label(5, 315, "Datos guardados exitosamente", 10, AZUL);
  342.     }
  343.  
  344.     evento_keyboard=DISABLE;
  345.     //fin codigo boton add_users                          
  346.     }                                    
  347. }
  348. //checkbox 2 pagos
  349. if((EVENTOX>=64&EVENTOX<=74)&&(EVENTOY>=178&EVENTOY<=188))
  350. {
  351.  
  352. xsig=65, ysig=180;
  353.  
  354. if(EVENTOCLICK==1&CLICKPRESIONADO)
  355. {
  356. checkbox.select++;
  357. if(checkbox.select==1)
  358. {        
  359. checkbox_select(xsig,ysig);          
  360. //asignamos numero de pago
  361. pagos=2;
  362. permit=ENABLE;
  363. }                      
  364. if(checkbox.select==2)
  365. {
  366. create_checkbox(xsig,ysig);
  367. checkbox.select=0;  
  368. pagos=0;
  369. permit=DISABLE;          
  370. }  
  371. }
  372.  
  373. }
  374. //checkbox 4 pagos
  375. if((EVENTOX>=65&EVENTOX<=73)&&(EVENTOY>=200&EVENTOY<=208))
  376. {
  377.  
  378. xsig=65, ysig=200;
  379.  
  380. if(EVENTOCLICK==1&CLICKPRESIONADO)
  381. {
  382. checkbox.select++;
  383. if(checkbox.select==1)
  384. {        
  385. checkbox_select(xsig,ysig);          
  386. //asignamos numero de pago
  387. pagos=4;
  388. permit=ENABLE;
  389. }                      
  390. if(checkbox.select==2)
  391. {
  392. create_checkbox(xsig,ysig);  
  393. checkbox.select=0;    
  394. pagos=0;  
  395. permit=DISABLE;      
  396. }  
  397. }
  398. }
  399. //checkbox 6 pagos
  400. if((EVENTOX>=65&EVENTOX<=73)&&(EVENTOY>=220&EVENTOY<=228))
  401. {
  402.  
  403. xsig=65, ysig=220;
  404.  
  405. if(EVENTOCLICK==1&CLICKPRESIONADO)
  406. {
  407. checkbox.select++;
  408. if(checkbox.select==1)
  409. {        
  410. checkbox_select(xsig,ysig);          
  411. //asignamos numero de pago
  412. pagos=6;
  413. permit=ENABLE;
  414. }                      
  415. if(checkbox.select==2)
  416. {
  417. create_checkbox(xsig,ysig);  
  418. checkbox.select=0;
  419. pagos=0;  
  420. permit=DISABLE;          
  421. }  
  422. }
  423.  
  424. }
  425. //checkbox 8 pagos
  426. if((EVENTOX>=65&EVENTOX<=73)&&(EVENTOY>=240&EVENTOY<=248))
  427. {
  428.  
  429. xsig=65, ysig=240;
  430.  
  431. if(EVENTOCLICK==1&CLICKPRESIONADO)
  432. {
  433. checkbox.select++;
  434. if(checkbox.select==1)
  435. {        
  436. checkbox_select(xsig,ysig);          
  437. //asignamos numero de pago
  438. pagos=8;
  439. permit=ENABLE;
  440. }                      
  441. if(checkbox.select==2)
  442. {
  443. create_checkbox(xsig,ysig);  
  444. checkbox.select=0;  
  445. pagos=0;    
  446. permit=DISABLE;    
  447. }  
  448. }
  449.  
  450. }
  451. //revisamos si se llego al final de texbox
  452. if(sig>=280)
  453. {evento_keyboard=DISABLE;}
  454. //eventos texbox
  455. //texbox nombre
  456. if((EVENTOX>=69&EVENTOX<=290)&(EVENTOY>=9&EVENTOY<=30))
  457. {
  458. bit_texbox=ENABLE;
  459. texbox_texto="Nombre";
  460. sig_tex=5,sig_y_tex=10;
  461. active_texbox=NOMBRE;
  462. create_label(sig_tex,sig_y_tex,"Nombre", 15, ROJO);
  463. if(EVENTOCLICK==1&&CLICKPRESIONADO)
  464. {
  465. cant=0;
  466. sig=71,sig_y=18;                              
  467. evento_keyboard=ENABLE;
  468. }                                                      
  469. }  
  470. //texbox apellido
  471. if((EVENTOX>=69&EVENTOX<=290)&(EVENTOY>=39&EVENTOY<=60))
  472. {
  473. bit_texbox=ENABLE;
  474. texbox_texto="Apellido";
  475. sig_tex=5,sig_y_tex=40;
  476. active_texbox=APELLIDO;
  477. create_label(sig_tex,sig_y_tex,"Apellido", 15, ROJO);
  478. if(EVENTOCLICK==1&&CLICKPRESIONADO)
  479. {
  480. cant=0;
  481. sig=71,sig_y=48;                              
  482. evento_keyboard=ENABLE;
  483. }                                                      
  484. }  
  485. //texbox cedula
  486. if((EVENTOX>=69&EVENTOX<=290)&(EVENTOY>=68&EVENTOY<=91))
  487. {
  488. bit_texbox=ENABLE;
  489. texbox_texto="Cedula";
  490. sig_tex=5,sig_y_tex=70;
  491. active_texbox=CEDULA;
  492. create_label(sig_tex,sig_y_tex,"Cedula", 15, ROJO);
  493. if(EVENTOCLICK==1&&CLICKPRESIONADO)
  494. {
  495. cant=0;
  496. sig=71,sig_y=78;                              
  497. evento_keyboard=ENABLE;
  498. }                                                      
  499. }
  500. //texbox prestamo
  501. if((EVENTOX>=69&EVENTOX<=290)&(EVENTOY>=129&EVENTOY<=151))
  502. {
  503. bit_texbox=ENABLE;
  504. texbox_texto="Prestms";
  505. sig_tex=5,sig_y_tex=130;
  506. active_texbox=PRESTMS;
  507. create_label(sig_tex,sig_y_tex,"Prestms", 15, ROJO);
  508. if(EVENTOCLICK==1&&CLICKPRESIONADO)
  509. {
  510. cant=0;
  511. sig=71,sig_y=138;                              
  512. evento_keyboard=ENABLE;
  513. }                                                      
  514. }
  515. //terminar sección ventana agregar user
  516. }
  517. //sección de botones listar users
  518. if(ventana[LIST_USERS].select==ENABLE)
  519. {
  520. //eventos botones
  521. //boton ir a menu
  522. if((EVENTOX>=349&EVENTOX<=463)&(EVENTOY>=355&EVENTOY<=382))
  523. {
  524.     sig_boton=350;
  525.     sig_y_boton=350;
  526.     texto_texbox="Ir a Menu";
  527.     color=BOTON_ILUM;
  528.     //click
  529.     if(EVENTOCLICK==1&CLICKLIBERADO)
  530.     {
  531.     //efecto boton
  532.     create_button_efecto(350, 350);
  533.     SDL_Delay(50);
  534.     create_button(350, 350, texto_texbox, 10, AZUL);
  535.     //codigo boton  
  536.      verdad=DISABLE;
  537.      //limpiamos todos los arrays de la estructura usuario
  538.     limpiarArray(usuario.apellido,TAM);
  539.     limpiarArray(usuario.nombre,TAM);
  540.     limpiarArray(usuario.cedula,TAM);
  541.     limpiarArray(usuario.deuda,TAM);
  542.     limpiarArray(usuario.fecha,TAM);
  543.     limpiarArray(usuario.fFinal,TAM);
  544.     limpiarArray(usuario.numeroPagos,TAM);
  545.     limpiarArray(usuario.prestamoPorCuota,TAM);
  546.     limpiarArray(usuario.prestms,TAM);
  547.     limpiarArray(buscarCedula,TAM);
  548.     limpiarArrayEntero(usuario.prest,3);
  549.     limpiarArrayEntero(usuario.numPagos,3);
  550.     //desactivamos ventana menu
  551.     ventana[LIST_USERS].select=DISABLE;
  552.     ventana[MENU].select=ENABLE;
  553.  
  554.     create_imagen(0,0,"images/imagen.jpg");
  555.  
  556.     sig_boton=-150,sig_y_boton=-150;
  557.     sig_tex=-71,sig_y_tex=-18;
  558.     evento_keyboard=DISABLE;
  559.     elementos_ventana();
  560.     //fin codigo boton listar_users                          
  561.     }                                                                                                          
  562. }  
  563. //parar eventos texbox
  564. if(sig>=565&&active_texbox==BUSCAR_C)
  565. {evento_keyboard=DISABLE;}
  566. //evento boton buscar
  567. if((EVENTOX>=349&EVENTOX<=463)&(EVENTOY>=114&EVENTOY<=145))
  568. {
  569.     sig_boton=350;
  570.     sig_y_boton=110;
  571.     texto_texbox="Buscar";
  572.     color=BOTON_ILUM;
  573.     //click
  574.     if(EVENTOCLICK==1&CLICKLIBERADO)
  575.     {
  576.     //efecto boton
  577.     fdiskR=fopen("fixcom.fix","rb");
  578.  
  579.     create_button_efecto(350, 110);
  580.     SDL_Delay(50);
  581.     create_button(350, 110, texto_texbox, 10, AZUL);
  582.     //codigo boton  
  583.  
  584.     //comprobamo si cedula contiene 13 digitos
  585.     if(strlen(buscarCedula)<=10)
  586.     {
  587.     clear_error(400, 200);
  588.     mod_error(400, 200, "Cedula debe tener 11 digitos", 10);
  589.                                   }
  590.  
  591.     while(fread(&usuario,sizeof(struct user),1,fdiskR)!=0)
  592.     {
  593.     if(strcmp(buscarCedula,usuario.cedula)==0)
  594.     {
  595.  
  596.     SDL_printf(73,18,usuario.nombre,10,AZUL);
  597.     SDL_printf(73,48,usuario.apellido,10,AZUL);  
  598.     SDL_printf(73,108,usuario.prestms,10,AZUL);
  599.     SDL_printf(73,78,usuario.fecha,10,AZUL);
  600.     SDL_printf(73,198,usuario.prestamoPorCuota,10,AZUL);
  601.     SDL_printf(73,228,usuario.numeroPagos,10,AZUL);
  602.     SDL_printf(73,168,usuario.fFinal,10,AZUL);
  603.     SDL_printf(73,138,usuario.deuda,10,AZUL);
  604.  
  605.     verdad=ENABLE;
  606.  
  607.     }
  608.     }
  609.  
  610.     if(verdad==DISABLE)
  611.     {
  612.     create_imagen(10, 285, "images/tapa_error.jpg");
  613.     create_label(10, 285, "ERROR: No existe cliente !", 10, ROJO);                                          
  614.     }
  615.  
  616.     sig_boton=-150,sig_y_boton=-150;
  617.     sig_tex=-71,sig_y_tex=-18;
  618.     evento_keyboard=DISABLE;
  619.     //fin codigo boton listar_users                          
  620.     }                                                                                                          
  621. }  
  622. //evento boton limpiar
  623. if((EVENTOX>=192&EVENTOX<=313)&(EVENTOY>=350&EVENTOY<=383))
  624. {
  625.     sig_boton=200;
  626.     sig_y_boton=350;
  627.     texto_texbox="Limpiar";
  628.     color=BOTON_ILUM;
  629.     //click
  630.     if(EVENTOCLICK==1&CLICKLIBERADO)
  631.     {
  632.  
  633.     create_button_efecto(200, 350);
  634.     SDL_Delay(50);
  635.     create_button(200, 350, texto_texbox, 10, AZUL);
  636.     //codigo boton  
  637.  
  638.     //limpiamos errores comprobacion users y digitos cedula
  639.  
  640.     clear_error(400, 200);
  641.  
  642.     create_imagen(10, 285, "images/tapa_error.jpg");
  643.  
  644.     //limpiamos arrays de estructuras
  645.  
  646.     cant=0;
  647.     verdad=DISABLE;
  648.  
  649.     limpiarArray(usuario.apellido,TAM);
  650.     limpiarArray(usuario.nombre,TAM);
  651.     limpiarArray(usuario.cedula,TAM);
  652.     limpiarArray(usuario.deuda,TAM);
  653.     limpiarArray(usuario.fecha,TAM);
  654.     limpiarArray(usuario.fFinal,TAM);
  655.     limpiarArray(usuario.numeroPagos,TAM);
  656.     limpiarArray(usuario.prestamoPorCuota,TAM);
  657.     limpiarArray(usuario.prestms,TAM);
  658.     limpiarArray(buscarCedula,TAM);
  659.     limpiarArrayEntero(usuario.prest,3);
  660.     limpiarArrayEntero(usuario.numPagos,3);
  661.  
  662.     sig_boton=-150,sig_y_boton=-150;
  663.     sig_tex=-71,sig_y_tex=-18;
  664.     evento_keyboard=DISABLE;
  665.     //fin codigo boton listar_users                          
  666.     }                                                                                                          
  667. }  
  668. //eventos texbox
  669. //texbox buscar cedula
  670. if((EVENTOX>=348&EVENTOX<=570)&(EVENTOY>=68&EVENTOY<=89))
  671. {
  672. bit_texbox=ENABLE;
  673. texbox_texto="Buscar C.";
  674. sig_tex=350,sig_y_tex=50;
  675. active_texbox=BUSCAR_C;
  676. create_label(sig_tex,sig_y_tex,"Buscar C.", 15, ROJO);
  677. if(EVENTOCLICK==1&&CLICKPRESIONADO)
  678. {
  679. cant=0;
  680. sig=351,sig_y=78;                              
  681. evento_keyboard=ENABLE;
  682. }                                                      
  683. }  
  684. //fin de eventos texbox listar users                                
  685. }
  686. //sección ventana hacer pagos
  687. if(ventana[HACER_PAGOS].select==ENABLE)
  688. {
  689. //eventos botones
  690. //boton ir a menu
  691. modifFichero=fopen("fixcom.fix","rb+");
  692.  
  693. if((EVENTOX>=349&EVENTOX<=463)&(EVENTOY>=355&EVENTOY<=382))
  694. {
  695.     sig_boton=350;
  696.     sig_y_boton=350;
  697.     texto_texbox="Ir a Menu";
  698.     color=BOTON_ILUM;
  699.     //click
  700.     if(EVENTOCLICK==1&CLICKLIBERADO)
  701.     {
  702.     //efecto boton
  703.     create_button_efecto(350, 350);
  704.     SDL_Delay(50);
  705.     create_button(350, 350, texto_texbox, 10, AZUL);
  706.     //codigo boton  
  707.     //limpiamos todos los arrays de la estructura usuario
  708.     limpiarArray(usuario.apellido,TAM);
  709.     limpiarArray(usuario.nombre,TAM);
  710.     limpiarArray(usuario.cedula,TAM);
  711.     limpiarArray(usuario.deuda,TAM);
  712.     limpiarArray(usuario.fecha,TAM);
  713.     limpiarArray(usuario.fFinal,TAM);
  714.     limpiarArray(usuario.numeroPagos,TAM);
  715.     limpiarArray(usuario.prestamoPorCuota,TAM);
  716.     limpiarArray(usuario.prestms,TAM);
  717.     limpiarArrayEntero(usuario.prest,3);
  718.     limpiarArrayEntero(usuario.numPagos,3);
  719.     //desactivamos ventana menu
  720.  
  721.     ventana[MENU].select=ENABLE;
  722.     ventana[HACER_PAGOS].select=DISABLE;
  723.  
  724.     create_imagen(0,0,"images/imagen.jpg");
  725.  
  726.     sig_boton=-150,sig_y_boton=-150;
  727.     sig_tex=-71,sig_y_tex=-18;
  728.     evento_keyboard=DISABLE;
  729.     elementos_ventana();
  730.     //fin codigo boton listar_users                          
  731.     }                                                                                                          
  732. }
  733. //boton realizar
  734. if((EVENTOX>=50&EVENTOX<=159)&(EVENTOY>=355&EVENTOY<=382))
  735. {
  736.     sig_boton=50;
  737.     sig_y_boton=350;
  738.     texto_texbox="Realizar";
  739.     color=BOTON_ILUM;
  740.     //click
  741.     if(EVENTOCLICK==1&CLICKLIBERADO)
  742.     {
  743.     //efecto boton
  744.     create_button_efecto(50, 350);
  745.     SDL_Delay(50);
  746.     create_button(50, 350, texto_texbox, 10, AZUL);
  747.     //codigo boton  
  748.     posFich=getPos(cedulaPg);
  749.     getPosFich(posFich-1, modifFichero);
  750.     pagoActual=mntPagoClt(cedulaPg);
  751.     sumaPagada=sumar(mntPago, mntCount);
  752.     //suma de pago
  753.     pagoSumado=pagoActual-sumaPagada;
  754.  
  755.     sprintf(usuario.deuda, "%i", pagoSumado);
  756.     //guardamos estructura de datos en fichero
  757.     fwrite(&usuario, sizeof(struct user), 1, modifFichero);
  758.     //cerramos fichero
  759.     fclose(modifFichero);
  760.  
  761.     //limpiamos arrays de elementos
  762.     limpiarArray(cedulaPg, TAM);
  763.     limpiarArrayEntero(mntPago, TAM);
  764.     //volvemos variables a su valor 0
  765.     sumaPagada=0;
  766.     pagoActual=0;
  767.     pagoSumado=0;
  768.     mntCount=0;
  769.     cant=0;
  770.     posFich=0;
  771.  
  772.     //desactivamos ventana menu
  773.     ventana[MENU].select=DISABLE;
  774.     //activamos la ventana actual
  775.     ventana[HACER_PAGOS].select=ENABLE;
  776.  
  777.     sig_boton=-150,sig_y_boton=-150;
  778.     sig_tex=-71,sig_y_tex=-18;
  779.     evento_keyboard=DISABLE;
  780.     //fin codigo boton hacer pagos                          
  781.     }                                                                                                          
  782. }                                                                            
  783. //fin acciones boton hacer pagos
  784.  
  785. //eventos texbox
  786. //Cedula Cliente
  787. if((EVENTOX>=261&EVENTOX<=480)&(EVENTOY>=70&EVENTOY<=90))
  788. {
  789. bit_texbox=ENABLE;
  790. texbox_texto="Cedula C.";
  791. sig_tex=260,sig_y_tex=50;
  792. active_texbox=BUSCACEDULA;
  793. create_label(sig_tex,sig_y_tex,"Cedula C.", 15, ROJO);
  794. if(EVENTOCLICK==1&&CLICKPRESIONADO)
  795. {
  796. cant=0;
  797. sig=261,sig_y=78;                              
  798. evento_keyboard=ENABLE;
  799. }                                
  800. }
  801. //Monto
  802. if((EVENTOX>=261&EVENTOX<=480)&(EVENTOY>=118&EVENTOY<=142))
  803. {
  804. bit_texbox=ENABLE;
  805. texbox_texto="Monto";
  806. sig_tex=260,sig_y_tex=100;
  807. active_texbox=MONTOPAGO;
  808. create_label(sig_tex,sig_y_tex,"Monto", 15, ROJO);
  809. if(EVENTOCLICK==1&&CLICKPRESIONADO)
  810. {
  811. cant=0;
  812. sig=261,sig_y=128;                              
  813. evento_keyboard=ENABLE;
  814. }                                
  815. }
  816. //limite de eventos teclado en caso de
  817. if(sig>=480)
  818. {evento_keyboard=DISABLE;}
  819. //fin eventos texbox
  820. }
  821.  
  822. //inicio gestion eventos
  823. if(evento_keyboard==ENABLE)
  824. {
  825. if(event.key.keysym.sym==SDLK_a&EVENTOCLICK)
  826. {
  827.     SDL_printf(sig, sig_y, "a", 10, ROJO);
  828.     save_array(active_texbox,cant,'a');
  829.     cant++;
  830.     sig+=10;
  831.     }
  832. else if(event.key.keysym.sym==SDLK_b&EVENTOCLICK)
  833. {
  834.     SDL_printf(sig, sig_y, "b", 10, ROJO);
  835.     save_array(active_texbox,cant,'b');
  836.     cant++;
  837.     sig+=10;
  838.     }
  839. else if(event.key.keysym.sym==SDLK_c&EVENTOCLICK)
  840. {
  841.     SDL_printf(sig, sig_y, "c", 10, ROJO);
  842.     save_array(active_texbox,cant,'c');
  843.     cant++;
  844.     sig+=10;
  845.     }
  846. else if(event.key.keysym.sym==SDLK_d&EVENTOCLICK)
  847. {
  848.     SDL_printf(sig, sig_y, "d", 10, ROJO);
  849.     save_array(active_texbox,cant,'d');
  850.     cant++;
  851.     sig+=10;
  852.     }
  853. else if(event.key.keysym.sym==SDLK_e&EVENTOCLICK)
  854. {
  855.     SDL_printf(sig, sig_y, "e", 10, ROJO);
  856.     save_array(active_texbox,cant,'e');
  857.     cant++;
  858.     sig+=10;
  859.     }
  860. else if(event.key.keysym.sym==SDLK_f&EVENTOCLICK)
  861. {
  862.     SDL_printf(sig, sig_y, "f", 10, ROJO);
  863.     save_array(active_texbox,cant,'f');
  864.     cant++;
  865.     sig+=10;
  866.     }
  867. else if(event.key.keysym.sym==SDLK_g&EVENTOCLICK)
  868. {
  869.     SDL_printf(sig, sig_y, "g", 10, ROJO);
  870.     save_array(active_texbox,cant,'g');
  871.     cant++;
  872.     sig+=10;
  873.     }
  874. else if(event.key.keysym.sym==SDLK_h&EVENTOCLICK)
  875. {
  876.     SDL_printf(sig, sig_y, "h", 10, ROJO);
  877.     save_array(active_texbox,cant,'h');
  878.     cant++;
  879.     sig+=10;
  880.     }
  881. else if(event.key.keysym.sym==SDLK_i&EVENTOCLICK)
  882. {
  883.     SDL_printf(sig, sig_y, "i", 10, ROJO);
  884.     save_array(active_texbox,cant,'i');
  885.     cant++;
  886.     sig+=10;
  887.     }
  888. else if(event.key.keysym.sym==SDLK_j&EVENTOCLICK)
  889. {
  890.     SDL_printf(sig, sig_y, "j", 10, ROJO);
  891.     save_array(active_texbox,cant,'j');
  892.     cant++;
  893.     sig+=10;
  894.     }
  895. else if(event.key.keysym.sym==SDLK_k&EVENTOCLICK)
  896. {
  897.     SDL_printf(sig, sig_y, "k", 10, ROJO);
  898.     save_array(active_texbox,cant,'k');
  899.     cant++;
  900.     sig+=10;
  901.     }
  902. else if(event.key.keysym.sym==SDLK_l&EVENTOCLICK)
  903. {
  904.     SDL_printf(sig, sig_y, "l", 10, ROJO);
  905.     save_array(active_texbox,cant,'l');
  906.     cant++;
  907.     sig+=10;
  908.     }
  909. else if(event.key.keysym.sym==SDLK_m&EVENTOCLICK)
  910. {
  911.     SDL_printf(sig, sig_y, "m", 10, ROJO);
  912.     save_array(active_texbox,cant,'m');
  913.     cant++;
  914.     sig+=10;
  915.     }
  916. else if(event.key.keysym.sym==SDLK_n&EVENTOCLICK)
  917. {
  918.     SDL_printf(sig, sig_y, "n", 10, ROJO);
  919.     save_array(active_texbox,cant,'n');
  920.     cant++;
  921.     sig+=10;
  922.     }
  923. else if(event.key.keysym.sym==SDLK_o&EVENTOCLICK)
  924. {
  925.     SDL_printf(sig, sig_y, "o", 10, ROJO);
  926.     save_array(active_texbox,cant,'o');
  927.     cant++;
  928.     sig+=10;
  929.     }
  930. else if(event.key.keysym.sym==SDLK_p&EVENTOCLICK)
  931. {
  932.     SDL_printf(sig, sig_y, "p", 10, ROJO);
  933.     save_array(active_texbox,cant,'p');
  934.     cant++;
  935.     sig+=10;
  936.     }
  937. else if(event.key.keysym.sym==SDLK_q&EVENTOCLICK)
  938. {
  939.     SDL_printf(sig, sig_y, "q", 10, ROJO);
  940.     save_array(active_texbox,cant,'q');
  941.     cant++;
  942.     sig+=10;
  943.     }
  944. else if(event.key.keysym.sym==SDLK_r&EVENTOCLICK)
  945. {
  946.     SDL_printf(sig, sig_y, "r", 10, ROJO);
  947.     save_array(active_texbox,cant,'r');
  948.     cant++;
  949.     sig+=10;
  950.     }
  951. else if(event.key.keysym.sym==SDLK_s&EVENTOCLICK)
  952. {
  953.     SDL_printf(sig, sig_y, "s", 10, ROJO);
  954.     save_array(active_texbox,cant,'s');
  955.     cant++;
  956.     sig+=10;
  957.     }
  958. else if(event.key.keysym.sym==SDLK_t&EVENTOCLICK)
  959. {
  960.     SDL_printf(sig, sig_y, "t", 10, ROJO);
  961.     save_array(active_texbox,cant,'t');
  962.     cant++;
  963.     sig+=10;
  964.     }
  965. else if(event.key.keysym.sym==SDLK_u&EVENTOCLICK)
  966. {
  967.     SDL_printf(sig, sig_y, "u", 10, ROJO);
  968.     save_array(active_texbox,cant,'u');
  969.     cant++;
  970.     sig+=10;
  971.     }
  972. else if(event.key.keysym.sym==SDLK_v&EVENTOCLICK)
  973. {
  974.     SDL_printf(sig, sig_y, "v", 10, ROJO);
  975.     save_array(active_texbox,cant,'v');
  976.     cant++;
  977.     sig+=10;
  978.     }
  979. else if(event.key.keysym.sym==SDLK_w&EVENTOCLICK)
  980. {
  981.     SDL_printf(sig, sig_y, "w", 10, ROJO);
  982.     save_array(active_texbox,cant,'w');
  983.     cant++;
  984.     sig+=10;
  985.     }
  986. else if(event.key.keysym.sym==SDLK_x&EVENTOCLICK)
  987. {
  988.     SDL_printf(sig, sig_y, "x", 10, ROJO);
  989.     save_array(active_texbox,cant,'x');
  990.     cant++;
  991.     sig+=10;
  992.     }
  993. else if(event.key.keysym.sym==SDLK_y&EVENTOCLICK)
  994. {
  995.     SDL_printf(sig, sig_y, "y", 10, ROJO);
  996.     save_array(active_texbox,cant,'y');
  997.     cant++;
  998.     sig+=10;
  999.     }
  1000. else if(event.key.keysym.sym==SDLK_z&EVENTOCLICK)
  1001. {
  1002.     SDL_printf(sig, sig_y, "z", 10, ROJO);
  1003.     save_array(active_texbox,cant,'z');
  1004.     cant++;
  1005.     sig+=10;
  1006.     }    
  1007. else if(event.key.keysym.sym==SDLK_KP0&EVENTOCLICK)
  1008. {
  1009.     SDL_printf(sig, sig_y, "0", 10, ROJO);
  1010.     save_array(active_texbox,cant,'0');
  1011.     dato_prestamo(active_texbox,0);
  1012.     cant++;
  1013.     sig+=10;
  1014.     }        
  1015. else if(event.key.keysym.sym==SDLK_KP1&EVENTOCLICK)
  1016. {
  1017.     SDL_printf(sig, sig_y, "1", 10, ROJO);
  1018.     save_array(active_texbox,cant,'1');
  1019.     dato_prestamo(active_texbox,1);
  1020.     cant++;
  1021.     sig+=10;
  1022.     }        
  1023. else if(event.key.keysym.sym==SDLK_KP2&EVENTOCLICK)
  1024. {
  1025.     SDL_printf(sig, sig_y, "2", 10, ROJO);
  1026.     save_array(active_texbox,cant,'2');
  1027.     dato_prestamo(active_texbox,2);
  1028.     cant++;
  1029.     sig+=10;
  1030.     }    
  1031. else if(event.key.keysym.sym==SDLK_KP3&EVENTOCLICK)
  1032. {
  1033.     SDL_printf(sig, sig_y, "3", 10, ROJO);
  1034.     save_array(active_texbox,cant,'3');
  1035.     dato_prestamo(active_texbox,3);
  1036.     cant++;
  1037.     sig+=10;
  1038.     }
  1039. else if(event.key.keysym.sym==SDLK_KP4&EVENTOCLICK)
  1040. {
  1041.     SDL_printf(sig, sig_y, "4", 10, ROJO);
  1042.     save_array(active_texbox,cant,'4');
  1043.     dato_prestamo(active_texbox,4);
  1044.     cant++;
  1045.     sig+=10;
  1046.     }
  1047. else if(event.key.keysym.sym==SDLK_KP5&EVENTOCLICK)
  1048. {
  1049.     SDL_printf(sig, sig_y, "5", 10, ROJO);
  1050.     save_array(active_texbox,cant,'5');
  1051.     dato_prestamo(active_texbox,5);
  1052.     cant++;
  1053.     sig+=10;
  1054.     }        
  1055. else if(event.key.keysym.sym==SDLK_KP6&EVENTOCLICK)
  1056. {
  1057.     SDL_printf(sig, sig_y, "6", 10, ROJO);
  1058.     save_array(active_texbox,cant,'6');
  1059.     dato_prestamo(active_texbox,6);
  1060.     cant++;
  1061.     sig+=10;
  1062.     }        
  1063. else if(event.key.keysym.sym==SDLK_KP7&EVENTOCLICK)
  1064. {
  1065.     SDL_printf(sig, sig_y, "7", 10, ROJO);
  1066.     save_array(active_texbox,cant,'7');
  1067.     dato_prestamo(active_texbox,7);
  1068.     cant++;
  1069.     sig+=10;
  1070.     }    
  1071. else if(event.key.keysym.sym==SDLK_KP8&EVENTOCLICK)
  1072. {
  1073.     SDL_printf(sig, sig_y, "8", 10, ROJO);
  1074.     save_array(active_texbox,cant,'8');
  1075.     dato_prestamo(active_texbox, 8);
  1076.     cant++;
  1077.     sig+=10;
  1078.     }
  1079. else if(event.key.keysym.sym==SDLK_KP9&EVENTOCLICK)
  1080. {
  1081.     SDL_printf(sig, sig_y, "9", 10, ROJO);
  1082.     save_array(active_texbox,cant,'9');
  1083.     dato_prestamo(active_texbox, 9);
  1084.     cant++;
  1085.     sig+=10;
  1086.     }    
  1087.     }
  1088. //fin gestion              
  1089.  
  1090. }
  1091. }
  1092. //funcion aloja datos a array !!    
  1093. void save_array(int active_texbox, int cant, char byte)
  1094. {
  1095.  
  1096.     if(active_texbox==NOMBRE)
  1097.     {
  1098.                              usuario.nombre[cant]=byte;
  1099.                              }
  1100.     if(active_texbox==APELLIDO)
  1101.     {
  1102.                              usuario.apellido[cant]=byte;
  1103.                              }
  1104.     if(active_texbox==CEDULA)
  1105.     {
  1106.                              usuario.cedula[cant]=byte;
  1107.                              }
  1108.     if(active_texbox==PRESTMS)
  1109.     {
  1110.                              usuario.prestms[cant]=byte;
  1111.                              contPrestamo++;
  1112.                              }
  1113.     if(active_texbox==BUSCAR_C)
  1114.     {
  1115.                             buscarCedula[cant]=byte;
  1116.                              }
  1117.     if(active_texbox==BUSCACEDULA)
  1118.     {
  1119.                             cedulaPg[cant]=byte;
  1120.                              }                                            
  1121. }
  1122. //calculo de fecha final
  1123. float calculaPrest()
  1124. {
  1125.     int prestamoTomado=0;
  1126.     float media_prestamo=0.0, itbis=0.0, itSumado=0.0;
  1127.  
  1128.     prestamoTomado=sumar(usuario.prest, contPrestamo+1);
  1129.  
  1130.     media_prestamo=prestamoTomado/pagos;
  1131.  
  1132.     itbis=media_prestamo*0.05;
  1133.     itSumado=media_prestamo+itbis;
  1134.  
  1135.     if(prestamoTomado>=10000&prestamoTomado<=20000)
  1136.     {
  1137.     itbis=media_prestamo*0.15;
  1138.     itSumado=media_prestamo+itbis;
  1139.     }
  1140.  
  1141.     if(prestamoTomado>=20000&prestamoTomado<=30000)
  1142.     {
  1143.     itbis=media_prestamo*0.25;
  1144.     itSumado=media_prestamo+itbis;
  1145.     }
  1146.  
  1147.     return itSumado;
  1148.     }
  1149. //calculo fecha final
  1150. void fechaFinal()
  1151. {      
  1152.     int dia=0, mes=0, ano=0, totalF=0, obj=0, objDia=0;
  1153.  
  1154.     totalF=15*pagos;
  1155.  
  1156.     mes=fecha->tm_mon+1;
  1157.     dia=fecha->tm_mday;
  1158.     ano=fecha->tm_year+1900;
  1159.  
  1160.     while(obj<totalF)
  1161.     {
  1162.            if(objDia>=30)
  1163.            {
  1164.                       mes=mes+1;
  1165.                       dia=objDia;
  1166.                       objDia=0;
  1167.  
  1168.                       if(mes>=12)
  1169.                       {
  1170.                                  mes=1;
  1171.                                  ano=ano+1;
  1172.                                  }
  1173.                       }
  1174.            objDia++;                
  1175.            obj++;
  1176.            }
  1177.  
  1178.     limpiarArray(usuario.fFinal,TAM);
  1179.     sprintf(usuario.fFinal, "%i/%i/%i", dia, mes, ano);
  1180.     }
  1181. //escribir en disco
  1182. void save_disk()
  1183. {
  1184.     time_t tiempo; //variable para el tiempo
  1185.  
  1186.     time(&tiempo);//inicilizamos tiempo
  1187.  
  1188.     fecha=localtime(&tiempo);//sacamos valores actuales de tiempo
  1189.  
  1190.     sprintf(usuario.fecha,"%i/%i/%i",fecha->tm_mday,fecha->tm_mon+1,fecha->tm_year+1900);
  1191.  
  1192.     float prestamoCalc=calculaPrest();
  1193.     cuota=atoll(usuario.prestms);
  1194.  
  1195.     sprintf(usuario.prestamoPorCuota,"%f",prestamoCalc);
  1196.     sprintf(usuario.numeroPagos,"%i", pagos);
  1197.  
  1198.     limpiarArray(usuario.fFinal, 7);
  1199.     fechaFinal();
  1200.  
  1201.     limpiarArray(usuario.deuda, TAM);
  1202.     sprintf(usuario.deuda,"%i", cuota);  
  1203.  
  1204.     fdiskW=fopen("fixcom.fix","a");
  1205.  
  1206.     fwrite(&usuario, sizeof(struct user), 1, fdiskW);
  1207.     //limpiamos variables
  1208.     cuota=0;
  1209.     prestamoCalc=0.0;
  1210.     cant=0;
  1211.     contPrestamo=0;
  1212.  
  1213.     //cerramos fichero
  1214.     fclose(fdiskW);
  1215.     }
  1216.  
  1217. void presentar_fecha()
  1218. {
  1219.     time_t tiempo; //variable para el tiempo
  1220.  
  1221.     time(&tiempo);//inicilizamos tiempo
  1222.  
  1223.     struct tm *f=localtime(&tiempo);//sacamos valores actuales de tiempo
  1224.  
  1225.     char fech[10];
  1226.  
  1227.     sprintf(fech,"%i/%i/%i",f->tm_mday,f->tm_mon+1,f->tm_year+1900);
  1228.  
  1229.     SDL_printf(73,108,fech,10,AZUL);
  1230.     }
  1231.  
  1232. void dato_prestamo(int texbox, int dato)
  1233. {
  1234.     if(texbox==PRESTMS)
  1235.     {
  1236.                        usuario.prest[contPrestamo]=dato;
  1237.                        }
  1238.  
  1239.     if(texbox==MONTOPAGO)
  1240.     {
  1241.                             mntPago[mntCount]=dato;
  1242.                             mntCount++;
  1243.                              }
  1244.     }
  1245.  
  1246. int getPos(char *cedulaPago)
  1247. {
  1248.     FILE *dato = fopen("fixcom.fix", "rb");
  1249.     int pos=0;
  1250.     //fseek(dato, 0L, SEEK_SET);
  1251.     verificarFichero(dato,"dato");
  1252.  
  1253.     while(fread(&usuario, sizeof(struct user), 1, dato)!=0)
  1254.     {
  1255.                           pos++;
  1256.                           if(strcmp(cedulaPago, usuario.cedula)==0)
  1257.                           {
  1258.                                                 fclose(dato);
  1259.                                                 return pos;
  1260.                                                 }
  1261.                           }
  1262.     }
  1263.  
  1264. void getPosFich(int pos, FILE *filePtr)
  1265. {
  1266.     fseek(filePtr, pos*sizeof(struct user), SEEK_SET);
  1267.     }
  1268.  
  1269. int mntPagoClt(char *cedula)
  1270. {
  1271.     int prestamoD=0;
  1272.  
  1273.     FILE *fichLeer=fopen("fixcom.fix", "rb");
  1274.  
  1275.     while(fread(&usuario, sizeof(struct user), 1, fichLeer)!=0)
  1276.     {
  1277.     if(strcmp(cedula, usuario.cedula)==0)
  1278.     {
  1279.  
  1280.     fclose(fichLeer);
  1281.  
  1282.     return prestamoD=atoll(usuario.deuda);
  1283.             }
  1284.             }
  1285.     }
  1286.  
  1287.  
  1288.  
  1289.  
  1290.  
En línea

"Si enseñas a pezcar a un niño lo ayudas para toda la vida, si pezcas para alimentarlo lo ayudas por un momento".
durasno


Desconectado Desconectado

Mensajes: 373


Ver Perfil
Re: Aplicacion explota en varios stream (FILE *)
« Respuesta #7 en: 5 Diciembre 2012, 01:29 am »

Citar
Por lo que veo no detecta errores !!!
y este error "Fichero dato: Too many open files" ??? Por el tipo de error te esta fallando el cierre de los archivos ocasionando tener varios abiertos a la vez y seguramente superando a FOPEN_MAX... Revisa esto por ahi sea este el error


Saludos


PD: tambien deberias cambiar lo que te marque antes del fread
En línea

Ahorrate una pregunta, lee el man
Fire544

Desconectado Desconectado

Mensajes: 85


"Escucha el sonido del 0, 1"


Ver Perfil WWW
Re: Aplicacion explota en varios stream (FILE *)
« Respuesta #8 en: 5 Diciembre 2012, 16:23 pm »

Gracias durasno, si claro mira estoy verificando si ocurre algun evento erroneo en el descriptor antes de fread() con la funcion verificaFichero(), que recibe dos argumentos, el FILE* y char*, que es el nombre del descriptor, para poder verificar si devuelve NULL.
En línea

"Si enseñas a pezcar a un niño lo ayudas para toda la vida, si pezcas para alimentarlo lo ayudas por un momento".
rir3760


Desconectado Desconectado

Mensajes: 1.639


Ver Perfil
Re: Aplicacion explota en varios stream (FILE *)
« Respuesta #9 en: 5 Diciembre 2012, 17:42 pm »

naderST y durasno ya te dieron la respuesta: en las dos funciones de tu primer mensaje (getPos y mntPagoClt) cierras el archivo y retornas un valor solo si encuentras el registro buscado, si no existe eso resulta (eventualmente) en el mensaje de error "Too many open files".

Aparte de eso utilizas el operador "&" cuando deberías utilizar "&&", hay que revisar la documentación de SDL ya que este bloque es extremadamente largo:
Código
  1. if(event.key.keysym.sym==SDLK_a&EVENTOCLICK)
  2. {
  3.    SDL_printf(sig, sig_y, "a", 10, ROJO);
  4.    save_array(active_texbox,cant,'a');
  5.    cant++;
  6.    sig+=10;
  7.    }
  8. else if(event.key.keysym.sym==SDLK_b&EVENTOCLICK)
  9. {
  10.    SDL_printf(sig, sig_y, "b", 10, ROJO);
  11.    save_array(active_texbox,cant,'b');
  12.    cant++;
  13.    sig+=10;
  14.    }
  15. else if(event.key.keysym.sym==SDLK_c&EVENTOCLICK)
  16. {
  17.    SDL_printf(sig, sig_y, "c", 10, ROJO);
  18.    save_array(active_texbox,cant,'c');
  19.    cant++;
  20.    sig+=10;
  21.    }
  22.  
  23. /* ... */

Por ultimo tienes otro error lógico en las funciones de posicionamiento en el archivo:
Código
  1. int getPos(char *cedulaPago)
  2. {
  3.   FILE *dato = fopen("fixcom.fix", "rb");
  4.   int pos=0;
  5.  
  6.   //fseek(dato, 0L, SEEK_SET);
  7.   verificarFichero(dato,"dato");
  8.  
  9.   while(fread(&usuario, sizeof(struct user), 1, dato)!=0){
  10.      pos++;
  11.      if(strcmp(cedulaPago, usuario.cedula)==0){
  12.         fclose(dato);
  13.         return pos;
  14.      }
  15.   }
  16. }
  17.  
  18. void getPosFich(int pos, FILE *filePtr)
  19. {
  20.   fseek(filePtr, pos*sizeof(struct user), SEEK_SET);
  21. }
El problema: si el registro buscado es el primero el desplazamiento desde el inicio del archivo (indicado por SEEK_SET) debe ser cero mientras que tu indicas que es uno, mismo caso con cualquier otro registro (debes utilizar indices de posición similares al uso de un array: 0 .. N-1).

Un saludo
En línea

C retains the basic philosophy that programmers know what they are doing; it only requires that they state their intentions explicitly.
--
Kernighan & Ritchie, The C programming language
Páginas: [1] 2 Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Cuda Vs Stream?? STREAM!!
Programación General
APOKLIPTICO 2 8,658 Último mensaje 2 Octubre 2010, 16:59 pm
por APOKLIPTICO
Hacer que una aplicacion aproveche varios nucleos de la CPU
Programación General
crazykenny 7 8,401 Último mensaje 11 Diciembre 2011, 11:20 am
por crazykenny
Soy yo o este programa siempre explota?
Programación C/C++
x64core 3 2,100 Último mensaje 27 Julio 2012, 01:48 am
por david_BS
WinForm Aplicacion para varios Sistemas
Programación C/C++
Jnl 1 2,782 Último mensaje 30 Julio 2012, 21:59 pm
por fary
Una batería de ion de litio explota en un aula hiriendo a varios alumnos
Noticias
wolfbcn 0 1,255 Último mensaje 5 Septiembre 2017, 01:40 am
por wolfbcn
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines