Una ayudira de archivos en borland c++

¿Docma cómo estas? Necesito un gran favor
Se tienen dos archivos en c++ con la siguiente estructura
struct banco
{
int ncuenta;
char nombre[15];
char apellido[15];
int cedula;
char dir[15];
int telf;
char fecha[20];
char sexo;
float valor_ini;
float saldo;
}ban;
struct movimientos
{
int ncuenta;
int valor;
char tipo;
}movim;
Se requiere hacer que el usuario digite los movimientos en el archivo cuentas y que este actualice automáticamente el campo saldo del archivo cliente para lo cual se realiazó el siguiente procedimiento..
void movimientos()
{
int cuenta;
char bandera;
float consignacion;
int opcion;
int cont;
cont=0;
//bandera='f';
lp;
gotoxy(16,7); cout << " BIEN VENIDOS AL MENU DE TRANSACCIONES ";
gotoxy(20,10);cout << " 1. ABONOS O CONSIGNACIONES";
gotoxy(20,11);cout << " 2. RETIROS";
gotoxy(20,12);cout << " 3. Listar";
gotoxy(20,14);cout << " Digite su eleccion [ ]";
gotoxy(43,14);cin>>opcion;
if (opcion < 1 && opcion > 3)
{
gotoxy(23,8);cout<<"su opcion no es valida";
getch();
}
else
{
if (opcion==1)
{
lp;
fp=fopen ("cliente.dat","r+");
mov=fopen("cuentas.dat","ab+");
cop=fopen("copia.cop","ab+");
//cout<<" 1.ABONOS O CONSIGNACIONES"<<endl;
g(10,10);cout<<"Cuenta ---> ";
g(10,12),cout<<"Valor a Consignar";
g(35,10);cin>>cuenta;
buscar(cuenta);
if (bandera == 'f' )
{
lp;
g(5,10);cout<<" 111ERROR NUMERO DE LA CUENTA NO EXISTE"<<endl;
getch();
}
else
{
g(35,12);cin>>consignacion;
movim.ncuenta = cuenta;
movim.valor = consignacion;
movim.tipo = 'C';
fwrite(&movim,sizeof(struct movimientos),1,mov);
fclose(mov);
rewind(mov);
}
rewind(fp);
while (!feof(fp))
{
fread(&ban,sizeof (struct banco),1,fp);
if (!feof(fp))
{
if (cuenta == ban.ncuenta)
{
ban.saldo = consignacion+ban.saldo;
fwrite(&ban,sizeof (struct banco),1,cop);
fwrite(&ban,sizeof (struct banco),1,b);
rewind(fp);
cont=cont+1;
g(1,1);cout<<"bandera1 "<<cont;
getch();
while (!feof(fp))
{
fread(&ban,sizeof (struct banco),1,fp);
if (!feof(fp) && (ban.ncuenta != cuenta))
{
fwrite(&ban,sizeof (struct banco),1,cop);
}
fclose(fp);
fclose(cop);
remove ("clientes.dat");
fp=fopen("clientes.dat","ab+");
cop = fopen("copia.cop","r+");
cont=cont+1;
g(1,1);cout<<"bandera2 "<<cont;
getch();
while (!feof(cop))
{
cont=cont+1;
g(1,1);cout<<"bandera3 "<<cont;
getch();
fread(&ban,sizeof (struct banco),1,cop);
if (!feof(cop))
{
fwrite(&ban,sizeof (struct banco),1,fp);
}
}
cont=cont+1;
g(1,1);cout<<"bandera4 "<<cont;
getch();
fclose(fp);
fclose(cop);
remove ("copia.cop");
}
}
}
}
}
if (opcion==3)
{
listar_mov();
}
}
}
Lo que sucede es que no esta actualizando el archivo clientes aunque actualiza el de movimientos.

1 Respuesta

Respuesta
1
Soy Docm@,
En Principio, puede ser que el error venga dado por el modo de Lectura/Escritura del archivo de clientes ( Clientes.dat ) Ya que no lo esta actualizando, pues bien :
¿Por qué no pruebas a cambiarle el modo de escritura?
Por ejemplo en la primera apertura del archivo clientes.dat lo tienes con r+ ( lectura/escritura en modo texto )
Pero la segunda apertura del archivo lo tienes con ab+ ( lectura/escritura en modo binario )
Prueba a ponerle en la primera apertura del archivo clientes.dat : ab+ en el modo de escritura en vez de r+...
No obstante, no puedo leer del todo el código ya que me faltan partes del archivo y no puedo probarlo, así que, es lo más que te puedo ayudar con la parte de código que me has enviado...
Suerte...
Un Saludo
Docm@
P.D. Si tienes alguna duda, estoy a Tu disposición...

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas