import java.io.RandomAccessFile; import java.io.IOException; /** Questa classe funge da tramite per un file ad accesso casuale contenente i dati di conti */ public class BankData { public BankData() { file = null; } /** Questo metodo apre il file dei dati @param filename il nome del file che contiene informazioni sui conti */ public void open(String filename) throws IOException { if(file != null) file.close(); file = new RandomAccessFile(filename, "rw"); } /** Restituisce il numero di conti presenti nel file @return il numero di conti */ public int size() throws IOException { return (int)(file.length() / RECORD_SIZE); } /** Chiude il file dei dati */ public void close() throws IOException { if(file != null) file.close(); file = null; } /** Legge i record di un conto di risparmio. @param n l'indice del conto nel file dei dati @return un oggetto di tipo SavingsAccount inizializzato con i dati letti del file */ public SavingsAccount read(int n) throws IOException { file.seek(n*RECORD_SIZE); double balance = file.readDouble(); double interestRate = file.readDouble(); SavingsAccount account = new SavingsAccount(interestRate); account.deposit(balance); return account; } /** Scrive il record di un conto di risparmio nel file dei dati. @param n l'indice del conto nel file dei dati @param accountil conto da scrivere */ public void write(int n, SavingsAccount account) throws IOException { file.seek(n*RECORD_SIZE); file.writeDouble(account.getBalance()); file.writeDouble(account.getInterestRate()); } private RandomAccessFile file; public static final int DOUBLE_SIZE = 8; public static final int RECORD_SIZE = 2 * DOUBLE_SIZE; }