使用JDBC实现一个简易的投票系统

该博客介绍了一个基于JDBC实现的简易投票系统,包括数据库设计、投票页面vote.jsp、投票判断voteadd.jsp和投票结果展示voteok.jsp。系统通过检查投票IP防止重复投票,并展示实时投票结果。
摘要由CSDN通过智能技术生成

使用JDBC实现一个简易的投票系统

首先在votesystem数据库中设计两张表:
person表用来存放被投人信息
在这里插入图片描述
t_ip表用来存放已经投过票的ip
在这里插入图片描述
然后设计主程序-投票页面vote.jsp
这是网上找的一个模板就拿来用了,侵删

<%@ page language="java" import="java.util.*,java.sql.*" pageEncoding="gb2312"%>
<%
	Class.forName("com.mysql.jdbc.Driver");
	Connection conn = DriverManager.getConnection("jdbc:mysql://localhost/votesystem?user=root&password=123456");
	String sql = "select * from person";
	PreparedStatement psta = conn.prepareStatement(sql);
	ResultSet rs = psta.executeQuery();

%>

<html>
	<head>
		<title>投票主页</title>
		<style type="text/css">
			.a1:link {    
				COLOR: #E0FFFF; TEXT-DECORATION: none; font-size:11pt;
			}
			.a1:visited {   
				COLOR: #FFFFFF; TEXT-DECORATION: none; font-size:11pt;
			}
			.a1:active {    
				COLOR: #CD0000; TEXT-DECORATION: none; font-size:11pt;
			}
			.a1:hover {   
				COLOR: #4B0082; font-size:11pt;
			}
		</style>
	</head> 
	<body bgcolor="#F0FFFF">
		<table width="600" border="0" align="center" cellpadding="0"
			cellspacing="0">
			<tr>
				<td width="600" height="35"   background="images/vote_01_1.jpg">
					<table align="center">
						<tr>
							<td width="110"><a href="#" class="a1">首页</a></td>
							<td width="110"><a href="#" class="a1">最新新闻</a></td>
							<td width="110"><a href="#" class="a1">留言板</a></td>
							<td width="110"><a href="#" class="a1">联系我们</a></td>
							
						</tr>
					</table>
				</td>
			</tr>
			<tr>	
				<td>
					<img src="images/vote_01_2.jpg" width="600" height="256" />
				</td>
			</tr>	
			<tr>
				<td colspan="3">
					<img src="images/vote_02.gif" width="600" height="39" />
				</td>
			</tr>
			<tr>
				
				<td width="448" height="271" background="images/vote_03.jpg">
					<table width="300" height="250" border="1" align="center" cellpadding="0"cellspacing="0">
						<tr>
							<td height="20" align="center"><font size=4>选择你所投票的项目:</font></td>
						</tr>
						<tr>
							<td>
								<form action="voteadd.jsp">
								<table border=1 align=center>
									<tr>
										<td colspan="2">请选择你投票的人:</td>
									</tr>
									<%
										while(rs.next()){
									%>
									<tr>
										<td>
											<input type="radio" name="id" value="<%=rs.getString("uid")%>">
										</td>
										<td>
											<%=rs.getString("name") %>
										</td>
									</tr>
									<%} %>
									
									<tr>
										<td><input type="submit" value="投票"></td>
										<td><input type="button" value="查看"></td>
									</tr>
								</table>
								</form>
							</td>
						</tr>
					</table>
				</td>
				
			</tr>
			<tr>
				<td colspan="3">
					<img src="images/vote_04.jpg" width="600" height="48" />
				</td>
			</tr>
		</table>
	</body>
</html>
<%
	conn.close();
%>

voteadd.jsp判断页面,如果这个登入的IP地址在t_ip中存在,就拒绝登入,跳转到sorry.jsp页面;如果是第一次投票,就将对应被投人的voteCount加1,然后跳转到voteok.jsp查看投票结果。

<%@ page language="java" import="java.util.*,java.sql.*" pageEncoding="gb2312"%>
<html>
  <head>
   <title>vote-add</title>
</head>
  
  <body>
    <%
    	Class.forName("com.mysql.jdbc.Driver");//注册数据库	驱动
		//获取数据库连接
		Connection conn = DriverManager.getConnection("jdbc:mysql://localhost/votesystem?user=root&password=123456");
		
    	//获取投票人的ip地址
    	//String IP = request.getRemoteAddr();
    	String IP = "";
    	if (request.getHeader("x-forwarded-for") == null) {  
	        IP = request.getRemoteAddr();  
	    }else{ 
	    	IP = request.getHeader("x-forwarded-for");  
	    }
	    //去数据库查询这个ip是否投票过,如果没有,如果投过 去跳转到sorry.jsp
    	String sql = "select * from t_ip where ip = ?";
    	PreparedStatement psta = conn.prepareStatement(sql);
    	psta.setString(1,IP);
		ResultSet rs = psta.executeQuery();
		if(rs.next()){
			response.sendRedirect("sorry.jsp");
			conn.close();
		}else{
			sql = "insert into t_ip(ip) values('"+ IP +"')";
			psta = conn.prepareStatement(sql);
			psta.executeUpdate();
			
			//接受传过来的id
	    	String str = request.getParameter("id");
	    	//链接数据库  将这个id的人的票数加1
			sql = "update person set voteCount = voteCount+1 where uid = ?";
			psta = conn.prepareStatement(sql);
	    	psta.setInt(1,Integer.parseInt(str));
			psta.executeUpdate();
			conn.close();
	    	//页面跳转到ok.jsp
	    	response.sendRedirect("voteok.jsp");
		}
    %>
  </body>
</html>

voteok.jsp展示投票结果

<%@ page language="java" import="java.util.*,java.sql.*" pageEncoding="gb2312"%>
<%
	Class.forName("com.mysql.jdbc.Driver");//注册数据库	驱动
	//获取数据库连接
	Connection conn = DriverManager.getConnection("jdbc:mysql://localhost/votesystem?user=root&password=123456");
	
	String sql = "select * from person";
	PreparedStatement psta = conn.prepareStatement(sql);
	ResultSet rs = psta.executeQuery();
	
	Statement st = conn.createStatement();
	ResultSet rs1 = st.executeQuery("select sum(voteCount) from person");  
	int keyValue = -1;   
	if (rs1.next()) {  
    	rs1.getInt(1);  
	}  
	//out.print(rs1.getInt(1));
%>
<html>
	<head>
		<title>显示</title>
		<style type="text/css">
			body,td,th {
				font-size: 12px;
			}			
			body {
				margin-top: 0px;
				background-color: #FFF;
			}			
			.STYLE1 {
				font-size: 14px
			}			
			.STYLE3 {
				color: #FF0000;
				font-size: 14;
			}			
			.STYLE5 {
				color: #FF0000;
				font-size: 16px;
			}			
			.STYLE6 {
				font-family: Geneva, Arial, Helvetica, sans-serif;
				color: #FF0000;
			}
		</style>
	</head>
	<body>
		<table width="550" border="0" align="center" cellpadding="0" cellspacing="0">
	  		<tr>
	    		<td height="30" colspan="3" bgcolor="#FFCC00"><p class="STYLE1">&nbsp;&nbsp;&nbsp;&nbsp; 选项调查中总共有<span class="STYLE5"><%=rs1.getInt(1) %></span>人参加投票!</p></td>
	  		</tr>
	  		<tr bgcolor="f9cd34">
	    		<td width="40">&nbsp;</td>
	    		<td width="464" height="" bgcolor="fff2bb">
	    			<table border=1 align=center>
									<tr >
										<td colspan="3" width="800">当前投票结果:</td>
									</tr>
									<tr>
										<td>编号</td>
										<td>Idol</td>
										<td>票数</td>
									</tr>
									<%
										while(rs.next()){
									%>
									<tr>
										<td>
											<%=rs.getInt("uid") %>
										</td>
										<td>
											<%=rs.getString("name") %>
										</td>
										<td>
											<%=rs.getInt("voteCount") %>
										</td>
									</tr>
									<%} %>
					</table>
	    		</td>
	    		<td width="40">&nbsp;</td>
	  		</tr>
	  		<tr>
	   			 <td height="30" colspan="3" bgcolor="#FFCC00">&nbsp;</td>
	  		</tr>
		</table>
	</body>
</html>
<%
	conn.close();
%>

sorry.jsp页面

<%@ page language="java" import="java.util.*" pageEncoding="gb2312"%>
<html>
	<head>
		<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
		<title>投票失败</title>
	</head>
	<body>
		<p align="center">
			对不起,你已投过一次票了,请不要多次投票!
		</p>
		<p align="center">
			<span class="STYLE1">
				<a href="vote.jsp">回主页面</a>&nbsp; 
				<a href="voteok.jsp">查看结果</a>
			</span>
		</p>
	</body>
</html>

效果展示
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

  • 1
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值