一、引言?
??? 今年的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 中國青年出版社?
