先說(shuō)一下在醫(yī)院掛號(hào)的情況:患者到醫(yī)院后要先交錢(qián)掛號(hào),然后在等候大廳等待叫號(hào),叫到你,你才能去看病。怎么掛號(hào)呢?醫(yī)院有好多坐診的醫(yī)生或者專家,掛號(hào)的時(shí)候患者可以選擇讓哪個(gè)醫(yī)生或者專家為自己看病,選好以后,等著你選的醫(yī)生或者專家叫你就好了。這個(gè)掛號(hào)系統(tǒng)怎么做的呢,我們就寫(xiě)一個(gè)JAVA程序模擬一下。
首先,這個(gè)系統(tǒng)會(huì)有患者類Patient,醫(yī)生類Doctor,還有服務(wù)器類Server,當(dāng)然還有用戶界面UI。
Patient
病人類,要有名字、號(hào)碼,還要有掛號(hào)的醫(yī)生的標(biāo)記號(hào),這些都要作為病人的屬性,然后實(shí)現(xiàn)set、get方法。

Patient
package hospital;
public class Patient {
private String name;
private int flag;
private int num;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getFlag() {
return flag;
}
public void setFlag(int flag) {
this.flag = flag;
}
public void setNum(int num) {
this.num = num;
}
public int getNum() {
return num;
}
}
Doctor
醫(yī)生類,要有姓名和編號(hào),編號(hào)用來(lái)供給病人來(lái)掛自己的號(hào),姓名就不用再說(shuō)了。然后給這些屬性實(shí)現(xiàn)set、get方法。

Doctor
package hospital;
public class Doctor {
private int id;
private String name;
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;
}
}
QueueServer
掛號(hào)排隊(duì)系統(tǒng)的服務(wù)器,由這個(gè)服務(wù)器來(lái)實(shí)現(xiàn)對(duì)病人、醫(yī)生的關(guān)聯(lián),實(shí)現(xiàn)病人掛號(hào)和醫(yī)生叫號(hào)的功能。
具體方法為:為每個(gè)醫(yī)生創(chuàng)建一個(gè)患者隊(duì)列,裝載對(duì)應(yīng)的掛號(hào)患者。這些隊(duì)列l(wèi)ist,要先進(jìn)先出即firstin,firstout,所以要用Queue。然后把這些隊(duì)列初始化,由于是模擬的程序,所以初始化時(shí)先分別加入幾個(gè)病人。

QueueServer
package hospital;
import java.util.LinkedList;
import java.util.Queue;
public class QueueServer {
Queue<Patient> patientList1 = new LinkedList<Patient>();
Queue<Patient> patientList2 = new LinkedList<Patient>();
Queue<Patient> patientList3 = new LinkedList<Patient>();
public Queue<Patient> init1(){
for(int i=1;i<=10;i++){
Patient p = new Patient();
p.setNum(i);
patientList1.offer(p);
}
return patientList1;
}
public Queue<Patient> init2(){
for(int i=1;i<=15;i++){
Patient p = new Patient();
p.setNum(i);
patientList2.offer(p);
}
return patientList2;
}
public Queue<Patient> init3(){
for(int i=1;i<=20;i++){
Patient p = new Patient();
p.setNum(i);
patientList3.offer(p);
}
return patientList3;
}
}
PatientUI
這是病人掛號(hào)系統(tǒng)的病人客戶端。要有一個(gè)Text,幾個(gè)Button(對(duì)應(yīng)相應(yīng)的醫(yī)生),當(dāng)然要有一個(gè)容器裝載這些東西。
當(dāng)患者點(diǎn)擊醫(yī)生按鈕掛號(hào)后,患者會(huì)加入到醫(yī)生對(duì)應(yīng)的患者隊(duì)列,Text內(nèi)會(huì)顯示所選擇的醫(yī)生或者專家、自己的號(hào)碼和所排在位置(如果前面排隊(duì)的人太多還會(huì)有小小的溫馨提示呵)。

PatientUI
package 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.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 PatientUI {
public static void main(String[] args){
final Display display = Display.getDefault();
final Shell shell = new Shell();
shell.setBounds(100, 100, 620, 450);
// shell.setMaximized(true);
shell.setText("醫(yī)院專家掛號(hào)系統(tǒng)");
// 界面核心代碼
QueueServer qs1 = new QueueServer();
final Queue<Patient> patientList1 = qs1.init1();
final Text txt = new Text(shell,SWT.MULTI);
txt.setFont(new Font(display,"宋體",20,SWT.BOLD));
txt.setBounds(100,50,400,200);
// 事件代碼里要訪問(wèn)button,所以要添加final
final Button button = new Button(shell,SWT.Activate);
button.addSelectionListener(new SelectionAdapter(){
public void widgetSelected(SelectionEvent e){
Patient patient = new Patient();
patient.setNum(patientList1.size()+1);
patientList1.offer(patient);
if(patientList1.size()<=20){
txt.setText("\n您選擇了 張醫(yī)生\n\n您現(xiàn)在排在"+patient.getNum()+"號(hào)位置上");
}else{
txt.setText("\n您選擇了 張醫(yī)生\n\n您現(xiàn)在排在"+patient.getNum()+"號(hào)位置上\n\n前面已經(jīng)排20多人,請(qǐng)考慮!");
}
}
});
button.setBounds(50, 300, 150, 55); // 設(shè)置按鈕位置
button.setFont(new Font(display,"宋體",12,SWT.BOLD));
button.setText("專家 張醫(yī)生");// 設(shè)置按鈕上的文字
// -----------------2號(hào)專家||||--------------------------------------------
QueueServer qs2 = new QueueServer();
final Queue<Patient> patientList2 = qs2.init2();
final Button button2 = new Button(shell,SWT.Activate);
button2.addSelectionListener(new SelectionAdapter(){
public void widgetSelected(SelectionEvent e){
Patient patient = new Patient();
patient.setNum(patientList2.size()+1);
patientList2.offer(patient);
if(patientList2.size()<=20){
txt.setText("\n您選擇了 王醫(yī)生\n\n您現(xiàn)在排在"+patient.getNum()+"號(hào)位置上");
}else{
txt.setText("\n您選擇了 王醫(yī)生\n\n您現(xiàn)在排在"+patient.getNum()+"號(hào)位置上\n\n前面已經(jīng)排20多人,請(qǐng)考慮!");
}
}
});
button2.setBounds(225, 300, 150, 55); // 設(shè)置按鈕位置
button2.setFont(new Font(display,"宋體",12,SWT.BOLD));
button2.setText("專家 王醫(yī)生");// 設(shè)置按鈕上的文字
// --------------------3號(hào)專家||||------------------------------------
QueueServer qs3 = new QueueServer();
final Queue<Patient> patientList3 = qs3.init3();
final Button button3 = new Button(shell,SWT.Activate);
button3.addSelectionListener(new SelectionAdapter(){
public void widgetSelected(SelectionEvent e){
Patient patient = new Patient();
patient.setNum(patientList3.size()+1);
patientList3.offer(patient);
if(patientList3.size()<=20){
txt.setText("\n您選擇了 李醫(yī)生\n您現(xiàn)在排在"+patient.getNum()+"號(hào)位置上");
}else{
txt.setText("\n您選擇了 李醫(yī)生\n\n您現(xiàn)在排在"+patient.getNum()+"號(hào)位置上\n\n前面已經(jīng)排20多人,請(qǐng)考慮!");
}
}
});
button3.setBounds(400, 300, 150, 55); // 設(shè)置按鈕位置
button3.setFont(new Font(display,"宋體",12,SWT.BOLD));
button3.setText("專家 李醫(yī)生");// 設(shè)置按鈕上的文字
// -----------------------END---------------------------------------
shell.layout();
shell.open();
while (!shell.isDisposed()) {
if (!display.readAndDispatch())
display.sleep();
}
}
}
DoctorUI
這是醫(yī)生的客戶端,同樣要有一個(gè)容器裝載一個(gè)Text和一個(gè)Button。點(diǎn)擊Button(下一位..),就會(huì)在他的病人隊(duì)列里取出排在最前面的那個(gè)患者,在Text內(nèi)顯示這位前來(lái)就診的患者的信息(如果所有病人都看完了,就會(huì)顯示沒(méi)有病人了)。
(這只是一個(gè)醫(yī)生的客戶端,其他醫(yī)生的客戶端的編寫(xiě)方法與之相同,這里就不一一寫(xiě)出來(lái)了..)

DoctorUI
package 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.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 DoctorUI {
public static void main(String[] args) {
// TODO Auto-generated method stub
final Display display = Display.getDefault();
final Shell shell = new Shell();
shell.setBounds(200, 100, 420, 350);
shell.setText("醫(yī)院專家掛號(hào)系統(tǒng)--張醫(yī)生客戶端");
// 界面核心代碼
QueueServer qs1 = new QueueServer();
final Queue<Patient> patientListz = qs1.init1();
final Text txt = new Text(shell,SWT.MULTI);
txt.setFont(new Font(display,"微軟雅黑",13,SWT.BOLD));
txt.setBounds(50,50,300,100);
// 事件代碼里要訪問(wèn)button,所以要添加final
final Button button = new Button(shell,SWT.Activate);
button.addSelectionListener(new SelectionAdapter(){
public void widgetSelected(SelectionEvent e){
Patient p = patientListz.poll();
if(p!=null){
txt.setText("\n\t\t第 "+p.getNum()+" 號(hào)病人" +
"\n\t 請(qǐng)到張醫(yī)生醫(yī)務(wù)室就醫(yī)");
}
else{
txt.setText("\n\t現(xiàn)在沒(méi)有病人看病了");
}
}
});
button.setBounds(100, 200, 200, 75); // 設(shè)置按鈕位置
button.setFont(new Font(display,"微軟雅黑",14,SWT.BOLD));
button.setText("下一位..");// 設(shè)置按鈕上的文字
// ---------------------END----------------------------
shell.layout();
shell.open();
while (!shell.isDisposed()) {
if (!display.readAndDispatch())
display.sleep();
}
}
}
PatientUI
病人客戶端的運(yùn)行效果:
DoctorUI
醫(yī)生客戶端的運(yùn)行效果:

posted on 2010-11-01 16:33
Mineralwasser 閱讀(1499)
評(píng)論(3) 編輯 收藏