把困難踩在腳下

          迎難而上

           

          用GUI模擬銀行排隊系統

          要求:

          和實際情況相似,您到銀行辦理業務,到了銀行大廳首先是在電腦上刷卡(有的可能不用刷卡)取出一個紙條,上面有你的位置號還有你前面有多少人,在工作人員那里會有一個按鈕,點擊一下就會叫一個人到他那里辦理業務。這種情況是對于普通用戶來說的,有的銀行還有金卡用戶(就是人家存的錢多nb),他們很是霸道,無論前面排隊有多少人,他都會排到第一位。

          分析:1.排隊肯定是先進先出(First in First out),所以我們要想到用和Queue接口有關的類。

          2.金卡用戶霸道,要想到用LinkedList來實例化Queue,因為LinkedList有addFirst方法。

          3.在這里無法實現讀取用戶的信息,為了區分金卡用戶和普通用戶在電腦上設置兩個按鈕,一個相當于普通用戶刷看用的,一個相當于金卡用戶刷卡用的。

          程序代碼如下:

          //封裝等候者類

          package com.dr.bankQueueSystem;

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

          }

          //封裝工作人員類

          package com.dr.bankQueueSystem;

          public class Counter {
              private int num;
              private String counterName;
              private Waiter w;
              public Counter(Waiter w)
              {
                  this.w=w;
              }
              public String getCounterName() {
                  return counterName;
              }

              public void setCounterName(String counterName) {
                  this.counterName = counterName;
              }

              public Waiter getW() {
                  return w;
              }

              public void setW(Waiter w) {
                  this.w = w;
              }

              public int getNum() {
                  return num;
              }

              public void setNum(int num) {
                  this.num = num;
              }
              public Counter(int num)
              {
                  this.num=num;
              }
              public void handleBusiness()
              {
                  System.out.println("I am handling the"+this.w.getNum()+"waiter!");
                  try{
                      Thread.sleep(100);
                  }
                  catch(InterruptedException e)
                  {
                      e.printStackTrace();
                  }
                  System.out.println("I have handled the"+this.w.getNum()+",next waiter!");
              }

          }

          //封裝服務器類

          package com.dr.bankQueueSystem;

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

          public class BankServer {
              private LinkedList<Waiter> waiterList=new LinkedList<Waiter>();//新建等候者隊列
              public LinkedList<Waiter> Init()//初始化20個等候者
              {
                  for(int i=0;i<20;i++)
                  {
                      Waiter w=new Waiter();
                      w.setNum(i+1);
                      w.setFrontnum(i);
                      waiterList.offer(w);
                  }
                  return waiterList;
              }

          }

          //用戶使用系統客戶端

          package com.dr.bankQueueSystem;

          import java.util.LinkedList;
          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 WaiterQueueUI {
              public static void main(String args[])
              {
                  Display display=new Display();
                  Shell shell=new Shell(display);
                  shell.setMaximized(true);
                  //初始化界面
                  shell.setText("銀行排隊用戶使用系統");
                  //服務器初始化
                  BankServer bs=new BankServer();
                  final LinkedList<Waiter> waiterList=bs.Init();
                  //添加普通用戶文本框控件
                  final Text text=new Text(shell,SWT.MULTI);
                  text.setBounds(40,50,400,500);
                  //添加普通用戶按鈕控件
                  Button button=new Button(shell,SWT.Activate);
                  button.setBounds(120,600,120,60);
                  button.setText("普通用戶");
                  //為普通用戶按鈕添加事件處理
                  button.addSelectionListener(new SelectionAdapter(){
                      public void widgetSelected(SelectionEvent e)
                      {
                          Waiter w=new Waiter();
                          w.setNum(waiterList.size()+1);
                          w.setFrontnum(waiterList.size());
                          waiterList.offer(w);
                          if(waiterList.size()<=50)
                          {
                              text.setText("您現在排在"+w.getNum()+"號位置上\n"+"您前面有"+w.getFrontnum()+"人\n"+"請耐心等待");
                          }
                          else
                          {
                              text.setText("您前面已有50人,請考慮\n您排在"+w.getNum()+"號位置上");
                          }
                      }
                  });
                  //添加金卡用戶文本框控件
                  final Text goldText=new Text(shell,SWT.MULTI);
                  goldText.setBounds(700,50,400,500);
                  //添加金卡用戶按鈕控件
                  Button goldButton=new Button(shell,SWT.Activate);
                  goldButton.setBounds(800,600,120,60);
                  goldButton.setText("金卡用戶");
                  //為金卡用戶按鈕控件添加事件處理
                  goldButton.addSelectionListener(new SelectionAdapter(){
                      public void widgetSelected(SelectionEvent e)
                      {
                          Waiter w=new Waiter();
                          w.setFlag(1);
                          waiterList.addFirst(w);
                          goldText.setText("尊敬金卡用戶,歡迎您的到來");
                      }
                  });
                  shell.layout();
                  shell.open();
                  while(!shell.isDisposed())
                  {
                      if(!display.readAndDispatch()){
                          display.sleep();
                      }
                  }
              }

          }

          **********************************************************************************

          用戶界面如下:

          未命名

          //銀行工作人員使用系統客戶端

          package com.dr.bankQueueSystem;

          import java.util.LinkedList;
          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.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 CounterQueueUI {
              public static void main(String args[])
              {
                  Display display=new Display();
                  Shell shell=new Shell(display);
                  shell.setMaximized(true);
                  //初始化界面
                  shell.setText("銀行排隊工作人員使用系統");
                  //服務器初始化
                  BankServer bs=new BankServer();
                  final LinkedList<Waiter> waiterList=bs.Init();
                  //添加文本框控件
                  final Text text=new Text(shell,SWT.MULTI);
                  text.setBounds(400,50,400,500);
                  text.setFont(new Font(display,"宋體",15,SWT.BOLD));
                  //添加按鈕控件
                  Button button=new Button(shell,SWT.Activate);
                  button.setBounds(550,600,120,60);
                  button.setText("下一個");
                  //為按鈕控件添加事件處理
                  button.addSelectionListener(new SelectionAdapter(){
                      public void widgetSelected(SelectionEvent e)
                      {
                          Waiter w=waiterList.poll();
                          if( w!=null)
                          {
                              text.setText(w.getNum()+"號顧客請到1號窗口辦理業務!");
                          }
                          else
                          {
                              text.setText("現在沒有人辦理業務,你可以休息了");
                          }
                      }
                  });
                  shell.layout();
                  shell.open();
                  while(!shell.isDisposed())
                  {
                      if(!display.readAndDispatch()){
                          display.sleep();
                      }
                  }
              }

          }

          *************************************************************************

          程序運行結果如下

          未命名

          此程序沒有用到多線程,無法實現客戶與工作人員的連接,所以在服務器初始化時新建了20個用戶。這也是此程序的缺點。

          posted on 2010-10-31 18:10 馮魁 閱讀(438) 評論(0)  編輯  收藏


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


          網站導航:
          博客園   IT新聞   Chat2DB   C++博客   博問  
           

          導航

          統計

          公告

          快樂每一天!

          Everything is an object!

          常用鏈接

          留言簿(2)

          隨筆檔案

          學習網站

          搜索

          最新評論

          閱讀排行榜

          評論排行榜

          主站蜘蛛池模板: 始兴县| 绩溪县| 云霄县| 龙山县| 鲁甸县| 米脂县| 黄石市| 垫江县| 岳池县| 古丈县| 瑞安市| 鞍山市| 石泉县| 乌苏市| 潮安县| 印江| 吴堡县| 年辖:市辖区| 盐津县| 盐山县| 江油市| 普兰店市| 壤塘县| 商都县| 镇平县| 城口县| 天津市| 资溪县| 新建县| 日土县| 盐津县| 临沧市| 武功县| 犍为县| 汉阴县| 达尔| 马山县| 金寨县| 巴里| 探索| 尼玛县|