APP下载

基于Android手机投票系统的设计与实现

2017-01-19李煌峰

关键词:服务器端页面客户端

方 欣, 李煌峰, 潘 理

(湖南理工学院 信息与通信工程学院, 湖南 岳阳 414006)

基于Android手机投票系统的设计与实现

方 欣, 李煌峰, 潘 理

(湖南理工学院 信息与通信工程学院, 湖南 岳阳 414006)

设计了一种基于Android平台的投票管理系统, 能较好地弥补传统手工纸质投票方式的缺陷. 系统主要包括数据库的设计、服务器端和Android客户端的设计开发三个方面. 数据库放在服务器端, 所有涉及数据库的处理都会提交到服务器端进行, 从而增加系统的安全性和处理速度.

Android; 投票; MySQL; 服务器

引言

投票是公民表达自己喜好的一种方式, 大到投票选举国家领导人, 小到对某一款产品表示喜好等等,都可以使用投票的方式. 传统的投票方式一般采用纸质的形式, 当投票内容不断扩大, 参与投票人数不断增加时, 对应的数据量也会越来越大, 传统的纸质投票方式就显得力不从心了, 会出现诸如计票困难、资源浪费、统计的过程中出错等等问题.

随着移动互联网的发展, 智能手机的兴起, 基于手机的投票系统可以很好地解决上述问题. 在手机中安装投票系统客户端软件, 登录后就可以对自己感兴趣的选项进行投票, 提交给服务器端进行统计处理, 服务器端处理完毕后, 再将投票结果显示出来. 这种投票方式快捷、实时、高效, 可以给客户端以及统计人员带来极大的便利. 手机投票方式将会是未来发展的方向, 一定会成为一种主流的投票方式[1].

1 系统功能需求分析

1.1 功能需求

手机投票系统包含普通客户端和管理员客户端两类, 普通客户端应具备登录系统、客户端注册、浏览投票项、投票等基本功能, 管理员客户端应具备登录系统、增加、删除普通客户端、投票信息的增、删、查、改等功能. 为了便于客户端投票, 引入了二维码[2]的方式进行投票.

1.2 性能需求

1) 界面需求: 对于服务器端界面要求访问方便, 对于投票信息的增、删、查、改操作简单, 对于客户端, 界面设计要友好, 操作简单、方便;

2) 系统运行: 要求运行稳定、快捷、可靠, 客户端的投票结果能即时地在服务器端和客户端显示出来;

3) 数据存储: 系统需要对所有投票信息进行安全地存储, 以便于各种客户端对数据的操作;

4) 可扩展性: 在系统结构上应具备良好的可扩展性, 以便于将来功能的完善和扩展.

2 系统总体设计

系统的总体架构图如图1所示.

图1 系统的总体架构图

投票管理系统总体包含三个部分: 服务器端、Android客户端以及数据库.

2.1 服务器端

系统服务器端采用B/S的模式, 主要功能如图2所示. 在B/S架构中, 客户端通过浏览器向服务器端发出请求, 服务器对客户端的请求作出响应. 服务器端连接数据库, 可对数据进行增、删、改、查等操作. 在B/S架构的设计中, 为方便系统以后的扩展、升级和功能的完善, 采用了MVC的设计模式[3].

2.2 Android客户端

系统客户端采用B/S的模式, 框架结构如图3所示. 客户端一方面通过交互界面与客户进行交互,另一方面与服务器进行数据交互, 服务器端向客户端提供数据接口以交换数据. 在Android端的开发中, 利用XML布局文件进行界面设计[4], 各功能模块采用Activity活动类实现与客户端的交互. 客户端通过Gson、Json与服务器端进行数据交互[5].

图2 服务器端框架结构图

图3 手机客户端框架结构图

2.3 数据库设计

adminuser表用来存放管理员的客户端名和密码, 见表1. user表用来存放普通客户端的客户端名和密码, 见表2. titles表用来存放投票的标题、发起时间, 以及发起的管理员客户端名, 见表3. options表用来存放投票的选项、投票title的id, 以及该选项的内容和得票数. title_id是来自title表中的id外键, 并且设置为级联更新与级联删除, 方便数据的更新和删除操作, 见表4.

表1 adminuser表

表2 user表

表3 titles表

表4 options表

3 系统实现

3.1 数据库的建立与连接

启动MySQL服务, 打开Navicat for MySQL连接数据库服务端, 新建数据库, 数据库名称为“vote”,并将字符集设置为“CHARSET = utf-8”, 防止后续存取中文乱码, 建立上述表.

通过C3P0配置数据库连接, 需要导入数据库驱动和C3P0相应的的jar包, 分别是“mysql-connector-java-5.1.7-bin.jar”和“c3p0-0.9.1.2.jar”. 项目中的实现类DBUtils.java关键代码如下:

3.2 服务器端设计与实现

服务器端通过WEB站点的方式来实现, 包含登录验证, 查看投票内容, 生成投票二维码, 删除投票,添加新投票, 添加投票用户等功能. 采用Myeclipse8.5进行设计, 项目名称为VoteServer, 服务器采用Myeclipse8.5内置的Tomcat, 项目结构图如图4所示.

服务器端大致运行流程: 运行login.html文件, 输入用户名和密码, 页面将登录参数name和password传至LoginServlet进行验证, LoginServlet.java获得请求参数并与数据库中的adminuser表比对, 验证该管理员用户是否正确. 正确则通过请求重定向到管理员功能页面opreation.jsp, opreation.jsp分页显示投票内容如图5所示, 错误则重定向到loginfail.jsp.

图5中的“添加新投票”栏目可以添加投票的标题和选项, 若有多个选项, 则可以单击“添加选项”按钮添加选项. 添加的标题会在“所有投票”栏分页显示, 双击某个投票的标题, 可以进入detail.jsp页面显示投票结果, 如图6所示. 单击“删除”会将该投票项删除, 单击“二维码”将运行qrcode.jsp程序, 自动生成二维码, 如图7所示. “添加新投票用户”栏目可以添加投票用户名和密码.

图4 服务器端项目结构图

图5 opreation.jsp页面运行结果图

图6 detail.jsp页面运行结果图

图7 qrcode.jsp页面运行结果图

3.3 Android客户端设计与实现

Android客户端通过B/S方式来实现, 包含登录验证, 查看投票内容, 进行投票等功能. 项目名称为Voter, 采用Android开发工具Eclipse +Android SDK+ADT进行设计[4], 项目结构图如图8所示.

图8 Android客户端项目结构图

客户端大致运行流程: 用户打开Android客户端之后, 会启动LoginActivity, 输入用户名和密码之后点击登录, 通过验证后会跳转到ListActivity, 如图9所示. 验证失败则会提示“登录失败, 请检查网络或者用户名密码是否正确”. ListActivity页面会显示投票内容, 单击某个选项会进入投票的页面进行投票, 如图10所示.

用户通过验证之后, 服务器的UserLoginservlet.java中将数据库查询获得的结果集转换为json字符串作为响应. 这个json字符串包含了库中的投票信息, Android客户端收到响应字符串后, 要对其进行解析,并转化为一个List集合, 以方便将数据以一个ListView组件显示出来, 注意要在项目中导入相应的jar包. Android端收到字符串后要进行解析, 在Android中解析json用的是Google的Gson来解析, 需要在Android项目中导入“gson-2.1.jar”[5].

所有针对数据库的操作都在服务器端进行, 客户端通过com.hnist.voter.dbutils包中HttpUtil.java提供的queryStringForGet(String url)方法来实现, 该方法会将数据交给相应的Servlet进行处理, 并将结果反馈给客户端. 客户端编程时只需要将要传递到服务器端处理的数据拼凑成一个url, 然后交给queryStringForGet方法处理即可, 例如投票页面中:

图9 ListActivity运行界面图

图10 投票界面图

4 测试

4.1 程序运行

为了快速进行测试, 本系统在真机上进行测试. 因为涉及到客户端和服务器端的通信, 所以需要搭建本地网络. 主机在获得IP地址的情况下, 通过WIFI, 将手机接入网络, 客户端访问服务器使用的IP即主机地址, 修改客户端com.hnist.voter.dbutils包中HttpUtil.java文件, 将语句: public static final String BASE_URL = "http://10.0.2.2:8080/VoteServer/";中的IP地址修改成主机的IP地址. 首先运行MySQL服务,加载数据库, 然后运行服务器端, 最后运行客户端, 客户端就可以和服务器端顺利通信了.

4.2 兼容性测试

Android客户端兼容性测试通过云测试平台Testin进行. 通过对市场占有率较高的105款安卓设备进行测试, 测试结果如图11所示, 兼容机型达到99.05%, 说明兼容性很好.

图11 Testin兼容性测试结果

4.3 安全性测试

Android客户端的安全性测试在腾讯安全实验室进行云安全测试, 测试结果如图12所示.

图12 腾讯云安全测试结果

5 总结

本文介绍了一种基于Android平台手机客户端的投票管理系统, 能较好的弥补传统投票方式的缺陷.其特色是在手机客户端不进行数据的处理, 所有的数据都提交服务器端进行, 增加系统的安全性和处理速度. 本系统已经投入使用, 运行效果好.

[1] 李婷婷.电子投票方案的设计与研究[D].哈尔滨: 黑龙江大学硕士学位论文, 2012: 4~7

[2] 郭全中.二维码的现状与未来[J].新闻与写作, 2013(7)

[3] 张继军.Java Web应用开发技术与案例教程[M].北京: 机械工业出版社, 2013: 238

[4] 方 欣.Android程序设计教程[M].北京: 电子工业出版社, 2014: 3~5

[5] 沈 美, 于 翔.浅析在Android系统中JSON和GSON的用法[J].电脑编程技巧与维护, 2014: 24

[6] 施懿明.Android应用测试与调试实战[M].北京: 机械工业出版社, 2014: 4

[7] 丰生强. Android软件安全与逆向分析[M]. 北京: 人民邮电出版社, 2013: 407

[8] 吴亚峰, 索依娜. Android核心技术与实例详解[M]. 2012: 544

[9] 金 英, 李泽鹏, 张 晶, 等. 多线程Java程序安全行为模型的静态检查方法[J]. 计算机学报, 2009, 32(9): 1856~1868

[10] CayS. Horstmann,GaryCornell. JAVA核心技术卷1: 核心基础[M]. 北京: 机械工业出版社, 2008: 694

[11] CayS. Horstmann,GaryCornell. JAVA核心技术卷2: 高级特征[M]. 北京: 机械工业出版社, 2008: 852

[12] 丰生强. Android软件安全与逆向分析[M]. 北京: 人民邮电出版社, 2013: 407

[13] 梅尔(Reto Meier). Android高级编程[M]. 第2版. 北京: 清华大学出版社, 2010: 509

[14] 陈 文, 郭依正. 深入理解Android网络编程技术详解与最佳实践陈文[M]. 北京: 机械工业出版社, 2013: 362

[15] 柯元旦. Android内核剖析[M]. 北京: 电子工业出版社, 2011: 595

[16] 陈 强. Android实例开发完全手册[M]. 北京: 电子工业出版社, 2012: 775

Design and Implementation of Voting System Based on Android Mobile

FANG Xin, LI Huangfeng, PAN Li
(College of Information & Communication Engineering, Hunan Institute of Science and Technology, Yueyang 414006, China)

This paper introduced a kind of vote management system based on the Android platform, can better make up the defects of traditional voting. System mainly includes three aspects: the design of database, the server and the Android client design. Database on the server side, all involved in the database processing will be submitted to the server, and thus increase the system security and processing speed.

Android, voting, MySQL, server

TP311.52

: A

: 1672-5298(2016)04-0036-07

2015-12-02

湖南省高校科技创新团队支持计划 (湘教通[2012]318号)

方 欣(1971− ), 男, 湖南岳阳人, 湖南理工学院信息与通信工程学院副教授. 主要研究方向: 计算机网络, 信息安全

猜你喜欢

服务器端页面客户端
刷新生活的页面
Linux环境下基于Socket的数据传输软件设计
如何看待传统媒体新闻客户端的“断舍离”?
县级台在突发事件报道中如何应用手机客户端
孵化垂直频道:新闻客户端新策略
大枢纽 云平台 客户端——中央人民广播电台的探索之路
基于Qt的安全即时通讯软件服务器端设计
基于Qt的网络聊天软件服务器端设计
移动页面设计:为老人做设计
基于C/S架构的嵌入式监控组态外设扩展机制研究与应用