【问题标题】:Having trouble using date for an interest calculate使用日期进行利息计算时遇到问题
【发布时间】:2013-10-01 10:20:13
【问题描述】:

我需要一点逻辑帮助和一些代码帮助。

我正在编写一个假定为简单 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;

}

【问题讨论】:

  • 我在数据结构中没有看到存储最后交易日期的任何字段。

标签: java arrays date arraylist gregorian-calendar


【解决方案1】:

您应该在此处使用ArrayList 插入数组,但更重要的是,您应该在此处使用数据库,即使它只是一个内存中的临时数据库。此外,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 了吗?

您的应用程序将有一个交易列表,除非您保留将用户 ID 映射到余额的映射,否则您需要一个 balance 方法:

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 变量,并定期增加 currentDateup。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-07-18
    • 2022-09-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多