基于Java Web的投票管理系统
摘 要
相较于传统投票方式,在线投票是任何一-次商演(时间短、影响范围小)、电视(投入大,效果不明显)或者户外广告(不能快速吸引消费者眼球)在投入产出效率上都难以企及的。在线投票能够迅速提升活动商家的广告价值,降低商家广告成本,提高知名度以及美誉度。网络投票的主要目的就是人群放大:通过网络投票,可以吸引大量的选手及相关亲友的关注,通过以往的数据统计,一名选手参 与投票,会带动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 用户登录模块关键代码
jsp
<%
request.setCharacterEncoding("gb2312");
String account = request.getParameter("account");
String password = request.getParameter("password");
UserDao udao = new UserDao();
User user = udao.getUserByAccount(account);
if(user == null||!user.getPassword().equals(password)){
%>
<br><br><br><br><br><br>
登录失败,<a href="loginForm.jsp">返回登录页面</a>
<%
}
else if(user.getAdmin()==true){
session.setAttribute("user", user);
response.sendRedirect("admin.jsp");
}
else{
session.setAttribute("user", user);
response.sendRedirect("display.jsp");
}
%>
5.1.2 投票模块关键代码
jsp
<%
String account=user.getAccount();
String[]teacherno =request.getParameterValues("teacherno");
VoteDao vdao = new VoteDao();
UserDao udao = new UserDao();
int ticket= udao.ticket(account);
if(ticket>0){
if(teacherno!=null){
vdao.updateVotes(teacherno);
vdao.updateTictet(account);
}
response.sendRedirect("display.jsp");
}
else{
response.sendRedirect("noTicket.jsp");
}
%>
5.1.3 新建用户模块关键代码
jsp
<%
request.setCharacterEncoding("gb2312");
String account = request.getParameter("account");
String password = request.getParameter("password");
String uname = request.getParameter("uname");
String admin =request.getParameter("admin");
UserDao udao = new UserDao();
User user2=udao.getUserByAccount(account);
if(user2!=null){
%>
<jsp:forward page="changeError2.jsp"></jsp:forward>
<%
}
udao.adduser(account, password, uname, admin);
%>
<br><br><br><br><br><br>
<p align="center">创建用户成功!<br>
<a href="admin.jsp">返回</a></p>
5.1.4 删除用户模块关键代码
jsp
<%
request.setCharacterEncoding("gb2312");
String account = request.getParameter("account");
String acc = user.getAccount();
if(acc.equals(account)){
%>
<jsp:forward page="changeError3.jsp"></jsp:forward>
<%
}
UserDao udao = new UserDao();
User user2=udao.getUserByAccount(account);
if(user2==null){
%>
<jsp:forward page="changeError.jsp"></jsp:forward>
<%
}
udao.deluser(account);
%>
<br><br><br><br><br><br>
<p align="center">删除用户成功!<br>
<a href="admin.jsp">返回</a></p>
5.1.5 修改用户模块关键代码
jsp
<%
request.setCharacterEncoding("gb2312");
String account = request.getParameter("account");
String password = request.getParameter("password");
String uname = request.getParameter("uname");
String admin =request.getParameter("admin");
UserDao udao = new UserDao();
User user2=udao.getUserByAccount(account);
if(user2==null){
%>
<jsp:forward page="changeError.jsp"></jsp:forward>
<%
}
udao.changeuser(account, password, uname, admin);
%>
<br><br><br><br><br><br>
<p align="center">修改用户成功!<br>
<a href="admin.jsp">返回管理页面</a></p>
5.1.6 初始化投票模块关键代码
```jsp public void initVote() throws Exception{ initConnection(); String sql="UPDATE T_VOTE SET VOTE = 0"; PreparedStatement ps = conn.prepareStatement(sql); ps.executeUpdate(); closeConnection(); }
public void initTicket() throws Exception{ initConnection(); String sql="UPDATE T_USER SET TICKET = 1"; PreparedStatement ps = conn.prepareStatement(sql); ps.executeUpdate(); closeConnection(); } ```
5.1.7 注销登录模块关键代码
jsp
<%
session.invalidate();
response.sendRedirect("loginForm.jsp");
%>
5.1.8 非法用户的session检查
管理员权限
jsp
<%
User user =(User)session.getAttribute("user");
if(session.getAttribute("user")==null||user.getAdmin()==false { %>
<jsp:forward page="loginError.jsp"></jsp:forward>
<% } %>
普通用户权限
```jsp <%5.1.8非法用户的session检查 管理员权限:
User user =(User)session.getAttribute("user");
if(user==null){
%>
<jsp:forward page="loginError.jsp"></jsp:forward>
<% } %>
```
5.1.9 防刷票的实现
jsp
public int ticket(String account) throws Exception{
initConnection();
String sql ="SELECT TICKET FROM T_USER WHERE ACCOUNT= ? ";
PreparedStatement ps = conn.prepareStatement(sql);
ps.setString(1, account);
ResultSet rs = ps.executeQuery();
rs.next();
int ticket =rs.getInt("TICKET");
if(ticket==0) {
closeConnection();
return 0;
}
else {
closeConnection();
return 1;
}
}
5.2 数据库与操作设计开发
5.2.1 连接数据库
jsp
public void initConnection() throws Exception {
Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");
conn=DriverManager.getConnection("jdbc:sqlserver://localhost:
1433;DatabaseName=Vote;user=root;password=123456789");
}
5.2.2 数据库操作设计
jsp
public User getUserByAccount(String account) throws Exception{
User use = null;
initConnection();
String sql="SELECT ACCOUNT,PASSWORD,UNAME,ADMIN FROM T_USER WHERE ACCOUNT = ?";
PreparedStatement ps = conn.prepareStatement(sql);
ps.setString(1, account);
ResultSet rs =ps.executeQuery();
if(rs.next()) {
use = new User();
use.setAccount(rs.getString("ACCOUNT"));
use.setPassword(rs.getString("PASSWORD"));
use.setUname(rs.getString("UNAME"));
use.setAdmin(rs.getBoolean("ADMIN"));
}
closeConnection();
return use;
}
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
参考文献
- 利用JSP技术开发基于WEB的人事工资管理系统(大连铁道学院·杜欣然)
- 利用JSP技术开发基于WEB的人事工资管理系统(大连铁道学院·杜欣然)
- 基于J2EE的学生网上考试系统的设计与实现(山东大学·雷怡然)
- 基于EJB的WEB数据库应用研究(武汉理工大学·孟峥嵘)
- 基于J2EE的远程教育平台的开发与实现(吉林大学·葛瑛)
- 基于J2EE的远程教育平台的开发与实现(吉林大学·葛瑛)
- 课程及成绩管理系统的设计与实现(厦门大学·赵超)
- 基于轻量级JAVA EE的高校在线投票系统的设计与实现(吉林大学·孙丽红)
- 基于J2EE的学生网上考试系统的设计与实现(山东大学·雷怡然)
- 企业内手机实时投票问卷系统的设计与实现(华中科技大学·彭良龙)
- 用JSP技术开发基于WEB的房地产网络管理信息系统(大连理工大学·齐鲲鹏)
- 少年宫课外学习选课系统软件的设计与实现(电子科技大学·黄涛)
- 基于J2EE技术的考试系统的实现(大连海事大学·齐崧然)
- 基于J2EE技术的考试系统的实现(大连海事大学·齐崧然)
- 基于J2EE的高校学生选课管理系统的设计与实现(电子科技大学·刘雯)
本文内容包括但不限于文字、数据、图表及超链接等)均来源于该信息及资料的相关主题。发布者:毕设货栈 ,原文地址:https://bishedaima.com/yuanma/35163.html