`
想学跑的猪
  • 浏览: 15315 次
  • 性别: Icon_minigender_1
  • 来自: 北京
最近访客 更多访客>>
社区版块
存档分类
最新评论

黑马程序员_面试题_银行业务调度系统

阅读更多

 

         

   ------ android培训java培训、java基础学习技术总结、期待与您交流! ----------

 

银行业务调度系统
     * 模拟实现银行调度系统逻辑,具体需求如下:
     * 银行呢有6个业务窗口,1-4号窗口为普通窗口,5号窗口为快速窗口,6号窗口为VIP窗口。
     * 有三种对应的类型客户:VIP客户,普通客户,快速客户(办理如交水电费、电话费之类
     * 业务的客户)。
     * 异步随机生成各种类型的客户,生成个类型用户的概率比例为
     * VIP:普通客户:快速客户=1;6;3.
     * 客户办理业务所需时间有最大值,最小值,在该范围内随机设定每个VIP客户以及普通客户办理业务
     * 办理业务所需时间,快速客户办理业务所需时间为最小值(提示:办理
     * 业务的过程可通过线程Sleep的方式模拟)。
     * 各个类型客户在其对应窗口按顺序依次办理业务。
     * 当VIP(6号)窗口和快速业务(5号)窗口没有客户等待业务办理的时候,这两个窗口可以处理普通客户的业务,而一旦
     * 有对应的刻画等待办理业务的时候,则按优先级处理客户的业务。
     * 随机生成客户时间间隔以及业务办理时间最大值和最小值自定,可以设置。
     * 不要求实现GUI,只考虑系统逻辑实现,可通过Log方式展现程序运行结果。
     *
     *
     *
     * MainClass类
     * 用for循环创建出4个普通窗口,在创建出一个快速窗口和一个VIP窗口。
     * 接着再创建三个定时器,分别定时去创建新的普通客户号码、新的快速客户号码、
     * 新的VIP客户号码。
     * Constants;类
     * 定义单个常量:Max_SERVICE_TIME\MIN_SERVICE_TIME\
     * COMMON_CUSTOMER_INTERVAL_TIME
     * NumberManager和NumberMachine类
     * NumberManger类
     * 定义一个用于存储上一个客户号码的成员变量和用于存储所有等待服务的客户号码的队列集合。
     * 定义一个产生新号码的方法和获取马上要为之服务的号码的方法,
     * 这两个方法被不同的线程操作了相同的数据,所以,要进行同步。
     * NumberMachine类
     *
     *
     * 面向对象分析与设计
     * 有三中对应类型的客户:VIP客户,普通客户,快速客户,异步随机生成各种类型
     * 的客户,各类型客户在其对应窗口按顺序依次办理业务。
     *
     * 各类型客户在其对应窗口依次办理业务,准确地说,应该是窗口依次叫号。

     代码如下:

       CustomerType类

public enum CustomerType{
      COMMON,EXPRESS,VIP;
      public String toString(){
    	  switch(this){
    	  case COMMON:
    		  return "普通";
    	  case EXPRESS:
    		  return "快速";
    	  default:
    		  return name(); 
    	  }
      }
}

       NumberMachine类

public class NumberMachine {
       private NumberManager commonManager=new NumberManager();
       private NumberManager expressManager=new NumberManager();
       private NumberManager vipManager=new NumberManager();
       private static NumberMachine instance=new NumberMachine();
       
	public NumberManager getCommonManager() {
		return commonManager;
	}
	public void setCommonManager(NumberManager commonManager) {
		this.commonManager = commonManager;
	}
	public NumberManager getExpressManager() {
		return expressManager;
	}
	public void setExpressManager(NumberManager expressManager) {
		this.expressManager = expressManager;
	}
	public NumberManager getVipManager() {
		return vipManager;
	}
	public void setVipManager(NumberManager vipManager) {
		this.vipManager = vipManager;
	}
	private NumberMachine(){
	}
	public static NumberMachine getInstance() { 
		// TODO Auto-generated method stub
		
		return instance;
	}

      NumberManager类

public class NumberManager {
	private int lastNumber=1;
	private List<Integer> queueNumber= new ArrayList<Integer>();
        public synchronized Integer generalNewManager(){
        	queueNumber.add(lastNumber);
        	return lastNumber++;
        }
        public Integer fetchServiceNumber(){
        	Integer number=null;
        	if(queueNumber.size()>0){
        	return queueNumber.remove(0); 
        	}
			return number; 
        }
}

     ServiceWindow类

public class ServiceWindow {
	     private CustomerType type=CustomerType.COMMON; 
	     private int windowId=1;
       public void setType(CustomerType type) {
			this.type = type;
		}
		public void setWindowId(int windowId) {
			this.windowId = windowId;
		}
	public void start(){
    	   ExecutorService executor=Executors.newFixedThreadPool(1);
    	   executor.execute(new Runnable(){

			@Override
			public void run() {
				// TODO Auto-generated method stub
				while(true){
					switch(type){
					case COMMON:
						commonService();
						break;
					case EXPRESS:
						expressService();
						break;
					case VIP:
						vipService() ;
						break;
					}				 
				}
			}

			private  void commonService() {
				String windowName="第"+windowId+"号"+type+"窗口";
				System.out.println(windowName+"正在获取任务");  
				Integer number=NumberMachine.getInstance().getCommonManager().fetchServiceNumber();	
				if(number!=null){
					long beginTime=System.currentTimeMillis();
					int maxRand=Constants.MAX_SERVICE_TIME-Constants.MIN_SERVICE_TIME;
					long serveTime=/*new Random().nextInt(maxRand)+*/1+Constants.MIN_SERVICE_TIME;
					try{
						Thread.sleep(serveTime);  
					}catch(InterruptedException e){
						e.printStackTrace();
					}
					long costTime=System.currentTimeMillis()-beginTime;
					System.out.println(windowName+"为第"+number+"个"+type+"客户完毕!");
				}else{
					System.out.println(windowName+"没有取到任务.先休息一秒!");
					try{
						Thread.sleep(1000);
					}catch(InterruptedException e){
						e.printStackTrace();
					}
					
				}
			}
			private  void expressService() {
				String windowName="第"+windowId+"号"+type+"窗口";
				System.out.println(windowName+"正在获取任务");  
				Integer number=NumberMachine.getInstance().getExpressManager().fetchServiceNumber();	
				if(number!=null){
					long beginTime=System.currentTimeMillis();
					int maxRand=Constants.MAX_SERVICE_TIME-Constants.MIN_SERVICE_TIME;
					long serveTime=/*new Random().nextInt(maxRand)+*/1+Constants.MIN_SERVICE_TIME;
					try{
						Thread.sleep(serveTime);  
					}catch(InterruptedException e){
						e.printStackTrace();
					}
					long costTime=System.currentTimeMillis()-beginTime;
					System.out.println(windowName+"为第"+number+"个"+type+"客户完毕!");
				}else{
					System.out.println(windowName+"没有取到任务.先休息一秒!");
					try{
						Thread.sleep(Constants.MIN_SERVICE_TIME);
					}catch(InterruptedException e){
						e.printStackTrace();
					}
					
				}
			}
			private  void vipService() {
				String windowName="第"+windowId+"号"+type+"窗口";
				System.out.println(windowName+"正在获取任务");  
				Integer number=NumberMachine.getInstance().getVipManager().fetchServiceNumber();	
				if(number!=null){
					long beginTime=System.currentTimeMillis();
					int maxRand=Constants.MAX_SERVICE_TIME-Constants.MIN_SERVICE_TIME;
					long serveTime=/*new Random().nextInt(maxRand)+*/1+Constants.MIN_SERVICE_TIME;
					try{
						Thread.sleep(serveTime);  
					}catch(InterruptedException e){
						e.printStackTrace();
					}
					long costTime=System.currentTimeMillis()-beginTime;
					System.out.println(windowName+"为第"+number+"个"+type+"客户完毕!");
					 
				}else{
					
					System.out.println(windowName+"没有取到任务!");
					commonService();
					try{
						Thread.sleep(1000);
					}catch(InterruptedException e){
						e.printStackTrace();
					}
					
				}
			}
			
    	   });	   
	}
}

     Constant类

public class Constants {
         public static int MAX_SERVICE_TIME=1000;
         public static int MIN_SERVICE_TIME=10000;
         public static int COMMON_CUETOMER_INTERVAL_TIME=1;
}

       BankTest类

public class BankTest {

	public static void main(String[] args) {
		
	   Logger logger=Logger.getLogger("cn.itcast.bank");     	 
    	 for(int i=1;i<5;i++){
    		 ServiceWindow commnonWindow=new ServiceWindow();
    		 commnonWindow.setWindowId(i);
    		 commnonWindow.start();
    		 
    	 }
    	 ServiceWindow expressWindow=new ServiceWindow();
    	 expressWindow.setType(CustomerType.EXPRESS);
    	 expressWindow.start();
    	 ServiceWindow vipWindow=new ServiceWindow();
    	 vipWindow.setType(CustomerType.VIP);
    	 vipWindow.start();
    	 Executors.newScheduledThreadPool(1).scheduleAtFixedRate(
    			 new Runnable(){

					@Override
					public void run() {
						// TODO Auto-generated method stub
						Integer number=NumberMachine.getInstance().getCommonManager().generalNewManager();
						System.out.println(number+"号普通客户等待服务!"); 
					}
    				 
    			 }, 
    			 0, 
    			 Constants.COMMON_CUETOMER_INTERVAL_TIME,
    			 TimeUnit.SECONDS);
    	 Executors.newScheduledThreadPool(1).scheduleAtFixedRate(
    			 new Runnable(){

					@Override
					public void run() {
						// TODO Auto-generated method stub
						Integer number=NumberMachine.getInstance().getExpressManager().generalNewManager();
						System.out.println(number+"号普通客户等待服务!"); 
					}
    				 
    			 }, 
    			 0, 
    			 Constants.COMMON_CUETOMER_INTERVAL_TIME,
    			 TimeUnit.SECONDS);
    	 Executors.newScheduledThreadPool(1).scheduleAtFixedRate(
    			 new Runnable(){

					@Override
					public void run() {
						// TODO Auto-generated method stub
						Integer number=NumberMachine.getInstance().getVipManager().generalNewManager();
						System.out.println(number+"号普通客户等待服务!"); 
					}
    				 
    			 }, 
    			 0, 
    			 Constants.COMMON_CUETOMER_INTERVAL_TIME,
    			 TimeUnit.SECONDS);
    	 
    	 
     }

}

 

 

 

 

            ------ android培训java培训、java基础学习技术总结、期待与您交流! ----------

分享到:
评论

相关推荐

    02-7K月薪面试题破解之二_银行业务调度系统视频教程

    02-7K月薪面试题破解之二_银行业务调度系统视频教程 02-7K月薪面试题破解之二_银行业务调度系统视频教程 02-7K月薪面试题破解之二_银行业务调度系统视频教程 02-7K月薪面试题破解之二_银行业务调度系统视频教程 02-...

    java_examine.rar_java 试题_程序员 面试_程序员面试_面试_面试题

    针对Java程序员的面试,往往涉及广泛的知识点,旨在评估候选人的技术能力、问题解决能力和代码质量。本资料"java_examine.rar"是一个关于Java面试题的资源包,包含一个视频讲解和一份文本文件,帮助应聘者准备面试。...

    Aspnet中级程序员_面试题

    【Aspnet中级程序员面试题】是针对有一定经验的Asp.net开发者设计的考核内容,主要涵盖C#、ASP.NET、SQL以及DBA等相关技术领域。这些知识点在实际开发和项目管理中至关重要,下面将对这些核心领域进行深入探讨。 **...

    《JAVA面试题》--JAVA 黑马程序员 面试宝典全学科.zip

    十余年JAVA从业经验,精通JAVA技术体系,有志于做JAVA技能提升的朋友可与我联系,交个朋友 十余年JAVA从业经验,精通JAVA技术体系,有志于做JAVA技能提升的朋友可与我联系,交个朋友 十余年JAVA从业经验,精通JAVA...

    黑马程序员_毕向东_Java基础源码.rar

    这个名为“黑马程序员_毕向东_Java基础源码.rar”的压缩包文件,包含了丰富的Java基础源代码实例,对于初学者来说,是深入了解Java编程的良好资源。 一、Java基本语法 Java语言以其严格的类型检查和面向对象特性...

    软通动力面试题——银行业务调度系统

    "软通动力面试题——银行业务调度系统" 在本篇文章中,我们将对软通动力的银行业务调度系统面试题进行详细的分析和解释。该系统模拟了银行业务调度系统的逻辑,涵盖了客户分类、窗口管理、业务办理时间等多个方面。...

    银行业务调度系统需求及面试题及代码

    其次,银行业务调度系统面试题系列《银行业务调度系统面试题系列.ppt》可能涵盖了设计、开发、测试和运维等相关知识领域。面试问题可能包括但不限于系统架构设计原则,如何处理业务流程中的瓶颈,如何实现高效的数据...

    java程序员早期面试题汇总.zip

    java程序员早期面试题汇总 BAT经典面试题汇总.pdf Java常考面试题.pdf java面试题(题库全).doc java面试题-外企软件工程师面试题大全.rar 程序员面试题精选100题.pdf ... --------------------------------...

    黑马程序员java面试宝典 完整版PDF.rar

    《黑马程序员Java面试宝典》是一本...通过《黑马程序员Java面试宝典》的学习,你可以系统地复习和掌握这些知识点,提高自己的面试竞争力。书中的问题和解答将帮助你更好地理解Java编程的本质,提升在面试中的自信心。

    【黑马面试宝典】虐面试官神器之必备黑马程序员Android面试宝典.zip

    Android面试宝典包含两个宝典: 1【黑马项目宝典】虐面试官神器之必备黑马程序员项目宝典V1.1 内容包括:(1)电子商城(2)ListView系列(3)图像处理(4)动画效果(5)控件大全(6)新闻资讯(7)生活相关(8)...

    JAVAAndroid面试题讲解视频

    资源名称:JAVA Android面试题讲解视频资源目录:【】2012黑马程序员01_面试题【】2012黑马程序员02_面试题【】2012黑马程序员03_面试题【】2012黑马程序员04_面试题【】225ce844c6c817e9614d8f17ea70a640【】...

    面试题——银行业务调度系统-源代码

    【标题】:“面试题——银行业务调度系统-源代码”涉及的是一个基于JavaSE的银行后台管理系统,旨在处理银行日常的业务调度问题。这个系统可能是为了模拟或优化银行内部的工作流程,例如账户管理、交易处理、客户...

    银行业务调度系统

    7K月薪面试题____银行业务调度系统(自己练习的demo)

    程序员_面试问题回答

    【程序员面试问题回答】 面试是每个程序员职业生涯中的关键环节,如何回答面试问题直接影响到是否能够获得心仪的工作。以下是一些面试中常见的问题及其理想的回答策略: 1. 自我介绍:这是展示个人能力和经历的...

    bishiti.rar_C 面试题_c 笔试_笔试_面试_面试题

    "bishiti.rar_C 面试题_c 笔试_笔试_面试_面试题"这个压缩包包含了针对C语言的笔试和面试题目,旨在帮助求职者更好地准备技术面试,提高通过率。下面将详细讨论C语言的一些关键知识点。 1. **数据类型**:C语言提供...

    .net程序员面试题

    收集了很多师兄师姐出去就业后,收集回来的企业面试.net程序员的面试题啊!不容易啊!1-8份面试题,好好看啊!都是技术题,祝面试上自己喜欢的职业

    IT程序员高频面试题梳理码农高频面试题梳理

    IT程序员高频面试题梳理码农高频面试题梳理 P33 IT程序员高频面试题梳理码农 高频面试题梳理 IT程序员高频面试题梳理码农高频面试题梳理 IT程序员高频面试题 梳理码农高频面试题梳理 IT程序员高频面试题梳理码农高频...

    Java程序员就业面试题大全

    Java程序员就业面试题大全Java程序员就业面试题大全Java程序员就业面试题大全Java程序员就业面试题大全Java程序员就业面试题大全Java程序员就业面试题大全

Global site tag (gtag.js) - Google Analytics