QQ空间管理系统设计分析书Word下载.docx
《QQ空间管理系统设计分析书Word下载.docx》由会员分享,可在线阅读,更多相关《QQ空间管理系统设计分析书Word下载.docx(27页珍藏版)》请在冰豆网上搜索。
用户登陆成功后,选择要访问的好友,进入好友的主页,选择好友的说说或者是日志然后在下面的输入框输入评论信息,输入完成后按提交按扭。
提交之后若提交成功,则提示评论成功否则评论失败。
Step4:
评论完成后可以跳转好友的主页面或者是自己的主页面。
(5)发表信息;
该功能是发表自己的日志,说说,音乐。
当用户登陆成功之后,跳转主界面,选择对应的日志或者说说或者音乐功能,然后在每个单摸版中都有提示按钮,像说说在文本框中输入要发表的信息,然后淡季发表按钮;
若是上传音乐,则单击上传按钮。
在每次响应的操作之后都会出现响应的状态提示。
(6)回复评论:
用户对好友发表的评论进行回复
Step1:
Step2:
查看自己的说说或者日志,观看下面的评论信息。
Step3:
找到好友对自己信息的评论,在回复框中输入回复信息。
Step4:
状态显示,回复成功则提示回复成功,否则显示失败。
(7)添加好友:
添加好友,方便查看好友信息。
将鼠标放到添加好友,会划出一个文本框,上面列出了所有的好友,单击右边的添加好友按钮,会弹出已发送添加请求,等待好友回复。
当好友同意添加后,在自己的消息中会提示消息+1,1即为消息数目。
添加成功后,将鼠标放在我的好友处,将划出一文本框,显示自己的所有好友。
因此,本QQ空间管理系统由以下功能模块组成:
(1)用户登录、注册登录模块
(2)主界面模块
(3)个人信息管理与维护模块
1.4用户特征
此系统有两类用户:
普通用户和游客。
功能
(1):
只有进行登录并通过身份验证的用户,才可以在QQ空间系统页面发表日志,并借助个人设置实现对个人相关信息的管理维护。
对于没有经过身份验证的网络用户不允许在本系统中发表日志,更不允许对本系统的页面信息进行管理维护。
该模块实现QQ空间系统的注册及登录验证功能。
注册成功的用户登录时,会随时根据页面输入的登录信息进行提示,如用户名错误或者密码错误。
功能
(2):
在该模块中提供了QQ空间系统页面统计信息(如访问量等),日志、评论、音乐盒及留言信息分页显示等多种功能,方便用户操作。
功能(3):
借助该模块,用户可以随时对个人QQ空间主页中的内容进行增加或修改,包括日志等信息的更新、评论及留言管理等功能,也允许用户对个人信息进行维护及其管理。
对于用户来说一般都有一定的专业领域知识,一般有一定的电脑操作能力,但对于一些特殊的顾客来说可能对电脑操作知识了解比较少,因此对于一般使用者来说不需要特殊的理论、知识来支持,也不需要经过特殊的训练,用户只要在计算机上装有IE或Netscape浏览器,并有基本的浏览器操作知识,便能方便的使用本系统。
1.5限制与约束
此系统必须满足以下限制:
(1)系统中所有帐户能够供用户随时使用,并且用户名唯一性;
(2)在同一时刻,一个帐户不能同时为两个用户服务;
(3)超过预定的时间,没有操作该账号被自动释放;
第二章:
功能描述
2.1主要功能模块
根据系统需求分析和系统功能模块结构图来看,该系统应具备如下基本功能:
●登录信息
●主页信息
●日志信息
●留言板信息
●相册信息
●个人档信息
●音乐信息
QQ空间管理系统可划分为登陆信息,主页信息,个人档信息,说说信息等部分。
其层次图如图1所示。
图1功能模块图
2.2注册功能模块
1.用户表_user其设计结构如下:
图2登陆信息图
用户登录与注册模块实现
登录界面的servlet控制器的部分代码如下:
packagecom.softeem.qqsystem.servlet;
publicclasslogInfoMangerextendsHttpServlet{
privateintcount;
//总的日志数
privateintpagecount;
//共有的页数
privateinteverypage;
//每页显示的数量
privateintcurrentpage;
//当前的页数
privatestaticfinallongserialVersionUID=1L;
privateLogDAOlogdao=newLogDAO();
publicvoidservice(HttpServletRequestrequest,HttpServletResponseresponse){
try{
request.setCharacterEncoding("
utf-8"
);
response.setCharacterEncoding("
}catch(UnsupportedEncodingExceptione){
//TODOAuto-generatedcatchblock
e.printStackTrace();
}
Stringflag=request.getParameter("
flag"
if("
_showlog_daily"
.equals(flag)){
this.getAlllog_Daily(request,response);
System.out.println("
--------*****-----------"
}elseif("
show_daily"
this.show_daily(request,response);
_write_daily_log"
.equals(flag)){//写日志
this.write_daily_log(request,response);
_comment"
.equals(flag)){//进行评论日志
this.createComments(request,response);
***********bbbbbbbbbbbbbb****"
show_message"
.equals(flag)){//显示所有留言信息
this.getAllMessage(request,response);
}
//显示所有的日志,按页显示
publicvoidgetAlllog_Daily(HttpServletRequestrequest,
HttpServletResponseresponse){
HttpSessionsession=request.getSession();
//注意session需要获取
Stringmainaccount=(String)session.getAttribute("
user"
Stringnewaccount=(String)session.getAttribute("
newUser"
Stringaccount;
if(newaccount!
=null){
account=newaccount;
}else{
account=mainaccount;
System.out.println(account);
//System.out.println(account);
everypage=3;
//每页显示5条数据
count=logdao.findallpage(account);
//总的数据量为
if(count%everypage==0){//计算总的页面数
pagecount=count/everypage;
pagecount=count/everypage+1;
currentpage=Integer.parseInt(request.getParameter("
currentpage"
));
//接受网页传来的当前页数
if(currentpage<
0){//判断前一页后一页是否超出该范围
currentpage=0;
}elseif(currentpage>
=pagecount-1){
currentpage=pagecount-1;
List<
Log>
dailyloglist=logdao.getalllog_daily(account,currentpage
*everypage,everypage);
request.setAttribute("
List"
dailyloglist);
request.setAttribute("
currentpage);
//将当前页面传输到页面中
pagecount"
pagecount);
//将总的页面数传输到页面中
request.getRequestDispatcher("
jsp/log_daily.jsp"
).forward(request,
response);
}catch(ServletExceptione){
}catch(IOExceptione){
//显示所要查看的日志
publicvoidshow_daily(HttpServletRequestrequest,
intlog_num=Integer.parseInt(request.getParameter("
log_num"
Loglog=logdao.getonedaily(log_num);
Discuss>
discusslist=logdao.getalldiscuss(log_num);
DiscussList"
discusslist);
Log"
log);
//将关于该文章的内容发送到页面中
jsp/show_daily.jsp"
//发表日志
publicvoidwrite_daily_log(HttpServletRequestrequest,
Stringaccount=(String)session.getAttribute("
Stringtitle=request.getParameter("
title"
Stringcontent=request.getParameter("
content"
Loglog=newLog();
log.setAccount_num(account);
log.setContent(content);
log.setLog_name(title);
System.out.println(title);
System.out.println(content);
intflag=logdao.write_daily_log(log);
System.out.println(flag);
if(flag>
0){
request.setAttribute("
message"
"
文章发表成功!
"
对不起,文章发表失败!
jsp/writedaily_log.jsp"
).forward(
request,response);
当注册页面时,会跳入注册页面,当登陆成功后会跳入该系统的主页面,主页面的部分代码如下:
<
scripttype="
text/javascript"
>
varflag=true;
functionshow(){
varodv=document.getElementById("
dv"
varcount=odv.offsetTop;
if(flag){
vartime=window.setInterval(function(){
count=count+4;
odv.style.top=count;
if(count==0){
window.clearInterval(time);
flag=false;
}
},30)
functionhide(){
if(!
flag){
count=count-4;
if(count==-400){
flag=true;
/Script>
用户登录主界面模块
2.3主页信息模块
2.4日志模块
1.日志表_log其设计结构如下:
2.5留言板模块
1. 留言板分为填写主人寄语,好友印象和留言管理三部分。
2. 用户在填写留言部分填写问题,提交后只会显示提交成功,在没有得到回复前,留言板里没有此条信息,信息会显示在留言管理中等待管理者回复,等到网站管理者对这条留言进行回复后,才显示在留言板中。
3. 留言管理是为了方便网站管理者管理和修改而设立的,留言管理部分只有网站管理者可见,普通用户登录网站时,是看不到这部分内容的。
留言管理里会显示发布留言者在填写留言部分填写的全部信息,便于管理者对访客进行管理。
4. 管理者看到访客留言时,可以对此条信息进行回复留言,删除留言,显示或隐藏的操作,可以对发布的留言进行管理。
5. 留言可定义是否审核,如定义为不需要审核,则用户的留言会直接显示到页面上,如定义为需要审核,则默认为隐藏状态,管理人员审核后方才显示。
1留言表_message其设计结构如下:
2评论表_discuss其设计结构如下:
3访问记录表_visit其设计结构如下:
4好友表_friend其设计结构如下:
2.6相册模块
一、相册模块
这是相册模块的第一个页面功能图。
我们点击各个功能可以跳转到一下各个子页面。
(1)创建相册功能描述
(2)展示设置功能描述
(3)上传照片功能描述。
4相册表_photo其设计结构如下:
2.7个人档信息模块
1音乐表_music其设计结构如下:
2.8个人信息管理与维护模块
5.3.1该页面用来用户的日志管理
5.3.2该页面用来管理用户上传的音乐,以及在线播放音乐的操作
第三章:
数据字典
3.1空间数据字典运用
通过系统需求分析,QQ空间系统编制数据字典如下:
各主要数据流的定义如表1至表4所示:
表1
表2
表3
第四章:
数据库设计
数据库是当前应用软件系统的重要组成部分,如何使基于数据库的应用系统安全、可靠、高效的运行一直是软件开发技术研究的难题。
所以本系统的数据库设计基于以下几点来考虑:
(1)数据库规范化与非规范化的考虑。
(2)数据查询优化与索引的建立。
(3)存储过程与视图。
4.1数据库分析
为了把用户的数据要求清晰明确地表达出来,通常要建立一个概念性的数据模型。
概念性数据模型是一种面向问题的数据模型,是按照用户的观点来对数据和信息建模。
描述了从用户角度看到的数据,反映了用户的现实环境。
QQ空间系统涉及的表包括:
(1)用户表账户、密码、权限(好友)年龄地址
(2)音乐表编号账户歌名上传时间URL
(3)相册表编号账户url上传时间
(4)日志表编号账户日志名发表时间发表内容私密设置(说说同样)发表的类型(跟说说区分)
(5)留言表编号账户留言人留言时间留言内容发表的类型
(6)评论表编号对应评论文章的编号评论的账户评论人类型(属于日志、说说、留言)评论时间内容
(7)访问记录表编号(主键)账户访问账户访问时间
(8)好友表编号(主键)添加人被添加人状态特征
4.2数据库逻辑设计
4.3数据连接
目前流行的数据库连接技术主要有:
JDBC-ODBC桥、JDBC和数据连接池技术。
该系统采用数据连接池技术,使用连接池的优点主要体现在两个方面:
对数据库的连接统一进行配置、管理、监控,以及对数据库连接池的参数进行优化调整,同时对应用程序中没有关闭或其他原因造成没有关闭的数据库连接由连接池统一进行管理。
便于程序的移植和后端数据库的切换,因为在应用中通过统一的JNDI获得数据库的连接,而具体连接的是哪一台机器上的数据库与程序无关。
数据库连接池技术的思想非常简单,将数据库连接作为对象存储在一个Vector对象中,一旦数据库连接建立后,不同的数据库访问请求就可以共享这些连接。
这样,通过复用这些已经建立的数据库连接,可以克服上述缺点,极大地节省系统资源和时间。
数据库连接池的主要操作如下:
(1)建立数据库连接池对象(服务器启动)。
(2)按照事先指定的参数创建初始数量的数据库连接(即:
空闲连接数)。
(3)对于一个数据库访问请求,直接从连接池中得到一个连接。
如果数据库连接池对象中没有空闲的连接,且连接数没有达到最大(即:
最大活跃连接数),创建一个新的数据库连接。
(4)存取数据库。
(5)关闭数据库,释放所有数据库连接(此时的关闭数据库连接,并非真正关闭,而是将其放入空闲队列中。
如实际空闲连接数大于初始空闲连接数则释放连接)。
(6)释放数据库连接池对象(服务器停止、维护期间,释放数据库连接池对象,并释放所有连接)。
第五章详细设计与系统实现
5.1主要部分的具体实现
由于该系统采用的是MVC模式,本系统主要分为四个文件夹,其中connection文件夹放着连接数据库的文件,而dao是存放的是跟底层数据库的操作类,dto是封装的javabean类,而servlet则是存放的是该系统的中央控制器,用来接收用户的所有请求,并且相应用户的请求。
数据库连接类ConnectionUtils.java,是用来连接数据库的文件,该文件的具体代码如下:
packagecom.softeem.qqsystem.connection;
publicclassConnectionUtils{
privatestaticStringUSER="
root"
;
//连接数据库的用户
privatestaticStringPASSWORD="
admin"
//密码
priv