import java.io.*; import java.util.*; class DepositAccountMain4 // Version of DepositAccountMain2 using DepositAccountB // i.e. withdraw method can throw AccountException { public static void main(String[] args) throws IOException { BufferedReader in = new BufferedReader(new InputStreamReader(System.in)); System.out.print("Initial deposit: "); int sum = Integer.parseInt(in.readLine()); System.out.print("Interest rate%: "); double interest = Double.parseDouble(in.readLine())/100; DepositAccountB acc = new DepositAccountB(sum,interest); char command; do { System.out.print("Command: "); StringTokenizer line = new StringTokenizer(in.readLine()); command = line.nextToken().charAt(0); switch(command) { case 'b': System.out.println("Balance is "+acc.balance()); break; case 'n': acc.update(); System.out.println("Start month with "+acc.balance()); break; case 'd': acc.deposit(Integer.parseInt(line.nextToken())); break; case 'w': try { acc.withdraw(Integer.parseInt(line.nextToken())); } catch(AccountException e) { System.out.print("Withdrawal refused: "); if(e.getMessage().equals("overdraw")) System.out.println("would make account overdrawn"); else if(e.getMessage().equals("doubleWithdraw")) System.out.println(" previous withdrawal this month"); else System.out.println(); } break; case 'q': break; default: System.out.println("Invalid command"); } } while(command!='q'); } }