1)、先封装一个病人(Patient)的类。里面设置两个属性:一个是排队的人数(
num),一个是前面需要等待的人数(
frontnum);
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 Display display = Display.getDefault();
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();
}
}
}
总结:这小程序主要是根据医院服务需求,做了简单的病人看病需要挂号,而医生作诊同样需要呼叫病人,这就无形中减少了病人和医生之间话费时间的联系!
在编辑这个程序的过程中,主要还是用到的一些窗口的控件及其方法。
最后也希望在看后我程序的人,给与我点评!我想从大家的想法中学到更多的东西,谢谢!