Base de datos c++

Iniciado por ianmorar03, 17 Abril 2016, 10:17 AM

0 Miembros y 1 Visitante están viendo este tema.

ianmorar03

Como puedo hacer una base de datos? con la funcion "struct", sin hacer uso de las librerias para c (stdio.h y conio.h) tengo las bases de datos pero ocupo que me imprima todo en un archivo de texto.

#include <iostream>

int main(){

struct datos{
int numero;
string nombre;
};

int cuantos;
cout<<"Cuantas personas quiere?";
cin>>cuantos;

datos *data=new datos[cuantos];

for(int i;i<cuantos;i++){
cout<<"Digite su numero de cedula:"<<i;
cin>>data[i].numero;
cout<<"Digite su nombre:"<<i;
cin>>data[i].nombre;
}
for(int i=0 ; i<cuantos; i++){
cout<<"----------------------------------------------------------------------"<<endl;
cout<<"Nombre: "<<data[i].nombre;
cout<<"Cedula: "<<data[i].numero;
}
}



Si digito 2o mas en la cantidad de cuantas personas, quiero que me imprima en un archivo de texto todas las personas que digite, no se como hacerlo, si me pudieran ayudar seria genial.
Aquellos que estan locos como para pensar que pueden cambiar el mundo , son los que lo hacen.

Stakewinner00

Puedes hacer uso de la librería http://en.cppreference.com/w/cpp/io/basic_fstream
Ejemplo:
Código (cpp) [Seleccionar]
fstream file("mi_fichero.txt");
file << data[i].nombre << endl;
file.close();

ianmorar03

Cita de: Stakewinner00 en 17 Abril 2016, 11:08 AM
Puedes hacer uso de la librería http://en.cppreference.com/w/cpp/io/basic_fstream
Ejemplo:
Código (cpp) [Seleccionar]
fstream file("mi_fichero.txt");
file << data[i].nombre << endl;
file.close();


Sigue sin funcionarme, solo me imprime el ultimo nombre y cedula guardada...
Aquellos que estan locos como para pensar que pueden cambiar el mundo , son los que lo hacen.

Stakewinner00


ianmorar03

Cita de: Stakewinner00 en 17 Abril 2016, 13:32 PM
pon el nuevo código.

struct datos{
int numero;
string nombre;
};

int cuantos;
cout<<"Cuantas personas quiere?";
cin>>cuantos;

datos *data=new datos[cuantos];

for(int i=0 ; i<cuantos ; i++){
cout<<"Digite su numero de cedula:"<<i;
cin>>data[i].numero;
cout<<"Digite su nombre:"<<i;
cin>>data[i].nombre;
}
for(int i=0 ; i<cuantos; i++){
fstream file("datos.txt");
file <<"nombre: ";
file <<data[i].nombre<<endl;
file<<"cedula: ";
file <<data[i].numero<<endl;
file.close();
}
}
Aquellos que estan locos como para pensar que pueden cambiar el mundo , son los que lo hacen.

Gunhack

El ciclo donde guardas los archivos está mal...
Código (cpp) [Seleccionar]
for(int i=0 ; i<cuantos; i++){
fstream file("datos.txt");
file <<"nombre: ";
file <<data[i].nombre<<endl;
file<<"cedula: ";
file <<data[i].numero<<endl;
file.close();
}


Debe de ser así...
a) Primero se declara el fstream fuera del ciclo, si lo pones dentro es como si la inicializaras la variable en cada iteración.

b)Después, si solo quieres guardar los datos para volver a cargarlos luego, solamente debes de guardar el dato en sí, sin ninguna etiqueta antes ("nombre: " y cosas así...), si lo que quieres es crear una salida formateada si debe llevar las etiquetas.

c) Cuando pones "file.close();" estás cerando el buffer de salida, osea cierras el archivo, y si lo haces en cada iteración... pues bueno, como lo volvias a crear, solamente estabas abriendo y cerrando el mismo archivo para guardar un dato por iteración, al final solo se mostraría el ultimo dato ingresado.

Código (cpp) [Seleccionar]

fstream file("datos.txt"); //a)
for(int i=0 ; i<cuantos; i++){ //b)
file <<data[i].nombre<<endl;
file <<data[i].numero<<endl;
}
file.close();//c)

ianmorar03

Cita de: Gunhack en 17 Abril 2016, 21:19 PM
El ciclo donde guardas los archivos está mal...
Código (cpp) [Seleccionar]
for(int i=0 ; i<cuantos; i++){
fstream file("datos.txt");
file <<"nombre: ";
file <<data[i].nombre<<endl;
file<<"cedula: ";
file <<data[i].numero<<endl;
file.close();
}


Debe de ser así...
a) Primero se declara el fstream fuera del ciclo, si lo pones dentro es como si la inicializaras la variable en cada iteración.

b)Después, si solo quieres guardar los datos para volver a cargarlos luego, solamente debes de guardar el dato en sí, sin ninguna etiqueta antes ("nombre: " y cosas así...), si lo que quieres es crear una salida formateada si debe llevar las etiquetas.

c) Cuando pones "file.close();" estás cerando el buffer de salida, osea cierras el archivo, y si lo haces en cada iteración... pues bueno, como lo volvias a crear, solamente estabas abriendo y cerrando el mismo archivo para guardar un dato por iteración, al final solo se mostraría el ultimo dato ingresado.

Código (cpp) [Seleccionar]

fstream file("datos.txt"); //a)
for(int i=0 ; i<cuantos; i++){ //b)
file <<data[i].nombre<<endl;
file <<data[i].numero<<endl;
}
file.close();//c)



@gunhack gracias por el codigo, ahora ya se como hacerlo PURA VIDA!
Aquellos que estan locos como para pensar que pueden cambiar el mundo , son los que lo hacen.

HardForo

#7
.
HardForo:  foro de Hardware y programación

Se buscan Mods y colaboradores *

Orubatosu

Si piensas hacer una base de datos en C++, sería interesante que mirases las bibliotecas de la STD, donde hay contenedores que te facilitarían buena parte del trabajo.

Por ejemplo la clase VECTOR, LIST y MAP.

Sobre todo este último, ya que tienes "hecho" el indexar a mucha velocidad, el acceder a elementos, borrarlos, insertar, etc.

Vamos, que para que "reinventar la rueda" si eso ya está hecho
"When People called me freak, i close my eyes and laughed, because they are blinded to happiness"
Hideto Matsumoto 1964-1998