留言簿设计报告
班级 09软件
姓名 ***
学号 22号
一部分:描述留言簿的模块划分
二部分:用流程图的形式描述留言簿的执行流程
三部分:各部分界面效果图及代码的具体实现
四部分:设计过程中的错误及纠正
五部分:设计感受
六部分:附用户使用说明(包括安装环境部署环境,及使用),和设计时的数据库
第一部分:留言簿的模块划分
1. 管理员管理模块
身为管理员,有查看所有用户的资料信息,和所有用户的留言,并有修改和删除的权利,进入index.jsp首页后,先像其它用户一样访问主页,及留言板,若想留言或查看信息,则先登陆.点击留言请先登陆超链接,进入denglu.jsp的登陆页面.输入管理员的用户名及密码,即admin,进入success.jsp页面,在此页面里,管理员可以查看全部留言信息shuchu.jsp,并可以更改和删除.也可以查看所有用户的注册信息chakan.jsp.也可以查看个人信息gerenxinxi.jsp.在个人信息中可以修改用户名和密码即登录xiugai.jsp页面,但不可以注销用户,因为不能没有管理员.
2. 普通用户使用模块
普通用户进入网站,也要先浏览主页,及留言板,若有意留言,则请先登录,登陆成功后进入success.jsp页面,在此页面中用户可以查看自己已经留言过的信息,即shuchu3.jsp页面,在此页面中可以对自己的留言进行更新和删除,即update.jsp页面和delete.jsp页面,若有意留言,则点击我要留言超链接,进入liuyanyemian.jsp页面,进行留言,再此页面中,可以更新自己的头像.在success.jsp中还可以查看个人信息,并对自己的用户名和密码进行修改,对自己的账号注销.即xiugai.jsp和cancel.jsp页面
3. 过客浏览模块
身份为过客,进入网站后,先浏览主页,若有意留言,则点击留言请先登录,若没有账号,则在denglu.jsp的页面中,点击注册链接,进行注册,即insertuser.jsp页面,若用户名不曾被人注册过,则转到zhucechenggong.jsp的页面.点击此页面的登陆即可重新登陆,也可以退出网站.重新登陆后,就可以想普通会员一样进行操作了.
4. 退出系统
退出,即tuichu.jsp页面.
第二部分:流程图
第三部分:各部分界面效果图及代码的具体实现
index.jsp页面,主要用了一个qq表情,然后用marquee标签实现字体的运动,接下来是两个超级链接.
访问主页后,进入留言板主页,标题有主人寄语,然后调用以下方法,
public List QureyAll(String sql){
List list=newArrayList();
this.getConnection();
try {
stat=con.createStatement();
rs=stat.executeQuery(sql);
while(rs.next()){
Message message=new Message();
message.setBorderID(rs.getInt("borderId"));
message.setContent(rs.getString("content"));
message.setImage(rs.getString("image"));
message.setMsgtime(rs.getString("msgtime"));
message.setReplyID(rs.getString("replyID"));
message.setSubject(rs.getString("subject"));
message.setUsername(rs.getString("username"));
list.add(message);
}
} catch (SQLException e) {
// TODO Auto-generated catch block
System.out.println("数据库异常");
e.printStackTrace();
}
CloseAll();
return list;
}
输出所有人的留言,界面如下:
若想要留言,则进入denglu.jsp页面,即用一个form表单即可,界面如下:
登陆成功后,进入success.jsp,设置了几个超链接如下:
若点击查看自己的留言,则进入shuchu3.jsp页面,在此页面,可以更新和删除,都是现获取自己的id号,然后操作,如下:
输出方法如下:
public Message QueryByID(int id){
Message message=new Message();
String sql="select * from t_board where borderID="+id;
this.getConnection();
try {
stat=con.createStatement();
rs=stat.executeQuery(sql);
if(rs.next()){
message.setBorderID(rs.getInt("borderID"));
message.setContent(rs.getString("content"));
message.setImage(rs.getString("image"));
message.setMsgtime(rs.getString("msgtime"));
message.setReplyID(rs.getString("replyID"));
message.setSubject(rs.getString("subject"));
message.setUsername(rs.getString("username"));
}
} catch (SQLException e) {
// TODO Auto-generated catch block
System.out.println("数据库异常");
e.printStackTrace();
}
CloseAll();
}
在jsp页面调用:
String id=request.getParameter("id");
int borderid=Integer.parseInt(id);
DBConn db=new DBConn();
Message message=db.QueryByID(borderid);
更新主要实现就是:
String id=request.getParameter("id");
String subject=request.getParameter("subject");
String content=request.getParameter("content");
String updatetime=new Date().toLocaleString();
String sql="update t_board set subject='"+subject+"',content='"
+content+"',msgtime='"+updatetime+"',image='"+image+"' where borderID="+id;
DBConn db=new DBConn();
int flag=db.executeUpdate(sql);
if(flag>0){
response.sendRedirect("shuchu3.jsp");
}
else{
out.print("出现异常,重新留言!");
}
删除主要实现就是将sql语句进行修改一下:
String sql="delete from t_board where borderID="+borderid;
当然参数也没必要获得那么多.
更新和删除的主要方法为:
publicint executeUpdate(String sql){
int flag=0;
try {
this.getConnection();
stat=con.createStatement();
flag=stat.executeUpdate(sql);
}
catch (SQLException e) {
e.printStackTrace();
}
CloseAll();
return flag;
}
界面如下:
若点击查看自己的个人信息,则进入gerenxinxi.jsp页面,sql语句用username追踪,
调用如下的方法:
public Genggai QureyAll2(String sql){
Genggai xinxi=new Genggai();
this.getConnection();
try {
stat=con.createStatement();
rs=stat.executeQuery(sql);
if(rs.next()){
xinxi.setId(rs.getInt("id"));
xinxi.setUsername(rs.getString("username"));
xinxi.setPwd(rs.getString("pwd"));
xinxi.setSex(rs.getString("sex"));
xinxi.setBirthday(rs.getString("birthday"));
xinxi.setEmail(rs.getString("email"));
xinxi.setAddress(rs.getString("address"));
xinxi.setTelephone(rs.getString("telephone"));}
} catch (SQLException e) {
System.out.println("数据库异常");
e.printStackTrace();}
CloseAll();
return xinxi;}
在jsp页面这样输出:
out.print("<tr>");
out.print("<td width='40%' align='center'>");
out.print("<font size='5' color='orange' face='隶书'>");
out.print("您的id号是:");
out.print("</font>");
out.print("</td>");
out.print("<td align='center'>");
out.print(xinxi.getId());
out.print("</td>");
out.print("</tr>");
其他列名输出跟上面的id一样,界面如下:若点击如上的”修改用户名或密码”进入如下页面,即xiugaiyemian.jsp,也是定义一
个form表单
若修改成功,则进入xiugaichenggong.jsp页面,界面如下:
若点击success.jsp页面的”注销用户”,则进入如下页面,同样也是定义form表单,成功后进入cancelsuccess.jsp页面,两个界面如下:
注销用户方法是:
publicint TestCancel(String username,String pwd){
int flag=0;
DBConn db=new DBConn();
con=db.getConnection();
String sql="delete from t_user where username=? and pwd=?";
try {
prests= con.prepareStatement(sql);
prests.setString(1,username);
prests.setString(2,pwd);
flag=prests.executeUpdate();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return flag;
}
若在登陆页面,点击”注册”,进入regist.jsp页面如下,也是一个复杂的form表单,添加了背景和qq表情:
注册插入到数据库的方法主要有两个,一个用来判断用户名是否已经存在,一个用来插入:如下
判断:
publicint Testpanduan(String username){
int s=0;
DBConn db=new DBConn();
con=db.getConnection();
String sql="select * from t_user where username=?";
try {
prests=con.prepareStatement(sql);
prests.setString(1,username);
rs=prests.executeQuery();
if(rs.next()) {
s=1;
rs.close();
prests.close();
}
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return s;
}
插入:
publicint Testinsert(String username,String pwd,String repwd,String sex,String birthday,String email,String address,String telephone){
DBConn db=new DBConn();
con=db.getConnection();
int flag=0;
String sql="insert into t_user values(?,?,?,?,?,?,?)";
try{
if(pwd.equals(repwd))
{
prests=con.prepareStatement(sql);
prests.setString(1,username);
prests.setString(2,pwd);
prests.setString(3,sex);
prests.setString(4,birthday);
prests.setString(5,email);
prests.setString(6,address);
prests.setString(7,telephone);
flag=prests.executeUpdate();
}
}catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return flag;
}
注册成功后,进入zhucechenggong.jsp页面,也添加了背景图片和qq表情,使之美观,界面如下:
若访问的是管理员,则进入如下界面,他可以查看所有用户的所有留言和所有信息:
若查看所有用户的全部资料,则进入chakan.jsp页面,在此页面可以管理员进行删除,输出方法是:
public ResultSet QureyAll3(String sql){
Genggai xinxi=new Genggai();
this.getConnection();
try {
stat=con.createStatement();
rs=stat.executeQuery(sql);
if(rs.next()){
xinxi.setId(rs.getInt("id"));
xinxi.setUsername(rs.getString("username"));
xinxi.setPwd(rs.getString("pwd"));
xinxi.setSex(rs.getString("sex"));
xinxi.setBirthday(rs.getString("birthday"));
xinxi.setEmail(rs.getString("email"));
xinxi.setAddress(rs.getString("address"));
xinxi.setTelephone(rs.getString("telephone"));
}
} catch (SQLException e) {
// TODO Auto-generated catch block
System.out.println("数据库异常");
e.printStackTrace();
}
return rs;
}
在jsp页面调用方法后用<%out.print(rs.getString("email")); %>
删除链接是:<a href="deletemsg2.jsp?id=<%=rs.getInt("id")%>">删除</a>
界面如下:管理员还可以有权利对所有用户的留言进行删除:主要方法同上面提到的.
界面如下:
点击我要留言链接后,进入我要留言页面:添加笑脸和更新头像的方法如下:
<%int count=0;
for(int i=0;i<40;i++){ %>
<input type="radio" name="image" value="<%=i+1 %>" onclick="addimg(this)">
<img src="images2/<%=i+1 %>.png">
<% count++;
if(count%8==0)
out.print("<br>"); }%>
更新头像:
<select name="image" onchange="change();">
<%for(int i=1;i<=30;i++){%>
<option value="<%=i%>"><%=i %></option>
<% } %>
</select>
<img src="photo/1.jpg" width="100" height="100" name="head"/>
但要用到JavaScript语言:
选择头像: function addimg(obj){
var s=obj.value;
var con=document.form1.content.value;
con=con+"<img src=images2/"+s+".png>";
document.form1.content.value=con; }
更换头像: function change(){
var image=document.form1.image1.value;
document.head.src="photo/"+image+".jpg";}
留言界面如下:
最后是退出页面,主要是图片和qq表情的设置.使页面更生动,界面如下:
第四部分:设计过程中的错误及纠正
在做动态网页的时候,遇到的小错误有很多,每次都是经过反复的调试得出的,有时候写错某个方法中的某个字母,就会调试很长时间,当然同时也加深了印象.例如在用JavaScript语句中,不能弹出alert对话框,仔细分析代码,发现表单form名字写成了from.主要的错误有以下几个方面:
1. 在编写查看所有人的信息
遇到传递参数时的空指针,而且在方法体中用了db.CloseAll();方法,出现连接对象已经关闭的错误.
应该用out.print(rs.getString(username));而不是用out.print(xinxi.getUsername());
2. 在删除留言时,超链接中的id一直传递不过去使得int borderid=Integer.parseInt(id);一直出现错误,出现空指针.,仔细检查发现是超链接中的id=<%=message.getBorderID()%>写错
3. 在插入新留言的时候,一直出现中文乱码, 插入如下两条语句,即可解决
byte aa[]=subject.getBytes("ISO-8859-1"); subject=new String(aa);
byte bb[]=content.getBytes("ISO-8859-1");content=new String(bb);
更新头像的时候,头像不能同时显示出来
4. 在注册新用户时,由于既要用sql语句判断用户名是否已经存在,又用到要在不存在的时候插入的sql语句,导致逻辑混乱,仔细推敲后,才运行得到.
5. 因为要在多个页面用到传递的username等等,所以一定要用session获取参数
6. 在更新留言时, 要用到<input type="hidden" name="id" value="<%=id %>">传递隐藏的参数,由于刚开始不明白,出现了很多逻辑上的错误.
第五部分: 设计感受
1. 这次的留言板设计感受很多,有时某一个很小的错误,比如丢一个括号,写错一个字母,就会浪费很长的时间.所以做完就用了很长的时间.当然对程序里的某些方法的应用,也不是太清楚,如过滤信息的设置等.我觉得还是孜孜不倦的从一点点的做起,比如每个网页的背景图片,就设计了不少时间,因为我觉得一个网站的美观效果也是很重要的.每当睡觉的时候,只要一想起,啊,我的留言板还没有做完,就会带着思考入梦了.
老实说,这个留言板不是很难,可能是刚接触数据库与jsp的链接吧,当时出了很多例如数据库异常的错误,到后期的时候就好多了…在对用户信息或用户的留言进行更新,删除,插入,查找等等时,这些方法都从jsp的页面,提到java类里面,方法都是大同小异,无非是数据库的链接,执行sql语句的对象的创建和应用,以及接受结果的存放等等.主要是预处理对象和执行对像的flag=stat.executeUpdate(sql);rs=stat.executeQuery(sql);这两个方法的调用.
2. 在这期间离不开同学与同学,舍友与舍友之间互相学习和交流,所以收益也很大,也感受到了集体的力量.经过这次的留言板制作,收获很多.不仅对连接数据库方面的知识懂了很多,对sql语句的书写记忆深刻,而且还回忆了以前的很多函数的调用,方法的编写等等.相信在以后的学习中会更进一步,掌握更多的知识和应用.
第六部分:附用户使用说明(包括安装环境部署环境,及使用),和设计时的数据库
在MyEclipse7.0的环境下实现,将Tomcat6.0服务器,JDK7下载以及部署进去
设计时的数据库使用Microsoft SQL server 2000
思想是不出声的语言中国现代作家文学研究家钱钟书围城辞达则止不贵多言南宋哲学家教育家诗人朱熹时间是大公无私的语言俄罗斯作家尤邦达列夫…
语言积累名言名句类1冬天麦盖三层被来年枕着馒头睡2瑞雪兆丰年这并不是迷信有着充分的科学根据3万事俱备只欠东风4不要想着远在下面的岩…
语言积累名言名句类七上1冬天麦盖三层被来年枕着馒头睡2瑞雪兆丰年这并不是迷信有着充分的科学根据3万事俱备只欠东风4不要想着远在下面…
关于行动的名言名句行动胜于语言admin20xx028浏览1806更多书中自有颜如玉书中自有黄金屋这是人们对读书的高度评价但人们对…
公务员面试经典名言语录精选100句在公务员面试中好的语言亮点是取得高分的亮点之一结合公务员面试考查范围整理经典名言警句以供在面试中…
在线英语培训领导者职场日常商务英语情景对话备忘录留言英语在职场中大家都对Message和Note比较熟悉但是谈到备忘录Memo的时…
丶我要这天再遮不住我眼要这地再埋不了我心要这众生都明白我意丶丶就算我是一个身无分文的乞丐也会让你做一个最幸福的公主丶丶不说就是没有…