下载地址(文章指定相关附件):www.pan38.com/dow/share.p… 提取密码:8334
其实这个工具的源码人家已经逆向出来了 并且是可以正常使用的,这种情况下我们只能再次逆向一下然后把真正的开源部分代码分享给大家,这样才能真正的帮助到各位,下面是逆向出来的界面。
下面是源码部分:
4.0.0
<groupId>com.bank</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>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>
<build>
<plugins>
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>exec-maven-plugin</artifactId>
<version>3.0.0</version>
<configuration>
<mainClass>com.bank.Main</mainClass>
</configuration>
</plugin>
</plugins>
</build>
package com.bank.model;
import java.time.LocalDate; import java.util.ArrayList; import java.util.List;
public class Account { private String accountNumber; private String accountHolder; private double balance; private AccountType accountType; private LocalDate openDate; private double interestRate; private List transactions;
public Account(String accountNumber, String accountHolder, AccountType accountType) {
this.accountNumber = accountNumber;
this.accountHolder = accountHolder;
this.accountType = accountType;
this.balance = 0.0;
this.openDate = LocalDate.now();
this.transactions = new ArrayList<>();
switch(accountType) {
case SAVINGS:
this.interestRate = 0.03;
break;
case CHECKING:
this.interestRate = 0.01;
break;
case FIXED_DEPOSIT:
this.interestRate = 0.05;
break;
}
}
// Getters and setters
public String getAccountNumber() { return accountNumber; }
public String getAccountHolder() { return accountHolder; }
public double getBalance() { return balance; }
public AccountType getAccountType() { return accountType; }
public LocalDate getOpenDate() { return openDate; }
public double getInterestRate() { return interestRate; }
public List<Transaction> getTransactions() { return transactions; }
public void deposit(double amount) {
if (amount <= 0) {
throw new IllegalArgumentException("Deposit amount must be positive");
}
balance += amount;
transactions.add(new Transaction(TransactionType.DEPOSIT, amount, LocalDate.now()));
}
public void withdraw(double amount) {
if (amount <= 0) {
throw new IllegalArgumentException("Withdrawal amount must be positive");
}
if (balance < amount) {
throw new IllegalArgumentException("Insufficient funds");
}
balance -= amount;
transactions.add(new Transaction(TransactionType.WITHDRAWAL, amount, LocalDate.now()));
}
public void transfer(Account recipient, double amount) {
if (amount <= 0) {
throw new IllegalArgumentException("Transfer amount must be positive");
}
if (balance < amount) {
throw new IllegalArgumentException("Insufficient funds for transfer");
}
this.withdraw(amount);
recipient.deposit(amount);
transactions.add(new Transaction(TransactionType.TRANSFER_OUT, amount, LocalDate.now(), recipient.getAccountNumber()));
recipient.getTransactions().add(new Transaction(TransactionType.TRANSFER_IN, amount, LocalDate.now(), this.accountNumber));
}
public void applyInterest() {
double interest = balance * interestRate / 12;
balance += interest;
transactions.add(new Transaction(TransactionType.INTEREST, interest, LocalDate.now()));
}
public String generateStatement() {
StringBuilder statement = new StringBuilder();
statement.append("Account Statement for ").append(accountHolder).append("\n");
statement.append("Account Number: ").append(accountNumber).append("\n");
statement.append("Account Type: ").append(accountType).append("\n");
statement.append("Balance: $").append(String.format("%.2f", balance)).append("\n\n");
statement.append("Transaction History:\n");
statement.append("Date\t\tType\t\tAmount\t\tRelated Account\n");
statement.append("------------------------------------------------\n");
for (Transaction t : transactions) {
statement.append(t.getDate()).append("\t")
.append(t.getType()).append("\t")
.append(String.format("$%.2f", t.getAmount())).append("\t");
if (t.getRelatedAccount() != null) {
statement.append(t.getRelatedAccount());
}
statement.append("\n");
}
return statement.toString();
}
}
package com.bank.model;
import java.time.LocalDate;
public class Transaction { private TransactionType type; private double amount; private LocalDate date; private String relatedAccount;
public Transaction(TransactionType type, double amount, LocalDate date) {
this(type, amount, date, null);
}
public Transaction(TransactionType type, double amount, LocalDate date, String relatedAccount) {
this.type = type;
this.amount = amount;
this.date = date;
this.relatedAccount = relatedAccount;
}
public TransactionType getType() { return type; }
public double getAmount() { return amount; }
public LocalDate getDate() { return date; }
public String getRelatedAccount() { return relatedAccount; }
}
package com.bank.service;
import com.bank.model.Account; import com.bank.model.enums.AccountType;
import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map;
public class BankService { private final Map<String, Account> accounts; private int accountCounter;
public BankService() {
this.accounts = new HashMap<>();
this.accountCounter = 1000;
}
public Account createAccount(String accountHolder, AccountType accountType) {
String accountNumber = "ACC" + (++accountCounter);
Account account = new Account(accountNumber, accountHolder, accountType);
accounts.put(accountNumber, account);
return account;
}
public Account getAccount(String accountNumber) {
return accounts.get(accountNumber);
}
public List<Account> getAllAccounts() {
return new ArrayList<>(accounts.values());
}
public void closeAccount(String accountNumber) {
if (!accounts.containsKey(accountNumber)) {
throw new IllegalArgumentException("Account not found");
}
accounts.remove(accountNumber);
}
public void applyMonthlyInterest() {
for (Account account : accounts.values()) {
account.applyInterest();
}
}
public void transfer(String fromAccountNumber, String toAccountNumber, double amount) {
Account fromAccount = accounts.get(fromAccountNumber);
Account toAccount = accounts.get(toAccountNumber);
if (fromAccount == null || toAccount == null) {
throw new IllegalArgumentException("One or both accounts not found");
}
fromAccount.transfer(toAccount, amount);
}
}