實現的功能:

      1.銀行工作人員使用的客戶端實現功能:每次單擊Button“下一個”,窗口上會顯示提示X號顧客去y號窗口辦理業務;當顧客隊列里沒有顧客時對工作人員作出提示。

      2.顧客使用的客戶端實現功能:每當有顧客單擊Button“個人業務”,窗口上會顯示當前顧客在隊伍中的位置以及他的前面還有多少位顧客,當排在當前顧客前面的顧客人數超過50人時提示前面已經有50個人,是否繼續等候。關于這個金卡通道嘛,現在流行各種會員啊VIP啦等等,這個金卡通道當然就是為銀行的VIP準備的。當單擊Button“金卡通道”時,將當前Waiter添加到顧客隊列的首位并在窗口上顯示無需等待~~。

代碼如下:

      封裝顧客類。

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;
    }
}

 

初始化顧客隊列(30個人)。

import java.util.LinkedList;
import java.util.List;
import java.util.Queue;

public class QueueServer {

    LinkedList<Waiter> waiterList = new LinkedList<Waiter>();
    public LinkedList<Waiter> init(){
        for(int i=1;i<=30;i++){
            Waiter w = new Waiter();
            w.setNum(i);
            w.setFrontNum(i-1);
            waiterList.offer(w);
        }
        return waiterList;
    }
}

 

顧客使用的客戶端:

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 Swtgoldcard {
        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);
            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請考慮是否繼續等待!\n"+"您現在排在"+waiter.getNum()+"位置上\n您前面有"+waiter.getFrontNum()+"個人\n請您耐心等候!");
                            }
                        }
            });
            button.setBounds(180, 530, 200, 75); // 設置按鈕位置
            button.setFont(new Font(display,"宋體",12,SWT.BOLD));
            button.setText("個人業務");// 設置按鈕上的文字

 


            //金卡通道
            final Text goldTxt = new Text(shell,SWT.MULTI);
            goldTxt.setBounds(900, 50, 500, 450);
            final Button goldButton = new Button(shell, SWT.Activate);
            goldButton.addSelectionListener(new SelectionAdapter() { // 加一個選擇監聽器
                        public void widgetSelected(SelectionEvent e) {
                            Waiter goldWaiter = new Waiter();
                            goldWaiter.setFlag(1);
                            waiterList.addFirst(goldWaiter);                       
                            goldTxt.setText("您是金卡用戶\n可以優先接受服務\n無需等待!\n"+"您現在排在"+goldWaiter.getNum()+"位置上,\n您前面有"+goldWaiter.getFrontNum()+"個人");
                        }
            });
            goldButton.setBounds(1060, 530, 200, 75); // 設置按鈕位置
            goldButton.setFont(new Font(display,"宋體",12,SWT.BOLD));
            goldButton.setText("金卡通道");// 設置按鈕上的文字

            // ------------------END---------------------------------------------
            shell.layout();
            shell.open();
            while (!shell.isDisposed()) {
                if (!display.readAndDispatch())
                    display.sleep();
            }
        }

        }

運行結果:

image

當等待隊列中人數超過50人時顯示結果:

image

 

銀行工作人員使用的客戶端:

import java.util.Queue;

import org.eclipse.jface.dialogs.MessageDialog;
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(352, 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, 220, 70);
        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(120, 141, 100, 25); // 設置按鈕位置
        button.setText("下一個");// 設置按鈕上的文字

        // ------------------END---------------------------------------------
        shell.layout();
        shell.open();
        while (!shell.isDisposed()) {
            if (!display.readAndDispatch())
                display.sleep();
        }
    }
}

運行結果:

image

這個程序還有缺陷,沒有用到數據庫,無法實現工作人員所用的客戶端與顧客所用的客戶端同步更新,請高手指點完善。