收藏 分销(赏)

基于JSP的留言板课程设计样本.doc

上传人:二*** 文档编号:4515235 上传时间:2024-09-26 格式:DOC 页数:29 大小:57.50KB
下载 相关 举报
基于JSP的留言板课程设计样本.doc_第1页
第1页 / 共29页
本文档共29页,全文阅读请下载到手机保存,查看更方便
资源描述
JSP在水一方留言簿设计报告 一 需求分析 随着互联网迅猛发展,网站给咱们带来不少便利,于此同步,论坛基本是每个网站必有功能,为顾客之间交流提供较好平台。我通过仔细分析和规划,本论坛有如下功能:顾客注册,登录,顾客信息修改,签写留言,留言查看,回答留言和管理员普通维护功能等。 这些功能详细描述如下: 1)顾客注册模块:顾客可已成为本论坛会员,通过表单把顾客有关信息提交给数据库。 2)登录模块:基本是每个系统必备模块,本论坛登录模块分为两个小模块:普通顾客登录,另一种是管理员登录。 3)签写留言模块:这是论坛重要功能之一,顾客把自己感兴趣话题刊登到论坛上,与网上会员进行探讨。 4)查看留言模块:这也是论坛重要功能之一,把顾客刊登留言逐条,安顺序显示出来。 5)回答留言模块:这也是论坛重要功能之一,顾客对别顾客刊登留言进行回答。 6)普通维护模块:这是给管理员功能,该功能对那些危害社会风气留言删除。 7)顾客信息修改模块:顾客能对自己信息进行修改。 二 分析和设计(页面和数据库) 设计网站论坛时,一方面应当区别是普通顾客登录还是管理员登录。如果是普通顾客登录,那么该顾客只有查看和回答留言权限。如果是管理员登录,则除了具备查看和回答权限外,还用品有管理论坛权限。 在顾客刊登留言后,将显示该顾客顾客名、性别、留言内容和留言时间等内容。如果在某个留言有回答内容,则显示出是谁恢复了该篇留言和回答内容。 此外还能在页面中显示当前系统时间和访问权限。 数据库设计 通过以上分析:数据库应有四个表,tb_user、td_topic、tb_reply、tb_counter。由于是个小型论坛,选取AEESS数据库。详细各表设计如下: 1 分析得知tb_user表功能记录顾客信息,具备如下字段:ID、UserName、PWD、Birthday、Sex、OICQ、 Tel、homepage、address、postcode、Email、status。 2 分析得知tb_topic表功能是存储顾客刊登留言,具备如下字段:ID、anthor、face、content、datetime。 3 分析得知tb_reply表功能是用于存储顾客对每条留言所回答信息,具备如下字段:ID、TpoicID、content、replyuser。 4 通过度析得知:tb_counter是记录网站每天访问次数,有如下两个字段:accessTime、hit。 5.通过度析,在显示留言是时候,要用到tb_user和tb_topic两张表,因此要设计一种具备这两张表一种视图:一方面建立关系如下: 视图如下: 页面设计 1 网站流程体如下: 2 各页面功能实现阐明: 1) 系统提供服务(top.jsp) 程序重要实现依照级别设立顾客权限,是用脚本言语(javascript)来显示系统当前时间,并通过<marquee>来实现滚动显示,重要代码如下: <%@ page contentType="text/html;charset=gb2312" language="java" import="java.sql.*" errorPage="" %> <%@ include file="connDB.jsp" %> <jsp:include page="counter.jsp" /> <% ResultSet rs_user=stmt.executeQuery("select * from tb_user where username='"+session.getAttribute("username")+"'and status='版主'"); boolean eof=rs_user.next(); %> <script language="javascript"> function clockon(){ var date=new Date(); var YY=date.getYear(); var MM=date.getMonth()+1; var DD=date.getDate(); var KK=date.getDay(); var HH=date.getHours(); var mm=date.getMinutes(); var SS=date.getSeconds(); if (MM<10) MM="0"+MM; if (DD<10) DD="0"+DD; if (HH<10) HH="0"+HH; if (mm<10) mm="0"+mm; if (SS<10) SS="0"+SS; switch (KK){ case 1: KK="星期一"; break; case 2: KK="星期二"; break; case 3: KK="星期三"; break; case 4: KK="星期四"; break; case 5: KK="星期五"; break; case 6: KK="星期六"; break; case 0: KK="星期日"; break; } var str_date=" 系统公示:"+YY+"年"+MM+"月"+DD+"日 "+KK+" "+HH+":"+mm+":"+SS; if(document.all){ div_date.innerHTML=str_date; } var timer=setTimeout("clockon()",200); } </script> <table width="777" height="124" border="0" align="center" cellpadding="0" cellspacing="0" > <tr> <td align="center" valign="top" height="5" bgcolor="#FFCCCC"></td> </tr> <tr> <td width="790" align="center" valign="top"> <img src="images/banner.gif" width="500" height="124"></td> </tr> <tr> <td align="center" valign="top"><table width="100%" border="0" cellspacing="0" cellpadding="0" > <tr> <td height="5"></td> </tr> </table></td> </tr> </table> <table width="777" height="21" border="0" align="center" cellpadding="0" cellspacing="0" background="images/revigate.GIF"> <tr align="center" valign="middle"> <%if(session.getAttribute("username")!=null){%> <td width="104"><a href="Topic_add.jsp">签写留言</a></td> <td width="101"><a href="modify.jsp">修改资料</a></td> <%}else{%> <td width="104"><a href="reg.jsp">顾客注册</a></td> <%}%> <td width="104"> <%if(session.getAttribute("username")!=null){%> <a href="Logout_User.jsp">注销顾客</a> <%}else{%> <a href="#" Login_User.jsp','','width=300,height=200');">顾客登录</a> <%}%> </td> <td width="104"><a href="index1.jsp">查看留言</a></td> <td width="104"><a href="#" >刷新页面</a></td> <td width="104"> <%if(eof){%> <a href="Logout_User.jsp">注销版主登录</a> <%}else{ %><a href="#" Login_manager.jsp','','width=300,height=200');">版主登录</a><%}%></td> </tr> </table> <table width="777" height="47" border="0" align="center" cellpadding="0" cellspacing="0"> <tr align="center" valign="middle"> <td height="2" colspan="6"></td> </tr> <tr align="center" valign="middle"> <td width="18" height="17" align="left"><img src="images/speaker.GIF" width="16" height="16"></td> <td width="290" align="left"><div >系统公示:</div></td> <td width="469" align="right" > <%if(session.getAttribute("username")!=null){ out.println("[ "+session.getAttribute("username")+" ]您好!您不想说点什么吗?如果想请点击“签写留言”!"); }else{ out.println("您好!如果您想说点什么,那么请先注册或登录!"); }%> </td> </tr> <tr align="center" valign="middle"> <td colspan="3"><marquee direction="left" scrollamount="2" scrolldelay="2"> 您好! 欢迎访问“在水一方”留言簿!!!已有[ <%=application.getAttribute("count")%> ]人访问过本网站! </marquee></td> </tr> </table> <% stmt.close(); con.close(); %> 2) 查看留言(index1.jsp) 将所有;留言记录通过循环显示在客户端,并将某条留言回答记录和回答者姓名也显示出来。如果是登录顾客权限为普通顾客,那么该顾客权限极为回答留言。如果是管理员,那么该顾客权限就是回答和删除留言。由于涉及到多条记录显示,咱们用了分页显示办法出来。定义每个页面显示记录,通过ResultSet对象计算出总记录数,通过这两个数据计算总页数。重要代码如下: <%@ page contentType="text/html;charset=gb2312" language="java" import="java.sql.*" errorPage="" %> <jsp:include page="counter.jsp" /> <% Statement stmt2 =con.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE,ResultSet.CONCUR_READ_ONLY); Statement stmt3 =con.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE,ResultSet.CONCUR_READ_ONLY); ResultSet rs=stmt.executeQuery("select * from v_board"); ResultSet rs_reply=null; ResultSet rs_user=stmt2.executeQuery("select * from tb_user where username='"+session.getAttribute("username")+"'and status='版主'"); System.out.print("查询成功!"); //ResultSet rs_topic=stmt.executeQuery("select * from tb_topic"); %> ------------------------------------------ <% boolean tj=rs_user.next(); String str=(String)request.getParameter("Page"); if(str==null){ str="0"; } int pagesize=5; //每页显示数据条数 rs.last(); int RecordCount=rs.getRow(); //获得记录总条数 int maxPage=0; maxPage=(RecordCount%pagesize==0)?(RecordCount/pagesize):(RecordCount/pagesize+1); //得到是总页数 int Page=Integer.parseInt(str); //当前时第几页 if(Page<1){ Page=1; }else{ if(((Page-1)*pagesize+1)>RecordCount){ Page=maxPage; } } rs.absolute((Page-1)*pagesize+1); for(int i=1;i<=pagesize;i++){ int a=rs.getInt("ID"); %> <table width="100%" height="192" border="0" cellpadding="0" cellspacing="0" > <tr align="center"> <td width="115" rowspan="3" align="center"><%=rs.getString("UserName")%>(<%=rs.getString("status")%>) <p> <%=rs.getString("Sex")%>生 <p> 表情:<%=rs.getString("face")%> </td> <td width="2" rowspan="3" align="center" valign="bottom"><hr size="100%" width="1px" color="#FFCCCC"></td> <td width="447" align="left" style="padding-left:10pt" > <img src="images/email.GIF" alt="Email:<%=rs.getString("Email")%>" width="16" height="16">  <img src="images/home-menu.gif" alt="个人主页:<%=rs.getString("homepage")%>" width="26" height="20">  <img src="images/atusers.gif" alt="OICQ号码:<%=rs.getString("OICQ")%>" width="14" height="16">  <img src="images/datetime.gif" alt="<%=rs.getString("datetime")%>" width="18" height="18">&nbsp;留言时间:<%=rs.getString("datetime")%></td> <td width="195" align="right" style="padding-left:10pt" > <% out.println("<a href='reply.jsp?TopicID="+a+"'>回答&nbsp;</a>"); if(tj){out.println("<a href='Del.jsp?TopicID="+a+"'>删除</a>");}%></td> <td width="14" align="right" style="padding-left:10pt" >&nbsp;</td> </tr> <tr> <td height="20" colspan="3" style="padding-left:10pt"><hr width="98%" color="#FFCCCC" size="1"></td> </tr> <tr> <td height="109" colspan="3" valign="top" style="padding-left:10pt"><pre><%=rs.getString("content")%></pre></td> </tr> <tr> <td height="2" colspan="5" align="center" valign="top" ><hr width="98%" color="#FFCCCC" size="1"></td> </tr> <% rs_reply=stmt3.executeQuery("select * from tb_reply where TopicID="+a); while(rs_reply.next()){ %> <tr> <td height="39" align="center" valign="top" ><%=rs_reply.getString("replyuser")%>回答</td> <td align="center" valign="top"><hr size="20%" width="1px" color="#FFCCCC"></td> <td colspan="3" valign="top" style="padding-left:10pt"><%=rs_reply.getString("content")%> <hr width="98%" color="#FFCCCC" size="1"></td> </tr> <tr> <td height="20" colspan="3" style="padding-left:10pt">&nbsp;</td> </tr> <%}%> </table> <br> <% try{ if(!rs.next()){break;} }catch(Exception e){} } %> <table width="100%" border="0" cellspacing="0" cellpadding="0"> <tr> <td align="right">当前页数:[<%=Page%>/<%=maxPage%>]&nbsp; <%if(Page>1){%> <a href="index1.jsp?Page=1">第一页</a> <a href="index1.jsp?Page=<%=Page-1%>">上一页</a> <% } if(Page<maxPage){ %>  <a href="index1.jsp?Page=<%=Page+1%>">下一页</a> <a href="index1.jsp?Page=<%=maxPage%>">最后一页&nbsp;</a> <%}%> 3) 顾客登陆(Login_User_deal.jsp) 在top.jsp中设计是当顾客单击登录连接时候,弹出一种小对话框来提供顾客登录功能,因此在在个页面中需要刷新顾客登录后页面,用到了脚本语言(javascript)中一段代码:open.location.reload().管理员登录(login_manager_deal.jsp)与此页面代码相似,下面就不再写了。重要代码如下: <%@ page contentType="text/html;charset=gb2312" language="java" import="java.sql.*" errorPage="" %> <jsp:include page="counter.jsp" /> <% request.setCharacterEncoding("GB2312"); String username=request.getParameter("username"); String PWD=request.getParameter("PWD"); if(username!=""){%> <% ResultSet rs=stmt.executeQuery("select * from tb_user where UserName='"+username+"' and status='顾客'"); if (rs.next()){ String rsPWD=rs.getString("PWD"); if(PWD.equals(rsPWD)){%> <script language="javascript"> opener.location.reload(); window.close(); </script> <% session.setAttribute("username",username); }else{%> <script language="javascript"> alert("您输入密码不对的,请重新输入!"); history.back(); </script> <%} }else{ %> <script language="javascript"> alert("您输入顾客名不对的,请重新输入!"); history.back(); </script> <%} }%> 4) 留言回答(reply_deal.jsp) 回答留言核心如何精确地将回答内容和留言关联起来。本例通过获得留言查看(index1.jsp)页面中留言回答连接所传递过来参数TopicTD(留言记录ID),来完毕回答功能。添加留言(Topic_add_deal.jsp)于此相似,在次就不在简介。重要程序代码如下: <%@ page contentType="text/html;charset=gb2312" language="java" import="java.sql.*" errorPage="" %> <%@ include file="connDB.jsp" %> <html> <head> <meta http-equiv="Content-Type" content="text/html;charset=gb2312"> <title>回答信息</title> </head> <body> <%! //解决字符窜乱码 public String getStr(String str){ try{ String temp_p=str; String temp=new String(temp_p.getBytes("iso-8859-1"),"gb2312"); return temp; } catch(Exception e){} return "NULL"; } %> <% String content=getStr(request.getParameter("content")); int TopicID=Integer.parseInt(request.getParameter("TopicID")); String replyuser=getStr((session.getAttribute("username")).toString()); if(content!=null && content.length()>0){ String sql="Insert into tb_reply(TopicID,content,replyuser) values("+TopicID+",'"+content+"','"+replyuser+"')"; int ret=0; ret=stmt.executeUpdate(sql); if(ret!=0){ out.println("<script language='javascript'>alert('回答信息成功!');window.location.href='index1.jsp';</script>"); }else{ out.println("<script language='javascript'>alert('回答信息失败!');window.location.href='index1.jsp';</script>"); } }else{ response.sendRedirect("index1.jsp"); } %> </body> </html> 5) 修改资料(modify_deal.jsp) 顾客登录后,如果想修改除了顾客名以外资料时,单击相应连接进入修改资料页面进行操作。重要代码如下: <%@ page contentType="text/html;charset=gb2312" language="java" import="java.sql.*" errorPage="" %> <%@ include file="connDB.jsp" %> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" <%! public String getStr(String str){ try{ String temp_p=str; String temp=new String(temp_p.getBytes("iso-8859-1"),"gb2312"); return temp; } catch(Exception e){} return "NULL"; } %> <% String username=request.getParameter("username"); if (username!=null && username.length()>0 ){ String PWD=getStr(request.getParameter("PWD1")); String birthday=request.getParameter("birthday"); String sex=getStr(request.getParameter("sex")); String OICQ=getStr(request.getParameter("OICQ")); String tel=getStr(request.getParameter("tel")); String homepage=getStr(request.getParameter("homepage")); String address=getStr(request.getParameter("address")); String postcode=request.getParameter("postcode"); String Email=getStr(request.getParameter("Email")); int ret=0; String sql="update tb_user set PWD='"+PWD+"',birthday='"+birthday+"',Sex='"+sex+"',OICQ='"+OICQ+"',Tel='"+tel+"',homepage='"+homepage+"',address='"+address+"',postcode='"+postcode+"',Email='"+Email+"' where username='"+username+"'"; ret=stmt.executeUpdate(sql); if(ret!=0){ out.println("<script language='javascript'>alert('资料修改成功!');window.location.href='index1.jsp';</script>"); }else{ out.println("<script language='javascript'>alert('资料修改失败!');window.location.href='modify.jsp';</script>"); } }else{ response.sendRedirect("modify.jsp"); } %> 6) 新顾客注册(reg_ok.jsp) 顾客注册时应先判断顾客数据与否对的。例如:两次输入密码与否一致,对必填字段与否为空等要加以限制。这些可以通过jsp所创立静态页面进行判断。这里重要是判断新顾客注册顾客名与否已经被占用,如果没有就将顾客所填写数据添加到数据库中,如果被占用则提示顾客重新填写。重要代码如下: <%@ include file="connDB.
展开阅读全文

开通  VIP会员、SVIP会员  优惠大
下载10份以上建议开通VIP会员
下载20份以上建议开通SVIP会员


开通VIP      成为共赢上传
相似文档                                   自信AI助手自信AI助手

当前位置:首页 > 学术论文 > 其他

移动网页_全站_页脚广告1

关于我们      便捷服务       自信AI       AI导航        抽奖活动

©2010-2025 宁波自信网络信息技术有限公司  版权所有

客服电话:4009-655-100  投诉/维权电话:18658249818

gongan.png浙公网安备33021202000488号   

icp.png浙ICP备2021020529号-1  |  浙B2-20240490  

关注我们 :微信公众号    抖音    微博    LOFTER 

客服