2014-12-19 137 views
0

我將創建一個跟蹤銀行賬戶餘額的程序。該計劃應使用一直持續到用戶的動產回答沒有的問題要繼續做退出循環?如何跟蹤銀行賬戶餘額?

在循環中,用戶應被要求輸入金額(存款爲正,取款爲負)。該金額應從賬戶餘額變量中加/減。所有存款/取款應保存爲的歷史記錄,以便日後打印。當用戶選擇退出循環時,應打印當前帳戶餘額以及帳戶歷史記錄(來自數組/ ArrayList)。

現在,我想使用一個具有十個插槽的數組作爲歷史記錄功能。

我的問題是如何能夠跟蹤所有存款,收回和經常賬戶餘額(使用十個插槽歷史功能的陣列),以便在用戶退出,我可以把它打印出來程序?

我的代碼:

將爲BankApp類:

package bankapp; 

import java.util.Scanner; 

public class BankApp { 

    public static void main(String[] args) { 

     Scanner input = new Scanner(System.in); 
     askingUser au = new askingUser(); 

     System.out.println("WELCOME TO OUR BANK!\nYou have 100 SEK by default in your account."); 

     while (true) { 

      au.userInput(); 

      System.out.println("Do you want to continue? Answer by Yes or No."); 
      String yesOrNo = input.next(); 

      if (yesOrNo.equalsIgnoreCase("yes")) { 

       au.userInput(); 

      } else if (yesOrNo.equalsIgnoreCase("no")) { 
       System.out.println("History: "); 

       //print out the transaction history 
       System.exit(0); 

      } else { 

       System.out.println("Invalid character input."); 

      } 

     } 

    } 
} 

askingUser類:

package bankapp; 

import java.util.Scanner; 

public class askingUser { 

    Scanner input = new Scanner(System.in); 
    double initialBal = 100; 

    public void userInput() { 
     System.out.println("Enter your amount: (+ve for deposit & -ve for withdraw)"); 
     double inputAmount = input.nextDouble(); 

     if (inputAmount >= 0) { 

      double newPosAm = initialBal + inputAmount; 
      System.out.println("Your current balance is: " + newPosAm + " SEK"); 

     } else { 

      double newNegAm = initialBal + inputAmount; 
      System.out.println("Your current balace is: " + newNegAm + " SEK"); 
     } 

    } 

} 
+0

數組是一個壞主意,因爲您需要「記住」哪個索引是最新索引,然後必須以相反的順序解析該數組。最好使用'ArrayList'並在索引'0'上插入最新的條目。然後,您可以刪除索引編號> 10的條目。 – Tom 2014-12-19 11:15:31

+0

好主意,這就是我的想法。 ArrayList可能會更好。 – Simon 2014-12-19 11:21:18

回答

1

如果你使用一個數組,你必須跟蹤存儲元件的數量並在需要時調整數組的大小。最簡單的方法是將歷史記錄保存爲ArrayList中的字符串。您將添加一個消息到該列表每筆交易:

ArrayList<String> history = new ArrayList<String>(); 

void addToHistory(String transaction) { 
    history.add(transaction); 
} 

void printHistory() { 
    for(String s : history) { 
     System.out.println(s); 
    } 
} 

addToHistory("Withdrawal: 100 SEK"); 
addToHistory("Deposit: 200 SEK"); 
printHistory(); 
+0

目前尚不清楚。因爲用戶會多次輸入金額。並且每個輸入的數量都應該添加到arrayList中。這意味着必須自動和動態地添加歷史記錄。這是主要問題。那麼請你修改一下你的代碼,讓我看看正確的軌道。我不強迫你這樣做,這取決於你。謝謝。 – Simon 2014-12-19 12:04:33

+1

你只需要在每個事務中調用'addToHistory'。就像您將天平打印出來一樣。 – 2014-12-19 12:35:16

1

你需要一個隊列做到這一點。然而,對於一個簡單,快速和原始實施,您可以:

  • 定義一個名爲Transactiondeposit - double, withdraw - double, current account balance - double)的對象
  • 添加TransactionList A S成askingUser類爲屬性。我強烈建議將類名稱重命名爲AskingUser,以使其被視爲對象。
  • 在每次操作中,在剛剛添加的List的末尾添加新的Transaction
  • 在出口處打印出List的最後10個元素;你可以通過askingUser對象達到它。您還可以在askingUser類中定義一個函數以打印出最後10個元素,如果您根據選定的元素數量使該函數有效,則可以將Transaction的數目添加到函數的輸入中。