650

Capítulo 14 Archivos y fl ujos

Los programas para asociar archivos deben tratar con ciertos problemas que no existen en programas de un solo 

archivo. Por ejemplo, no siempre ocurre una asociación. Si un cliente en el archivo maestro no ha realizado compras 
ni pagos en efectivo en el periodo actual de negocios, no aparecerá ningún registro para este cliente en el archivo de 
transacciones. De manera similar, un cliente que haya realizado compras o pagos en efectivo podría haberse mudado 
recientemente a esta comunidad, y tal vez la compañía no haya tenido la oportunidad de crear un registro maestro para 
este cliente.

Escriba un programa completo para asociar archivos de cuentas por cobrar. Utilice el número de cuenta en cada 

archivo como la clave de registro para fi nes de asociar los archivos. Suponga que cada archivo es un archivo de texto 
secuencial con registros almacenados en orden ascendente, por número de cuenta.
 a) 

Defi na la clase 

RegistroTransaccion

. Los objetos de esta clase contienen un número de cuenta y un 

monto para la transacción. Proporcione métodos para modifi car y obtener estos valores.

 b) 

Modifi que la clase 

RegistroCuenta

 de la fi gura 14.6 para incluir el método 

combinar

, el cual recibe un 

objeto 

RegistroTransaccion

 y combina el saldo del objeto 

RegistroCuenta

 con el valor del monto 

del objeto 

RegistroTransaccion

.

 

c) Escriba un programa para crear datos de prueba para el programa. Use los datos de la cuenta de ejemplo de 

las fi guras 14.24 y 14.25. Ejecute el programa para crear los archivos 

trans.txt

 y 

antmaest.txt

, para que 

los utilice su programa de asociación de archivos. 

 

d) Cree la clase 

AsociarArchivos

 para llevar a cabo la funcionalidad de asociación de archivos. La clase debe 

contener métodos para leer 

antmaest.txt

 y 

trans.txt

. Cuando ocurra una coincidencia (es decir, que 

aparezcan registros con el mismo número de cuenta en el archivo maestro y en el archivo de transacciones), 
sume el monto en dólares del registro de transacciones al saldo actual en el registro maestro, y escriba el 
registro

 "nuevomaest.txt"

. (Suponga que las compras se indican mediante montos positivos en el archivo 

de transacciones, y los pagos mediante montos negativos). Cuado haya un registro maestro para una cuen-
ta específi ca, pero no haya un registro de transacciones correspondiente, simplemente escriba el registro 
maestro en

 "nuevomaest.txt".

 Cuando haya un registro de transacciones pero no un registro maestro co-

rrespondiente, imprima en un archivo de registro el mensaje 

"Hay

 

un

 

registro

 

de

 

transacciones

 

no

 

asociado para

 

ese

 

numero

 

de

 

cliente..."

 (utilice el número de cuenta del registro de transacciones). El 

archivo de registro debe ser un archivo de texto llamado 

"registro.txt"

.

14.9

(Asociación de archivos con varias transacciones) Es posible (y muy común) tener varios registros de transacciones 

con la misma clave de registro. Esta situación ocurre cuando un cliente hace varias compras y pagos en efectivo durante 
un periodo de negocios. Rescriba su programa para asociar archivos de cuentas por cobrar del ejercicio 14.8, para pro-
porcionar la posibilidad de manejar varios registros de transacciones con la misma clave de registro. Modifi que los datos 
de prueba de 

CrearDatos.java

para incluir los registros de transacciones adicionales de la fi gura 14.26.

14.10 

(Asociación de archivos con serialización de objetos) Vuelva a crear su solución para el ejercicio 14.9, usando la 

serialización de objetos. Use las instrucciones del ejercicio 14.4 como base para este programa. Tal vez sea conveniente 
crear aplicaciones para que lean los datos almacenados en los archivos 

.ser

; puede modifi car el código de la sección 

14.6.2 para este fi n.

Número
de cuenta

Nombre

Saldo

100

Alan Jones

348.17

300

Mary Smith

27.19

500

Sam Sharp

0.00

700

Susy Green

-14.22

Figura 14.24

  |  Datos de ejemplo para el archivo maestro.

14_MAQ_CAP_14_DEITEL.indd650

4/19/081:28:28AM