java银行排队系统_用GUI模拟银行排队系统

这是一个使用Java编写的银行排队模拟系统,系统包括普通用户和金卡用户两种类型。普通用户按照先进先出(FIFO)原则排队,而金卡用户可以插队到首位。系统通过GUI界面展示用户排队情况,但未实现多线程以模拟实时交互。
摘要由CSDN通过智能技术生成

要求:

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

}

}

}

}

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

用户界面如下:

%E6%9C%AA%E5%91%BD%E5%90%8D_thumb_1.jpg

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

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();

}

}

}

}

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

程序运行结果如下

%E6%9C%AA%E5%91%BD%E5%90%8D_thumb_2.jpg

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

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

66db94d771c40b6bf0744852b9da2907.png

冯魁

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

66db94d771c40b6bf0744852b9da2907.png

Ctrl+Enter 发布

发布

取消

0

分享

关注TA解锁更多精彩文章

关注

冯魁

66db94d771c40b6bf0744852b9da2907.png

681c03179c55f8d5eee90ace04da1ae0.png

70bc5c3884aa823724e684bce77428e2.png

扫一扫,领取大礼包

39420787fd306fba0e1f3021f9b8e228.png

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

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值