重新学习JSP之九——基于表单的投票系统

一.需求

在界面上显示老师的编号,姓名,得票数,得票数显示为一个红色的进度条,并且显示得票数的数值。表格的第四列用复选框。用户可以选择多个,点击提交按钮,就能完成。

二.系统分析

用一个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开发与应用》,主编郭克华,副主编宋虹,清华大学出版社。

欢迎小伙伴来评论噢~~

  • 1
    点赞
  • 23
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值