2013-09-25 103 views
0

我需要一些邏輯幫助以及一些代碼幫助。使用日期計算利息時遇到問題

我正在寫的假設是一個簡單的ATM程序的程序。它將進行存款提款和餘額檢查。

我也得有我的節目錄制每一個存款的日期,計算當用戶檢查自己的資產負債5%的利息時使用日期。存在問題的部分是我需要存儲存款金額的部分以及與該存款相對應的日期。我應該使用GregorianCalender方法。我只是在黑暗中射擊,但我想我會用這個陣列。但即使如何執行它也一無所知。因爲我是數組的新手。

,一旦我得到一個日期,檢查平衡時,我需要檢查多少個月了一直以來該數額的存款計算利息。對不起,它是一個非常複雜的問題,但我是一個新手,這是以前寫過的最複雜的事情。

public void printDeposit(){ 
    Calendar c = new GregorianCalendar(); 
    BigDecimal depositamt; 
    Date date = c.getTime(); 

    int menuselection; 
    System.out.println("Press 1 to deposit, zero to return to the main menu."); 
    Scanner sc = new Scanner (System.in); 

    menuselection = sc.nextInt(); 
      if (menuselection==1){ 
       System.out.println("Please enter the amount: " + date); 
       depositamt = sc.nextBigDecimal(); 
       Transaction tran = new Transaction(depositamt, date); 

    } 

public class Transaction { 

BigDecimal amt; 
Date date; 


public Transaction(BigDecimal amt, Date date) { 
    this.amt = amt; 
    this.date = date; 

} 
+0

我沒有看到數據結構中存儲最後一個tranasction日期的任何字段。 –

回答

0

您應該使用ArrayList instread這裏陣列的,但更重要的是,你的目標應該是使用databasehere,哪怕它只是一個內存中臨時數據庫。另外,printDeposit方法的命名很糟糕;這可能對應於打印存款收據。你會希望你的邏輯是這樣的:

Console console = System.getConsole(); 
if (console == null) {System.exit(42)} 
while(true) (
    String option = console.readLine("What would you like to ask this ATM? %d to Quit, %d to deposit, %d to withdraw:", 0, 1, 2; 
    switch (option) { 
     case "1": acceptDeposit(); break; 
     case "2": acceptWithdrawl(); break; 
     case "0": quit(); break; 
     default: break; 
    } 
} 

現在,你需要寫acceptDepositacceptWithdrawl方法。用數據庫術語來說,你需要一個balance表和一個transaction表。在Java方面,你想要類是這樣的:

public class Transaction { 
    enum Type {DEPOSIT, WITHDRAWL, INTEREST}; 
    private Long userId; 
    private Type type; 
    private BigDecimal amount; 
    private Date date; // Switch to Joda-Time or its Java 8 equivalent when you can. 
    // getters, setters, etc. 
    public getBalanceChange() { 
     if (type != WITHDRAWL) { 
      return amount; 
     } else { 
      return amount.negate(); 
     } 
    } 
} 

你知道爲什麼你想要的用戶ID?

您的應用程序將有交易的列表,並uneless你保持一個地圖,用戶ID映射到平衡,你會希望有一個平衡的方法:

public BigDecinmal balance(Long userId) { 
    BigDecimal balance = new BigDecimal("0.00"); 
    for (Transaction t: transactionList) { 
     if (userId.equals(t.getUserId())) { 
      balance = balance.add(t.getBalanceChange()); 
     } 
    } 
} 

與數據庫表,你會怎麼做對數據庫進行更新。如果這個應用程序持續運行,您可能會安排工作來計算興趣,可能使用Java Quartz庫。對於學生的應用程序,你會被具有方法模擬它:

private void applyInterest(Date from, Date to){...} 

事實上,這是反對使用GregorianCalendar並獲得一個每次交易時的參數;在實際使用中,每個會話將是單一日的一部分。取而代之的是,有一個Date currentDate和一個Date interestLastApplied變量,並且週期性地打開currentDate