要求:

和实际情况相似,您到银行办理业务,到了银行大厅首先是在电脑上刷卡(有的可能不用刷卡)取出一个纸条,上面有你的位置号还有你前面有多少人,在工作人员那里会有一个按钮,点击一下就会叫一个人到他那里办理业务。这种情况是对于普通用户来说的,有的银行还有金卡用户(就是人家存的钱多nb),他们很是霸道,无论前面排队有多少人,他都会排到第一位。

分析:1.排队肯定是先进先出(First in First out),所以我们要想到用和Queue接口有关的类。

2.金卡用户霸道,要想到用LinkedList来实例化Queue,因为LinkedList有addFirst方法。

3.在这里无法实现读取用户的信息,为了区分金卡用户和普通用户在电脑上设置两个按钮,一个相当于普通用户刷看用的,一个相当于金卡用户刷卡用的。

程序代码如下:

//封装等候者类

package com.dr.bankQueueSystem;

public class Waiter {

private int num;

private int frontnum;

private int flag;

public int getFlag() {

return flag;

}

public void setFlag(int flag) {

this.flag = flag;

}

public int getNum() {

return num;

}

public void setNum(int num) {

this.num = num;

}

public int getFrontnum() {

return frontnum;

}

public void setFrontnum(int frontnum) {

this.frontnum = frontnum;

}

}

//封装工作人员类

package com.dr.bankQueueSystem;

public class Counter {

private int num;

private String counterName;

private Waiter w;

public Counter(Waiter w)

{

this.w=w;

}

public String getCounterName() {

return counterName;

}

public void setCounterName(String counterName) {

this.counterName = counterName;

}

public Waiter getW() {

return w;

}

public void setW(Waiter w) {

this.w = w;

}

public int getNum() {

return num;

}

public void setNum(int num) {

this.num = num;

}

public Counter(int num)

{

this.num=num;

}

public void handleBusiness()

{

System.out.println("I am handling the"+this.w.getNum()+"waiter!");

try{

Thread.sleep(100);

}

catch(InterruptedException e)

{

e.printStackTrace();

}

System.out.println("I have handled the"+this.w.getNum()+",next waiter!");

}

}

//封装服务器类

package com.dr.bankQueueSystem;

import java.util.LinkedList;

import java.util.Queue;

public class BankServer {

private LinkedList waiterList=new LinkedList();//新建等候者队列

public LinkedList Init()//初始化20个等候者

{

for(int i=0;i<20;i++)

{

Waiter w=new Waiter();

w.setNum(i+1);

w.setFrontnum(i);

waiterList.offer(w);

}

return waiterList;

}

}

//用户使用系统客户端

package com.dr.bankQueueSystem;

import java.util.LinkedList;

import java.util.Queue;

import org.eclipse.swt.SWT;

import org.eclipse.swt.events.SelectionAdapter;

import org.eclipse.swt.events.SelectionEvent;

import org.eclipse.swt.widgets.Button;

import org.eclipse.swt.widgets.Display;

import org.eclipse.swt.widgets.Shell;

import org.eclipse.swt.widgets.Text;

public class WaiterQueueUI {

public static void main(String args[])

{

Display display=new Display();

Shell shell=new Shell(display);

shell.setMaximized(true);

//初始化界面

shell.setText("银行排队用户使用系统");

//服务器初始化

BankServer bs=new BankServer();

final LinkedList waiterList=bs.Init();

//添加普通用户文本框控件

final Text text=new Text(shell,SWT.MULTI);

text.setBounds(40,50,400,500);

//添加普通用户按钮控件

Button button=new Button(shell,SWT.Activate);

button.setBounds(120,600,120,60);

button.setText("普通用户");

//为普通用户按钮添加事件处理

button.addSelectionListener(new SelectionAdapter(){

public void widgetSelected(SelectionEvent e)

{

Waiter w=new Waiter();

w.setNum(waiterList.size()+1);

w.setFrontnum(waiterList.size());

waiterList.offer(w);

if(waiterList.size()<=50)

{

text.setText("您现在排在"+w.getNum()+"号位置上\n"+"您前面有"+w.getFrontnum()+"人\n"+"请耐心等待");

}

else

{

text.setText("您前面已有50人,请考虑\n您排在"+w.getNum()+"号位置上");

}

}

});

//添加金卡用户文本框控件

final Text goldText=new Text(shell,SWT.MULTI);

goldText.setBounds(700,50,400,500);

//添加金卡用户按钮控件

Button goldButton=new Button(shell,SWT.Activate);

goldButton.setBounds(800,600,120,60);

goldButton.setText("金卡用户");

//为金卡用户按钮控件添加事件处理

goldButton.addSelectionListener(new SelectionAdapter(){

public void widgetSelected(SelectionEvent e)

{

Waiter w=new Waiter();

w.setFlag(1);

waiterList.addFirst(w);

goldText.setText("尊敬金卡用户,欢迎您的到来");

}

});

shell.layout();

shell.open();

while(!shell.isDisposed())

{

if(!display.readAndDispatch()){

display.sleep();

}

}

}

}

**********************************************************************************

用户界面如下:

//银行工作人员使用系统客户端

package com.dr.bankQueueSystem;

import java.util.LinkedList;

import java.util.Queue;

import org.eclipse.swt.SWT;

import org.eclipse.swt.events.SelectionAdapter;

import org.eclipse.swt.events.SelectionEvent;

import org.eclipse.swt.graphics.Font;

import org.eclipse.swt.widgets.Button;

import org.eclipse.swt.widgets.Display;

import org.eclipse.swt.widgets.Shell;

import org.eclipse.swt.widgets.Text;

public class CounterQueueUI {

public static void main(String args[])

{

Display display=new Display();

Shell shell=new Shell(display);

shell.setMaximized(true);

//初始化界面

shell.setText("银行排队工作人员使用系统");

//服务器初始化

BankServer bs=new BankServer();

final LinkedList waiterList=bs.Init();

//添加文本框控件

final Text text=new Text(shell,SWT.MULTI);

text.setBounds(400,50,400,500);

text.setFont(new Font(display,"宋体",15,SWT.BOLD));

//添加按钮控件

Button button=new Button(shell,SWT.Activate);

button.setBounds(550,600,120,60);

button.setText("下一个");

//为按钮控件添加事件处理

button.addSelectionListener(new SelectionAdapter(){

public void widgetSelected(SelectionEvent e)

{

Waiter w=waiterList.poll();

if( w!=null)

{

text.setText(w.getNum()+"号顾客请到1号窗口办理业务!");

}

else

{

text.setText("现在没有人办理业务,你可以休息了");

}

}

});

shell.layout();

shell.open();

while(!shell.isDisposed())

{

if(!display.readAndDispatch()){

display.sleep();

}

}

}

}

*************************************************************************

程序运行结果如下

此程序没有用到多线程,无法实现客户与工作人员的连接,所以在服务器初始化时新建了20个用户。这也是此程序的缺点。

©著作权归作者所有:来自51CTO博客作者冯魁的原创作品,如需转载,请注明出处,否则将追究法律责任

冯魁

52篇文章,29W+人气,0粉丝

Ctrl+Enter 发布

发布

取消

0

分享

关注TA解锁更多精彩文章

关注

冯魁

扫一扫,领取大礼包

Copyright © 2005-2020 51CTO.COM 版权所有 京ICP证060544号

java银行排队系统_用GUI模拟银行排队系统相关推荐

  1. java模仿银行账务业务_Java基础案例 - 模拟银行存取款业务

    博学谷--让IT教学更简单,让IT学习更有效 模拟银行存取款业务 编写一个Java应用程序,模拟网上银行登录及存取款业务.登录时需判断银行卡号和银行卡密码,当输入的卡号和密码都正确时,登录成功,提示当 ...

  2. Java EE 企业网站_基于jsp的企业网站系统-JavaEE实现企业网站系统 - java项目源码...

    基于jsp+servlet+pojo+mysql实现一个javaee/javaweb的企业网站系统, 该项目可用各类java课程设计大作业中, 企业网站系统的系统架构分为前后台两部分, 最终实现在线上 ...

  3. java邮件群发代码_基于jsp的邮件群发系统-JavaEE实现邮件群发系统 - java项目源码...

    基于jsp+servlet+pojo+mysql实现一个javaee/javaweb的邮件群发系统, 该项目可用各类java课程设计大作业中, 邮件群发系统的系统架构分为前后台两部分, 最终实现在线上 ...

  4. 基于java的家庭理财系统_基于jsp的家庭理财系统-JavaEE实现家庭理财系统 - java项目源码...

    基于jsp+servlet+pojo+mysql实现一个javaee/javaweb的家庭理财系统, 该项目可用各类java课程设计大作业中, 家庭理财系统的系统架构分为前后台两部分, 最终实现在线上 ...

  5. java车牌识别系统_基于jsp的车牌识别系统-JavaEE实现车牌识别系统 - java项目源码...

    基于jsp+servlet+pojo+mysql实现一个javaee/javaweb的车牌识别系统, 该项目可用各类java课程设计大作业中, 车牌识别系统的系统架构分为前后台两部分, 最终实现在线上 ...

  6. JAVA实现查询系统_基于jsp的车辆查询系统-JavaEE实现车辆查询系统 - java项目源码...

    基于jsp+servlet+pojo+mysql实现一个javaee/javaweb的车辆查询系统, 该项目可用各类java课程设计大作业中, 车辆查询系统的系统架构分为前后台两部分, 最终实现在线上 ...

  7. java采集温湿度水浸_配电室水浸及温湿度监测系统可加强环境保障

    配电室水浸及温湿度监测系统有两大监测对象,一是管道.门窗等位置的漏水现象,二是室内各个位置的温度.湿度变化值,实现这两方面监测,能有效加强环境保障,降低漏水.高温.潮湿而引起的电力系统故障.设备损坏问 ...

  8. Java怎么保证数据一致性_连续调用多个外部系统写接口保证数据一致性的思路...

    概述 某些场景下,我们将业务数据落地之前,是需要先调用外部系统的多个写接口,当这些写接口都操作成功了,我们才将业务数据落地到自己本地的数据库里面.比如说: public void updateProd ...

  9. c语言银行三个窗口,[离散事件模拟] 银行窗口模拟 - C语言

    文章目录 这种抽象问题的思维蛮巧妙的,看完一定会有不小的收获! 编制一个程序以模拟银行窗口接待客户的排队业务活动,并计算一天中客户在银行的逗留的平均时间 每个窗口在某个时刻只能接待一个客户 窗口空闲, ...

最新文章

  1. mysql select语句最简_10个mysql中select语句的简单用法
  2. go语言笔记——是c开发的 lex yacc进行词法和语法分析,go不支持函数和运算符重载,不支持类型继承,也不支持断言,还有泛型...
  3. cvtColor不是cv的成员
  4. JWT介绍以及java-jwt的使用
  5. Linux查看系统的负载
  6. 计算机图形学开发框架,计算机图形学-基于3d图形开发技术
  7. spark 读取elasticsearch数据
  8. 玩转spring boot——结合AngularJs和JDBC
  9. 模式先行浅析分销系统的优势
  10. 史上最全mysql日期计算(月初、月末、上中下旬判断、年初、年末、季初、季末)
  11. AbMole推荐:人源化单抗动物实验黄金指南 (上)
  12. name norm is not defined
  13. 牛顿迭代法求方程的根
  14. 10个程序员必上的网站
  15. 淘宝聚划算怎么玩?其实也就是这些营销手段及功能
  16. 电子班牌解决方案-最新全套文件
  17. java合成聚和例子_合成聚合原则(示例代码)
  18. 接龙游戏 [Codevs 1051]
  19. mdm9x07 qmi及共享内存流程
  20. 女友逢车必晕,轻则身心难受,重则翻江倒海 吾看此情况甚为心疼!故找此一篇希望有帮助《防治晕车七法》

热门文章

  1. [Unity官方文档翻译]2D or 3D Projects Unity中2D和3D项目的区别
  2. Coping With Labor Scarcity in Information Technology: Strategies and Practices for Effective Recruit
  3. MySQL快速比较数据库表数据
  4. x射线和γ射线区别?α射线、β射线
  5. 一代经典:Xiuno(修罗程序)黯然离场......
  6. 电台转型与计算机相关的问题,计算机技术在电视台中的应用黄文峰
  7. php语言可以写游戏吗,网游用什么语言开发,网游用什么语言开发的
  8. Python:实现求一个数的位数之和算法(附完整源码)
  9. 07-项目训练_短信登陆和退出登录
  10. 电子商务:众多消费者的个性需求