• Viernes 15 de Noviembre de 2024, 10:43

Autor Tema:  Duda C++ Base De Datos  (Leído 1800 veces)

M_eta_L

  • Nuevo Miembro
  • *
  • Mensajes: 2
    • Ver Perfil
Duda C++ Base De Datos
« en: Miércoles 7 de Julio de 2004, 00:44 »
0
Hola estoy intentando armar mi primera base de datos escrita en C++ y tengo una consulta , como van a poder ver en el metodo registros puedo inscribir 30 clientes con sus respectivos nombres, direccion, rut, etc. que quedan guardados en el archivo "clientes.txt" , estos datos quedan guardados en sus repectivas variables cliente.nombre , clienteapellidop , etc ademas poseo una funcion de busqueda de clientes por nombre o rut hasta ahi todo funciona bien pero cuando cierro el programa y abro denuevo y quiero buscar a un cliente ya registrado y no me muestra sus datos , el error esta en que al reiniciar el programa me reescribe las variables cliente.nombre , clienteapellidop , etc ,en esto me he quedado pegado su buen rato , alguien me podrian aconsejar algo con respecto a esto , aqui publico el codigo :

Código: Text
  1.  
  2. void apc::registros()    
  3. {
  4.    for(i=0;i<tam;i++)   // tam=30 clientes.
  5.        if(!*cliente[i].nombre)
  6.        break;
  7.        if(i==tam)
  8.        {
  9.            cout<<"Ya tienes 30 usuarios registrados\n";
  10.            getch();
  11.        }
  12.  
  13.    if((fp=fopen("clientes.txt","at"))==NULL)
  14.        {
  15.            cout<<"No se puede abrir el archivo";
  16.        }
  17.  
  18.    setfillstyle(1,0);
  19.    bar(110,110,530,371);
  20.    setcolor(15);
  21.    rectangle(109,109,531,372);
  22.    
  23.    gotoxy(16,9);cout<<"Nombre    : ";
  24.    cin>>cliente[i].nombre;
  25.    gotoxy(16,10.5);cout<<"ApellidoP : ";
  26.    cin>>cliente[i].apellidop;
  27.    gotoxy(16,11.5);cout<<"ApellidoM : ";
  28.    cin>>cliente[i].apellidom;
  29.    gotoxy(16,12.5);cout<<"Direccion : ";
  30.    cin>>cliente[i].direccion;
  31.    gotoxy(16,13.5);cout<<"Comuna    : ";
  32.    cin>>cliente[i].comuna;
  33.    gotoxy(16,14.5);cout<<"Rut       : ";
  34.    cin>>cliente[i].rut;
  35.    gotoxy(16,15.5);cout<<"Vehiculo  : ";
  36.    cin>>cliente[i].vehiculo;
  37.    gotoxy(16,16.5);cout<<"A¤o       : ";
  38.    cin>>cliente[i].amo;
  39.    gotoxy(16,17.5);cout<<"Patente   : ";
  40.    cin>>cliente[i].patente;
  41.  
  42.    if(fwrite(cliente[i].nombre,sizeof(cliente[i].nombre),1,fp)!=1)
  43.    printf("Error al intentar escribir en archivo");
  44.    fwrite(cliente[i].apellidop,sizeof(cliente[i].apellidop),1,fp);
  45.    fwrite(cliente[i].apellidom,sizeof(cliente[i].apellidom),1,fp);
  46.    fwrite(cliente[i].direccion,sizeof(cliente[i].direccion),1,fp);
  47.    fwrite(cliente[i].comuna,sizeof(cliente[i].comuna),1,fp);
  48.    fwrite(cliente[i].rut,sizeof(cliente[i].rut),1,fp);
  49.    fwrite(cliente[i].vehiculo,sizeof(cliente[i].vehiculo),1,fp);
  50.    fwrite(cliente[i].amo,sizeof(cliente[i].amo),1,fp);
  51.    fwrite(cliente[i].patente,sizeof(cliente[i].patente),1,fp);
  52.  
  53.    fclose(fp);
  54.    menu();
  55.    botones();
  56.    mver();
  57.  
  58. }
  59.  
  60. void apc::busca()
  61. {
  62.    cleardevice();
  63.    int b;
  64.    gotoxy(1,1);
  65.    cout<<"Introduzca el nombre del cliente : ";
  66.    cin>>seeker; // variable que guarda el nombre del cliente
  67.  
  68.    for(i=0;i<tam;i++)
  69.   {
  70.   b=strcmp(seeker,cliente[i].rut);
  71.   if (b==0)
  72.   {
  73.   rectangle(109,109,531,372);
  74.   gotoxy(16,9);cout<<"Nombre    : "<<cliente [i].nombre;
  75.   gotoxy(16,10.5);cout<<"ApellidoP : "<<cliente  [i].apellidop;
  76.   gotoxy(16,11.5);cout<<"ApellidoM : "<<cliente[i].apellidom;
  77.   gotoxy(16,12.5);cout<<"Direccion : "<<cliente[i].direccion;
  78.   gotoxy(16,13.5);cout<<"Comuna    : "<<cliente[i].comuna;
  79.   gotoxy(16,14.5);cout<<"Rut       : "<<cliente[i].rut;
  80.   gotoxy(16,15.5);cout<<"Vehiculo  : "<<cliente[i].vehiculo;
  81.   gotoxy(16,16.5);cout<<"A¤o       : "<<cliente[i].amo;
  82.   gotoxy(16,17.5);cout<<"Patente   : "<<cliente[i].patente;
  83.  
  84.   }//cierra if
  85.  
  86.   }//cierra for
  87.  
  88. }
  89.  
  90.  
  91.  

salu2.....

Electroduende

  • Miembro activo
  • **
  • Mensajes: 30
    • Ver Perfil
Re: Duda C++ Base De Datos
« Respuesta #1 en: Lunes 26 de Julio de 2004, 15:18 »
0
yo me ahorraria tantas llamadas a fwrite y escribiria toda la estructura de una sola vez con fwrite y lo mismo para lerla, asi te aseguras que se guarda toda la estructura con su formato.

avis_phoenix

  • Miembro activo
  • **
  • Mensajes: 96
  • Nacionalidad: mx
    • Ver Perfil
Re: Duda C++ Base De Datos
« Respuesta #2 en: Sábado 31 de Julio de 2004, 13:24 »
0
HOLA!! bueno te pongo aquí un ejemplo de más omenos lo que tu quieres hacer solo que con listas doblemente enlazadas (un metodo propuesto púedes usar el que más te convenga) con la ventaja de que puedes tener tantos registros necesites y recuperarlos perfectamente,corre perfectamente en Borland C++ (no es necesario que sea el builder puede ser el turbo c++ u otro c++ menos visual c++ solo pro el detalle del gotoxy) aca te pongo el codigo por si te intereza:
Código: Text
  1.  
  2. /*Este programa es un ejemplo de base de datos primitivos muy a mi estilo*/
  3. //Una lista doblemente enlazada   Ejemplo
  4. //Probado bajo Borland C++ Builder 6 con Code Guard y full debug
  5. //inserta nombres en la ultima parte
  6. //borra nombres sin importar la posicion
  7. //muestra los nombres en retroceso y en anverso
  8. //Guarda la lista en modo texto en un archivo
  9. //carga la lista del archivo
  10.  
  11. #include <stdio.h>
  12. #include <alloc.h>
  13. #include <conio.h>
  14. #include <string.h>
  15. #include <stdlib.h>
  16.  
  17. // ------------------------
  18. void insertar(void);
  19. void extraer(void);
  20. void visualizar(void);
  21. void guardar(void);
  22. void cargar(void);
  23.  
  24. // -------------------------
  25.  struct listad
  26.  {
  27.   char prod[20];
  28.   int cant;
  29.   int desc;
  30.   int precio;
  31.   struct listad *ant;
  32.   struct listad *sig;
  33.  } *lista=NULL, *ante=NULL, *viz=NULL, *temp=NULL;
  34.  struct DB
  35.  {
  36.   char p[20];
  37.   int c;
  38.   int d;
  39.   int pr;
  40.  }*BD;
  41.  int n=0;
  42.  //-------------------------
  43.  
  44.  main()
  45.  {
  46.   char op;
  47.   do
  48.   {
  49.     clrscr();
  50.     gotoxy(30,8);
  51.     printf("1.- Insertar");
  52.     gotoxy(30,10);
  53.     printf("2.-Borrar");
  54.     gotoxy(30,12);
  55.     printf("3.-Ver lista");
  56.     gotoxy(30,14);
  57.     printf("4.-Guardar lista");
  58.     gotoxy(30,16);
  59.     printf("5.-Cargar archivo");
  60.     op = getch();
  61.     switch (op)
  62.     {
  63.       case '1':
  64.         insertar();
  65.         break;
  66.       case '2':
  67.         extraer();
  68.         break;
  69.       case '3':
  70.         visualizar();
  71.         break;
  72.       case '4':
  73.         guardar();
  74.         break;
  75.       case '5':
  76.         cargar();
  77.  
  78.     }
  79.   }while (op != 27);
  80.        lista = ante;
  81.        while(lista!=NULL)
  82.        {
  83.     ante = lista;
  84.     lista = lista->ant;
  85.     free(ante);
  86.        }
  87.        free(lista);
  88.        free(ante);
  89.        free(viz);
  90.        free(temp);
  91.        return 0;
  92.  }
  93.  
  94.  //Ahora si a empezar
  95. //-----------------------------------------------
  96. void insertar(void)
  97. {
  98.   //insertamos un elemento en la lista
  99.   clrscr();
  100.   lista = (struct listad *)malloc(sizeof(struct listad));
  101.   n = n+1;
  102.   printf("Escribe el producto %d: ",n);
  103.   gets(lista->prod);
  104.   printf("Escribe la cantidad %d: ",n);
  105.   scanf("%d",&lista->cant);
  106.   printf("Escribe el Descuento %d: ",n);
  107.   scanf("%d",&lista->desc);
  108.   printf("Escribe el precio %d: ",n);
  109.   scanf("%d",&lista->precio);
  110.   lista->sig = NULL;
  111.   if (ante == NULL)
  112.   {
  113.     lista->ant = NULL;
  114.     ante = lista;
  115.   }
  116.   else
  117.   {
  118.     lista->ant = ante;
  119.     ante->sig = lista;
  120.     ante = lista;
  121.   }
  122. }
  123.  
  124. //------------------------------------------------
  125. void extraer(void)
  126. {
  127.   //borramos un elemento de la lista
  128.   char tempo[10];
  129.   if (ante == NULL)
  130.     return;
  131.   clrscr();
  132.   printf("Escribe que producto quieres borrar (junto con su descuento, precio y cantidad) : ");
  133.   gets(tempo);
  134.   lista = ante;
  135.   while(lista !=NULL)
  136.   {
  137.     if(strcmp(lista->prod,tempo)== 0)
  138.     {
  139.       if (strcmp(ante->prod, tempo)==0)
  140.         ante = lista->ant;
  141.       viz = lista->ant;
  142.       temp = lista->sig;
  143.       if (viz == NULL && temp == NULL)
  144.       {
  145.         free(lista);
  146.         ante = NULL;
  147.         return;
  148.       }
  149.       free(lista);
  150.       if (temp != NULL && viz != NULL)
  151.         viz->sig = temp;
  152.       else if (temp == NULL)
  153.         viz->sig = NULL;
  154.       if (temp != NULL)
  155.         temp->ant = viz;
  156.       else
  157.         temp = viz;
  158.       if (viz != NULL)
  159.         lista = viz;
  160.       else
  161.         lista = temp;
  162.       printf("Fue eliminado %s\n",tempo);
  163.     }
  164.     lista = lista->ant;
  165.   }
  166.   printf("se termino");
  167.   getch();
  168. }
  169. //--------------------------------------------------
  170. void visualizar (void)
  171. {
  172.   //vemos que hay en la lista
  173.   if (ante == NULL)
  174.     return;
  175.   lista = ante;
  176.   clrscr();
  177.   printf("Producto  Cantidad  Descuento  Precio\n");
  178.   while(lista!=NULL)
  179.   {
  180.     printf("%s  %d  %d  %d\n",lista->prod,lista->cant,lista->desc,lista->precio);
  181.     lista=lista->ant;
  182.   }
  183.   getch();
  184. }
  185. //---------------------------------------------------
  186.  
  187. //---------------------------------------------------
  188.  
  189. void guardar (void)
  190. {
  191.   //esta funci¢n guardara en un archivo la lista
  192.   //primero la muestra (solo para acomodar el puntero)
  193.   if (ante==NULL)
  194.     return;
  195.   clrscr();
  196.   //ahora si
  197.   FILE *archivo;
  198.   if((archivo=fopen("Inventario.bdc","wb"))!=NULL)
  199.   {
  200.     lista = ante;
  201.     while(lista!=NULL)
  202.     {
  203.       strcpy(BD->p,lista->prod);
  204.       BD->c = lista->cant;
  205.       BD->d = lista->desc;
  206.       BD->pr = lista->precio;
  207.       printf("%s",lista->prod);
  208.       fwrite(BD, sizeof(struct DB), 1, archivo);
  209.       lista=lista->ant;
  210.     }
  211.     fclose(archivo);
  212.     printf("\nLa Base de Datos fue guardado con exito");
  213.     getch();
  214.   }
  215.   else
  216.   {
  217.     fclose(archivo);
  218.     printf("Error al intentar crear la base de datos.");
  219.     getch();
  220.     exit(1);
  221.   }
  222. }
  223. //--------------------------------------------------------------------------
  224. void cargar(void)
  225. {
  226.   FILE *archivo1;
  227.   clrscr();
  228.   if((archivo1=fopen("Inventario.bdc","rb"))!=NULL)
  229.   {
  230.     do
  231.     {
  232.       lista = (struct listad *)malloc(sizeof(struct listad));
  233.       fread(BD,sizeof(struct DB),1,archivo1);
  234.       if(feof(archivo1))
  235.       {
  236.         free(BD);
  237.         free(lista);
  238.         continue;
  239.       }
  240.       strcpy(lista->prod,BD->p);
  241.       printf("%s",BD->p);
  242.       lista->cant = BD->c;
  243.       lista->desc = BD->d;
  244.       lista->precio = BD->pr;
  245.       lista->sig = NULL;
  246.       if (ante == NULL)
  247.       {
  248.         lista->ant = NULL;
  249.         ante = lista;
  250.       }
  251.       else
  252.       {
  253.         lista->ant = ante;
  254.         ante->sig = lista;
  255.         ante = lista;
  256.       }
  257.     }while(!feof(archivo1) && ante != NULL);
  258.     fclose(archivo1);
  259.     printf("\nLa Base de Datos fue cargado con Exito.Ahora te la mostraremos\nPresiona una tecla para continuar");
  260.     getch();
  261.     visualizar();
  262.   }
  263.   else
  264.   {
  265.     fclose(archivo1);
  266.     printf("Error al intentar abrir la base de datos");
  267.     getch();
  268.     exit(1);
  269.   }
  270. }
  271.  
  272.  
espero que te sirva de algo.
"La envidia en los hombres muestra cuán desdichados se sienten, y su constante atención a lo que hacen o dejan de hacer los demás, muestran cuánto se aburren." "Las religiones, como las luciérnagas, necesitan de oscuridad para brillar." "Los hombres vulgares han inventado la vida en sociedad porque les es más fácil soportar a los demás que soportarse a sí mismos." "Sólo es libre aquello que existe por las necesidades de su propia naturaleza y cuyos actos se originan exclusivamente dentro de sí." "La experiencia nos ha demostrado que a la persona no le resulta nada más difícil de dominar que su lengua." "La madurez del hombre es haber vuelto a encontrar la seriedad con la que jugaba cuando era niño." "Los monos son demasiado buenos para que el hombre pueda descender de ellos." "El hombre, en su orgullo, creó a Dios a su imagen y semejanza" "Lo que hacemos no es nunca comprendido, y siempre es acogido sólo por los elogios o por la crítica."

M_eta_L

  • Nuevo Miembro
  • *
  • Mensajes: 2
    • Ver Perfil
Re: Duda C++ Base De Datos
« Respuesta #3 en: Jueves 5 de Agosto de 2004, 00:51 »
0
Gracias por tu respuesta , le cambie algunas cosas pero me sirvio bastante Salu2.......