网上投票系统
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
中原工学院软件学院
软件工程实践二设计任务书
网上投票系统
摘要
科技在发展,人类在进步,网上投票几乎完全取代了古老的传统投票,主要是因为网上投票系统有很多传统投票方式不可比拟的优势。
首先,它可以在很短的时间内,通过互联网将不同时间,不同地域的用户投票组合到一起,并进行结果反馈,这是传统的投票方法完全做不到的;其次,在线投票系统的效率要比以往的传统投票方法高很多,网上投票不但省去了投票与计票环节的人力成本,还可以节省很多时间以用作处理其他更重要的事情;综上所述,在线投票系统有着快捷、经济、方便、省时省力等诸多优点都注定它将是未来投票方式的主流。
网上投票系统可以用来统计用户对某个主题或热门话题的意见。
管理员也可以通过投票的方式了解用户的看法,或者通过网上投票系统这个媒介去了解用户的思想、意见,并通网上投票系统的结果反馈改进自己的不足。
国家领导人也可以通过网上投票系统来调查民众对某一项新政策的意见,进而做出更明智的决策。
我们小组做的投票系统也具有极大的灵活性,投票类型分为单选投票和多选投票。
管理员可以在线设计不同的投票主题供用户进行投票。
系统分为前台和后台两部分,前台主要是对普通用户开放。
普通用户将实现注册、投票、重选等操作;后台主要作用是管理员实现登录、投票管理、用户管理等操作。
依据前台和后台的不同权限需求,在线投票系统主要分为普通用户和管理员两个功能模块。
普通用户模块将实现用户注册、用户登录、用户投票以及投票重选和查看投票结果等功能。
管理员模块将实现管理员登录、发布新投票、撤消投票、查看所有投票、编辑和删除新投票以及用户管理等功能。
关键词:网上投票、主流、用户、管理员
目录
网上投票系统 (1)
摘要 (1)
第1章需求分析 (4)
1.1概述 (4)
1.2问题描述 (4)
1.3技术分析 (5)
1.3.1 用户类型 (5)
1.3.2 运行环境 (5)
第二章系统分析与设计 (6)
2.1系统结构 (6)
2.2系统功能模块的设计 (8)
2.3系统协作图 (10)
2.4系统可行性分析 (13)
2.4.1 技术可行性 (13)
2.4.2 经济可行性 (13)
2.5项目成员及工作计划 (14)
2.6用例及用例规约 (15)
2.7模块功能需求 (15)
2.7体系结构设计 (16)
2.7.1 设计原则 (16)
2.7.2 总体结构 (16)
2.7.3 总体设计说明 (17)
2.7.4 整体工作流程描述 (17)
2.7.5 接口描述 (17)
2.7.6 文件命名规则及包结构描述 (18)
第三章数据库的分析与设计 (19)
3.1数据库的需求分析 (19)
3.1.1 E-R图 (19)
3.1.2 数据字典 (20)
3.2数据库的逻辑结构设计 (21)
3.2.1 数据模型的优化 (21)
第四章实现与测试 (23)
4.1系统的详细设计与实现 (23)
4.1.2 管理员的登录模块设计 (23)
4.1.3 普通用户管理模块设计 (25)
4.1.4 投票项目管理模块设计 (28)
4.2系统测试 (32)
4.2.1 测试概述 (32)
4.2.2 测试用例 (33)
4.2.3 测试结果 (34)
4.2.4 大概设计 (34)
第5章结束语 (36)
附录A: 附加主要页面及代码 (40)
第1章需求分析
需求分析是对该系统所具有功能的大致介绍,包括设计该系统的目的和背景、系统所面向的用户类型,系统所需的运行环境和功能描述等内容。
1.1 概述
原始的投票管理基本上是人工操作,效率低下,缺乏方便性,网上投票管理系统运用计算机和其他附加设备,不再需要手工操作,基本上是全自动化,能够节省人力,大大的提高了效率。
使投票变得简单快捷。
能够在极短的时间内总结出所需调查人的意见结果。
大大提高了投票的质量。
各种网上投票系统随处可见,意见调查,用户信息统计,经营情况调查等都可以作为投票的内容,网上投票系统凭借其方便快捷等特点,已经成为互联网资源中不可缺少的一部分,并且,随着网络技术的发展,网上投票系统的作用将会越来越大。
并且在投票的过程中网上投票系统对网络的要求也越来越高。
它要求信息保密性,投票者有保密的要求,如用户名及投票内容被人知悉,就对用户的隐私权构成了侵害,因此在网上投票系统中一般均有匿名投票的要求。
同时还要求投票者身份的有效性,在投票前,首先要确认投票者身份的合法性,这样才能保证统计结果的真实可靠。
1.2 问题描述
本投票系统主要分为普通用户和管理员两部份。
普通用户登录后可以进行投票和查看投票结果;普通用户投票时可以选择不同的主题分类进行投票。
选择分类后,主页显示该分类的所有投票主题。
点击进入主题投票后,显示该主题的名称及选项内容,然后用户选择选项,提交表单。
主页还提供投票结果查询的链接管理员登录后可以进行管理投票主题和管理投票项。
“投票”用例主要的功能是普通用户对某个投票主题进行投票,在用户进行投票时检测用户是否已经投票了该主题,保证每个用户都一个主题只能投一次票。
“查看投票结果”用例负责为用户提供某个主题的投票情况,包括每个选项的票数以及统计图。
“登录”负责核对管理员的用户名与密码,保证管理员身份的正确性。
管理员管理投票信息,包括主题、选项的添加、删除和查看。
管理员登陆后台管理系统后可以管理投票信息;同时可以查看和删除主题及选项;也可以查看不同类别的主题的投票结果。
1.3 技术分析
针对实现的各个模块的需求,系统定义为WEB项目,在线投票系统的设计发开过程中主要用了JSP技术,需要熟练掌握,JSP使得页面的动态内容与它的表示进一步分离。
JSP的设计迎合了两个不同的技术层面:页面的图形设计和创建动态内容的软件开发。
JSP 的主要特性包括:JSP是基于文本的文档,用来处理客户端请求(Request)和构造响应(Response),构造Server端访问的对象。
其中用到的工具还有有:JDK 6.0、MyEclipse、MySQL、Tomcat等。
采用了JDBC对数据库的连接操作,对数据库进行设计,对系统各个模块进行设计以及实现,前台用JSP+html 完成数据的展现。
1.3.1 用户类型
用户:面向所有在线人员,拥有正确的用户名和登录密码。
管理员:管理用户和投票主题,拥有正确的登录帐号和密码。
1.3.2 运行环境
(1)硬件环境:计算机一台,如表4-1-1所示。
表1-1-4 运行环境硬件配置
(2)软件环境:Tomcat服务器和Windows XP操作系统。
第二章系统分析与设计
网上投票已经成为当今投票的主要投票方式,也是未来发展的主要趋势。
网上投票系统的用户只需运用互联网操作即可,此系统在网站中的使用频度非常的频繁,因此该系统属于实用型网站,需要对数据的处理,比如对投票票数的统计并把结果反馈给投票者,故对数据的及时更新要求较高,保证数据的真实性。
该系统在任何操作系统下都可以运行。
该系统的操作包括:单选/多选投票、删除投票、添加投票、查看投票。
单选投票:用户只能从多个选项中选取一项进行投票。
多选投票:用户可以从多个选项中选取多项进行投票。
删除投票:管理员对投票主题进行删除。
添加投票:管理员对投票主题进行添加。
查看投票:提供用户查看当前投票的状况。
2.1系统结构
网上投票系统总体功能模块包括普通用户模块和管理员模块这两个模块。
1.普通用户模块
(1)用户注册:普通投票用户必须先通过用户注册,然后登陆才可以进行投票;
(2)登录:注册成功后,输入用户名和密码即可登录系统;
普通用户有3个功能,功能如下图所示:
图2-1-1 普通用户功能图
2.管理员模块
(1)发布新的投票主题;
(2)用户管理,管理员可以增加和删除普通用户,或者更改普通用户密码;
(3)查看所有投票;
管理员模块可以实现添加投票话题、删除投票话题、增加投票项、删除投票项、公布结果和查看投票结果等功能,如下图所示。
图2-1-2 管理员功能图
3.系统的流程图:
在线投票系统的流程图包含了该系统的投票原理与主要制作方法。
从流程图上我们可以看到在线投票系统需要经过登录、显示投票项、取得投票参数、累加投票数、将投票写入数据库和显示投票结果等,如下图所示。
图2-1-3 管理员图
2.2 系统功能模块的设计
1.用户投票模块
2.管理员登陆模块
3.管理员添加投票模块
4.管理员删除投票模块
2.3 系统协作图1.用户投票
2.用户添加投票
3.管理员登陆
4.管理员添加投票
5.管理员删除投票
2.4 系统可行性分析
2.4.1 技术可行性
(1)操作系统:Windows xp、win7;
(2)数据库管理系统:MySQL;
(3)服务器:Tomcat 6.0
(4)编程工具:编程软件为MyEclipse6.5,编程语言选用javaweb/Jsp。
2.4.2 经济可行性
1、系统开发费用
人员费用:本系统开发期为三周,试运行一周。
开发期需要开发人员3人,试运行期需要开发人员1人。
设备费:本系统所需的硬件设备费。
2、系统运行费用:每年需要对系统进行维护,设备进行维护,材料费。
3、效益:提高工作效率并且减少了工作人员。
2.5 项目成员及工作计划
图2-5-2 进度计划图
2.6 用例及用例规约
用例的概要描述如下表所示
图2-6-1 用例图
2.7 模块功能需求
各个模块所对应的需求如下:(1)投票首页模块:该模块面向对象为所有访问页面用户,其中包括:当前系统时间的显示,实现截止时间的要求;管理员信息的查询,登录用户信息的显示;对所喜欢的主题进行投票,并对结果进行查询。
(2)投票实现模块:此模块供用户对投票项目进行投票所用。
在投票首页上,将会显示最近一个投票项目和其他投票列表,用户可自由选择那些尚未过期的项目进行投票。
投票操作具体为:用户选择一个选项,提交,即可投票成功,此时页面会跳转至显示投票结果的页面。
(3)投票结果模块此模块供用户查看该项目已有的投票情况。
投票结果显示页面会显示相应投票选项的得票率和该项目总的得票数。
(4)管理员登录模块该模块用于管理员登录。
登录验证后,管理员才可以对投票信息进行维护。
如增删投票主题等。
(5)投票管理模块此模块为管理员操作的模块。
管理员登入系统后,可对本系统的所以投票项目进行相应的管理,如:添加投票项目,删除投票项目等。
2.7 体系结构设计
2.7.1 设计原则
模块化:本系统采用模块化的设计,如每个类中的具体方法,由一个方法块构成,可以方便的被系统中的其他类或者方法调用以实现预定的功能;
抽象类:本系统还采用许多抽象类和接口,以实现访问层与数据库之间的连接;
信息隐藏:系统代码编写过程中隐藏了帐户密码,这样可以确保使用时的安全性。
高内聚:系统中的每个类都具有相应的独立性和功能特性,其内都有各自具体的方法来实现不同的功能;
低耦合:各个类之间有一定的联系,但是依赖性不大,可以避免因为子程序之间的复杂关系产生更多的错误;
简单化:本系统设计的界面清晰,简明,性能可靠,操作简单;
实用性能:该系统可以满足校园内进行的各种投票选举操作。
2.7.2 总体结构
系统模块划分如图2.7.2 所示:
图2.7.2 :功能结构图
各子系统主要功能如下:
1)登录:用户输入正确的账号和密码,进入系统;
2)投票;普通用户对正在进行的项目进行投票;
3)新建:管理员用户发起一个新的投票项目;
4)查询:普通用户查询本人帐号以前的投票记录,管理员用户查询已经停止的投票项目;
5)恢复:管理员用户对已经结束的投票项目进行恢复至正在进行;
2.7.3 总体设计说明
表示层:应用程序的用户界面部分。
为了方便操作采用统一简明的界面与用户交互登陆后即可对账户进行各种操作。
;
数据层:有数据的存储及对数据的存取操作。
以及数据源正确连接。
服务器层:对数据库中的数据进行各种操作。
2.7.4 整体工作流程描述
此B/S体系结构中服务器中主要功能:
(1)从客户端接收数据请求。
(2)处理数据请求。
(3)格式化结果并传送给客户机。
(4)执行完整性检查。
(5)提供并行访问控制。
2.7.5 接口描述
用户接口:本系统采用图形用户接口,以鼠标和键盘为用户接口,方便用户对信息数据的操作,此外通过登录账号的类别来满足用户的信息安全。
外部接口:无。
2.7.6 文件命名规则及包结构描述
文件命名规则为:
1)尽量使用了完整的英文描述符,文件名由英文单词组成,每个单词的首字母大写,最好不要超过4个单词。
Java文件的文件名要与程序中的public类名
相同;
2)采用了适用于相关领域的专门用语;
3)采用了大小写混合使名字可读;
第三章数据库的分析与设计
数据库设计是软件开发中的重中之重,是对系统数据全面的、详细的分析。
数据库设计的好坏直接关系到整个项目设计的效率的高低,关系到设计的稳定性。
根据网上投票系统不同模块之间的联系和前期的设计目的与需求,设计了三个不同的数据表,它们分别是用户表、投票选项表和投票主题表。
3.1 数据库的需求分析
需求分析简单地说就是分析用户的要求。
需求分析是数据库的起点,需求分析的结果是否准确地反映了用户的实际要求将直接影响到后面各个阶段的设计,并影响到设计的结果是否合理和实用。
(1)信息要求用户从数据库中得到想要投票支持的主题。
(2)处理要求系统将投票结果进行保存,并对最终结果进行统计展示给用户。
(3)安全性和完整性要求管理员可以对项目进行添加和删除操作,普通用户不能操作。
3.1.1 E-R图
图3-1 E-R图
3.1.2 数据字典
数据字典
1、数据项
数据项描述={数据项名,数据项含义说明,别名,数据类型,长度,取值范围,取值含义,与其他数据项的逻辑关系}
表3-1-2 普通用户数据
表3-1-3 管理员数据
表3-1-4 投票信息数据
3.2 数据库的逻辑结构设计
3.2.1 数据模型的优化
1、用户表包括所有用户的各种信息,如用户的编号、姓名密码等详细数据并规定了每个字段的类型,如表所示。
表3-2-1 普通用户信息表(users)
2、管理员表包括管理员的各种信息,如管理员的编号、姓名、密码等详细数据并规定了每个字段的类型,如表所示。
表3-2-2 管理员信息表(manager)
3、投票信息表包括每个投票选项的基本信息,如投票编码、问题ID、投票选项和投票选项各选项所得票数等信息,同时此表还规定了字段类型和长度,具体的数据说明如下表所示。
表3-2-3 投票信息表(vote)
第四章实现与测试
4.1 系统的详细设计与实现
在软件总体设计之后,将进行软件的详细设计。
详细设计是软件设计的重要阶段,详细设计目的是对该项目进行详细设计,在概要设计的基础上进一步明确系统结构,详细地介绍系统的各个模块,各个模块的功能,为进行后面的实现和测试做准备。
本次课题经过讨论,确定V oter类、Recoder类、Manager类、Project类、User类、ProRecoder类、UserRecoder类七个基本类。
其中Voter类包括voterId,voterAge,voterIndex,voterName,voterSex,voterWord,voterProject,voterBool八个属性;Recoder类包括recoderId,chooseName,chooseProject三个属性;Manager类包括managerId,managerName,managerPassword三个属性;Project类包括proId,proName,proNumber,proShow,proBool五个属性;User类包括id,password,name三个属性;ProRecoder类包括recProId,recProName两个属性;UserRecoder类包括rId,rIndex,rName,rProject,rChooseName,rBool六个属性。
对每个类都实现增加、删除、修改、查询方法。
4.1.2 管理员的登录模块设计
程序页面名称:admin_login.html
程序功能:实现管理员的登录,以便进行投票主题的管理。
权限范围:整个投票系统的管理员
输入数据:管理员账号和密码
输出数据:无
程序简单逻辑:
此页面为一个HTML页面,主要用到表单,表单中用到单选按钮用来选择登录身份,用户名和密码为文本域,登录是提交按钮。
处理登录的后台用一个JSP页面实现,具体实现如下:
(1)从表单获得单选按钮的值,获得用户名和密码。
(2)单选按钮的值有0,1两个值,对此用if语句判断,若为0执行用户登录的密码验证,若为1执行管理员登录的密码验证。
管理员登录的用户名和密码验证:先在数据库中创建管理员的表,表中有用户名和密码,通过一个封装好的JDBC链接数据库的类,创建对象后实现和数据库的连接,通过用
户类中的验证方法实现从用户表中查找密码和用户名若没有,则返回的结果集为空,返回值为false,若存在,则有结果集,返回值为true。
通过对验证函数的返回值的判断,若为TRUE跳转到投票后台管理系统的页面(admin.jsp),若为false则跳转到用户名和密码不匹配的信息页并提示错误此时跳到error.jsp。
对于用户名和密码为空的情况也做了处理,若为空登录,则通过Session给登录界面返回用户名和密码不能为空的信息。
输入管理员用户名和密码,回车确认。
程序流程图:
图4-1-2管理员登陆
4.1.3 普通用户管理模块设计
(1)在后台投票管理系统的主页面中,可以单击功能导航区中的用户信息管理按钮点击进入用户信息页面。
在每个用户信息后面都有一个删除按钮,单击删除按钮,则可删除该条信息并可以提示删除成功在后台投票管理系统的主页面中,可以单击功能导航区中的用户信息管理按钮点击进入用户信息页面。
在每个用户信息后面都有一个删除按钮,单击删除按钮,则可删除该条信息并可以提示删除成功。
(2)点击用户信息维护进入用户信息显示界面。
此界面是一个JSP页面,包含HTML 信息和Java代码。
HTML中主要有表格和表单,表格里的内容是界面的内容。
用封装的JDBC类连接数据库,将SQL查询语句select * from users作为参数调用类中的方法,最终实现从数据库提取所有用户的信息。
获得信息后将每个属性值放入变量中,将变量放入需要显示的表格中,这样就可以实现如图的效果了。
每个用户信息后的删除按钮,是用一个提交按钮和ID的隐藏域实现的。
点击此删除按钮可以实现将本条记录删除的功能。
处理删除动作的JSP页面,从表单中获取隐藏域的ID值,然后执行SQL语句"delete from users where id=?"从数据库中删除该条记录。
删除完成后用一个Session返回用户信息显示界面一个删除成功的信息,并将现有的用户信息再次显示出来。
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<meta http-equiv="pragma" content="no-cache">
<meta http-equiv="cache-control" content="no-cache">
<meta http-equiv="expires" content="0">
<meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
<meta http-equiv="description" content="This is my page">
<!--
<link rel="stylesheet" type="text/css" href="styles.css">
-->
</head>
<body>
<tr><td valign="top">
<br/><br/>
<form action="ManagerListV oterServlet?method=addV oter" method="post">
<table width="90%" border="1" cellspacing="0" border-color="white" align="center" cellpadding="4" bgcolor="d5effe">
<tr bgcolor="#20a8f0"><td colspan="2" align="center" height="30"><font size="2" color="white"><b>添加投票人</b></font></td></tr>
<tr><td width="30%" align="right"><font size="2"><b>编号</b></font></td><td><input type="text" size="30" maxlength="30" name="id"/></td></tr> <tr><td width="30%" align="right"><font size="2"><b>姓名</b></font></td><td><input type="text" size="30" maxlength="30" name="name"/></td></tr> <tr><td width="30%" align="right"><font size="2"><b>性别</b></font></td><td><input type="text" size="30" maxlength="30" name="sex"/></td></tr> <tr><td height="30" align="right"><font size="2"><b>简介</b></font></td><td><textarea cols="30" rows="3" name="word"></textarea></td></tr> <tr><td width="30%" align="right"><font size="2"><b>年龄</b></font></td><td><input type="text" size="30" maxlength="30" name="age"/></td></tr> <tr><td width="30%" align="right"><font size="2"><b>投票主题</b></font></td><td><input type="text" size="30" maxlength="30" name="project"/></td></tr>
<tr>
<td colspan="2" height="30" align="center"><input type="submit" value="提交"/>
<input type="reset" value="重填"/>
</td>
</table>
</form>
</td></tr>
<a href="managerListV oter.jsp">返回上一页</a>
</body>
</html>
4.1.4 投票项目管理模块设计
(1)添加投票主题模块:
程序页面名称:addvote.jsp
程序功能:通过管理员认证进入添加投票项目页面,填写需要添加的投票主题的内容,如:根据投票的主题进行设置选项,填写完毕后提交即可,新的投票主题就会显示在主页面上。
权限范围:系统管理员
输入数据:支持的某投票主题的名称。
输出数据:投票系统首页,并且可以看到刚刚添加的新投票项目作为最新投票项目在投票项目列表的最后一个。
程序简单逻辑:
在系统首页时,管理员先登录进入管理系统,再通过身份认证,即可进入添加投票项目页面;
该页面有一个对投票主题进行添加的文本框,主要就是对投票项目内容的详细添加;填表完成后提交,此时转入数据库后台处理。
完成后,数据库的vote表中就多了一条记录,添加新项目页面也转回投票系统首页,可供用户继续进行其他操作。
界面及代码:
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<base href="<%=basePath%>">
<title>My JSP 'add.jsp' starting page</title>
<meta http-equiv="pragma" content="no-cache">
<meta http-equiv="cache-control" content="no-cache">
<meta http-equiv="expires" content="0">
<meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
<meta http-equiv="description" content="This is my page">
<!--
<link rel="stylesheet" type="text/css" href="styles.css">
-->
</head>
<body>
<tr><td valign="top">
<br/><br/>
<form action="ManagerListProjectServlet?method=addProject" method="post">
<table width="90%" border="1" cellspacing="0" border-color="white" align="center" cellpadding="4" bgcolor="d5effe">
<tr bgcolor="#20a8f0"><td colspan="2" align="center" height="30"><font size="2" color="white"><b>新建选举项目</b></font></td></tr>
<tr><td width="30%" align="right"><font size="2"><b>项目号</b></font></td><td><input type="text" size="30" maxlength="30" name="id"/></td></tr> <tr><td width="30%" align="right"><font size="2"><b>可选人数</b></font></td><td><input type="text" size="30" maxlength="30" name="number"/></td></tr>
<tr><td width="30%" align="right"><font size="2"><b>项目名称</b></font></td><td><input type="text" size="30" maxlength="30" name="name"/></td></tr> <tr><td height="30" align="right"><font size="2"><b>项目简介</b></font></td><td><textarea cols="30" rows="3" name="show"></textarea></td></tr> <tr>
<td colspan="2" height="30" align="center"><input type="submit" value="提交"/>
<input type="reset" value="重填"/>
</td>
</table>
</form>
</td></tr>
<a href="managerListProject.jsp">返回上一页</a>
</body>
</html>。