




已阅读5页,还剩82页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
论坛的需求分析1 论坛后台管理功能模块1.1 总体功能模块论坛后台管理功能模块主要包括由四个子模块构成,每个子模块下面由一系列的功能构成,后面将分别对每个功能进行说明和介绍。其详细的功能结构图如图1-1所示。后台管理模块包括:论坛设置,论坛管理,用户管理,系统工具。前台操作模块包括:帖子操作,从第6部分开始。图1- 1后台管理功能模块图1.2 任务开发进度设置针对系统的功能对每部分的功能按照优先级别设置了不同的进度,详细进度如表1-1所示。表1-1 功能模块开发周期安排表模块名子模块名工作周期论坛设置基本设置二期注册与访问控制一期界面与显示方式一期论坛功能一期积分策略一期界面风格二期运行参数一期论坛管理编辑版块一期添加版块一期合并版块一期用户举报记录三期词语过滤记录一期批量主题管理一期批量删帖一期附件查询一期帖子回收站一期用户管理编辑用户一期禁止用户一期积分奖惩一期审核新用户二期系统用户组会员用户组2 论坛设置论坛设置子模块主要用来对论坛的一些基本信息进行设置。共由八方面的功能模块组成。2.1 基本设置目前考虑可只有三种功能,页脚联系邮箱,管理员联系邮箱,系统联系邮箱。后续可以不断地将很多内容做成动态设置。(1)管理员联系邮箱:本一线直通车系统管理员的邮件地址;(2)系统联系邮箱:系统向外或向内发送邮件时使用的邮件地址;(3)页脚联系邮箱:本系统页脚的联系邮箱地址,留空时为系统管理员的邮箱地址。优先级:二期开发2.2 注册与访问控制目前对注册不安排在后台进行控制,只对访问在后台可以进行设置。访问设置主要分成三类:IP 禁止列表,IP 访问列表以及管理员后台 IP 访问列表。(1)IP 禁止列表:当用户处于本列表中的 IP 地址时,将禁止访问本论坛。 本功能对管理员没有特例,请务必慎重使用本功能。每个 IP 一行,既可输入完整地址,也可只输入 IP 开头, 例如 192.168.(不含引号) 可匹配 192.168.0.0192.168.255.255 范围内的所有地址, 当下面的 IP 访问列表不为空时此列表无效。(2)IP 访问列表:只有当用户处于本列表中的 IP 地址时才可以访问本论坛,列表以外的地址访问将视为 IP 被禁止, 仅适用于诸如企业、学校内部论坛等极个别场合。本功能对管理员没有特例,请务必慎重使用本功能。 格式及规则同上,留空为所有 IP 除明确禁止的以外均可访问。(3)管理员后台 IP 访问列表:只有当管理员(版主不在此列)处于本列表中的 IP 地址时才可以访问论坛后台管理, 列表以外的地址访问将无法访问,但仍可访问论坛前端用户界面,请务必慎重使用本功能。 格式及规则同上,留空为所有 IP 除明确禁止的以外均可访问系统设置。优先级:一期开发2.3 界面与显示方式该部分功能主要用来分别对主题和帖子的显示方式进行设置,设置的内容如图2-1所示。图2- 1界面与显示方式设置参考图优先级:一期开发2.4 论坛功能主要考虑两方面的内容:帖子相关设置,管理相关设置,其详细图如图2-2和2-3。图2- 2帖子相关设置图2- 3管理相关设置2.5 积分策略积分策略主要用于对论坛中的常见积分进行加减的设置。主要设置内容见图2-4。是否需要对指派任务的完成情况进行积分?图2- 4积分策略参考界面积分策略的主要功能是用触发器做的。在做各种数据库操作的时候,就会触发触发器,对数据库的一些积分触发 ,即对积分进行加减。这里一共有11个触发器,即如图2-5所示。图2- 5 触发器截图这里查看一下bestReply触发器。bestReply就是积分策略中的最佳回复的一个触发器,其他的也是这样的。其触发器代码如下:IF UPDATE(isBest) BEGIN declare userID varchar(15) if (select isBest from inserted )=T select userID=userID from inserted update ztc_user set credits=credits+1 from ztc_user where ztc_user.userID=userID END这段触发器也就是对积分的一个增加策略(具体的代码意思可以到网上参考SQL Server的触发器的相关内容)。其他的也是这样。如果要对这个积分的策略的修改就是要修改触发器,也就是说在java的代码部分要对这个触发器进行更新。其java代码编写的sql语句如下:String bestReply_sql=if Exists(select name from sysobjects where name=bestReply and xtype=TR) + drop trigger bestReply + declare sql nvarchar(4000) +n + set sql= CREATE TRIGGER bestReply ON dbo.ztc_post +n + FOR UPDATE +n + AS +n + IF UPDATE(isBest) +n + BEGIN +n + declare userID varchar(15) +n + if (select isBest from inserted )=T +n + select userID=userID from inserted update ztc_user set credits=credits+bestReply+ from ztc_user where ztc_user.userID=userID +n + END + exec (sql) ;在这段sql语句中删除了原来的触发器,然后新建了一个最新的触发器,以达到修改的目的。在前台用JQuery来显示是否成功,其JQuery代码如下:$(function()$(.change).click(function()$.post(SysTools?flag=changeCfq, $(#form1).serialize(),function(data)if($.trim(data)=success) $(#modifyinfo).fadeIn(1000);$(#modifyinfo).fadeOut(4000);else if($.trim(data)=error)alert(设置失败););););这段代码实现了成功图片和失败图片淡入淡出的效果。2.6 词语过滤词语过滤主要是对所发帖子的敏感词语进行处理的功能,其参考样式如图2-6所示。图2- 6 词语过滤参考界面2.7 界面风格 能设置几种常见的风格,该功能作为后续功能模块。2.8 运行参数主要是用来对缺省的配置参数以及数据库配置进行设置,参考界面如图2-7和图2-8所示。图2- 7 缺省参数设置图2- 8 数据库配置3 论坛管理3.1 编辑版块编辑版块主要包括对分区和版块进行编辑、删除和指定版主。其主界面如图3-1所示。图3- 1 编辑版块3.1.1分区的编辑分区的编辑即是分区的管理,分区的管理包括对分区名称的修改,显示该分区的创建时间,板块的数量,对分区的增加和修改的操作,其界面如图3-2所示。图3- 2 编辑分区(1) 修改分区的名称修改分区的名称是利用了JQuery技术进行修改,在点击分区名称的时候,会将名称变成名称的单元格,其显示如图3-3所示:图3- 3 修改分区名称其JQuery代码如下:function tdclicks(tds) var td = $(tds);if (td.children(input).length 0) /当前td中input,不执行click处理return false;var tdtext = td.html();var idNode = $(#+tdtext);/包含板块id的input(hidden)节点td.html();var input = $();input.css(width,250px);input.attr(value,tdtext).attr(title,回车保存esc退出编辑);input.appendTo(td);input.trigger(focus);var dominput = input.get(0).select();/文本框中文本选中input.click(function() return false;);input.keyup(function(event) /获取当前按下键盘的键值var keycode = event.which;/处理回车的情况if (keycode = 13) /获取当当前文本框中的内容var inputtext = $(this).val();var regu = a-zA-Z0-9u4e00-u9fa5+$;var re = new RegExp(regu);/正则表达式,字符串只能由字母、数字和汉字组成 if(!re.test(inputtext)alert(分区名称只能由中文、字母或数字组成!);return false;else if(inputtext=|inputtext=null) alert(分区名不可为空!); return false;else if(inputtext.length15) alert(分区名不可超过15个字!); return false;else td.html(inputtext);$.post(BoardServlet?handle=modifysectionname&sid=+idNode.val()+&newname=+encodeURI(encodeURI(inputtext),null,function(data)if($.trim(data)=success) $(#modifyinfo).fadeIn(1000);$(#modifyinfo).fadeOut(slow);td.html(inputtext);/alert(修改成功!);else alert(data);td.html(tdtext););/处理esc的情况if (keycode = 27) /将td中的内容还原成tdtexttd.html(tdtext););input.blur(function() /当文本框失去焦点的时候/将td中的内容还原成tdtexttd.html(tdtext););这里是利用JQuery对后台进行交互,并且修改前端的显示情况。(2) 展示板块数量和创建时间。要展示的内容首先放在一个List中,List里面的内容应该在控制层就得到的,也就是在Servlet中就将List的内容得到。其jsp页面仅仅是显示而已。这里不再赘述。(3) 删除分区和添加分区。在删除分区的时候得到分区的主键号即可以对分区的删除。但是分区的删除的时候要注意分区下面的帖子处理,其处理办法一般是删除所有帖子还有就是对分区里面的帖子进行移动到其他的分区,其界面的显示如如3-4所示。图3- 4 删除分区下的帖子处理增加分区:只要输入的分区的名称就可以增加分区。3.1.2版块的编辑主要实现的功能有:版块名称更改,显示版块,所属分区,删除板块,增加板块,权限分配。其操作界面如图3-5所示。图3- 5编辑版块参考界面(1)版块更换名字板块的更换名字和分区的更换名字一样,都是用JQuery的可编辑表格做的,具体的可以参考分区的更换名字。(2)删除版块删除某个版块。实现方法:删除版块时,会同时清除其中的帖子和附件,但不会更新用户发帖数和积分,其删除的实现和分区删除实现一样,同样要对板块下面的主题和帖子进行处理。效果图如图3-6所示。图3- 6 删除版块(3)增加板块增加首先选择分区,在分区下面增加板块。(4)指定版主给某个版块指定版主。选择板块是弹出一个对话框给用户,用户可以选择。其效果如图3-7所示。图3- 7 选择版主这个是用JQuery去实现的。包括遮罩层,树形结构,选择版主等操作。其JQuery代码如下所示:function selectwin() /遮罩层、选人窗口的弹出包括窗口中加载的部门和人员var width = window.screen.availWidth; var height = window.screen.availHeight; var p = $();p.css(position,absolute);p.css(width,width+px).css(height,height+px).css(top,0px).css(left,0px).css(z-index,998px);p.css(background-color,gray).css(filter,alpha(opacity=80).css(opacity,0.5);/内容层var p1 = $(#selectmotor);var top=parseInt(parseInt(document.body.scrollHeight)*0.25)+document.body.scrollTop;var left=document.documentElement.offsetHeight/2;p1.css(z-index,999).css(top,top+px).css(left,left+px);var treeNode = $(#tree);$.ajax(type:POST,url:JsonServlet,data:handle=getdeparts,dataType:json,success: function(msg)treeNode.children().remove(); var data = eval(msg);/alert(data0.departmentName);/alert(msg);for(var departid in data) var depart = datadepartid;var liNode = $();var spanNode = $();spanNode.html(depart.departmentName);spanNode.appendTo(liNode);spanNode.attr(id,depart.departmentID);liNode.appendTo(treeNode);$(spanNode).css(cursor,pointer);spanNode.click(function(msg) /点击部门的时候/alert(dianji);var thisli = $(this).parent();var $ul = $(this).siblings(ul);var info = $ul.length;if(info!=0) if($ul.is(:visible) $(this).parent().attr(class,m-collapsed); $ul.slideUp(slow); else $(this).parent().attr(class,m-expanded); $ul.slideDown(slow); return false;else /alert(dianji);$.ajax(type:POST,url:JsonServlet,data:handle=getusers&did=+$(this).attr(id),dataType:json,success:function(msg) var motor = eval(msg);/alert(motor0.nickName);/alert(数据回来);var ul = $();var li = $();for(var userid in motor) var user = motoruserid;var span = $();span.html(user.nickName);span.attr(id,user.userID);span.appendTo(li);span.mouseover(function() $(this).css(background-color,#dfdfdf).css(cursor,pointer); ); span.mouseout(function() $(this).css(background-color,white); ); span.click(function() var motor = $(this).html(); $(#searchtext).attr(value,motor+); );li.appendTo(ul);ul.appendTo(thisli);); ); );/treefunc();var body = $(body);p.appendTo(body);p1.appendTo(body);p1.fadeIn(slow);3.2 词语过滤记录主要用来查看被过滤掉的记录的情况。可采用两种方式查看过滤的记录,其界面如图3-8所示。图3- 8 词语过滤记录词语过滤记录主要是显示记录,这里有2个条件筛选,分别是每页显示的数量还有就是原因,并且页面实现了分页的功能。CensorDao censorDao = new CensorDao();String sign = request.getParameter(sign);String c = request.getParameter(c);/count的临时变量String r = request.getParameter(r);/reason的临时变量int page = Integer.parseInt(request.getParameter(page);List allCensors = null;int totalpage = 1;if(sign=null|sign=|sign.length()0)size=Integer.parseInt(temp);elseif(c.length()0)size = Integer.parseInt(c);elsesize=10;c = size+;allCensors = censorDao.getCensors(page,size);totalpage = censorDao.getAllPages(censorDao.getAllCount(), size);else if(sign.equals(reason)String reason = request.getParameter(reason);String sqlCount =;String t =;/存放临时的reasonif(r=null|r=|r.length()0)if(boardId.equals(all)elsetemp = temp+ boardID = +boardId+ and ;if(userId.length()0)temp = temp+ userID= +userId+ and ;if(remoteIP.length()0)temp = temp+ remoteIP= +remoteIP+ and ;if(subject.length()0)temp = temp+ title like %+subject+% and ;if(maxVisits.length()0)temp = temp+ visits 0)temp = temp+ visits +minVisits+ and ;if(maxReplies.length()0)temp = temp+ replies 0)temp = temp+ replies +minReplies+ and ;if(maxCreateTime.length()0)temp = temp+createTime 0)temp = temp+createTime +minCreateTime+ and ;if(isDigest.equals(1)temp = temp+isDigest = T and ;else if(isDigest.equals(2)temp = temp+isDigest = F and ;if(isTop.equals(1)temp = temp+topScope != F and ;else if(isTop.equals(2)temp = temp+topScope = F and ;if(isHigh.equals(1)temp = temp+highColor is not null and ;else if(isHigh.equals(2)temp = temp+highColor is null and ;if(hasAttach.equals(1)temp = temp+attaches !=0 and ;else if(hasAttach.equals(2)temp = temp+attaches =0 and ;if(state.equals(1)temp = temp+state = N and ;else if(state.equals(2)temp = temp+state = C and ;if(temp.lastIndexOf(and )=temp.length()-4)temp=temp.substring(0,temp.lastIndexOf( and );if(temp.length()0)temp = new String(temp.getBytes(ISO-8859-1),UTF-8);sqlCount = sqlCount + where +temp+ and state R;elsesqlCount =sqlCount + where state R;TopicDao topicDao = new TopicDao();List queryResult = topicDao.getQueryResult(temp, page);request.setAttribute(queryResult, queryResult);request.setAttribute(allCount, topicDao.getCount(sqlCount);request.setAttribute(totalpage, topicDao.getQueryCount(sqlCount);request.setAttribute(page, page);request.setAttribute(temp, temp);isForm=F;request.setAttribute(isForm, isForm);List allSections = new ArrayList();allSections = new SectionDao().getallSectionBeans();request.setAttribute(allSections, allSections);request.getRequestDispatcher(bbs/admin/forums/topic_list.jsp).forward(request, response);elseTopicDao topicDao = new TopicDao();if(temp.trim().length()0)temp = new String(temp.getBytes(ISO-8859-1),UTF-8);sqlCount = sqlCount + where +temp+ and state R;elsesqlCount =sqlCount + where state R;List queryResult = topicDao.getQueryResult(temp, page);request.setAttribute(queryResult, queryResult);request.setAttribute(allCount, topicDao.getCount(sqlCount);request.setAttribute(totalpage, topicDao.getQueryCount(sqlCount);request.setAttribute(page, page);request.setAttribute(temp, temp);isForm=F;request.setAttribute(isForm, isForm);List allSections = new ArrayList();allSections = new SectionDao().getallSectionBeans();request.setAttribute(allSections, allSections);request.getRequestDispatcher(bbs/admin/forums/topic_list.jsp).forward(request, response);在这段java代码中可能比较长,但是由于判断的条件比较多,都需要判断。在判断的过程中主要是一个拼凑sql语句的过程,将要查询的条件拼成一个sql语句。最后按条件分页即可以得到界面上的效果。当单击图3-11中的某条主题后会打开如图3-12所示的主题详细信息窗口,并可对该主题进行操作。 图3- 12 主题详细信息界面3.4 批量删帖一般用于删除违规的回复帖子,如果要批量删除主题需使用批量主题管理。删除帖子的操作方法是先按照条件查询到需删除的帖子,再进行删除操作。其操作界面如图3-13和图3-14所示。单击图3-14中的一条记录会打开如图3-12所示的界面来查看该主题的详细情况。图3- 13 帖子查询界面在帖子查询界面的查询方式是联动的方式,用JQuery实现的,选择不同的查询方式显示的是不同的查询条件,其JavaScript代码如下:function changediv()var way = document.getElementById(findway).value;var boardway = document.getElementById(boardway);var userway = document.getElementById(userway);var topickey = document.getElementById(topickey);var time = document.getElementById(time);if(way=boardway) boardway.style.display = block;userway.style.display = none;topickey.style.display = none;time.style.display = none;else if(way=userway) boardway.style.display = none;userway.style.display = block;topickey.style.display = none;time.style.display = none;else if(way=topickey) boardway.style.display = none;userway.style.display = none;topickey.style.display = block;time.style.display = none;else if(way=time) boardway.style.display = none;userway.style.display = none;topickey.style.display = none;time.style.display = block;这里用了一个障眼法,选择不同的查询方式的时候就会显示不同的表格,并且隐藏不需要用的表格。图3- 14 删除操作这里的删除是根据主键id来进行删除。每个删除都有个删除链接,这里不再详细说明。3.5 附件查询附件查询是查询带有附件的主题帖子的情况,一般包括两步,首先按条件查询到主题,再单击记录查看主题的详细信息。其操作界面如图3-15和图3-16所示。图3- 15 查询界面其查询的java和主题查询差不多,请查看批量主题管理里面的java代码说明。图3- 16 查询结果界面3.6 帖子回收站主要用于对删除的帖子做进一步的操作,包括彻底删除,归档和还原。操作界面如图3-17和图3-18所示。帖子回收站所对应的数据来源于表“trash_box”。在这里可进行三个动作:(1) 还原该操作是将帖子调整为正常显示状态,执行该功能主要要执行如下几方面的操作:1) 将主题表topic中该主题的状
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 绿植养护合同协议书范本
- 长期采购礼品卡合同范本
- 管道下水道施工合同范本
- 职工舞蹈活动培训协议书
- 聘请生产厂长合同协议书
- 混凝土护坡工程合同范本
- 汽车整形机售卖合同范本
- 终止合同物品交接协议书
- 自制车辆出售协议书模板
- 黑马程序员培训协议合同
- 2025年焊工(高级技师)职业技能鉴定理论考试题库(含答案)
- 肝内胆汁淤积症
- 上海2025年上海申康医院发展中心招聘笔试历年参考题库附带答案详解
- 光伏安全施工方案范本
- 2025年上半年长沙市浏阳市直事业单位及招考易考易错模拟试题(共500题)试卷后附参考答案
- 2025-2030年中国高空逃生缓降器行业市场规模分析及投资策略研究报告
- 危化品石油石化企业三基三记培训
- DB37T 4424-2021 消防救援队伍作战编成规范
- 《电网实时智能态势评估大数据平台数据接入规范》
- 《列车运行自动控制系统(第2版)》全套教学课件
- T-CBIA 009-2022 饮料浓浆标准
评论
0/150
提交评论