• Sábado 14 de Diciembre de 2024, 19:52

Autor Tema:  Fichero  (Leído 881 veces)

Christian_88

  • Nuevo Miembro
  • *
  • Mensajes: 2
    • Ver Perfil
Fichero
« en: Sábado 16 de Junio de 2007, 13:52 »
0
Hola! Tengo el siguiente programa (incompleto):

Código: Text
  1. /* Banco */
  2.  
  3. #include <stdio.h>
  4. #include <conio.h>
  5. #include <string.h>
  6.  
  7. struct clientes
  8. {
  9.   int cod_cli_mae,telefon;
  10.    char nom_cli[35],dom_cli[35];
  11.    float sal_cli;
  12.  
  13. }
  14. reg1;
  15.  
  16. struct fingyfpag
  17. {
  18.   int cod_cli_mov,cod_suc,cod_prov;
  19.    float imp_ope,tip_oper;
  20. }
  21. reg2;
  22.  
  23. typedef struct
  24. {
  25.   int cod_prov;
  26.    char nom_prov[35];
  27. }
  28. reg3;
  29. reg3 tabla[5];
  30.  
  31. FILE *clientes,*fingyfpag;
  32.  
  33. void main()
  34. {
  35.    int i,mas,a;
  36.    strcpy(tabla[0].nom_prov,"Madrid");
  37.    strcpy(tabla[1].nom_prov,"Barcelona");
  38.    strcpy(tabla[2].nom_prov,"Toledo");
  39.    strcpy(tabla[3].nom_prov,"Avila");
  40.    strcpy(tabla[4].nom_prov,"Sevilla");
  41.   for (i=0;i<=4;i++)
  42.    {
  43.      tabla[i].cod_prov=i;
  44.    }
  45.  
  46.    clientes=fopen("clientes","r+b");
  47.    if(!clientes) clientes=fopen("clientes","w+b");
  48.    printf ("Desea introducir datos en el fichero clientes? 0->SI 1->NO: ");
  49.    scanf ("%d",&mas);
  50.    fflush(stdin);
  51.    printf ("\n");
  52.    while (mas!=1)
  53.    {
  54.     for (i=1000;i<=9999;i++)
  55.      {
  56.          fseek(clientes,i,SEEK_SET);
  57.          if (reg1.cod_cli_mae!=0)
  58.          {
  59.            reg1.cod_cli_mae=i;
  60.           printf ("Codigo del cliente: %d\n",reg1.cod_cli_mae);
  61.           printf ("Introduce el nombre del cliente: ");
  62.           gets (reg1.nom_cli);
  63.            fflush(stdin);
  64.           printf ("Introduce el domicilio del cliente: ");
  65.           gets (reg1.dom_cli);
  66.            fflush(stdin);
  67.           printf ("Introduce el telefono: ");
  68.           scanf ("%d",&reg1.telefon);
  69.            fflush(stdin);
  70.           printf ("Introduce el saldo actual del cliente: ");
  71.           scanf ("%f",&reg1.sal_cli);
  72.            fflush(stdin);
  73.            fseek(clientes,reg1.cod_cli_mae,SEEK_SET);
  74.            fwrite(&reg1,sizeof(reg1),1,clientes);
  75.            printf ("Desea seguir introduciendo datos? 0->SI 1->NO: ");
  76.          scanf ("%d",&mas);
  77.            fflush(stdin);
  78.            printf ("\n");
  79.            if (mas==1)
  80.            {
  81.              i=12000;
  82.            }
  83.          }
  84.      }
  85.    }
  86.  
  87.    printf ("Desea buscar algun cliente? 0->SI 1->NO: ");
  88.    scanf ("%d",&mas);
  89.    fflush(stdin);
  90.    printf ("\n");
  91.    while (mas!=1)
  92.    {
  93.       printf ("Introduce el codigo del cliente a buscar: ");
  94.       scanf ("%d",&a);
  95.       fflush(stdin);
  96.       fseek(clientes,a,SEEK_SET);
  97.       if(fread(&reg1,sizeof(reg1),1,clientes)==1)
  98.       {
  99.          printf ("Nombre: %s\n",reg1.nom_cli);
  100.          printf ("Domicilio: %s\n",reg1.dom_cli);
  101.          printf ("Telefono: %d\n",reg1.telefon);
  102.          printf ("Saldo actual: %2.f\n",reg1.sal_cli);
  103.          printf ("Desea buscar otro cliente? 0->SI 1->NO: ");
  104.        scanf ("%d",&mas);
  105.        printf ("\n");
  106.       }
  107.       else
  108.       {
  109.         printf ("El codigo de cliente introducido no esta dado de alta en el fichero clientes");
  110.       }
  111.    }
  112.    fclose (clientes);
  113. }
  114.  
  115.  
  116.  

Lo que ocurre es que cuando doy de alta un nuevo usuario, no quiero que me machaque uno que ya esté dado de alta. De la forma en que lo tengo, cuando meto un usuario, da igual que ya haya metido otro con codigo 1000, que me lo machaca.

Quiero poder ejecutar una vez el programa, introducir el usuario 1000 con todos sus datos, cerrarlo, abrir de nuevo el programa y que empiece por el 1001. He probado a poner un "if" con el reg1.cod_cli distinto de 0 pero nada... Parece ser como si no estuviesen a cero.

Christian_88

  • Nuevo Miembro
  • *
  • Mensajes: 2
    • Ver Perfil
Re: Fichero
« Respuesta #1 en: Sábado 16 de Junio de 2007, 18:37 »
0
Ideas?

Gracias por adelantado

weps84

  • Miembro MUY activo
  • ***
  • Mensajes: 138
    • Ver Perfil
Re: Fichero
« Respuesta #2 en: Martes 19 de Junio de 2007, 18:26 »
0
yo te aconsejaria trabajar con un archivo independiente que te permita tener guardado el ultimo numero de usuario que fue ingresado, es lo que puedes hacer