2016-11-21 77 views
0

我正在编写一个银行GUI程序,该程序允许用户将钱转入,提取或存入支票和储蓄账户,并允许他们检查每个账户的余额。余额和存款的方式工作正常。转账和银行程序退出方法的问题

传输方法应该允许用户在文本字段中输入钱数,只要它可用。如果不是,则抛出异常。问题是,即使有足够的,异常仍然被抛出。

至于我的提款方式,它让用户以20美元的增量提款。它的工作原理,但它不断显示一个消息,说没有足够的资金。在用户为两个账户取消总计四次后,它也应该收取1.50美元。

银行类

import javax.swing.*; 
import java.awt.*; 
import java.awt.event.ActionEvent; 
import java.awt.event.ActionListener; 

public class Banking extends JPanel 
{ 
    private JFrame frame; 
    private JPanel panel; 
    private JButton withdraw; 
    private JButton deposit; 
    private JButton transfer; 
    private JButton balance; 
    private JRadioButton checking; 
    private JRadioButton savings; 
    private JTextField input; 
    private Account checkingAccount; 
    private Account savingsAccount; 
    private Account currentAccount; 
    private double amount; 

    public Banking(Account checkingAccount,Account savingsAccount) 
    { 

     frame=new JFrame("ATM"); 
     panel=new JPanel(); 
     withdraw=new JButton("Withdraw"); 
     deposit=new JButton("Deposit"); 
     transfer=new JButton("Transfer"); 
     balance=new JButton("Balance"); 
     checking=new JRadioButton("Checking"); 
     savings=new JRadioButton("Savings"); 
     input=new JTextField(""); 
     this.checkingAccount=checkingAccount; 
     this.savingsAccount=savingsAccount; 

     panel.setLayout(new GridLayout(4,2)); 

     panel.add(withdraw);panel.add(deposit); 
     panel.add(transfer);panel.add(balance); 
     panel.add(checking);panel.add(savings); 
     panel.add(input); 

     frame.add(panel); 
     frame.pack(); 
     frame.setLocationRelativeTo(null); 
     frame.setSize(600,300); 
     frame.setVisible(true); 


     checking.addActionListener(new ActionListener(){ 

      public void actionPerformed(ActionEvent e) 
      { 
       if(checking.isSelected()) 
       { 
        currentAccount=checkingAccount; 
        savings.setSelected(false); 
       } 
      } 
     }); 

     savings.addActionListener(new ActionListener(){ 

      public void actionPerformed(ActionEvent e) 
      { 
       if(savings.isSelected()) 
       { 
        currentAccount=savingsAccount; 
        checking.setSelected(false); 
       } 
      } 
     }); 


     withdraw.addActionListener(new ActionListener(){ 

      public void actionPerformed(ActionEvent e) 
      { 


      try 
      { 
       amount=Double.parseDouble(input.getText()); 
       if(amount%20==0) 
       { 
        currentAccount.withdraw(amount); 
        JOptionPane.showMessageDialog(null, "You've withdrawn $"+amount); 


       } 
       else 
       { 
        JOptionPane.showMessageDialog(null, "You can only withdraw money in increments of $20"); 

       } 
      } 
      catch(NumberFormatException a) 
      { 
       JOptionPane.showMessageDialog(null, "Please enter a numerical number"); 
      } 
      catch (InsufficientFunds e1) 
      { 
       JOptionPane.showMessageDialog(null, "Not enough funds"); 

      } 

      } 
     }); 


    transfer.addActionListener(new ActionListener(){ 

     public void actionPerformed(ActionEvent e) 
     { 
      if(currentAccount.equals(savingsAccount)) 
      { 

       try 
       { 
        currentAccount.transferTo(savingsAccount, amount); 
       } 
       catch(NumberFormatException a) 
       { 
        JOptionPane.showMessageDialog(null, "Please enter a numerical number"); 
       } 
       catch (InsufficientFunds e1) 
       { 
        JOptionPane.showMessageDialog(null, "Not enough funds"); 

       } 
      } 
      else 
      { 
       try 
       { 
        currentAccount.transferTo(checkingAccount, amount); 
       } 
       catch(NumberFormatException a) 
       { 
        JOptionPane.showMessageDialog(null, "Please enter a numerical number"); 
       } 
       catch (InsufficientFunds e1) 
       { 
        JOptionPane.showMessageDialog(null, "Not enough funds"); 
      } 
    } 
     } 
    }); 

    deposit.addActionListener(new ActionListener(){ 

     public void actionPerformed(ActionEvent e) 
     { 
      try 
      { 
       amount=Double.parseDouble(input.getText()); 
       currentAccount.deposit(amount); 
       JOptionPane.showMessageDialog(null, "You've deposited $"+amount); 


      } 
      catch(NumberFormatException a) 
      { 
       JOptionPane.showMessageDialog(null, "Please enter a numerical number"); 
      } 
     } 
    }); 


    balance.addActionListener(new ActionListener(){ 

     public void actionPerformed(ActionEvent e) 
     { 

      JOptionPane.showMessageDialog(null, "You're balance is $ "+currentAccount.getBalance()); 

     } 
    }); 


} 
    public static void main(String[] args) 
    { 
     Account checking=new Account(3000.00); 
     Account savings=new Account(5000.00); 
     Banking myBank=new Banking(checking,savings); 
    } 
} 

Account类

public class Account 
{ 
private double balance; 
static int counter=0; 

public Account(double balance) 
{ 
    this.balance=balance; 
} 

public void withdraw(double amount) throws InsufficientFunds 
{ 
    int counter=0; 

    if(amount<=balance) 
    { 
     balance=balance-amount; 
     counter++; 

     if(counter>4) 
     { 
      if(balance<1.50) 
      { 
       throw new InsufficientFunds(1.50); 
      } 
      else 
      { 
       balance=balance-1.50; 
      } 
     } 

    else 
    { 
     double needed=amount-balance; 
     throw new InsufficientFunds(needed); 
    } 
    } 


} 

public double getBalance() 
{ 
    return balance; 
} 

public void deposit(double amount) 
{ 
    balance=balance+amount; 
} 

public void transferTo(Account bank, double amount) throws InsufficientFunds 
{ 
    if(amount<=balance) 
    { 
     withdraw(amount); 
     bank.deposit(amount); 
    } 
    else 
    { 
     throw new InsufficientFunds(amount); 
    } 
} 
} 

资金不足类

import java.io.*; 
public class InsufficientFunds extends Exception 
{ 
private double amount; 

public InsufficientFunds(double amount) 
{ 
     this.amount = amount; 
} 

public double getAmount() 
{ 
     return amount; 
} 
} 
+0

我认为你有'如果之前。 ..然后...其他'大括号问题。在'withdraw()'中,'else throw InsufficientFunds()'与外部'account <= balance'缩进,但实际上与'counter> 4'配对。而且,你的'counter'是一个局部变量而不是类成员,所以它不能正常工作。 –

+0

我试图抛出一个异常,如果用户没有足够的钱来支付1.50美元的费用。另外,我认为静态变量是类成员? – WILLO567

+0

谢谢,解决了问题 – WILLO567

回答

1

我只能看到你解释什么2个问题,

* Insid e提取方法是声明一个新的计数器,计数器加1后计数器总是为1。

public void withdraw(double amount) throws InsufficientFunds{ 
    int counter = 0; // should be removed .. 
} 

**如果计数器大于4时,你应该已经检查账户是否具备1.50费足够的钱扣除取款金额

if(amount<=balance) 
    { 

    if(counter>4) 
    { 

     if(balance<(amount+1.50)) 
     { 
      throw new InsufficientFunds((amount+1.50)-balance); 
     } 
     else 
     { 
      balance=balance-amount-1.50; 
      counter++; 
     } 

    }else{ 

    balance=balance-amount; 
    counter++; 
    } 
} 
+0

我其实已经解决了这个问题,但后来我遇到了另外一个问题:当我点击它时,我的传输按钮根本不起作用 – WILLO567

+0

*“但是接着我遇到了另一个问题”在一个更多的问题线程中还有一个问题。 SO是一个问答网站,而不是帮助台。如果它有助于解决问题,请[接受答案](http://meta.stackexchange.com/a/5235/155831)。 –