基于安卓的医疗信息检索客户端设计

  随着我们国家的经济的快速地发展,人们的生活水平得到了快速的提升,人们对健康的关注度也慢慢变得高,国家也于 2016 年印发了《“健康中国 2030”规划纲要》,由此可见,“健康”已成为中国国家建设过程中的重要关注点。然而,作为与“健康”一词最为密切的传统医疗行业,目前却存在诸多问题。

  在传统医学诊断中,患者在每次就医后,都会得到一份诊疗的结果和纸质的病历,但由于不同医院不同医生对应的病历信息都不同,所以导致患者的病历信息的整理与管理都十分的不方便。针对这样的一个问题,有两种解决方案:(1)医院端将病人的医疗信息进行整理归纳、统一管理;(2)病人自己对自己的医疗信息整理保存。在医疗行业这个特殊的领域,全国各家医院几乎相对独立,想要把这么家多医院的医疗信息统一管理,任务难度较大,因此,采用方案(1)的话,挑战比较严峻。相比之下,方案(2)就较为容易实现一些。

  当今社会,伴随着计算机技术和电子信息产业的快速崛起与快速地发展,互联网已经覆盖了人们的日常生活的方方面面。近年来,随只能手机的普及,移动互联网更是得到了快速的发展,人们的日常生活已与手机紧密的联系在一起。借着“互联网 +”和移动互联网的浪潮,特提出该课题:设计开发一款基于安卓的个人医疗信息检索客户端软件。

  目前,针对人类健康问题,世界各国都纷纷提出自己的人类健康优化方案。其中,对人类健康跟踪的关键是人类健康信息和医疗信息的共享。对于建立全民医疗健康信息档案,国际医疗机构提出了用于规范医疗信息共享交换过程的 DICOM[]和 HL7 的电子信息体系结构,其中,DICOM(DigitalImagingandCommunicationsinMedicine)是医学图像和相关信息的国际标准,HL7(HealthLevel7)是卫生信息交换标准。在这两个国际化标准的基础之上,北美放射学会和医疗卫生保健协会为解决不同机构之间的信息闭塞问题,提高各医疗机构之间的联动性,实现医疗健康信息的全面共享,共同更好的为患者服务,合作提出了搭建一个现阶段共用的医疗健康信息平台。在全面保障患者在就医体验过程中享受惠民服务的同时,还能节省大部分时间和经济费用。在此想法的基础上,之后的一些学者专家陆续提出了通过建设基于互联网形式的医疗健康信息共享平台来解决医疗信息相互独立问题的方案[]。

  在国外,2009 年美国 IBM 公司提出了“智慧医疗”系统——这是一个以患者为本的信息体系。“智慧医疗”采取了比较先进的信息化技术,用于改善疾病的预防、诊断和研究等相关工作,最终目标是让医疗卫生生态圈的各个组成部分受益[]。在之后的几年里,欧洲各国也意识到智能医疗信息的重要性,相继开始智能医疗信息化的建设,并为此投入了大量资金和经费,还专门成立了智慧医疗信息课题组,并启动了数十个网络智能化医疗信息的科研项目——这一系列举措,果然大大的推动了医疗信息智能化的发展与建设[]。

  在国内,目前也在不断地推进智能医疗信息化的建设。现在,全国大部分医院都实现了部门信息化,然而,由于医疗信息的特殊性和封闭性,目前还未能实现全面的共享,因此导致患者的病历信息散落在各个不同的医院部门,而不能将这一些信息很好的利用起来,为用户所用。基于此,特提出了设计开发一款基于安卓的医疗信息检索客户端软件,用于记录管理个人医疗信息,从而避免个人医疗信息分散在各个不同的医院部门,在方便患者看病的同时,提高就医的质量和效率[]。

  通过学习信息检索的基础理论知识、Java 编程语言及 SQL 数据库语言,掌握安卓开发的基本流程、方法与开发工具,设计开发一款基于安卓系统的医疗信息检索客户端软件,以此来实现个人医疗信息的自主管理。

  第 1 章绪论:主要介绍了本课题的研究背景、研究现状和本课题的需要做的工作;

  第 2 章开发环境简介:主要介绍了本课题的开发环境及用到的软件,包括服务端开发环境介绍、客户端开发环境介绍、数据库介绍;

  第 5 章系统实现:详细的介绍了 Web 端和 Android 端的实现方案和各模块的实现思路与实现方法;

  第 6 章系统测试:交代了软件测试的意义和防范,并分别使用海信 T96 和魅蓝 E 对 Android 客户端进行了测试;

  第 7 章总结与展望:对自己一个学期以来做毕业设计的过程进行总结,并表达了自己对 Android 开发行业发展的看法。

  JDK(JavaDevelopmentKit),是 Sun 公司专门为研发人员提供的 Java 开发工具包,是整个 Java 的核心。JDK 包含了 Java 的运行环境、工具和基础类库,然而并没提供可视化的集成开发环境。此外,JDK 中的解释器(Java)、编译器(javac)等工具都要通过命令行才能执行[]。

  Tomcat 服务器是一个开放源代码的免费的轻量级 Web 应用服务器。因其稳定性很高、技术先进,而且免费,所以深受 Java 爱好者的青睐,并赢得了一些软件开发商的认可,是目前较为流行的 Web 应用服务器[]。

  AndroidSDK(SoftwareDevelopmentKit)是 Android 智能手机专属的软件开发工具包,集合了软件开发工程师为特定的软件框架、软件包、操作系统、硬件平台等建立应用软件的开发工具[]

  AVD(AndroidVirtualDevice),安卓虚拟设备,也称安卓模拟器,相当于一款安卓手机虚拟机,运行于电脑端,用于安卓程序的运行和调试。

  AndroidStudio 是由 Google 公司推出的一个 Android 程序的开发环境,提供了集成的 Android 程序开发工具,用于安卓程序的开发和调试[]。

  MySQL 是一个开放源码的关系型数据库管理系统,高性能、高可靠性,而且低成本,慢慢的变成了目前最流行的开源数据库,被广泛地应用在 Internet 上的中小型网站中[]。

  NavicatPremium 是用于管理和开发 MySQL 数据库的工具软件,它允许执行创建、编辑数据库,导入/导出数据,创建/运行 SQL 查询,生成报表等诸多操作,并能很方便地连接到多个数据库和远程数据库。此外,它还拥有直观的图形用户界面,还提供了如导入/导出向导,数据/结构同步,SSH 隧道,可视化查询生成器,报表生成器等强大的可视化工具,能够明显提高生产力[]。

  SVN(Subversion),是一个开放源码的、免费的版本控制管理系统。Subversion 用于管理随时间而发生改变的数据,它将这一些数据放置在一个版本库(repository)中。这个版本库除普通的文件服务器所具有的功能外,还会记录文件和目录的每一次改动,从而可以在一定程度上完成恢复数据到旧的版本,或是浏览数据的变动历史等操作[]。

  如图 3-1 所示,总系统分为三部分,分别为:Android 客户端,Java 服务端,MySQL 数据库。用户通过 Android 客户端发出请求,Java 服务端接收到客户端的请求后,进行一定的操作。如涉及数据操作,Java 服务端则向 MySQL 数据库发送相应指令,对数据库的数据来进行操作,并获取执行结果。最后,Java 服务端将结果返回到 Android 客户端。

  这种业务流程的优点是各部分之间耦合度低,便于功能的组合、修改和扩展,较为灵活。

  2)用户登录模块:用户通过手机号和密码登录系统,当用户勾选“记住密码”时,保存用户的登录信息,下次可免密登入系统;

  4)病历信息管理模块:用于管理用户的个人病历信息,包括病历信息的查询、增加、修改和删除;

  5)处方信息管理模块:用于管理用户的个人处方信息,包括处方信息的查询、增加、修改和删除;

  6)医疗网站管理模块:用于保存用户常用的医疗服务网站,方便用户查询各种医疗信息。

  MVC 全称 ModelViewController,是模型(Model)-视图(View)-控制器(Controller)的首字母缩写,是软件开发过程中的一种设计典范,用业务逻辑、数据、界面显示分离的方法组织代码,将业务逻辑集中在一个部件里面,从而可以在一定程度上完成在改进和修改个性化定制界面及用户交互的同时,不要重新编写业务逻辑相关的代码[]。MVC 设计模式整体结构图如图 4-1 所示。

  本次毕业设计的 Web 服务端基本功能是处理 Android 客户端的请求,为 Android 客户端提供数据支持。

  Web 端采用 MVC 设计模式开发。为了软件代码的维护和规范,对代码进行了分层和分包处理。工程目录见图 4-2,工程目录说明见表 4-1。

  Android 界面的设计采用 XML 文件控制 Activity 的界面属性。因 LinearLayout 线性布局能自动在一个方向上进行布局,通过距离或权重控制组件的位置,对各种尺寸屏幕的适应性比较强,所以本次毕业设计的页面全部使用 LinearLayout 线性布局。配置一个 LinearLayout 线性布局的代码如下:

  页面中各种组件均通过类似方式来配置,如下是一个 EditText 文本编辑框组件:

  用户注册页面如图 4-4 所示。用户注册模块主要涉及两个功能:发送验证码和提交注册信息。

  当点击“获取验证码”按钮后,系统首先判断手机号码是否输入,然后对手机号码进行格式校验。校验通过后,调用购买的短信验证码接口服务生成验证码,并将验证码以短信形式发送到用户的手机上,短信发送成功后,系统弹窗提示用户“验证码发送成功!”,并将“获取验证码”按钮设置为不可点击状态,显示 60 秒倒计时。倒计时结束后,将“获取验证码”按钮设为可点击状态,用户可再次进行“获取验证码”的操作。

  当点击“提交”按钮后,系统首先判断是否有信息未填写,然后判断两次输入的密码是否一致,之后,通过查询数据库的数据判断手机号是否已注册,接着对短信验证码进行校验。此外,在向服务端发送数据前,为提高系统的安全性能,还对用户的密码进行 Base64 加密。注册成功后,弹窗提示用户“注册成功,请登录!”,并自动跳转至用户登录页面。

  用户登录页面如图 4-6 所示。用户登录模块主要涉及两个功能:记住密码和登录功能。

  SharedPreferences 是 Android 平台自带的一个轻量级存储类。当用户勾选“记住密码”并登录成功后,将手机号和密码保存到 SharedPreferences 对象中。下次登录的时候,系统会先从 SharedPreferences 中查找登录信息,如找到,则直接显示在对应的输入框中,用户点击“登录”按钮即可直接登录。

  当点击“登录”按钮后,系统首先判断是否有信息未填写,然后对手机号格式进行校验,之后,判断手机号是否已注册,然后通过服务端查询该用户的信息(包括密码和上次登录时间)。获取到数据后,对密码进行 Base64 解密,然后与用户输入的密码进行核对。登录成功后,跳转至主页面,并弹窗显示用户的上次登录时间,并更新数据库中用户的上次登录时间数据。

  找回密码页面如图 4-7 所示。找回密码模块的发送验证码功能除需要判断手机号是否已注册外,其他操作同用户注册模块的发送验证码功能,此处不再赘述。

  当点击“提交”按钮后,系统首先判断是否有信息未填写,然后判断两次输入的密码是否一致,之后对短信验证码进行校验。重置密码成功后,弹窗提示用户“重置密码成功!”,并自动跳转至登录页面。

  整个页面分为 3 部分,分别为顶部标题栏、底部菜单栏和中部主页面。点击不同的菜单按钮,主页面会显示加载不同的 layout 布局文件。具体实现过程如下:

  Tab 页中,通过标签将顶部标题栏和底部菜单栏引入,主页面部分则设置为 LinearLayout 线性布局。在 Tab 页对应的 Activity 类中,创建一个 LinearLayout 类的对象 bodyView,用于装载 Tab 页的主页面中需要显示的视图。对各菜单按钮的点击事件进行监听,当某一菜单按钮被点击时,bodyView 移除其内部所有视图,然后装载所点击的菜单按钮所对应的视图,并设置各个菜单按钮及菜单按钮下方的文字的样式。

  各模块通过 ListView 以列表的形式显示各数据简要信息(如图 5-8 所示),除医疗网站管理模块(该模块中单击列表项直接跳转到浏览器并进入对应网站)外,其他模块单击每条数据,即可进入对应页面查看该条数据的详情。显示数据详情的页面如图 4-9 所示。

  添加数据分为两种方式,第一种方式用于录入病历信息、处方信息、医疗网站信息,如图 4-10 所示。点击标题栏的“+”,会弹出图(a)所示对话框,点击后,会跳转到图(b)所示的添加页面进行数据录入。

  第二种方式用于药品信息的录入。如图 4-9(b)所示,在处方详情信息页设置了添加药品信息的入口,点击“添加药品”后,会跳转至添加药品页面进行药品信息的录入。

  删除数据的实现较为简单,用户在数据列表页长按列表项,会弹出如图 4-11 所示对话框,点击“删除”,即可删除对应数据,删除数据成功后弹框提示用户“删除成功!”。

  如图 4-11 所示,当长按列表项弹出对话框后,点击“修改”,即会跳转到对应数据的修改页面,修改成功后,系统会弹框提示用户“操作成功!”,并跳转至修改前页面,如图 4-12 所示。

  软件测试是提高软件可靠性、保证软件质量的重要手段,测试的目的是发现软件存在的潜在问题,避免一些开发风险,并通过实施测试来降低甚至避免所发现的风险。在开发项目的过程中,测试相当于一个标准项目,所有的测试都应回归到用户的需求。

  这是因为软件是用户用于完成预定的任务,实现某种需求,而软件测试则是发现软件的问题和缺陷,假若修正了这些错误,那么软件就能更好地实现用户的需求,更好地为用户服务[]。

  程序使用的测试方法为黑盒测试。黑盒测试,又称为功能测试或数据驱动测试,它主要是在测试中检验程序的每个功能是否都能正常使用。在测试过程中,程序被看作一个封闭的黑盒子,在完全不考虑其内部特征和结构的情况下,利用程序的对外接口来测试。黑盒测试只检查程序的功能能否按照需求正常使用,以及程序是否能正确的接收输入数据而产生对应的输出信息。黑盒测试主要关注程序的外部结构,而不考虑程序内部的逻辑是怎么来实现的,大多数都用在测试软件的界面和功能[]。

  分别使用如表 5-1 所示的两款智能手机对 Android 客户端进行测试:

  由图可见,二者页面基本一致,没发生页面布局失控现象。二者最大的不同之处在于状态栏。在魅蓝 E 中,客户端实现了沉浸式状态栏,而在海信 T96 中并没有实现。这是因为 Android4.4 及以上版本才支持状态栏沉浸效果。

  在两款手机上分别运行并测试各个模块(包括正常工作流程测试和误操作测试),Android 客户端均可以正常使用,说明本系统能在 Android4.0.3 到 6.0 各个版本的手机上运行。

  经过一个学期的努力,在自主学习及指导老师的帮助下,设计并实现了该程序的基本功能。该程序基于 Android 平台,虽然之前自己学过 Java 编程语言,但 Android 相关的知识还是比较欠缺,只是在兴趣的引导下有过一点点的接触。本毕业设计也是我的第一个 AndroidAPP 作品。

  该毕业设计涉及的知识面比较广,有数据库知识,JavaWeb 开发,Android 开发,为了把毕业设计做好,也为了给自己的大学生活画一个圆满的句号,我必须去不断的学习各种全新的知识,并且主动去挖掘各种资料资源,以此来帮助自身更有效率更有质量的成长起来。

  从最开始拿到毕设题目的茫然,到现在完成项目的那种满满的成就感,一个学期的时间里,我学到了很多,也成长了很多。然而,由于时间紧张,还有一些最初设想的功能没有来得及实现,有点遗憾。

  通过该项目的开发,我对 AndroidAPP 的开发有了更深入更深刻的认识,同时,自己编写程序的思路和能力也得到了很大的提高。在做毕业设计过程中,也锻炼了自己处理问题的能力。这一个学期里获得的知识和能力将与我一起步入职场,共同实现我们的社会价值。

  经过一个学期的学习,学到了很多的知识,对 Android 的认识和掌握也更加深入了——这一些都会给我以后的工作带来非常大的帮助。但是学海无涯,要想真正在工作中得心应手,现在所学的知识还远远不足,还有很多东西要一直的学习,无论是软件整体架构的把握,还是编程的效率,亦或是对于 Android 的掌握程度。

  自 2012 年以来,智能手机发展迅猛,并逐渐的渗入我们正常的生活的方方面面。在众多的智能手机平台中,Android 以 75% 的全球市场占有率及超过五亿的设备激活量,遥遥领先于其他平台。2017 年第一季度,Android 更是占据了中国智能手机销量的 83.4%,国内著名手机生产厂商如华为、小米、魅族、oppo、vivo 等生产的手机全部都是 Android 系统的。这么大的市场占有率,无疑给我们这些从事 Android 软件开发的人员更大的动力。

  就目前来说,Android 具有乐观的发展前途,无论是在手机方面还是在智能硬件方面,对 Android 研发人员来说都是前途光明,希望自己能在 Android 的道路上一直走下去。

  从刚拿到课题时候的迷茫,到最终完成课题时满满的成就感,这一切,都要感谢宋老师的细心指导。由于这学期去公司参加了实习,使得自己真正能做毕业设计的时间少了很多,也因此给宋老师添了好多麻烦,但宋老师一直对我照顾有加,在这里,谨向我的导师宋老师致以最衷心的感谢和最崇高的敬意!

  同时,在做毕业设计的过程中,和我一起实习的小伙伴也给我提供了很多帮助,帮助我解决了很多毕业设计中遇到的问题,在此一并表示感谢!

  由于是第一次做一个完整的 AndroidAPP 项目,可能会出现一些问题是我目前还未曾发现的,敬请指出,我一定努力改正!

  【5】 胡杨. 基于 Web 的个人医疗信息系统的设计与实现[D]. 长春:吉林大学硕士学位论文,2016.

  【6】 支艳强,谢文阁,王丽丽. 基于 JDK 的 Java 集成开发环境的设计与实现[J]. 大众科技,(9),2011:9-11.

  【8】 林雄,于洪,孙志雄等. 制作多功能 Java 集成开发环境光盘[J]. 电脑开发与应用,(2),2010:12-14.

  【11】 吴小青. JSP+TOMCAT+MYSQL 开源软件整合配置初探——以揭阳职业技术学院图书馆网站服务器配置为例[J].齐齐哈尔大学学报,28(4),2012:66-69.

  【13】 贺自君. 基于 SVN 的统一协作平台设计与实现[D]. 北京:北京邮电大学硕士学位论文,2009.

  【15】 马越嵩. 基于 Android 系统的课程管理系统[D]. 沈阳:北方软件学院,2013.

  【16】 吴丽园. 基于 VSTS 的 GPS 导航软件的测试与实施[D]. 北京:北京邮电大学硕士学位论文,2008.