要求:
1、要和实际情况类似,写一个在银行大厅的排队叫号机器上取出一个号码,上面有你的位置号还有你前面有多少人,这样一个简单的叫号系统。
2、当工作人员按一个按钮时,就会通知一个等候的人到某个窗口办理业务。
3、实现有金卡用户(就是人家存的钱很多啦)和普通用户区分开来,无论前面排队有多少人,金卡用户都会排到第一位。
分析:
1、排队肯定是先进先出(FI FO),所以我们用到Queue接口有关的类。
2、在排队等候客户端,只需要考虑等待者排在第几号,和前面有几个人就可以了。
3、当金卡用户来排队的时候,他们钱多就会要求先得到服务,所以当添加一个金卡用户,队列中的金卡用户的时候,普通用户的队列也要添加该用户,
4、在工作人员客户端,工作人员只需处理多少用户即可,并且先办理金卡用户的业务,只有当金卡用户为空的时候才开始办理普通用户的业务。
代码如下:
//等待着的类
package com.dr.Test;
public class Waiter {
private int num;
private int frontNum;
private int flag;//0代表普通 1代表gold
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.Test;
import java.util.LinkedList;
import java.util.Queue;
public class QueueServer {
LinkedList<Waiter> waiterList = new LinkedList<Waiter>();
public LinkedList<Waiter> init(){
for(int i=1;i<=20;i++){
Waiter w = new Waiter();
w.setNum(i);
w.setFrontNum(i-1);
waiterList.offer(w);
}
return waiterList;
}
}
//排队的客户端
package com.dr.Test;
import java.util.LinkedList;
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 WaiterQueueUI {
public static void main(String[] args) {
final Display display = Display.getDefault();
final Shell shell = new Shell();
shell.setMaximized(true);
shell.setText("银行排队之顾客使用的客户端");
// ------------------新插入的界面核心代码------------------------
QueueServer qs = new QueueServer();//实例化类
final LinkedList<Waiter> waiterList = qs.init();//初始化队列服务器
final Text txt = new Text(shell,SWT.MULTI);
txt.setBounds(40, 50, 500, 450);
// 事件代码里要访问button,所以加�?��final
final Button button = new Button(shell, SWT.Activate);
button.addSelectionListener(new SelectionAdapter() { // 加一个�?择监听器
public void widgetSelected(SelectionEvent e) {
//System.out.println("############### " + waiterList.size());
Waiter waiter = new Waiter();
waiter.setNum(waiterList.size()+1);
waiter.setFrontNum(waiterList.size());
waiterList.offer(waiter);
if(waiterList.size() <= 50){
txt.setText( "您现在排在"+waiter.getNum()+"位置上,\n您前面有"+waiter.getFrontNum()+"个人\n请您耐心等候吧!哈哈");
}else{
txt.setText("您前面已经排50个人,请考虑!\n"+"您现在排在"+waiter.getNum()+"位置上,\n您前面有"+waiter.getFrontNum()+"个人\n请您耐心等候吧!哈哈");
}
}
});
button.setBounds(210, 530, 200, 75); // 设置按钮位置
button.setFont(new Font(display,"宋体",12,SWT.BOLD));
button.setText("个人业务");// 设置按钮上的文字
final Text goldtxt = new Text(shell,SWT.MULTI);
goldtxt.setBounds(600, 50, 500, 450);
// 事件代码里要访问button,所以加�?��final
final Button goldbutton = new Button(shell, SWT.Activate);
goldbutton.addSelectionListener(new SelectionAdapter() { // 加一个�?择监听器
public void widgetSelected(SelectionEvent e) {
//
Waiter w =new Waiter();
w.setFlag(1);
waiterList.addFirst(w);
goldtxt.setText( "下一个就是您\n请您耐心等候吧!哈哈");
}
});
goldbutton.setBounds(750, 530, 200, 75); // 设置按钮位置
goldbutton.setFont(new Font(display,"宋体",12,SWT.BOLD));
goldbutton.setText("gold");// 设置按钮上的文字
// ------------------END---------------------------------------------
shell.layout();
shell.open();
while (!shell.isDisposed()) {
if (!display.readAndDispatch())
display.sleep();
}
}
}
//工作人员客户端
package com.dr.Test;
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;
import com.dr.Test.QueueServer;
import com.dr.Test.Waiter;
public class BankWorkerUI {
public static void main(String[] args) {
final Display display = Display.getDefault();
final Shell shell = new Shell();
shell.setSize(327, 253);
shell.setText("银行排队之工作人员客户端");
// ------------------新插入的界面核心代码------------------------
QueueServer qs = new QueueServer();//实例化类
final Queue<Waiter> waiterList = qs.init();//初始化队列服务器
final Text txt = new Text(shell,SWT.MULTI);
txt.setBounds(65, 30, 180, 70);
// 事件代码里要访问button
final Button button = new Button(shell, SWT.Activate);
button.addSelectionListener(new SelectionAdapter() { // 加一个�?择监听器
public void widgetSelected(SelectionEvent e) {
//System.out.println("############### " + waiterList.size());
Waiter waiter= waiterList.poll();
if(waiter!= null){
txt.setText(waiter.getNum()+"号顾客请到1号窗口办理业务");
}else{
txt.setText("现在没有人办理业务了,您可以休息会了\n 喝杯咖啡吧,哈哈!");
}
}
});
button.setBounds(90, 141, 100, 25); // 设置按钮位置
button.setText("下一个");// 设置按钮上的文字
// ------------------END---------------------------------------------
shell.layout();
shell.open();
while (!shell.isDisposed()) {
if (!display.readAndDispatch())
display.sleep();
}
}
}
运行结果:
排队端:
金卡来了
工作人员端:
谢谢阅读!欢迎您提供宝贵意见!!