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

 

 


Tema destacado: Los 10 CVE más críticos (peligrosos) de 2020


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

Desconectado Desconectado

Mensajes: 13


Ver Perfil
Ayuda con Manejo de archivos!
« en: 9 Septiembre 2016, 02:29 am »

Estoy haciendo un menu donde tenga las opciones de crear,mostrar,busrcar,eliminar y modificar archivo...

Ya tengo casi todo solo me hace falta el de eliminar y modificar.
Pero ahorita tengo bastantes problemas con el de modificar ya que al momento de pedrile que ingrese el numero de registro para modificaar no entra al ciclo... Quizas por el tiempo que eh estado en esto no veo el error. alguien que me pueda ayudar con esto o que me explique otro metodo para modificar.

este es mi codigo:

#include <Iostream>
#include<ctype.h>
#include<conio.h>
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
using namespace std;

FILE *empleados;
int n=1; /*Número del empleado*/
int i=0,band=0,fin=0,e=0,o=0;
int respu=0;
int r1=0, r2=0, r3=0, r4=0;

struct sRegistro
{
    char nombre[80];
    char apellido[80];
    char telefono[80];
    char direccion[80];
    char correo[80];
    char resp[5];
    char Cedula[11];
    char k, nom[80];
    double salario;
    int Eliminado;
} registro;


void Menu()
{
   printf("\t\t Menu Registros  \n");
    printf("\n1.- Crear Registro");
   printf("\n2.- Ingresar datos");
   printf("\n3.- Modificar Registro");
   printf("\n4.- Eliminar Registro");
   printf("\n5.- Mostrar Registros");
   printf("\n6.- Buscar Registro");
   printf("\n7.- Salir \n");
}

void creararchivo()
{
       empleados=fopen("empleados.txt", "r");
 
    if(!empleados)
    {
       empleados=fopen("empleados.txt", "w");
       printf("\nArchivo creado!");
    }
    else
    {
       printf("\nEl Archivo ya existe!");
    }
 
    fclose (empleados);
 
    return;
}

void insertararchivo()
{
   
   empleados=fopen("empleados.txt","a+");
 
   if(empleados == NULL)
   {
      printf("El archivo no existe! \nPor favor debe crearlo");
      return;
   } 
         
             printf("Introduzca el numero del empleado: ");
            scanf("%s",&registro.Cedula);     
             do
            {
               //system ("cls");                   
               fflush(stdin);
               printf("Introduzca el Nombre: ");
               scanf("%s", &registro.nombre);
               //while (nom[fin]!='\0')fin++;
               fin=strlen(registro.nombre);
               band=0;
               for(i=0;i<fin;i++)
               {
                  if(((registro.nombre>='A')&&(registro.nombre<='Z'))||((registro.nombre>='a')&&(registro.nombre<='z'))||(registro.nombre==' '))
                  {
                     band=0;
                  }
                  else //if(((nom>='A')&&(nom<='Z'))||((nom>='a')&&(nom[i<='z'])))
                  {
                     i=fin;
                     band=1;
                     printf("Caracteres invalidos... Intentelo de nuevo... \n");
                     system("pause>null");
                  }
               }
            }while(band==1);
            fflush(stdin);
            do
            {
               //system ("cls");
               fflush(stdin);
               printf("Introduzca el Apellido: ");
               scanf("%s",&registro.apellido);
               fin=strlen(registro.apellido);
               band=0;
               for(i=0;i<fin;i++)
               {
                  if(((registro.apellido>='A')&&(registro.apellido<='Z'))||((registro.apellido>='a')&&(registro.apellido<='z'))||(registro.apellido==' '))
                  {
                        band=0;
                  }
                  else
                  {
                     i=fin;
                     band=1;
                     printf("Caracteres invalidos... Intentelo de nuevo... \n");
                     system("pause>null");
                  }
               }
            }while(band==1);
            fflush(stdin);
            do
            {
               do
               {
                  //system ("cls");
                  fflush(stdin);
                  printf("Introduzca el Telefono: ");
                  scanf("%s",&registro.telefono);
                  fin=strlen(registro.telefono);
                  if(fin!=10)
                  {
                     printf("Ingrese un telefono de 10 digitos\n");
                     system("pause>null");
                  }
               }while(fin!=10);
                  band=0;
               for(i=0;i<fin;i++)
               {
                  if(((registro.telefono>='0')&&(registro.telefono<='9')))
                  {
                     band=0;
                  }
                  else
                  {
                     i=fin;
                     band=1;
                     printf("Caracteres invalidos... Intentelo de nuevo... \n");
                     system("PAUSE");
                  }
               }
            }while(band==1);
            fflush(stdin);
            do
            {
               //system ("cls");
               fflush(stdin);
               printf("Introduzca la Direccion: ");
               scanf("%s",&registro.direccion);
               //scanf("%s",direc);
               fin=strlen(registro.direccion);
               band=0;
               e=0;
               for(i=0;i<fin;i++)
               {
                  if(registro.direccion=='#')
                  {
                     e++;
                  }
                  if(((registro.direccion>='A')&&(registro.direccion<='Z')) || ((registro.direccion>='a')&&(registro.direccion<='z')) ||
                  ((registro.direccion>='0')&&(registro.direccion<='9')) || ((registro.direccion=='#')||(registro.direccion==':') ||
                  (registro.direccion==' ') || (registro.direccion=='.') || (registro.direccion=='-')))
                  {
                     band=0;
                  }
                  else
                  {
                     i=fin;
                     band=1;
                     printf("Solo se aceptan letras, numeros y los simbolos # y :\n");
                     system("pause>null");
                  }
                  if(e==2)
                  {
                     printf("Solo puede utilizar solo una vez el simbolo # \n");
                     i=fin;
                     band=1;
                     system("pause>null");
                  }
               }
            }while(band==1);
            fflush(stdin);
            do
            {
               //system ("cls");
               fflush(stdin);
               printf("Introduzca su correo electronico: ");
               scanf("%s",&registro.correo);
               fin=strlen(registro.correo);
               band=0;
               e=0;
               o=0;
               for(i=0;i<fin;i++)
               {
                  if(((registro.correo>='A')&&(registro.correo<='Z'))||
                  ((registro.correo>='a')&&(registro.correo<='z'))||
                  ((registro.correo>='0')&&(registro.correo<='9'))||
                  ((registro.correo=='#')||(registro.correo==':')||(registro.correo=='_')||(registro.correo=='-')||(registro.correo=='@')||(registro.correo=='.')))
                  {
                     if(registro.correo=='@')
                     {
                        o++;
                     }
                     if(registro.correo=='.')
                     {
                        e++;
                     }
                     band=0;
                  }
                  else
                  {
                     i=fin;
                     band=1;
                     printf("Solo se aceptan letras, numeros y los simbolos # : _ - y @ \n\n");
                     system("pause>null");
                  }
                  if(i==fin-1)
                  {
                     if(o!=1)
                     {
                        printf("Caracter invalido... Porfavor intentelo de nuevo... @\n\n");
                        i=fin;
                        band=1;
                        system("pause>null");
                     }
                  }
                  if(e>1)
                  {
                     printf("Caracter invalido... Porfavor intentelo de nuevo... \n");
                     i=fin;
                     band=1;
                     system("pause>null");
                  }
                  else if(registro.correo[fin-1]!='m')
                  {
                     printf("Caracter invalido... Porfavor intentelo de nuevo... \n");
                     i=fin;
                     band=1;
                     system("pause>null");
                  }
                  else if(registro.correo[fin-2]!='o')
                  {
                     printf("Caracter invalido... Porfavor intentelo de nuevo... \n");
                     i=fin;
                     band=1;
                     system("pause>null");
                  }
                  else if(registro.correo[fin-3]!='c')
                  {
                     printf("Caracter invalido... Porfavor intentelo de nuevo... \n");
                     i=fin;
                     band=1;
                     system("pause>null");
                  }
                  else if(registro.correo[fin-4]!='.')
                  {
                     printf("Caracter invalido... Porfavor intentelo de nuevo... \n");
                     i=fin;
                     band=1;
                     system("pause>null");
                  }
                  
               }
            }while(band==1);
            printf("\n");
            fprintf(empleados,"%s %s %s %s %s %s\n",registro.Cedula,registro.nombre,registro.apellido,registro.telefono,registro.direccion,registro.correo);
                  
     fclose(empleados);             
   
}

void Buscar()
{
   int num, f;
   char texto[2000];
   char k;
   printf("Numero de registro que desea buscar: ");
   scanf("%d",&num);
   num=num-1;
   empleados=fopen("empleados.txt","r");
   if(empleados!=NULL)
   {
      fgets(texto,2000,empleados);
      while(!feof(empleados))
      {
         if(f==num)
         {
            fprintf(empleados,"%d %s %s %s %s %s\n",n,registro.nombre,registro.apellido,registro.telefono,registro.direccion,registro.correo);
            puts(texto);
         }
         fgets(texto,2000,empleados);
         f++;         
      }
      
      
      fclose(empleados);
   }
   else
   {
      printf("Error en la apertura");
   }
}

void Modificar()
{
   char Cedula[11];
   unsigned int Tam;
   empleados=fopen("empleados.txt","rb+");
   
   if(empleados==NULL)
   {
      printf("Error en la apertura");
      return;
   }
   
   printf("Ingrese el numero de empleado a Modificar: ");
   scanf("%s",Cedula);
   
   if((empleados=fopen("empleados.txt","ab"))!=NULL)
   {
     fseek(empleados,0,2);
      Tam=ftell(empleados)/sizeof(registro);
      fclose(empleados);
   }
   
   if((empleados=fopen("empleados.txt", "rb+"))!=NULL)
   {
      for(int h=0; h<Tam ; h++)
      {//Inicia for
         fread(&registro, sizeof(struct sRegistro), 1, empleados);
            if(strcmp(Cedula,registro.Cedula)==0 and registro.Eliminado==0){
            printf("Desea cambiar la direccion? [ Si = 1 / No = 2 ]");
            scanf("%d",r1);
            fflush(stdin);
            while(r1==1)
            {
               printf("Ingrese nueva Direccion: ");
               scanf("%s", &registro.direccion);
               fflush(stdin);
               break;
            }
            
            printf("Desea cambiar el telefono? [ Si = 1 / No = 2 ]");
            scanf("%d",r2);
            fflush(stdin);
            while(r2==1)
            {
               printf("Ingrese nuevo telefono: ");
               scanf("%s",&registro.telefono);
               fflush(stdin);
               break;
            }
            
            printf("Desea cambiar el Email? [ Si = 1 / No = 2 ]");
            scanf("%d",r3);
            fflush(stdin);
            while(r3==1)
            {
               printf("Ingrese nuevo Email: ");
               scanf("%s",&registro.correo);
               fflush(stdin);
               break;
            }
            
       registro.Eliminado=0; // Aqui dejo constancia que el registro no esta eliminado        
         fseek(empleados,sizeof(registro)*h,SEEK_SET);
        fwrite(&registro, sizeof(struct sRegistro), 1, empleados);
   
         fclose(empleados);
        return;    

         }
      } //Cierra for
   }
   
   printf("El numero de empleado no existe...");         
    return;
   
}

void Mostrar()
{
   empleados=fopen("empleados.txt","r");
   char c;
   cout<<"\t\t Registros Ingresados: "<<endl;
   while(!feof(empleados))
   {
      c=fgetc(empleados);
      putchar(c);
   }
   fclose(empleados);
   
}


int main()
{
   int exit=0;
   int opcion;
    FILE *empleados;
    
    while(!exit)
    {//Inicia while
       
        Menu();
        printf("Opcion: ");
        scanf("%d",&opcion);
       
        switch(opcion)
        {
           case 1: creararchivo();
           system("pause>nuell");
           system("cls");
           break;
           
           case 2: insertararchivo();
           system("pause>null");
           system("cls");
           break;
           
           case 3:Modificar();
           system("pause>null");
           system("cls");
           break;
           
           case 4:
           break;
           
           case 5: Mostrar();
           system("pause>null");
           system("cls");
           break;
           
           case 6: Buscar();
           system("pause>null");
           system("cls");
           break;
           
           case 7:
              exit=1;
           break;
       }

       
   }//Termina while
   
}


En línea

AlbertoBSD
Programador y
Moderador Global
***
Desconectado Desconectado

Mensajes: 3.705


🏴 Libertad!!!!!


Ver Perfil WWW
Re: Ayuda con Manejo de archivos!
« Respuesta #1 en: 9 Septiembre 2016, 16:02 pm »

No entra al for de la funcion modificar??

Mira he detectado que abres arbitrariamente el archivo.
Lo abres cuando declaras la variable

Código
  1. empleados=fopen("empleados.txt","rb+");

No hay fclose para el primer fopen ademas vuelves a abrir en

Código
  1. if((empleados=fopen("empleados.txt", "rb+"))!=NULL)

Eso puede dar problemas, por que si ya esta abierto por tu programa te puede dar error de lectura al momento de calular el tamaño de tu archivo. (Cantida de registros) y tal vez por eso no entre al for.

Saludos!


En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Ayuda en manejo de Archivos en Lenguaje C
Programación C/C++
theluigy13etv 3 3,851 Último mensaje 9 Diciembre 2011, 01:28 am
por rir3760
Ayuda para el manejo de archivos[Solucuionado]
.NET (C#, VB.NET, ASP)
Sk9ITk5Z 3 3,682 Último mensaje 31 Enero 2012, 17:27 pm
por Sk9ITk5Z
ayuda con manejo de archivos en c
Programación C/C++
tamyta_19 4 2,968 Último mensaje 24 Abril 2015, 17:03 pm
por tamyta_19
Ayuda con MANEJO DE ARCHIVOS
Programación C/C++
felixgz 1 1,983 Último mensaje 2 Marzo 2016, 23:36 pm
por carolabeatle
ayuda con manejo de archivos en vb.net 2008 « 1 2 »
.NET (C#, VB.NET, ASP)
**Aincrad** 12 8,966 Último mensaje 23 Septiembre 2017, 13:08 pm
por Eleкtro
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines