基于Java Web的投票管理系统

邱丑丑

发布日期: 2019-07-25 11:35:59 浏览量: 197
评分:
star_border star_border star_border star_border star_border star_border star_border star_border star_border star_border
*转载请注明来自write-bug.com

摘 要

相较于传统投票方式,在线投票是任何一-次商演(时间短、影响范围小)、电视(投入大,效果不明显)或者户外广告(不能快速吸引消费者眼球)在投入产出效率上都难以企及的。在线投票能够迅速提升活动商家的广告价值,降低商家广告成本,提高知名度以及美誉度。网络投票的主要目的就是人群放大:通过网络投票,可以吸引大量的选手及相关亲友的关注,通过以往的数据统计,一名选手参 与投票,会带动60人参与。这样可以最大程度的向客户展现实力,扩大社会影响力。

系统分为前台和后台两部分,前台主要是对普通用户开放。普通用户将实现匿名投票操作:后台主要作用是管理员实现登录、投票管理、用户管理等操作。依据前台和后台的不同权限需求,在线投票系统主要分为普通用户和管理员两个功能模块。

普通用户模块将实现用户登录、用户投票以及查看投票结果等功能。管理员模块将实现管理员登录、发布新投票、查看所有投票、及用户管理等功能。

关键词:网上投票、JSP、MYSQL

1 概述

随着科技的飞速发展,计算机已经广泛的应用于各个领域之中,而且日趋普及。在计算机应用中很重要的一部分就是编程语言,编程语言的出现打开了计算机应用的新篇章。在这些编程语言中JSP占有着重要的地位,JSP 拥有Java编程语言“一-次编写,各处运行”的特点口。在当今的网络应用中JSP无处不在,在线投票系统就是JSP功能强大的-一个最好的例证。

在线投票系统有很多传统投票方式不可比拟的优势。首先,它可以在很短的时间内,通过互联网将不同时间不同地域的用户投票组合到一起,并进行结果反馈,这是传统的投票方法完全做不到的;其次,在线投票系统的效率要比以往的传统投票方法高很多,在这个寸时如寸金的年代,在线投票系统不但省去了投票与计票环节的人力成本,还可以节省很多时间以用作处理其他更重要的事情:综上所述,在线投票系统有着快捷、经济、方便、省时省力等诸多优点都注定它将是未来投票方式的主流。

2 课程设计任务及要求

2.1 任务

设计一个投票系统,实现学生对教师的匿名投票。有管理用户,实现对整个系统的管理。

2.2 要求

用户分为管理员用户和普通用户。

普通用户提供以下功能:系统首页上显示所有投票选项的列表,显示当前登录用户并提供注销功能,用户可以通过选中某个选项并点击“投票”按钮进行投票操作。用户点击后可在当前一页面上看到各个投票选项目前的投票情况,主要包括各选项所得的票数,并且以柱形显示各选项的得票率,可以让用户从直观上看到各项的得票情况。

管理员用户提供以下功能:显示当前登录用户并提供注销功能,提供系统管理实现用户的增删查改及重新投票等功能,还能显示用户列表及投票情况表。
开发的系统数据库设计要合理,能够实现设计的全部功能,能够运行演示。能够体一个软件的基本功能。

3 需求分析

3.1 功能需求

用户能够正常的登录及注销,每个用户在每一次投票中只能匿名投票一次。
管理员能够新建账号、删除账号、修改账号及初始话投票。在管理员页面显示投票情况及用户情况等系统详情。

整个系统要进行session检查,防止非法用户访问受限页面。

3.2 硬件需求

运行windows的硬件平台并装有如下软件:

  • Jdk1.8

  • tomcat6.0

  • eclipse

  • sql server 2008

4 概要设计

4.1 总体模块设计

4.1.1 普通用户模块

  • 登录:使用普通用户账号登录到投票界面

  • 投票:选择投票对象并进行投票

  • 注销:清空用户session退回到欢迎界面

其各部分关系图如图1所示。

4.1.2 管理员用户模块

  • 登录:使用管理员账号登录到后台管理界面

  • 注销:清空用户session退回到欢迎界面

  • 用户管理:管理员可以增加、删除、修改用户账号,不能删除当前登录用户

  • 初始化投票:管理员可以初始化投票系统,开启下一次投票

  • 查看所有用户:显示系统中已存在的用户账号及其投票情况

  • 查看得票数:显示当前的投票情况

其各部分关系如图2所示。

4.2 开发工具简介

在在线投票系统的设计发开过程中主要用了JSP技术,其中用到的工具有:JDK1.8、Eclipse、MySQL、Tomcat 等。

4.2.1 JSP简介

JSP技术有点类似ASP技术,它是在传统的网页HTML文件中插入Java程序段和JSP,从而形成JSP文件”。JSP技术使用Java编程语言编写类XML的tags和scriptlets,来封装产生动态网页的处理逻辑。在线投票系统用JSP将网页逻辑与网页设计和显示分离,支持可重用的基于组件的设计,使本系统基于Web的应用程序的开发变得迅速和容易。

  • 一次编写,到处运行。在这一一点上Java比PHP更出色,除了系统之外,代码不用做任何更改

  • 系统的多平台支持。基本上可以在所有平台上的任意环境中开发,在任意环境中进行系统部署,在任意环境中扩展。相比ASP/PHP的局限性是现而易见的

  • 强大的可伸缩性。从只有一个小的Jar文件就可以运行Servlet/JSP,到由多台服务器进行集群和负载均衡,到多台Application进行事务处理,消处理,-台服务器到无数台服务器,Java 显示了一个巨大的生命力

  • 多样化和功能强大的开发工具支持。这一点与ASP很像,Java已经有了许多非常优秀的开发工具,而且许多可以免费得到,并且其中许多已经可以顺利的运行于多种平台之下

4.2.2 SQL server简介

SQL Server系列软件是Microsoft 公司推出的关系型数据库管理系统。2008年10月,SQL Server 2008简体中文版在中国正式上市,SQL Server 2008 版本可以将结构化、半结构化和非结构化文档的数据直接存储到数据库中。可以对数据进行查询、搜索、同步、报告和分析之类的操作。数据可以存储在各种设备上,从数据中心最大的服务器一直到桌面计算机和移动设备,它都可以控制数据而不用管数据存储在哪里。

此外,SQL Server 2008 允许使用 Microsoft .NET 和Visual Studio开发的自定义应用程序中使用数据,在面向服务的架构(SOA)和通过 Microsoft BizTalk Server 进行的业务流程中使用数据。信息工作人员可以通过日常使用的工具直接访问数据。

4.3 数据库设计

数据库设计是软件开发中的重要环节,是对系统数据全面的、详细的分析。数据库设计的好坏直接关系到整个项目设计的效率的高低,关系到设计的稳定性。根据在线投票系统不同模块之间的联系和前期的设计目的与需求,设计了三个不同的数据表,它们分别是用户表、投票选项表和投票主题表。

4.3.1 用户表(T_USER)

用户表包括所有用户的各种信息,如账户、密码等详细数据并规定了每个字段的类型,如表1所示。

字段名 数据类型 长度 是否主键 描述
ACCOUNT VARCHAR 40 账号
PASSWARD VARCHAR 40 密码
UNAME VARCHAR 40 用户姓名
ADMIN BIT 1 管理员标识
TICKET INT 255 票数

4.3.2 投票表(T_VOTE)

投票表包括教师编号、教师姓名和得票数。如表2所示。

字段名 数据类型 长度 是否主键 描述
TEACHERNO VARCHER 40 教师编号
TEACHERNAME VARCHER 40 教师姓名
VOTE INT 255 得票数

5 开发与实现

5.1 程序模块实现

5.1.1 用户登录模块关键代码

  1. <%
  2. request.setCharacterEncoding("gb2312");
  3. String account = request.getParameter("account");
  4. String password = request.getParameter("password");
  5. UserDao udao = new UserDao();
  6. User user = udao.getUserByAccount(account);
  7. if(user == null||!user.getPassword().equals(password)){
  8. %>
  9. <br><br><br><br><br><br>
  10. 登录失败,<a href="loginForm.jsp">返回登录页面</a>
  11. <%
  12. }
  13. else if(user.getAdmin()==true){
  14. session.setAttribute("user", user);
  15. response.sendRedirect("admin.jsp");
  16. }
  17. else{
  18. session.setAttribute("user", user);
  19. response.sendRedirect("display.jsp");
  20. }
  21. %>

5.1.2 投票模块关键代码

  1. <%
  2. String account=user.getAccount();
  3. String[]teacherno =request.getParameterValues("teacherno");
  4. VoteDao vdao = new VoteDao();
  5. UserDao udao = new UserDao();
  6. int ticket= udao.ticket(account);
  7. if(ticket>0){
  8. if(teacherno!=null){
  9. vdao.updateVotes(teacherno);
  10. vdao.updateTictet(account);
  11. }
  12. response.sendRedirect("display.jsp");
  13. }
  14. else{
  15. response.sendRedirect("noTicket.jsp");
  16. }
  17. %>

5.1.3 新建用户模块关键代码

  1. <%
  2. request.setCharacterEncoding("gb2312");
  3. String account = request.getParameter("account");
  4. String password = request.getParameter("password");
  5. String uname = request.getParameter("uname");
  6. String admin =request.getParameter("admin");
  7. UserDao udao = new UserDao();
  8. User user2=udao.getUserByAccount(account);
  9. if(user2!=null){
  10. %>
  11. <jsp:forward page="changeError2.jsp"></jsp:forward>
  12. <%
  13. }
  14. udao.adduser(account, password, uname, admin);
  15. %>
  16. <br><br><br><br><br><br>
  17. <p align="center">创建用户成功!<br>
  18. <a href="admin.jsp">返回</a></p>

5.1.4 删除用户模块关键代码

  1. <%
  2. request.setCharacterEncoding("gb2312");
  3. String account = request.getParameter("account");
  4. String acc = user.getAccount();
  5. if(acc.equals(account)){
  6. %>
  7. <jsp:forward page="changeError3.jsp"></jsp:forward>
  8. <%
  9. }
  10. UserDao udao = new UserDao();
  11. User user2=udao.getUserByAccount(account);
  12. if(user2==null){
  13. %>
  14. <jsp:forward page="changeError.jsp"></jsp:forward>
  15. <%
  16. }
  17. udao.deluser(account);
  18. %>
  19. <br><br><br><br><br><br>
  20. <p align="center">删除用户成功!<br>
  21. <a href="admin.jsp">返回</a></p>

5.1.5 修改用户模块关键代码

  1. <%
  2. request.setCharacterEncoding("gb2312");
  3. String account = request.getParameter("account");
  4. String password = request.getParameter("password");
  5. String uname = request.getParameter("uname");
  6. String admin =request.getParameter("admin");
  7. UserDao udao = new UserDao();
  8. User user2=udao.getUserByAccount(account);
  9. if(user2==null){
  10. %>
  11. <jsp:forward page="changeError.jsp"></jsp:forward>
  12. <%
  13. }
  14. udao.changeuser(account, password, uname, admin);
  15. %>
  16. <br><br><br><br><br><br>
  17. <p align="center">修改用户成功!<br>
  18. <a href="admin.jsp">返回管理页面</a></p>

5.1.6 初始化投票模块关键代码

  1. public void initVote() throws Exception{
  2. initConnection();
  3. String sql="UPDATE T_VOTE SET VOTE = 0";
  4. PreparedStatement ps = conn.prepareStatement(sql);
  5. ps.executeUpdate();
  6. closeConnection();
  7. }
  8. public void initTicket() throws Exception{
  9. initConnection();
  10. String sql="UPDATE T_USER SET TICKET = 1";
  11. PreparedStatement ps = conn.prepareStatement(sql);
  12. ps.executeUpdate();
  13. closeConnection();
  14. }

5.1.7 注销登录模块关键代码

  1. <%
  2. session.invalidate();
  3. response.sendRedirect("loginForm.jsp");
  4. %>

5.1.8 非法用户的session检查

管理员权限

  1. <%
  2. User user =(User)session.getAttribute("user");
  3. if(session.getAttribute("user")==null||user.getAdmin()==false { %>
  4. <jsp:forward page="loginError.jsp"></jsp:forward>
  5. <% } %>

普通用户权限

  1. <%5.1.8非法用户的session检查
  2. 管理员权限:
  3. User user =(User)session.getAttribute("user");
  4. if(user==null){
  5. %>
  6. <jsp:forward page="loginError.jsp"></jsp:forward>
  7. <% } %>

5.1.9 防刷票的实现

  1. public int ticket(String account) throws Exception{
  2. initConnection();
  3. String sql ="SELECT TICKET FROM T_USER WHERE ACCOUNT= ? ";
  4. PreparedStatement ps = conn.prepareStatement(sql);
  5. ps.setString(1, account);
  6. ResultSet rs = ps.executeQuery();
  7. rs.next();
  8. int ticket =rs.getInt("TICKET");
  9. if(ticket==0) {
  10. closeConnection();
  11. return 0;
  12. }
  13. else {
  14. closeConnection();
  15. return 1;
  16. }
  17. }

5.2 数据库与操作设计开发

5.2.1 连接数据库

  1. public void initConnection() throws Exception {
  2. Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");
  3. conn=DriverManager.getConnection("jdbc:sqlserver://localhost:
  4. 1433;DatabaseName=Vote;user=root;password=123456789");
  5. }

5.2.2 数据库操作设计

  1. public User getUserByAccount(String account) throws Exception{
  2. User use = null;
  3. initConnection();
  4. String sql="SELECT ACCOUNT,PASSWORD,UNAME,ADMIN FROM T_USER WHERE ACCOUNT = ?";
  5. PreparedStatement ps = conn.prepareStatement(sql);
  6. ps.setString(1, account);
  7. ResultSet rs =ps.executeQuery();
  8. if(rs.next()) {
  9. use = new User();
  10. use.setAccount(rs.getString("ACCOUNT"));
  11. use.setPassword(rs.getString("PASSWORD"));
  12. use.setUname(rs.getString("UNAME"));
  13. use.setAdmin(rs.getBoolean("ADMIN"));
  14. }
  15. closeConnection();
  16. return use;
  17. }

6 测试与部署

6.1 运行环境

  • 平台:Windows10

  • 开发环境:JDK 1.8、 Eclipse4.9、 Tomcat6.0、 SQL server 2008

6.2 功能测试

6.2.1 防止非法访问功能

  • 功能描述:未登录的用户不能访问受限页面,已登录的普通用户不能访问管理员权限页面

  • 目的:防止未授权访问,保证安全性

  • 前提条件:无

  • 输入:浏览器地址栏直接输入页面地址

  • 输出:身份验证通过,转到要访问页面;身份验证不通过,转到拒绝访问页面

  • 是否实现:实现

6.2.2 初始化投票功能

  • 功能描述:管理员清空当前投票

  • 目的:初始化投票者的票数及被投票者的得票数

  • 前提条件:登录到管理员页面

  • 输入:点击初始化投票链接

  • 输出:初始化成功转到管理页面

  • 是否实现:实现

6.2.3 登录功能

  • 功能描述:输入用户名和密码登陆到系统,不同用户登录到不同界面

  • 目的:检验数据判断能否登陆

  • 前提条件:进入登陆界面

  • 输入:用户名和密码

  • 输出:数据判断成功,普通用户登陆到投票界面,管理员用户登录到后

  • 一台管理界面:数据判断失败,转到失败页面

  • 是否实现:实现

6.2.4 注销登录功能

  • 功能描述:已登录到系统的用户可以通过注销来退出系统

  • 目的:用户退出时,清空用户session

  • 前提条件:用户已登录

  • 输入:点击注销链接

  • 输出:注销成功转到初始欢迎页面

  • 是否实现:实现

6.2.5 投票功能

  • 功能描述:给相应的所选教师投票

  • 目的:实现数据库中相应教师得票数的数据更新

  • 前提条件:成功登录到投票界面

  • 输入:勾选教师,点击投票

  • 输出:相应老师的得票数加1

  • 是否实现:实现

6.2.6 添加用户功能

  • 功能描述:管理员添加用户账号到系统中

  • 目的:在数据库用户表中添加用户账号信息

  • 前提条件:成功登录后台管理页面

  • 输入:新的用户数据

  • 输出:创建用户成功,输出成功提示转到管理界面;创建用户失败,输出相应失败提示转到管理界面

  • 是否实现:实现

6.2.7 删除用户功能

  • 功能描述:管理员从系统中删除用户账号

  • 目的:在数据库用户表中删除用户账号信息

  • 前提条件:成功登录到后台管理页面

  • 输入:要删除用户的账号

  • 输出:删除用户成功,输出成功提示转到管理界面;删除用户失败,输出相应提示转到管理界面

  • 是否实现:实现

6.2.8 修改用户功能

  • 功能描述:管理员修改系统中已存在的用户信息

  • 目的:在数据库中修改相应的用户信息

  • 前提条件:登录到后台管理页面

  • 输入:要修改的账号及新的用户信息

  • 输出:修改成功,输出成功提示转到管理界面;修改失败输出相应失败提示转到管理界面

  • 是否实现:实现-

6.2.9 显示系统用户功能

  • 功能描述:在管理页面显示当前系统中已存在的账号及是信息

  • 目的:显示账号,账号用户及是否投票

  • 前提条件:登录到后台管理页面

  • 输入:无

  • 输出:系统中的账号信息

  • 是否实现:实现

6.2.10 显示得票数功能

  • 功能描述:在管理页面及投票页面显示当前的得票情况

  • 目的:显示各教师的得票数,并以相应比例长的的矩形显示

  • 前提条件:登录到系统中

  • 输入:无

  • 输出:各教师的得票情况

  • 是否实现:实现

7 结论分析

为期数天的jsp集中上机课程设计让我受益匪浅。和上学期数据库课程设计不同,这次要求我们每个人都要做,主要是考查我们jsp 动手实践能力。这次的课程设计让我再一次翻起了sql课本,已经有好些知识忘了,借此机会刚好复习了一遍,由于这次时间安排的比较紧,赶在了我们期末考试这一特殊时期,所以我选择做个功能齐全的投票系统,其实也算不上齐全,但是也学了不少东西。特别是在具体功能的设计上遇到很多问题,但是经过我上网搜索资料以及寻找同学帮助,这些问题都迎刃而解了。但是不足的时还有很多想做的功能由于时间的关系没有实现,例如动态管理投票对象、更改用户可投票数、非匿名投票等等。

经过了数天的学习研究,终于完成了该课程设计的架构到实现。从开始选定题到系统的规划实现,再到报告的完成,这次的课程设计是对于我们是一个很好的锻炼,通过本次设计,我基本明确了一个基于jsp应用系统从设计到开发的大致流程和重点关注的方向,同时对JSP, SQL语句数据库关系等都有了基本的掌握和应用能力。

通过这次课程设计,我再一次感受到jsp的魅力,自己设计的不是特别完美,但毕竟做成果,心里很高兴,我们对学习jsp的信心也增强不少。

参考文献

[1] 郭克华、奎晓燕. Java Web程序设计 清华大学出版社2011

[2] 明日科技 HTML5从入门到精通 清华大学出版社2012

[3] 何玉洁 数据库基础与实践技术(SQL Server 2008) 机械工业出版社2018

上传的附件 cloud_download VotingSystem.zip ( 1.48mb, 1次下载 )
error_outline 下载需要5点积分

发送私信

精品资源尽在此

50
文章数
0
评论数
最近文章
eject