elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Usando Git para manipular el directorio de trabajo, el índice y commits (segunda parte)


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  Ayuda base de datos con archivos
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Ayuda base de datos con archivos  (Leído 2,143 veces)
CoolTesting

Desconectado Desconectado

Mensajes: 76


El ganador es el que sabe perder.


Ver Perfil WWW
Ayuda base de datos con archivos
« en: 30 Abril 2014, 03:26 am »

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
  1. #include <iostream>
  2. #include <windows.h>
  3. #include <fstream>
  4. #include <stdlib.h>
  5. using namespace std;
  6. void CreateDB();
  7. void viewDB();
  8. int main()
  9. {
  10. SetConsoleTitleA("DataBase");
  11. SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),7);
  12. char BOOL[1];
  13. cout <<"Welcome DataBase" <<endl;
  14. cout <<"1 To view DataBase, 2 To Add new user in DataBase: ";
  15.  
  16. cin >> BOOL;
  17.  
  18. if (BOOL[0] =='1')
  19. {
  20.   viewDB();        
  21.  
  22. }else if(BOOL[0]=='2')
  23. {
  24.   CreateDB();
  25.  
  26. }
  27. else
  28. {
  29.     SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),4);
  30.     cout <<"These data are unknown" <<endl;
  31.     Sleep(1500);
  32.     system("cls");
  33.  
  34.     main();
  35.  
  36. }
  37. cin.get();
  38. return 0;
  39.  
  40.  
  41. }
  42. void viewDB()
  43. {
  44.     //Aún sin crear.
  45.  
  46. }
  47. void CreateDB()
  48. {
  49.  string User="";  
  50.  system("cls");
  51.  cout <<"Welcome to DataBase enter a name: ";
  52.  cin >> User;
  53.  
  54.  int i;
  55.  
  56. //Buscador que "NO FUNCIONA"
  57.  
  58.  
  59.  
  60. }
  61.  
  62. 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:
  63.  
  64. for (i=0; i<1000; i++)
  65. {
  66. ifstream My_DATA(i);
  67. No me permite guardar un entero como archivo < D:
  68. 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)
  69.  
  70. }
  71.  

¿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.



« Última modificación: 30 Abril 2014, 03:45 am por CoolTesting » En línea

El ganador es el que sabe perder.
eferion


Desconectado Desconectado

Mensajes: 1.248


Ver Perfil
Re: Ayuda base de datos con archivos
« Respuesta #1 en: 30 Abril 2014, 08:54 am »

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
  1. ifstream();
  2.  
  3. explicit ifstream (const char* filename, ios_base::openmode mode = ios_base::in);
  4.  
  5. explicit ifstream (const string& filename, ios_base::openmode mode = ios_base::in);
  6.  
  7. 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
  1. ifstream stream;
  2. stream.open( "fichero.txt", ofstream::in);

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

Código
  1. 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
  1. istream& operator>> (bool& val);
  2. istream& operator>> (short& val);
  3. istream& operator>> (unsigned short& val);
  4. istream& operator>> (int& val);
  5. istream& operator>> (unsigned int& val);
  6. istream& operator>> (long& val);
  7. istream& operator>> (unsigned long& val);
  8. istream& operator>> (long long& val);
  9. istream& operator>> (unsigned long long& val);
  10. istream& operator>> (float& val);
  11. istream& operator>> (double& val);
  12. istream& operator>> (long double& val);
  13. istream& operator>> (void*& val);
  14.  
  15. int get();
  16. istream& get (char& c);
  17. istream& get (char* s, streamsize n);
  18. istream& get (char* s, streamsize n, char delim);
  19.  
  20. istream& getline (char* s, streamsize n );
  21. istream& getline (char* s, streamsize n, char delim );
  22.  
  23. istream& read (char* s, streamsize n);
  24.  
  25. 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
  1. stream >> numero;

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

Código
  1. // Este metodo tiene mas sentido si lo metes dentro de un for
  2. char c;
  3. stream.get( c );

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

Código
  1. int numero;
  2. stream.read( (char*)&numero, sizeof(numero) );
 


En línea

CoolTesting

Desconectado Desconectado

Mensajes: 76


El ganador es el que sabe perder.


Ver Perfil WWW
Re: Ayuda base de datos con archivos
« Respuesta #2 en: 1 Mayo 2014, 07:33 am »

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


Código
  1.  
  2. #include <iostream>
  3. #include <windows.h>
  4. #include <fstream>
  5. #include <stdlib.h>
  6. using namespace std;
  7. void CreateDB();
  8. void viewDB();
  9. int main()
  10. {
  11. system("@echo off");
  12. system("cls");
  13. SetConsoleTitleA("DataBase CoolTesting");
  14. SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),7);
  15. char BOOL[1];
  16. cout <<"Welcome DataBase" <<endl;
  17. cout <<"1 To view DataBase, 2 To Add new user in DataBase: ";
  18.  
  19. cin >> BOOL;
  20.  
  21. if (BOOL[0] =='1')
  22. {
  23.   viewDB();        
  24.  
  25. }else if(BOOL[0]=='2')
  26. {
  27.   CreateDB();
  28.  
  29. }
  30. else
  31. {
  32.     SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),4);
  33.     cout <<"These data are unknown" <<endl;
  34.     Sleep(1500);
  35.     system("cls");
  36.  
  37.     main();
  38.  
  39. }
  40. cin.get();
  41. return 0;
  42.  
  43.  
  44. }
  45. void viewDB()
  46. {
  47.  char S0[20]="";
  48.  char S1[20]="";
  49.  char S2[20]="";
  50.  char S3[20]="";
  51.  char S4[20]="";
  52.  ifstream File0("0");
  53.  ifstream File1("1");
  54.  ifstream File2("2");
  55.  ifstream File3("3");
  56.  ifstream File4("4");
  57.  
  58.  
  59.  if (File0 == false && File1 == false && File2 == false && File3 == false && File4 == false)
  60.  {
  61.     SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),4);
  62.     cout <<"No found DataBase" <<endl;
  63.     Sleep(2000);
  64.     CreateDB();                  
  65.  }
  66.  
  67.  bool Comp;  
  68.  int i;
  69.   SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),10);
  70.   cout <<"Users of DataBase:" <<endl;
  71.  SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),7);
  72.  for (i=0; i<=6; i++)
  73.  {
  74.    if (i==0)
  75.    {
  76.      Comp =(File0);
  77.  
  78.      switch(Comp)
  79.      {
  80.        case true:
  81.             File0.getline(S0,20);
  82.             if (S0!="")
  83.             {
  84.             cout <<S0 <<endl;
  85.             break;        
  86.             }else
  87.             {
  88.  
  89.               cout <<"No found" <<endl;  
  90.             }                        
  91.        case false:            
  92.             break;          
  93.  
  94.      }                                          
  95.    }else if(i==1)
  96.    {
  97.      Comp =(File1);  
  98.  
  99.  
  100.      switch(Comp)
  101.      {
  102.        case true:
  103.             File1.getline(S1,20);
  104.             if (S1!="")
  105.             {
  106.             cout <<S1 <<endl;
  107.             break;        
  108.             }else
  109.             {
  110.              cout <<"No found" <<endl;    
  111.  
  112.             }      
  113.  
  114.        case false:            
  115.             break;          
  116.  
  117.      }          
  118.  
  119.    }else if(i==2)
  120.    {
  121.      Comp =(File2);
  122.  
  123.       switch(Comp)
  124.      {
  125.        case true:
  126.             File2.getline(S2,20);
  127.            if (S2!="")
  128.             {
  129.             cout <<S2 <<endl;
  130.             break;        
  131.             }else
  132.             {
  133.              cout <<"No found" <<endl;    
  134.  
  135.             }      
  136.  
  137.        case false:            
  138.             break;          
  139.  
  140.      }
  141.  
  142.  
  143.    }else if(i==3)
  144.    {
  145.       Comp =(File3);
  146.  
  147.          switch(Comp)
  148.      {
  149.        case true:
  150.             File3.getline(S3,20);
  151.            if (S1!="")
  152.             {
  153.             cout <<S3 <<endl;
  154.             break;        
  155.             }else
  156.             {
  157.              cout <<"No found" <<endl;    
  158.  
  159.             }      
  160.  
  161.        case false:            
  162.             break;          
  163.  
  164.      }
  165.  
  166.    }else if(i==4)
  167.    {
  168.      Comp =(File4);
  169.  
  170.       switch(Comp)
  171.      {
  172.        case true:
  173.             File4.getline(S0,20);
  174.           if (S4!="")
  175.             {
  176.             cout <<S4 <<endl;
  177.             break;        
  178.             }else
  179.             {
  180.              cout <<"No found" <<endl;    
  181.  
  182.             }      
  183.  
  184.        case false:            
  185.             break;          
  186.  
  187.      }
  188.      cin.get();            
  189.      break;            
  190.    }
  191.  
  192.  }              
  193. }
  194.  
  195. //Maximo 5 usuarios.
  196. void CreateDB()
  197. {
  198.  SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),7);
  199.  string User="";  
  200.  system("cls");
  201.  cout <<"Welcome to DataBase enter a name: ";
  202.  cin >> User;
  203.  
  204.  ifstream data0 ("0");
  205.  ifstream data1 ("1");
  206.  ifstream data2 ("2");
  207.  ifstream data3 ("3");
  208.  ifstream data4 ("4");
  209.  if (data0)
  210.  {
  211.      SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),4);
  212.      cout <<"Creating.." <<endl;
  213.      Sleep(3000);
  214.      SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),10);
  215.    //DATA 1
  216.    if (data1)
  217.    {
  218.       if (data2)
  219.       {
  220.          if (data3)
  221.          {
  222.  
  223.          if(data4)
  224.          {
  225.          SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),3);
  226.          cout <<"Buy an license." <<endl;
  227.          Sleep(3000);
  228.  
  229.          system("cls");
  230.          char serch[1];  
  231.          SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),7);      
  232.          cout <<"1 To view DataBase, 2 To Add new user in DataBase: ";        
  233.          cin >> serch;                                                                  
  234.          switch(serch[1])
  235.          {
  236.          case '1':
  237.  
  238.          viewDB();
  239.          break;
  240.  
  241.          default:
  242.              cout <<"Opening DataBase.." <<endl;  
  243.            Sleep(2000);
  244.            viewDB();
  245.  
  246.            }                                                                  
  247.             }
  248.             else
  249.             {                
  250.       ofstream DATA("4");
  251.       DATA <<User;
  252.       DATA.close();
  253.       cout <<"Created" <<endl;
  254.       Sleep(2000);    
  255.       CreateDB();
  256.             }
  257.  
  258.          }else
  259.          {
  260.       ofstream DATA("3");
  261.       DATA <<User;
  262.       DATA.close();
  263.       cout <<"Created" <<endl;
  264.       Sleep(2000);  
  265.       CreateDB();      
  266.          }                                  
  267.       }else
  268.       {
  269.       ofstream DATA("2");
  270.       DATA <<User;
  271.       DATA.close();
  272.       cout <<"Created" <<endl;
  273.       Sleep(2000);    
  274.       CreateDB();  
  275.       }                            
  276.    }
  277.    else
  278.    {  
  279.      SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),4);
  280.      cout <<"Creating.." <<endl;
  281.      Sleep(3000);
  282.      SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),10);    
  283.      ofstream DATA("1");
  284.       DATA <<User;
  285.        DATA.close();
  286.        CreateDB();
  287.    }          
  288.  }
  289.  else
  290.  {
  291.    SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),10);
  292.    ofstream DATA("0");
  293.    DATA <<User;
  294.    DATA.close();
  295.    cout <<"Created" <<endl;  
  296.    Sleep(2000);
  297.    CreateDB();    
  298.  }
  299.  CreateDB();  
  300.  cin.get();        
  301. }
  302.  
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
En línea

El ganador es el que sabe perder.
Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines