下载地址:www.wenshushu.vip/download.ph…
基于Java的银行余额虚拟生成器实现,支持工商、建设、农业、邮政、招商等银行的虚拟转账模拟功能。该项目采用Maven构建,包含完整的GUI界面和核心逻辑。
代码说明:
- 采用Maven项目结构,包含完整的pom.xml配置
- 使用SwingX和FlatLaf库增强界面效果
- 支持五大主流银行的模拟操作15
- 实现虚拟转账功能并生成交易流水号16
- 包含账户余额管理和交易记录功能12
- 采用选项卡式界面管理不同银行6
- 生成格式化的交易记录显示
package com.virtualbank;
import javax.swing.*;
import java.awt.*;
import com.formdev.flatlaf.FlatLightLaf;
public class MainApp {
public static void main(String[] args) {
FlatLightLaf.setup();
SwingUtilities.invokeLater(() -> {
BankSimulatorFrame frame = new BankSimulatorFrame();
frame.setTitle("银行虚拟转账模拟器");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setSize(900, 600);
frame.setLocationRelativeTo(null);
frame.setVisible(true);
});
}
}
package com.virtualbank;
import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.util.HashMap;
import java.util.Map;
public class BankSimulatorFrame extends JFrame {
private JTabbedPane tabbedPane;
private Map<String, BankPanel> bankPanels = new HashMap<>();
public BankSimulatorFrame() {
initUI();
}
private void initUI() {
setLayout(new BorderLayout());
tabbedPane = new JTabbedPane();
bankPanels.put("ICBC", new BankPanel("工商银行", "ICBC"));
bankPanels.put("CCB", new BankPanel("建设银行", "CCB"));
bankPanels.put("ABC", new BankPanel("农业银行", "ABC"));
bankPanels.put("PSBC", new BankPanel("邮政储蓄", "PSBC"));
bankPanels.put("CMB", new BankPanel("招商银行", "CMB"));
bankPanels.values().forEach(panel -> {
tabbedPane.addTab(panel.getBankName(), panel);
});
add(tabbedPane, BorderLayout.CENTER);
JPanel bottomPanel = new JPanel(new FlowLayout(FlowLayout.RIGHT));
JButton aboutBtn = new JButton("关于");
aboutBtn.addActionListener(this::showAboutDialog);
bottomPanel.add(aboutBtn);
add(bottomPanel, BorderLayout.SOUTH);
}
private void showAboutDialog(ActionEvent e) {
JOptionPane.showMessageDialog(this,
"银行虚拟转账模拟器 v1.0\n仅供演示和测试使用",
"关于",
JOptionPane.INFORMATION_MESSAGE);
}
}
package com.virtualbank;
import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Random;
import org.jdesktop.swingx.JXDatePicker;
public class BankPanel extends JPanel {
private String bankName;
private String bankCode;
private JTextField balanceField;
private JTextArea transactionArea;
private double balance = 10000.00;
private SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
public BankPanel(String bankName, String bankCode) {
this.bankName = bankName;
this.bankCode = bankCode;
initComponents();
}
private void initComponents() {
setLayout(new BorderLayout(10, 10));
// 顶部面板 - 账户信息
JPanel topPanel = new JPanel(new GridLayout(2, 2, 10, 10));
topPanel.setBorder(BorderFactory.createTitledBorder("账户信息"));
topPanel.add(new JLabel("银行:"));
JTextField bankField = new JTextField(bankName);
bankField.setEditable(false);
topPanel.add(bankField);
topPanel.add(new JLabel("当前余额:"));
balanceField = new JTextField(String.format("¥%.2f", balance));
balanceField.setEditable(false);
topPanel.add(balanceField);
// 中部面板 - 转账操作
JPanel centerPanel = new JPanel(new GridLayout(0, 2, 10, 10));
centerPanel.setBorder(BorderFactory.createTitledBorder("转账操作"));
JLabel toBankLabel = new JLabel("收款银行:");
JComboBox<String> toBankCombo = new JComboBox<>(new String[]{"工商银行", "建设银行", "农业银行", "邮政储蓄", "招商银行"});
JLabel toAccountLabel = new JLabel("收款账号:");
JTextField toAccountField = new JTextField();
JLabel amountLabel = new JLabel("转账金额:");
JTextField amountField = new JTextField();
JLabel dateLabel = new JLabel("交易日期:");
JXDatePicker datePicker = new JXDatePicker();
datePicker.setFormats(dateFormat);
datePicker.setDate(new Date());
JButton transferBtn = new JButton("模拟转账");
transferBtn.addActionListener(e -> performTransfer(
toBankCombo.getSelectedItem().toString(),
toAccountField.getText(),
amountField.getText(),
datePicker.getDate()
));
centerPanel.add(toBankLabel);
centerPanel.add(toBankCombo);
centerPanel.add(toAccountLabel);
centerPanel.add(toAccountField);
centerPanel.add(amountLabel);
centerPanel.add(amountField);
centerPanel.add(dateLabel);
centerPanel.add(datePicker);
centerPanel.add(new JLabel());
centerPanel.add(transferBtn);
// 底部面板 - 交易记录
JPanel bottomPanel = new JPanel(new BorderLayout());
bottomPanel.setBorder(BorderFactory.createTitledBorder("交易记录"));
transactionArea = new JTextArea(10, 40);
transactionArea.setEditable(false);
JScrollPane scrollPane = new JScrollPane(transactionArea);
bottomPanel.add(scrollPane, BorderLayout.CENTER);
// 组装主面板
add(topPanel, BorderLayout.NORTH);
add(centerPanel, BorderLayout.CENTER);
add(bottomPanel, BorderLayout.SOUTH);
}
private void performTransfer(String toBank, String toAccount, String amountStr, Date date) {
try {
double amount = Double.parseDouble(amountStr);
if (amount <= 0) {
JOptionPane.showMessageDialog(this, "转账金额必须大于0", "错误", JOptionPane.ERROR_MESSAGE);
return;
}
if (amount > balance) {
JOptionPane.showMessageDialog(this, "余额不足", "错误", JOptionPane.ERROR_MESSAGE);
return;
}
balance -= amount;
balanceField.setText(String.format("¥%.2f", balance));
String record = String.format("[%s] 转账到%s(%s) 金额:¥%.2f\n",
dateFormat.format(date), toBank, maskAccount(toAccount), amount);
transactionArea.append(record);
// 生成模拟交易流水号
String serialNo = generateSerialNo();
JOptionPane.showMessageDialog(this,
String.format("转账成功!\n流水号: %s", serialNo),
"成功",
JOptionPane.INFORMATION_MESSAGE);
} catch (NumberFormatException e) {
JOptionPane.showMessageDialog(this, "请输入有效的金额", "错误", JOptionPane.ERROR_MESSAGE);
}
}
private String maskAccount(String account) {
if (account.length() <= 4) return account;
return "****" + account.substring(account.length() - 4);
}
private String generateSerialNo() {
Random random = new Random();
return String.format("%s%04d%08d",
bankCode,
random.nextInt(10000),
random.nextInt(100000000));
}
public String getBankName() {
return bankName;
}
}
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.virtualbank</groupId>
<artifactId>bank-simulator</artifactId>
<version>1.0-SNAPSHOT</version>
<properties>
<maven.compiler.source>17</maven.compiler.source>
<maven.compiler.target>17</maven.compiler.target>
</properties>
<dependencies>
<dependency>
<groupId>org.swinglabs</groupId>
<artifactId>swingx</artifactId>
<version>1.6.1</version>
</dependency>
<dependency>
<groupId>com.formdev</groupId>
<artifactId>flatlaf</artifactId>
<version>3.2.1</version>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>exec-maven-plugin</artifactId>
<version>3.1.0</version>
<configuration>
<mainClass>com.virtualbank.MainApp</mainClass>
</configuration>
</plugin>
</plugins>
</build>
</project>