摘要:本文根据某医院职称评选需求,设计基于B/S架构的局域网投票系统。
【关键词】B/SASP.NET数据库系统
1 系统功能设计
1.1 系统管理员功能
1.1.1 评委权限设定
系统管理员根据评委人数及评委信息,依次输入评委的:登录用户名、密码、名字及客户端IP地址。每个IP地址都与每個登录用户名一一绑定,若IP地址为0.0.0.0,则不受登陆IP限制。在投票前,管理员可修改或删除评委权限。
1.1.2 投票规则设定
首先系统管理员添加投票主题,然后选择投票模式,分为单选或者复选模式,若为复选模式,则设定每轮最大投票票数,最后,通过excel导入或者手工输入添加候选人。
1.1.3 查询打印功能
系统管理员在每轮投票过程中,可以查看到己完成投票评委的数量,未完成投票评委的数量及他们的IP。投票完成后,可以查询到每个候选人的得票数,候选人按照得票数从高到低的顺序排列,并生成柱形图和百分比,最终结果可以以excel表的形式导出。
1.2 评委功能
1.2.1 评委投票
评委需使用系统管理员赋予的账号进行登录,对候选人进行选择,同时可以看到可投票数和剩余票数,选完之后点击确认投票并提交,若需重选可以清除所有勾选。
1.2.2 查看投票状态
评委点击确认投票后,系统自动跳转到投票结果界面,评委可以看到自己所选择的候选人,点击最终提交后,投票结果上传至系统管理服务器。此轮投票结束后,系统跳转至登录界面。
2 系统架构
本系统采用B/S架构进行设计,在这种结构下,一部分事务逻辑在前端实现,但是主要事务逻辑在服务器端实现,Web支持底层的TCP/IP协议,从而彻底解决了异构系统的连接问题。另外,B/S架构统一了客户端,简化了系统的开发、维护和使用,客户机上只要安装一个浏览器,操作相对简单。
3 数据库设计
本投票系统要求数据库服务器稳定、可靠,SQLServer2008能够满足系统的要求。新建数据库VoteManager,包含如下几个表:用户投票历史表TableVoteHistory、投票选项表TableVoteltem、投票项目表TableVoteProject、投票人表TableVoter、投票选题表TableVoteSelection、登陆账户表TableVoteAccount、FKVoteSelectionVoteltem投票选题和选项关联表、投票项目和选题关联表FK_VoteProjectVoteSelection。
4 系统部分重要功能的实
4.1 候选人导入
从excel表格中导入候选人信息,关键代码如下:
stringparh=Path.Combine(AppDomainCurrentDomain.BaseDirectory,stringFormat(”导入{O}.xlsx”,DateTime.NowToString(”yyyyMMddhhmmss”)));
4.2 评委投票
当前若管理员未发起投票,评委登陆后会被告知:当前无任何投票,若管理员己发起投票,评委可以进行投票,并可以知道自己己投票数量和未投票数量,关键代码如下:
if(count>m_maxCount)
{CheckBoxcbx=(CheckBox)sender;
cbx.Checked=false;
stringerrString=”已经超过选票数目”;
Response.Write(strlngFormat(”<script>alert(’{o}’)<script>”,errString>;}
{m_currentCount=count,
Session["CurrentCount"]=mcurrentCount;
intC-mmaxCount-mcurrentCount;
iffc
01
fthis.LabelC,urrentCount.Text=“您己无选票可用。”;)
else
this.LabelCurrentCount.Text=string.Format(”您还有剩余{0)张选票未投。”,c);}
if(this.ButtonCommit.Enabled
false)
{this.ButronCommit.Enabled=tme;)”
4.3 结果查询
管理员查询本轮投票是否完成,若己完成,可以看到所有候选人的得票数量,结果以excel方式导出,关键代码如下:
for(inti=0;i {DataRowrow=m_Table.Rows[i]; Voteltemitem=items[i]; foreach(IGrouping {if(item.ID hGroup.Key) {intc=hGroup.Count();row[”得票数”]=c.ToString();stringp=null; if(totalCount!=01 {p=string.Format("{O:P}“,(double)c/(double)totalC,ount);) else {p=”O%”;}row[”所占比例”]=p;}}} 5 结语