Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: ianmorar03 en 17 Abril 2016, 10:17 am



Título: Base de datos c++
Publicado por: ianmorar03 en 17 Abril 2016, 10:17 am
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.
Código:
#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.


Título: Re: Base de datos c++
Publicado por: 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
  1. fstream file("mi_fichero.txt");
  2. file << data[i].nombre << endl;
  3. file.close();


Título: Re: Base de datos c++
Publicado por: ianmorar03 en 17 Abril 2016, 11:25 am
Puedes hacer uso de la librería http://en.cppreference.com/w/cpp/io/basic_fstream
Ejemplo:
Código
  1. fstream file("mi_fichero.txt");
  2. file << data[i].nombre << endl;
  3. file.close();

Sigue sin funcionarme, solo me imprime el ultimo nombre y cedula guardada...


Título: Re: Base de datos c++
Publicado por: Stakewinner00 en 17 Abril 2016, 13:32 pm
pon el nuevo código.


Título: Re: Base de datos c++
Publicado por: ianmorar03 en 17 Abril 2016, 20:35 pm
pon el nuevo código.
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();
}
}


Título: Re: Base de datos c++
Publicado por: Gunhack en 17 Abril 2016, 21:19 pm
El ciclo donde guardas los archivos está mal...
Código
  1. for(int i=0 ; i<cuantos; i++){
  2. fstream file("datos.txt");
  3. file <<"nombre: ";
  4. file <<data[i].nombre<<endl;
  5. file<<"cedula: ";
  6. file <<data[i].numero<<endl;
  7. file.close();
  8. }

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
  1. fstream file("datos.txt"); //a)
  2. for(int i=0 ; i<cuantos; i++){ //b)
  3. file <<data[i].nombre<<endl;
  4. file <<data[i].numero<<endl;
  5. }
  6. file.close();//c)


Título: Re: Base de datos c++
Publicado por: ianmorar03 en 17 Abril 2016, 22:55 pm
El ciclo donde guardas los archivos está mal...
Código
  1. for(int i=0 ; i<cuantos; i++){
  2. fstream file("datos.txt");
  3. file <<"nombre: ";
  4. file <<data[i].nombre<<endl;
  5. file<<"cedula: ";
  6. file <<data[i].numero<<endl;
  7. file.close();
  8. }

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
  1. fstream file("datos.txt"); //a)
  2. for(int i=0 ; i<cuantos; i++){ //b)
  3. file <<data[i].nombre<<endl;
  4. file <<data[i].numero<<endl;
  5. }
  6. file.close();//c)


@gunhack gracias por el codigo, ahora ya se como hacerlo PURA VIDA!


Título: Re: Base de datos c++
Publicado por: HardForo en 17 Abril 2016, 23:58 pm
.


Título: Re: Base de datos c++
Publicado por: Orubatosu en 18 Abril 2016, 13:26 pm
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