Skip to content

Commit b928f2f

Browse files
committed
胰岛素泵仿真程序
1 parent 4c8b316 commit b928f2f

File tree

4 files changed

+311
-0
lines changed

4 files changed

+311
-0
lines changed

InsulinPump/InsulinPump.java

Lines changed: 59 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,59 @@
1+
import java.util.Timer;
2+
import java.util.TimerTask;
3+
4+
class InsulinPump extends Thread{
5+
private double insulinQuantity;//胰岛素的量
6+
private double battery;//电池电量
7+
private double bloodSugar;//血糖值
8+
private double weight;//根据体重计算注射的胰岛素量
9+
10+
public InsulinPump (double weight) {
11+
insulinQuantity = 1000;
12+
battery = 100;
13+
bloodSugar = 5;//正常情况:3.9--6.1 mmol/L
14+
this.weight = weight;
15+
}
16+
17+
/**
18+
* 启动胰岛素泵,开启检测
19+
*/
20+
public void run() {
21+
Timer timer = new Timer();
22+
timer.schedule(new TimerTask() {
23+
public void run() {
24+
battery -= 0.1;
25+
}
26+
},1000,1000);//10秒减少1个电
27+
}
28+
29+
public double getInsulinQuantity() {
30+
return insulinQuantity;
31+
}
32+
33+
public void setInsulinQuantity(double insulinQuantity) {
34+
this.insulinQuantity = insulinQuantity;
35+
}
36+
37+
public double getBattery() {
38+
return battery;
39+
}
40+
41+
public void setBattery(int battery) {
42+
this.battery = battery;
43+
}
44+
45+
public double getBloodSugar() {
46+
return bloodSugar;
47+
}
48+
49+
public void setBloodSugar(double bloodSugar) {
50+
this.bloodSugar = bloodSugar;
51+
}
52+
53+
//调整胰岛素的量
54+
public double adjust() {
55+
double quantity = (bloodSugar * 18 - 100) * weight * 6 / 2000;
56+
insulinQuantity -= quantity;
57+
return quantity;
58+
}
59+
}

InsulinPump/People.java

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
import java.util.Random;
2+
import java.util.Timer;
3+
import java.util.TimerTask;
4+
5+
class People extends Thread {
6+
private double bloodSugar; //人体血糖值
7+
private Random random; //血糖数随机,3--8之间
8+
9+
public People() {
10+
random = new Random(System.currentTimeMillis());
11+
bloodSugar = 3.9 + random.nextDouble() * 5;
12+
}
13+
14+
@Override
15+
public void run() {
16+
Timer timer = new Timer();
17+
timer.schedule(new TimerTask() {
18+
@Override
19+
public void run() {
20+
bloodSugar = 3.9 + random.nextDouble() * 5;
21+
}
22+
},0,1000);//每1秒改变一次血糖值
23+
}
24+
25+
public double getBloodSugar() {
26+
return bloodSugar;
27+
}
28+
}

InsulinPump/PumpMain.java

Lines changed: 109 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,109 @@
1+
import org.apache.log4j.FileAppender;
2+
import org.apache.log4j.Logger;
3+
import org.apache.log4j.PatternLayout;
4+
5+
import javax.swing.*;
6+
import java.awt.*;
7+
import java.awt.event.ActionEvent;
8+
import java.awt.event.ActionListener;
9+
import java.awt.event.WindowAdapter;
10+
import java.awt.event.WindowEvent;
11+
import java.io.IOException;
12+
import java.util.Timer;
13+
import java.util.TimerTask;
14+
15+
public class PumpMain {
16+
public static void main(String[] args) {
17+
18+
final Logger log = Logger.getLogger(PumpMain.class);
19+
try {
20+
log.addAppender(new FileAppender(new PatternLayout("[%d{yyyy/MM/dd-HH:mm:ss}]-%m%n"), "/home/geekgao/insulinPumpLog", true));
21+
} catch (IOException e) {
22+
e.printStackTrace();
23+
}
24+
25+
final People people = new People();
26+
27+
final JFrame jFrame = new JFrame("输入体重");
28+
final double[] weight = new double[1];
29+
jFrame.setLayout(new FlowLayout());
30+
jFrame.addWindowListener(new WindowAdapter() {
31+
@Override
32+
public void windowClosing(WindowEvent e) {
33+
weight[0] = 60;//关闭窗口的话,默认60公斤
34+
super.windowClosing(e);
35+
}
36+
});
37+
final JTextField textArea = new JTextField("输入您的体重(默认60公斤)");
38+
jFrame.add(textArea);
39+
JButton jButton = new JButton("确定");
40+
jFrame.add(jButton);
41+
42+
jButton.addActionListener(new ActionListener() {
43+
public void actionPerformed(ActionEvent e) {
44+
try {
45+
weight[0] = Double.valueOf(textArea.getText());
46+
jFrame.setVisible(false);
47+
} catch (NumberFormatException e1) {
48+
JOptionPane.showMessageDialog(null, "数字格式不对");
49+
}
50+
}
51+
});
52+
jFrame.pack();
53+
jFrame.setLocationRelativeTo(null);
54+
jFrame.setResizable(false);
55+
jFrame.setVisible(true);
56+
57+
while (weight[0] == 0 && jFrame.isVisible() == true) {
58+
try {
59+
Thread.sleep(50);
60+
} catch (InterruptedException e) {
61+
e.printStackTrace();
62+
}
63+
}
64+
65+
log.info("开机,用户体重为" + weight[0] + "Kg");
66+
67+
final InsulinPump insulinPump = new InsulinPump(weight[0]);
68+
final PumpWindow pumpWindow = new PumpWindow(insulinPump);
69+
70+
people.start(); //人体运行
71+
insulinPump.start(); //胰岛素泵运行
72+
73+
Timer timer = new Timer();
74+
timer.schedule(new TimerTask() {
75+
@Override
76+
public void run() {
77+
insulinPump.setBloodSugar(people.getBloodSugar());
78+
79+
pumpWindow.updateTime();
80+
pumpWindow.setBattery(insulinPump.getBattery());
81+
pumpWindow.setBloodSugar(people.getBloodSugar());
82+
pumpWindow.setinsulinQuantity(insulinPump.getInsulinQuantity());
83+
pumpWindow.setStatus("无");
84+
85+
if (insulinPump.getBloodSugar() <= 3.9 || insulinPump.getBloodSugar() >= 6.1) {
86+
double insertQuantity = insulinPump.adjust();
87+
String insertQuantityStr = String.valueOf(insertQuantity);
88+
pumpWindow.setStatus("正在注射" + insertQuantityStr.substring(0, insertQuantityStr.indexOf(".") + 2) + "个单位的胰岛素");
89+
log.info("注射" + insertQuantityStr.substring(0, insertQuantityStr.indexOf(".") + 2) + "个单位的胰岛素");
90+
pumpWindow.setinsulinQuantity(insulinPump.getInsulinQuantity());
91+
}
92+
93+
if (insulinPump.getBattery() <= 0) {
94+
pumpWindow.setBattery(0);
95+
log.info("因未及时充电,本仪器将自动关机。");
96+
JOptionPane.showMessageDialog(null, "因未及时充电,本仪器将自动关机。");
97+
System.exit(0);
98+
}
99+
100+
if (insulinPump.getInsulinQuantity() <= 0) {
101+
pumpWindow.setinsulinQuantity(0);
102+
log.info("胰岛素量不足!!!本仪器将自动关机");
103+
JOptionPane.showMessageDialog(null, "胰岛素量不足!!!本仪器将自动关机");
104+
System.exit(0);
105+
}
106+
}
107+
}, 0, 1000); //每秒更新一次显示的数据
108+
}
109+
}

InsulinPump/PumpWindow.java

Lines changed: 115 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,115 @@
1+
import org.apache.log4j.FileAppender;
2+
import org.apache.log4j.Logger;
3+
import org.apache.log4j.PatternLayout;
4+
5+
import javax.swing.*;
6+
import java.awt.*;
7+
import java.awt.event.ActionEvent;
8+
import java.awt.event.ActionListener;
9+
import java.awt.event.WindowAdapter;
10+
import java.awt.event.WindowEvent;
11+
import java.io.IOException;
12+
import java.text.SimpleDateFormat;
13+
import java.util.Date;
14+
15+
class PumpWindow extends JFrame{
16+
private JLabel time;
17+
private JLabel battery;
18+
private JLabel bloodSugar;
19+
private JLabel insulinQuantity;
20+
private JLabel status;
21+
22+
private JButton charge;
23+
private JButton insertInsulin;
24+
25+
private InsulinPump pump;
26+
27+
private SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy/MM/dd-HH:mm:ss");
28+
private Logger log;
29+
30+
public void setBloodSugar(double bloodSugar) {
31+
String bloodSugarStr = String.valueOf(bloodSugar);
32+
this.bloodSugar.setText("血糖值:" + bloodSugarStr.substring(0, bloodSugarStr.indexOf(".") + 2) + "mmol/L");
33+
}
34+
35+
public void setinsulinQuantity(double insulinQuantity) {
36+
String insulinQuantityStr = String.valueOf(insulinQuantity);
37+
this.insulinQuantity.setText("胰岛素量:" + insulinQuantityStr.substring(0, insulinQuantityStr.indexOf(".") + 2) + "单位");
38+
}
39+
40+
public void setStatus(String status) {
41+
this.status.setText("当前状态:" + status);
42+
}
43+
44+
public void setBattery(double battery) {
45+
String batteryStr = String.valueOf(battery);
46+
this.battery.setText("电量:" + batteryStr.substring(0, batteryStr.indexOf(".") + 2));//只获取小数点后1位
47+
}
48+
49+
public void updateTime() {
50+
this.time.setText("时间:" + simpleDateFormat.format(new Date()));
51+
}
52+
53+
//参数是这个窗口显示的泵子的引用
54+
public PumpWindow(final InsulinPump pump) {
55+
log = Logger.getLogger(PumpWindow.class);
56+
try {
57+
log.addAppender(new FileAppender(new PatternLayout("[%d{yyyy/MM/dd-HH:mm:ss}]-%m%n"), "/home/geekgao/insulinPumpLog", true));
58+
} catch (IOException e) {
59+
e.printStackTrace();
60+
}
61+
this.pump = pump;
62+
63+
this.setLayout(new BorderLayout());
64+
this.addWindowListener(new WindowAdapter() {
65+
@Override
66+
public void windowClosing(WindowEvent e) {
67+
log.info("用户关机");
68+
System.exit(0);
69+
}
70+
});
71+
72+
JPanel upPanel = new JPanel();
73+
upPanel.setLayout(new BorderLayout());
74+
this.add(upPanel, BorderLayout.NORTH);
75+
time = new JLabel();
76+
battery = new JLabel();
77+
upPanel.add(time, BorderLayout.WEST);
78+
upPanel.add(battery, BorderLayout.EAST);
79+
80+
81+
JPanel downPanel = new JPanel();
82+
this.add(downPanel, BorderLayout.SOUTH);
83+
charge = new JButton("充电");
84+
charge.addActionListener(new ActionListener() {
85+
public void actionPerformed(ActionEvent e) {
86+
log.info("充电完毕");
87+
pump.setBattery(100);
88+
}
89+
});
90+
downPanel.add(charge);
91+
insertInsulin = new JButton("加满胰岛素");
92+
insertInsulin.addActionListener(new ActionListener() {
93+
public void actionPerformed(ActionEvent e) {
94+
log.info("加满胰岛素");
95+
pump.setInsulinQuantity(1000);
96+
}
97+
});
98+
downPanel.add(insertInsulin);
99+
100+
JPanel midPanel = new JPanel();
101+
midPanel.setLayout(new GridLayout(3, 1, 0, 0));
102+
this.add(midPanel, BorderLayout.CENTER);
103+
bloodSugar = new JLabel();
104+
midPanel.add(bloodSugar);
105+
insulinQuantity = new JLabel();
106+
midPanel.add(insulinQuantity);
107+
status = new JLabel();
108+
midPanel.add(status);
109+
110+
this.setSize(400, 250);
111+
this.setResizable(false);
112+
this.setLocationRelativeTo(null);
113+
this.setVisible(true);
114+
}
115+
}

0 commit comments

Comments
 (0)