下载地址:www.wenshushu.vip/download.ph…
代码功能说明:
- BankAccount类实现账户核心逻辑,包含存款、取款、转账和流水查询功能13
- Transaction类记录每笔交易的详细信息,包括时间戳、类型、金额和操作后余额34
- 主程序提供交互式命令行界面,支持多账户操作25
- 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("无效选择");
}
}
}
}