Java 银行系统:处理存取款记录并计算账户余额

本示例演示了如何使用Java实现一个简单的银行系统,该系统能够处理存取款记录并计算账户余额。

场景: 柜员通过调用income(String in, String out)方法向银行系统中录入存钱(即in)和支出(即out)的情况。现录入如下四条信息:

  • ('200', '-100')
  • ('3A32', '-342')
  • ('9B5H', '-FC34')
  • ('-300', '500')

系统根据录入信息计算账户里的最终余额。例如,若in='200', out='-100',则系统内当前余额为'100'。

问题: 由于柜员的误操作输入了一些字母。因此,若遇到字母,需自动将字母替换成对应的ASCII码值(如将'3A32'替换为'36532'),再进行账户余额计算。

要求:

  1. 存钱必须表示为正值,支出必须表示为负值。
  2. 每次income()调用完毕后,账户里的余额必须为非负值。
  3. 对于不满足上述任意要求的情况,需要抛出异常,并打印出异常的原因,同时不利用该异常录入信息计算最终余额。

实现:

public class BankSystem {
    private double balance;

    public void income(String in, String out) throws Exception {
        double inAmount = parseAmount(in);
        double outAmount = parseAmount(out);
        if (inAmount < 0 || outAmount > 0) {
            throw new Exception("Invalid input: in=" + in + ", out=" + out);
        }
        double newBalance = balance + inAmount - outAmount;
        if (newBalance < 0) {
            throw new Exception("Insufficient balance: current=" + balance + ", in=" + in + ", out=" + out);
        }
        balance = newBalance;
    }

    private double parseAmount(String amountStr) throws Exception {
        try {
            if (amountStr.startsWith("-")) {
                return -Double.parseDouble(amountStr.substring(1));
            } else {
                return Double.parseDouble(amountStr);
            }
        } catch (NumberFormatException e) {
            StringBuilder sb = new StringBuilder();
            for (int i = 0; i < amountStr.length(); i++) {
                char c = amountStr.charAt(i);
                if (Character.isLetter(c)) {
                    sb.append((int) c);
                } else {
                    sb.append(c);
                }
            }
            try {
                if (sb.toString().startsWith("-")) {
                    return -Double.parseDouble(sb.toString().substring(1));
                } else {
                    return Double.parseDouble(sb.toString());
                }
            } catch (NumberFormatException e2) {
                throw new Exception("Invalid amount: " + amountStr);
            }
        }
    }

    public double getBalance() {
        return balance;
    }
}

// 使用示例
public static void main(String[] args) {
    BankSystem bank = new BankSystem();
    try {
        bank.income("200", "-100");
        bank.income("3A32", "-342");
        bank.income("9B5H", "-FC34");
        bank.income("-300", "500");
        System.out.println("Final balance: " + bank.getBalance());
    } catch (Exception e) {
        System.out.println("Error: " + e.getMessage());
    }
}

代码解析:

  • BankSystem 类:

    • balance:用于存储当前账户余额。
    • income(String in, String out):接收存取款信息,并进行处理。
    • parseAmount(String amountStr):将输入字符串转换为数值,并处理包含字母的情况。
    • getBalance():返回当前账户余额。
  • main 方法:

    • 创建 BankSystem 对象并调用 income 方法进行存取款操作。
    • 使用 try-catch 块捕获异常,并打印异常信息。

关键点:

  • 字母转换:parseAmount 方法中,使用 Character.isLetter() 判断字符是否为字母,并将其转换为对应的ASCII码值。
  • 异常处理: 当输入信息不满足要求时,抛出异常并打印异常信息,确保系统能够正常运行。

总结:

本示例展示了如何使用Java实现一个简单的银行系统,并处理了输入信息中的字母问题。通过使用异常处理机制,确保了系统能够正常运行,并及时提示用户错误信息。

Java 银行系统:处理存取款记录并计算账户余额

原文地址: https://www.cveoy.top/t/topic/nWb7 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录