《最新BBS论坛项目需求文档(第三阶段).docx》由会员分享,可在线阅读,更多相关《最新BBS论坛项目需求文档(第三阶段).docx(29页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、Four short words sum up what has lifted most successful individuals above the crowd: a little bit more.-author-dateBBS论坛项目需求文档(第三阶段)BBS论坛项目需求文档(第三阶段)BBS项目需求文档(第三阶段)【 存储过程 、触发器 】需求10:/* 为了维护论坛环境的空气清新,斑竹会定期检查帖子或核实网友对某个帖子的投诉,然后删除不合法的发帖*/- 删除帖子- 主题:什么是.NET?- 内容:我靠!微软的.NET广告超过了半个北京城啊.请使用T-SQL语句实现以下规则: 被删
2、帖的贴住(心酸果冻) 积分减去100分 跟(回)贴的贴主减去50分(回帖者没检举,涉嫌包庇并支持 “犯罪” ,所以减分)。 帖子所在版块的主贴量 1 视情节轻重给予贴主(心酸果冻)警告: 如果回帖量 10 负面影响较大 给予严重警告; 否则给予一般警告。 删掉主贴和跟帖(由于约束的限制,需要先删除跟帖,再删除主贴) 所有用户重新排名如图所示:参考代码:ssselect*frombbsTopicselect*frombbsUsersselect*frombbsReplyselect*frombbsSectiondeclaretidintdeclareuidtintselecttid=TID,ui
3、dt=TUIDfrombbsTopicwhereTTopiclike%什么是.NET啊%-帖主分数-100updatebbsUserssetUpoint=Upoint-100-跟贴的帖主分数-50updatebbsUserssetUpointdeletefrombbsTopicwhereTID=tidselect*frombbsReplywhereRTID=1需求12: 存储过程目标: 使用存储过程实现: 查看某个用的发帖和回帖情况 获取用的发帖数和回帖数情况 查看指定帖子的回帖数量前一阶段使用事物模拟银行的转账、取款和存款业务 并使用视图和索引,方便BBS的论坛排名 论坛管理中 经常需要评选
4、奖项或调查某个用发表的言论。本阶段将使用存储过程 简化这些常规的管理操作 :诸如查询某个用的发帖情况 查询某个帖子的回帖情况等。调用存储过程查看用户表(bbsUsers)的相关信息。分析:查看表的约束、索引等 可调用相关的系统存储过程; 创建文件夹 并查看某个文件夹下的文件 ,可调用xp_cmdshell扩展存储过程 。参考代码:usebbsDBgoexecsp_helpconstraintbbsUsers-查看表bbsUsers的约束execsp_helpindexbbsUsers-查看表bbsUsers的索引gousemastergoexecxp_cmdshellmkdire: est,n
5、o_output-在e:下创建文件夹testexecxp_cmdshelldire:-查看文件夹需求13: 创建带参数的存储过程在进行论坛的奖项评选或调查某个用户发表的言论情况,都需要经常查找用户的发帖情况(发主贴和回帖)。 请编写存储过程proc_find1,实现查找某个用户(假定为可卡因)的发帖情况。如图所示:分析:查询某个用的发帖情况 显然在创建春错过程是 需要将用户作为输入参数 ,调用时指定具体的用户。参考代码/*13创建带参数的存储过程*/-编写存储过程proc_find1,实现查找某个用户的发贴情况usebbsDBgoifexists(select*fromsysobjectswh
6、erename=proc_find1)dropprocedureproc_find1gocreateprocedureproc_find1userNamevarchar(10)-输入参数用户名assetnocounton-获取用户对应的用户编号UIDdeclareuserIDvarchar(10)selectuserID=UIDfrombbsUserswhereUname=userName-如果在主帖表中存在该用户发表的主帖ifexists(select*frombbsTopicwhereTuID=userID)beginprintuserName+发表的主帖如下:select发贴时间=con
7、vert(varchar(10),TTime,111),点击率=TClickCount,主题=TTopic,内容=TcontentsfrombbsTopicwhereTUID=userIDendelseprintuserName+没有发表过主帖ifexists(select*frombbsReplywhereRUID=userID)beginprintuserName+发表的回帖如下:select发帖时间=convert(varchar(10),RTime,111),点击率=RClickCount,回帖内容=RcontentsfrombbsReplywhereRUID=userIDendels
8、eprintuserName+没有发表过回帖go/*调用存储过程*/execproc_find1心酸果冻需求14 /*创建带返回值的存储过程*/-编写存储过程proc_find2,查找某个用户的发贴情况,并返回发贴数和回帖数 如图所示:分析:本例需要返回发帖数和回帖数,所以应在存储过程proc_find1的基础上,添加两个输出参数 其关键字为OUTPUT 在上例的未尾,复制proc_find1的语句 然后再做部分修改即可。参考代码:/*14-.带返回值的存储过程-*/ IF EXISTS (SELECT * FROM sysobjects WHERE name = proc_find2 ) D
9、ROP PROCEDURE proc_find2GOCREATE PROCEDURE proc_find2 userName varchar(10), sumTopic INT OUTPUT, sumReply INT OUTPUT AS SET NOCOUNT ON DECLARE userID varchar(10) SELECT userID=UID FROM bbsUsers WHERE Uname=userName -获取心酸果冻的用户编号 IF EXISTS(SELECT * FROM bbsTopic WHERE TuID=userID) BEGIN SELECT sumTopi
10、c=count(*) FROM bbsTopic WHERE TuID=userID print userName+发表的主贴如下: SELECT 发贴时间=convert(varchar(10),Ttime,111),点击率=TclickCount, 主题=Ttopic,内容=Tcontents FROM bbsTopic WHERE TuID=userID END ELSE BEGIN SET sumTopic=0 print userName+没有发表过主贴。 END IF EXISTS(SELECT * FROM bbsReply WHERE RuID=userID) BEGIN SE
11、LECT sumReply=count(*) FROM bbsReply WHERE RuID=userID print userName+发表的回贴如下: SELECT 回贴时间=convert(varchar(10),Rtime,111),点击率=RclickCount, 回贴内容=Rcontents FROM bbsReply WHERE RuID=userID END ELSE BEGIN SET sumReply=0 print userName+没有发表过回贴。 ENDGODECLARE sum1 INT ,sum2 INTEXEC proc_find2 可卡因,sum1 OUTP
12、UT,sum2 OUTPUTIF sum1=sum2 print 小弟发贴较多,看来比较喜欢打抱不平!ELSE print 小弟回帖较多,看来比较关心民众疾苦!print 总贴数: +convert(varchar(5),sum1+sum2 )GO需求15 使用触发器上一阶段我们提起过,为了维护论坛环境的 “空气清新” 版主会定期检查帖子或何时网友对某个帖子的投诉 然后删除不合法的贴贴。 例如删除心酸果冻的主贴。主题: 设么是.NET啊? 内容:我靠!微软的.NET广告查过半个北京城啊。 请使用T-SQL 语句实现以下业务规则。 被删帖的贴主(心酸果冻)积分减去100分 回帖的贴主减去50分(
13、回帖者没检举,涉嫌包庇并支持“犯罪”,所以减分)。 删除跟帖如图所示:分析:删除主贴引发一两串的动作 ,所以采用触发器比较合适。删除的数据可以从deleted表中查找 。参考代码:USE bbsDBGOEXEC sp_helpconstraint bbsReply -请查看回帖表外键约束的名称,修改下列约束名称ALTER TABLE BBSReply DROP CONSTRAINT FK_BBSReply_BBSTopic -删除外键约束IF EXISTS (SELECT name FROM sysobjects WHERE name = trig_delete_bbsTopic) DROP
14、TRIGGER trig_delete_bbsTopicGO-使用删除触发器实现删贴功能,删除与回帖表之间的外键约束CREATE TRIGGER trig_delete_bbsTopic ON bbsTopic FOR DELETE AS SET NOCOUNT ON DECLARE userID INT,topicID INT,secID INT SELECT userID=TuID,topicID=TID,secID=TsID FROM deleted -贴主减去分 UPDATE bbsUsers SET Upoint=Upoint-100 WHERE UID=userID -跟贴者纵容并
15、支持犯罪,减去分 UPDATE bbsUsers SET Upoint=Upoint-50 FROM bbsUsers INNER JOIN bbsReply ON bbsUsers.UID=bbsReply.RuID WHERE bbsReply.RtID=topicID -删掉跟贴 DELETE FROM bbsReply WHERE RtID=topicIDGO SET NOCOUNT ON-插入测试数据DECLARE topicID INTINSERT INTO bbsTopic (TsID,TuID,Tface,Ttopic,Tcontents,Tstate) VALUES(2,3,
16、3,什么是.Net啊?,我靠,微软的.Net广告超过半个北京城啊。,1)SET topicID=IDENTITY INSERT INTO bbsReply (RtID,RsID,RuID,Rface,Rcontents) VALUES(topicID,2,4,3,.Net跨语言开发哈.)INSERT INTO bbsReply (RtID,RsID,RuID,Rface,Rcontents) VALUES(topicID,2,5,5,.Net现在牛啊发布了.)GOprint 删贴前删贴后SELECT 昵称=Uname,贴主ID=UID,等级=Uclass,积分=Upoint FROM bbsUsersSELECT 贴主ID=TuID,主题=Ttopic,内容=Tcontents FROM bbsTopicSELECT 回帖人ID=RuID,回贴内容=Rcontents FROM bbsReply【 SQL Server项目实战:BBS论坛- 完毕 】项目实战(SQL Server)BBS论坛(第三阶段)-