Normas del foro

Curso Hacker
Bienvenido(a), Visitante. Favor de ingresar o registrarse.
¿Perdiste tu email de activación? - Noviembre 19, 2008, 04:38:14
Inicio Ayuda Ingresar Registrarse
Visita: Articulos - Juegos Gratis - Da Foros

Comunidad Underground Hispana  |  Programacion  |  Programación  |  Carbide C/C#/C++  |  Tema: problema con modificar un archivo de texto 0 Usuarios y 1 Visitante están viendo este tema. « anterior próximo »
Páginas: [1] Ir Abajo Imprimir
Autor Tema: problema con modificar un archivo de texto  (Leído 386 veces)
fkorleone
Visitante
« en: Octubre 11, 2006, 01:12:52 »

BUENO GRACIAS ATODOS LOS K APORTARON ALGO YA LO SOLUCIONE Y AKI ESTA EL CODIGO FINAL :

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <time.h>


void menu();
void buscarIsbn(char x[11]);
void buscarLibro(char lib[50]);
void asociarAutor(char m[11]);
void asociarLibro(char u[11]);
void agregarLibro();
void buscarAutor(char [30]);
int compararIsbn(char [11]);
int compararAutor(char [30], char [11]);

FILE *libros,*autores;
int main()
{ system("CLS");
  menu();
    
  return 0;
}

void menu()
{ int op,n;
  char num[11],texto[50],nombre[30];
  clock_t inicio,final;
  do{
    system("CLS");
  printf( "\t\t\t MENU\n\n" );
  printf( "\t\t1. Buscar libro por ISBN\n" );
  printf( "\t\t2. Buscar libros por autor o titulo\n" );
  printf( "\t\t3. Agregar un nuevo libro\n" );
  printf( "\t\t4. Exit\n" );
  printf( "\t\tSeleccion --> " );
  scanf( "%d", &op );

    switch ( op ) {
   case 1: {
       printf("Ingrese ISBN: ");
       fflush(stdin);
       gets(num);
        if(num[10]!='\0')
          printf("El codigo ISBN debe tener 10 digitos!\n");
        if(num[0]=='*')
         { inicio=clock();
           buscarIsbn(num);
           final=clock();
           printf("\nTiempo de procesamiento %d milisegundos\n",(final-inicio));
         }
         else
         { inicio=clock();
           buscarIsbn(num);
           final=clock();
           printf("\nTiempo de procesamiento %d milisegundos\n",(final-inicio));
         }
       break;
      }
   case 2:
       system("cls");

       printf("(1) Busqueda por autor\n");
       printf("(2) Busqueda por Titulo\n");
       scanf("%d",&n);


       system("CLS");

        if(n==1)
        {
          printf("Ingrese Autor(Apellido, Nombre):");
           fflush(stdin);
           gets(nombre);
           if(nombre[0]=='*')
           {
            inicio=clock();
            buscarAutor(nombre);
            final=clock();
            printf("\nTiempo de procesamiento %d milisegundos\n",(final-inicio));
           }
            else
            {
             inicio=clock();
             buscarAutor(nombre);
             final=clock();
             printf("\nTiempo de procesamiento %d milisegundos\n",(final-inicio));
            }

        }
       if(n==2)
       {
        printf("Ingrese titulo ");
        fflush(stdin);
        gets(texto);
        if(texto[0]=='*')
        {
         inicio=clock();
         buscarLibro(texto);
         final=clock();
         printf("\nTiempo de procesamiento %d milisegundos\n",(final-inicio));
        }
        else
        {
          inicio=clock();
          buscarLibro(texto);
          final=clock();
          printf("\nTiempo de procesamiento %d milisegundos\n",(final-inicio));
                  }
                 
                 }           
                break;
        case 3:         
            agregarLibro();
            break;
        case 4:       
            printf( "Gracias por usar nuestro servicio de Biblioteca!\n" );
            break;
        default:           
            printf( "\tEsta opcion no es valida!\n" );
            break;
    }
   system("PAUSE");
  }while( op != 4 );
}

//agrega los datos al final del archivo
void agregarLibro()
{
  char titulo[50],autor[30],num[11],sino;
  int stop;
 
 
 
  do{
  stop=1;
  fflush(stdin);     
  printf( "Ingresar datos del libro: \n" );

  printf( "\tCodigo ISBN: " );
 
  gets(num);
 
  if(num[10]!='\0')
   {printf("El codigo ISBN debe tener 10 digitos!\n");
    break;}
 
  if(compararIsbn(num)==1)
  {printf("Ese libro ya fue ingresado!\n");
  break;}
 
   
  printf( "\tTitulo: " );
  gets(titulo);
  printf( "\tAutor con el formato (Apellido, Nombre): " );
  gets(autor);
 
  libros=fopen("libros.txt", "a");   // abre el archivo libros para escribirlo
  // escribe los datos ingresados al archivo libros
  fprintf(libros, "%s %s\n" ,num,titulo); 

 
  ;
  if( compararAutor(autor,num) == 0)
  {  autores=fopen("autores.txt", "a"); // abre el archivo autores para escribirlo
     // escribe los datos ingresados al archivo autores
    fprintf(autores, "%s: %s\n",autor,num);
  } 

  printf( "Desea ingresar otro autor (s/N): " );
  scanf("%c",&sino);
 
 
    if( (sino == 's') || (sino == 'S') ) // ver si quiere ingresar mas datos
   {
     stop=0;
       
   }
   
   }while( stop == 0);     
   fclose(libros);   // cierra el archivo libros
   fclose(autores);  // cierra el archivo autores
}
int compararAutor(char nombre[30], char cod[11])
{
  FILE *temp; 
  char linea[100],newline[100],nombre2[30]; 
  int i,encontrado1=0;
  if((autores=fopen("autores.txt","r"))==NULL) //Apertura de archivo libros
  {
    printf("ERROR APERTURA");
  }
  temp=fopen("temp.txt", "a");
   
while(!feof(autores))
{
  fgets(linea,100,autores);   
   
       i=0;                                //Recorrer el archivo para buscar el autor
                             
        do
         {
            nombre2 = linea;
            i++;             
         }  while ( linea != ':' ); 
         
         nombre2 = '\0';   
   
    if( strcmp(nombre2,nombre)==0)
    { 
             
       
       strcpy(newline,linea);
       newline[strlen(newline)-1]=' ';
       strcat(newline,cod);
       fprintf(temp,"%s\n",newline);
       encontrado1=1;
                               
    }
    else
    {
       
       fprintf(temp,"%s",linea);
       
   
           
    }     
   
 }
 fclose(autores);
 remove("autores.txt");
 fclose(temp);
 rename("temp.txt","autores.txt");
 printf("\nLibro ingresado con exito\n");
 return encontrado1; 
}

int compararIsbn(char cod[11])
{

 char isbn[11],v[100];
 int i,encontrado=0;
 if((libros=fopen("libros.txt","r"))==NULL) //Apertura de archivo libros
  {
    printf("ERROR APERTURA");
  }

  while((!feof(libros)))           //Recorre el archivo y obtiene isbn
    {  fgets(v,100,libros);
         for(i=0;i<10;i++)
        isbn=v;

     isbn[10]='\0';

      if( strcmp(isbn,cod) == 0 )
      encontrado=1;
    }

fclose(libros);
return encontrado;
}
//busca el autor ingresado por el usuario
void buscarAutor(char nombre[30])
{int i,j,k;
  char linea[100],nombre2[30],codigo[11]; 
 
//Apertura de archivo libros
if((autores=fopen("autores.txt","r"))==NULL)
  {
    printf("ERROR APERTURA");
  }
if((libros=fopen("libros.txt","r"))==NULL)
  {
    printf("ERROR APERTURA");
  } 
 
if(nombre[0]=='*')
  {
    while((!feof(libros)))   
    { 
     fgets(linea,100,libros);
     printf("%s",linea);
      for(i=0;i<10;i++)
             codigo=linea;
             
          codigo[10]='\0';
      asociarAutor(codigo);
    }   
 
 
  } 
  else
  {
//recorre el archivo completo 
while(!feof(autores))
{
  //lee una linea del archivo
  fgets(linea,100,autores);   
     i=0;                               
   //Recorrer el archivo para buscar el autor
        do
         {
            nombre2 = linea;
            i++;             
         }  while ( linea != ':' ); 
         
         nombre2 = '\0';   
   
    if( strcmp(nombre2,nombre)==0)
    {         
           j=i+2;
           
           while( linea[j] != '\0')
          { k=0;
     
              while(k!= 10)
              {
                codigo[k] = linea[j];
                j++;
                k++;
              }
              j=j+1;
              codigo[k]='\0'; 
              asociarLibro(codigo);
              printf("Autor: %s\n",nombre);
          } 
             
    }   

 }
}
 fclose(autores);
 fclose(libros);   
}

//asocia un libro al codigo isbn que se le entrega
void asociarLibro(char u[11])
{
 char isbn[11],titulo[50],linea[100];   
 int j,k,i,encontrado=0;   
 if((libros=fopen("libros.txt","r"))==NULL) //Apertura de archivo libros
  {
    printf("ERROR APERTURA");
  }
    //Recorre el archivo
  while((!feof(libros)) || (encontrado ==0))         
    {  //lee una linea del archivo
        fgets(linea,100,libros);
   
          //obtiene isbn         
         for(i=0;i<10;i++)
             isbn=linea;
             
          isbn[10]='\0';   

        k=0;   
                              //Recorrer el archivo y separar
    for(j=11;j<strlen(linea);j++)      //e imprimir datos (TITULO)
       {
          titulo[k]=linea[j];
     
          k++; 
         }   
      titulo[strlen(linea)-11]='\0';
         
     
      if( strcmp(isbn,u) == 0 )
      { 
         printf("%s %s",isbn,titulo);
         encontrado =1;
         
      }   
   
}
fclose(libros);

   
void buscarIsbn(char x[11])
{
 char isbn[11],titulo[50],v[100];
 int j,k,i;
 if((libros=fopen("libros.txt","r"))==NULL) //Apertura de archivo libros
  {
    printf("ERROR APERTURA");
  }

  if(x[0]=='*')
  {
    while((!feof(libros)))
    {
     fgets(v,100,libros);
     printf("%s",v);
      for(i=0;i<10;i++)
        isbn=v;

     isbn[10]='\0';
      asociarAutor(isbn);
    }


  }
  else
  {
   while((!feof(libros)))           //Recorre el archivo y obtiene isbn
    {  fgets(v,100,libros);
         for(i=0;i<10;i++)
        isbn=v;

     isbn[10]='\0';

   k=0;
               //Recorrer el archivo y separar
    for(j=11;j<strlen(v);j++)      //e imprimir datos (TITULO)
       {
     titulo[k]=v[j];

     k++;
    }
      titulo[strlen(v)-11]='\0';


      if( strcmp(isbn,x) == 0 )
      {
    printf("%s %s",isbn,titulo);
    asociarAutor(x);

      }

    }
   }
fclose(libros);
}

void asociarAutor(char m[11])
{
  int i,j,k;
  char autor[30],v[100],codigo[11];
  if(!(autores=fopen("autores.txt","r")))   //Apertura de archivo autores
  {
    printf("ERROR APERTURA");
  }   
   while(!feof(autores))   
        {   
          fgets(v,100,autores);         
        
           i=0;                             
          do
           {
            autor=v;
            i++;
                     
           }  while (v!=':');
            autor='\0';
           
           j=i+2;
           
           while( v[j] != '\0' )
          { k=0;
     
              while(k!= 10)
              {
                codigo[k]=v[j];
                j++;
                k++;
              }
              j=j+1;
              codigo[10]='\0';
                           
              if( strcmp(codigo,m) == 0 )
              {   
                  printf("Autor: %s\n",autor);
                 
             
              }
             
           }     
                   
          }
         
   fclose(autores);
}


void buscarLibro(char lib[50])
{
   
  int i,j,k=0;
  char titulo[50],v[100],isbn[11]; 
  if( (libros=fopen("libros.txt","r")) == NULL )   //Apertura de archivo autores
  {
    printf("ERROR APERTURA");
  } 
 if(lib[0]=='*')
 {   
 while(!feof(libros))
 {
   fgets(v,100,libros);
   printf("%s",v);
     for(i=0;i<10;i++)     
        isbn=v;
                             
         isbn[10]='\0';
      asociarAutor(isbn);   
     
       
 }   
       
}
else
{           
 while(!feof(libros))           //Recorrer el archivo y separar
 {  fgets(v,100,libros);          //e imprimir datos (ISBN)
     for(i=0;i<10;i++)     
        isbn=v;
                             
         isbn[10]='\0';   
   
                               //Recorrer el archivo y separar
for(j=11;j<strlen(v);j++)      //e imprimir datos (TITULO)
    {
       titulo[k]=v[j];
           
     k++;
     }    
    titulo[k-1]='\0';
    k=0;
    if( strcmp(titulo,lib) == 0 )
    {
       printf("%s %s\n",isbn,titulo);
       asociarAutor(isbn);
    }

 }
           
}           
 fclose(libros);         
   
}


USE UN ARCHIVO EXTRA Como decia baby girl y de ahi ocupe unas funciones de stdio.h  que son el remove y rename que me fueron muy utiles
y tuve que compilar con turbo c ya que devc++ no me reconocia estas funciones gracias Wink

si a alguien le interesa despues subo el ejecutable con los archivos que trabaja Tongue me sirvio de ejercicio estaba muy oxidado en c

xao



« Última modificación: Octubre 16, 2006, 04:08:24 por fkorleone » En línea
Kira & Eva :D
Habitual
*****
Desconectado Desconectado

Mensajes: 289


Senior Programmer


Ver Perfil Email
« Respuesta #1 en: Octubre 12, 2006, 07:46:19 »

« Última modificación: Octubre 12, 2006, 07:50:36 por Baby Girl » En línea
fkorleone
Visitante
« Respuesta #2 en: Octubre 12, 2006, 07:53:47 »

 HOla yo lo compile con DEVC++
lei tu post mira la idea esta buena pero no kero dejar dos autores repetidos
lo que busco es

autor 0123456789
eso hay en el archivo y al agregar un libro(0000000000) con el mismo autor quede  al lado del que ya estaba como en el ejemplo:

autor 0123456789 0000000000

ademas si uso lo que dijiste solo funcionaria una vez ya que llamo al archivo autores para modificar o agregar datos y el que esta actualizado seria auxiliar y no autores de modo que no funcionaria la segunda ves de ejecucion
bueno gracias de todas formas
En línea
Kira & Eva :D
Habitual
*****
Desconectado Desconectado

Mensajes: 289


Senior Programmer


Ver Perfil Email
« Respuesta #3 en: Octubre 13, 2006, 09:27:33 »

En línea
stlogan
Maxter
Miembro
*****
Desconectado Desconectado

Mensajes: 22


Naxter


Ver Perfil Email
« Respuesta #4 en: Octubre 13, 2006, 12:31:02 »

yo creo que hice uno en la universidad por mi segundo semestre..  Roll Eyes Roll Eyes

Nombre Autor   Libros
Pepe el Toro      blabla1    blabla 2  blabla 3  blabla 4

La verdad no se si lo tenga todavia, lo buscare por la  noche, pero no se requeriria guardar en una matriz?

u otra cosa seria que  si el autor ya existe  le concatenes el nuevo  libro al anterior, y asi sucesivamente los vas separando por ";" y te creas otra funcion para que al momento de encontrarse un ";" sabras que es otro libro.


blabla1;blabla2;blabla3; etc...etc..



Estoy un poco enpolvado con C asi que si me equivoco pss ya saben porque.
En línea


Necesitas ser usuario para ver los enlaces Crear Usuario  Hacer Sesion
Kira & Eva :D
Habitual
*****
Desconectado Desconectado

Mensajes: 289


Senior Programmer


Ver Perfil Email
« Respuesta #5 en: Octubre 14, 2006, 01:44:36 »

En línea
IIMorlesII
Miembro
*****
Desconectado Desconectado

Mensajes: 127



Ver Perfil Email
« Respuesta #6 en: Octubre 16, 2006, 03:54:26 »


* No se tu pero la libreria #include <fstream.h> te ayudaria de mucho...
En línea

.:. * NO - USEN - VIRUSTOTAL.COM * .:.
Páginas: [1] Ir Arriba Imprimir 
Comunidad Underground Hispana  |  Programacion  |  Programación  |  Carbide C/C#/C++  |  Tema: problema con modificar un archivo de texto « anterior próximo »
Ir a:  


Ranking-Hits
Powered by SMF 1.1.7 | SMF © 2006-2007, Simple Machines LLC