Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: pedro0620 en 27 Septiembre 2016, 02:38 am



Título: Ayuda para metodo de buscar y modifcar en un .txt
Publicado por: pedro0620 en 27 Septiembre 2016, 02:38 am
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()
{

}