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ここでは配列の instread を使用する必要がありますが、より重要なことは、メモリ内の一時データベースであっても、データベースを使用することを目指す必要があります。また、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;
    }
}

acceptDepositここで、 andメソッドを記述する必要がありacceptWithdrawlます。データベース用語では、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());
        }
    }
}

データベース テーブルでは、データベースに対して UPDATE を実行します。このアプリが継続的に実行されている場合、おそらく Java Quartz ライブラリを使用して、利息を計算するジョブをスケジュールします。学生のアプリケーションの場合は、次のメソッドを使用してシミュレートします。

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

GregorianCalendar実際、これは、トランザクションごとに 1 つを使用および取得することに対する反論です。実際の使用では、各セッションは 1 日の一部になります。代わりに、Date currentDateDate interestLastApplied変数を用意currentDateして、定期的に増加させます。

于 2013-09-25T18:04:15.547 に答える