计算机专业课程设计在线投票系统_第1页
计算机专业课程设计在线投票系统_第2页
计算机专业课程设计在线投票系统_第3页
计算机专业课程设计在线投票系统_第4页
计算机专业课程设计在线投票系统_第5页
免费预览已结束,剩余11页可下载查看

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

-1- myeclipse、jSP,数据库开发环境1MyEclipse简介MyEclipse企业级工作平台〔MyEclipseEnterpriseWorkbench,简称MyEclipse〕应用程序效劳器的整合方面极大的提高工作效率。构造上,MyEclipse7类:J2EE模型WEB开发工具EJB开发工具应用程序效劳器的连接器J2EE工程部署效劳数据库效劳2、需求分析表,用户可以通过选中某个选项并点击“投票”按钮进展投票操作。另外,还供给查看投票括各选项所得的票数、占总票数的百分比等信息,并且以柱形图显示各选项的得票率,可以让用户从直观上看到各项的得票状况3、系统设计4、设计1〕开发平台:MicrosoftWindowsXPProfessional版本2023ServicePack3开发工具:MyEclipse在线投票系统功能:功能1:投票功能2:查看投票功能3:对同一IP地址的用户重复投票的限制实现该系统可划分为三个模块:显示投票选项,参与投票和显示投票结果。下面来分别介绍。投票界面:1-2-4.2.1数据表的设计tb-vote选项信息。tb-temp字段名数据类型字段大小是否为主键IdInt4是VoteipChar20VotemselBigint8VotetimeChartb-vote50字段名数据类型字段大小是否为主键IdSmallint2是Vote_titleChar50Vote_numInt4Vote_orderSmallint2javabean的设计建一个值JavaBean用来封装存储表tb-temp中的投票选项信息,代码如下:packagecom.yxq.valuebean;publicclassVoteSingle{privateStringid; //存儲選項ID2-3-privateStringtitle;//存儲選項標題privateStringnum;//存儲選項所得票數privateStringorder;//存儲選項的排列序號publicStringgetId{returnid;}publicvoidsetId(Stringid){this.id=id;}publicStringgetNum{returnnum;}publicvoidsetNum(Stringnum){this.num=num;}publicStringgetOrder{returnorder;}publicvoidsetOrder(Stringorder){this.order=order;}publicStringgetTitle{returntitle;}publicvoidsetTitle(Stringtitle){this.title=title;}}同样建另一个值JavaBean用来封装存储表tb-vote中的信息:packagecom.yxq.valuebean;publicclassTempSingle{privateStringid;//存儲投票用戶IDprivateStringvoteIp;//存儲投票用戶IPprivatelongvoteMSEL;//存儲毫秒數privateStringvoteTime;//存儲yyyy-MM-ddHH:mm:ss形式的時間publiclonggetVoteMSEL{returnvoteMSEL;}publicvoidsetVoteMSEL(longvoteMSEL){this.voteMSEL=voteMSEL;3 -4- }publicStringgetVoteTime{returnvoteTime;}publicvoidsetVoteTime(StringvoteTime){this.voteTime=voteTime;}publicStringgetId{returnid;}publicvoidsetId(Stringid){this.id=id;}publicStringgetVoteIp{returnvoteIp;}publicvoidsetVoteIp(StringvoteIp){this.voteIp=voteIp;}}数据库操作类的编写对于查看投票内容,参与投票和显示结果的操作,都涉及了数据库的操作。这些操作在一个DB类中实现,具体代码入下:定义属性及构造方法packagecom.yxq.toolbean;importjava.sql.Connection;importjava.sql.DriverManager;importjava.sql.Statement;importjava.sql.ResultSet;importjava.util.ArrayList;importjava.util.List;importcom.yxq.valuebean.TempSingle;importcom.yxq.valuebean.VoteSingle;publicclassDB{privateStringclassName;//存儲數據庫驅動類路徑privateStringurl;//URLprivateStringusername;//存儲登陸數據庫的用戶名4 -5- privateStringpassword;//存儲登陸數據庫的密碼privateConnectioncon;//Connection對象privateStatementstm;//聲明一個StatementSQL語句privateResultSetrs;//聲明一個ResultSet對象用來存儲結果集publicDB{ //通過構造方法為屬性賦值className=“org.apache.derby.jdbc.ClientDriver“;url=“jdbc:derby://localhost:1527/myeclipse“;username=“classiccars“;password=“classiccars“;}/***@加载数据库驱动程序*/publicvoidloadDrive{try{Class.forName(className); //加載數據庫驅動程序}catch(ClassNotFoundExceptione){System.out.println(“加载数据库驱动程序失败!“);e.printStackTrace; //向掌握臺輸出提示信息}}/**猎取数据库连接*@功能*/publicvoidgetCon{loadDrive;//加載數據庫驅動程序try{con=DriverManager.getConnection(url,username,password);//獲取連接}catch(Exceptione){System.out.println(“连接数据库失败!“);e.printStackTrace;}}/***@Statement对象*/publicvoidgetStm{5 -6- getCon;//獲取數據庫連接try{stm=con.createStatement;//獲取Statement類對象}catch(Exceptione){System.out.println(“Statement对象失败!“);e.printStackTrace;}}/***@查询数据表,猎取结果集*/publicvoidgetRs(Stringsql){getStm;try{rs=stm.executeQuery(sql);//執行SQL語句查詢數據表獲取結果集}catch(Exceptione){System.out.println(“查询数据库失败!“);e.printStackTrace;}}/***@查询数据表,猎取投票选项*/publicListselectVote(Stringsql){Listvotelist=null;if(sql!=null&&!sql.equals(““)){getRs(sql);//查詢數據表獲取結果集if(rs!=null){votelist=newArrayList;try{while(rs.next){//VoteSingle类对象中VoteSinglevoteSingle=newVoteSingle;voteSingle.setId(MyTToStr(rs.getInt(1)));voteSingle.setTitle(rs.getString(2));voteSingle.setNum(MyTToStr(rs.getInt(3)));voteSingle.setOrder(MyTToStr(rs.getInt(4)));votelist.add(voteSingle);//VoteSingleList集合中}}catch(Exceptione){System.out.println(“tb_vote表中数据失败!“);e.printStackTrace;}finally{6 -7- closed; //关闭数据库}}}returnvotelist;}/***@功能IP最终一次投票的记录*/publicTempSingleselectTemp(Stringsql){TempSingletempSingle=null;if(sql!=null&&!sql.equals(““)){getRs(sql);//查询数据表猎取结果集if(rs!=null){try{while(rs.next){//假设该结果集中有记录,说明当前用户投过票tempSingle=newTempSingle;tempSingle.setId(MyTToStr(rs.getInt(1)));tempSingle.setVoteIp(rs.getString(2));tempSingle.setVoteMSEL(rs.getLong(3));tempSingle.setVoteTime(rs.getString(4));}}catch(Exceptione){System.out.println(“tb_temp表中数据失败!“);e.printStackTrace;}finally{closed; //关闭数据库}}}returntempSingle;//TempSingle类对象中}/***@功能更数据表,实现票数累加*/publicintupdate(Stringsql){inti=-1;if(sql!=null&&!sql.equals(““)){getStm;//猎取Statement类对象try{i=stm.executeUpdate(sql);//SQL语句更数据表}catch(Exceptione){7 -8- System.out.println(“更数据库失败!“);e.printStackTrace;}finally{closed;}}returni;}/***@关闭数据库连接*/publicvoidclosed{try{if(rs!=null)rs.close;//关闭结果集if(stm!=null)stm.close;//关闭Statement类对象if(con!=null)con.close;//关闭数据库连接}catch(Exceptione){System.out.println(“关闭数据库失败!“);e.printStackTrace;}}}4.2.4工具类的编写mytools,代码如下:packagecom.yxq.toolbean;importjava.text.SimpleDateFormat;importjava.util.Date;publicclassMyTools{/**@intString@参数numint@返回值String*/publicstaticStringintToStr(intnum){returnString.valueOf(num);}8 -9- /**@功能比较时间。@todaytemp显示的时间@返回值String*/publicstaticStringcompareTime(longtoday,longtemp){intlimitTime=60; //60分钟longcount=today-temp; //计算当前时间与上次投票时间相差的毫秒数(该结果肯定是大于等于0)if(count<=limitTime*60*1000) //假设相差小于等,1=1000return“no“;else //假设相差大于60分钟}/**

return“yes“;Date毫秒数猎取一个时间,然后将该时间转换为指定格式,如“年-月-日时:分:秒“@参数ms@返回值String*/publicstaticStringformatDate(longms){Datedate=newDate(ms);SimpleDateFormat format=new HH:mm:ss“);StringstrDate=format.format(date);returnstrDate;}}显示投票选项的设计当用户访问首页面后,单击“参与投票”就会进入vote.jsp页面显示投票选项,在该页面中tb_vote数据表猎取全部的投票选项,然后逐一显示投票选项的标题<%@contentType=“text/html;charset=UTF-8“%><%@import=“java.util.List“%><%@import=“com.yxq.valuebean.VoteSingle“%><jsp:useBeanid=“myDb“class=“com.yxq.toolbean.DB/> <!--创立一个DB类对象--><%response.addHeader(“Pragma“,“No-cache“);response.addHeader(“Cache-Control“,“no-cache“);9-10-response.addDateHeader(“Expires“,1L);Stringsql=“select*fromapp.tb_voteorderbyvote_order“;//生成查询投票选项的SQL语句Listvotelist=myDb.selectVote(sql); //查询数据表猎取全部投票选项%><html><head><title>在线投票</title><linkstyle=“text/css“rel=“stylesheet“href=“css/style.css“></head><bodybgcolor=“#F0F0F0“><center><formaction=“doVote.jsp“method=“post“><tableborder=“0“width=“760“height=“620“background=“images/bg.jpg“><trheight=“20“>显示投票选项--><tdvalign=“top“width=“420“><tableborder=“0“cellspacing=“0“cellpadding=“0“width=“100%“style=“margintop:240marginleft:51“ bgcolor=“#7688AE“><tr><tdcolspan=“2“background=“images/voteT.jpg“></td></tr><!--假设集合为空--><%if(votelist==null||votelist.size==0){%><trheight=“200“><tdalign=“center“colspan=“2“>没有选项可显示!</td></tr><!--假设集合不为空--><%}else{%><tr><tdalign=“center“width=“60%“><tableborder=“0“width=“100%“><%inti=0;while(i<votelist.size){VoteSinglesingle=(VoteSingle)votelist.get(i);%><trheight=“27“><td10-11-style=“textindent:7“><%=single.getTitle%></td><tdwidth=“30%“align=“center“><inputtype=“radio“name=“ilike“value=“<%=single.getId%>“></td></tr><%%>票!</li></font>

i++;} //while完毕</table></td><tdvalign=“top“><imgsrc=“images/note.jpg“><b><fontcolor=“white>留意事项:</font></b><p><fontcolor=“#FDE401><li>1小时内只能投一次</td></tr><%}//else完毕%><!--显示操作按钮--><trheight=“97“><tdalign=“center“valign=“top“colspan=“2“background=“images/voteE.jpg“><inputtype=“submit“style=“backgroundimage:url(images/submitB.jpg)width:68height:26border:0“><inputtype=“reset“style=“backgroundimage:url(images/resetB.jpg)width:68height:26border:0“>            <ahref=“showVote.jsp“><imgsrc=“images/showB.jpg“style=“border:0“></a><ahref=“index.jsp“><imgsrc=“images/indexB.jpg“style=“border:0“></a></td></tr></table></td></tr></table>11-12-</form></center></body></html>参与投票的设计<%@contentType=“text/html;charset=UTF-8“%><%@import=“com.yxq.valuebean.TempSingle“%><%@import=“com.yxq.toolbean.MyTools“%><%@import=“java.util.Date“%><jsp:useBeanid=“myDb“class=“com.yxq.toolbean.DB“/><%Stringmess=““; //用来保存提示信息StringselectId=request.getParameter(“ilike“);if(selectId==null||selectId.equals(““)){选项

//猎取用户选择//没有选择投票mess=“请选择投票!“;}else{booleanmark=false;投票的标志

//选择了投票选项//是否允许longtoday=newDate).getTime; //newDate猎取当前时间,通过调用Date类的getTime方法猎取从1970年1月1日00:00:00起到当前时间的毫秒数longlast=0; //上次投票的时间(以毫秒显示)Stringip=request.getRemoteAddr;用户IP地址

//猎取Stringsql=“SELECT*FROMapp.tb_tempWHEREvoteMSEL=(SELECTMAX(voteMSEL)FROMtb_tempWHEREvoteIp=”“+ip+“”)“;//SQL语句,功能:从数据表中猎取当前用户上次投票时的记录TempSinglesingle=myDb.selectTemp(sql);if(single=null)tb_temp表中不存在当前IPmark=true;投票else{推断从上次投票到现在是否超过指定时间,本系统指定为60分钟last=single.getVoteMSEL;JavaBean中猎取上次投票的时间以毫秒显示)Stringresult=MyToolspareTime(today,last);将现在时间与上次投票时的时间进展比较if(result.equals(“yes“))

//在//允许/存在当前P//从该////12-13-返回“yes“60分钟,允许投票mark=true;else

//否则,}

mark=false;StringstrTime=MyTools.formatDate(today);前投票时间(以毫秒显示的)转为年-月-日时分:秒的形式if(mark){/**【1】记录用户IP和投票时间**/sql=“insertintotb_tempvalues(”“+ip+“”,”“+today+“”,”“+strTime+“”)“;inti=myDb.update(sql);

//将当//允许投票IP失败IP成功

/**【2】推断记录用户IP是否成功**/if(i<=0)mess=“系统在记录您的IP“;else{/**更票数**/

//记录//记录sql=“updateapp.tb_votesetvote_num=vote_num+1whereid=“+selectId;i=myDb.update(sql); //更成功

if(i>0)mess=“投票生效!<imgsrc=”images/spic.jpg”>;else//更失败}}else{

mess=“投票失败!“;

//不允许投票mess=“对不起,通过推断您的IP<br>上次投票时间:“+single.getVoteTime“<br>60“;}}session.setAttribute(“mess“,mess);到session范围内response.sendRedirect(“messages.jsp“);到messages.jsp页面,进展提示%>

//保存提示信息//将恳求重定向13-14-查看结果的设计先编写猎取投票选项代码:<%@contentType=“text/html;charset=UTF-8%><%@import=“java.util.List“%><%@import=“java.util.ArrayList“%><%@import=“com.yxq.valuebean.VoteSingle“%><jsp:useBeanid=“myDb“class=“com.yxq.toolbean.DB“/><%floatnumAll=0//存储总票数Stringsql=“select*fromapp.tb_vote;//生成查询投票选项的SQL语句Listshowlist=newArrayList;showlist=myDb.selectVote(sql)//查询数据表猎取全部投票选项if(showlist==null)System.out.println(“null“);elseSystem.out.println(“notnull“);%>显示投票结果代码<html><head><title>在线投票</title><linkstyle=“text/css“rel=“stylesheet“href=“css/style.css“></head><bodybgcolor=“#F0F0F0“><center><tableborder=“0“cellspacing=“0“cellpadding=“0“width=“760“height=“620“background=“images/showbg.jpg“><trheight=“20“><!--以文字显示投票结果--><tdvalign=“top“width=“40%“><tableborder=“0“width=“75%“cellspacing=“0“cellpadding=“0“style=“margin-top:310;margin-left:45“><%if(showlist==null||showlist.size==0){%><trheight=“200“><tdalign=“center“colspan=“2“>没有选项可显示!</td></tr><%}else{inti=0;while(i<showlist.size){14-15-VoteSinglesingle=(VoteSin

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论