课程设计说明书
班级: 姓名:
学号:
设计题目: 技术论坛系统
设计时间: 至
指导教师:
评 语:___________________________________
___________________________________________
___________________________________________
___________________________________________
___________________________________________
评阅成绩:______评阅教师:_______
一.
摘要
BBS讨论区是目前因特网上人气最旺的互动交流服务,据统计,国内三大门户网站的BBS讨论区带来的流量已经远远超过其门户新闻带来的流量。本系统是一个结构简单的BBS论坛系统,该系统采用了MVC三层架构模型,通过这种设计模型把界面展示、处理流程和业务逻辑分成不同的组建实现,方便维护与重用。
二.课程题目及需求分析
课程题目:技术论坛系统
题目设计要求:
要求实现一个简单的技术论坛系统。
涉及到的各类信息需要自行分析设计,要求实现的功能主要有:
1)用户注册:录入用户个人信息,获得进入论坛的权限,并赋予一定级别(级别可随发帖次数提高)
2)用户登录:已注册用户使用用户名和密码登录,成功后进入论坛;
3)用户发帖:已登录用户可以发帖;
4)用户回帖:已登录用户可以跟在其它人帖子后回复;
5)管理员功能:管理员可以对查看和删除用户信息和帖子信息,可以设置帖子是否可以回复。
6)查找功能:用户和管理员能够根据帖子主题查找相关帖子;
7)要求所有用户先登录后使用,根据用户身份给予访问不同页面的权限。
需求分析:
对于一个简单的论坛系统来说,主要包括讨论区、帖子和回帖三部分:
讨论区 每个讨论区对应一个话题类别,用户可以根据讨论区的名字判断讨论区的内容。
帖子 用户发表的帖子包含标题和内容,标题简要说明帖子的内容,内容详细的表述用户需要发表的观点和提出的问题
回帖 对帖子的回复,一般没有标题,只有内容,用于对一个帖子进行回复。
本系统用户主要分为普通用户和管理员两类,普通用户在登录后可以浏览讨论区、发帖和回帖,管理员除了具有普通用户的功能外还有删除用户信息和帖子信息、设置帖子是否可以回复等功能。
三.数据流图及系统功能图
(一)数据流图
登录信息 登录信息
帖子信息 帖子、用户信息
回帖信息 删除、设置帖子信息
帖子、回帖信息 帖子、用户信息
图1 数据流图
(二) 系统功能图
图2 系统功能图
四.数据库设计
数据库包括讨论区forum表、帖子topic表、回帖reply表和用户user表,表的设计如以下几个图所示
forum表 (板块id,名称,描述)
表1 forum表
topic表(帖子id,板块id,作者,标题,内容,发布时间,回帖数,可回复标志)
表2 topic表
reply表(回帖id,帖子id,内容,作者,回帖时间)
表3 reply表
user表(用户id,用户名,密码,邮箱,级别,身份,发帖数)
表4 user表
五.程序设计及功能实现
(一)普通用户操作模块
本系统运行后首先弹出首页,如图3所示,用户只有登录后才可以浏览论坛,当用户没有登录而操作论坛时会弹出用户登录的界面,这里是用session来实现用户的登录认证的,当用户成功登录后,就可以浏览各个模块的帖子,可以对帖子进行回复,还可以发表新的帖子,当用户需要快速找到某个帖子时可以对该帖子的主题进行搜索。
图3 论坛首页
1搜索帖子功能
搜索帖子是根据用户输入的标题来搜索相应的帖子,这里是用一个表单来提交用户的搜索要求,然后表单将搜索数据传到后台应用程序进行处理,搜索帖子的界面如图4所示
图4 用户搜索界面
搜索帖子的关键代码
String sql;
conn con=new conn();
ResultSet rs;
String title=searchForm.getTitle().trim(); //获取前台表单传来的title值
System.out.print(title);
String select=searchForm.getSelect(); //获取前台表单传来的select值
sql="select * from topic where title='"+title+"'";
System.out.print(sql);
rs=con.executeQuery(sql);
List list = new ArrayList();
while (rs.next())
{
Integer id=rs.getInt("id");
String username = rs.getString("username");
String title1 = rs.getString("title");
String time=rs.getTime("time").toString();
Integer reply = rs.getInt("reply");
Topic topic = new Topic();
topic.setId(id);
topic.setUsername(username);
topic.setTitle(title);
topic.setTime(time);
topic.setReply(reply);
list.add(topic);
}
request.setAttribute("list", list); //将list对象发送到前台
return mapping.findForward("result"); //转向前台页面
}
2 回复帖子功能
用户对某个帖子进行回复是通过一个回帖表单提交数据的,表单将数据传到后台应用程序,应用程序接收到数据后对数据库经行一系列操作然后返回回帖的页面,回帖的界面如图5所示
图5 回帖界面
回帖的关键代码
topicid=request.getParameter("id"); //获取从前台传来的id值
Integer tid=Integer.parseInt(topicid);
content=request.getParameter("content");
HttpSession session=request.getSession();
Object o = session.getAttribute("uid");
username = (String)o;
SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd"); //获取系统日期
Date date=new Date();
String strDate=sdf.format(date);
System.out.println(strDate);
con=new conn();
ResultSet rsTmp = con.executeQuery( "select max(id) as maxid from reply" );
if(rsTmp.next())
{
id = rsTmp.getInt("maxid") + 1;
}
rsTmp.close();
sql = "insert into reply values ('" + id ;
sql += "','"+tid+"','"+ content+"','"+username+"','"+strDate+ "')";
con.executeUpdate(sql);
(二)管理员操作
管理员除了具有普通用户的功能外还可以对用户和帖子信息进行查看和删除,还可以设置某个帖子是否可以回复
设置帖子不可回复
在设计帖子的数据库时设计了一个flag标志属性来标志帖子是否可以回复,当flag为0时帖子可以回复,当flag为1时帖子不可以回复。用户发表的帖子默认情况下是可以回复的,管理员设置帖子不可以回复时就把flag的值置为1,这样当用户浏览该帖子时回复帖子的表单就会隐藏,从而达到不可回复的功能。操作界面如图6所示,隐藏表单的帖子界面如图7所示。
图6 管理员操作界面
图7 不可回复界面
关键代码
String sql;
String id=request.getParameter("id");
conn con=new conn();
sql="update topic set flag='1' where id="+id;
con.executeUpdate(sql);
作者:<%=reply.getUsername()%> | 时间:<%=reply.getTime()%> | <%=++i%>楼 |
<%=reply.getContent()%> | ||
<%
if(topic.getFlag()==0)
{
int topicid=topic.getId();
%>
六.总结
本次课程设计是做一个技术论坛系统,我采用的是基于struts框架的MVC设计模式来设计完成题目的。运用Struts框架对我来说是一个难点,因为以前没有学过Struts框架,对它一点都不了解,因此这次课设花了很多时间用在学习Struts框架上,后来通过老师的指点和同学的帮助,慢慢的理解了struts框架的原理和运行机制,做课程设计也就慢慢上手了。我感觉运用Struts框架最大的好处就在实现了数据操作和数据显示的分离,jsp页面只用来显示显示页面,不参与数据的处理,这样理清了设计思路,便于维护和代码的重用性。这次实验加深了我对MVC设计模式的理解。通过这次实验我还掌握了网页结构化设计的方法,大大提高了工作效率。当然在这次实验中我也遇到了不少问题,例如如何控制用户的权限认证,即用户直接在地址栏访问后台操作页面而不通过登录系统,通过查资料和请教同学,最终把这个问题解决。总之,这次实验加深了我对Web应用开发的理解,我进一步熟练了各种技术的在Web应用开发中的使用,为我以后对Web应用开发的学习和应用打下了坚实的基础。