一年的五分之四 2023-11-01 15:33 采纳率: 90%
浏览 7
已结题

JAVA银行账户问题

//我是一名韩国留学生 大一这学期修JAVA  这个是本星期的作业 由于太菜 无法把两个账户之间互相转账 和利息利率写出来  谢谢帮助我的各位!!
import java.text.DecimalFormat;
import java.util.Scanner;

class BankAccount 
{
    private int balance;

    public BankAccount(int initial_amount) {
         if (initial_amount >= 0)
             balance = initial_amount;
         else
             balance = 0;
    }

    public int getBalance() {
        return balance;
    }

    public boolean deposit(int amount) {
        boolean result = false;
        if (amount < 0)
             System.out.println("invalid deposit amount");
         else {
             balance = balance + amount;
             result = true;
         }
         return result;
    }

    public boolean withdraw(int amount) {
        boolean result = false;
        if (amount < 0)
            System.out.println("invalid withdraw amount");
        else if (amount > balance)
            System.out.println("not enough balance");
        else {
            balance = balance - amount;
            result = true;
        }
        return result;
    }
}

class BankReader 
{
    private String input_line = "";
    private Scanner scan;
    public BankReader() {
        scan = new Scanner(System.in);  // Reading from System.in
    } 
    public char readCommand(String message) {
        System.out.print(message);
        input_line = scan.nextLine().toUpperCase();
        return input_line.charAt(0);
    }

    public int readAmount()
    {
        int answer = 0;
        String s = input_line.substring(1, input_line.length());

        if(s.length() > 0) {
            //double dollars_cents = new Double(s).doubleValue();
            double dollars_cents = Double.parseDouble(s);
            answer = (int)(dollars_cents*100);
        } else
            System.out.println("invalid command - input amount: 0");
        return answer;
    }
}

class BankWriter 
{
    private BankAccount bank;
    private String last_transaction = "";

    public BankWriter(BankAccount b) {
        bank = b;
    }

    public String unconvert(int i) {
        return new DecimalFormat("0.00").format(i/100.0);
    }

    public void setTransaction(String message, int amount)
    { 
        last_transaction = message + " " + unconvert(amount);
        System.out.println("transaction: " + last_transaction);
    }

    public void setTransaction(String message)
    { 
        last_transaction = message;
        System.out.println("transaction: " + last_transaction);
    }

}

class AccountController
{
    private BankReader reader; // input view
    private BankAccount primary_account, secondary_account, account;
    private BankWriter primary_writer, secondary_writer, writer;

    public AccountController (BankReader r, BankAccount a1,BankWriter w1, BankAccount a2, BankWriter w2)
    {
        reader = r;
        primary_account = a1;
        primary_writer = w1;
        secondary_account = a2;
        secondary_writer = w2;
        account = primary_account;
        writer = primary_writer;
    }

    public void resetAccount (BankAccount new_account,BankWriter new_writer) {
        account = new_account;
        writer = new_writer;
    }

    public void processTransactions()
    {
        char command = reader.readCommand("Commands (P/S/D/W/T/I/Q): ");

        switch (command) {
            case 'P':
                resetAccount(primary_account, primary_writer);
                break;
            case 'S':
                resetAccount(secondary_account, secondary_writer);
                break;
            case 'Q':
                System.out.println("Quit");
                return;
            case 'D':
                { 
                    int amount = reader.readAmount();
                    if (account.deposit(amount)) writer.setTransaction("deposit $", amount);
                    else writer.setTransaction("deposit error ", amount);
                    break;
                }
            case 'W':
                { 
                    int amount = reader.readAmount();
                    if (account.withdraw(amount)) writer.setTransaction("withdraw $", amount);
                    else writer.setTransaction("withdraw error ", amount);
                    break;
                }
            case 'T':
                // 'T 금액', 활성 계좌에서 비활성 계좌로 금액만큼 이체
                {
                    // 코드를 작성하세요.
                int amount= reader.readAmount();
                if(amount > 0 && account==primary_account
                   &&primary_account.withdraw(amount)
                   &&secondary_account.deposit(amount)){
                  writer.setTransaction("transfer $", amount);
                   }else{
                  writer.setTransaction("transfer error");
                   }
                if(amount > 0 && account==secondary_account
                   &&secondary_account.withdraw(amount)
                   &&primary_account.deposit(amount)){
                  writer.setTransaction("transfer $", amount);
                   }else{
                  writer.setTransaction("transfer error");
                   }

                        break;
                }
            case 'I':
                // 'I 이율', 활성 계좌의 금액을 이율만큼 증가
                {
                    // 코드를 작성하세요.
           
              
                    break;
            }
            default:
                writer.setTransaction("invalid commpand: " + command);
        }
        // 모든 계좌의 정보를 출력합니다.
        System.out.println("=======================");
        System.out.println("== currently active : " + ((account == primary_account) ? "primary" : "secondary"));
        System.out.println("== primary account : " + primary_writer.unconvert(primary_account.getBalance()));
        System.out.println("== secondary account : " + secondary_writer.unconvert(secondary_account.getBalance()));
        System.out.println("=======================");

        this.processTransactions();
    }
}


public class Main {
  public static void main(String[] args) {
    BankReader reader = new BankReader();
    BankAccount primary_account = new BankAccount(0);
    BankWriter primary_writer = new BankWriter(primary_account);
    BankAccount secondary_account = new BankAccount(0);
    BankWriter secondary_writer = new BankWriter(secondary_account);
    AccountController controller = new AccountController(reader,
            primary_account, primary_writer, secondary_account,
            secondary_writer);
    controller.processTransactions();
  }
}
  • 写回答

2条回答 默认 最新

  • ChatGPTᴼᴾᴱᴺᴬᴵ 2023-11-01 15:50
    关注

    所有内容均由人工智能模型输出,其内容的准确性和完整性无法保证,不代表我的态度或观点。

    该回答引用ChatGPT-3.5,仅为您提供参考,不保证完全正确
    您好!看起来您正在编写一个Java程序来模拟银行账户和交易。您已经完成了基本的账户操作,但您需要添加转账和利息计算的功能。我将帮助您添加这些功能。

    1. 转账功能('T'命令):
      在转账部分,您需要根据所选的活动账户(primary_account或secondary_account)进行转账操作。根据您的代码,可以这样实现:
    case 'T':
        int amount = reader.readAmount();
        if (amount > 0) {
            if (account == primary_account && primary_account.withdraw(amount) && secondary_account.deposit(amount)) {
                writer.setTransaction("transfer $", amount);
            } else if (account == secondary_account && secondary_account.withdraw(amount) && primary_account.deposit(amount)) {
                writer.setTransaction("transfer $", amount);
            } else {
                writer.setTransaction("transfer error");
            }
        } else {
            writer.setTransaction("invalid transfer amount: " + amount);
        }
        break;
    
    1. 利息计算功能('I'命令):
      利息计算需要一个利率,您可以将其添加到您的银行账户类中,并通过命令来设置它。首先,您需要在BankAccount类中添加一个利率字段和相应的方法:
    private double interestRate;
    
    public void setInterestRate(double rate) {
        if (rate >= 0) {
            interestRate = rate;
        }
    }
    
    public void applyInterest() {
        int interestAmount = (int) (balance * interestRate);
        balance += interestAmount;
    }
    

    然后,在AccountController类的'I'命令部分,您可以设置利率并应用利息:

    case 'I':
        double rate = reader.readAmount() / 100.0; // 读取利率,例如输入5代表5%
        if (rate >= 0) {
            account.setInterestRate(rate);
            account.applyInterest();
            writer.setTransaction("interest applied: " + rate * 100 + "%");
        } else {
            writer.setTransaction("invalid interest rate: " + rate * 100 + "%");
        }
        break;
    

    现在,您的程序应该能够处理转账和利息计算了。希望这有所帮助!如果您有其他问题,欢迎继续提问。


    该回答引用NewBing,仅为您提供参考,不保证完全正确
    超出输入上限(<4000字)


    该回答引用文心大模型3.5,仅为您提供参考,不保证完全正确
    超出输入上限(<2000字)


    该回答引用讯飞星火认知大模型,仅为您提供参考,不保证完全正确
    为了实现两个账户之间互相转账和利息利率,你需要在BankAccount类中添加一个方法来计算利息,并在AccountController类的processTransactions方法中调用这个方法。以下是修改后的代码:

    1. BankAccount类中添加一个计算利息的方法calculateInterest
    public double calculateInterest(double rate) {
        return balance * rate;
    }
    
    1. AccountController类的processTransactions方法中调用calculateInterest方法:
    case 'I':
        {
            // 读取利率
            double interestRate = reader.readAmount() / 100.0;
    
            // 计算主账户的利息并存入主账户
            primary_account.deposit((int) (primary_account.calculateInterest(interestRate)));
    
            // 计算次账户的利息并存入次账户
            secondary_account.deposit((int) (secondary_account.calculateInterest(interestRate)));
    
            writer.setTransaction("interest calculated and deposited");
            break;
        }
    

    现在,当你输入命令I时,程序将计算主账户和次账户的利息并将其存入相应的账户。注意,这里假设利率是以百分比形式输入的,所以在读取利率时需要除以100。


    该回答引用通义千问大模型,仅为您提供参考,不保证完全正确
    超出输入上限(<5500字)

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

问题事件

  • 系统已结题 11月10日
  • 已采纳回答 11月2日
  • 创建了问题 11月1日

悬赏问题

  • ¥15 wpf datagrid如何实现多层表头
  • ¥15 为啥画版图在Run DRC会出现Connect Error?可我Calibre的hostname和计算机的hostname已经设置成一样的了。
  • ¥20 网站后台使用极速模式非常的卡
  • ¥20 Keil uVision5创建project没反应
  • ¥15 mmseqs内存报错
  • ¥15 vika文档如何与obsidian同步
  • ¥15 华为手机相册里面的照片能够替换成自己想要的照片吗?
  • ¥15 陆空双模式无人机飞控设置
  • ¥15 sentaurus lithography
  • ¥100 求抖音ck号 或者提ck教程