Ayuda para metodo de buscar y modifcar en un .txt

Iniciado por pedro0620, 27 Septiembre 2016, 02:38 AM

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

pedro0620

Hola!
Estoy manejando un programa en Dev C++ donde tengo que crear un archivo de texto con las funciones fwrite,fread y fseek (creo que esta sirve para el metodo de buscar) usando estrucuras y con el uso de un menu que lleve:
1- Ingresar Registro
2- Mostrar Registros
3- Buscar Registro
4- Modificar Registro
5- Salir

Ayuda con el de buscar y modificar...
Tengo una parte del codigo de buscar pero no me salio..

Aqui esta mi codigo:


//Menu Manejo de Archivos C++
#include<cstdlib>
#include<iostream>
#include<string.h>
#include<conio.h>
#include<stdio.h>
#include<ctype.h>
#include<windows.h> //Para utilizar la funcion Sleep
using namespace std;

struct musica
{
   char id[5];
   char nombre_album[50];
   char nombre_artista[30];
   char genero[15];
   char tracks[2];
   char año[5];
   char salto='\n';
};

musica cargar_datos ();  // Cargar struct con los datos ingresados
musica album;

bool repite=true;
bool encontrado=false;
int i=0, band=0,fin=0;
void menu();
void crear();
void mostrar();
void salir();



int main()
{
   menu();              //Llamamos al metodo menu
   return 1;
}

void menu() //Metodo para el Menu
{
   int opcion=0;
   do
   {
      cout<<endl<<endl;
      system("Color F1");
       cout<<"\t       Menu de Manejo de Archivos en C++"<<endl<<endl;
       cout<<"\t\t[1]- Crear e Ingresar registros al Archivo"<<endl;
       cout<<"\t\t[2]- Mostrar Registros"<<endl;
       cout<<"\t\t[3]- Buscar Registros"<<endl;
       cout<<"\t\t[4]- Modificar un Registro"<<endl;
       cout<<"\t\t[5]- Salir"<<endl;
       cout<<"\t\t-------------------------------"<<endl;
       cout<<"\t\tOpcion: ";
       cin>>opcion;
       switch(opcion)
      {
           case 1:
               crear();
               system("pause>null");
               system("cls");
           break;
           case 2:
              mostrar();
               system("pause>null");
               system("cls");
           break;
           case 3:
         /*buscar();
               system("pause>null");
               system("cls");*/
           break;
           case 4:
               /*modificar();
               system("pause>null");
               system("cls");*/
           break;
           case 5:
               salir();
           break;
           default:
              cout<<endl;
              system("Color FC");
               cout<<"\t\tOpcion Incorrecta!"<<endl;
               Sleep(2000);
               system("Color F1");
               system("cls");
       }
   }while(opcion!=6);
   
}//Metodo menu

void crear() //Metodo para el crear el archivo
{
   FILE* CD=fopen("musica.txt", "w");

   string consulta = "s";
   memset(&album,0,sizeof(&album));

   musica registro;

   while(consulta!="n")
   {
       registro = cargar_datos();
       fwrite(&registro, sizeof(musica), 1, CD );
       cout<<endl;
       cout<<"\t\tDesea cargar mas registros [ s/n ]: ";
       getline(cin,consulta );
   }

   cout<<endl;
   cout<<"\t\t¡Registro Agregado Correctamente!"<<endl;
   fclose(CD);
}

musica cargar_datos()  //Funcion para ingresar los registros dentro del archivo
{
   
   string nombre="\0",apellido="\0",telefono="\0",direccion="\0",email="\0";
   //memset(&cliente,0,sizeof(&cliente));
   cout<<"\tIngrese los datos que se le piden a continuacion"<<endl<<endl;

   fflush(stdin);
   cout<<"\t\tID: ";
   gets(album.id);
   fflush(stdin);
   
   fflush(stdin);
   cout<<"\t\tNombre del Album: ";
   gets(album.nombre_album);
   //strcpy(album.nombre_album, nombre_album.c_str(); // función strcpy( destino, origen ) y método c_str() de la clase string
   fflush(stdin);

   fflush(stdin);
   cout<<"\t\tNombre del Artista: ";
   gets(album.nombre_artista);
   fflush(stdin);
   
   do
   {   
     fflush(stdin);
     cout<<"\t\tGenero: ";
     gets(album.genero);
     fflush(stdin);
     fin=strlen(album.genero);
     band=0;
     
     for(i=0;i<fin;i++)
     {
       if(((album.genero>='A')&&(album.genero<='Z'))||((album.genero>='a')&&(album.genero<='z'))||(album.genero==' '))
       {
         band=0;
       }
       else
       {
         i=fin;
         band=1;
         system("Color FC");
         cout<<"\tCaracteres invalidos... Intentelo de nuevo..."<<endl;
         Sleep(2000);
         system("Color F1");   
       }
      }
     
   }while(band==1);
   fflush(stdin);
   cout<<"\t\tNumero de Tracks: ";
   gets(album.tracks);
   fflush(stdin);
   
   fflush(stdin);
   cout<<"\t\tAnyo: ";
   gets(album.año);
   fflush(stdin);
   
   album.salto;
   
   return album;
}

void mostrar() //Metodo para leer el archivo
{
   FILE* CD = fopen("musica.txt", "r");

   musica registro;

   cout<<endl;
   cout<<"\t\tRegistros Ingresados en el Archivo"<<endl;
   cout<<"\t\t________________________________"<<endl;

   fread(&registro, sizeof(musica), 1, CD);
   //read <t_cliente> ( arch_cliente ); // ASI LO INVOCO SI USO EL TEMPLATE

   while(feof(CD) ==0)
   {    // TAMBIEN PODRIA PONER COMO CONDICIÓN feof( arch_cliente ) == 0
       cout<<"\t\tID: " <<registro.id<<endl;
       cout<<"\t\tNombre del Album: "<<registro.nombre_album<< endl;
       cout<<"\t\tNombre del Artista: "<<registro.nombre_artista<<endl;
       cout<<"\t\tGenero: "<<registro.genero<<endl;
       cout<<"\t\tNumero de Trakcs: "<<registro.tracks<<endl;
       cout<<"\t\tAnio: "<<registro.año<<endl;
       cout<<"\t\t________________________________"<<endl;

       fread(&registro, sizeof(musica), 1, CD);
       
   }

   cout<<endl;
   cout<<"\t\tSe completo la lectura del archivo..."<<endl;
   fclose(CD);
}

void salir() //Metodo para finalizar el programa
{
   cout<<endl;
   cout<<"\t\tPrograma Finalizado!! Hasta Pronto ^_^/"<<endl;
}

void buscar()
{
   
}

void modificar()
{

}