使用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"> 选项调查中总共有<span class="STYLE5"><%=rs1.getInt(1) %></span>人参加投票!</p></td>
</tr>
<tr bgcolor="f9cd34">
<td width="40"> </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"> </td>
</tr>
<tr>
<td height="30" colspan="3" bgcolor="#FFCC00"> </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>
<a href="voteok.jsp">查看结果</a>
</span>
</p>
</body>
</html>
效果展示