黑马程序员------银行业务调度系统(2)

 

---------------------- Android 培训java 培训 、期待与您交流! ----------------------

银行业务调度系统

=================================================

//CustomerType

package com.itcast.study.Bank;

 

public enum CustomerType {

   COMMON,EXPRESS,VIP;          //定义的3种客户

   public String toString(){

      String name = null;

      switch(this){

      case COMMON:

         name = "普通";

         break;

      case EXPRESS:

         name = "快速";

         break;

      case VIP:

         name = name();

         break;

      }

      return name;

   }

}

 

 

=================================================

//Constants

package com.itcast.study.Bank;

 

public class Constants {

   public static int MAX_SERVICE_TIME = 10000; //10秒

   public static int MIN_SERVICE_TIME = 1000; //1秒

  

   /*1秒钟产生一个普通客户*/ 

   public static int COMMON_CUSTOMER_INTERVAL_TIME = 1;   

}

 

 

 

==================================================

//NumberManager

package com.itcast.study.Bank;

 

import java.util.ArrayList;

import java.util.List;

 

public class NumberManager {

     private int lastNumber = 0;

     private List queueNumbers = new ArrayList();

     //客户取号

     public synchronized Integer generateNewNumber(){

         queueNumbers.add(++lastNumber);

         return lastNumber;

     }

     //窗口叫号

     public synchronized Integer fetchNumber(){

         if(queueNumbers.size()>0){

              return (Integer)queueNumbers.remove(0);

         }else{

              return null;

         }

     }

}

 

===================================================

//NumberMachine

package com.itcast.study.Bank;

 

public class NumberMachine {

   //用单例模式来管理号码管理器。

   private NumberMachine(){}

   private static NumberMachine instance = new NumberMachine();

   public static NumberMachine getInstance(){

      return instance;

   }

  

   private NumberManager commonManager = new NumberManager();//创建一个普通号码管理器

   private NumberManager expressManager = new NumberManager();//创建一个快速号码管理器

   private NumberManager vipManager = new NumberManager();//创建一个VIP号码管理器

   //对外提供一个访问的方法。

   public NumberManager getCommonManager() {

      return commonManager;

   }

   public NumberManager getExpressManager() {

      return expressManager;

   }

   public NumberManager getVipManager() {

      return vipManager;

   }

  

}

 

=================================================

//ServiceWindow

package com.itcast.study.Bank;

 

import java.util.Random;

import java.util.concurrent.Executors;

 

public class ServiceWindow {

 

      private CustomerType type = CustomerType.COMMON;//窗口类型,默认是普通窗口

      private int number = 1;//窗口号默认值为1号

 

      public CustomerType getType() {

           return type;

      }

 

      public void setType(CustomerType type) {

           this.type = type;

      }

 

      public void setNumber(int number) {

           this.number = number;

      }

 

      public void start() {

           //创建一个线程池来执行

           Executors.newSingleThreadExecutor().execute(new Runnable() {

                 public void run() {

                      while (true) {

                            switch (type) {

                            case COMMON:

                                  commonService();

                                  break;

                            case EXPRESS:

                                  expressService();

                                  break;

                            case VIP:

                                  vipService();

                                  break;

                            }

                      }

                 }

           });

      }

//普通窗口为客户服务

      private void commonService() {

           String windowName = "第" + number + "号" + type + "窗口";

           System.out.println(windowName + "正在获取服务任务");

           Integer serviceNumber = NumberMachine.getInstance().getCommonManager()

                      .fetchNumber();

           if (serviceNumber != null) {

                 System.out.println(windowName + "正在为第" + serviceNumber + "号客户服务");

                 int maxRandom = Constants.MAX_SERVICE_TIME

                            - Constants.MIN_SERVICE_TIME;

                 int serviceTime = new Random().nextInt(maxRandom) + 1

                            + Constants.MIN_SERVICE_TIME;

 

                 try {

                      Thread.sleep(serviceTime);

                 } catch (InterruptedException e) {

                      e.printStackTrace();

                 }

                 System.out.println(windowName + "为第" + serviceNumber + "号客户服务,耗时:"

                            + serviceTime / 1000 + "秒");

           } else {

                 System.out.println(windowName + "没有取到服务任务");

                 try {

                      Thread.sleep(1000);

                 } catch (InterruptedException e) {

                      e.printStackTrace();

                 }

           }

      }

//快速窗口为客户服务

      private void expressService() {

           Integer serviceNumber = NumberMachine.getInstance().getExpressManager()

                      .fetchNumber();

           String windowName = "第" + number + "号" + type + "窗口";

           System.out.println(windowName + "");

           if (serviceNumber != null) {

                 System.out.println(windowName + "正在为第" + serviceNumber + "号客户服务");

                 int serviceTime = Constants.MIN_SERVICE_TIME;

                 try {

                      Thread.sleep(serviceTime);

                 } catch (InterruptedException e) {

                      e.printStackTrace();

                 }

                 System.out.println(windowName + "为第" + serviceNumber + "号客户服务,耗时:"

                            + serviceTime / 1000 + "秒");

           } else {

                 System.out.println(windowName + "没有取到服务任务");

                 commonService();

           }

      }

//VIP窗口为客户服务

      private void vipService() {

 

           Integer serviceNumber = NumberMachine.getInstance().getVipManager()

                      .fetchNumber();

           String windowName = "第" + number + "号" + type + "窗口";

           System.out.println(windowName + "");

           if (serviceNumber != null) {

                 System.out.println(windowName + "正在为第" + serviceNumber + "号客户服务");

                 int maxRandom = Constants.MAX_SERVICE_TIME

                            - Constants.MIN_SERVICE_TIME;

                 int serviceTime = new Random().nextInt(maxRandom) + 1

                            + Constants.MIN_SERVICE_TIME;

                 try {

                      Thread.sleep(serviceTime);

                 } catch (InterruptedException e) {

                      e.printStackTrace();

                 }

                 System.out.println(windowName + "为第" + serviceNumber + "号客户服务,耗时:"

                            + serviceTime / 1000 + "秒");

           } else {

                 System.out.println(windowName + "没有取到服务任务");

                 commonService();

           }

      }

}

=================================================

//MainClass

 

package com.itcast.study.Bank;

 

import java.util.concurrent.Executors;

import java.util.concurrent.TimeUnit;

 

public class MainClass {

 

   public static void main(String[] args) {

      // 创建4个窗口

      for (int i = 1; i < 5; i++) {

         ServiceWindow window = new ServiceWindow();

         window.setNumber(i);

         window.start();

      }

 

      // 创建一个快速窗口

      ServiceWindow expressWindow = new ServiceWindow();

      expressWindow.setType(CustomerType.EXPRESS);

      expressWindow.start();

 

      // 创建一个VIP窗口

      ServiceWindow vipWindow = new ServiceWindow();

      vipWindow.setType(CustomerType.VIP);

      vipWindow.start();

 

      // 普通客户取号

      Executors.newScheduledThreadPool(1).scheduleAtFixedRate(new Runnable() {

         public void run() {

            Integer serviceNumber = NumberMachine.getInstance()

                   .getCommonManager().generateNewNumber();

            System.out.println("第" + serviceNumber + "号普通客户等待服务");

         }

      }, 0, Constants.COMMON_CUSTOMER_INTERVAL_TIME, TimeUnit.SECONDS);

 

      // 快速客户取号

      Executors.newScheduledThreadPool(1).scheduleAtFixedRate(new Runnable() {

         public void run() {

            Integer serviceNumber = NumberMachine.getInstance()

                   .getExpressManager().generateNewNumber();

            System.out.println("第" + serviceNumber + "号快速客户等待服务");

         }

      }, 0, Constants.COMMON_CUSTOMER_INTERVAL_TIME * 2, TimeUnit.SECONDS);

 

      // VIP客户取号

      Executors.newScheduledThreadPool(1).scheduleAtFixedRate(new Runnable() {

         public void run() {

            Integer serviceNumber = NumberMachine.getInstance()

                   .getVipManager().generateNewNumber();

            System.out.println("第" + serviceNumber + "号vip客户等待服务");

         }

      }, 0, Constants.COMMON_CUSTOMER_INTERVAL_TIME * 6, TimeUnit.SECONDS);

   }

 

}

 

 

 

 

 

 

 

---------------------- Android 培训java 培训 、期待与您交流! ----------------------

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
资源包主要包含以下内容: ASP项目源码:每个资源包中都包含完整的ASP项目源码,这些源码采用了经典的ASP技术开发,结构清晰、注释详细,帮助用户轻松理解整个项目的逻辑和实现方式。通过这些源码,用户可以学习到ASP的基本语法、服务器端脚本编写方法、数据库操作、用户权限管理等关键技术。 数据库设计文件:为了方便用户更好地理解系统的后台逻辑,每个项目中都附带了完整的数据库设计文件。这些文件通常包括数据库结构图、数据表设计文档,以及示例数据SQL脚本。用户可以通过这些文件快速搭建项目所需的数据库环境,并了解各个数据表之间的关系和作用。 详细的开发文档:每个资源包都附有详细的开发文档,文档内容包括项目背景介绍、功能模块说明、系统流程图、用户界面设计以及关键代码解析等。这些文档为用户提供了深入的学习材料,使得即便是从零开始的开发者也能逐步掌握项目开发的全过程。 项目演示与使用指南:为帮助用户更好地理解和使用这些ASP项目,每个资源包中都包含项目的演示文件和使用指南。演示文件通常以视频或图文形式展示项目的主要功能和操作流程,使用指南则详细说明了如何配置开发环境、部署项目以及常见问题的解决方法。 毕业设计参考:对于正在准备毕业设计的学生来说,这些资源包是绝佳的参考材料。每个项目不仅功能完善、结构清晰,还符合常见的毕业设计要求和标准。通过这些项目,学生可以学习到如何从零开始构建一个完整的Web系统,并积累丰富的项目经验。
资源包主要包含以下内容: ASP项目源码:每个资源包中都包含完整的ASP项目源码,这些源码采用了经典的ASP技术开发,结构清晰、注释详细,帮助用户轻松理解整个项目的逻辑和实现方式。通过这些源码,用户可以学习到ASP的基本语法、服务器端脚本编写方法、数据库操作、用户权限管理等关键技术。 数据库设计文件:为了方便用户更好地理解系统的后台逻辑,每个项目中都附带了完整的数据库设计文件。这些文件通常包括数据库结构图、数据表设计文档,以及示例数据SQL脚本。用户可以通过这些文件快速搭建项目所需的数据库环境,并了解各个数据表之间的关系和作用。 详细的开发文档:每个资源包都附有详细的开发文档,文档内容包括项目背景介绍、功能模块说明、系统流程图、用户界面设计以及关键代码解析等。这些文档为用户提供了深入的学习材料,使得即便是从零开始的开发者也能逐步掌握项目开发的全过程。 项目演示与使用指南:为帮助用户更好地理解和使用这些ASP项目,每个资源包中都包含项目的演示文件和使用指南。演示文件通常以视频或图文形式展示项目的主要功能和操作流程,使用指南则详细说明了如何配置开发环境、部署项目以及常见问题的解决方法。 毕业设计参考:对于正在准备毕业设计的学生来说,这些资源包是绝佳的参考材料。每个项目不仅功能完善、结构清晰,还符合常见的毕业设计要求和标准。通过这些项目,学生可以学习到如何从零开始构建一个完整的Web系统,并积累丰富的项目经验。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值