面向Android的医院专家预约系统的设计与开发

2015-01-20 05:20唐纪权刘涛张辉
电脑知识与技术 2014年36期
关键词:客户端服务器数据库

唐纪权 刘涛 张辉

摘要:随着宽带无线接入技术的普及和智能终端硬件性能的不断提高,人们迫切希望利用移动设备方便地从互联网获取信息和服务。课题针对南京邦德骨科医院的实际需求,以骨科患者为服务对象,采用B/S与C/S的混合架构,设计并开发了面向Android平台的专家预约系统。实现了新闻更新、路线导航、档案存储、预约挂号等功能,并在不同的设备上安装并测试通过。在方便患者的同时,提高了医院的知名度、导医的办事效率,具有较好的实用价值。

关键词:医院专家预约;Android;数据库;服务器;客户端

中图分类号:TP311 文献标识码:A 文章编号:1009-3044(2014)36-8666-03

目前,各类基于Web的预约系统已不能满足用户需求,开发手机客户端成了一个必然的趋势。针对南京邦德骨科医院实际需求。设计并开发专家预约系统,实现新闻更新、路线导航、档案存储、预约挂号等功能,让患者可以通过预约系统把准确地搜索到医院地址、交通路线和快速拨号预约。在具备传统Web专家预约挂号系统的已有功能的同时,增添了手持设备特有的定位功能。

1 Android应用的构成和工作流程

Android应用程序一般由Activity、IntentReceiver、Service、ContentProvider四部分组成,具体使用时需要在配置文件AndroidManifest.xml中进行参数配置。Android应用的构成和工作流程如图1所示。

2 系统的解决方案

通过GPRS/3G网络,将需要的数据请求传送到专家预约系统服务器端。服务器端程序通过数据协议接口与存储管理系统数据通讯,将手机客户端的数据请求传递给存储管理系统。客户端得到预约服务器数据流后,按要求显示获得的数据。由此,构建基于Android的南京邦德骨科医院专家预约系统解决方案,系统功能结构如图2所示。

3 系统功能总体设计

系统设置了三种用户:专家、系统管理员、病人,专家和系统管理员可以在系统运行时间内,登录的专家预约系统后台网站。专家可以查看病人预约信息,负责病人的档案添加,与病人在线文字对话。管理员可以导入、添加、修改部分数据信息,包括医院动态、骨科专家、特色诊疗、个人档案、疾病导航、在线咨询、就医指南等。病人可以浏览系统的可视信息资源,注册个人档案帐号,对预约信息进行添加和修改。

4 系统设计

4.1 业务流程图

业务流程主要从系统的管理和用户的使用这两个方面来介绍。用户使用分为Web客户端和Android客户端两个部分,系统管理分为总的后台系统管理和后台Web端管理。专家预约系统的业务流程如图3所示。

图3 专家预约系统业务流程图

4.2 数据库设计

系统使用My SQL设计数据库,主要有9张表:功能管理信息表、登录信息表、疾病导航表、新闻更新表、专家信息表、个人档案信息表、预约挂号信息表、后台角色信息表、各级管理员信息表。

5 客户端功能设计

采用MVC(模型-视图-控制器)模式,模型负责整个解决方案的业务逻辑实现,底层的数据库也由模型访问和操作;视图负责系统向用户的展示,主要由HTML及JSP等完成;控制器负责用户界面和业务逻辑层的通信控制,一方面解释来自用户界面的输入,识别用户动作(如点击按钮等),调用相应模型中的方法,另一方面处理来自模型的事件和返回的执行结果,调用适当的视图显示给用户,控制器主要由Servlet完成。

5.1 UI设计

系统主界面为满足病人需求,通过友好、智能、方便的导航界面向用户展示系统的各项功能。主界面使用线性布局,每个功能模块通过图标+名称的方式展现。在res\layout\路径下创建mainscreen.xml布局文件,采用GridView控件布局9个功能模块,2个EditText控件实现个人档案模块的登录,使用Button按钮实现登录及重置功能。主界面UI设计如图4所示。

主界面作为导航菜单,在完成布局后,还要实现界面的跳转。在Src路径下建立MainActivity.java文件,通过setContentView(R.layout.mainscreen)语句将其与布局文件联系起来,为布局文件中的控件设置监听事件,完成界面之间的跳转。跳转导航代码如下所示:

Intent introduct = new Intent(MainActivity.this, IntroductActivity.class);

startActivity(introduct);//跳转到医院简介的Activity

break;

case 1: //医院动态

…… //跳转到医院动态界面

break;

case 2: //骨科专家

…… //跳转到骨科专家界面

break;

case 3: //特色诊疗

…… //跳转到特色诊疗界面

break;

……

}

}

Activity中的任务是与用户交互的一组Activity集合,Activity会被按打开顺序安排在一个堆栈里。系统中含有多个Activity,其中会有一个在启动的时候第一个呈现给用户。

5.2 链接服务器请求

系统需要在客户端和医疗应用服务器之间进行通信信息交互,实现数据交换和Android客户端结果的返回。

Android 要访问远程MySQL数据库,先要利用HTTP协议发送Request 请求给后台Web服务器,Web服务器端JAVA根据请求访问MySQL数据库服务器,并把读取的数据库内容封装或对客户端的响应封装成JSON格式,通过HTTP协议回传给Android终端,Android终端再对JSON解析,并进行相关的UI 处理,该过程如图5所示[7]。

图5 基于JSON的数据交换过程

5.3 服务端功能设计

1) 表现层:使用JSP页面用于显示系统界面与用户交互,项目下的Content目录用于存放相应的JSP文件,CSS文件夹用于存放样式文件,Img文件夹用于存放项目图片。

2) 模型层:用JavaBean作为模型,在项目下的Entity文件夹下。用于抽象现实工作中的种种问题,例如专家添加、信息更新等问题。

3) 控制层:使用Struts2作为控制层,Struts2的Action是用来控制调用哪个页面的,以及怎么获取数据[8]。在项目下的Web文件夹下以Action结尾的JAVA文件命名保存。

6 系统实现

6.1 系统服务端功能的实现

6.1.1对数据库操作

try{

// 调用JdbcUtils类的getConnection方法连接数据库

conn=JdbcUtils.getConnection();

// 添加数据库的sql语句

String sql="insert into t_profile(id,tel,ke,doctor,name,sex,age,unit,address,diagnosis,opinion,data) values(?,?,?,?,?,?,?,?,?,?,?)"; // 拼接数据库查询语句

pstm=conn.prepareStatement(sql);

pstm.setInt(1, profile.getId()); //设置id

pstm.setString(2,profile.getKe()); //设置科目

pstm.setString(3, profile.getDoctor()); //设置医生

……

pstm.executeUpdate(); //提交pstm对象

}catch(Exception e){

e.printStackTrace();

}finally{

try {

JdbcUtils.release(rs, pstm, conn); //关闭数据库连接

} catch (Exception e) {

e.printStackTrace(); //打印错误信息

}}}

6.1.2 Struts2的配置文件Struts.xml

<!—使用通配符的方式配置Action跳转路径—>

<!—传统json格式的数据—>

6.2系统客户端功能的实现

6.2.1系统开始界面实现

Android生成屏幕有三种方式:xml配置生成,通过用户界面接口生成,直接用代码生成。根据MVC原则,UI应该与程序逻辑相分离。因此,系统在XML中定义UI结构。此外,一个程序从一个屏幕方案调整到另一个采用Android应用程序的基础功能单元Activity(android.app.Activity类中的一个对象)实现。复杂操作在线程中完成,代码如下所示:

class MyThread implements Runnable {

@Override

public void run() {

service = new UpdataInfoService(SplashActivity.this);

try {

Thread.sleep(2000); //进程休眠2秒

UpdataInfo updataInfo = service.getUpdataInfo(R.string.updataurl);

Message msg = new Message(); //定义数据封装包

Bundle bundle = new Bundle(); //定义数据结构

bundle.putSerializable("updataInfo", updataInfo);

msg.setData(bundle);

Message msg = Message.obtain();

msg.obj = updataInfo;

SplashActivity.this.myHandler.sendMessage(msg);

}

};

6.2.2 加载文件类

在UI线程中创建一个Handler(处理后台进程返回数据),负责处理和绑定到该Handler的线程中的Message(存储bundle等数据格式)。每一个Handler都必须关联一个Looper(不停循环的遍历队列将符合条件的Message一个个的拿出来交给handler进行处理),并且两者是一一对应的。Looper负责从其内部的MessageQueue(存储从后台进程中抛回的和当前handler绑定的message一个队列)中拿出一个个Message给Handler进行处理。系统Handler在UI线程中实现,经过Handler、Message机制,最终返回到UI线程中。

……

URL url = new URL(path); //获取服务器路径

HttpURLConnection conn = (HttpURLConnection)url.openConnection();

conn.setRequestMethod("GET"); //以get方式连接服务器

conn.setConnectTimeout(5000); //连接超时时间为5秒

if(conn.getResponseCode() == 200){ //判断是否成功连接

int total = conn.getContentLength(); //得到连接字符数量

pd.setMax(total);

InputStream is = conn.getInputStream();//得到输入流

File file = new File(filepath); //下载路径

FileOutputStream fos = new FileOutputStream(file);//得到输出流

byte[] buffer = new byte[1024];

int len = 0;

int process = 0;

while((len=is.read(buffer)) != -1){ //循环输出

fos.write(buffer, 0, len);

process+=len;

pd.setProgress(process);

Thread.sleep(50); //让线程睡眠

} ……

}

7 结束语

通过分析传统Web端专家预约系统的运营方式,总结其中的不足,设计并开发基于移动智能客户端的专家预约系统,弥补了传统Web应用的众多限制。能够满足人们的生活习惯和应用需求,具有较好的应用前景。

参考文献:

[1] ZHANG Hong.Study on Management System for Agricultural Sci-tech Achievement Transformation Funding Project[J].Asian Agricultural Research,2013(1).

[2] Wu Hong, Li Yulong.Analysis of an Evaporator-condenser-separated Mechanical Vapor Compression System [J].Journal of Thermal Science,2013(2).

[3] LIU HouLin,WANG Kai.Experimental investigation of the unsteady flow in a double-blade centrifugal pump impeller[J]. Science China(Technological Sciences,2013(4).

[4] 闻刚.浅论视觉传达效能在手机UI设计中的应用[J].剑南文学:经典教苑,2013(2).

[5] 田智文.手机UI界面设计的人性设计[J].艺术科技,2013(10).

[6] 裴佳迪,马超,孙仁贵.Android应用开发全程实录[M].北京:人民邮电出版社,2012.

[7] 龚成莹,邢敬宏.基于JSON的Android移动终端与PHP及MySQL数据通信[J].工业仪表与自动化装置,2013(1).

[8] 吴大勇,郑紫微.基于Android平台的访问权限机制优化方案[J].计算机工程,2013(5).endprint

msg.obj = updataInfo;

SplashActivity.this.myHandler.sendMessage(msg);

}

};

6.2.2 加载文件类

在UI线程中创建一个Handler(处理后台进程返回数据),负责处理和绑定到该Handler的线程中的Message(存储bundle等数据格式)。每一个Handler都必须关联一个Looper(不停循环的遍历队列将符合条件的Message一个个的拿出来交给handler进行处理),并且两者是一一对应的。Looper负责从其内部的MessageQueue(存储从后台进程中抛回的和当前handler绑定的message一个队列)中拿出一个个Message给Handler进行处理。系统Handler在UI线程中实现,经过Handler、Message机制,最终返回到UI线程中。

……

URL url = new URL(path); //获取服务器路径

HttpURLConnection conn = (HttpURLConnection)url.openConnection();

conn.setRequestMethod("GET"); //以get方式连接服务器

conn.setConnectTimeout(5000); //连接超时时间为5秒

if(conn.getResponseCode() == 200){ //判断是否成功连接

int total = conn.getContentLength(); //得到连接字符数量

pd.setMax(total);

InputStream is = conn.getInputStream();//得到输入流

File file = new File(filepath); //下载路径

FileOutputStream fos = new FileOutputStream(file);//得到输出流

byte[] buffer = new byte[1024];

int len = 0;

int process = 0;

while((len=is.read(buffer)) != -1){ //循环输出

fos.write(buffer, 0, len);

process+=len;

pd.setProgress(process);

Thread.sleep(50); //让线程睡眠

} ……

}

7 结束语

通过分析传统Web端专家预约系统的运营方式,总结其中的不足,设计并开发基于移动智能客户端的专家预约系统,弥补了传统Web应用的众多限制。能够满足人们的生活习惯和应用需求,具有较好的应用前景。

参考文献:

[1] ZHANG Hong.Study on Management System for Agricultural Sci-tech Achievement Transformation Funding Project[J].Asian Agricultural Research,2013(1).

[2] Wu Hong, Li Yulong.Analysis of an Evaporator-condenser-separated Mechanical Vapor Compression System [J].Journal of Thermal Science,2013(2).

[3] LIU HouLin,WANG Kai.Experimental investigation of the unsteady flow in a double-blade centrifugal pump impeller[J]. Science China(Technological Sciences,2013(4).

[4] 闻刚.浅论视觉传达效能在手机UI设计中的应用[J].剑南文学:经典教苑,2013(2).

[5] 田智文.手机UI界面设计的人性设计[J].艺术科技,2013(10).

[6] 裴佳迪,马超,孙仁贵.Android应用开发全程实录[M].北京:人民邮电出版社,2012.

[7] 龚成莹,邢敬宏.基于JSON的Android移动终端与PHP及MySQL数据通信[J].工业仪表与自动化装置,2013(1).

[8] 吴大勇,郑紫微.基于Android平台的访问权限机制优化方案[J].计算机工程,2013(5).endprint

msg.obj = updataInfo;

SplashActivity.this.myHandler.sendMessage(msg);

}

};

6.2.2 加载文件类

在UI线程中创建一个Handler(处理后台进程返回数据),负责处理和绑定到该Handler的线程中的Message(存储bundle等数据格式)。每一个Handler都必须关联一个Looper(不停循环的遍历队列将符合条件的Message一个个的拿出来交给handler进行处理),并且两者是一一对应的。Looper负责从其内部的MessageQueue(存储从后台进程中抛回的和当前handler绑定的message一个队列)中拿出一个个Message给Handler进行处理。系统Handler在UI线程中实现,经过Handler、Message机制,最终返回到UI线程中。

……

URL url = new URL(path); //获取服务器路径

HttpURLConnection conn = (HttpURLConnection)url.openConnection();

conn.setRequestMethod("GET"); //以get方式连接服务器

conn.setConnectTimeout(5000); //连接超时时间为5秒

if(conn.getResponseCode() == 200){ //判断是否成功连接

int total = conn.getContentLength(); //得到连接字符数量

pd.setMax(total);

InputStream is = conn.getInputStream();//得到输入流

File file = new File(filepath); //下载路径

FileOutputStream fos = new FileOutputStream(file);//得到输出流

byte[] buffer = new byte[1024];

int len = 0;

int process = 0;

while((len=is.read(buffer)) != -1){ //循环输出

fos.write(buffer, 0, len);

process+=len;

pd.setProgress(process);

Thread.sleep(50); //让线程睡眠

} ……

}

7 结束语

通过分析传统Web端专家预约系统的运营方式,总结其中的不足,设计并开发基于移动智能客户端的专家预约系统,弥补了传统Web应用的众多限制。能够满足人们的生活习惯和应用需求,具有较好的应用前景。

参考文献:

[1] ZHANG Hong.Study on Management System for Agricultural Sci-tech Achievement Transformation Funding Project[J].Asian Agricultural Research,2013(1).

[2] Wu Hong, Li Yulong.Analysis of an Evaporator-condenser-separated Mechanical Vapor Compression System [J].Journal of Thermal Science,2013(2).

[3] LIU HouLin,WANG Kai.Experimental investigation of the unsteady flow in a double-blade centrifugal pump impeller[J]. Science China(Technological Sciences,2013(4).

[4] 闻刚.浅论视觉传达效能在手机UI设计中的应用[J].剑南文学:经典教苑,2013(2).

[5] 田智文.手机UI界面设计的人性设计[J].艺术科技,2013(10).

[6] 裴佳迪,马超,孙仁贵.Android应用开发全程实录[M].北京:人民邮电出版社,2012.

[7] 龚成莹,邢敬宏.基于JSON的Android移动终端与PHP及MySQL数据通信[J].工业仪表与自动化装置,2013(1).

[8] 吴大勇,郑紫微.基于Android平台的访问权限机制优化方案[J].计算机工程,2013(5).endprint

猜你喜欢
客户端服务器数据库
通信控制服务器(CCS)维护终端的设计与实现
县级台在突发事件报道中如何应用手机客户端
孵化垂直频道:新闻客户端新策略
基于Vanconnect的智能家居瘦客户端的设计与实现
中国服务器市场份额出炉
得形忘意的服务器标准
计算机网络安全服务器入侵与防御
客户端空间数据缓存策略