《BBS论坛项目需求文档(第二阶段)(共14页).docx》由会员分享,可在线阅读,更多相关《BBS论坛项目需求文档(第二阶段)(共14页).docx(14页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、精选优质文档-倾情为你奉上BBS项目需求文档(第二阶段)【 高级查询 、判断循环结构 】 查询四张表的测试数据如图:需求1: 显示系统信息: SQL Server版本号、服务器的名称 错误号等。 网上有人举报,可卡因涉嫌发表不合法的言论,版主希望查看何时可卡因的发帖情况和权限。分析1:SQL Server版本号、服务器的名称、错误号等 显示系统信息,需要使用SQL Server的系统全局变量,以“”打分析2:查询可卡因的发帖情况,需要查看主贴表和回帖表 但这些表中没有“可卡因“的姓名,需要依靠用户编号UID列拆能超找。 鉴于两张表都需要用到用户编号 UID列 所以可预先定义一个变量用于存放可卡
2、因的用户编号 UID 值 ,然后方便后续查询使用。参考代码:/*1.使用系统变量,查询数据库系统情况*/-查询SQLServer的版本号、服务器的名称、错误号等printSQLServer的版本:+version-查询服务器名称print服务器的名称:+servername-修改会发生错误,因为Upassword限制必须大于6位,用error接受updatebbsUserssetUpassword=1234whereUname=可卡因printconvert(varchar(5),error)输出结果(由于密码违反了约束 产生错误号!)需求2:网上有人举报可卡因涉嫌发表不合法言论,版主希望查看
3、核实可卡因的发贴情况和权限;参考代码:setnocounton-不显示T-SQL语句影响的行数的信息printprint个人资料如下:-查看可卡因个人资料select昵称=Uname,登记=Uclass,个人说明=Uremark,积分=UpointfrombbsUserswhereUname=可卡因declareuserIDint-定义变量,用于存放用户编号值selectuserID=UIDfrombbsUserswhereUname=可卡因-变量赋值print可卡因发帖如下:-查看可卡因发帖情况select发帖时间=convert(varchar(10) Ttime,111),点击率=TCl
4、ickCount,主题=TTopic,内容=TContents,状态=TStatefrombbsTopicwhereTUID=userIDprint可卡因回帖如下:-查看可卡因回帖情况select回帖时间=convert(varchar(10) Rtime,111),点击率=RClickCount,内容=RcontentsfrombbsReplywhereRuID=userIDprint可卡因权限:-查看可卡因权限,如果积分大于30则可以发帖declarepointintselectpoint=UpointfrombbsUserswhereUname=可卡因if(point30)print有权
5、发贴elseprint无权发帖go输出信息如下:经核实,一起大家对可卡因误会的原因在于: 可卡因的个人说明比较惹眼,回帖中有“PPMM“字眼。需求3: 目前鉴于星级用户较少,用户普遍因积分较少而发帖热情不高 这也瞬间影响了 论坛的人气,版主希望通过提高用的积分,从而增加星级用户了星级用的评定规则如下;积分:0- 500 评为1星级500- 1000 评为2星级1000- 2000评为3星级2000- 4000评为4星级4000- 5000评为5星级5000 以上评为6星级、提高后显示用的等级(星级)和积分情况。首先提升论坛人气参考代码:/*3.循环反复提份(每次提分),直到积分平均分达到以上*
6、/select * from bbsUsersdeclare avg int,score intset score=0 while(1=1) begin update bbsUsers set Upoint=Upoint+50 where Ustate4 -除了被封杀的帖子 set score=score+50 -记录提分值 select avg=avg(Upoint) from bbsUsers -获取提分后的平均分 if(avg2000) break endprint 提升分值:+convert(varchar(8),score)需求4: 提高后显示用的等级(星级)和积分情况。分析: 循环
7、反复提分(每次提取50分),知道积分平局分达到2000以上 提分后根据星级用的评定规则,采用CASW-END多分支语句 更新用的等级(星级水平) 采用CASW-END多分支语句,显示用户的相应星级。输出结果如下:参考代码:/*4.给用户评星级:0评为星级,500评为星级,1000评为星级,2000评为星级,4000评为星级,5000以上评为星级*/-更新用户对应的等级update bbsUsers set Uclass=case when Upoint 0 显示发帖数和具体的帖子信息 否则显示发帖数:0贴 同理回帖也是如此 最后显示帖子总数数量 (发帖数 + 回帖数),根据帖子总数量显示功臣级
8、别。(功臣级别规则- 贴数和功臣级别对应关系如表)贴数总量功臣级别 10新手上路10 - 20侠客20 - 30骑士30 - 40 精灵王40 - 50光明使者50以上法老参考代码:declare uid int -记录心酸果冻的的UIDdeclare total int -记录总帖子数set total=0select uid=UID from bbsUsers where Uname=心酸果冻print 心酸果冻发帖如下:select total=total+count(*) from bbsTopic where TUID=uidprint 帖子如下:select convert(var
9、char(10),TTime,111),点击率=TClickCount,内容=TContents from bbsTopic where TUID=uidprint 心酸果冻回帖如下:select total=total+count(*) from bbsReply where RUID=uidprint 帖子如下:select convert(varchar(10),RTime,111),点击率=RClickCount,内容=RContents from bbsReply where RUID=uidprint 心酸果冻帖数总计:+convert(varchar(8),total)selec
10、t 功臣级别=case when total 10 then 新手上路 when total between 10 and 20 then 侠客 when total between 21 and 30 then 骑士 when total between 31 and 40 then 精灵王 when total between 41 and 50 then 光明使者 else 法老 endgo需求6: 假设论坛规定最多的帖子成为第一精华帖。 请使用T-SQL显示精华帖的信息以及回帖详细信息,如图所示;表情数字及对应的含义如表:参考代码:print 第一精华帖的信息如下declare max
11、 int -存储最多回帖数declare rtid int -存储精华帖编号declare ttopic varchar(50) -存储精华帖的标题declare name varchar(20) -存储精华帖作者姓名declare uid int -存储精华帖作者编号select top 1 max=count(*),rtid=rtid from bbsReply group by RTID order by RTIDselect ttopic=TTopic,uid=TUID from bbsTopic where TID=rtidselect name=Uname from bbsUser
12、s where UID=uidselect 发帖时间=convert(varchar(10),TTime,111),点击率=TClickCount,作者=name,主题=ttopic,内容=Tcontentsfrom bbsTopic where TID=rtidprint 回帖数:+convert(varchar(10),max)print 如下所示select 回帖时间=convert(varchar(10),RTime,111),点击率=RclickCount,回帖表情=case when RFace=1 then (oo)猪头 when RFace=2 then *:o)小丑 when
13、 RFace=3 then :|机器人 when RFace=4 then oo老人家 else (: 1000 , “人气熊旺旺”; 否则就为 “一般般”。 年度品牌版块:主贴两最多的版块。 年度倒胃版块:主贴量最少的版块。 年度回帖人气最旺奖: 回帖的饿点击率排名前 2名。 你啊对业绩最差版主:版块点击率低于500或主题量等于0 。分析: 显然需要用到子查询。例如:人气年度评估。IF (论坛所有版块总点击率(子查询) 1000)Print 人气熊旺旺,大家辛苦了ElsePrint 人气一般般, 大家加油啊!其它查询也非常类似。 在查询分析器中键入以下代码。参考代码: /*7.论坛年度评估*
14、/set nocount onprint -各位大虾注意了,本论坛现在发布年度无记名评奖1000,为人气熊旺旺;否则就为一般般)-select * from bbsSectionprint 论坛人气年度评估if (select sum(SclickCount) from bbsSection)1000 print 人气熊旺旺else print 一般般-年度品牌版块:主帖量最多的版块-select * from bbsUsers-select * from bbsTopic-select * from bbsSectionprint 年度品牌版块评估:select 版块名称=Sname,主帖数
15、量=StopicCount,简介=Sprofile from bbsSectionwhere StopicCount=(select max(StopicCount) from bbsSection)-年度倒胃版块:主帖最少的版块print 年度倒胃版块评估:select 版块名称=Sname,主帖数量=StopicCount,简介=Sprofile from bbsSectionwhere StopicCount=(select min(StopicCount) from bbsSection)-年度回帖人气最旺奖:回帖的点击率排名前两名print 年度回帖人气最IN的前两名获奖作者:sel
16、ect * from bbsUsersselect * from bbsTopicselect 大名=Uname,星级=Uclass from bbsUserswhere UID in(select top 2 TUID from bbsTopic order by TClickCount desc)-评选最差版主:如果存在发帖子量为或者点击率低于的版块,则评选最差版主if exists(select * from bbsSection where StopicCount=0 or SclickCount=500) begin print 请下列版块斑竹加油哦! select 版块名称=Sna
17、me,主帖数量=StopicCount,点击率=SclickCount from bbsSection where StopicCount=0 or SclickCount=500 end需求8: 用户发帖 - 用户发主帖后,需要更新相应版块(.NET技术版块)的主帖数,主帖数+1- 用户发主帖后,酌情加分:如果主帖是新帖(别人没提及过),加100分,否则加50分.- 用户积分添加后,更新用户的相应等级- 在论坛上发布用户的新帖.- 所有用户的等级重新排名/*-发主帖:心酸果冻在.NET技术版块发帖:怯怯的问:什么是.NET啊?微软的.NET广告超过半个北京城啊.*/输入结果如图所示:分析:用
18、户发主贴,显然应向主贴表(bbsTopic)中插入主贴记录; 查看主贴表(bbsTopic)的表结构,需要用户编号列(TuID) 板块编号列(TsID) 所以我们需要预先查出心酸果冻的用户编号(UID) “。net技术” 版块的板块编号(SID) 为了使后续语句继续使用这些值 还需要定义相关变量来存放它们。 同上一阶段一样的酌情加分 需要使用Case END语句; 参考语句:/*8*/-用户发主帖后,需要更新相应版块(.NET技术版块)的主帖数,主帖数+1-用户发主帖后,酌情加分:如果主帖是新帖(别人没提及过),加分,否则加分.-用户积分添加后,更新用户的相应等级-在论坛上发布用户的新帖.-所
19、有用户的等级重新排名select * from bbsUsersselect * from bbsSectionselect * from bbsTopicdeclare userID varchar(10),sID int -定义变量存放用户编号和版块编号select userID=UID from bbsUsers where Uname=心酸果冻 -获取心酸果冻的用户编号select sID=SID from bbsSection where Sname like %.NET技术% -获取.NET版块的编号-将心酸果冻的发帖插入主帖表insert into bbsTopic(TSID,T
20、UID,TFace,Ttopic,Tcontents) values(sID,userID,3,什么是.NET啊?,我靠!微软的.NET广告超过半个北京城啊.)-更新版块表:.NET技术版块主帖数+1update bbsSection set StopicCount=StopicCount+1 where SID=sID-更新用户积分:如果是新主题,则积分增加,否则增加if not exists(select * from bbsTopic where TTopic like 什么是.NET啊? and TuIDuserID) update bbsUsers set Upoint=Upoint
21、+1 where UID=userIDelse update bbsUsers set Upoint=Upoint+50 where UID=userID-更新用户积分后,更新相应的级别update bbsUsers set Uclass=case when Upoint500 then 1 when Upoint between 500 and 1000 then 2 when Upoint between 1001 and 2000 then 3 when Upoint between 2001 and 4000 then 4 when Upoint between 4001 and 50
22、00 then 5 else 6 end where UID=userID-对外发布心酸果冻的发帖(使用系统变量IDENTITY查出刚才插入的编号值)select 发帖作者=心酸果冬,发帖时间=convert(varchar(10),TTime,111),主题=TTopic,内容=TContents from bbsTopic where TID=IDENTITY-显示目前的最新排名select 昵称=Uname,星级=case when Uclass=0 then when Uclass=1 then when Uclass=2 then when Uclass=3 then when Uc
23、lass=4 then when Uclass=5 then else end,积分=Upoint from bbsUsersgo需求9: 假定可卡因回复主贴: “什么是.NET啊?” ,笑呵呵的回复道: “.NET是微软力推的企业级信息网络共享平台”要求使用T-SQL实现以下业务规则:-用户回帖后,需要更新对应的主贴信息: 回复数量 + 1 ,点击率+ 1-用户回帖后,还需要更新对应板块的点击率,点击率+1-用户回帖后,酌情加分: 如果是该贴的第一回帖人(即第一个回帖的),加100分 否则加 50分-用户积分添加后,更新用的相应等级(等级规则参考上一阶段代码)-在论坛上发布主帖和跟帖.-论坛
24、用户星级重新排名. 提示:第一回帖人可以根据时间配需,采用IF和子查询语句。参考语句 -在论坛上发布主帖和跟帖.-论坛用户星级重新排名./*可卡因回复主帖:什么是.NET啊?笑呵呵的回复道:.NET是微软力推的企业级信息网络共享平台.*/setnocountonselect*frombbsUsersselect*frombbsReplyselect*frombbsTopicselect*frombbsSectiondeclareuidintselectuid=UIDfrombbsUserswhereUname=可卡因printuiddeclaretidintdeclaresidintselec
25、ttid=TID,sid=TSIDfrombbsTopicwhereTTopiclike%还是JSP中%printtidprintsidinsertintobbsReply(RTID,RSID,RUID,RFace,RContents)values(tid,sid,uid,4,.NET是微软力推的企业级信息网络共享平台.)-用户回帖后,需要更新对应主帖的信息:回复数量+1,点击率+1.updatebbsTopicsetTClickCount=TClickCount+1,TReplyCount=TReplyCount+1-用户回帖后,还需要更新对应版块的点击率,点击率+1.updatebbsSe
26、ctionsetStopicCount=StopicCount+1-用户回帖后,酌情加分:如果是该帖的第一回帖人(即第一个回帖的),加100分;否则加50分.-方法一/*declaretreplycountintselecttreplycount=TReplyCountfrombbsTopicwheretid=TIDif(treplycount=1)updatebbsUserssetUpoint=Upoint+100elseupdatebbsUserssetUpoint=Upoint+50*/-方法二declaretreplycountintselecttreplycount=count(*)
27、frombbsReplywhereRTID=tidif(treplycount=1)updatebbsUserssetUpoint=Upoint+100elseupdatebbsUserssetUpoint=Upoint+50-用户积分添加后,更新用户的相应等级.updatebbsUserssetUclass=casewhenUpoint500then1whenUpointbetween500and1000then2whenUpointbetween1001and2000then3whenUpointbetween2001and4000then4whenUpointbetween4001and
28、5000then5else6endwhereUID=uid-在论坛上发布主帖和跟帖-显示主帖select*frombbsTopicwhereTID=tid-显示回帖select*frombbsReplywhereRID=IDENTITY-论坛用户星级重新排名select昵称=Uname,星级=casewhenUclass=0thenwhenUclass=1thenwhenUclass=2thenwhenUclass=3thenwhenUclass=4thenwhenUclass=5thenelseend,积分=UpointfrombbsUsers项目实战(SQL Server)BBS论坛(第二阶段)专心-专注-专业