現在銀行遍地開花,在城市了差不多每隔200米就可以看到一家銀行。在銀行叫號排隊也就成了很平常的事情。但是很讓人生氣的是在咱們這個世界上最大的社會主義國家里,在銀行排隊卻很不公平,咱們這些沒錢的人(在銀行里存錢不多,持普通卡)每次排隊都要等很長一段時間才能辦理業務,而且沒有工作人員來招呼,而那些有錢人(在銀行里存了很多錢,持“金卡”)卻不用等,隨時可以辦理業務,還美其名曰“金卡”特權。難道有錢就有特權嗎?氣憤中……...
還是說這個系統吧:
銀行大廳里有一個叫號機(顧客客戶端),如果持普通卡點一下辦理業務按鈕就會打印一張小條,顯示你的號碼和排在你前面的人數;如果持金卡,點一下辦理業務就會提示下一位要辦理的客戶就是你。
每個業務辦理窗口都有一個工作人員客戶端,點擊下一位就會從等待的客戶隊列中取出第一位到該窗口辦理。
客戶,也就是等待的人,要有號碼、排在前面的人數等屬性,然后實現這些屬性的set、get方法。
Waiter
Waiter package queuebanknew; 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; } }
工作人員,也就是窗口的處理業務的人員,她們有自己的編號,姓名,顧客,實現這些屬性的set、get方法,還加入了一段工作過程的代碼。
Counter
Counter package queuebanknew; public class Counter { private int id; private String name; private Waiter w; public Counter(Waiter waiter) { this.w=waiter; } public int getId() { return id; } public void setId(int id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } public Waiter getW() { return w; } public void setW(Waiter w) { this.w = w; } public void handBussines(){ System.out.println("正在處理:"+this.w.getNum()+"號"); try { Thread.sleep(1000); } catch (InterruptedException e) { e.printStackTrace(); } System.out.println("處理完畢:"+this.getW().getNum()); } }
測試一下:
TestBankQueue package queuebanknew; import java.util.Queue; public class TestBankQueue { /** * @param args */ public static void main(String[] args) { QueueServer qs = new QueueServer(); Queue<Waiter> waiterList = qs.init();//初始化10個等待者 Waiter waiter= null; while(true){//模擬工作人員處理業務 waiter = waiterList.poll(); if(waiter != null){ Counter counter = new Counter(waiter); counter.handBussines(); }else{ break; } } } }
結果:
服務器端:
QueueServer package queuebanknew; import java.util.LinkedList; public class QueueServer { LinkedList<Waiter> waiterList = new LinkedList<Waiter>(); public LinkedList<Waiter> init(){ for(int i=1;i<=10;i++){ Waiter w = new Waiter(); w.setNum(i); w.setFrontNum(i-1); waiterList.offer(w); } return waiterList; } }
BankWorkerUI
工作人員客戶端:
BankWorkerUI package queuebanknew; 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 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){ Waiter waiter = waiterList.poll(); if(waiter!=null){ txt.setText(waiter.getNum()+"號顧客到1號窗口辦理"); }else{ txt.setText("沒人辦理業務"); } } }); button.setBounds(90, 141, 100, 25); button.setText("下一個"); shell.layout(); shell.open(); while(!shell.isDisposed()){ if(!display.readAndDispatch()) display.sleep(); } } }
WaiterQueueUI
客戶的客戶端:
WaiterQueueUI package queuebanknew; 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.setBounds(100, 100, 570, 380); // 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(50,50,200,150); // 事件代碼里要訪問button,所以要添加final final Button button = new Button(shell,SWT.Activate); button.addSelectionListener(new SelectionAdapter(){ public void widgetSelected(SelectionEvent e){ Waiter waiter = new Waiter(); waiter.setNum(waiterList.size()+1); waiter.setFrontNum(waiterList.size()); waiterList.offer(waiter); if(waiterList.size()<=20){ txt.setText("您現在排在"+waiter.getNum()+"位置上\n您前面有"+waiter.getFrontNum()+"個人,請耐心等待!!"); }else{ txt.setText("您前面已經排20多人,請考慮!\n"+"您現在排在"+waiter.getNum()+"位置上,\n您前面有"+waiter.getFrontNum()+"個人,請耐心等待!!"); } } }); button.setBounds(75, 250, 150, 50); // 設置按鈕位置 button.setFont(new Font(display,"宋體",12,SWT.BOLD)); button.setText("個人業務");// 設置按鈕上的文字 // ------------------------------------------------------------------------ final Text goldTxt = new Text(shell,SWT.NULL); goldTxt.setBounds(300,50,200,150); // 事件代碼里要訪問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("金卡用戶,下一位就是您!"); } }); goldButton.setBounds(325, 250, 150, 50); // 設置按鈕位置 goldButton.setFont(new Font(display,"宋體",12,SWT.BOLD)); goldButton.setText("金卡通道");// 設置按鈕上的文字 // ------------------END--------------------------------------------- shell.layout(); shell.open(); while (!shell.isDisposed()) { if (!display.readAndDispatch()) display.sleep(); } } }
看一下運行結果: