把困難踩在腳下

          迎難而上

           

          用GUI模擬銀行排隊(duì)系統(tǒng)

          要求:

          和實(shí)際情況相似,您到銀行辦理業(yè)務(wù),到了銀行大廳首先是在電腦上刷卡(有的可能不用刷卡)取出一個(gè)紙條,上面有你的位置號(hào)還有你前面有多少人,在工作人員那里會(huì)有一個(gè)按鈕,點(diǎn)擊一下就會(huì)叫一個(gè)人到他那里辦理業(yè)務(wù)。這種情況是對(duì)于普通用戶來(lái)說(shuō)的,有的銀行還有金卡用戶(就是人家存的錢(qián)多nb),他們很是霸道,無(wú)論前面排隊(duì)有多少人,他都會(huì)排到第一位。

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

          2.金卡用戶霸道,要想到用LinkedList來(lái)實(shí)例化Queue,因?yàn)長(zhǎng)inkedList有addFirst方法。

          3.在這里無(wú)法實(shí)現(xiàn)讀取用戶的信息,為了區(qū)分金卡用戶和普通用戶在電腦上設(shè)置兩個(gè)按鈕,一個(gè)相當(dāng)于普通用戶刷看用的,一個(gè)相當(dāng)于金卡用戶刷卡用的。

          程序代碼如下:

          //封裝等候者類

          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!");
              }

          }

          //封裝服務(wù)器類

          package com.dr.bankQueueSystem;

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

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

          }

          //用戶使用系統(tǒng)客戶端

          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("銀行排隊(duì)用戶使用系統(tǒng)");
                  //服務(wù)器初始化
                  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("您現(xiàn)在排在"+w.getNum()+"號(hào)位置上\n"+"您前面有"+w.getFrontnum()+"人\n"+"請(qǐng)耐心等待");
                          }
                          else
                          {
                              text.setText("您前面已有50人,請(qǐng)考慮\n您排在"+w.getNum()+"號(hào)位置上");
                          }
                      }
                  });
                  //添加金卡用戶文本框控件
                  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("尊敬金卡用戶,歡迎您的到來(lái)");
                      }
                  });
                  shell.layout();
                  shell.open();
                  while(!shell.isDisposed())
                  {
                      if(!display.readAndDispatch()){
                          display.sleep();
                      }
                  }
              }

          }

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

          用戶界面如下:

          未命名

          //銀行工作人員使用系統(tǒng)客戶端

          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("銀行排隊(duì)工作人員使用系統(tǒng)");
                  //服務(wù)器初始化
                  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("下一個(gè)");
                  //為按鈕控件添加事件處理
                  button.addSelectionListener(new SelectionAdapter(){
                      public void widgetSelected(SelectionEvent e)
                      {
                          Waiter w=waiterList.poll();
                          if( w!=null)
                          {
                              text.setText(w.getNum()+"號(hào)顧客請(qǐng)到1號(hào)窗口辦理業(yè)務(wù)!");
                          }
                          else
                          {
                              text.setText("現(xiàn)在沒(méi)有人辦理業(yè)務(wù),你可以休息了");
                          }
                      }
                  });
                  shell.layout();
                  shell.open();
                  while(!shell.isDisposed())
                  {
                      if(!display.readAndDispatch()){
                          display.sleep();
                      }
                  }
              }

          }

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

          程序運(yùn)行結(jié)果如下

          未命名

          此程序沒(méi)有用到多線程,無(wú)法實(shí)現(xiàn)客戶與工作人員的連接,所以在服務(wù)器初始化時(shí)新建了20個(gè)用戶。這也是此程序的缺點(diǎn)。

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


          只有注冊(cè)用戶登錄后才能發(fā)表評(píng)論。


          網(wǎng)站導(dǎo)航:
           

          導(dǎo)航

          統(tǒng)計(jì)

          公告

          快樂(lè)每一天!

          Everything is an object!

          常用鏈接

          留言簿(2)

          隨筆檔案

          學(xué)習(xí)網(wǎng)站

          搜索

          最新評(píng)論

          閱讀排行榜

          評(píng)論排行榜

          主站蜘蛛池模板: 枣阳市| 政和县| 闸北区| 平和县| 青浦区| 麟游县| 阿图什市| 宜黄县| 无为县| 长垣县| 巴中市| 林西县| 康保县| 墨脱县| 镇原县| 杭锦后旗| 资中县| 庆云县| 大宁县| 涿鹿县| 梧州市| 高邑县| 华阴市| 虞城县| 丘北县| 沁阳市| 海淀区| 安乡县| 靖边县| 肇源县| 望谟县| 紫阳县| 安平县| 福州市| 无棣县| 电白县| 胶州市| 龙岩市| 新巴尔虎左旗| 井研县| 高要市|