《web课程设计网络论坛系统.docx》由会员分享,可在线阅读,更多相关《web课程设计网络论坛系统.docx(21页珍藏版)》请在三一办公上搜索。
1、web课程设计网络论坛系统设计总说明.3 系统分析与设计.4 一、需求分析.4 二、功能设计.4 三、数据库设计.4 系统实现.7 一、论坛浏览.7 二、用户使用.12 三、管理员使用.17 心得体会.20 参考文献.20 设计总说明 一、课程设计的意义: 作为web程序设计课程的延伸,在学生完成了web程序设计课程的理论学习后,安排的课程设计,旨在提高学生web程序开发水平,培养学生网络编程的能力。 二、设计内容 设计一个网络论坛系统。 三、设计要求 系统功能: 1、注册新用户:新用户填写注册表单,包括用户姓名、密码、联系方式等信息;如果输入用户名已被注册过,系统提示用户更改自己的用户名。
2、2、用户登录:输入用户名和密码;若用户输入有误,系统将提示错误。 3、用户发表帖子;成功登录的用户可以发表帖子。 4、浏览帖子:成功登录的用户可以浏览其他用户发布的帖子。 5、用户注册信息修改:用户可以修改自己的注册信息。 6、用户退出登录:成功登录的用户可以使用该功能退出论坛系统。 - 2 - 系统分析与设计 一、需求分析 开发一个论坛系统,首先需要确定论坛的功能是什么,也就是用户想要的论坛所能做的工作。用户使用论坛是按照一定得流程来进行的:用户注册登录进入论坛,就某个话题展开讨论,通过发帖功能发布新的话题,通过回帖的功能回复已有的话题,通过搜索查找已有的话题;管理员要管理论坛,系统需要具有
3、的功能管理注册的用户,管理帖子。这样的流程就决定了论坛所应具有的功能,路摊流程图如下: 通过上面的分析,总结论坛的功能有以下几项:论坛版块列表;浏览帖子;发帖回帖;搜索帖子;删除帖子;用户注册;用户登录;控制用户权限;修改注册信息;管理用户。 论坛一般存在两种用户,注册用户和管理员。用户的权限是向下覆盖的,即上级权限包含下级权限,管理员的权限是上级权限。 论坛系统的用户浏览信息功能,是用户讨论问题的平台,发帖、浏览。回帖一直贯穿用户的整个活动。同时又有论坛系统的帖子管理是管理员在帖子浏览时进行的,只是一般用户没有权限做这些动作。 二、功能设计 从需求分析可以找到,论坛功能分为用户使用各基本功能
4、和管理员管理的功能。 论坛系统包括以下主要功能: (1)注册登录功能:用户注册,登录以及修改个人注册信息; (2)浏览功能:用户浏览版块,查看帖子; (3)发帖回帖功能:用户发帖、回帖; (4)帖子管理功能:管理员删除帖子。 三、数据库设计 1.概要设计: - 3 - 通过对系统进行的需求分析和系统功能的确定,规划出系统中使用的数据库实体对象分别为用户实体、管理员实体、发帖实体、回帖实体。 因此bbs论坛系统的E-R模型图为: 2.详细设计 设计表 将E-R图转换为关系模型一般遵循如下原则: 一个实体型转换为一个关系模式。实体的属性就是关系的属性,实体的码就是关系的码。 一个m:n联系转换为一
5、个关系模式。与该联系相连的各实体的码以及联系本身的属性均转换为关系的属性,而关系的码为各实体码的组合。 一个1:n联系可以转换为一个独立的关系模式,也可以与n端对应的关系模式合并。如果转换为一个独立的关系模式,则与该联系相连的各实体的码以及联系本身的属性均转换为关系的属性,而关系的码为n端实体的码。 一个1:1联系可以转换为一个独立的关系模式,也可以与任意一端对应的关系模式合并。 - 4 - 根据上述原则设计的数据表如下: 用户实体:用户 管理员实体:管理员 发帖实体:发帖 回帖实体:回帖 设计数据字典 数据字典:bbs论坛系统会涉及大量的静态数据,如发帖主题、发帖内容、发帖时间、用户年龄、用
6、户性别、用户地址等,这些数据,其数据的组织结构基本一致,现为该系统设计四个数据字典:用户字典、管理员字典、发帖字典、回帖字典。 用户字典userna: 属性名称 user_name password sex age userface email address tel 属性类型 varchar2(30) varchar2(20) number(1) date varchar2(6) varchar2(30) varchar2(20) varchar2(11) 是否可以为空 NOT NULL NOT NULL NOT NULL NULL NULL NULL NULL NULL 约束 主键 含义
7、用户名 密码 只能为0和1 性别 年龄 图像 邮箱 地址 电话 管理员字典glb: 属性名称 gl 属性类型 varchar2(20) 是否可以为空 NOT NULL 约束 主键 含义 姓名 - 5 - pw varchar2(20) NOT NULL 密码 发帖字典: 属性名称 art_id user_name author content issue_time view_times reply_times 回帖字典: 属性名称 re_id author content re_time 属性类型 number varchar2(20) varchar2(20) clbo date numbe
8、r number 是否可以为空 NOT NULL NOT NULL NOT NULL NOT NULL 约束 主键 含义 编号 发帖人 主题 内容 发帖时间 浏览次数 回帖次数 NULL NULL NULL 属性类型 number varchar(20) blob date 是否可以为空 约束 NOT NULL NOT NULL NOT NULL NOT NULL 含义 编号 主题 内容 回帖时间 系统实现 一、论坛浏览 1、进入主页面 - 6 - 排版说明:横栏为导航栏,用户可以选择想去的页面;再下一栏为用户登录栏,方便用户登录;左边竖栏为活跃发帖人排行,根据发帖人的发帖数来降序排序;右边一
9、栏为为热门帖子按浏览数降序排序,方便用户看到最好的帖子。并且帖子被点击一次就会自动增加一次点击数。 贴吧:此为方便用户浏览所有的帖子。可以按照时间升降和浏览数升降排序。效果图如下: 代码实现如下: 按时间降排序 - 7 - 按时间升排序 按浏览降排序 按浏览升排序 标题 发帖时间 发帖人 点击数 回帖数 所有帖子 % String px=request.getParameter(paixu); try Connection con=DriverManager.getConnection(url,user,password); Statement st=con.createStatement;
10、ResultSet rs=null; String sql=select user_name,author,issue_time,view_times,reply_times from articles_bbs ; if(px=null) ; else if(px.equals(0) sql=sql+order by issue_time desc; else if(px.equals(1) sql=sql+order by issue_time; else if(px.equals(2) sql=sql+order by view_times desc; else if(px.equals(
11、3) sql=sql+order by view_times; rs=st.executeQuery(sql); int i=0; while(rs.next) i+; - 8 - out.print(+i+、+rs.getString(2)+); out.print(+rs.getString(3)+); out.print(+rs.getString(1)+); out.print(+rs.getString(4)+); out.print(+rs.getString(5)+); con.close; catch(SQLException el)out.print(el); % 浏览帖子:
12、该页面主要显示每个帖子的内容和回帖内容以及相应的用户信息,效果图如下: - 9 - 代码实现:首先查询该帖子输出贴主的信息,接着查询对应的回帖表循环输出所有帖子;楼主代码: request.setCharacterEncoding(gb2312); String un=new String(request.getParameter(id).getBytes(8859_1); try Connection con=DriverManager.getConnection(url,user,password); Statement st=con.createStatement; st.execute
13、Update( update articles_bbs set view_times=view_times+1 where author=+un+); ResultSet rs=null; String s; int j; rs=st.executeQuery(select usersna.user_name,usersna.sex,usersna.userface,extract(year from sysdate)-extract(year from usersna.age) nl, articles_bbs.issue_time, articles_bbs.content,article
14、s_bbs.view_times,articles_bbs.reply_times from usersna,articles_bbs where usersna.user_name=articles_bbs.user_name and articles_bbs.author=+un+); rs.next; % 回复/次,浏览/次 - 10 - 刷新 回帖类似楼主的代码,只是用上了while循环。 二、用户使用 1、注册 说明:可以点击超链接选择用户喜欢的头像。用户名、密码和电话用了JavaScript进行限制代码如下: function check if(tijiao.username.va
15、lue.length20) alert(用户名长度必须在1位到20位之间!); return false; if(tijiao.tel.value.length11|tijiao.tel.value.length1) alert(电话未填!); return false; if(tijiao.pw.value.length6) alert(密码的长度应大于等于6位!); return false; if(tijiao.pw.value!=tijiao.pw2.value) alert(两次输入的密码不一致!); return false; - 11 - 数据按要求填写后就提交跳转到注册成功页面
16、,该页面主要执行sql数据插入语句。 2、登录 用户登录成功效果图如下: 登录成功后可以出现用户登录状态,并且拥有发帖和回帖的权限以及退出操作。用户状态在切换页面也不会改变。登录代码如下: request.setCharacterEncoding(gb2312); String username=request.getParameter(user); String pw=request.getParameter(userpw); int k=0; try Connection con=DriverManager.getConnection(url,user,password); Stateme
17、nt st=con.createStatement; ResultSet rs=null; rs=st.executeQuery(select user_name,password from usersna where user_name=+username+); rs.next; int i=rs.getRow; if(session.getAttribute(user)!=null) k=k+1; if(i=0&k!=0) out.print(欢迎+session.getAttribute(user)+成员登录 /+发帖 /+退出登录 /); else if(String.valueOf(
18、pw).equals(rs.getString(2) out.print(欢迎+username+成员登录 /+发帖 /+退出登录 /); session.setAttribute(user,username); else out.print(你还未登录论坛 /); con.close; catch(SQLException el)out.print(你还未登录论坛 /); 3、回帖 效果图如上浏览帖子哪版,是与帖子一起的,其中用JavaScript限制了内容不为空以及用session对象来确定是否登录来判断有无回帖权利。代码如下: - 12 - function check(form) if
19、 (form.content.value=) alert(请填写内容!); return false; 回帖内容: request.setCharacterEncoding(gb2312); String content=request.getParameter(content); if(content!=null) try Connection con=DriverManager.getConnection(url,user,password); Statement st=con.createStatement; ResultSet rs=null; st.executeUpdate( up
20、date articles_bbs set reply_times=reply_times+1 where author=+un+); - 13 - rs=st.executeQuery(select art_id from articles_bbs where author=+un+); rs.next; String num=rs.getString(1); st.executeUpdate(insert into replies_bbs(re_id,author,repcont,re_time) values(+num+,+session.getAttribute(user)+,+con
21、tent+,sysdate); content=; out.print(回帖成功); catch(SQLException el)out.print(请先登录); 4、发帖 效果图如下: 同样用JavaScript限制了内容标题不为空,以及用session对象获得用户信息,存入数据库;代码如下: function check(form) if (form.author.value=) alert(请填写主题!); form.author.focus; return false; if (form.content.value=) - 14 - alert(请填写内容!); form.conten
22、t.focus; return false; 论 坛 话 题 发 布 主 题: 内 容: - 15 - request.setCharacterEncoding(gb2312); String author=request.getParameter(author); String content=request.getParameter(content); Date curDate=new Date(new java.util.Date.getTime); java.text.SimpleDateFormat formatter=new java.text.SimpleDateFormat(y
23、yyy-MM-dd hh:mm:ss); String t=formatter.format(curDate); out.print(t); if(author!=null) try Connection con=DriverManager.getConnection(url,user,password); Statement st=con.createStatement; ResultSet rs=null; rs=st.executeQuery(select max(art_id) from articles_bbs); rs.next; int sm=rs.getInt(1)+1; st
24、.executeUpdate(insert into articles_bbs(art_id,user_name,author,content,issue_time,view_times,reply_times) values(+sm+,+session.getAttribute(user)+,+author+,+content+,sysdate,0,0); out.print(发帖成功); catch(SQLException el)out.print(发帖失败); 三、管理员使用 1.、管理员登录 效果图如下: 代码如下: - 16 - 管理员: 密 码: 登陆
25、成功则进入管理页面 2、删帖 效果图如下: 可以在单选框上选择要删除的帖子,然后点击删除,刷新后就可以浏览到删除后的剩余的帖子。实现代码如下: - 17 - 删否 标题 发帖时间 发帖人 点击数 回帖数 所有帖子 % try Connection con=DriverManager.getConnection(url,user,password); Statement st=con.createStatement; ResultSet rs=null; String sql=select user_name,author,issue_time,view_times,reply_times fr
26、om articles_bbs order by issue_time; rs=st.executeQuery(sql); int i=0; while(rs.next) i+; out.print(); out.print(+i+、+rs.getString(2)+); out.print(+rs.getString(3)+); out.print(+rs.getString(1)+); out.print(+rs.getString(4)+); out.print(+rs.getString(5)+); request.setCharacterEncoding(gb2312); String deleteName=request.getParameterValues(delete); if(deleteName=null) ;