用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) 編輯 收藏