银行管理系统的实现以及思路
来源:互联网 发布:apache 允许目录浏览 编辑:程序博客网 时间:2024/05/07 23:56
银行业务调度系统
模拟实现银行业务调度系统罗技,具体需求如下:
*银行内有6个业务窗口,1 - 4号窗口为普通窗口,5号窗口为快速窗口,6号窗口为VIP窗口。
*有三种对应类型的客户:VIP客户,普通客户,快速客户(办理如交水电费、电话费之类业务的客户)
。
*异步随机生成各种类型的客户,生成各类型用户的概率比例为:
VIP客户 :普通客户 :快速客户 = 1 :6 :3。
*?客户办理业务所需时间有最大值和最小值,在该范围内随机设定每个VIP客户以及普通客户办理业务所
需的时间,快速客户办理业务所需时间为最小值(提示:办理业务的过程可通过线程Sleep的方式模拟)
。
*各类型客户在其对应窗口按顺序依次办理业务。
*当VIP(6号)窗口和快速业务(5号)窗口没有客户等待办理业务的时候,这两个窗口可以处理普通客
户的业务,而一旦有对应的客户等待办理业务的时候,则优先处理对应客户的业务。
*随机生成客户时间间隔以及业务办理时间最大值和最小值自定,可以设置。
*不要求实现GUI,只考虑系统逻辑实现,可通过Log方式展现程序运行结果。
------------------------------------------------------------------------------------
面向对象的分析与设计
有三种对应类型的客户:VIP客户,普通客户,快速客户,异步随即生成各种类型的客户,各类型客户在
其对应窗口按顺序依次办理业务。
代码实现:
号码机器类
public class NumberMachine {
private NumberManager commonClient = new NumberManager();
private NumberManager expressClient = new NumberManager();
private NumberManager VIPClient = new NumberManager();
public NumberManager getcommonClient() {
return commonClient;
}
public NumberManager getexpressClient() {
return expressClient;
}
public NumberManager getVIPClient() {
return VIPClient;
}
//实现一个单例设计模式
private NumberMachine(){//封闭该类的new实例化方法
}
public static NumberMachine getInstance(){ //创建一个得到对象的方法
return instance;
}
private static NumberMachine instance = new NumberMachine(); // 加了static在虚拟机
开启时就已经开辟了地址准备调用就行了
}
服务窗口类:
public class ServerWindow {
private Custom type = Custom.common; //设置叫号类型
private int WindowId = 1; //初始化窗口号
public void setType(Custom type) {
this.type = type;
}
public void setWindowId(int windowId) {
this.WindowId = windowId;
}
public void start(){// 开始叫号方法
Executors.newSingleThreadExecutor().execute(new Runnable(){//1.5以后的线程
新技术
@Override
public void run() {
// Integer num = 0;
// String WindowText = null;
while (true==true) {
switch(type){
case common:
Common();
break;
case express:
Express();
break;
case VIP:
VIP();
break;
}
}
}
private void Common() {
Integer num = NumberMachine.getInstance().getcommonClient
().fetchServiceNum(); //客户号
String WindowText = "第"+WindowId+"号"+type;//窗口类型和窗
口号
System.out.println(WindowText+"窗口正在获取");
if(num!=null){
System.out.println(WindowText+"正在为第"+num+"个"+"
普通"+"客户服务");
long startTime = System.currentTimeMillis();
int max = Constant.MAX_SERVER_TIME-
Constant.MIN_SERVER_TIME;
//得到从1000-10000的随机数
int maxrandom = new Random().nextInt
(max)+1+Constant.MIN_SERVER_TIME;
try {
Thread.sleep(maxrandom);
} catch (InterruptedException e) {
e.printStackTrace();
}//模仿银行,业务操作1-10秒之间
long costTime = System.currentTimeMillis()-
startTime;
System.out.println(WindowText+"窗口为第"+num
+"号"+type+"客户办理了业务用了"+(costTime/1000)+"秒");
}else{
System.out.println(WindowText+"没有获取到任务,休息
一秒");
try {
Thread.sleep(1000);//如果没有找到客户,就停
下一秒在继续
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
private void Express() {
Integer num;
num = NumberMachine.getInstance().getexpressClient
().fetchServiceNum(); //客户号
String WindowText = "第"+WindowId
+"号"+type.express.toString();
System.out.println(WindowText+"窗口正在获取");
if(num!=null){
long startTime = System.currentTimeMillis();
int max = Constant.MAX_SERVER_TIME-
Constant.MIN_SERVER_TIME;
//得到从1000-10000的随机数
int maxrandom = new Random().nextInt(max
+1)+Constant.MIN_SERVER_TIME;
try {
Thread.sleep(maxrandom);//模仿银行,业务操作1-10
秒之间
} catch (Exception e) {
e.printStackTrace();
}
long costTime = System.currentTimeMillis()-
startTime;
System.out.println(WindowText+"窗口为第"+num
+"号"+type+"客户办理了业务用了"+(costTime/1000)+"秒");
}else{
System.out.println(WindowText+"没有获取到任务");
Common();
}
}
private void VIP() {
Integer num;
num = NumberMachine.getInstance().getVIPClient
().fetchServiceNum(); //客户号
String WindowText = "第"+WindowId+"号"+type.VIP.toString();
System.out.println(WindowText+"窗口正在获取");
if(num!=null){
long startTime = System.currentTimeMillis();
int max = Constant.MAX_SERVER_TIME-
Constant.MIN_SERVER_TIME;
//得到从1000-10000的随机数
int maxrandom = new Random().nextInt
(max)+1+Constant.MIN_SERVER_TIME;
try {
Thread.sleep(maxrandom);//模仿银行,业务操作1-10
秒之间
} catch (Exception e) {
e.printStackTrace();
}
long costTime = System.currentTimeMillis()-
startTime;
System.out.println(WindowText+"窗口为第"+num
+"号"+type+"客户办理了业务用了"+(costTime/1000)+"秒");
}else{
System.out.println(WindowText+"没有获取到任务");
Common();
}
}
});
}
}
号码管理类:
public class NumberManager {
private int lastNum = 1; //上一次的号码
private List<Integer> Numlist = new ArrayList<Integer>();
public synchronized Integer generateNumber(){ //产生号码 ,如果两个线程同时访问同一
个数据就需要同步。
Numlist.add(lastNum);
return lastNum++;
}
public synchronized Integer fetchServiceNum(){ //得到服务号,为第几号客户服务
// Integer size = null;
if(Numlist.size()>0){
return Numlist.remove(0);
}
return null; //每完成一次删除一个最先排号的客户。remover()会返回执行的对象
}
}
窗口类型管理枚举类:
public enum Custom {
common,express,VIP;
@Override
public String toString() {
switch(this){
case common:
return "普通";
case express:
return "快速";
case VIP:
return "VIP";
}
return null;
}
}
操作时间限制类:
public class Constant {
public static int MAX_SERVER_TIME = 10000;
public static int MIN_SERVER_TIME = 1000;
}
主方法调用类:
public class MainClass {
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
for(int i =1;i<5;i++){
ServerWindow common = new ServerWindow();
common.setWindowId(i);//为什么要设置ID?其他的为什么不需要
common.start();
}
ServerWindow express = new ServerWindow();
express.setType(Custom.express);
express.start();
ServerWindow VIP = new ServerWindow();
VIP.setType(Custom.VIP);
VIP.start();
Executors.newScheduledThreadPool(1).scheduleAtFixedRate( //VIP用户
new Runnable(){
@Override
public void run() {
// TODO Auto-generated method stub
int num = NumberMachine.getInstance
().getVIPClient().generateNumber();
System.out.println("第"+num+"号VIP客户正在
等待服务!");
}
},
0,
6,
TimeUnit.SECONDS);
Executors.newScheduledThreadPool(1).scheduleAtFixedRate( //快速用户
new Runnable(){
@Override
public void run() {
// TODO Auto-generated method stub
int num = NumberMachine.getInstance
().getexpressClient().generateNumber();
System.out.println("第"+num+"号快速客户正在
等待服务!");
}
},
0,
3,
TimeUnit.SECONDS);
Executors.newScheduledThreadPool(1).scheduleAtFixedRate( //普通用户
new Runnable(){
@Override
public void run() {
// TODO Auto-generated method stub
int num = NumberMachine.getInstance
().getcommonClient().generateNumber();
System.out.println("第"+num+"号普通客户正在
等待服务!");
}
},
0,
1,
TimeUnit.SECONDS);
}
}
- 银行管理系统的实现以及思路
- 银行客户管理系统的实现
- 汇编写的银行管理系统
- 课程设计报告,简单的银行管理系统
- 可以进行数据传输的银行管理系统
- VS2010下的银行管理系统
- 银行管理系统
- c++银行管理系统
- 银行调度管理系统
- 银行管理系统
- 银行管理系统
- 银行管理系统
- 银行管理系统
- 银行管理系统
- 黑马 银行管理系统
- 模拟银行管理系统
- 银行资金管理系统
- 银行管理系统02
- JAVA---字符串按照字典排序
- CSimple程序之短信发送
- 基于 Linux 和 MiniGUI 的嵌入式系统软件开发指南题八——MiniGUI 和其他嵌入式 Linux 上的图形及图形用户界面系统
- MFC学习笔记
- Android入门笔记之发送短信
- 银行管理系统的实现以及思路
- java学习有那些需要注意的?
- Oracle分页查询语句
- JAVA连接MYSQL通过查询返回的结果集获取表结构字段类型
- VS2008 工具栏CMFCToolBar的使用总结
- 第4章 表单及表单域组件
- HDOJ,杭电 2037 ,今年暑假不AC。贪心算法入门题目
- Matlab与C++接口与混合编程讨论小结
- hdu 1290 2050