要求:
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();
}
}
}
運行結果:
排隊端:

金卡來了

工作人員端:

謝謝閱讀!歡迎您提供寶貴意見!!