2014-12-19 94 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的数目添加到函数的输入中。