# 基于JSP实现的在线投票系统
# 一、设计方案
## 1.1 投票系统的功能组成
投票系统功能有:选择投票和个人操作及设置,投票设置,投票结果分析,投票操作保障。
### 1.1.1 选择投票和个人操作及设置
- 列出所有正在进行的投票活动的简略信息,供投票人选择:(也应可查看已有结果的投票活动情况)列出信息有:投票活动的名称、发起人、投票人数、投票时间等
- 点击选择某投票活动后,列出该次投票活动的详细内容介绍,可选择进入投票
- 进行投票操作:要先输入验证信息(如系统自动检测该机IP地址是否合法,检测投票人是否合法,检测验证码是否合法等),如无错误才可以进行投票,按投票规则填写投票提交表,提交完成投票
- 设置及记录服务器地址:即让客户端机器能顺利连接到服务器端,并且该客户端IP地址合法等
- 个人资料管理:是投票人的个人资料登记、密码设置等,可参考论坛式的注册、登陆、管理模式
### 1.1.2 投票设置
- 设置候选人资料:
- 填写个人信息(包括姓名、性别、年龄、民族、出生年月日、政治面貌、家庭住址、联系方式等……)
- 编码:由系统自动生成,投票前后需一致
- 推荐意见:事迹介绍、或者是个人介绍等
- 设置投票时间:设置该次投票的开始及结束时间,投票人只能在投票有效期间投票
- 设置投票类型、投票规则:如该次投票是单选、还是多选、(选多少人)、还是评分制(最低分、最高分多少)、是否可投弃权票、是否可投反对票、多选最终选出多少人、评分制最终选出多少人等
- 设置合法投票者:设置投票机器的IP、投票人的名单等
### 1.1.3 投票结果分析
- 排名结果:单选的结果、多选的结果(按得票数排列,胜出人显著显示)、评分制结果(按分数排列,胜出人显著显示)
- 投票的统计信息:(需要做到实时变化以及最终结果显示)包括投票的剩余时间、投票的人数情况等
### 1.1.4 投票操作保障
- IP验证:验证投票人的机器IP地址是否合法
- 时间验证:投票时间的控制,时间到即结束该次投票活动(对局域网,可不用考虑延时问题; 但如果是基于internet的投票,要考虑: 即客户端投票时,还在有效投票时间内,但数据传到服务器端, 已经过了有效投票时间, 这时应该如何计算? 如果要使得系统设计得更合理, 希望能实现按投票当时的时间,而不是按数据到达时间, 又要防止客户端在时间上欺骗, 应该如何设计?)
- 投票人验证:投票人是本系统用户,但要验证其是否享有对某次投票活动的投票权利,并且验证其帐号、密码的正确性,不可多次投票
- 投票对象验证:所投的人是否存在于候选人列表中,或是否符合本次投票活动规则(因为某些投票活动可另填自己认为可以的候选人),如不符合是否当弃权处理
- 验证码验证:防止利用软件连续投票,或自动投票
## 1.2 投票系统的界面组成
**投票系统前台界面**
![](http://www.writebug.com/myres/static/uploads/2021/10/19/d3b0b8ed3157693963cba16969c4f073.writebug)
**投票系统后台界面**
![](http://www.writebug.com/myres/static/uploads/2021/10/19/37a2e699dc12b332a0a2a56f8b6c817f.writebug)
## 1.3 投票系统的算法、数据结构
### 1.3.1 投票系统前端
前端主要用到了盒子模型,使用到的数据结构主要是数组,集合来用于存储从数据库查询到的投票列表以及候选人信息。
### 1.3.2 投票系统后台
后台使用到的算法主要是查找算法,例如从数组或集合中查找到该用户,或者查找到用户点击的投票选项。数据结构使用了Map,ArrayList来存储提示信息和用户session。
# 二、开发过程
## 2.1 投票系统的设计
### 2.1.1 数据库设计
根据实验要求,抽取出四个数据库表,分别是用户表(user),投票活动表(item),候选人信息表(item_options),投票结果表(result)。其中投票活动表和候选人表是一对多关系,投票活动表和投票结果表也是一对多关系,用户表和投票活动表是一对一关系。四个表的ER图如下所示:
![](http://www.writebug.com/myres/static/uploads/2021/10/19/c8ca1f00564eafa4ea32b9d482aad091.writebug)
### 2.1.2 系统架构设计
本投票系统使用MVC架构,使用JSP+HTML+JQuery+CSS作为视图层,Servlet作为控制器,JDBC+MySQL作为数据模型层。架构图如下:
![](http://www.writebug.com/myres/static/uploads/2021/10/19/1c241d5fad22737df71f5a2da1a95bf7.writebug)
### 2.1.3 页面设计
使用盒子模型,分为上中下三个盒子,其中数据显示主要在中间区域。设计如下:
![](http://www.writebug.com/myres/static/uploads/2021/10/19/78a63ea37b780e65016297e9450c68e6.writebug)
## 2.2 投票系统的实现
### 2.2.1 实现技术
利用Java语言,使用JavaWeb技术体系中的:JSP+Servlet+JDBC+MySQL技术,来开发一个web端的投票系统。
### 2.2.2 数据访问层实现(请看db包和dao包下的所有文件。这里只贴DB.java)
```java
public class DB {
public static final String DB_DRIVER = "com.mysql.jdbc.Driver";
public static final String DB_URL = "jdbc:mysql://127.0.0.1:3306/db_vote?characterEncoding=utf-8";
public static final String USER = "root";
public static final String PWD = "123456";
private Connection con = null;
private Statement stmt = null;
private PreparedStatement pstmt = null;
public DB() {
createConnection();
try {
stmt = con.createStatement();
} catch (SQLException ex) {
System.err.println("Error: " + ex.getMessage());
}
}
public DB(String preparedSql) {
createConnection();
try {
pstmt = con.prepareStatement(preparedSql,Statement.RETURN_GENERATED_KEYS);
} catch (SQLException ex) {
System.err.println("Error: " + ex.getMessage());
}
}
private void createConnection() {
try {
Class.forName(DB_DRIVER);
con = DriverManager.getConnection(DB_URL, USER, PWD);
} catch (ClassNotFoundException ex) {
System.err.println("Error: 类不存在!" + ex.getMessage());
} catch (SQLException ex) {
System.err.println("Error: 连接数据库失败!" + ex.getMessage());
}
}
public ResultSet select(String sql) {
ResultSet rs = null;
try {
rs = stmt.executeQuery(sql);
} catch (SQLException ex) {
System.err.println("Error: " + ex.getMessage());
}
return rs;
}
//preparedStatement的查询方法
public ResultSet select() {
ResultSet rs = null;
try {
rs = pstmt.executeQuery();
} catch (SQLException ex) {
System.err.println("Error: " + ex.getMessage());
}
return rs;
}
public int update(String sql) {
int result = 0;
try {
result = stmt.executeUpdate(sql);
} catch (SQLException ex) {
System.err.println("Error: " + ex.getMessage());
}
return result;
}
//preparedStatement的更新
public int update() {
int result = 0;
try {
result = pstmt.executeUpdate();
} catch (SQLException ex) {
System.err.println("Error: " + ex.getMessage());
}
return result;
}
public int getInsertId(){
int autoInckey = -1;
ResultSet rs = null; // 获取结果
try {
rs = pstmt.getGeneratedKeys();
if (rs.next()){
autoInckey = rs.getInt(1);
没有合适的资源?快使用搜索试试~ 我知道了~
资源推荐
资源详情
资源评论
收起资源包目录
精选_基于JSP实现的在线投票系统_源码打包 (149个子文件)
mvnw.cmd 6KB
bootstrap.min.css 141KB
bootstrap.min.css 141KB
dashboard.css 2KB
dashboard.css 2KB
signin.css 906B
signin.css 906B
layout.css 18B
投票系统实验报告.docx 1.31MB
投票系统使用说明.docx 17KB
数据库设计分析文档.docx 13KB
.gitattributes 66B
.gitignore 278B
login.html 2KB
login.html 2KB
webvote.iml 11KB
MavenWrapperDownloader.java 5KB
PageEntity.java 3KB
WebVoteController.java 3KB
WebConfig.java 2KB
BaseEntity.java 1KB
UserServiceImpl.java 1018B
User.java 993B
VoteServiceImpl.java 961B
BaseController.java 817B
UserMapper.java 559B
WebvoteApplication.java 532B
WebvoteApplicationTests.java 332B
UserService.java 258B
VoteMapper.java 195B
VoteService.java 143B
Vote.java 107B
Chart.min.js 154KB
Chart.min.js 154KB
jquery-1.9.1.min.js 90KB
feather.min.js 70KB
feather.min.js 70KB
jquery-3.2.1.slim.min.js 68KB
jquery-3.2.1.slim.min.js 68KB
bootstrap.min.js 48KB
bootstrap.min.js 48KB
popper.min.js 19KB
popper.min.js 19KB
index.jsp 3KB
common.jsp 89B
LICENSE 1KB
inputFiles.lst 1KB
createdFiles.lst 595B
README.md 24KB
mvnw 9KB
application.properties 1KB
application.properties 1KB
maven-wrapper.properties 116B
bootstrap-solid.svg 1KB
bootstrap-solid.svg 1KB
workspace.xml 79KB
ae470477-fee4-4f29-84bc-7e58d9adcc64.xml 36KB
uiDesigner.xml 9KB
pom.xml 3KB
UserMapper.xml 1KB
userMapper.xml 1KB
dataSources.xml 905B
VoteMapper.xml 875B
VoteMapper.xml 875B
dataSources.local.xml 835B
Maven__org_springframework_boot_spring_boot_test_autoconfigure_2_1_4_RELEASE.xml 757B
Maven__org_springframework_boot_spring_boot_starter_logging_2_1_4_RELEASE.xml 736B
Maven__com_github_pagehelper_pagehelper_spring_boot_autoconfigure_1_2_5.xml 731B
Maven__org_springframework_boot_spring_boot_starter_tomcat_2_1_4_RELEASE.xml 729B
Maven__org_springframework_boot_spring_boot_autoconfigure_2_1_4_RELEASE.xml 722B
Maven__org_mybatis_spring_boot_mybatis_spring_boot_autoconfigure_2_0_1.xml 718B
Maven__com_fasterxml_jackson_module_jackson_module_parameter_names_2_9_8.xml 717B
Maven__org_springframework_boot_spring_boot_starter_test_2_1_4_RELEASE.xml 715B
Maven__org_springframework_boot_spring_boot_starter_jdbc_2_1_4_RELEASE.xml 715B
Maven__org_springframework_boot_spring_boot_starter_json_2_1_4_RELEASE.xml 715B
Maven__org_springframework_boot_spring_boot_starter_web_2_1_4_RELEASE.xml 708B
Maven__com_github_pagehelper_pagehelper_spring_boot_starter_1_2_5.xml 689B
Maven__com_vaadin_external_google_android_json_0_0_20131108_vaadin1.xml 688B
Maven__org_springframework_boot_spring_boot_starter_2_1_4_RELEASE.xml 680B
Maven__org_mybatis_spring_boot_mybatis_spring_boot_starter_2_0_1.xml 676B
Maven__com_fasterxml_jackson_datatype_jackson_datatype_jsr310_2_9_8.xml 676B
Maven__org_hibernate_validator_hibernate_validator_6_0_16_Final.xml 669B
Maven__com_fasterxml_jackson_datatype_jackson_datatype_jdk8_2_9_8.xml 662B
Maven__org_springframework_boot_spring_boot_test_2_1_4_RELEASE.xml 659B
Maven__org_apache_tomcat_embed_tomcat_embed_websocket_9_0_17.xml 648B
Maven__org_springframework_spring_expression_5_1_6_RELEASE.xml 646B
Maven__com_fasterxml_jackson_core_jackson_annotations_2_9_0.xml 632B
Maven__org_apache_tomcat_embed_tomcat_embed_jasper_9_0_17.xml 627B
compiler.xml 626B
Maven__org_springframework_spring_context_5_1_6_RELEASE.xml 625B
Maven__org_springframework_boot_spring_boot_2_1_4_RELEASE.xml 624B
Maven__org_springframework_spring_webmvc_5_1_6_RELEASE.xml 618B
Maven__org_apache_tomcat_embed_tomcat_embed_core_9_0_17.xml 613B
Maven__org_springframework_spring_beans_5_1_6_RELEASE.xml 611B
Maven__com_fasterxml_jackson_core_jackson_databind_2_9_8.xml 611B
Maven__org_springframework_spring_jdbc_5_1_6_RELEASE.xml 604B
Maven__org_springframework_spring_test_5_1_6_RELEASE.xml 604B
Maven__org_springframework_spring_core_5_1_6_RELEASE.xml 604B
Maven__org_apache_tomcat_embed_tomcat_embed_el_9_0_17.xml 599B
Maven__javax_annotation_javax_annotation_api_1_3_2.xml 599B
共 149 条
- 1
- 2
资源评论
工具盒子
- 粉丝: 58
- 资源: 1313
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功