Lunes 16 de Diciembre de 2024, 06:25
SoloCodigo
Bienvenido(a),
Visitante
. Por favor,
ingresa
o
regístrate
.
¿Perdiste tu
email de activación?
Inicio
Foros
Chat
Ayuda
Buscar
Ingresar
Registrarse
SoloCodigo
»
Foros
»
Programación General
»
C/C++
(Moderador:
Eternal Idol
) »
Duda C++ Base De Datos
« anterior
próximo »
Imprimir
Páginas: [
1
]
Autor
Tema: Duda C++ Base De Datos (Leído 1816 veces)
M_eta_L
Nuevo Miembro
Mensajes: 2
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 , cliente
apellidop , 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 , cliente
apellidop , 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
void apc::registros()
{
for(i=0;i<tam;i++) // tam=30 clientes.
if(!*cliente[i].nombre)
break;
if(i==tam)
{
cout<<"Ya tienes 30 usuarios registrados\n";
getch();
}
if((fp=fopen("clientes.txt","at"))==NULL)
{
cout<<"No se puede abrir el archivo";
}
setfillstyle(1,0);
bar(110,110,530,371);
setcolor(15);
rectangle(109,109,531,372);
gotoxy(16,9);cout<<"Nombre : ";
cin>>cliente[i].nombre;
gotoxy(16,10.5);cout<<"ApellidoP : ";
cin>>cliente[i].apellidop;
gotoxy(16,11.5);cout<<"ApellidoM : ";
cin>>cliente[i].apellidom;
gotoxy(16,12.5);cout<<"Direccion : ";
cin>>cliente[i].direccion;
gotoxy(16,13.5);cout<<"Comuna : ";
cin>>cliente[i].comuna;
gotoxy(16,14.5);cout<<"Rut : ";
cin>>cliente[i].rut;
gotoxy(16,15.5);cout<<"Vehiculo : ";
cin>>cliente[i].vehiculo;
gotoxy(16,16.5);cout<<"A¤o : ";
cin>>cliente[i].amo;
gotoxy(16,17.5);cout<<"Patente : ";
cin>>cliente[i].patente;
if(fwrite(cliente[i].nombre,sizeof(cliente[i].nombre),1,fp)!=1)
printf("Error al intentar escribir en archivo");
fwrite(cliente[i].apellidop,sizeof(cliente[i].apellidop),1,fp);
fwrite(cliente[i].apellidom,sizeof(cliente[i].apellidom),1,fp);
fwrite(cliente[i].direccion,sizeof(cliente[i].direccion),1,fp);
fwrite(cliente[i].comuna,sizeof(cliente[i].comuna),1,fp);
fwrite(cliente[i].rut,sizeof(cliente[i].rut),1,fp);
fwrite(cliente[i].vehiculo,sizeof(cliente[i].vehiculo),1,fp);
fwrite(cliente[i].amo,sizeof(cliente[i].amo),1,fp);
fwrite(cliente[i].patente,sizeof(cliente[i].patente),1,fp);
fclose(fp);
menu();
botones();
mver();
}
void apc::busca()
{
cleardevice();
int b;
gotoxy(1,1);
cout<<"Introduzca el nombre del cliente : ";
cin>>seeker; // variable que guarda el nombre del cliente
for(i=0;i<tam;i++)
{
b=strcmp(seeker,cliente[i].rut);
if (b==0)
{
rectangle(109,109,531,372);
gotoxy(16,9);cout<<"Nombre : "<<cliente [i].nombre;
gotoxy(16,10.5);cout<<"ApellidoP : "<<cliente [i].apellidop;
gotoxy(16,11.5);cout<<"ApellidoM : "<<cliente[i].apellidom;
gotoxy(16,12.5);cout<<"Direccion : "<<cliente[i].direccion;
gotoxy(16,13.5);cout<<"Comuna : "<<cliente[i].comuna;
gotoxy(16,14.5);cout<<"Rut : "<<cliente[i].rut;
gotoxy(16,15.5);cout<<"Vehiculo : "<<cliente[i].vehiculo;
gotoxy(16,16.5);cout<<"A¤o : "<<cliente[i].amo;
gotoxy(16,17.5);cout<<"Patente : "<<cliente[i].patente;
}//cierra if
}//cierra for
}
salu2.....
Tweet
Electroduende
Miembro activo
Mensajes: 30
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:
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
/*Este programa es un ejemplo de base de datos primitivos muy a mi estilo*/
//Una lista doblemente enlazada Ejemplo
//Probado bajo Borland C++ Builder 6 con Code Guard y full debug
//inserta nombres en la ultima parte
//borra nombres sin importar la posicion
//muestra los nombres en retroceso y en anverso
//Guarda la lista en modo texto en un archivo
//carga la lista del archivo
#include <stdio.h>
#include <alloc.h>
#include <conio.h>
#include <string.h>
#include <stdlib.h>
// ------------------------
void insertar(void);
void extraer(void);
void visualizar(void);
void guardar(void);
void cargar(void);
// -------------------------
struct listad
{
char prod[20];
int cant;
int desc;
int precio;
struct listad *ant;
struct listad *sig;
} *lista=NULL, *ante=NULL, *viz=NULL, *temp=NULL;
struct DB
{
char p[20];
int c;
int d;
int pr;
}*BD;
int n=0;
//-------------------------
main()
{
char op;
do
{
clrscr();
gotoxy(30,8);
printf("1.- Insertar");
gotoxy(30,10);
printf("2.-Borrar");
gotoxy(30,12);
printf("3.-Ver lista");
gotoxy(30,14);
printf("4.-Guardar lista");
gotoxy(30,16);
printf("5.-Cargar archivo");
op = getch();
switch (op)
{
case '1':
insertar();
break;
case '2':
extraer();
break;
case '3':
visualizar();
break;
case '4':
guardar();
break;
case '5':
cargar();
}
}while (op != 27);
lista = ante;
while(lista!=NULL)
{
ante = lista;
lista = lista->ant;
free(ante);
}
free(lista);
free(ante);
free(viz);
free(temp);
return 0;
}
//Ahora si a empezar
//-----------------------------------------------
void insertar(void)
{
//insertamos un elemento en la lista
clrscr();
lista = (struct listad *)malloc(sizeof(struct listad));
n = n+1;
printf("Escribe el producto %d: ",n);
gets(lista->prod);
printf("Escribe la cantidad %d: ",n);
scanf("%d",&lista->cant);
printf("Escribe el Descuento %d: ",n);
scanf("%d",&lista->desc);
printf("Escribe el precio %d: ",n);
scanf("%d",&lista->precio);
lista->sig = NULL;
if (ante == NULL)
{
lista->ant = NULL;
ante = lista;
}
else
{
lista->ant = ante;
ante->sig = lista;
ante = lista;
}
}
//------------------------------------------------
void extraer(void)
{
//borramos un elemento de la lista
char tempo[10];
if (ante == NULL)
return;
clrscr();
printf("Escribe que producto quieres borrar (junto con su descuento, precio y cantidad) : ");
gets(tempo);
lista = ante;
while(lista !=NULL)
{
if(strcmp(lista->prod,tempo)== 0)
{
if (strcmp(ante->prod, tempo)==0)
ante = lista->ant;
viz = lista->ant;
temp = lista->sig;
if (viz == NULL && temp == NULL)
{
free(lista);
ante = NULL;
return;
}
free(lista);
if (temp != NULL && viz != NULL)
viz->sig = temp;
else if (temp == NULL)
viz->sig = NULL;
if (temp != NULL)
temp->ant = viz;
else
temp = viz;
if (viz != NULL)
lista = viz;
else
lista = temp;
printf("Fue eliminado %s\n",tempo);
}
lista = lista->ant;
}
printf("se termino");
getch();
}
//--------------------------------------------------
void visualizar (void)
{
//vemos que hay en la lista
if (ante == NULL)
return;
lista = ante;
clrscr();
printf("Producto Cantidad Descuento Precio\n");
while(lista!=NULL)
{
printf("%s %d %d %d\n",lista->prod,lista->cant,lista->desc,lista->precio);
lista=lista->ant;
}
getch();
}
//---------------------------------------------------
//---------------------------------------------------
void guardar (void)
{
//esta funci¢n guardara en un archivo la lista
//primero la muestra (solo para acomodar el puntero)
if (ante==NULL)
return;
clrscr();
//ahora si
FILE *archivo;
if((archivo=fopen("Inventario.bdc","wb"))!=NULL)
{
lista = ante;
while(lista!=NULL)
{
strcpy(BD->p,lista->prod);
BD->c = lista->cant;
BD->d = lista->desc;
BD->pr = lista->precio;
printf("%s",lista->prod);
fwrite(BD, sizeof(struct DB), 1, archivo);
lista=lista->ant;
}
fclose(archivo);
printf("\nLa Base de Datos fue guardado con exito");
getch();
}
else
{
fclose(archivo);
printf("Error al intentar crear la base de datos.");
getch();
exit(1);
}
}
//--------------------------------------------------------------------------
void cargar(void)
{
FILE *archivo1;
clrscr();
if((archivo1=fopen("Inventario.bdc","rb"))!=NULL)
{
do
{
lista = (struct listad *)malloc(sizeof(struct listad));
fread(BD,sizeof(struct DB),1,archivo1);
if(feof(archivo1))
{
free(BD);
free(lista);
continue;
}
strcpy(lista->prod,BD->p);
printf("%s",BD->p);
lista->cant = BD->c;
lista->desc = BD->d;
lista->precio = BD->pr;
lista->sig = NULL;
if (ante == NULL)
{
lista->ant = NULL;
ante = lista;
}
else
{
lista->ant = ante;
ante->sig = lista;
ante = lista;
}
}while(!feof(archivo1) && ante != NULL);
fclose(archivo1);
printf("\nLa Base de Datos fue cargado con Exito.Ahora te la mostraremos\nPresiona una tecla para continuar");
getch();
visualizar();
}
else
{
fclose(archivo1);
printf("Error al intentar abrir la base de datos");
getch();
exit(1);
}
}
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
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.......
Imprimir
Páginas: [
1
]
« anterior
próximo »
SoloCodigo
»
Foros
»
Programación General
»
C/C++
(Moderador:
Eternal Idol
) »
Duda C++ Base De Datos