猪传染病诊断系统的设计与实现
2017-06-03翟亚静白鹏成丽君
翟亚静++白鹏++成丽君
摘 要描述了一个基于Android操作系统的猪传染病诊断系统的设计与实现,并给出了相应的代码。
【关键词】Android 猪传染病 诊断系统
1 引言
本文中描述的猪传染病诊断系统利用Java语言和Android平台,实现了猪传染病的疾病诊断、疾病防治、查询疾病等功能,主要针对专家、普通养殖户、管理员等用户使用,专家可以提供更新和维护症状与疾病信息,普通养殖用户可以通过观察的症状使用诊断系统得到诊断结果,系统管理员则进行系统的维护,如数据恢复和数据还原等,使诊断效率可以得到较好的提高与改善。该诊断系统共分为两个版本,版本2是对版本1的进一步优化与改进,版本2在版本1的基础上增加了采用jsp+servlet+jdbc轻量级的、基于J2EE的MVC体系架构。该模式主要分为视图层、控制层和模型层。视图层使用jsp技术来实现,控制层使用servlet来处理,模型层使用java语言来创建实体类。数据库层采用jdbc来实现与mysql数据库的交互,对数据库中疾病信息、症状信息等进行管理。
2 环境
开发环境:eclipse、MyEslipse、MySQL
开发语言:Java、html、JavaScript、JSP、servlet
运行环境:Tomcat、Android虚拟机
3 功能
该系统分为八个模块:
系统设置模块、症状分类信息管理模块、症状信息管理模块、疾病信息管理模块、防治措施信息管理模块、猪疾病诊断分析模块、系统维护模块、退出系统。如图1所示。
4 设计
4.1 界面设计
4.1.1 版本1界面
Android界面(如图2所示)。
4.1.2 版本2界面
(1)Web的诊断界面(如图3所示)。
(2)Web的数据库操作界面(如图4所示)。
4.2 数据库设计
该数据库是一个关系型数据库,基表包括:管理员信息表、症状分类信息表、症状子分类信息表、症状信息表、疾病信息表、症状关联疾病信息表、防治措施治疗表。
这些表都满足完整性约束条件,并且有些表之间互相存在关系,如:症状分类信息表与症状子分类信息表為一对多关系,症状信息表和疾病信息表为多对多关系,疾病信息表和防治措施治疗表为一对一关系。通过引用外键或者创建中间表来建立关系。在疾病诊断的过程中还会出现动态表:症状动态表和疾病动态表。这些动态表中的数据是在计算过程中动态保存的,存储一些中间数据。
具体设计如图5所示。
4.3 推理模块设计——病情诊断算法
4.3.1 数据归一化
在动物疾病诊断问题中作如下定义:
症状集——S{s1,s2,s3......}有限集(symptom)指动物所有症状的集合;
疾病集——D{d1,d2,d3......}有限集(disease)指动物所有疾病的集合;
疾病与症状之间的关系为多对多,一个疾病对应多个症状,一个症状对应多个疾病,在数据库中采用症状疾病表来存储该关联关系,属性有症状编号,疾病编号和表现分值。设表现分值为{x1,x2,x3........},假设症状疾病关系表中有以下关系{(s1,d1,x1),(s1,d2,x2),(s1,d3,x3)},数据归一化就是将表现分值x换成另外一种表示方法y,即
y1=x1/(x1+x2+x3), y2=x2/(x1+x2+x3), y3=x3/(x1+x2+x3)
则y1+y2+y3=1,该表示方法称为归一化处理。经过归一化处理的数据存入到数据库中,症状疾病关系表中的关系变为{(s1,d1,x1,y1),(s1,d2,x2,y2),(s1,d3,x3,y3)}。
4.3.2 推断算法
在动物疾病诊断过程中,用户可以选择一个或多个症状,通过推理算法最终得出动物可能患的疾病,所以我们可以由一个症状的推断算法推出多个症状的推断算法,如下:
(1)若用户选择一种症状,假设相应的症状疾病关系表中的数据为{(s1,d1,x1,y1),(s1,d2,x2,y2),(s1,d3,x3,y3)},设推断结果为z{z1,z2,z3......},推断算法为:疾病d1的推出结果为z1=y1/(y1+y2+y3),疾病d2推出的结果为
Z2=y2/(y1+y2+y3),疾病d3推出的结果为z3=y3/(y1+y2+y3)。
(2)若用户选择两种症状,假设这两个症状相应的症状疾病关系表中的数据为:
第一个症状相关的症状疾病关系表中的数据:{(s1,d1,x1,y1),(s1,d2,x2,y2),(s1,d3,x3,y3)},
第二个症状相关的症状疾病关系表中的数据:{(s2,d3,x1,y4),(s2,d4,x2,y5),(s2,d5,x3,y6)},
设推断结果为z{z1,z2,z3......},推断算法为:
与一个症状s1有关的疾病的百分比可以依次推出,
疾病d1的推断结果为z1=y1/(y1+y2+y3+y4+y5+y6),
疾病d2的推断结果为z2=y2/(y1+y2+y3+y4+y5+y6),
疾病d3的推断结果z3=y3/(y1+y2+y3+y4+y5+y6);
与一个症状s2有关的疾病的百分比可以依次推出,
疾病d3的推断结果为z4=y4/(y1+y2+y3+y4+y5+y6),
疾病d4的推断结果为z5=y5/(y1+y2+y3+y4+y5+y6),
疾病d5的推断结果z6=y6/(y1+y2+y3+y4+y5+y6);
由于疾病d3与症状s1和s2都有关联,所以疾病d3的推断结果为:z3+z4。
(3)以此类推,用户选择n个症状s{s1,s2,s3.......sn},这n个症状关联的所有疾病有m个d{d1,d2,d3......dm},归一化数据有m个y{y1,y2,y3......ym},推断结果zi为yi/(y1+y2+y3+.....+ym),其中i=1,2,3.....m。若其中有不同症状对应的疾病有相同的,则需要通过for循环遍历出来,将其推断结果求和得到该疾病的最终结果。
4.3.3 实例
若选中的症状为虎斑心和突然死亡,则虎斑心的归一化数据为:口蹄疫20/20=1,突然死亡的归一化数据为:破伤风5/(5*7+3)=0.13,猪水肿病5/38=0.13,口蹄疫5/38=0.13,猪传染性胸膜肺炎5/38=0.13,猪肺疫5/38=0.13,猪丹毒5/38=0.13,猪链球菌病5/38=0.13,猪瘟3/38=0.08,然后再求百分比:口蹄疫1/(0.13*7+0.08+1)=51%,
0.13/(0.13*7+0.08+1)=7%,求和51%+7%=58%,
破伤风 0.13/(0.13*7+0.08+1)=7%,
猪水肿病 0.13/(0.13*7+0.08+1)=7%,
猪传染性胸膜肺炎0.13/(0.13*7+0.08+1)=7%,
猪肺疫0.13/(0.13*7+0.08+1)=7%,
猪丹毒0.13/(0.13*7+0.08+1)=7%,
猪链球菌病0.13/(0.13*7+0.08+1)=7%,
猪瘟0.08/(0.13*7+0.08+1)=4%,
5 關键代码实现
public int[] getSubPercent(String[] diseaseid) {
int[] subpercent = new int[diseaseid.length];
for (int i = 0; i < diseaseid.length; i++) {
int tempnum = 0;
this.dbc = new DBCommon();
String[][] data = this.dbc
.query("select * from tempdisease where id='"
+ diseaseid[i] + "'");
if (data.length == 0) {
subpercent[i] = 0;
} else {
for (int j = 0; j < data.length; j++) {
tempnum += Integer.parseInt(data[j][1]);
}
subpercent[i] = tempnum;
}
}
return subpercent;
}
6 结语
本文对猪传染病诊断系统中的界面设计、数据库设计、疾病诊断算法进行了描述,通过基于Android设计的数据库的信息采集与建立,使猪传染病诊断信息更加系统化、全面化,具有用户友好、操作方便快捷、维护简单等特点。
该系统将计算机技术与动物医学的相结合,可以帮助我们快速获取信息,更加准确地来诊断猪的疾病,提高病情诊断效率。同时,它还具有一定的实用性,不仅适用于领域知识专家,更可以广泛应用于普通养殖人员等。它的实现在一定程度上普及了专家知识,使得更多的问题得以解决,还提高了相关专业人员的业务素质和业务水平,扩大了相关知识的共享范围。
除此之外,该诊断系统还可以再进行更进一步的功能完善与拓展,例如其他动物疾病的诊断分析等,动物疾病现场调查与信息采集。
参考文献
[1]刘薇.动物疾病诊断辅助系统平台的设计[J].电子设计工程,2012.
[2]张海藩,吕云翔.软件工程(第4版)[M].人民邮电出版社,2012.
作者简介
翟亚静(1995-),女,山西省长治市人。山西农业大学软件学院2014级在读本科生。主要研究方向为软件工程。
作者单位
山西农业大学软件学院 山西省太谷县 030801