Ayuda base de datos con archivos

Iniciado por CoolTesting, 30 Abril 2014, 03:26 AM

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

CoolTesting

Buenas a todos espero que estén bien, hoy recurro a ustedes para pedirles una ayuda con un código que tengo creando una base de datos en C++, o eso pienso que estoy creando (xD). Bueno después de largo tiempo de pensar (Soy nuevo en C++) tengo un error que quisiera que me ayuden a solucionar, aquí os dejo mi código y si me pudieran dar algunas ideas por favor, miren:
Código (cpp) [Seleccionar]

#include <iostream>
#include <windows.h>
#include <fstream>
#include <stdlib.h>
using namespace std;
void CreateDB();
void viewDB();
int main()
{
SetConsoleTitleA("DataBase");
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),7);
char BOOL[1];
cout <<"Welcome DataBase" <<endl;
cout <<"1 To view DataBase, 2 To Add new user in DataBase: ";

cin >> BOOL;

if (BOOL[0] =='1')
{
  viewDB();        
           
}else if(BOOL[0]=='2')
{
  CreateDB();
     
}
else
{
    SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),4);
    cout <<"These data are unknown" <<endl;
    Sleep(1500);
    system("cls");
   
    main();
   
}
cin.get();
return 0;


}
void viewDB()
{
    //Aún sin crear.
       
}
void CreateDB()
{
 string User="";  
 system("cls");
 cout <<"Welcome to DataBase enter a name: ";
 cin >> User;
 
 int i;

//Buscador que "NO FUNCIONA"


   
}

Donde dice //BUSCADOR QUE "NO FUNCIONA" es porque he intentado crear un código que aumente y que vaya buscando en la variable a ver si lo encuentra, para eso usé el ciclo for pero como no dió resultado no lo puse, ahora bien aquí lo pongo para que vean del error que hablo, código:

for (i=0; i<1000; i++)
{
ifstream My_DATA(i);
No me permite guardar un entero como archivo < D:
Supongo que ya saben lo que viene aqui.. solo quiero una ayuda para poder crear un archivo con enteros, ya que una vez este entero vaya incrementado va a ir buscando y si no lo encuentra crea uno nuevo (según yo en forma de ID)

}


¿Que porqué mostré todo el código si solo era la última linea que quería saber?

- Porque quiero que tengan la idea exacta de lo que estoy haciendo y si el código tiene algo "EXTRAÑO" por favor ayuden, esto no es un proyecto escolar ni nada, fue pura meta que me propuse pero tengo ese error, de ante mano muchisimas gracias por tratar de ayudar.

El ganador es el que sabe perder.

eferion

Recuerda que ifstream está pensado para realizar lecturas en ficheros... para las escrituras deberás utilizar ofstream.

Si miras documentación acerca de la clase ifstream ( en este mundillo es imprescindible saber cómo se usan las cosas ), verás que tiene los siguientes constructores:

Código (cpp) [Seleccionar]

ifstream();

explicit ifstream (const char* filename, ios_base::openmode mode = ios_base::in);

explicit ifstream (const string& filename, ios_base::openmode mode = ios_base::in);

ifstream (ifstream&& x);


Tienes 3 formas básicas de abrir un "lector" de archivos... pero en ninguna de ellas hay que pasar el entero a localizar como argumento.

Básicamente hay dos formas de abrir el fichero:

1. Crear el stream utilizando el constructor por defecto, indicarle el fichero destino y forzar su apertura:

Código (cpp) [Seleccionar]

ifstream stream;
stream.open( "fichero.txt", ofstream::in);


2. Al crear el stream, pasarle el fichero destino.

Código (cpp) [Seleccionar]

ifstream stream( "fichero.txt", ofstream::in);


Una vez realizado esto ya puedes leer el stream. Ten en cuenta que no sabes, a priori, dónde se encuentra almacenado cada dato...

Código (cpp) [Seleccionar]

istream& operator>> (bool& val);
istream& operator>> (short& val);
istream& operator>> (unsigned short& val);
istream& operator>> (int& val);
istream& operator>> (unsigned int& val);
istream& operator>> (long& val);
istream& operator>> (unsigned long& val);
istream& operator>> (long long& val);
istream& operator>> (unsigned long long& val);
istream& operator>> (float& val);
istream& operator>> (double& val);
istream& operator>> (long double& val);
istream& operator>> (void*& val);

int get();
istream& get (char& c);
istream& get (char* s, streamsize n);
istream& get (char* s, streamsize n, char delim);

istream& getline (char* s, streamsize n );
istream& getline (char* s, streamsize n, char delim );

istream& read (char* s, streamsize n);

streamsize readsome (char* s, streamsize n);


No voy a explicar el funcionamiento de cada una, que son bastantes y para eso está la documentación. Tampoco puedo ponerte la forma correcta de leer tu fichero porque se desconoce información tan básica como su formato y estructura. Pero vamos, que leer del fichero puede ser algo tan sencillo como:

* Usar el operador de extracción '>>':

Código (cpp) [Seleccionar]

stream >> numero;


* Usar el método 'get' (solo sirve con caracteres sueltos):

Código (cpp) [Seleccionar]

// Este metodo tiene mas sentido si lo metes dentro de un for
char c;
stream.get( c );


* Usar el método 'read' (pensado para leer ficheros binarios):

Código (cpp) [Seleccionar]

int numero;
stream.read( (char*)&numero, sizeof(numero) );

 

CoolTesting

Gracias, recien hoy leo tu respuesta pero ya lo resolví de otra forma mira como lo hice:


Código (cpp) [Seleccionar]


#include <iostream>
#include <windows.h>
#include <fstream>
#include <stdlib.h>
using namespace std;
void CreateDB();
void viewDB();
int main()
{
system("@echo off");
system("cls");
SetConsoleTitleA("DataBase CoolTesting");
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),7);
char BOOL[1];
cout <<"Welcome DataBase" <<endl;
cout <<"1 To view DataBase, 2 To Add new user in DataBase: ";

cin >> BOOL;

if (BOOL[0] =='1')
{
   viewDB();         
           
}else if(BOOL[0]=='2')
{
   CreateDB();
     
}
else
{
     SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),4);
     cout <<"These data are unknown" <<endl;
     Sleep(1500);
     system("cls");
     
     main();
     
}
cin.get();
return 0;


}
void viewDB()
{
  char S0[20]="";
  char S1[20]="";
  char S2[20]="";
  char S3[20]="";
  char S4[20]="";
  ifstream File0("0");
  ifstream File1("1");
  ifstream File2("2");
  ifstream File3("3");
  ifstream File4("4");
 
 
  if (File0 == false && File1 == false && File2 == false && File3 == false && File4 == false)
  {
     SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),4);
     cout <<"No found DataBase" <<endl;
     Sleep(2000);
     CreateDB();                   
  }
 
  bool Comp; 
  int i;
   SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),10);
   cout <<"Users of DataBase:" <<endl;
  SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),7);
  for (i=0; i<=6; i++)
  {
    if (i==0)
    {
      Comp =(File0);
     
      switch(Comp)
      {
        case true:
             File0.getline(S0,20);
             if (S0!="")
             {
             cout <<S0 <<endl;
             break;         
             }else
             {
                 
               cout <<"No found" <<endl;   
             }                         
        case false:           
             break;           
                 
      }                                           
    }else if(i==1)
    {
      Comp =(File1); 
     
       
      switch(Comp)
      {
        case true:
             File1.getline(S1,20);
             if (S1!="")
             {
             cout <<S1 <<endl;
             break;         
             }else
             {
              cout <<"No found" <<endl;   
                 
             }     
                   
        case false:           
             break;           
                 
      }           
                       
    }else if(i==2)
    {
      Comp =(File2);
     
       switch(Comp)
      {
        case true:
             File2.getline(S2,20);
            if (S2!="")
             {
             cout <<S2 <<endl;
             break;         
             }else
             {
              cout <<"No found" <<endl;   
                 
             }     
             
        case false:           
             break;           
                 
      }
     
         
    }else if(i==3)
    {
       Comp =(File3);
       
          switch(Comp)
      {
        case true:
             File3.getline(S3,20);
            if (S1!="")
             {
             cout <<S3 <<endl;
             break;         
             }else
             {
              cout <<"No found" <<endl;   
                 
             }     
             
        case false:           
             break;           
                 
      }
                                         
    }else if(i==4)
    {
      Comp =(File4);
     
       switch(Comp)
      {
        case true:
             File4.getline(S0,20);
           if (S4!="")
             {
             cout <<S4 <<endl;
             break;         
             }else
             {
              cout <<"No found" <<endl;   
                 
             }     
             
        case false:           
             break;           
                 
      }
      cin.get();             
      break;           
    }
     
  }               
}

//Maximo 5 usuarios.
void CreateDB()
{
  SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),7);
  string User="";   
  system("cls");
  cout <<"Welcome to DataBase enter a name: ";
  cin >> User;
 
  ifstream data0 ("0");
  ifstream data1 ("1");
  ifstream data2 ("2");
  ifstream data3 ("3");
  ifstream data4 ("4");
  if (data0)
  {
      SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),4);
      cout <<"Creating.." <<endl;
      Sleep(3000);
      SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),10);
    //DATA 1
    if (data1)
    {
       if (data2)
       {
          if (data3)
          {
             
          if(data4)
          {
          SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),3);
          cout <<"Buy an license." <<endl;
          Sleep(3000);
                     
          system("cls");
          char serch[1]; 
          SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),7);       
          cout <<"1 To view DataBase, 2 To Add new user in DataBase: ";         
          cin >> serch;                                                                 
          switch(serch[1])
          {
          case '1':
                               
          viewDB();
          break;
                                       
          default:
              cout <<"Opening DataBase.." <<endl;   
            Sleep(2000);
            viewDB();
                                 
            }                                                                 
             }
             else
             {               
       ofstream DATA("4");
       DATA <<User;
       DATA.close();
       cout <<"Created" <<endl;
       Sleep(2000);   
       CreateDB();
             }
                               
          }else
          {
       ofstream DATA("3");
       DATA <<User;
       DATA.close();
       cout <<"Created" <<endl;
       Sleep(2000);   
       CreateDB();       
          }                                 
       }else
       {
       ofstream DATA("2");
       DATA <<User;
       DATA.close();
       cout <<"Created" <<endl;
       Sleep(2000);     
       CreateDB();   
       }                           
    }
    else
    {   
      SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),4);
      cout <<"Creating.." <<endl;
      Sleep(3000);
      SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),10);     
      ofstream DATA("1");
       DATA <<User;
        DATA.close();
        CreateDB();
    }         
  }
  else
  {
    SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),10);
    ofstream DATA("0");
    DATA <<User;
    DATA.close();
    cout <<"Created" <<endl; 
    Sleep(2000);
    CreateDB();   
  }
  CreateDB(); 
  cin.get();       
}

De todos modos muchas gracias era solo de dedicarle un poco más de tiempo, pero al menos ya se más código y tengo un poco más de documentación gracias a ti.   :D
El ganador es el que sabe perder.