用Java实现传染病信息查询分析系统
2009-01-06
作者:谭广锋
一、引言
今年的SARS给人类一次袭击。传染病是一个普遍存在的问题,如何去利用传染病数据和模型进行分析判断是一个值得思考的问题。对于传染病的分析应该是一个及时的报告分析过程,本系统是用JSP写的一个MIS,能实现及时数据自动更新、数据查询和分析等功能,能为用户的决策提供数据资料。
二、编程思想、原理图
本系统具有一般MIS的数据查询功能——能对传染病种类、病例和病情分别进行查询,而且能用现存的分析模型对具体情况进行分析,以支持用户的决策。本系统采用B/S结构,用户只需要用浏览器就可以对传染病种类、病例和病情分别进行查询和分析。系统的重点在于其自动更新数据功能上。
这里,我们假设系统数据更新间隔期为一天。当服务器运行时,同时建立自动更新线程,对时间进行监视,当一天过去时,系统从数据库中读取数据并进行更新,重新对数据文件进行分析更新。用户浏览到的总是最新的资料。在这里,我们的用户主要浏览的是服务器端的数据文件(包括变化曲线,具体病情等)。
三、开发环境和工具
Windows 2000 Professional J-Creator DreamWeaver MX
Resin-2.0.2 Miscrosoft SQL Server 2000 Rational Rose
四、数据库设计
对于本系统的数据,分为传染病信息和传染病模型两部分。传染病信息包括传染病种类、病例和病情等数据;传染病模型则是对传染病信息进行分析用的模型数据。因此在建立数据库的时候要同时考虑信息和模型两方面。目标数据库脚本如下:
create database contagion
传染病种类列表
create table diseaselist(
dname varchar(200),
descript varchar(255),
dno varchar(5),
firsttime datetime,
headstream varchar(60),
primary key(dno)
)
模型列表
create table modellist(
mname varchar(200),
mno varchar(3),
dno varchar(5) references diseaselist(dno),
interface varchar(255),
primary key(mno,dno)
)
病例列表
create table cases(
cno varchar(11),
zip varchar(3),
dno varchar(5) references diseaselist(dno),
soai_name varchar(24),
primary key(cno)
)
地区数据表
create table place(
pname varchar(60),
zip varchar(3),
population int,
unit int,
primary key(zip,pname)
)
病情表
create table soai_table***********(
soai_date datetime primary key,
new int,
total int
cure int,
totalcure int,
death int,
totaldeath int,
patient int,
)
注:病例号代码(***********):前三位为国家地区编码,中间五位为疾病编码,最后为病例编号。
五、程序介绍
[在这里主要介绍与系统自动更新有关的类的程序的编写,其他类从略。由于篇幅有限只列出类的方法和成员。]
//AutoUpdateThread
//Herroy Tan
//2003.6.27.
import java.io.*;
import java.util.Date;
import java.sql.*;
public class AutoUpdateThread extends Thread{
Date nowdate;//记录当前日期
String path;//记录路径
String Url;//记录数据库Url
String uid;//记录数据库用户
String upw;//记录数据库密码
AutoUpdateThread(){……}//从设置文件中读取各成员的初始值
public void run(){
……
FileUpdate FU=new FileUpdate();//数据文件更新类对象
String tablename;
Connection con=null;
DataArray DA=new DataArray();//读取数据信息类对象
KChart KC=new KChart();//曲线图绘制类对象
……
FU.Update(tablename,path,Url,uid,upw);//更新数据文件
DA.getDataArray(Url,uid,upw,tablename);//读取数据信息
KC.graphicsGeneration(DA.x,DA.y,DA.z,DA.length,path + "/" + tablename);//曲线图重绘
……
}//对时间进行监控
}
数据文件更新类:
//FileUpdate
//Herroy Tan
//2003.6.28.
import java.io.*;
import java.sql.*;
public class FileUpdate{
Connection con=null;//数据库连接对象
public void Update(String tablename,String tablepath,String Url,String uid,String upw){……}//从数据库中读取数据对数据文档进行更新
}
曲线图绘制类:
//KChart
//Herroy Tan
//2003.6.20.
import java.io.*;
import java.util.*;
import com.sun.image.codec.jpeg.*;
import java.awt.image.*;
import java.awt.*;
public class KChart {
BufferedImage image;
public void createImage(String fileLocation){
try{
FileOutputStream fos = new FileOutputStream(fileLocation);
BufferedOutputStream bos = new BufferedOutputStream(fos);
JPEGImageEncoder encoder = JPEGCodec.createJPEGEncoder(bos);
encoder.encode(image);
bos.close();
}
catch(Exception e){
System.out.println(e);
}
}
public void graphicsGeneration(int x[],int y[],int z[],int length,String fileLocation) {
……//绘制曲线图过程略
chartGraphics.createImage(fileLocation + ".jpg");
}
}
六、结束语
通过测试,本系统能够自动及时更新数据信息,并将数据以图像的方式展现给用户(如下图),能建立模型对病情进行分析。现时本系统的重点放在及时反映数据和分析数据,在维护更新接触得并不多。本系统是在数据的维护和更新都比较完善的假设下建立的。假如失去了数据的维护和更新的可靠性,本系统亦将失去可靠性(对于用户来说,反映出来的数据将是不完整的也并不是及时的)。所以若要进行扩展的话,系统的维护更新则是重点问题。
参考文献
1.《Java图像编程实例库》 Campesato 电子工业出版社
2.《Java完全探索》 Chuck Cavaness Geoff Friesen Brian Keeton 中国青年出版社