(玉林师范学院 计算机科学与工程学院 广西 玉林 537000 )
[摘 要] 通用投票系统在某些场景上存在局限性,本文根据项目开发所需的关键技术进行分析,包括随机账号及二维码生成、投票统计及打印、自适应终端等,解决了定场景下使用投票系统的需求。
[关键词] 投票系统;随机账号;二维码;自适应
1 前言
投票系统是基于网络的一种投票收集及统计的系统,是适应信息化时代的必然需要,比传统的投票统计更为方便、快速、准确。在大部分网站中,网上投票目前是一个比较广泛的一个功能,用户可以在Internet上直接投票,大多针对无记名投票,没有针对性。如江银洋利用 PHP和MYSQL技术实现了对选民的基本资料的管理和相关资料的获取[1]。蔡伟民运用SSH 技术和数据库开发oracle技术详细介绍了通用网上投票系统的设计与实现[2]。以上学者的文章对网上投票系统的设计与实现有很好的示范作用,但是也存在一定的缺点和不足,大多针对大量投票者设计,因为担心注册或者验证等繁琐问题造成用户不积极投票,所以大多以技术手段来确保投票的有效性,很少考虑到具体应用部门的实际需求和具体的业务流程。因此这些通用版的投票系统在具体单位应用的过程中常常出现与实际业务流程不相符的问题,投票过程中没有具体
[[基金项目]2016年国家级大学生创新创业训练计划项目(项目编号:201610606012);指导老师:朱晓姝,教授。]
的针对性,具体的投票人的信息,只是注重与参与的人数和所投的数量,不能够针对特定的人群进行设置投票,使得这种投票方式在某些特定的场合变得不再适用,还具有一定的盲目性,并且系统的功能不够全面,对突发性故障处理不灵活,系统崩溃时自恢复能力不高。
针对这样的问题,本项目就是在于研究出能够针对于某一特定机构的投票调查进行管理,具有针对性的,真正实现一人一票。而且用户投票前后都可以查看投票结果,在投票结果页面可以详细看到每项投票的票数以数字和图形两种形式显示,实现了投票题目管理,防止其他非法用户入侵系统后台。
2 需求设计
本项目设计开发出来的系统,是可以自适应终端的一种便捷的投票系统,在实现功能的同时,还注意了如何使得投票用户更加快捷地清楚如何投票,简单易懂,实现和加强用户对系统的易操作性。在投票期间,网页上显示投票内容固定不变,对于用户投票是由管理员在后台操作,例如,使用一对一投票的形式来达到防止反复投票的虚假行为,调查的准确性大大提高,这样的功能对于学校内的投票是非常有用的;使管理人员能够根据所需,列出投票项目,在较短时间内、以较少精力获得一个比较实用的数据,从而使投票工作系统化、规范化、自动化,提高办公效率。该系统服务器端与移动终端都采用 MVC(Model-View-Controller)和 SQL(Structured Query Language)设计模式。[3]其中,Controller是控制器,在服务器端是处理用户交互的代码,而在移动终端 Activity 就是控制器,View 是视图层,在服务器端是用来显示数据的代码,Model 是模型层,在服务器端和移动终端是对应处理应用程序数据逻辑的代码。SQL 设计模式抽象与封装所有对数据源的访问;负责管理对数据源的连接,以及数据的存取。该系统主要有:后台管理、投票项目管理、前台显示及投票等部分组成,具体如图2-1所示:
图2-1系统流程图
3相关技术
本项目利用ASP.net技术进行程序构架、SQL Server组织管理数据,在实际的工作中,在线投票系统的项目主要是根据投票所需来制定展开。根据系统开发的要求,从实际问题中选取项目作为系统数据库的数据参数。
3.1 生成随机账号
在实际运用和开发中, 生成随机账号有一定的代表性和可比性,具有可靠性好、直观易操作、省时而准确、方便等特点,实现了随机数据间的有机结合,显著提高了工作效率。技术上,是利用特定算法对事先选定的随机种子做复杂的运算产生一组随机的字符,将这串字符当作代码,就能够保证密码拥有足够高的强度而不会被黑客轻松地破解。[4]其相关功能代码如下:
for (int i = 0; i < userCount; i++)
{
try
{
VoteUsers model = new VoteUsers();
model.ProjectId = projectId;
model.UserPwd = Helper.SecureHelper.AESEncrypt(Helper.StringHelper.GetRandString(8,i));
model.STATUS = 1;
if (maxId<=0)
{
model.Sort = i + 1;
}
else
{
if (maxId == projectUserList.Count)
{
model.Sort = maxId + i + 1;
}
else
{
if (tempSort<=maxId){
var pass = false;
for (int j = tempSort; j <= maxId; j++){
tempSort = j;
var projectInfo = projectUserList.Where(o => o.Sort == j).FirstOrDefault();
if (projectInfo==null){
model.Sort = j;
tempSort = tempSort + 1;
pass = true;
break;
}
}
if (!pass){
tempSort = i + 1 + projectUserList.Count;
model.Sort = tempSort;
}
}
else
{
tempSort = i + 1 + projectUserList.Count;
model.Sort = tempSort;
}
}
}
model.UserName = userNamePer + model.Sort.ToString();
model.QrCodeURL = Helper.SecureHelper.MD5(model.UserName + model.ProjectId.ToString());
sb.AppendFormat("{0};", model.UserName);
list.Add(model);
}
catch (Exception)
{
var sss = "";
}
}
3.2 生成二维码技术
本项目创新的地方在于添加了二维码扫描投票功能,可生成包含投票网址和账号密码的二维码,轻松实现手机端快速登录,通过手机扫一扫,即可进入投票,所生成的二维码都是相对应的唯一项目,而且只能够进行一次投票。真正做到自适应终端的效果,达到一人一票,使得投票信息显示一目了然;并且还实现了防止恶意刷票这一功能,即同一用户不能在短时间内为某道题反复投票,以防止投票作弊行为。这可以运用到各种不同的场合,针对特定需要的人群,可以参与投票,例如,学校调查在校学生对某一事物的看法时,运用该投票系统可以有针对性的进行投票统计,而且还能够显示出该投票人的具体信息,具有一定的代表性,这样的投票结果更加准确、直观,具有很高的真实反映数据的情况,这些都是很多的投票系统所不能够达到的;因此,针对于专门的特定的场合,利用本项目所开发的投票系统,再结合利用智能手机联网登陆投票的广泛使用,能够带来更加快捷方便,而且经济性高的数据统计。这就是有别于传统的需要注册用户才能投票的模式,在特定情况下,是一种高效快捷的做法。相关二维码生成图如图3-1所示:
图3-1 二维码生成图
通过一个一般处理程序提供一个生成二维码的方法,在页面的ImageUrl调用生成二维码图像。用户通过上传图像,然后调用.net类库自带的QRCodeDecoder类的decode方法进行解析二维码用户可以根据输入的内容生成二维码,也可以根据上传的二维码图解析出对应的内容。二维码的识别主要是通过对摄像头的调用,启用多线程,对摄像头进行快速的回调应用,当一次回调的图像没有识别出来就进行下一次的回调,直到识别出二维码为止。相关实现代码如下:
foreach (var item in Model)
{
<div class="userInfo">
<div class="qrcodeBox"><img src="@Url.Action("GetQrCode", "ProjectManage", new { id=item.Id })" /></div>
<div class="userText">
<span>帐号:<b>@item.UserName</b></span>
<span>密码:<b>@item.UserPwd</b></span>
<p>@ViewBag.VoteMessage</p>
</div>
<div class="userSelNo"><b> 请记录您的投票项编号以便核对:</b>
@{
for (int i = 0; i < ViewBag.MaxSelect; i++)
{
<span></span>
}
}
3.3 打印技术
在管理信息系统的开发过程中, 经常需要根据特定的需求实现数据报表的打印。在进行投票系统的开发过程中, 经常要实现报表的打印, 报表中的数据来源于数据库的基本表和查询, 基本表中的数据在进行报表打印时不能筛选, 而查询可以筛选数据, 但这个功能是在系统的程序界面中实现的,实现特定条件的报表打印功能[5]。相关功能代码如下:
$("#btnPrint").click(function () {
var ids = [];
$.each($("input[name='ids']:checked"), function (i, r) {
ids.push($(this).val());
});
if (ids.length <= 0) {
alert("请选择要打印的用户");
return;
}
ids.join(",");
var projectId = $("#ProjectId").val();
if (confirm("确定要打印选中的用户?")) {
window.open('@Url.Action("PrintVoteUserInfo", "ProjectManage")' + '?ProjectId='+projectId+'&ids=' + escape(ids), "_black")
}
});
3.4 投票结果模块设计
投票结果模块设计的好坏将直接对应用系统的效率以及系统实现产生一定影响,较好的投票结果模块设计会减少数管理人员的操作时间,提高操作数据的完整性和一致性,使投票结果得到准确而又快速的下发。投票数百分比的计算代码如下:
<div class="main_function">
<h3 class="content_tit">投票结果查询</h3>
<div class="content_btn">
</div>
</div>
<div class="container">
<div class="container2">
<form id="myForm">
<div class="search_div">
<div class="search_condition">
<input id="ProjectId" name="ProjectId" type="hidden" value="@Request.QueryString["ProjectId"]" />
<input type="button" class="btn" id="btnResult" value="导出结果" />
<input type="button" class="btn" id="btnUserResult" value="导出投票明细" />
<input type="button" class="btn" id="btnPrint" value="导出投票签名文档" />
<input type="button" value="返回" id="btnBack" class="btn2 ml15" />
</div>
</div>
</form>
4 全文总结
本文详细阐述了在线投票系统在特定场景下的关键技术的分析,并实现了投票系统的生成二维码、随机账号功能及其它功能。总结而言,本系统具备如下主要优势:个性化投票设置、防止恶意刷票、直观并友好的用户界面以及完善的安全性机制。但由于时间仓促,我们在实现评分设置等方面还存在开发上的不足,这需要进一步在工作中不断的完善,使系统的功能更加完备。
参考文献
[1]江银洋. 应用PHP和MYSQL的网上投票系统设计[C]. 北京:信息与电脑(理论版), 2015.
[2]蔡伟民. 通用网上投票系统的设计与实现[C]. 山东:科技经济导刊, 2016.
[3]张志明, 王辉主. ASP.NET(C#)网站开发[C]. 北京:中国水利水电出版社, 2014.
[4]杨鲲鹏. ASP.NET+SQLServer 网站开发教程[C]. 北京:电子工业出版社, 2015.
[5]姜翠. MVC 设计模式在 ASP.NET 平台中的应用探究[C]. 山西:太原城市职业技术学院学报, 2016.
论文作者:欧文辉* 黄丹丹 李小线 秦凤 温钊
论文发表刊物:《科技中国》2017年3期
论文发表时间:2017/5/27
标签:投票系统论文; 二维码论文; 功能论文; 数据论文; 系统论文; 用户论文; 项目论文; 《科技中国》2017年3期论文;