洛神賦

          子虛烏有

            BlogJava :: 首頁 :: 聯系 :: 聚合  :: 管理
            7 Posts :: 10 Stories :: 0 Comments :: 0 Trackbacks

          要求:

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



          運行結果:
          排隊端:

          金卡來了

          工作人員端:

          謝謝閱讀!歡迎您提供寶貴意見!!
          posted on 2010-10-31 19:37 洛神賦 閱讀(2794) 評論(0)  編輯  收藏

          只有注冊用戶登錄后才能發表評論。


          網站導航:
           
          主站蜘蛛池模板: 手游| 金溪县| 栾城县| 北票市| 绵阳市| 阿鲁科尔沁旗| 绿春县| 邵武市| 常宁市| 柘荣县| 新丰县| 盖州市| 汶上县| 靖宇县| 营山县| 桃江县| 中江县| 九江县| 岢岚县| 洛扎县| 武义县| 孟村| 竹溪县| 海林市| 砚山县| 厦门市| 迁西县| 兴山县| 平陆县| 璧山县| 辽宁省| 延川县| 通榆县| 青海省| 阳春市| 安康市| 甘泉县| 静宁县| 科尔| 高阳县| 哈巴河县|