我們做一個銀行排隊金卡卡塞小系統,并用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();
  }
 }
}



用戶客戶端運行結果:

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