洛神赋

子虚乌有

  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 洛神赋 阅读(2766) 评论(0)  编辑  收藏

只有注册用户登录后才能发表评论。


网站导航: