import java.util.ArrayList;
import java.util.Date;
import java.util.List;

public class BankSystem {

    private List<Worker> workers;
    private List<User> users;
    private double maxLoanAmount;
    private int maxDelayDays;
    private double availableFunds;

    public BankSystem(List<Worker> workers, List<User> users, double maxLoanAmount, int maxDelayDays, double availableFunds) {
        this.workers = workers;
        this.users = users;
        this.maxLoanAmount = maxLoanAmount;
        this.maxDelayDays = maxDelayDays;
        this.availableFunds = availableFunds;
    }

    public void processLoan(int userId, double loanAmount) {
        User user = users.get(userId);
        if (loanAmount > maxLoanAmount) {
            System.out.println('Loan amount exceeds the maximum limit');
            return;
        }
        if (loanAmount > availableFunds) {
            System.out.println('Insufficient funds. Loan request delayed');
            user.addDelayedLoanRequest(new LoanRequest(loanAmount, new Date()));
            return;
        }
        Worker worker = getAvailableWorker(loanAmount);
        if (worker == null) {
            System.out.println('No worker available to process loan. Loan request delayed');
            user.addDelayedLoanRequest(new LoanRequest(loanAmount, new Date()));
            return;
        }
        availableFunds -= loanAmount;
        user.addLoan(new Loan(loanAmount, worker, new Date(), new Date()));
        worker.addAllocatedFunds(loanAmount);
        System.out.println('Loan request successfully processed');
    }

    private Worker getAvailableWorker(double loanAmount) {
        for (Worker worker : workers) {
            if (worker.getAllocatedFunds() + loanAmount <= worker.getMaxAllocation()) {
                return worker;
            }
        }
        return null;
    }

    public void processDelayedLoanRequests() {
        Date currentDate = new Date();
        for (User user : users) {
            List<LoanRequest> delayedRequests = user.getDelayedLoanRequests();
            List<LoanRequest> processedRequests = new ArrayList<>();
            for (LoanRequest request : delayedRequests) {
                int daysDelayed = getDaysBetween(request.getRequestDate(), currentDate);
                if (daysDelayed <= maxDelayDays && request.getAmount() <= availableFunds) {
                    Worker worker = getAvailableWorker(request.getAmount());
                    if (worker != null) {
                        availableFunds -= request.getAmount();
                        user.addLoan(new Loan(request.getAmount(), worker, request.getRequestDate(), new Date()));
                        worker.addAllocatedFunds(request.getAmount());
                        processedRequests.add(request);
                        System.out.println('Delayed loan request processed successfully');
                    }
                }
            }
            delayedRequests.removeAll(processedRequests);
        }
    }

    private int getDaysBetween(Date startDate, Date endDate) {
        long diff = endDate.getTime() - startDate.getTime();
        return (int) (diff / (24 * 60 * 60 * 1000));
    }
}

class Worker {
    private int id;
    private String name;
    private double maxAllocation;
    private double allocatedFunds;

    public Worker(int id, String name, double maxAllocation) {
        this.id = id;
        this.name = name;
        this.maxAllocation = maxAllocation;
        this.allocatedFunds = 0;
    }

    public int getId() {
        return id;
    }

    public String getName() {
        return name;
    }

    public double getMaxAllocation() {
        return maxAllocation;
    }

    public double getAllocatedFunds() {
        return allocatedFunds;
    }

    public void addAllocatedFunds(double amount) {
        allocatedFunds += amount;
    }
}

class User {
    private int id;
    private String name;
    private List<Loan> loans;
    private List<LoanRequest> delayedLoanRequests;

    public User(int id, String name) {
        this.id = id;
        this.name = name;
        this.loans = new ArrayList<>();
        this.delayedLoanRequests = new ArrayList<>();
    }

    public int getId() {
        return id;
    }

    public String getName() {
        return name;
    }

    public List<Loan> getLoans() {
        return loans;
    }

    public void addLoan(Loan loan) {
        loans.add(loan);
    }

    public List<LoanRequest> getDelayedLoanRequests() {
        return delayedLoanRequests;
    }

    public void addDelayedLoanRequest(LoanRequest loanRequest) {
        delayedLoanRequests.add(loanRequest);
    }
}

class Loan {
    private double amount;
    private Worker worker;
    private Date requestDate;
    private Date repaymentDate;

    public Loan(double amount, Worker worker, Date requestDate, Date repaymentDate) {
        this.amount = amount;
        this.worker = worker;
        this.requestDate = requestDate;
        this.repaymentDate = repaymentDate;
    }

    public double getAmount() {
        return amount;
    }

    public Worker getWorker() {
        return worker;
    }

    public Date getRequestDate() {
        return requestDate;
    }

    public Date getRepaymentDate() {
        return repaymentDate;
    }
}

class LoanRequest {
    private double amount;
    private Date requestDate;

    public LoanRequest(double amount, Date requestDate) {
        this.amount = amount;
        this.requestDate = requestDate;
    }

    public double getAmount() {
        return amount;
    }

    public Date getRequestDate() {
        return requestDate;
    }
}

// 如何在 Eclipse 中运行:
// 1. 创建一个新的 Java 项目。
// 2. 将 BankSystem.java 和相关类的代码复制并粘贴到 src 文件夹中。
// 3. 在 BankSystem 类中添加一个 main 方法。
// 4. 在 main 方法中创建一个 BankSystem 对象并调用其方法,例如:

```java
public static void main(String[] args) {
    // 创建工作人员列表
    List<Worker> workers = new ArrayList<>();
    workers.add(new Worker(1, 'John', 100000));
    workers.add(new Worker(2, 'Mary', 150000));

    // 创建用户列表
    List<User> users = new ArrayList<>();
    users.add(new User(1, 'Bob'));
    users.add(new User(2, 'Alice'));

    // 创建银行系统对象
    BankSystem bankSystem = new BankSystem(workers, users, 50000, 30, 100000);

    // 处理贷款请求
    bankSystem.processLoan(1, 20000);
    bankSystem.processLoan(2, 75000);

    // 处理延迟的贷款请求
    bankSystem.processDelayedLoanRequests();
}

// 5. 运行程序并查看控制台输出。

Java银行系统:贷款处理和延迟请求管理

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

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