银行业务调度系统


需求:

银行业务调度系统.
一、银行内有6各业务窗口,1-4窗口为普通窗口,5号窗口为快速窗口,6号窗口为VIP窗口。
二、有三种对应类型客户:VIP客户,普通客户,快速客户(办理如交水电费、电话费之类业务的客户)。
三、异步随机生成各种类型的客户,生成各种类型用户的概率比例为:
    VIP客户:普通客户:快速客户=1:6:3.
四、客户办理业务所需时间有最大值和最小值,在该范围随机设定每个VIP客户以及普通客户办理业务所需的时间,快速客户办理业务所需时间为最小值(提示:办理业务的过程可通过线程Sleep的方式模拟)。
五、各类型客户在其对应窗口按顺序依次办理业务。
六、当VIP(6号)窗口和快速业务(五号)窗口没有客户等待办理业务的时候,这两个窗口可以处理普通客户的业务,而一旦有对应的客户等待办理业务的时候,则优先处理对应客户的业务。
七、随机生成客户时间间隔以及业务办理时间最大值和最小值自定,可以设置。
八、不需求实现GUI,只考虑系统逻辑实现,可通过Log方式展现程序运行结果


分析图:



银行客户系统功能类

import java.util.ArrayList;
import java.util.List;

class BankSystem {

	private List<User> pt_user = new ArrayList<User>();
	private List<User> q_user = new ArrayList<User>();
	private List<User> vip_user = new ArrayList<User>();
	private Object obj = new Object();

	final int WINDOW_WT_TIME = 1000;
	final int WINDOW_PT_TIME = 3000;
	final int WINDOW_QS_TIME = 1000;
	final int WINDOW_VIP_TIME = 6000;

	public void UserNumber(int num) {

		User user = new User();
		user.setLv(num % 10);
		user.setNumber(num + 1);
		switch (user.getLv()) {
		case "普通用户":
			pt_user.add(user);
			break;
		case "快速用户":
			q_user.add(user);
			break;
		case "VIP用户":
			vip_user.add(user);
			break;
		}
		System.out.println("第" + user.getNumber() + "用户光顾,您是----------------"
				+ user.getLv());
	}

	public void BankWindowServise(int num) {
		while (true) {
			// 普通窗口服务。
			if (num <4) {
				if (pt_user.size() == 0) {
					System.out.println("第" + num + "普通窗口没有接到普通客户,空闲!!!");
					try {
						Thread.sleep(WINDOW_WT_TIME);
					} catch (InterruptedException e) {
						// TODO Auto-generated catch block
						e.printStackTrace();
					}
				} else {
					User user = null;
					synchronized (obj) {
						user = pt_user.get(0);
						pt_user.remove(0);
					}
					System.out.println("第" + user.getNumber() + "用户您好,您是"
							+ user.getLv() + "___普通窗口为您服务");

					try {
						Thread.sleep(WINDOW_PT_TIME);
					} catch (InterruptedException e) {
						// TODO Auto-generated catch block
						e.printStackTrace();
					}

				}
			}

			// 快速窗口服务。
			if (num == 4) {
				if (q_user.size() == 0) {
					System.out.println("第" + num + "快速窗口没有接到快速客户,转接普通用户。");
					if (pt_user.size() == 0) {
						System.out.println("第" + num + "快速窗口没有接到普通客户,空闲!!!");
						try {
							Thread.sleep(WINDOW_WT_TIME);
						} catch (InterruptedException e) {
							// TODO Auto-generated catch block
							e.printStackTrace();
						}
					} else {
						User user = null;
						synchronized (obj) {
							user = pt_user.get(0);
							pt_user.remove(0);
						}
						System.out.println("第" + user.getNumber() + "用户您好,您是"
								+ user.getLv() + "___快速窗口为您服务");
						
						try {
							Thread.sleep(WINDOW_PT_TIME);
						} catch (InterruptedException e) {
							e.printStackTrace();
						}

					}
				}

				else {
					User user = q_user.get(0);
					System.out.println("第" + user.getNumber() + "用户您好,您是"
							+ user.getLv() + "___快速窗口为您服务");
					q_user.remove(0);
					try {
						Thread.sleep(WINDOW_QS_TIME);
					} catch (InterruptedException e) {
						e.printStackTrace();
					}

				}
			}

			// VIP窗口服务。
			if (num == 5) {
				if (vip_user.size() == 0) {
					System.out.println("第" + num + "VIP窗口没有接到VIP客户,转接普通用户。");
					if (pt_user.size() == 0) {
						System.out.println("第" + num + "VIP窗口没有接到普通客户,空闲!!!");
						try {
							Thread.sleep(WINDOW_WT_TIME);
						} catch (InterruptedException e) {
							// TODO Auto-generated catch block
							e.printStackTrace();
						}
					} else {
						User user = null;
						synchronized (obj) {
							user = pt_user.get(0);
							pt_user.remove(0);
						}
						System.out.println("第" + user.getNumber() + "用户您好,您是"
								+ user.getLv() + "___VIP窗口为您服务");
						try {
							Thread.sleep(WINDOW_PT_TIME);
						} catch (InterruptedException e) {
							e.printStackTrace();
						}

					}
				}

				else {
					User user = vip_user.get(0);
					System.out.println("第" + user.getNumber() + "用户您好,您是"
							+ user.getLv() + "___VIP窗口为您服务");
					vip_user.remove(0);
					try {
						Thread.sleep(WINDOW_VIP_TIME);
					} catch (InterruptedException e) {
						e.printStackTrace();
					}

				}
			}

		}
	}
}

用户排号。

public class CreatUserNumber implements Runnable {

	private BankSystem bs;

	CreatUserNumber(BankSystem bs) {
		this.bs = bs;
	}

	public void run() {
		for (int i = 0; i < 100; i++) {
			bs.UserNumber(i);
			try {
				Thread.sleep(1000);
			} catch (InterruptedException e) {
				e.printStackTrace();
			}
		}
	}

}

用户类。

public class User {
	String Lv;
	int Number;

	public String getLv() {
		return Lv;
	}

	public void setLv(int lv) {
		switch (lv) {
		case 0:
			Lv = "普通用户";
			break;
		case 1:
			Lv = "普通用户";
			break;
		case 2:
			Lv = "快速用户";
			break;
		case 3:
			Lv = "普通用户";
			break;
		case 4:
			Lv = "普通用户";
			break;
		case 5:
			Lv = "快速用户";
			break;
		case 6:
			Lv = "普通用户";
			break;
		case 7:
			Lv = "普通用户";
			break;
		case 8:
			Lv = "快速用户";
			break;
		case 9:
			Lv = "VIP用户";
			break;
		}
	}

	public int getNumber() {
		return Number;
	}

	public void setNumber(int number) {
		Number = number;
	}

}

创建普通窗口,快速窗口以及VIP窗口。

public class CreatPTWindow implements Runnable {
	private BankSystem bs;

	CreatPTWindow(BankSystem bs) {
		this.bs = bs;
	}

	@Override
	public void run() {

			bs.BankWindowServise(1);
		

	}

}

public class CreatQSWindow implements Runnable {
	private BankSystem bs;

	CreatQSWindow(BankSystem bs) {
		this.bs = bs;
	}

	@Override
	public void run() {

			bs.BankWindowServise(4);

	}

}

public class CreatVIPWindow implements Runnable {
	private BankSystem bs;

	CreatVIPWindow(BankSystem bs) {
		this.bs = bs;
	}

	@Override
	public void run() {
			bs.BankWindowServise(5);

	}

}

运行银行系统主函数。

public class BankClientRun {

	public static void main(String[] args) throws Exception {
		BankSystem bs = new BankSystem();
		CreatUserNumber cun = new CreatUserNumber(bs);
		CreatPTWindow cpw = new CreatPTWindow(bs);
		CreatQSWindow cqw = new CreatQSWindow(bs);
		CreatVIPWindow cvw = new CreatVIPWindow(bs);

		new Thread(cun).start();
		new Thread(cpw).start();//普通用户窗口为了便与观察结果只创建一个。
		new Thread(cqw).start();
		new Thread(cvw).start();

	}

}

运行结果:







  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值