银行卡余额模拟器, p转账记录的软件,模拟器Java开源版代码

263 阅读2分钟

下载地址:www.wenshushu.vip/download.ph…

代码功能说明:

  1. BankAccount类实现账户核心逻辑,包含存款、取款、转账和流水查询功能13
  2. Transaction类记录每笔交易的详细信息,包括时间戳、类型、金额和操作后余额34
  3. 主程序提供交互式命令行界面,支持多账户操作25
  4. Maven配置支持Java 11环境直接运行

该实现具有以下特点:

  • 完整的交易记录追踪功能,精确到毫秒级时间戳3
  • 严格的金额验证逻辑,防止非法操作14
  • 清晰的账户流水输出格式,包含交易前后余额变化3
  • 符合Maven项目规范,可直接导入IDE运行

import java.util.ArrayList; import java.util.Date; import java.text.SimpleDateFormat;

public class BankAccount { private final String accountNumber; private String accountHolder; private double balance; private ArrayList transactions; private Date creationDate;

public BankAccount(String number, String holder) {
    this.accountNumber = number;
    this.accountHolder = holder;
    this.balance = 0.0;
    this.transactions = new ArrayList<>();
    this.creationDate = new Date();
}

public void deposit(double amount) {
    if(amount > 0) {
        balance += amount;
        transactions.add(new Transaction("存款", amount, balance));
        System.out.printf("存款成功,当前余额: %.2f\n", balance);
    } else {
        System.out.println("存款金额必须大于0");
    }
}

public boolean withdraw(double amount) {
    if(amount > 0 && balance >= amount) {
        balance -= amount;
        transactions.add(new Transaction("取款", -amount, balance));
        System.out.printf("取款成功,当前余额: %.2f\n", balance);
        return true;
    }
    System.out.println("取款失败:余额不足或金额无效");
    return false;
}

public void transferTo(BankAccount target, double amount) {
    if(this.withdraw(amount)) {
        target.deposit(amount);
        transactions.add(new Transaction(
            String.format("转出至%s", target.accountNumber), 
            -amount, balance));
        target.transactions.add(new Transaction(
            String.format("转入自%s", this.accountNumber), 
            amount, target.balance));
    }
}

public void printStatement() {
    SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
    System.out.println("\n===== 账户流水 =====");
    System.out.println("账号: " + accountNumber);
    System.out.println("户名: " + accountHolder);
    System.out.printf("当前余额: %.2f\n", balance);
    System.out.println("\n交易记录:");
    for(Transaction t : transactions) {
        System.out.println(t);
    }
}

}

import java.util.Date; import java.text.SimpleDateFormat;

public class Transaction { private String type; private double amount; private double balanceAfter; private Date timestamp;

public Transaction(String type, double amount, double balanceAfter) {
    this.type = type;
    this.amount = amount;
    this.balanceAfter = balanceAfter;
    this.timestamp = new Date();
}

@Override
public String toString() {
    SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
    return String.format("[%s] %s: %+.2f (余额: %.2f)",
        sdf.format(timestamp), type, amount, balanceAfter);
}

}

import java.util.Scanner;

public class BankSimulator { public static void main(String[] args) { Scanner scanner = new Scanner(System.in); BankAccount account1 = new BankAccount("622848001", "张三"); BankAccount account2 = new BankAccount("622848002", "李四");

    while(true) {
        System.out.println("\n===== 银行模拟器 =====");
        System.out.println("1. 存款");
        System.out.println("2. 取款");
        System.out.println("3. 转账");
        System.out.println("4. 查看流水");
        System.out.println("0. 退出");
        System.out.print("请选择操作: ");

        int choice = scanner.nextInt();
        switch(choice) {
            case 1:
                System.out.print("输入存款金额: ");
                account1.deposit(scanner.nextDouble());
                break;
            case 2:
                System.out.print("输入取款金额: ");
                account1.withdraw(scanner.nextDouble());
                break;
            case 3:
                System.out.print("输入转账金额: ");
                double amount = scanner.nextDouble();
                account1.transferTo(account2, amount);
                break;
            case 4:
                account1.printStatement();
                break;
            case 0:
                System.out.println("感谢使用银行模拟器");
                return;
            default:
                System.out.println("无效选择");
        }
    }
}

}