实验题目:在线投票系统
实验目的:综合运用Web开发技术开发一个在线投票系统,开发过程涵盖需求、设计、编码、测试等软件开发生命周期的各个阶段,通过这个项目的开发,使学生具备较强的Web开发能力,并培养学生的动手能力和解决实际问题的能力。
实验要求:项目包含网站前台和后台管理系统,涉及用户管理、投票管理、报表系统等功能。需要实现用户界面和业务逻辑,数据存储在数据库中。
主要代码:
javabean的设计: 1.值建一个值JavaBean用来封装存储表tb-temp中的投票选项信息,代码如下:
package com.yxq.valuebean;
public cla VoteSingle {
private String id; //存儲選項ID private String title;//存儲選項標題 private String num;//存儲選項所得票數 private String order;//存儲選項的排列序號
public String getId() { } public void setId(String id) { } public String getNum() { } public void setNum(String num) { } public String getOrder() { } public void setOrder(String order) { } public String getTitle() { this.order = order; return order; this.num = num; return num; this.id = id; return id;
} } return title; public void setTitle(String title) { } this.title = title;
同样建另一个值JavaBean用来封装存储表tb-vote中的信息:
package com.yxq.valuebean;
public cla TempSingle {
} private String id;//存儲投票用戶ID private String voteIp;//存儲投票用戶IP private long voteMSEL;//存儲毫秒數
private String voteTime;//存儲yyyy-MM-dd HH:mm:形式的時間
public long getVoteMSEL() { } public void setVoteMSEL(long voteMSEL) { } public String getVoteTime() { } public void setVoteTime(String voteTime) { } public String getId() { } public void setId(String id) { } public String getVoteIp() { } public void setVoteIp(String voteIp) { } this.voteIp = voteIp; return voteIp; this.id = id; return id; this.voteTime = voteTime; return voteTime; this.voteMSEL = voteMSEL; return voteMSEL; 2.数据库操作类的编写: 定义属性及构造方法 package com.yxq.toolbean;
import java.sql.Connection; import java.sql.DriverManager; import java.sql.Statement; import java.sql.ResultSet; import java.util.ArrayList; import java.util.List;
import com.yxq.valuebean.TempSingle; import com.yxq.valuebean.VoteSingle;
public cla DB { private String claName;//存儲數據庫驅動類路徑
private String url;//存儲數據庫URL
private String username;//存儲登陸數據庫的用戶名
private String paword;//存儲登陸數據庫的密碼
private Connection con;//聲明一個Connection對象
private Statement stm;//聲明一個Statement對象用來執行SQL語句
private ResultSet rs;//聲明一個ResultSet對象用來存儲結果集
public DB() {
//通過構造方法為屬性賦值
claName = \"org.apache.derby.jdbc.ClientDriver\";
url = \"jdbc:derby://localhost:1527/myeclipse\";
username = \"claiccars\";
paword = \"claiccars\"; }
/**
* @功能 加载数据库驱动程序
*/ public void loadDrive() {
try {
Cla.forName(claName);
//加載數據庫驅動程序
} catch (ClaNotFoundException e) {
System.out.println(\"加载数据库驱动程序失败!\");
e.printStackTrace();
//向控制臺輸出提示信息
} }
/**获取数据库连接
* @功能
*/ public void getCon() { loadDrive(); //加載數據庫驅動程序
try {
con = DriverManager.getConnection(url, username, paword);//獲取連接
} catch (Exception e) {
System.out.println(\"连接数据库失败!\");
e.printStackTrace(); } } /** * @功能 获取Statement对象
*/ public void getStm() { getCon();//獲取數據庫連接
try {
stm = con.createStatement();//獲取Statement類對象
} catch (Exception e) {
System.out.println(\"获取Statement对象失败!\");
e.printStackTrace(); } } /** * @功能 查询数据表,获取结果集
*/ public void getRs(String sql) { getStm(); try {
rs = stm.executeQuery(sql);//執行SQL語句查詢數據表獲取結果集
} catch (Exception e) {
System.out.println(\"查询数据库失败!\");
e.printStackTrace(); } } /** * @功能 查询数据表,获取投票选项
*/ public List selectVote(String sql) {
} List votelist = null; if (sql != null && !sql.equals(\"\")) { getRs(sql);//查詢數據表獲取結果集
if (rs != null) {
votelist = new ArrayList();
try {
while (rs.next()) {//依次將結果集中的记录封装到VoteSingle类对象中
VoteSingle voteSingle = new VoteSingle();
voteSingle.setId(MyTools.intToStr(rs.getInt(1)));
voteSingle.setTitle(rs.getString(2));
voteSingle.setNum(MyTools.intToStr(rs.getInt(3)));
voteSingle.setOrder(MyTools.intToStr(rs.getInt(4)));
votelist.add(voteSingle);//将VoteSingle类对象存储到List集合中
}
} catch (Exception e) {
System.out.println(\"封装tb_vote表中数据失败!\");
e.printStackTrace();
} finally {
closed();
//关闭 数据库
} } } return votelist; /** * @功能 查询数据表,获取指定IP最后一次投票的记录
*/ public TempSingle selectTemp(String sql) { TempSingle tempSingle = null; if (sql != null && !sql.equals(\"\")) {
getRs(sql);//查询数据表获取结果集
if (rs != null) {
try {
while (rs.next()) {//若该结果集中有记录,说明当前用户投过票
tempSingle = new TempSingle();
tempSingle.setId(MyTools.intToStr(rs.getInt(1)));
tempSingle.setVoteIp(rs.getString(2));
tempSingle.setVoteMSEL(rs.getLong(3));
tempSingle.setVoteTime(rs.getString(4));
}
} catch (Exception e) {
System.out.println(\"封装tb_temp表中数据失败!\");
e.printStackTrace();
} finally {
closed();
//关闭数据库
}
}
}
return tempSingle;//返回TempSingle类对象中
}
/**
* @功能 更新数据表,实现票数累加
*/ public int update(String sql) {
int i = -1;
if (sql != null && !sql.equals(\"\")) {
getStm();//获取Statement类对象
try {
i = stm.executeUpdate(sql);//执行SQL语句更新数据表
} catch (Exception e) {
System.out.println(\"更新数据库失败!\");
e.printStackTrace();
} finally {
closed();
}
}
return i; } /**
* @功能 关闭数据库连接
*/ public void closed() {
try {
if (rs != null)
rs.close();//关闭结果集
if (stm != null)
stm.close();//关闭Statement类对象
if (con != null)
con.close();//关闭数据库连接
} catch (Exception e) {
System.out.println(\"关闭数据库失败!\");
e.printStackTrace();
} } } 3.工具类的编写: package com.yxq.toolbean;
import java.text.SimpleDateFormat; import java.util.Date;
public cla MyTools { /** * @功能 将int型数据转换为String型数据
* @参数 num为要转换的int型数据
* @返回值 String类型
*/ public static String intToStr(int num){
return String.valueOf(num); } /** * @功能 比较时间。
* @参数 today当前时间,temp为上次投票时间。这两个参数都是以毫秒显示的时间
* @返回值 String类型
*/ public static String compareTime(long today,long temp){
int limitTime=60;
//设置限制时间为60分钟
long count=today-temp;
//计算当前时间与上次投票时间相差的毫秒数(该结果一定是大于等于0)
if(count
//如果相差小于等于60分钟(1分=60秒,1秒=1000毫秒)
return \"no\";
else
//如果相差大于60分钟
return \"yes\"; } /** * @功能 格式化时间为指定格式。首先通过Date类的构造方法根据给出的毫秒数获取一个时间,然后将该时间转换为指定格式,如\"年-月-日 时:分:秒\" * @参数 ms为毫秒数
* @返回值 String类型
*/ public static String formatDate(long ms){
Date date=new Date(ms);
SimpleDateFormat format=new SimpleDateFormat(\"yyyy-MM-dd HH:mm:\");
String strDate=format.format(date);
return strDate; } } 4.显示投票选项的设计: <%@ page contentType=\"text/html; charset=UTF-8\"%> <%@ page import=\"java.util.List\" %>
<%@ page import=\"com.yxq.valuebean.VoteSingle\" %>
<%
response.addHeader(\"Pragma\",\"No-cache\"); response.addHeader(\"Cache-Control\",\"no-cache\"); response.addDateHeader(\"Expires\",1L);
String sql=\"select * from app.tb_vote order by vote_order\";//生成查询投票选项的SQL语句
List votelist=myDb.selectVote(sql); //查询数据表获取所有投票选项 %>
在线投票
background=\"images/voteT.jpg\">
<% if(votelist==null||votelist.size()==0){ %> 没有选项可显示!
<% } else{ %>
<%
int i=0; while(i
%>
style=\"text-indent:7\"><%=single.getTitle() %> \">
<%
i++; } //while结束
%>
票!
<%
} //else结束
%>
style=\"background-image:url(images/submitB.jpg);width:68;height:26;border:0\">
style=\"background-image:url(images/resetB.jpg);width:68;height:26;border:0\">
&nb
注意事项:
1小时内只能投一次
VoteSingle single=(VoteSingle)votelist.get(i);
sp;