11.27

[实验任务一]:财务审批
某物资管理系统中物资采购需要分级审批,主任可以审批1万元及以下的采购单,部门经理可以审批5万元及以下的采购单,副总经理可以审批10万元及以下的采购单,总经理可以审批20万元及以下的采购单,20万元以上的采购单需要开职工大会确定。现用职责链模式设计该系统。
实验要求:

  1. 提交类图;

  1. 提交源代码;


// PurchaseRequest.java
package Responsibility;

public class PurchaseRequest {
    private int id;
    private int money;

    public PurchaseRequest(int id, int money) {
        this.id = id;
        this.money = money;
    }

    public void setMoney(int money) {
        this.money = money;
    }

    public void setId(int id) {
        this.id = id;
    }

    public int getMoney() {
        return money;
    }

    public int getId() {
        return id;
    }
}

// Leader.java
package Responsibility;

public abstract class Leader {
    protected String name;
    protected Leader successor;

    public Leader(String name) {
        this.name = name;
    }

    public void setSuccessor(Leader successor) {
        this.successor = successor;
    }

    public abstract void handleRequest(PurchaseRequest request);
}

// Director.java
package Responsibility;

public class Director extends Leader {
    public Director(String name) {
        super(name);
    }

    @Override
    public void handleRequest(PurchaseRequest request) {
        if (request.getMoney() <= 10000) {
            System.out.println("主任" + name + "审批采购单: " + request.getId() + 
                            ", 金额: " + request.getMoney() + "元");
        } else {
            if (successor != null) {
                successor.handleRequest(request);
            }
        }
    }
}

// DepartmentManager.java
package Responsibility;

public class DepartmentManager extends Leader {
    public DepartmentManager(String name) {
        super(name);
    }

    @Override
    public void handleRequest(PurchaseRequest request) {
        if (request.getMoney() <= 50000) {
            System.out.println("部门经理" + name + "审批采购单: " + request.getId() + 
                            ", 金额: " + request.getMoney() + "元");
        } else {
            if (successor != null) {
                successor.handleRequest(request);
            }
        }
    }
}

// Manager.java
package Responsibility;

public class Manager extends Leader {
    public Manager(String name) {
        super(name);
    }

    @Override
    public void handleRequest(PurchaseRequest request) {
        if (request.getMoney() <= 100000) {
            System.out.println("副总经理" + name + "审批采购单: " + request.getId() + 
                            ", 金额: " + request.getMoney() + "元");
        } else {
            if (successor != null) {
                successor.handleRequest(request);
            }
        }
    }
}

// GeneralManager.java
package Responsibility;

public class GeneralManager extends Leader {
    public GeneralManager(String name) {
        super(name);
    }

    @Override
    public void handleRequest(PurchaseRequest request) {
        if (request.getMoney() <= 200000) {
            System.out.println("总经理" + name + "审批采购单: " + request.getId() + 
                            ", 金额: " + request.getMoney() + "元");
        } else {
            System.out.println("召开职工大会审批采购单: " + request.getId() + 
                            ", 金额: " + request.getMoney() + "元");
        }
    }
}

// Client.java
package Responsibility;

public class Client {
    public static void main(String[] args) {
        // 创建职责链
        Leader director = new Director("张三");
        Leader departmentManager = new DepartmentManager("李四");
        Leader manager = new Manager("王五");
        Leader generalManager = new GeneralManager("赵六");

        // 设置职责链
        director.setSuccessor(departmentManager);
        departmentManager.setSuccessor(manager);
        manager.setSuccessor(generalManager);

        // 测试不同金额的采购单
        PurchaseRequest request1 = new PurchaseRequest(1, 8000);        // 主任审批
        PurchaseRequest request2 = new PurchaseRequest(2, 30000);       // 部门经理审批
        PurchaseRequest request3 = new PurchaseRequest(3, 80000);       // 副总经理审批
        PurchaseRequest request4 = new PurchaseRequest(4, 150000);      // 总经理审批
        PurchaseRequest request5 = new PurchaseRequest(5, 250000);      // 职工大会审批

        director.handleRequest(request1);
        director.handleRequest(request2);
        director.handleRequest(request3);
        director.handleRequest(request4);
        director.handleRequest(request5);
    }
}

  1. 注意编程规范。
posted @   aallofitisst  阅读(4)  评论(0编辑  收藏  举报
点击右上角即可分享
微信分享提示