需求分析

(1)制作一个投票系统,让学生给自己喜爱的老师投票。该系统由投票界面组成,系统运行,投票界面出现,标题为“欢迎给老师投票”;在界面上有一个表格,显示了各位老师的编号、姓名、得票数;其中,得票数显示为一个红色的进度条,并显示得票的数值;表格的第四列是投票链接,单击链接,该教师的票数加1,并显示在界面上。
(2)实现上述功能后,可考虑进一步改进。如对数据库的封装以及重用代码等;
(3)进一步思考,考虑系统是否存在刷票的隐患,如何防止刷票。

项目源码:

https://download.csdn.net/download/qq_43299503/12037158

实验结果

投票界面:

第一次点击提交投票,界面会自动刷新票数:

第二次点击提交投票:投票失败界面——用于防止刷票(一个小时内只能投一票)

对数据库的封装以及重用代码

package db;import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;import com.mysql.jdbc.Connection;
import com.mysql.jdbc.Statement;import dao.User;
import dao.Vote;public class DB {private String className;private String url;private String username;private String password;private Connection con;private Statement st;private ResultSet res;public DB() {className="com.mysql.jdbc.Driver";url="jdbc:mysql://localhost:3306/votedb";username = "root";password = "";}public void loadDriver() {try {Class.forName(className);} catch (ClassNotFoundException e) {// TODO Auto-generated catch blockSystem.out.println("加载数据库驱动失败!");e.printStackTrace();}}public void getConnection() {loadDriver();try {con = (Connection) DriverManager.getConnection(url, username, password);} catch (SQLException e) {// TODO Auto-generated catch blockSystem.out.println("连接数据库失败!");e.printStackTrace();}}public void getStatement() {getConnection();try {st = (Statement) con.createStatement();} catch (SQLException e) {// TODO Auto-generated catch blockSystem.out.println("获取statement对象失败");e.printStackTrace();}}public void getResultSet(String sql) {if(sql != null && !sql.equals("")) {getStatement();try {res = st.executeQuery(sql);} catch (SQLException e) {// TODO Auto-generated catch blockSystem.out.println("查询数据库失败!");e.printStackTrace();}}}public void closed() {try {if(res != null) {res.close();}if(con != null) {con.close();}if(st != null) {st.close();}} catch (SQLException e) {// TODO Auto-generated catch blockSystem.out.println("关闭数据库失败!");e.printStackTrace();}}public ArrayList<Vote> getAllVotes() throws SQLException{String sql = "select * from vote";getResultSet(sql);ArrayList<Vote> al = new ArrayList<Vote>();while(res.next()) {Vote vote = new Vote();vote.setTeacherid(res.getString("teacherid"));vote.setTeachername(res.getString("teachername"));vote.setVotenumber(res.getInt("votenumber"));al.add(vote);}res.close();return al;}public void updateVotes(String [] teacherid) throws SQLException {getConnection();String sql = "update vote set votenumber = votenumber+1 where teacherid = ?";PreparedStatement ps = con.prepareStatement(sql);for(int i=0;i<teacherid.length;i++) {ps.setString(1, teacherid[i]);ps.executeUpdate();}closed();}public void updateUsers(String ip,long today) throws SQLException {getConnection();String sql = "update users set lastTime ="+ today +" where ip= '"+ip+ "'";PreparedStatement ps = con.prepareStatement(sql);ps.executeUpdate();closed();}public void insertUsers(String ip,long today) throws SQLException {getConnection();String sql = "insert into users(ip, lastTime) values('"+ip+"','+"+today+"')";PreparedStatement ps = con.prepareStatement(sql);ps.executeUpdate();closed();}public User findUser(String ip) {User u = null;String sql = "select * from users where ip = '" + ip + "'";getResultSet(sql);if(res != null) {try {while(res.next()) {u = new User();u.setId(res.getString("id"));u.setIp(res.getString("ip"));u.setLastTime(res.getLong("lastTime"));}} catch (SQLException e) {// TODO Auto-generated catch blockSystem.out.println("封装vote表中数据失败!finduser函数");e.printStackTrace();}finally {closed();}}return u;}public Vote findvote(int id) {Vote v = new Vote();String sql = "select * from vote where teacherid = " + id;getResultSet(sql);if(res == null) {v = null;return v;}else {try {while(res.next()) {v.setTeacherid(res.getString("teacherid"));v.setTeachername(res.getString("teachername"));v.setVotenumber(res.getInt("votenumber"));}} catch (SQLException e) {// TODO Auto-generated catch blocke.printStackTrace();}return v;}}
}

防止刷票功能的实现

vode.jsp

<%String [] teacherid = request.getParameterValues("teacherid");DB db = new DB();//防止刷票long cc = 0, dd = 0;int id = MyTool.strToInt(request.getParameter("like"));Date date = new Date();Vote v = db.findvote(id);long today = date.getTime();long lastTime = 0;String ip= "005";User u = db.findUser(ip);String sql = "";int i=-1,flag=-1;if(u == null){u = new User();u.setIp(ip);u.setLastTime(today);flag=0;}else{lastTime = u.getLastTime();cc = today;dd = lastTime;if((today - lastTime) >= 60 * 60 * 1000){flag=1;}else{flag=2;}}if(flag == 0){db.insertUsers(ip, today);if(i < 0){System.out.println("插入user失败!");i = -1;}db.updateVotes(teacherid);if(i < 0){System.out.println("更新vote表失败(num+1)");i = -1;}response.sendRedirect("index.jsp");}if(flag == 1){db.updateVotes(teacherid);if(i < 0){System.out.println("更新vote表失败(num+1)");i = -1;}db.updateUsers(ip, today);if(i < 0){System.out.println("更新user表失败lastTime=today");i = -1;}response.sendRedirect("index.jsp");}if(flag == 2){//response.sendRedirect("index.jsp");//db.updateVotes(teacherid);response.sendRedirect("message.jsp");}%>

防止刷票的工具类:

package tool;import java.io.UnsupportedEncodingException;
import java.text.SimpleDateFormat;
import java.util.Date;public class MyTool {public static String toChinese(String str) {if(str == null) {str="";}try {str = new String(str.getBytes("ISO-8859-1"),"gb2312");}catch(UnsupportedEncodingException e) {str="";e.printStackTrace();}return str;}public static int strToInt(String str) {if(str == null || str.equals("")) {str = "0";}int i = 0;try {i = Integer.parseInt(str);}catch(NumberFormatException e) {i = 0;e.printStackTrace();}return i;}public static String formatDate(long ms){Date date=new Date(ms);SimpleDateFormat format=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");String strDate=format.format(date);return strDate;}
}

项目详细设计

项目结构

数据库设计

Users:

vote:

简单的Web投票系统,通过数据库的内部验证实现防止刷票功能相关推荐

  1. javaweb简单小项目-投票系统

    这次给大家带来一个课堂基础作业,简单的javaweb投票系统. 当然也设计了添加投票人的接口,只是list页面没有直接导航过去. 如页面显示,可以增加和减少相应的票数.同时id是利用数据库该字段作为主 ...

  2. 投票系统web服务器,创建一个Web投票系统

    您的位置:首页 → 精文荟萃 → 软件资讯 → 创建一个Web投票系统创建一个Web投票系统 时间:2004/10/7 19:09:00作者:蓝点 下面zip文件:http://www.content ...

  3. php一个简单的投票系统_一个简单的PHP投票系统

    一个简单的PHP投票系统 分享到: 作者:转接卡 建立2个表,一个用来显示当前主题,一个存放历史结果. 当前主题表结构:选项(包括主题),票数 历史结果表结构:id,主题名,关点,投票开始时间,投票结 ...

  4. Pollen 1.5 发布,Web 投票系统

    Pollen 1.5 增加了新的投票系统(即时径流投票又名二择一投票,库姆斯法,Borda计数),改进了投票的安全性,修复了投票列表创建和管理方面的 bug 等等. Pollen 是一个采用 Java ...

  5. mysql迅速搭建网页_Django + mysql 快速搭建简单web投票系统

    了解学习pyhton web的简单demo 1. 安装Django, 安装pyhton 自行百度 2. 执行命令创建project  django-admin.py startproject mysi ...

  6. 应急响应“小迪安全课堂笔记”web,系统,数据库三方应用

    应急响应 应急响应初识 WEB 攻击应急响应朔源-后门,日志 WIN 系统攻击应急响应朔源-后门,日志,流量 应急响应-WEB 分析 php&javaweb&自动化工具 应急响应流程 ...

  7. 活动星投票乡村振兴案例网络评选投票小程序简单便捷的投票系统

    用户在使用微信投票的时候,需要功能齐全,又快捷方便的投票小程序. 而"活动星投票"这款软件使用非常的方便,用户可以随时使用手机微信小程序获得线上投票服务,很多用户都很喜欢" ...

  8. 基于Jsp、Java、数据库、HTML实现网上投票系统(含文档和代码)Jsp课程设计

    目录 摘要 第1章 课程设计内容及要求 第2章 系统分析 2.1 系统简介 2.2 系统功能 第3章 系统设计 3.1 开发工具简介 3.2 总体功能模块设计 第4章 系统实现 4.1 数据库实现 4 ...

  9. asp毕业设计——基于asp+access的网上投票系统设计与实现(毕业论文+程序源码)——网上投票系统

    基于asp+access的网上投票系统设计与实现(毕业论文+程序源码) 大家好,今天给大家介绍基于asp+access的网上投票系统设计与实现,文章末尾附有本毕业设计的论文和源码下载地址哦. 文章目录 ...

最新文章

  1. .ajax get获取案例,$.ajax GET请求案例
  2. MFC EDIT控件的使用记录
  3. Time to First Byte(TTFB)与Web性能优化
  4. 网站后台的lnmp启动与重启
  5. App设计灵感之十二组精美的地图导航App设计案例
  6. 阿里云云服务器的端口配置问题
  7. PostgreSQL 10.1 手册_部分 I. 教程_第 2 章 SQL语言
  8. Linux网卡eth0变成eth1修改方法
  9. Bootstrap 响应式设计
  10. hive大字段拼接与切割实战(一个大字段保存每天历史数据)
  11. java实验小狗状态_Java第6章-接口与多态实验2(小狗的状态)
  12. oracle的pl sql教程,Oracle PL SQL从入门到精通_IT教程网
  13. 停车场管理系统php设计,停车场管理系统设计源代码
  14. C++ 纯WIN32 API编程 悦读器实战示例
  15. android仿淘宝语音搜索功能集成科大讯飞
  16. 设计一个排序和查找系统。能够实现对给定的一组学生的借书证信息(如:卡号、姓名、系别、班号等)进行排序和查找。
  17. 2022中国MarTech领域最具商业合作价值企业盘点
  18. Vue 组件封装之 Questionnaire 问卷调查
  19. 一键启动多应用(windows版)
  20. vue中的vxe-table中文文档

热门文章

  1. 玻璃幕墙清洗机器人市场前景_用机器人清洗高楼玻璃幕墙,这个团队前景我们给满分!...
  2. paypal订单捕获java,paypal获取交易订单信息api(python实现)
  3. C#,生信软件实践(01)——DNA序列数据库FASTA文件合并工具的源代码
  4. 常见的人工神经网络模型,人工智能神经网络模型
  5. Excel 单元格的实际尺寸
  6. 软件工程毕业设计课题(18)基于JAVA毕业设计JAVA景区景点旅游网站系统毕设作品源码
  7. 线程间通信 - 多线程编程(一)
  8. 合天网络靶场能力详解
  9. idea中Tomcat的使用
  10. ZOJ 1104 Leaps Tall Buildings