把困难踩在脚下

迎难而上

 

用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 冯魁 阅读(430) 评论(0)  编辑  收藏


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


网站导航:
 

导航

统计

公告

快乐每一天!

Everything is an object!

常用链接

留言簿(2)

随笔档案

学习网站

搜索

最新评论

阅读排行榜

评论排行榜