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",®istro.Cedula);
do
{
//system ("cls");
fflush(stdin);
printf("Introduzca el Nombre: ");
scanf("%s", ®istro.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",®istro.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",®istro.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",®istro.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",®istro.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(®istro, 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", ®istro.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",®istro.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",®istro.correo);
fflush(stdin);
break;
}
registro.Eliminado=0; // Aqui dejo constancia que el registro no esta eliminado
fseek(empleados,sizeof(registro)*h,SEEK_SET);
fwrite(®istro, 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
}