一.需求
在界面上显示老师的编号,姓名,得票数,得票数显示为一个红色的进度条,并且显示得票数的数值。表格的第四列用复选框。用户可以选择多个,点击提交按钮,就能完成。
二.系统分析
用一个JSP页面显示投票界面。另一个负责接收用户的票数,将对应老师的票数加1后,工作完毕再跳转回第一个JSP。复选框定义为同名表单元素,其包含的值为对应教师的编号。复选框代码应该为如下:
<input name = "teacherno" type = "checkbox" value = "1">
...
<input name = "teacherno" type = "checkbox" value = "2">
三.程序模块
页面或类 | 作用 |
---|---|
VoteDao.java | 连接数据库;查询信息;修改教师的得票数 |
Vote.java | 封装教师编号,姓名和得票数 |
display.jsp | 调用VoteDao查询教师的信息;并显示信息 |
vote.jsp | 获得投票链接传来的教师编号数组;调用VoteDao将每个教师编号对应的得票数加1;跳转回display.jsp |
四.程序代码
在名为school的数据库中创建一个名为t_vote的表。如下图:
初始化每个教师的得票数为0,如下图:
准备含有一个很小的红色小正方形图片bar.jpg。将它放在Web项目的WebRoot目录下的img目录。
Vote.java
package vo;
public class Vote {
private String teacherno;
private String teachername;
private int votenumber;
public String getTeacherno(){
return teacherno;
}
public void setTeacherno(String teacherno) {
this.teacherno = teacherno;
}
public String getTeachername() {
return teachername;
}
public void setTeachername(String teachername) {
this.teachername = teachername;
}
public int getVotenumber() {
return votenumber;
}
public void setVotenumber(int votenumber) {
this.votenumber = votenumber;
}
}
VoteDao.java
package dao;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.Statement;
import java.util.ArrayList;
import vo.Vote;
public class VoteDao {
private Connection conn = null;
public void initConnection() throws Exception{
Class.forName("com.mysql.cj.jdbc.Driver");//加载驱动
conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/school?useSSL=false&serverTimezone=GMT", "root", "123456");
}
//返回所有教师及其得票数
public ArrayList getAllVotes() throws Exception{
ArrayList al = new ArrayList();
initConnection();
String sql = "select * from t_vote";
Statement stat = conn.createStatement();
ResultSet rs = stat.executeQuery(sql);
while(rs.next()){
Vote vote = new Vote();
vote.setTeacherno(rs.getString("teacherno"));
vote.setTeachername(rs.getString("teachername"));
vote.setVotenumber(rs.getInt("vote"));
al.add(vote);
}
stat.close();
conn.close();
return al;
}
//修改某系教师的得票数
public void updateVotes(String[] teacherno) throws Exception{
initConnection();
String sql = "update t_vote set vote = vote + 1 where teacherno = ?";
PreparedStatement ps = conn.prepareStatement(sql);
for(int i = 0; i < teacherno.length; i++){
ps.setString(1, teacherno[i]);
ps.executeUpdate();
}
ps.close();
conn.close();
}
}
display.jsp
<%@ page language="java" import="java.util.*" pageEncoding="gb2312"%>
<%@ page import = "dao.VoteDao" %>
<%@ page import = "vo.Vote" %>
<html>
<head>
<title>display</title>
</head>
<body>
<form action = "vote.jsp" method = "post" >
<table align = "center">
<caption>欢迎给老师投票<input type = "submit" value = "提交投票"></caption>
<tr bgcolor = "yellow" >
<td>编号</td>
<td>姓名</td>
<td>得票数</td>
<td>投票</td>
</tr>
<%
VoteDao vdao = new VoteDao();
ArrayList votes = vdao.getAllVotes();
for(int i = 0; i < votes.size(); i++){
Vote vote = (Vote)votes.get(i);
%>
<tr bgcolor = "pink" >
<td><%= vote.getTeacherno() %></td>
<td><%= vote.getTeachername() %></td>
<td><img src = "img/bar.jpg" width = "<%= vote.getVotenumber() %>" height = "10"><%= vote.getVotenumber() %></td>
<td><input type = "checkbox" name = "teacherno" value = "<%= vote.getTeacherno() %>"></td>
</tr>
<%
}
%>
</table>
</form>
</body>
</html>
vote.jsp
<%@ page language="java" import="java.sql.*" pageEncoding="gb2312"%>
<%@ page import = "dao.VoteDao" %>
<html>
<head>
<title>vote</title>
</head>
<body>
<%
String[] teacherno = request.getParameterValues("teacherno");
VoteDao vdao = new VoteDao();
vdao.updateVotes(teacherno);
%>
<jsp:forward page = "display.jsp"></jsp:forward>
</body>
</html>
在浏览器输入http://localhost:8080/Prj10_01/display.jsp,如下图:
随便投票,点击提交按钮,如下图:
摘自《Java Web开发与应用》,主编郭克华,副主编宋虹,清华大学出版社。
欢迎小伙伴来评论噢~~