import java.io.*; import java.util.*; class DepositAccountMain6 // Version of DepositAccountMain5 with bug fixed: // can't deposit or withdraw negative amount { public static void main(String[] args) throws IOException { BufferedReader in = new BufferedReader(new InputStreamReader(System.in)); int sum; double interest; while(true) try { System.out.print("Initial deposit: "); sum = Integer.parseInt(in.readLine()); if(sum<=0) System.out.println("Cannot deposit non-positive amount"); else break; } catch(NumberFormatException e) { System.out.println("Not a valid figure"); } while(true) try { System.out.print("Interest rate%: "); interest = Double.parseDouble(in.readLine())/100; break; } catch(NumberFormatException e) { System.out.println("Not a valid figure"); } DepositAccountB acc = new DepositAccountB(sum,interest); char command; do { StringTokenizer line; String num; do { System.out.print("Command: "); line = new StringTokenizer(in.readLine()); } while(!line.hasMoreTokens()); 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': num=line.hasMoreTokens()?line.nextToken():""; while(true) try { while(num.equals("")) { System.out.print("Enter amount: "); num=in.readLine(); } sum=Integer.parseInt(num); if(sum<=0) { System.out.println("Cannot deposit non-positive amount"); num=""; } else { acc.deposit(sum); break; } } catch(NumberFormatException e) { System.out.println("Not a valid figure"); num=""; } break; case 'w': num=line.hasMoreTokens()?line.nextToken():""; while(true) try { while(num.equals("")) { System.out.print("Enter amount: "); num=in.readLine(); } sum=Integer.parseInt(num); if(sum<=0) { System.out.println("Cannot withdraw non-positive amount"); num=""; } else { acc.withdraw(Integer.parseInt(num)); break; } } catch(NumberFormatException e) { System.out.println("Not a valid figure"); num=""; } catch(AccountException e) { System.out.print("Withdrawal refused: "); if(e.getMessage().equals("overdraw")) System.out.println("would make account overdrawn"); else System.out.println("previous withdrawal this month"); break; } break; case 'q': break; default: System.out.println("Invalid command"); } } while(command!='q'); } }