`
dawuafang
  • 浏览: 1142247 次
文章分类
社区版块
存档分类
最新评论

银行业务调度系统学习

 
阅读更多


项目分析:
银行窗口 三类窗口
客户 三类客户
客户随机生成
生成比例 1:6:3


窗口可以向下兼容,
各类型客户应在其对应窗口顺序依次办理业务, 需要有窗口叫号控制器


实际代码设计:


首先先编号码管理器NumberManager


变量类型尽量面向父级,体现面向接口编程


ArrayList remove返回类型是他取走的数据类型


为了达到多线程操作的时候应让其互斥,加synchronized


1、号码生成器

/*
 * 号码生成器
 */
public class NumberManager {

	// 定义号码变量
	private int lastNumber = 1;
	// 定义号码集合
	private List<Integer> queueNumber = new ArrayList<Integer>();

	// 生成新号码
	public synchronized Integer generateNewManager() {
		queueNumber.add(lastNumber);
		return lastNumber++;
	}

	// 取出第一个号码
	public synchronized Integer fetchServiceNumber() {
		Integer number = null;
		if (queueNumber.size() > 0) {
			number = queueNumber.remove(0);
		}
		return number;
	}
}

号码管理器:

/**
	 * 号码管理器
	 */
	//定义用户级别
	private NumberManager commonManager = new NumberManager();
	private NumberManager expressManager = new NumberManager();
	private NumberManager vipManager = new NumberManager();

	public NumberManager getCommonManager() {
		return commonManager;
	}

	public NumberManager getExpressManager() {
		return expressManager;
	}

	public NumberManager getVipManager() {
		return vipManager;
	}

	// 将对象变成单例
	private NumberMachine() {}
	public static NumberMachine getInstance() {
		return instance;
	}
	private static NumberMachine instance = new NumberMachine();
}



服务窗口


使用JDK1.5新的线程方式不仅可以使性能更好、而且还可以体现出自己懂得多


if else 为什么比switch 效率高


比如if(a==2)else if(a==3) 这样a需要请求多次值、系统不知道这两个a是同一个a
这样switch就体现出它只用一次值就可以达到if else的效果 所以switch效率高


	/**
	 * 服务窗口
	 * 
	 **/
	//定义常量类的默认值和窗口序号
	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() {
		Executors.newSingleThreadExecutor().execute(new Runnable() {
			@Override
			public void run() {
				while (true) {
					switch (type) {
					case COMMON:
						commonService();
						break;
					case EXPERSS:
						expressService();
						break;
					case VIP:
						vipService();
						break;
					}
				}
			}
		});
	}

	//普通窗口业务逻辑
	private void commonService() {
		String windowName = "第" + windowId + "号" + type + "窗口";
		//获取号码
		Integer number = NumberMachine.getInstance().getCommonManager()
				.fetchServiceNumber();
		System.out.println(windowName + "正在获取任务");
		if (number != null) {
			System.out
					.println(windowName + "为第" + number + "个" + "普通" + "客户服务");
			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 + "个" + "普通"
					+ "完成服务,耗时" + costTime / 1000 + "秒");
		} else {
			System.out.println(windowName + "没有获取到任务,休息一秒");
			try {
				Thread.sleep(1000);
			} catch (InterruptedException e) {
				e.printStackTrace();
			}
		}
	}

	private void expressService() {
		String windowName = "第" + windowId + "号" + type + "窗口";
		Integer number = NumberMachine.getInstance().getExpressManager()
				.fetchServiceNumber();
		System.out.println(windowName + "正在获取任务");
		if (number != null) {
			System.out
					.println(windowName + "为第" + number + "个" + type + "客户服务");
			long beginTime = System.currentTimeMillis();
			try {
				Thread.sleep(Constants.MIN_SERVICE_TIME);
			} catch (InterruptedException e) {
				e.printStackTrace();
			}
			long costTime = System.currentTimeMillis() - beginTime;

			System.out.println(windowName + "为第" + number + "个" + type
					+ "完成服务,耗时" + costTime / 1000 + "秒");
		} else {
			System.out.println(windowName + "没有获取到任务");
			commonService();
		}
	}

	private void vipService() {
		String windowName = "第" + windowId + "号" + type + "窗口";
		System.out.println(windowName + "正在获取任务");
		Integer number = NumberMachine.getInstance().getVipManager()
				.fetchServiceNumber();
		System.out.println(windowName + "正在获取任务");
		if (number != null) {
			System.out
					.println(windowName + "为第" + number + "个" + type + "客户服务");
			long beginTime = System.currentTimeMillis();
			try {
				Thread.sleep(Constants.MIN_SERVICE_TIME);
			} catch (InterruptedException e) {
				e.printStackTrace();
			}
			long costTime = System.currentTimeMillis() - beginTime;

			System.out.println(windowName + "为第" + number + "个" + type
					+ "完成服务,耗时" + costTime / 1000 + "秒");
		} else {
			System.out.println(windowName + "没有获取到任务");
			commonService();
		}
	}

}


运行测试拉~~

Main

public class MainClass {

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		// 生成五个普通窗口
		for (int i = 1; i < 5; i++) {
			ServiceWindow commonWindow = new ServiceWindow();
			commonWindow.setWindowId(i);
			commonWindow.start();
		}

		// 生成一个快速窗口
		ServiceWindow expressWindow = new ServiceWindow();
		expressWindow.setType(CustomerType.EXPERSS);
		expressWindow.start();

		// 生成一个VIP窗口
		ServiceWindow vipWindow = new ServiceWindow();
		vipWindow.setType(CustomerType.VIP);
		vipWindow.start();

		// 新技术使每隔N长时间产生普通用户
		Executors.newScheduledThreadPool(1).scheduleAtFixedRate(new Runnable() {

			@Override
			public void run() {
				Integer number = NumberMachine.getInstance().getCommonManager()
						.generateNewManager();
				System.out.println("第" + number + "号普通客户等待服务");
			}
		}, 0, Constants.COMMON_CUSTOMER_TIME, TimeUnit.SECONDS);

		// 新技术使每隔N长时间产生快速用户
		Executors.newScheduledThreadPool(1).scheduleAtFixedRate(new Runnable() {

			@Override
			public void run() {
				Integer number = NumberMachine.getInstance()
						.getExpressManager().generateNewManager();
				System.out.println("第" + number + "号快速客户等待服务");
			}
		}, 0, Constants.COMMON_CUSTOMER_TIME * 6, TimeUnit.SECONDS);

		// 新技术使每隔N长时间产生VIP用户
		Executors.newScheduledThreadPool(1).scheduleAtFixedRate(new Runnable() {

			@Override
			public void run() {
				Integer number = NumberMachine.getInstance().getVipManager()
						.generateNewManager();
				System.out.println("第" + number + "号vip客户等待服务");
			}
		}, 0, Constants.COMMON_CUSTOMER_TIME * 2, TimeUnit.SECONDS);

	}

}

测试结果:

第1号VIP窗口正在获取任务
第1号快速窗口正在获取任务
第4号普通窗口正在获取任务
第1号快速窗口没有获取到任务
第2号普通窗口正在获取任务
第1号普通窗口正在获取任务
第3号普通窗口正在获取任务
第1号VIP窗口正在获取任务
第3号普通窗口没有获取到任务,休息一秒
第1号普通窗口没有获取到任务,休息一秒
第2号普通窗口没有获取到任务,休息一秒
第1号快速窗口正在获取任务
第4号普通窗口没有获取到任务,休息一秒
第1号快速窗口没有获取到任务,休息一秒
第1号VIP窗口没有获取到任务
第1号VIP窗口正在获取任务
第1号VIP窗口没有获取到任务,休息一秒
第1号普通客户等待服务
第1号快速客户等待服务
第1号vip客户等待服务
第4号普通窗口正在获取任务
第1号快速窗口正在获取任务
第1号VIP窗口正在获取任务
第1号普通窗口正在获取任务
第3号普通窗口正在获取任务
第2号普通窗口正在获取任务
第3号普通窗口没有获取到任务,休息一秒
第1号普通窗口没有获取到任务,休息一秒
第1号VIP窗口正在获取任务
第1号快速窗口为第1个快速客户服务
第4号普通窗口为第1个普通客户服务
第1号VIP窗口为第1个VIP客户服务
第2号普通窗口没有获取到任务,休息一秒
第2号普通客户等待服务
第3号普通窗口正在获取任务
第1号快速窗口为第1个快速完成服务,耗时1秒
第1号快速窗口正在获取任务
第1号普通窗口正在获取任务
第1号快速窗口没有获取到任务
第1号快速窗口正在获取任务
第3号普通窗口为第2个普通客户服务
第3号普通客户等待服务
第1号快速窗口没有获取到任务,休息一秒
第2号普通窗口正在获取任务
第1号VIP窗口为第1个VIP完成服务,耗时1秒
第1号普通窗口没有获取到任务,休息一秒
第1号VIP窗口正在获取任务
第2号vip客户等待服务
第2号普通窗口没有获取到任务,休息一秒
第1号VIP窗口正在获取任务
第1号VIP窗口为第2个VIP客户服务
第1号快速窗口正在获取任务
第4号普通客户等待服务
第1号快速窗口没有获取到任务
第1号快速窗口正在获取任务
第1号快速窗口为第3个普通客户服务
第1号普通窗口正在获取任务
第1号普通窗口为第4个普通客户服务
第2号普通窗口正在获取任务
第1号VIP窗口为第2个VIP完成服务,耗时1秒
第2号普通窗口没有获取到任务,休息一秒
第1号VIP窗口正在获取任务
第1号VIP窗口正在获取任务
第1号VIP窗口没有获取到任务
第1号VIP窗口正在获取任务
第1号VIP窗口没有获取到任务,休息一秒
第5号普通客户等待服务
第3号vip客户等待服务
第1号VIP窗口正在获取任务
第2号普通窗口正在获取任务
第1号VIP窗口正在获取任务
第2号普通窗口为第5个普通客户服务
第1号VIP窗口为第3个VIP客户服务
第3号普通窗口为第2个普通完成服务,耗时2秒
第3号普通窗口正在获取任务
第3号普通窗口没有获取到任务,休息一秒
第6号普通客户等待服务
第1号VIP窗口为第3个VIP完成服务,耗时1秒


分享到:
评论

相关推荐

    银行业务调度系统

    《银行业务调度系统详解》 银行业务调度系统是金融行业中不可或缺的重要组成部分,它在保障银行业务高效、稳定运行中起到至关重要的作用。本系统的主要目标是优化资源分配,提高服务质量和响应速度,确保银行各项...

    银行业务调度系统分析

    通过"说明.html"和"src&ppt"中的资料,我们可以深入学习到这些理论知识与实践技巧,进一步提升对银行业务调度系统以及多线程编程的理解。无论是对于开发人员还是系统架构师,这些知识都将有助于构建更高效、稳定的...

    张孝祥银行业务调度系统源代码

    总的来说,【张孝祥银行业务调度系统源代码】是一个宝贵的教育资源,对于想要深入理解银行业务处理和系统开发的程序员来说,提供了实战性的学习素材。通过研究和实践,可以提升对银行业务流程的理解,掌握系统设计和...

    张孝祥银行业务调度系统源代码 第二次写 复习

    总的来说,张孝祥的【银行业务调度系统源代码】是一个很好的学习和实践案例,它涵盖了软件设计原则、面向对象编程、参数化方法设计等多个知识点,对于提升开发者在银行系统开发领域的专业技能大有裨益。通过不断的...

    银行业务调度系统的实现

    通过阅读博文,我们可以深入了解这些组件的实现细节,学习如何在实际项目中应用这些技术和工具,以构建一个高效、可靠的银行业务调度系统。如果博文提供了源码,那么更是一份宝贵的实战参考资料,有助于开发者提升在...

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

    综上所述,这个资源为理解和构建银行业务调度系统提供了全面的学习材料,从需求分析到实际编码,覆盖了系统开发的全过程。对于有意从事银行IT领域的专业人士来说,无论是面试准备还是项目实施,都是一份宝贵的参考...

    【IT教程网】银行业务调度系统教程_源码与PPT_it_银行_银行管理系统_

    通过学习这个教程,你不仅可以掌握银行业务调度系统的基本原理,还能提升在实际项目中的开发技能,例如需求分析、系统设计、代码编写、测试和维护等。对于想要从事银行IT领域或者提升现有系统的人来说,这是一份非常...

    银行业务调度系统源码和PPT.rar

    【银行业务调度系统】是一种专为银行业务流程自动化和优化设计的软件系统,它整合了多种技术,如Spring、SpringMVC、MyBatis(SSM框架)和Java,以提高银行服务的效率和响应速度。这个压缩包包含了该系统的源代码和...

    银行业务调度系统模拟

    【银行业务调度系统模拟】是一个基于VB编程语言实现的项目,旨在模拟银行内部的业务处理流程,这在软件工程领域中常被用作面试题或毕业设计课题。这个系统的核心目标是有效地管理和优化银行客户的等待及服务过程,...

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

    【描述】:描述中提到,作者在学习Java的过程中,实践了一个银行业务调度系统的项目,并愿意分享源代码。这表明该项目不仅是一个理论概念的探讨,而且是实际编程技能的锻炼。作者期待其他有更好解决方案的人能提供...

    JAVA项目:银行业务调度系统视频教程.rar

    综上所述,"JAVA项目:银行业务调度系统视频教程"涵盖了Java开发的多个重要方面,通过学习这个教程,开发者不仅能提升Java编程技能,还能了解如何构建一个满足银行业务需求的复杂系统。下载必看.html可能是课程介绍...

    JavaEE +SSH框架+mysql数据库 银行业务调度管理系统项目地址.docx

    总结来说,"JavaEE + SSH框架 + mysql数据库 银行业务调度管理系统"是一个综合性的项目,涵盖了Web开发中的关键技术和业务领域的具体应用。对于想要提升技能或者完成毕业设计的学生,这是一个绝佳的学习资源,不仅...

    银行业务调度视频教学

    《银行业务调度系统视频教程》是一套以JAVA实战为主题的项目教学资源,旨在帮助开发者深入理解如何模拟实现后台银行业务调度。课程由资深讲师张孝祥主讲,通过一系列的视频讲座,逐步解析了从需求分析到系统实现的全...

    银行业务与IT系统架构

    综上所述,《银行业务与IT系统架构》这份资料将银行的业务运作与IT技术紧密结合,为读者提供了一个全面了解银行业务与系统设计的视角,无论是对银行业从业者还是IT专业人士,都是极有价值的学习资源。

    java毕业设计&课设-银行业务调度系统视频教程(视频+源码+课件).zip

    本资源主要涵盖的是一个基于Java技术的银行业务调度系统,旨在帮助学生进行毕业设计或课程设计,通过视频教程、源代码以及相关课件提供全面的学习材料。以下是该系统涉及的关键知识点: 1. **Java编程语言**:作为...

    模拟银行调度系统

    **模拟银行调度系统** 在IT领域,开发一个模拟银行调度系统是常见的实践,它能够帮助我们理解和掌握多种关键的技术概念,如Java编程语言中的面向对象编程、多线程处理、单例设计模式以及集合框架的运用。下面我们将...

    java毕业设计&课设-银行业务调度系统视频教程(视频+源码+课件).doc

    ### Java毕业设计&课设-银行业务调度系统视频教程知识点概览 ...通过以上内容的学习,相信读者不仅能够掌握Java银行业务调度系统的开发技术,还能够在实践中不断提高自己的编程能力和解决问题的能力。

    基于C++实现的银行业务模拟系统

    在本项目中,"基于C++实现的...通过这样的模拟系统,学习者不仅可以掌握C++的多线程编程,还能深入了解银行业务的运作流程,以及如何在软件中实现这些功能。同时,这也为实际的银行系统开发提供了基础训练和实践经验。

    银行排队叫号系统实现

    7. **安全性考虑**:由于涉及银行业务,系统必须考虑数据安全和隐私保护,可能采用加密技术保护敏感信息。 8. **测试与调试**:在实际部署前,对系统进行全面的测试,包括单元测试、集成测试和性能测试,确保无bug...

    银行信息系统作业调度自动化建设.rar

    在现代银行业务中,信息系统扮演着至关重要的角色,而作业调度自动化则是保障系统高效运行的关键环节。本文将深入探讨银行信息系统作业调度自动化建设的相关知识点,旨在提升银行系统的运营效率,降低运营成本,并...

Global site tag (gtag.js) - Google Analytics