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;

}
4

1 回答 1

0

您应该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;
    }
}

现在,您需要编写acceptDepositandacceptWithdrawl方法。在数据库方面,您需要一个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变量,并currentDate定期增加。

于 2013-09-25T18:04:15.547 回答