我們做一個銀行排隊金卡卡塞小系統,并用swt實現圖形界面功能。
銀行系統中包括:銀行工作人員、辦理業務的用戶(包括普通用戶和金卡用戶),還有存放用戶對列的服務器。
用戶有3個屬性:排隊號碼、排在前面的人數、卡的類型(普通卡和金卡)。
需要注意的是:金卡用戶來的時候,會自動排在隊列的最前面辦理業務。
代碼如下:
用戶類:
package com.dr.ui;
public class Waiter {
private int num;
private int frontNum;
private int flag; //卡的類型 0=普通卡 1=金卡
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;
}
public int getFlag() {
return flag;
}
public void setFlag(int flag) {
this.flag = flag;
}
}
服務器:
package com.dr.ui;
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.add(w);
}
return waiterList;
}
}
用戶客戶端:
package com.dr.ui;
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.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.NULL);
txt.setBounds(50,50,500,450);
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()<=50){
txt.setText("尊敬的用戶您好!您現在排在"+waiter.getNum()+"位置上,\n您前面有"+waiter.getFrontNum()+"個人。\n請耐心等候吧");
}
else{
txt.setText("尊敬的用戶您好!您前面已經排50個人,請考慮!\n"+"您現在排在"+waiter.getNum()+"位置上,\n您前面有"+waiter.getFrontNum()+"個人\n請您耐心等候吧!哈哈");
}
}
});
button.setBounds(180,530,200,75);
button.setText("個人業務");
final Text goldTxt=new Text(shell,SWT.NULL);
goldTxt.setBounds(650,50,500,450);
final Button goldButton=new Button(shell,SWT.Activate);
goldButton.addSelectionListener(new SelectionAdapter(){
public void widgetSelected(SelectionEvent e){
Waiter waiter=new Waiter();
waiter.setFlag(1);
waiterList.addFirst(waiter);
goldTxt.setText("尊敬的金卡用戶您好,現在可以去辦理業務");
}
});
goldButton.setBounds(780,530,200,75);
goldButton.setText("金卡通道");
shell.layout();
shell.open();
while(!shell.isDisposed()){
if(!display.readAndDispatch()){
display.sleep();
}
}
}
}
銀行工作人員客戶端:
package com.dr.ui;
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.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 LinkedList<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("現在沒有人辦理業務了,您可以休息會了\n 喝杯咖啡吧,哈哈!");
}
}
});
button.setBounds(90, 141, 100, 25); // 設置按鈕位置
button.setText("下一個");// 設置按鈕上的文字
// ------------------END---------------------------------------------
shell.layout();
shell.open();
while (!shell.isDisposed()) {
if (!display.readAndDispatch())
display.sleep();
}
}
}
用戶客戶端運行結果:

銀行工作人員客戶端運行結果:
