网络选举投票系统.docx
《网络选举投票系统.docx》由会员分享,可在线阅读,更多相关《网络选举投票系统.docx(70页珍藏版)》请在冰豆网上搜索。
网络选举投票系统
中原工学院软件学院
软件工程实践一设计任务书
姓名
吴文文
Java专业104班
题目
网络选举投票系统的开发
设
计
任
务
设计一个功能完善的网络选举投票系统,该程序界面简洁大方,按照用户的需要进行投票项目的管理,具体功能如下:
1.学生端登录,输入正确的账户和密码,登录成功后进行投票和查询历史记录的操作。
2.管理员登录,输入正确的账户和密码,登录后可对各种投票项目进行管理。
开发工具:
MyEclipse6.5
数据库:
Mysql
使用技术:
jdbc、servlet、filter
开发环境:
WindowsXP
时
间
进
度
第1周(2012.9.10—916):
前三天听老师讲解一些有关struts2的知识,并且下午进行联系。
并选好项目,完成软件的需求分析,总体设计和详细设计,并构造出一个大体的软件模型,构造出其体系结构,画出其系统模块图,并写出初步的文档;
第2周(2012.9.17—9.23):
主要是对系统进行详细设计,划分出具体的功能模块,根据模块涉及对软件的进行界面设计,编码及单元测试;
第3周(2012.9.24—9.28):
写我们的三级报告
原主
始要
资参
料考
与文
献
[01]刘京华JavaWeb整合开发王者归来[M]:
清华大学出版社.
[02]张帆Java范例开发大全[M]:
清华大学出版社.
[03]李钟尉、陈丹丹Java开发实战1200例[M]:
清华大学出版社.2006.6
[04]千丽霞Java项目开发案例全程实录[M]:
北京.清华大学出版社.2004.5
[05]孙卫琴Tomcat与JavaWeb开发技术详解[M]:
电子工业出版社.2005.2
指导教师签字:
年月日
网络选举投票系统
摘要
随着Internet技术的快速发展,如今很多服务行业都需要进行服务的反馈,以便更好的提高产品的质量和作出更好的服务,投票系统就是一个反馈信息的软件,通过它可以更好更快捷的反馈信息供服务商参考,同时在校园内需要进行各种投票项目进行教师和学生间的互动,以供教师了解学生的最新动态,同时通过网络投票系统在各种精选活动中可以大大提高公平性与公正性,采用计算机机票提高了选举效率。
因此开发一个供客户反馈信息,供师生间进行交流的平台是必要的。
(1)方便的操作。
原有的手工投票管理基本上是人工管理,效率低下,缺乏方便性,在线投票管理系统运用计算机及其他附属设备,不再需要人工操作,基本上实现自动化,能够节省人力,最大限度的节省各种宝贵的资源,大大提高效率。
(2)友好的界面。
友好的用户界面会给人一种亲切感,在使用起来不会觉得沉闷,效率大大提高。
关键词:
网络;投票;JSP
第1章项目分析
项目分析是对该系统具有功能的大致介绍,包括设计该系统的问题描述、技术分析、该系统的工作进度计划等内容。
项目分析是对该系统的总体概述。
这次我们做的系统名称是网络选举投票系统。
1.1问题描述
当前正处于信息时代的繁荣时期,消费者对网站和企业的要求逐渐由单纯对质量的要求转变为不仅要求质量同时要求用户的体验和意见反馈及处理的方式。
在这样的情况下,一款专门应用与校园网络的网络选举投票系统就显的极为重要。
网络投票选举系统主要用来进行校园的各种投票和校园网的热点话题的意见收集与反馈,通过这些数据使教师尽快掌握学生的思想动态和各种教学需求,同时大大提高各种用于活动的竞选效率。
投票系统具有极大的灵活性,可以进行单选或多选投票,自动记录登录者的ID防止恶意刷票的出现,管理员也可以在线设计不同的投票主题供用户进行投票。
1)普通用户登录后即可对当前进行的投票项目进行投票。
2)管理员登录后即可对当前正在进行的投票项目进行结束,删除,添加等操作。
用户:
面向所有在校生,拥有正确的学号和登录密码。
管理员:
学校负责学生方面工作的教师,拥有正确的登录帐号和密码。
1.2技术分析
Java是一种动态加载和运行的语言。
也就是说当应用程序持有一个类的地址(CLASSPATH)和名称(包名和类名)的情况下,可以在程序运行期间任何时候加载这个类,并创建和使用该类的对象。
Servlet就是基于这个机制与Web容器融合在一起的。
目前已知的所有支持JavaServlet的Web容器都是采用Java开发的。
当Web容器接收到来自客户端的请求信息之后,会根据URL中的Web元件地址信息到Servlet队列中查找对应的Servlet对象,如果找到则直接使用,如果没有找到则加载对应的类,并创建对象。
也就是说,Servlet对象是在第一次被使用的时候才创建的,并且一旦创建就会被反复使用,不再创建新的对象。
所有创建出的Servlet对象会在Web服务器停止运行的时候统一进行垃圾回收。
为了解决客户端请求地址与JavaServlet之间对应关系问题,Web容器需要一个用来描述这种对应关系的文件,一般是web.xml文件。
如果一个Web应用程序中存在很多个Servlet,那么web.xml会变得非常庞大。
在Servlet3.0规范推出之后,允许在Servlet代码中使用声明式语法来代替web.xml中的描述信息,这才让web.xml瘦身下来。
所有的程序运行都需要有一个必要的运行环境。
这个环境可以是软件,也可以是硬件,或者是软件和硬件的结合。
比如说Windows操作系统需要运行在硬件基础上;Office软件需要运行在操作系统上。
并且程序与运行环境之间会有一定的数据交换,比如操作系统会将运行指令传递给硬件,硬件也会将指令运行结果传递给操作系统。
JavaWeb程序也需要一个运行环境才能够执行。
这种运行JavaWeb程序的环境被称为Web容器,JavaWeb程序与Web容器之间存在数据交互。
目前主要存在两种类型的JavaWeb容器:
一种是独立的JavaWeb容器,在这种容器里面只能运行Web程序,这种容器一般也叫做Web服务器,如Tomcat等;另一种是与其他JavaEE容器混合在一起的Web容器,Web容器负责运行Web程序,其他容器负责运行EJB等程序,如WebLogic等。
当用户通过浏览器等Web客户端软件向服务器发出一个请求之后,首先接收到这个请求的是Web容器,Web容器会将请求信息封装到一个HttpServletRequest类型的Java对象中,并将对象传递给JavaWeb程序。
对于每个请求,Web容器还会创建一个HttpServletResponse类型对象,该对象的作用是用来保存需要返回到浏览器等客户端的内容。
JavaWeb程序可以从HttpServletRequest提取用户发出的请求信息,进行适当的处理之后,将处理结果放置HttpServletResponse中,然或由Web容器解析HttpServletResponse对象内容,并将解析结果以浏览器能够识别的HTML等格式返回给浏览器等客户端。
在这个过程中,HttpServletRequest和HttpServletResponse就如同两条渡船,负责在Web容器和JavaWeb程序之间传递信息。
需要注意的是,这两个对象仅存在于Web容器和JavaWeb程序当中,与浏览器没有关系。
1.3工程进度计划
表1.3.1时间进度表
模块名称
开发时间
编码人员
后台集成、调试
登陆界面
1
宋晓梅
所有人员调试时间
为1天
管理员功能模块
5
杜春静
用户功能界面
5
吴文文
恢复项目模块
5
杜春静
终止项目模块
5
杜春静
添加项目模块
5
杜春静
浏览项目模块
5
杜春静
添加用户模块
5
宋晓梅
删除用户模块
5
宋晓梅
添加参选者模块
5
陈梦梦
删除参选者模块
5
陈梦梦
用户投票模块
5
吴文文
用户查看个人投票历史记录模块
5
吴文文
退出模块
1
陈梦梦
第2章系统分析与设计
网络投票选举系统主要用来进行校园的各种投票和校园网的热点话题的意见收集与反馈,通过这些数据使教师尽快掌握学生的思想动态和各种教学需求,同时大大提高各种用于活动的竞选效率。
该系统立足课本,运用平时课本所学知识,来完成基本操作,并适当延伸知识点,培养自己动手的能力。
并能更好的提高编程水平。
2.1系统分析
需求分析及系统设计说明:
管理员拥有对参选者的voter表、用户的user表添加删除的功能,对项目的project表恢复终止的功能,用户有对个人投票记录userrecoder表查询的功能,存储历史项目的prorecoder表,参选人项目报名的recoder表增删删除的功能。
用户有对项目信息project表及用户记录信息userrecoder表有查看的功能。
2.1.1参与者
本项目的参与者都有:
管理员、用户、参选者
2.1.2用例及用例规约
表2.1.2.1系统用例汇总表【A管理员B用户】
编号
用例编号
用例名称
参与者
备注
1
UC-01
登录系统
A、B
2
UC-02
添加项目
A
3
UC-03
终止项目
A
4
UC-04
恢复项目
A
5
UC-05
添加参选者
A
6
UC-06
删除参选者
A
7
UC-07
添加用户
A
8
UC-08
删除用户
A
9
UC-09
查看项目
A
10
UC-10
查看个人投票记录
B
11
UC-11
投票
B
12
UC-12
退出系统
A、B
表2.1.2.2用户查看个人投票记录用例规约
用例编号
UC-10
用例名称
查看个人投票记录
参与者
用户
功能描述
查看本人投票记录
前置条件
用户成功登录
基本事件流
(1)点击“投票记录”按钮
(2)系统通过数据库查询此帐号的投票情况
(3)显示在用户界面上
备选事件流
E-1:
如无法进行请尝试刷新
后置条件
如果用例执行成功,系统发生相应改变。
如果执行不成功,系统状态不变。
业务规则
数据库中需存在要查询的用户
表2.1.2.3用户投票用例规约
用例编号
UC-11
用例名称
用户投票
参与者
用户
功能描述
对候选人进行投票
前置条件
用户成功登录
基本事件流
用户进行投票
备选事件流
若用户填写信息错误则不可登陆系统
后置条件
如果执行成功,对应候选人票数增加1。
如果执行不成功,候选人票数不变。
业务规则
用户必须成功进入系统
2.1.3用例图
图2.1.3.1用例图
2.2系统设计
本系统前台采用MVC框架,采用jsp+servlet+filter本着易用、可靠、实用性原则,采用模块化设计,将系统分解为管理员和用户两个模块。
管理员管理权限和角色、登录以及项目的相关操作,用户则是对参选者进行投票。
2.2.1顺序图
图2.2.2.1用户投票顺序
图2.2.2.2用户查看个人投票记录顺序图
2.2.2类图
图2.2.2.1Dao包业务层类图2.2.2.2voter实体类
图2.2.2.3管理员实体类图2.2.2.4Redocer实体类
图2.2.2.5Projecter实体类图2.2.2.6UserRecoder实体类
图2.2.2.7User实体类图图2.2.2.8ProRecoder实体类
图2.2.2.9过滤器类图
图2.2.2.10历史项目控制类图
图2.2.2.11用户查看个人投票记录控制类图
图2.2.2.12管理员查看历史项目控制类图
图2.2.2.13管理员查看历史项目类图
图2.2.2.14管理员查看项目控制类图
图2.2.2.15管理员管理用户控制类图
图2.2.2.16管理员管理参与者控制类图
图2.2.2.17管理员信息控制类图
图2.2.2.18管理员控制类图
图2.2.2.19管理员查看项目类图
图2.2.2.20用户查看项目类图
图2.2.2.21参选者控制类图
图2.2.2.22数据库连接类图
2.2.3系统体系结构设计
设计原则:
模块化:
本系统采用模块化的设计,如每个类中的具体方法,由一个方法块构成,可以方便的被系统中的其他类或者方法调用以实现预定的功能;
抽象类:
本系统还采用许多抽象类和接口,以实现访问层与数据库之间的连接;
信息隐藏:
系统代码编写过程中隐藏了帐户密码,这样可以确保使用时的安全性。
高内聚:
系统中的每个类都具有相应的独立性和功能特性,其内都有各自具体的方法来实现不同的功能;
低耦合:
各个类之间有一定的联系,但是依赖性不大,可以避免因为子程序之间的复杂关系产生更多的错误;
简单化:
本系统设计的界面清晰,简明,性能可靠,操作简单;
实用性能:
该系统可以满足校园内进行的各种投票选举操作。
系统模块划分如图2.1所示:
图2.2.3.1功能结构图
各子系统主要功能如下:
1)登录:
用户输入正确的账号和密码,进入系统;
2)投票;普通用户对正在进行的项目进行投票;
3)新建:
管理员用户发起一个新的投票项目;
4)查询:
普通用户查询本人帐号以前的投票记录,管理员用户查询已经停止的投票项目;
5)恢复:
管理员用户对已经结束的投票项目进行恢复至正在进行;
总体设计说明:
表示层:
应用程序的用户界面部分。
为了方便操作采用统一简明的界面与用户交互登陆后即可对账户进行各种操作。
;
数据层:
有数据的存储及对数据的存取操作。
以及数据源正确连接。
服务器层:
对数据库中的数据进行各种操作。
此B/S体系结构中服务器中主要功能:
(1)从客户端接收数据请求。
(2)处理数据请求。
(3)格式化结果并传送给客户机。
(4)执行完整性检查。
(5)提供并行访问控制。
2.3数据库设计
数据是企业运作过程中不可缺少的重要部分,建立自己的数据资料库是提高企业整体竞争力的关键因素。
对于程序而言,安全完整地保存客户的信息是一种责任,因此,数据库设计就成了整个软件开发中重要的一个环节。
一旦数据设计出现问题,软件就会出现问题,某些功能的使用就发挥不了最大作用。
所以,为了更好地开发数据库,了解信息的来源以及信息的流向是头等大事。
对于客户的整个操作流程,都要亲身参与,才能客观地掌握数据资料的真实性,为设计良好的数据库打下基础。
本章主要介绍如何收集客户的数据资料,并将其转化为程序需要的数据资源。
2.3.1E-R图
图2.3.1E-R图
2.3.2关系模式
本次课题经过最初小组讨论,确定voter类、recoder类、manager类、project类、user类、prorecoder类、userrecoder类七个基本类。
系统中有三个实体:
管理员、用户和参选者。
1.voter(voterIdint(20),voterAgeint(50),voterIndexint(8),voterNameVarchar(255),voterSexVarchar(8),voterWordVarchar(255),voterProjectVarchar(30),voterBoolBoolean)voterId为主键;
2.recoder(recoderIdint(20),chooseNameVarchar(255),chooseProjectVarchar(255))recoderId为主键;
3.manager(managerIdint(20),managerNameVarchar(255),managerPasswordVarchar(50))managerId为主键;
4.project(proIdint(20),proNameVarchar(255),proNumberint(20),proShowVarchar(255),proBoolBoolean)proId为主键;
5.user(idint(20),passwordVarchar(50),nameVarchar(255))id为主键;
6.prorecoder(recProIdint(20),recProNameVarchar(255))recProId为主键;
7.userrecoder(rIdint(20),rIndexint(8),rNameVarchar(255),rProjectVarchar(255),rChooseNameVarchar(255),rBoolBoolean)rId为主键。
2.3.3表的设计
表2.3.3.1参选人信息(voter)
表名
voter
列名
数据类型(精度范围)
空/非空
约束条件
voterId
int(20)
非空
主键
voterName
Varchar(255)
非空
无
voterSex
Varchar(8)
非空
无
voterWord
Varchar(255)
非空
无
voterIndex
int(8)
非空
无
voterAge
int(50)
非空
无
voterProject
Varchar(255)
非空
无
voterBool
Boolean
非空
无
voterPassword
Varchar(255)
非空
无
表2.3.3.2管理员信息表(manager)
表名
manager
列名
数据类型(精度范围)
空/非空
约束条件
managerId
int(20)
非空
主键
managerPassword
Varchar(50)
非空
无
managerName
Varchar(255)
非空
无
表2.3.3.3普通用户信息表(user)
表名
user
列名
数据类型
空/非空
约束条件
id
int(20)
非空
主键
password
Varchar(50)
非空
无
name
Varchar(255)
非空
无
表2.3.3.4项目信息表(project)
表名
project
列名
数据类型
空/非空
约束条件
proId
int(20)
非空
主键
proName
Varchar(255)
非空
无
proNumber
int(20)
非空
无
proShow
Varchar(255)
非空
无
proBool
Boolean
非空
无
表2.3.3.5用户记录信息表(userrecoder)
表名
userrecoder
列名
数据类型
空/非空
约束条件
rId
int(20)
非空
主键
rIndex
int(8)
非空
无
rProject
Varchar(255)
非空
无
rName
Varchar(255)
非空
无
rChoosename
Varchar(255)
非空
无
rBool
Boolean
非空
无
表2.3.3.6参选人项目报名(recoder)
表名
recoder
列名
数据类型(精度范围)
空/非空
约束条件
recoderId
int(20)
非空
主键
chooseName
Varchar(255)
非空
无
chooseProject
Varchar(255)
非空
无
表2.3.3.7存储历史项目(prorecoder)
表名
prorecoder
列名
数据类型(精度范围)
空/非空
约束条件
recProId
int(20)
非空
主键
recProName
Varchar(255)
非空
无
第3章实现与测试
实现该系统的功能,并对实现的功能进行相应的测试工作,包括功能模块,活动图,界面和代码
3.1功能模块1
用户投票模块
用户登录系统后,选择某一项目,查看参选者然后进行投票。
用户可以对一人或多人进行投票。
投票成功后数据保存在数据库中。
对数据库进行刷新就显示出来。
3.1.1活动图
图3.1.1.1用户投票活动图
3.1.2界面
图3.1.2.1用户选择项目界面
图3.1.2.2用户投票界面
3.1.3代码
VoterServlet.java
packageservlet;
importjava.io.IOException;
importjava.util.List;
importjavax.servlet.ServletException;
importjavax.servlet.http.HttpServlet;
importjavax.servlet.http.HttpServletRequest;
importjavax.servlet.http.HttpServletResponse;
importdao.Dao;
importentity.Manager;
importentity.Recoder;
importentity.User;
importentity.UserRecoder;
importentity.Voter;
publicclassVoteServletextendsHttpServlet{
Daodao=newDao();
Managermanager=newManager();
publicvoiddoGet(HttpServletRequestrequest,HttpServletResponseresponse)
throwsServletException,IOException{
doPost(request,response);
}
publicvoiddoPost(HttpServletRequestrequest,HttpServletResponseresponse)
throwsServletException,IOException{
request.setCharacterEncoding("utf-8");
Stringmethod=request.getParameter("method");
Stringpath="VoteServlet?
method=vote";
booleanredirect=false;
if(method.equals("voteVoter")){
Recoderrecoder=newRecoder();
Useruser=(User)request.getSession().getAttribute("user");//getuser
UserRecoderuserRecoder=newUserRecoder();
intid=Integer.parseInt(request.getParameter("id"));/