package com.dr.patient;
public class Patient {
private int num;
private int frontNum;
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;
}
}
2)、然后建立一個病人服務的類(PatientServer),構建一個病人等待排隊數字的循環邏輯;
package com.dr.patient;
import java.util.LinkedList;
import java.util.Queue;
public class PatientServer {
Queue<Patient> patientList = new LinkedList<Patient>(); //新建一個容器,病人的隊列
public Queue<Patient> init(){ //構建一個方法,把掛號的病人加入
for(int i=1;i<=24;i++){ //設定隊列中已有24個人,掛號加入的從第25個開始
Patient pat = new Patient();
pat.setNum(i);
pat.setFrontNum(i-1);
patientList.offer(pat); //將指定的病人元素插入此隊列
}
return patientList;
}
}
3)、病人掛號點擊頁面,主要用Display、Shell方法新建窗口!
final Shell shell = new Shell();
shell.setBounds(300, 100, 800, 700);
shell.setText("病人掛號排隊端");

// ------------------新插入的界面核心代碼------------------------
PatientServer qs = new PatientServer();//實例化類
final Queue<Patient> patientList = qs.init();//初始化隊列服務器
final Text txt = new Text(shell,SWT.MULTI); //建立窗口里文本的的大小
txt.setBounds(150, 50, 500, 450);
final Button button = new Button(shell, SWT.Activate); //設置一個button按鈕

button.addSelectionListener(new SelectionAdapter() { //鼠標單擊按鈕事件
public void widgetSelected(SelectionEvent e) {
Patient p = new Patient();
p.setNum(patientList.size()+1);
p.setFrontNum(patientList.size());
patientList.offer(p);
if(patientList.size() <= 48){
txt.setText( "您好!您現在排在"+p.getNum()+"位置上,\n\n您前面有"+p.getFrontNum()+"個病人需要看病\n\n請您耐心等候吧!\n\n\n\n若您為急診,則直接去急診室看病就可以了!");
}else{
txt.setText("您現在排在"+p.getNum()+"位置上,\n\n\n您前面已經超過36個病人等待了,請您盡快選擇換地吧!給你帶來的不便,望您見諒!\n");
}
}
});
button.setBounds(300, 530, 200, 75); / 設置按鈕位置
button.setFont(new Font(display,"華文楷體",12,SWT.BOLD));
button.setText("生病掛號"); // 設置按鈕上的文字
shell.layout();
shell.open(); //打開窗口
while (!shell.isDisposed()) { //支撐窗口在不點擊任何按鈕時一直保留在桌面上
if (!display.readAndDispatch())
display.sleep();
}
}
}

4)、再封裝一個急救病人的類(PatientHuarry)!方法和封裝病人的類基本一樣。
package com.dr.patient;
public class PatientHuarry {
private int num; //兩個急求病人的屬性
private int frontNum;
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;
}
}
5)、再從新構建一個新的隊列(patienthuarryList),讓其承載急救病人,而進入隊列的方法思維也是和Patient的類一樣
public class PatientServerH {
Queue<PatientHuarry> patienthuarryList = new LinkedList<PatientHuarry>();
public Queue<PatientHuarry> init(){
for(int i=1;i<=16;i++){ //這對列能放的人數
PatientHuarry ph = new PatientHuarry();
ph.setNum(i);
ph.setFrontNum(i-1);
patienthuarryList.offer(ph);
}
return patienthuarryList;
}
}
6)、最后構建醫生專家按病人掛號排序就診的頁面!而為急診的病人,則不需掛號,直接去急診室就診。
醫生專家的UI界面:

public class DoctorUI {
public static void main(String[] args) {
final Display display = Display.getDefault();
final Shell shell = new Shell();
shell.setBounds(200, 150, 1000, 600);
shell.setText("醫生專家服務端");
// ------------------新插入的界面核心代碼------------------------
PatientServer qs = new PatientServer(); //實例化類
final Queue<Patient> patientList = qs.init(); //初始化隊列服務器
PatientServerH qsh = new PatientServerH();
final Queue<PatientHuarry> patienthuarryList = qsh.init();
final Text txt1 = new Text(shell,SWT.MULTI); //創建四個文本窗口
txt1.setBounds(80, 50, 170, 300);
final Text txt2 = new Text(shell,SWT.MULTI);
txt2.setBounds(300, 50, 170, 300);
final Text txt3 = new Text(shell,SWT.MULTI);
txt3.setBounds(520, 50, 170, 300);
final Text txt4 = new Text(shell,SWT.MULTI);
txt4.setBounds(740, 50, 170, 300);
// 事件代碼里要訪問button
final Button button1 = new Button(shell, SWT.Activate); // button1的事件方法
button1.addSelectionListener(new SelectionAdapter() { // 加一個選擇監聽器
public void widgetSelected(SelectionEvent e) {
Patient p= patientList.poll(); //彈出一個隊列中的病人
if(p!=null){
txt1.setText(p.getNum()+"號病人請到內科專家處看病\n\n我們部門在一層左拐第一間,\n很樂意為您看病!!\n\n\n\n\n\n\n\n您好!請按時吃藥!");
}
else{
txt1.setText("現在沒有等候的病人了,\n可以喝杯水了哈");
}
}
});
button1.setBounds(120, 400, 90, 40); // 設置按鈕位置
button1.setText("內科專家"); // 設置按鈕上的文字
final Button button2 = new Button(shell, SWT.Activate); // button2的事件方法
button2.addSelectionListener(new SelectionAdapter() {
public void widgetSelected(SelectionEvent e) {
Patient p= patientList.poll();
if(p!=null){
txt2.setText(p.getNum()+"號病人請到外科專家處看病\n\n我們部門在二層右拐第三間,\n很樂意為您看病!!\n\n\n\n\n\n\n\n您好!請慢走!");
}
else{
txt2.setText("現在沒有等候的病人了,\n可以喝杯水了哈");
}
}
});
button2.setBounds(340, 400, 90, 40);
button2.setText("外科專家");
final Button button3 = new Button(shell, SWT.Activate); // button3的事件方法
button3.addSelectionListener(new SelectionAdapter() {
public void widgetSelected(SelectionEvent e) {
Patient p= patientList.poll();
if(p!=null){
txt3.setText(p.getNum()+"號病人請到放射科科專家處看病\n\n我們部門在一層右拐最里一間,\n很樂意為您看病!!\n\n\n\n\n\n\n\n您好!請注意調理!");
}
else{
txt3.setText("現在沒有等候的病人了,\n可以喝杯水了哈!");
}
}
});
button3.setBounds(560, 400, 90, 40);
button3.setText("放射科專家");
final Button button4 = new Button(shell, SWT.Activate); // button4的事件方法
button4.addSelectionListener(new SelectionAdapter() {
public void widgetSelected(SelectionEvent e) {
PatientHuarry ph= patienthuarryList.poll();
if(ph!=null){
txt4.setText(ph.getNum()+"號急診病人請到急診專家處看病\n我們部門在一層左拐第三間,\n很樂意為您看病!!\n\n\n\n由于的您病情比較著急,\n我們會全力為您治療,\n請您放心!!\n\n\n\n\n\n\n\n您好!請保重身體!");
}
else{
txt4.setText("現在沒有急診的病人了,\n我們可以休息會兒了!\n嘻嘻!");
}
}
});
button4.setBounds(780, 400, 90,40);
button4.setText("急診專家");
shell.layout();
shell.open();
while (!shell.isDisposed()) { //同樣為支撐窗口在不點擊任何按鈕時一直保留在桌面上
if (!display.readAndDispatch())
display.sleep();
}
}
}
總結:這小程序主要是根據醫院服務需求,做了簡單的病人看病需要掛號,而醫生作診同樣需要呼叫病人,這就無形中減少了病人和醫生之間話費時間的聯系!
在編輯這個程序的過程中,主要還是用到的一些窗口的控件及其方法。
最后也希望在看后我程序的人,給與我點評!我想從大家的想法中學到更多的東西,謝謝!
