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

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 网络爬虫 在北京新发地抓取数据
  • ¥15 在centos7安装conda
  • ¥15 c#调用yolo3 dll文件获取的数据对不上
  • ¥20 WPF 如何实现多语言,label 和cs(live Charts)中是否都能翻译
  • ¥15 STM32F103上电短路问题
  • ¥15 关于#单片机#的问题:以ATMEGA128或相近型号单片机为控制器设计直流电机调速的闭环控制系统(相关搜索:设计报告|软件设计|流程图)
  • ¥15 打开软件提示错误:failed to get wglChoosePixelFormatARB
  • ¥15 (标签-python|关键词-char)
  • ¥15 python+selenium,在新增时弹出了一个输入框
  • ¥15 苹果验机结果的api接口哪里有??单次调用1毛钱及以下。