我們今天來(lái)做一個(gè)醫(yī)院掛號(hào)排隊(duì)系統(tǒng):分為病人,醫(yī)生,服務(wù)器三個(gè)類。
病人:我只關(guān)心我掛哪個(gè)專家的號(hào),我排在掛這個(gè)專家的隊(duì)列里的位置和前面的人數(shù)。
醫(yī)生:我有我的屬性(id,name,需要看病的病人),而且我有一個(gè)處理病情的方法;我只關(guān)心掛我的號(hào)的人有多少,每次我只需要去從隊(duì)列里取出病人就可以了,這就夠了。
服務(wù)器:服務(wù)器需要設(shè)置一個(gè)Map(鍵值對(duì)應(yīng)關(guān)系),將每一個(gè)醫(yī)生對(duì)應(yīng)的id和他的病人隊(duì)列一一對(duì)應(yīng)起來(lái),需要初始化一些病人存儲(chǔ)在每個(gè)醫(yī)生的病人隊(duì)列里。
再說(shuō)UI:
病人客戶端UI:
在點(diǎn)擊事件監(jiān)聽器里:我需要知道排在我前面的人數(shù)有多少,我的位置是多少,需要將服務(wù)器的隊(duì)列取過(guò)來(lái)處理。
醫(yī)生客戶端UI:
再點(diǎn)擊事件監(jiān)聽器里:我只需要一個(gè)一個(gè)的叫下一位病人的名字或者號(hào)碼就可以了。

下面附代碼:
病人:
package com.dr.hospital;

public class Weaker {

    
private int number;
    
private int frontnumber;
    
private String name;
    
public int getNumber() {
        
return number;
    }

    
public void setNumber(int number) {
        
this.number = number;
    }

    
public int getFrontnumber() {
        
return frontnumber;
    }

    
public void setFrontnumber(int frontnumber) {
        
this.frontnumber = frontnumber;
    }

    
public String getName() {
        
return name;
    }

    
public void setName(String name) {
        
this.name = name;
    }

}


醫(yī)生:
package com.dr.hospital;

public class Doctor {

    
private int id;
    
private String name;
    
private Weaker weaker;
    
    
public Doctor(Weaker weaker){
        
this.setWeaker(weaker);
    }

    
public int getId() {
        
return id;
    }

    
public void setId(int id) {
        
this.id = id;
    }

    
public String getName() {
        
return name;
    }

    
public void setName(String name) {
        
this.name = name;
    }

    
public Weaker getWeaker() {
        
return weaker;
    }

    
public void setWeaker(Weaker weaker) {
        
this.weaker = weaker;
    }

    
    
public void handlDisease(){
        System.out.println(
"我正在治療第"+this.weaker.getNumber()+"號(hào)病人的病情");
        
try{
            Thread.sleep(
1000);
        }
catch(InterruptedException e){
            e.printStackTrace();
        }

        System.out.println(
"我已經(jīng)處理完第"+this.weaker.getNumber()+"號(hào)病人的病例");
        System.out.println(
"請(qǐng)下一位病人到第"+(this.id+1)+"號(hào)醫(yī)務(wù)室治療病情");
        
try{
            Thread.sleep(
1000);
        }
catch(InterruptedException e){
            e.printStackTrace();
        }

    }

}


服務(wù)器:
package com.dr.hospital;

import java.util.HashMap;
import java.util.LinkedList;
import java.util.Map;
import java.util.Queue;

public class Server {
    
public Map<Integer,Queue<Weaker>> doctorlist = new HashMap<Integer,Queue<Weaker>>();
    
public Queue<Weaker> doctor1weakerlist = new LinkedList<Weaker>();
    
public Queue<Weaker> doctor2weakerlist = new LinkedList<Weaker>();
    
public Queue<Weaker> doctor3weakerlist = new LinkedList<Weaker>();
    
    
public Queue<Weaker> init(Integer iter){
        Weaker w
= null;
        
if(iter==1){
            
for(int i=1;i<30;i++){
                w 
= new Weaker();
                w.setNumber(i);
                w.setFrontnumber(i
-1);
                doctor1weakerlist.offer(w);
                doctorlist.put(iter, doctor1weakerlist);
            }

            
return doctor1weakerlist;
        }

        
else if(iter==2){
            
for(int i=1;i<20;i++){
                w 
= new Weaker();
                w.setNumber(i);
                w.setFrontnumber(i
-1);
                doctor2weakerlist.offer(w);
                doctorlist.put(iter, doctor2weakerlist);
            }

            
return doctor2weakerlist;
        }

        
else{
            
for(int i=1;i<10;i++){
                w 
= new Weaker();
                w.setNumber(i);
                w.setFrontnumber(i
-1);
                doctor3weakerlist.offer(w);
                doctorlist.put(iter, doctor3weakerlist);
            }

            
return doctor3weakerlist;
        }

    }

}


病人客戶端UI:
package com.dr.hospital;

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 WeakerQueueUI {

    
public static void main(String[] args){
        Display display 
= Display.getDefault();
        
        
final Shell shell = new Shell();
        shell.setMaximized(
true);
        shell.setText(
"醫(yī)院排隊(duì)之病人客戶端");
        
        
final Text text = new Text(shell,SWT.MULTI);
        text.setBounds(
500100300300);
        
        Server server 
= new Server();
        
final Queue<Weaker> zhangweakerlist = server.init(1);
        
final Queue<Weaker> liweakerlist = server.init(2);
        
final Queue<Weaker> zhaoweakerlist = server.init(3);
        
        Button button1 
= new Button(shell,SWT.Activate); 
        button1.setBounds(
25053020075);
        button1.setText(
"張醫(yī)生");
        button1.addSelectionListener(
new SelectionAdapter(){
            
public void widgetSelected(SelectionEvent e){
                Weaker w 
= new Weaker();
                w.setNumber(zhangweakerlist.size()
+1);
                w.setFrontnumber(zhangweakerlist.size());
                zhangweakerlist.offer(w);
                
if(zhangweakerlist.size()<=50){
                    text.setText(
"您現(xiàn)在排在"+w.getNumber()+"位置上,\n您前面有"+w.getFrontnumber()+"個(gè)人\n請(qǐng)您耐心等候吧!哈哈!");
                }

                
else{
                    text.setText(
"您前面已經(jīng)排50個(gè)人,請(qǐng)考慮!\n"+"您現(xiàn)在排在"+w.getNumber()+"位置上,\n您前面有"+w.getFrontnumber()+"個(gè)人\n請(qǐng)您耐心等候吧!哈哈");
                }

                
            }

        }
);
        Button button2 
= new Button(shell,SWT.Activate); 
        button2.setBounds(
55053020075);
        button2.setText(
"李醫(yī)生");
        button2.addSelectionListener(
new SelectionAdapter(){
            
public void widgetSelected(SelectionEvent e){
                Weaker gw 
= new Weaker();
                gw.setNumber(liweakerlist.size()
+1);
                gw.setFrontnumber(liweakerlist.size());
                liweakerlist.offer(gw);
                
if(liweakerlist.size()<=50){
                    text.setText(
"您現(xiàn)在排在"+gw.getNumber()+"位置上,\n您前面有"+gw.getFrontnumber()+"個(gè)人\n請(qǐng)您耐心等候吧!哈哈!");
                }

                
else{
                    text.setText(
"您前面已經(jīng)排超過(guò)50人了,請(qǐng)考慮!\n"+"您現(xiàn)在排在"+gw.getNumber()+"位置上,\n您前面有"+gw.getFrontnumber()+"個(gè)人\n請(qǐng)您耐心等候吧!哈哈");
                }

                
            }

        }
);
        Button button3 
= new Button(shell,SWT.Activate); 
        button3.setBounds(
85053020075);
        button3.setText(
"趙醫(yī)生");
        button3.addSelectionListener(
new SelectionAdapter(){
            
public void widgetSelected(SelectionEvent e){
                Weaker w 
= new Weaker();
                w.setNumber(zhaoweakerlist.size()
+1);
                w.setFrontnumber(zhaoweakerlist.size());
                zhaoweakerlist.offer(w);
                
if(zhaoweakerlist.size()<=50){
                    text.setText(
"您現(xiàn)在排在"+w.getNumber()+"位置上,\n您前面有"+w.getFrontnumber()+"個(gè)人\n請(qǐng)您耐心等候吧!哈哈!");
                }

                
else{
                    text.setText(
"您前面已經(jīng)排50個(gè)人,請(qǐng)考慮!\n"+"您現(xiàn)在排在"+w.getNumber()+"位置上,\n您前面有"+w.getFrontnumber()+"個(gè)人\n請(qǐng)您耐心等候吧!哈哈");
                }

                
            }

        }
);
        shell.layout();
        shell.open();
        
while(!shell.isDisposed()){
            
if(!display.readAndDispatch()){
                display.sleep();
            }

        }

        
    }

    
}



醫(yī)生客戶端UI:
package com.dr.hospital;

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 DoctorUI {

    
public static void main(String[] args) {

        Display display 
= Display.getDefault();
        
final Shell shell = new Shell();
        shell.setMaximized(
true);
        shell.setText(
"張醫(yī)生客戶端");
        
        
final Text text = new Text(shell,SWT.MULTI);
        text.setBounds(
500100300300);
        
        
final Button button = new Button(shell,SWT.Activate);
        button.setBounds(
55053020075);
        button.setText(
"下一個(gè)病人");
        
        Server server 
= new Server();
        
final Queue<Weaker> zhangwaiterlist = server.init(1);
        
final Queue<Weaker> liwaiterlist = server.init(2);
        
final Queue<Weaker> zhaowaiterlist = server.init(3);
        button.addSelectionListener(
new SelectionAdapter(){
            
public void widgetSelected(SelectionEvent e){
                Weaker w 
= zhangwaiterlist.poll();
                
if(w!=null){
                    text.setText(
"請(qǐng)"+w.getNumber()+"號(hào)病人到張醫(yī)生醫(yī)務(wù)室就醫(yī)");
                }

                
else{
                    text.setText(
"現(xiàn)在沒(méi)有病人看病了,您可以休息會(huì)了\n 喝杯咖啡吧,哈哈!");
                }

                
                
            }

        }
);
        shell.layout();
        shell.open();
        
while(!shell.isDisposed()){
            
if(!display.readAndDispatch()){
                display.sleep();
            }

        }

    }


}



最后看看運(yùn)行結(jié)果:

病人客戶端:


醫(yī)生客戶端: