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

 

 


Tema destacado: Trabajando con las ramas de git (tercera parte)


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  Archivos .txt y estructuras c++
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Archivos .txt y estructuras c++  (Leído 2,138 veces)
Ja_90

Desconectado Desconectado

Mensajes: 51



Ver Perfil
Archivos .txt y estructuras c++
« en: 3 Noviembre 2014, 22:00 pm »

Buenas tardes, me encuentro realizando una agenda de contactos con un menu que me permita anadir, ver contacto, editar, eliminar, salir.

Pues bien ya comence con la primera opcion que es anadir un contacto, y lo he guardado en un archivo de texto. Ahora quiero que al cerrar el programa y vuelva a entrar le pueda dar la opcion de ver contacto y que me lo muestre en pantalla.

Se que con la funcion ifstream puedo leer el archivo y comparando un string que le pida al usuario con el string que me idica el nombre para encontrarlo... pero, Como hago para que leea el archivo y me busque el contacto que le indique, y sobre todo que me lo muestre en pantalla??...

Código
  1. #include <iostream>
  2. #include <fstream>   // read and write outfile .txt
  3. #include <cstring>
  4. #include <cstdlib>   // To use system("clear")
  5.  
  6. using std::ofstream;  // write outfile .txt
  7. using std::ifstream;  // read outfile .txt
  8. using std::ios;
  9. using std::cout;
  10. using std::cin;
  11. using std::endl;
  12. using std::string;
  13.  
  14. const int LEN = 2;
  15.  
  16. void Addd(struct Data people[], int reg);  // add_contact_funtion
  17.  
  18. struct Data
  19. {
  20.   string Naame;
  21.   unsigned int age;
  22. };
  23.  
  24. int main()
  25. {
  26.   Data people[LEN];  //struct
  27.  
  28.   cout << endl;
  29.   cout << "\t ////////  ////////  //        //  /////////  //////////  //////// " << endl;
  30.   cout << "\t //        //    //  ////      //      //     //      //  //       " << endl;
  31.   cout << "\t //        //    //  //  //    //      //     //      //  //       " << endl;
  32.   cout << "\t //        //    //  //    //  //      //     //////////  //       " << endl;
  33.   cout << "\t //        //    //  //      ////      //     //      //  //       " << endl;
  34.   cout << "\t ////////  ////////  //        //      //     //      //  //////// " << endl;
  35.   cout << endl;
  36.   cout << "CONTACTS" << endl << endl;
  37.  
  38.   cout << "1. Add contact." << endl << endl;
  39.   cout << "2. Show contact." << endl << endl;
  40.   cout << "3. Exit" << endl << endl;
  41.  
  42.   int regi_ter = 0;
  43.  
  44.   int option;
  45.   cout << "Numero de operacion a realizar: ";
  46.   cin >> option;
  47.   cin.ignore();
  48.   cout << endl;
  49.  
  50.   switch (option)
  51.   {
  52.      case 1:
  53.      system("clear");
  54.      Addd(people,regi_ter);
  55.      break;
  56.  
  57.      case 2:
  58.         cout << "Show contact";
  59.      break;
  60.  
  61.      case 3:
  62.         cout << "EXIT";
  63.         exit(0);
  64.      break;
  65.  
  66.      default:
  67.      cout << "Operation invalid.";
  68.      system("clear");
  69.      main();
  70.      break;
  71.   }
  72.  
  73.   return 0;
  74. }
  75.  
  76. /// ADD_CONTACT_FUNTION ///
  77.  
  78. void Addd(struct Data people[], int reg)
  79. {
  80.   cout << "Write the contact information.";
  81.   cout << endl << endl;
  82.   cout << "1. Name: ";
  83.   getline(cin,people[reg].Naame);
  84.   cout << endl;
  85.   cout << "6. Age: ";
  86.   cin >> people[reg].age;
  87.   cin.ignore();
  88.   cout << endl;
  89.  
  90.   char sn[5];
  91.  
  92.   do
  93.   {
  94.      cout << "Add contact in the agenda? [S/N]: ";
  95.      cin >> sn;
  96.  
  97.      if((strcmp(sn,"s")==0)||(strcmp(sn,"S")==0))
  98.      {
  99.         ofstream archivo;
  100.         archivo.open("ContactsAgenda.txt", ios::app);
  101.         archivo << "Name: " << people[reg].Naame << endl;
  102.         archivo << "Age: " << people[reg].age << endl;
  103.         archivo << endl << "---------------------------------------------" << endl << endl;
  104.         archivo.close();
  105.  
  106.         reg++;
  107.  
  108.         cout << endl << "Contacto anadido." << endl;
  109.  
  110.         system("clear");
  111.         main();
  112.      }
  113.  
  114.      if((strcmp(sn,"n")==0)||(strcmp(sn,"N")==0))
  115.      {
  116.         cout << endl << "Contacto no anadido." << endl;
  117.  
  118.         system("clear");
  119.         main();
  120.      }
  121.   }while ((sn!="S")||(sn!="s")||(sn!="N")||(sn!="n"));
  122. }
  123.  

Muchas gracias....Espero que me puedan entender.

PD: Quiero hacerlo sin punteros,  clases o vectores... Luego la pienso hacer de esa manera, por ahora solo con estructuras.


En línea

:D  ::::Ja_90::::   :D
Flakito81


Desconectado Desconectado

Mensajes: 519



Ver Perfil
Re: Archivos .txt y estructuras c++
« Respuesta #1 en: 5 Noviembre 2014, 02:10 am »

Por aquello de simplificar el trabajo yo guardaria todo en una sola linea
Código
  1. archivo << people[reg].Naame << ":"  people[reg].age <<  endl;
  2.  

Si vas a leer el el archivo desde tu aplicacion creo que puedes prescindir de poner 'name', 'age' y otra información. Simplemente conoces el formato en el que se guarda la informacion y en tu aplicacion ya le pones la etiqueta/ nota que consideres.

Para lo que pides simplemente abres el archivo en modo lectura, lo recorres y ayudandote de getline lees la linea entera te quedas con la primera parte (lo que queda antes del ' :' <dos puntos> ) y lo comparas con lo que busques, si es inguar lo muestras y en otro caso sigues recorriendo hasta final de fichero.

Otra opción es que guardes la la estructura (modo binario)  y no los campos de la misma en modo texto. Para eso usas el método write. Obviamente luego recorres el fichero en modo lectura y leyendo con el médodo read. La comparacion es trivial.

Otras observaciones. Yo que tú evitaría tanta llamada recursiva a main siemplemente modifica el switch en el caso 3 y pones algo como: salir = true; y en codigo del main (debajo del Data people[LEN];  //struct ) pones unbool salir = false; do { // todo tu codigo hasta antes del return } while(salir == false);.
En la funcion Addd tambien quitaria las llamadas a main solo tienes que modificar el do-while te quedaria algo como:
Código
  1. }while ((sn!="N")||(sn!="n"));
  2.  

Un saludo


« Última modificación: 5 Noviembre 2014, 02:12 am por Flakito81 » En línea

Ja_90

Desconectado Desconectado

Mensajes: 51



Ver Perfil
Re: Archivos .txt y estructuras c++
« Respuesta #2 en: 7 Noviembre 2014, 02:41 am »

Muchas gracias Flakito81  , probe lo de el bool salir = true en el do..while... funciono perfecto.

Estoy viendo como como leer el archivo hasta que encuentre un simbolo determinado por ejemplo un punto (.) para que me leea la informacion del contacto, ya que quiero agregar informacion a la estructura y en un solo renglon no queda bien.

Quedaria algo asi: Leer el archivo hasta el punto y que comprare el nombre con el introducido por el usuario, y si es igual que imprima esa informacion hasta el punto y si no que siga leyendo el archivo...
Pero no se de que manera implementarlo en el codigo, la sintaxis...  :huh:

Nombre: fulanito
edad: 24 años. <-----(.) aqui que lea el punto e imrpima si es igual al nombre introducido por el usuario o siga leyendo si es lo contrario.

Muchas Gracias seguire averiguando como hacerlo, algun consejo lo agradeceria.

En línea

:D  ::::Ja_90::::   :D
Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Estructuras.....
Programación C/C++
Rodri 1 2,518 Último mensaje 6 Octubre 2011, 19:46 pm
por satu
Estructuras en C++
Programación C/C++
jjrl1984 1 1,680 Último mensaje 18 Diciembre 2012, 02:27 am
por naderST
Estructuras y archivos en c++
Programación C/C++
Luifs 5 2,953 Último mensaje 8 Junio 2013, 02:27 am
por rir3760
estructuras y lectura de archivos en C
Programación C/C++
michellcrh 2 2,297 Último mensaje 2 Junio 2020, 00:08 am
por michellcrh
Ayuda con estructuras y archivos
Programación C/C++
luckyghost 2 2,674 Último mensaje 10 Agosto 2020, 04:35 am
por luckyghost
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines