为了正常的体验网站,请在浏览器设置里面开启Javascript功能!

网上投票系统

2017-09-19 36页 doc 445KB 122阅读

用户头像

is_637320

暂无简介

举报
网上投票系统中原工学院软件学院 软件工程实践二设计任务书 姓 名 程胜               软件工程 专业 JAVA102 班 题 目 网上投票系统 设 计 任 务 本文简单设计出了一种在线投票系统开发与实现,该系统的普通用户和管理员管理模块的合理运用,使投票及时、准确的得以发布。用户直接参与相关主题的投票活动,使用户的意见和需求能够得到很好的表达。 1. 普通用户: (1)用户注册:普通投票用户须通过账号注册方可以进行投票; (2)登录:注册成功后,可输入用户名和密码登录系统; (3)重选:用户可以进行重...
网上投票系统
中原工学院软件学院 软件工程实践二设计任务书 姓 名 程胜               软件工程 专业 JAVA102 班 题 目 网上投票系统 设 计 任 务 本文简单设计出了一种在线投票系统开发与实现,该系统的普通用户和管理员管理模块的合理运用,使投票及时、准确的得以发布。用户直接参与相关主题的投票活动,使用户的意见和需求能够得到很好的表达。 1. 普通用户: (1)用户注册:普通投票用户须通过账号注册方可以进行投票; (2)登录:注册成功后,可输入用户名和密码登录系统; (3)重选:用户可以进行重新投票; 2. 管理员: (1)对投票主题可以进行增,删,改,查等功能; (2)用户管理,管理员可以增加和删除普通用户,或者更改普通用户密码; (3)查看所有投票; 开发工具:MyEclipse Tomcate6.0 Mysql 开发环境:windowsXP JDK6.0 时 间 进 度 第1周(2013-2-25 ~ 2013-3-1):进行分组,然后确定小组项目 第2周(2013-3-4~ 2013-3-8):小组进行明确分工,进行编码 第3周(2013-3-11 ~ 2013-3-15):程序进行调试,弥补不足之处,完成 原 主 始 要 资 参 料 考 与 文   献 [01] 孙卫琴. Tomcat与Java web开发技术详解 [M]:北京.电子工业出版社. 2010.4 [02] 吴以欣等.动态网页设计与制作[M]:北京.人民邮电出版社. 2009.11 [03] 邱李华等.SQL Server2000数据库应用教程[M]: 人民邮电出版社. 2010.1 [04] Y.Daniel Liang .Java语言程序设计 进阶篇 [M]机械工业出版社2008. 6. [05] 吴以欣等.动态网页设计与制作[M]:北京.人民邮电出版社. 2009.11 [06] 郭东恩.数据库原理及应用 [M]河南科学技术出版社 2008.2. [07]郝安林,JSP从入门到精通 [M],北京:电子工业出版社,2008 指导教师签字:                                年      月    日 网上投票系统 摘  要 科技在发展,人类在进步,网上投票几乎完全取代了古老的传统投票,主要是因为网上投票系统有很多传统投票方式不可比拟的优势。首先,它可以在很短的时间内,通过互联网将不同时间,不同地域的用户投票组合到一起,并进行结果反馈,这是传统的投票方法完全做不到的;其次,在线投票系统的效率要比以往的传统投票方法高很多,网上投票不但省去了投票与计票环节的人力成本,还可以节省很多时间以用作处理其他更重要的事情;综上所述,在线投票系统有着快捷、经济、方便、省时省力等诸多优点都注定它将是未来投票方式的主流。网上投票系统可以用来统计用户对某个主题或热门话题的意见。管理员也可以通过投票的方式了解用户的看法,或者通过网上投票系统这个媒介去了解用户的思想、意见,并通网上投票系统的结果反馈改进自己的不足。国家领导人也可以通过网上投票系统来调查民众对某一项新政策的意见,进而做出更明智的决策。 我们小组做的投票系统也具有极大的灵活性,投票类型分为单选投票和多选投票。管理员可以在线设计不同的投票主题供用户进行投票。系统分为前台和后台两部分,前台主要是对普通用户开放。普通用户将实现注册、投票、重选等操作;后台主要作用是管理员实现登录、投票管理、用户管理等操作。依据前台和后台的不同权限需求,在线投票系统主要分为普通用户和管理员两个功能模块。 普通用户模块将实现用户注册、用户登录、用户投票以及投票重选和查看投票结果等功能。 管理员模块将实现管理员登录、发布新投票、撤消投票、查看所有投票、编辑和删除新投票以及用户管理等功能。 关键词: 网上投票、 主流、 用户、 管理员 目    录 网上投票系统    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 运行环境硬件配置 硬件 配置 处理器 i3及以上 内存 2GB 硬盘空间 320GB     (2)软件环境:Tomcat服务器和Windows XP操作系统。 第2章 系统分析与设计     网上投票已经成为当今投票的主要投票方式,也是未来发展的主要趋势。网上投票系统的用户只需运用互联网操作即可,此系统在网站中的使用频度非常的频繁,因此该系统属于实用型网站,需要对数据的处理,比如对投票票数的统计并把结果反馈给投票者,故对数据的及时更新要求较高,保证数据的真实性。该系统在任何操作系统下都可以运行。 该系统的操作包括:单选/多选投票、删除投票、添加投票、查看投票。     单选投票:用户只能从多个选项中选取一项进行投票。多选投票:用户可以从多个选项中选取多项进行投票。删除投票:管理员对投票主题进行删除。添加投票:管理员对投票主题进行添加。查看投票:提供用户查看当前投票的状况。 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 项目成员及 小组成员 任务分配 参与时间 陈海燕 前台管理(普通用户的注册,登陆,投票,查看投票结果) 2013.2.25~2013.3.15 程胜 后台管理(管理员登陆,发起投票主题,对主题可以增删改查,删除普通用户) 2013.2.25~2013.3.15 图2-5-1 项目成员图 进度 阶段 第1天 第2天 第3天 第4-5天 第6-10天 第11-14天 第15天 进行分组并选定课题 软件可行性分析并制定详细计划 软件的需求分析 软件的设计     软件的编码       软件的整理和测试     完成报告         图2-5-2 进度计划图 2.6 用例及用例规约 用例的概要描述如下表所示 主要参与者 优先级 用例名 用例概述 普通用户 低 注册 可以为自己注册一个账号 高 查看投票 查看投票情况。 高 用户登录系统(Login User) 用户输入合法的用户名和密码登录系统。 管理员 中 管理员登录系统(Manager Login) 管理员能够登录系统。 中 管理员发出投票主题 管理员能够对投票主题进行增、删。改、查 高 管理普通用户 管理员能够管理普通用户,对普通用户可以删除 图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章 数据库的分析与设计 数据库设计是软件开发中的重中之重,是对系统数据全面的、详细的分析。数据库设计的好坏直接关系到整个项目设计的效率的高低,关系到设计的稳定性。根据网上投票系统不同模块之间的联系和前期的设计目的与需求,设计了三个不同的数据表,它们分别是用户表、投票选项表和投票主题表。 3.1 数据库的需求分析 需求分析简单地说就是分析用户的要求。需求分析是数据库的起点,需求分析的结果是否准确地反映了用户的实际要求将直接影响到后面各个阶段的设计,并影响到设计的结果是否合理和实用。 (1)信息要求 用户从数据库中得到想要投票支持的主题。 (2)处理要求  系统将投票结果进行保存,并对最终结果进行统计展示给用户。 (3)安全性和完整性要求 管理员可以对项目进行添加和删除操作,普通用户不能操作。 3.1.1  E-R图 图3-1 E-R图 3.1.2  数据字典 数据字典 1、数据项 数据项描述={数据项名,数据项含义说明,别名,数据类型,长度,取值范围,取值含义,与其他数据项的逻辑关系} 表3-1-2 普通用户数据 数据项 含义说明 类型 长度 编号 唯一标识一个用户 整型 10 密码 用户密码 字符型 50 年龄 用户年龄 字符型 50 性别 用户性别 整型 20 姓名 用户姓名 字符型 50 表3-1-3 管理员数据 数据项 含义说明 类型 长度 编号 唯一标识一个管理员 整型 10 密码 管理员密码 字符型 50 姓名 管理员姓名 字符型 50 表3-1-4 投票信息数据 数据项 含义说明 类型 长度 编号 唯一标识一条记录 整型 10 主题名 投票主题 字符型 50 选项 投票主题的选项 字符型 50 投票总数 每个主题参与投票的数 整型 10 选项票数 每个主题的每个选项的总得票数 整型 10 3.2 数据库的逻辑结构设计 3.2.1  数据模型的优化 1、用户表包括所有用户的各种信息,如用户的编号、姓名密码等详细数据并规定了每个字段的类型,如表所示。 表3-2-1 普通用户信息表(users) 列名 数据类型 长度 可否为空 字段说明 id 整型 10 NOT NULL 用户编号(主键) name 字符型 50 NOT NULL 用户姓名 password 字符型 50 NOT NULL 用户密码 2、管理员表包括管理员的各种信息,如管理员的编号、姓名、密码等详细数据并规定了每个字段的类型,如表所示。 表3-2-2 管理员信息表(manager) 字段名称 数据类型 长度 可否为空 字段说明 id 数字 10 NOT NULL 管理员编号(主键) name 字符型 50 NOT NULL 管理员姓名 password 字符型 50 NOT NULL 管理员密码 3、投票信息表包括每个投票选项的基本信息,如投票编码、问题ID、投票选项和投票选项各选项所得票数等信息,同时此表还规定了字段类型和长度,具体的数据说明如下表所示。 表3-2-3 投票信息表(vote) 列名 数据类型 长度 可否为空 字段说明 id 整型 10 NOT NULL 投票信息记录索引号(主键) question 字符型 50 NOT NULL 主题内容 optContent 字符型 50 NOT NULL 选项内容 number 整型 10 NOT NULL 每个选项得票总数 total 整型 10 NOT NULL 每个主题得票总数 第4章 实现与测试 4.1 系统的详细设计与实现 在软件总体设计之后,将进行软件的详细设计。详细设计是软件设计的重要阶段,详细设计目的是对该项目进行详细设计,在概要设计的基础上进一步明确系统结构,详细地介绍系统的各个模块,各个模块的功能,为进行后面的实现和测试做准备。本次课题经过讨论,确定Voter类、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+"/"; %>                                                  

           
                    添加投票人           编号           姓名           性别           简介           年龄           投票主题                                                                           返回上一页   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+"/"; %>               My JSP 'add.jsp' starting page                                                    

         
                    新建选举项目           项目号           可选人数           项目名称           项目简介                                                                           返回上一页   (2)删除投票主题模块: 程序页面名称:delvote.jsp 程序功能:当某些投票主题不属于本次投票的范围 ,还有一些因为管理员失误而造成其成为投票主题,管理员已经不再需要时,便可对该主题进行删除操作,。 权限范围:系统管理员 输入数据:需要被删除的投票项目主题 输出数据:从新弹出首页,不再有删除的项目。 程序简单逻辑: 在系统首页,管理员登录进入管理系统页面,在要删除的投票项目主题旁单击删除超链接,转到delvote.jsp处理页面; 通过其中的SQL语句DELETE FROM VOTE删除整个投票项目,提取相应的关联索引信息,去数据库vote表中搜寻相应的投票记录,进行删除处理; 确认删除后,回到系统管理界面,此时可以看到,刚被删除的投票项目已不在投票项目列表中。 投票流程图如下图所示:   返回 (3)修改投票主题模块: 点击投票管理中的修改主题按钮进入修改主题的页面,该页面是一个HTML页面。该页面有一个表单,表单中的文本域可以输入主题,点击提交按钮后进入该主题的主题及选项信息的显示页面。通过qs=request.getParameter("sql")获得文本域内的主题名。用SQL语句"select * from vote where question ='"qs+"'"从数据库中输出该主题的整条记录存入结果集中。通过循环取出结果集中的主题名称及选项内容赋值给文本域的VALUE值,同时取出主题及选项的ID值存入隐藏域中。对文本域的主题及选项内容修改后点击更新按钮,进入更新的后台处理页面。该页面将文本域的值及隐藏域中的内容和选项的ID号获取后通过SQL语句"update vote set question='"+question3+"',optType="+optType1+" where id="+ida;和"update vote set optContent='"+optContento+"' where id="+mm;更新原内容。 (4)查看投票主题模块: 在投票后台管理系统的主页面中,可以单击功能导航区中的投票结果查询按钮,点击投票结果查询进入按主题分类显示该分类的所有主题的投票结果。该页面是一个JSP页面,它是一个HTML嵌套Java代码的页面。该页面上方有各个投票的分类的超链接,点击进入该分类的投票结果显示。用SQL语句"select * from vote where flag=0 and  optType=1 order by id desc"查询该分类的所有主题的记录存入结果集,然后通过循环等操作输出结果集中的每个主题及其选项。 4.2 系统测试 在本章节中,通过不同用户使用该系统的所得到的结果,对网上投票服务系统应实现的功能进行详细测试,从中找出该系统所存在的不足及需要改进的地方。便于系统的正规化,更加完整。 4.2.1  测试概述 根据项目范围,确定的系统测试范围为:普通用户及管理员的登录、普通用户多人同时在线投票、管理员多人同时在线管理、查看本人投票记录、新建投票项目、项目的停止与恢复。 测试人员: 程胜、陈海燕; 测试环境: windows xp; 5.2.2 测试用例 表4.1  测试用例表 序号 功能模块 测试数据 预期结果 1 系统登录 用户名:123 密 码:123 登录成功 用户名:567 密 码:567 界面清空 2 投票 点击投票 投票成功,被投票者记录增加 3 新建投票项目 点击新建 填写每项需要填写的内容,新建成功,在正在进行列表中显示此项目 点击新建 未填写主键,新建不成功 4 停止项目 点击停止项目 转项目停止,从正在进行列表转换至历史记录 5 项目查询 点击查询历史项目 进入历史项目列表 6 项目恢复 点击项目恢复 从历史项目恢复至正在进行列表 4.2.3  测试结果 测试结果: 系统登录(通过)、投票(通过)、多个用户同时操作(通过)、新建投票项目(通过)、查询记录(通过)、停止项目(通过),项目恢复(通过)。 经过测试之后,证实该程序操作稳定,简单,非常容易操作,简单实用,并且该程序具有多线程处理能力,在处理器以及网路速度允许的情况下支持多用户同时在线操作,且稳定流畅。 4.2.4  大概设计 本次课题经过最初小组讨论,确定Voter类、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六个属性。对每个类都实现增加、删除、修改、查询方法。 以ProRecoder类为例: 增加:public void addProRecoder(ProRecoder proRecoder){         try{             Connection conn = JdbcUtil.getConnection();         PreparedStatement pstmt = conn.prepareStatement("insert into proRecoder (recProId,recProName) values (?,?)");             pstmt.setInt(1,proRecoder.getRecProId());             pstmt.setString(2,proRecoder.getRecProName());             pstmt.executeUpdate();             JdbcUtil.close(pstmt,conn);             }catch(SQLException e){             e.printStackTrace();             throw new RuntimeException(e); }           } 通过语句Class.forName("com.mysql.jdbc.Driver"); 选择数据库类型。通过Connection conn = JdbcUtil.getConnection(); 与数据库建立连接,将数据导入数据库。以此类推,将上面几个类按照addProRecoder类的方法将数据导入数据库。 管理员实体类: public class Manager {     int managerId;     String  managerName;     int managerPassword;     public int getManagerId() {         return managerId;     }     public void setManagerId(int managerId) {         this.managerId = managerId;     }     public String getManagerName() {         return managerName;     }     public void setManagerName(String managerName) {         this.managerName = managerName;     }     public int getManagerPassword() {         return managerPassword;     }     public void setManagerPassword(int managerPassword) {         this.managerPassword = managerPassword;     } } 第5章 结束语 开学来到学校就知道这学期的课题又开始了,以前的课题都是靠别人的讲解,在别人的帮助下才完成的,今年很想自己认真的去做一次,于是满怀信心的去,我们不想做那些以前做过的,因为做以前的不会有太大的提高,所以我们选择了另一条路,做自己想做的,做别人没做过的。     可是转眼间三个星期的课题时间就要过去了,回首当初,种种难言之隐莫能概述,刚开始时还有干劲,可是随着时间的推移,完全不知道自己应该干什么,从哪里入手。每次课题对我来说,机遇大于挑战,没有挑战就没有进步,所以我们选择了一个比较复杂的网上投票系统作为我们的课题,网上投票系统其中涉及到了许多知识点,而且要求系统有一定的逻辑能力,更重要的是把各个知识点整合成一个具有逻辑结构的程序。 虽然我对我们组的贡献不多,但是我也一直完整地参与了整个项目的实施。不同于以往的是,我们这次课题的顺序安排上的改动,我觉得这也是我们从这次课题中取得的一大进步。在开始写代码之前,我们小组的成员首先对程序的大框架进行了仔细的设计,仔细透彻的规划设计了程序的主要逻辑功能,以及大概的分析了一下如何实现这些功能,并且在一开始就对组员进行了明确的任务模块分配,使得我们的程序在以后的开发中能够实现并发的设计,彼此之间的模块开发进步互不影响。这样的设计模式节约了我们很多的开发时间,所以,本次课题的合作开发模式也是我们的一大进步。以前感觉老师在讲课的时候写东西很快,所以感觉这些东西其实很简单。通过自己动手写之后才知道眼高手低。老师写是因为老师拥有住够多的代码积累量,所以即使有一些错误他们也可以很快的找出来。而自己就不行,有时候一些错误根本不知道出在那里。 在设计好了系统的大的框架之后,我们各司其职,对自己所分配到的模块进行开发,我负责的是程序整体结构的整合,逻辑功能的实现,还有管理员端代码的实现,我的任务还是比较繁重的,因为整体程序就比较庞大,所以其他组员的任务也是相当繁重的,分配好之后我就开始了自己的任务,从entity基本的类库写起,再到util包中数据库链接,再到dao包代码的实现,最后到servlet的实现,管理员端的功能在将近10天的时间实现,这其中遇到了很多的问题,最严重的问题是多组数据传递造成的混乱,由于程序中需要从客户到管理员传递多组数据,导致数据的传递与接受发生混乱,造成了逻辑结构上的错误,这是一个很严重的错误,中间解决这个问题花费了大概两天的时间,纠错过程中一度对程序失去了信心,幸运的是我们坚持了下来,找到了问题的根源所在,即使进行了纠正,使得程序得以正常的继续。在一个比较重要的问题就是后期我们程序整合的过程中出现的问题。我们组员程序写好之后要进行有机的整合,通过整合完成程序,但是在整合的过程中出现了各种各样的问题,其中比较复杂的就是数据传送乱码问题,只能传递英文字符,只要数据中出现了中文字符程序就会报错,我们组员彼此统一了编码,但是还是不能解决问题,后来在网上查了一下,找到了错误的根源所在,我们及时进行了纠正,到此我们的程序基本成型,所有的功能基本实现,这时已经过去了两周半的时间了,我们在接下来的三天对程序进行了进一步的优化,其中包括界面的美化、界面功能的优化、数据传递的优化、以及其他一些细节方面的优化。 我们用了三周的时间完成了网上选举系统,回顾这三周确实有点累,但是我们体会到更多的是一种成就感,经过了三周的努力,我们学到很多的知识点,弥补了重理论不重实践的缺点,把课堂上学习到了运用到了实践中去。 说到收获,最让我高兴地并不是完成了一个系统,自己优越感油然而生。而是在制作系统的过程中自己与组员相互沟通相互帮助时所获得的一种集体主义精神,这种团队合作的精神无时无刻不在刺激着我的神经。众人拾柴火焰高大家齐心协力、同舟共济,就算最后做出的程序并不完美,但回首往事,我们至少付出过、辛苦过、高兴过、失落过。比起孑然一身独坐电脑旁敲代码的同学,我至少可以说:我拥有队友!今后我一定会弥补自己的许多不足之处,这样才能拥有立足之处,才能为自己赢得一席之地。 参考文献: [01] 孙卫琴. Tomcat与Java web开发技术详解 [M]:北京.电子工业出版社. 2010.4 [02] 吴以欣等.动态网页设计与制作[M]:北京.人民邮电出版社. 2009.11 [03] 邱李华等.SQL Server2000数据库应用教程[M]: 人民邮电出版社. 2010.1 [04] Y.Daniel Liang .Java语言程序设计 进阶篇 [M]机械工业出版社2008. 6. [05] 吴以欣等.动态网页设计与制作[M]:北京.人民邮电出版社. 2009.11 [06] 郭东恩.数据库原理及应用 [M]河南科学技术出版社 2008.2. [07]郝安林,JSP从入门到精通 [M],北京:电子工业出版社,2008 [08]张明亮 赵彬 .《JSP从入门到精通.》 电子工业出版社.2008.1 [09]萨师煊 王珊 .《数据库系统概论》. 高等教育出版社.2008.3. [10]古乐  史九林 编著 《软件测试技术概论》 清华大学出版社2008.11 [11]陈凡 何红杰 编著  《java程序设计》 机械工业出版社.2005.8 [12]石志国、刘易伟、王志良 .《 JSP应用教程》 . 清华大学出版社2008.5. 指导教师评语                                               成绩: 指导教师签名:          年  月  日 附录A: 附加主要页面及代码 附加代码 附图1:登录界面图 附图2:项目管理界面 附图3:用户管理界面 附图4:参选人管理界面 附图5:新建投票主题界面 附图6:历史项目界面 附图7:添加参选人信息界面 附图8:历史项目查询界面 附加代码 package entity; public class Manager {     int managerId;     String  managerName;     int managerPassword;     public int getManagerId() {         return managerId;    }     public void setManagerId(int managerId) {         this.managerId = managerId;    }     public String getManagerName() {         return managerName;    }     public void setManagerName(String managerName) {         this.managerName = managerName;}     public int getManagerPassword() {         return managerPassword;    }     public void setManagerPassword(int managerPassword) {         this.managerPassword = managerPassword;    }} package entity; public class Project {     int proId;     String proName;     int proNumber;     String proShow;     boolean proBool;     public int getProId() {         return proId;    }     public void setProId(int proId) {         this.proId = proId;    }     public String getProName() {         return proName;    }     public void setProName(String proName) {         this.proName = proName;    }     public int getProNumber() {         return proNumber;    }     public void setProNumber(int proNumber) {         this.proNumber = proNumber;    }     public String getProShow() {         return proShow;    }     public void setProShow(String proShow) {         this.proShow = proShow;    }     public boolean isProBool() {         return proBool;    }     public void setProBool(boolean proBool) {         this.proBool = proBool;    }} package entity; public class ProRecoder {     int recProId;//不是主键 等于 project 中的主键     String recProName;     public int getRecProId() {         return recProId;    }     public void setRecProId(int recProId) {         this.recProId = recProId;    }     public String getRecProName() {         return recProName;    }     public void setRecProName(String recProName) {         this.recProName = recProName;    }} package entity; public class Recoder {     int recoderId;     String chooseName;     String chooseProject;     public int getRecoderId() {         return recoderId;    }     public void setRecoderId(int recoderId) {         this.recoderId = recoderId;    }     public String getChooseName() {         return chooseName;    }     public void setChooseName(String chooseName) {         this.chooseName = chooseName;    }     public String getChooseProject() {         return chooseProject;    }     public void setChooseProject(String chooseProject) {         this.chooseProject = chooseProject;    }} package entity; public class User {     int id;     int password;     String name;     public int getId() {         return id;    }     public void setId(int id) {         this.id = id;    }     public int getPassword() {         return password;    }     public void setPassword(int password) {         this.password = password;    }     public String getName() {         return name;    }     public void setName(String name) {         this.name = name;}} package entity; public class UserRecoder {     int rId; // 不是主键 等于 user得id     int rIndex;     String rName;     String rProject;     String rChooseName;     boolean rBool;     public int getrId() {         return rId;    }     public int getrIndex() {         return rIndex;}     public void setrIndex(int rIndex) {         this.rIndex = rIndex;    }     public void setrId(int rId) {         this.rId = rId;    }     public String getrName() {         return rName;    }     public void setrName(String rName) {         this.rName = rName;    }     public String getrProject() {         return rProject;    }     public void setrProject(String rProject) {         this.rProject = rProject;    }     public String getrChooseName() {         return rChooseName;    }     public void setrChooseName(String rChooseName) {         this.rChooseName = rChooseName;    }     public boolean isrBool() {         return rBool;    }     public void setrBool(boolean rBool) {         this.rBool = rBool;}} package entity; public class Voter {     int voterId;     int voterAge;     int voterIndex;     String voterName;     String voterSex;     String voterWord;     String voterProject;     boolean voterBool;     public int getVoterId() {         return voterId;}     public void setVoterId(int voterId) {         this.voterId = voterId;    }     public int getVoterAge() {         return voterAge;    }     public void setVoterAge(int voterAge) {         this.voterAge = voterAge;    }     public int getVoterIndex() {         return voterIndex;    }     public void setVoterIndex(int voterIndex) {         this.voterIndex = voterIndex;    }     public String getVoterName() {         return voterName;    }     public void setVoterName(String voterName) {         this.voterName = voterName;    }     public String getVoterSex() {         return voterSex;    }     public void setVoterSex(String voterSex) {         this.voterSex = voterSex;    }     public String getVoterWord() {         return voterWord;    }     public void setVoterWord(String voterWord) {         this.voterWord = voterWord;    }     public String getVoterProject() {         return voterProject;    }     public void setVoterProject(String voterProject) {         this.voterProject = voterProject;    }     public boolean isVoterBool() {         return voterBool;    }     public void setVoterBool(boolean voterBool) {         this.voterBool = voterBool;    } } 数据库连接: package util; import java.sql.*; public class JdbcUtil{     static{       try{    //Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");           Class.forName("com.mysql.jdbc.Driver");       }catch(ClassNotFoundException e){           e.printStackTrace();  }}     public static Connection getConnection() throws SQLException{         //return DriverManager.getConnection("jdbc:odbc:vote");         return DriverManager.getConnection("jdbc:mysql://localhost:3306/vote","root","");     }        public static void close(Statement stmt,Connection conn)throws SQLException{         stmt.close();         conn.close();}     public static void close(ResultSet rs,Statement stmt,Connection conn)throws SQLException{        rs.close();         close(stmt,conn);}} 附加数据库: drop database vote; create database vote; use vote; create table voter(     voterId int(24) primary key,   voterName varchar(40),      voterSex varchar(8),     voterWord varchar(80),     voterIndex int(8),     voterAge int(8),     voterProject varchar(30),     voterBool boolean     ); insert into voter(voterId,voterName,voterSex,voterWord,voterIndex,voterAge,voterProject,voterBool)values("1","tom","mail","hello","0","25","voter","1"); create table manager(     managerId int(8) primary key,     managerName varchar(20),      managerPassword int(10)     ); insert into manager(managerId,managerName,managerPassword)values("01","Donland","123"); create table user(     id int(8) primary key,     password int(10),     name varchar(20)      ); insert into user(id,password,name)values("1","123","tom"); create table recoder(     recoderId int(8),     chooseName varchar(20),     chooseProject varchar(20)      ); insert into recoder(recoderId,chooseName,chooseProject)values("1","123","tom"); create table project(     proId int(8) primary key,     proNumber int(5),     proName varchar(20),     proShow varchar(20),        proBool boolean     ); insert into project(proId,proName,proNumber,proShow,proBool)values("01","presendent","2","ComeOn","1"); create table proRecoder(     recProId int(8),     recProName varchar(20)     ); insert into proRecoder(recProId,recProName)values("88","ComeOn"); create table userRecoder(     rId int(8),     rIndex int(10),     rProject varchar(30),     rName varchar(20),     rChooseName varchar(20),     rBool boolean     ); insert into userRecoder(rId,rIndex,rProject,rName,rChooseName,rBool)values("1","0","voter","Jom","Tom",true);
/
本文档为【网上投票系统】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑, 图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。 本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。 网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。

历史搜索

    清空历史搜索