博客网站的设计报告.docx
《博客网站的设计报告.docx》由会员分享,可在线阅读,更多相关《博客网站的设计报告.docx(20页珍藏版)》请在冰点文库上搜索。
博客网站的设计报告
成绩
第一章绪论
1.1课题的提出原因及意义
越来越多的网络用户希望能够在网络平台上更多地展现自己的个性,更方便地与人互动交流,在传统的WEB1.0时代,无论是论坛、社区还是个人网站,都试图在这些方面进行努力,随着WEB2.0时代的到来,一个新的概念出现了----博客。
随着计算机网络的飞速发展,博客已经成为写网络日志必不可少的一种工具,也是一种简单有效的提供网络用户之间进行在线交流的网络平台,通过其可以结交更多的朋友,表达更多的想法,它随时可以发布日志,方便快捷。
个人博客的发展,也已经成为广告商业务拓展的重要领域。
本实验研究了一种基于数据关联规则的个人博客网站。
其开发主要包括后台数据库的建立、后台管理以及前台页面的Web设计。
系统使用Microsoft公司以C#为核心语言的ASP.NET开发工具,再结合SQLServer2005建立数据连接关系。
利用其提供的各种组件,在短时间内建立数据库,对数据库进行分析与建立ASP.NET页面,不断改进,直到功能基本实现的可行系统。
本文的研究在一定程度上借鉴了互联网上博客的发展经验成果,系统的最终目的是通过为博客提供优质的互动交流平台,提高网站的知名度和访问量,从而获得为企业提供更多的产品介绍及发展的机会,提升自己的网络价值。
本实验报告主要介绍了本课题的开发背景、完成的功能和开发过程,并着重说明了开发设计的思想、技术难点和解决方案。
1.2博客网站简介
在Internet飞速发展的今天,互联网成为人们快速获取、发布和传递信息的重要渠道,它在人们政治、经济、生活等各个方面发挥着重要的作用。
Internet上发布信息主要是通过网站来实现的,获取信息也是要在Internet中按照一定的检索方式将所需要的信息从网站上下载下来。
因此网站建设在Internet应用上的地位显而易见,它已成为政府、企事业单位信息化建设中的重要组成部分,从而倍受人们的重视。
根据个人喜好开发了博客网站。
个人博客是当今网络的热点,个人博客技术的出现使得每个人可以零成本、零维护地创建自己的网络媒体,Blog站点所形成的网状结构促成了不同于以往社区的Blog文化,Blog技术缔造了“博客”文化。
1.3博客需求问题分析
对课题所研究的问题不是很明确,如其应用范围,用户群体等。
通过老师的讲解及指导和查相关资料得以解决。
对于信息的安全性合法性的控制,原设为普通用户发布文章成功后,管理员后期发现非法的信息就可以撤除。
普通用户发布文章后也可以对自己的文章进行编辑、删除等操作,而其他人只可以查看该文章,不具有对文章的修改,删除权利。
1.3博客代码实现问题
通过业务层的对象类调用数据库的存储过程,此过程中,因编程规范及其他各种语法问题出现了很多错误,通过查阅资料学习得以解决。
第二章系统分析
本课题为实现更加实用的网站,对网站做了详细的系统分析。
包括系统的需求分析、对开发用到的关键技术的介绍以及系统的可行性分析
●普通用户
⏹浏览文章
⏹发表留言、评论
2.1采用的关键技术介绍
2.1.1ASP.NET简介
ASP.NET是一个Web开发平台,提供了构建企业级应用所需的服务、编程模型和软件基础结构。
虽然ASP.NET的语法基本上与其前辈ASP(ActiveServerPage)兼容,但是ASP.NET是一个全新的编程框架,旨在用于快速开发Web应用程序。
作为Microsoft.NET平台的一部分,ASP.NET提供了一种基于组件的、可扩展的且易于使用的方法,用于购建、部署和运行供所有在浏览器或移动设备中使用的Web应用。
同ASP和其他Web开发环境一样,ASP.NET也是建立在HTTP协议之上的,它利用HTTP命令和策略进行双向的、浏览器到服务器的通信和协作。
真正使ASP.NET有别于其他Web开发技术的是它提供的抽象编程模型,即Web窗体模型。
此外,整个ASP.NET平台是Microsoft.NETFramework的一部分。
ASP.NET应用是一些已编译的代码部件,由一些可重用且可扩展的组件组成,可以用第一类语言(包括、C#、MicrosoftVisualBasic.NET、MicrosoftJscript.NET和J#)创建,并且可以访问.NETFramework中整个类的层次结构。
2.1.2MySQL数据库简介
MySQL是一种开放源代码的关系型数据库管理系统(RDBMS),MySQL数据库系统使用最常用的数据库管理语言--结构化查询语言(SQL)进行数据库管理。
由于MySQL是开放源代码的,因此任何人都可以在GeneralPublicLicense的许可下下载并根据个性化的需要对其进行修改。
MySQL因为其速度、可靠性和适应性而备受关注。
大多数人都认为在不需要事务化处理的情况下,MySQL是管理内容最好的选择。
MySQL这个名字,起源不是很明确。
一个比较有影响的说法是,基本指南和大量的库和工具带有前缀“my”已经有10年以上,而且不管怎样,MySQLAB创始人之一的MontyWidenius的女儿也叫My。
这两个到底是哪一个给出了MySQL这个名字至今依然是个迷,包括开发者在内也不知道。
MySQL的海豚标志的名字叫“sakila”,它是由MySQLAB的创始人从用户在“海豚命名”的竞赛中建议的大量的名字表中选出的。
获胜的名字是由来自非洲斯威士兰的开源软件开发者AmbroseTwebaze提供。
根据Ambrose所说,Sakila来自一种叫SiSwati的斯威士兰方言,也是在Ambrose的家乡乌干达附近的坦桑尼亚的Arusha的一个小镇的名字。
MySQL,虽然功能未必很强大,但因为它的开源、广泛传播,导致很多人都了解到这个数据库。
它的历史也富有传奇性。
2.2可行性分析
采用asp技术进行开发,Asp技术相对于传统的html技术有着绝对的优势,支持数据库的读取大大减化了程序员的代码量,对程序员开发WEB应用程序提供了完备的技术支持。
也使得开发出来的WEB应用程序具有更好的扩展性,能够运行于不同的操作平台之下。
后台数据库采用MySQL数据库,该数据库是一种开放源代码的关系型数据库管理系统,因此任何人都可以在GeneralPublicLicense的许可下下载并根据个性化的需要对其进行修改。
MySQL因为其速度、可靠性和适应性而备受关注。
大多数人都认为在不需要事务化处理的情况下,MySQL是管理内容最好的选择。
所以本次设计选择MySQL数据库。
2.3操作可行性
网站运行于Windows环境,其用户操作页面友好,设置功能栏便于用户操作。
网站的基本操作如下:
●普通用户
⏹浏览博客文章
⏹发表博客留言
⏹发表对文章的评论
⏹查询博客文章
第三章系统设计概要
3.1系统总体设计
3.1.1运行环境
●操作系统:
WindowsNT/2000/XP/2003
●安装Access2003
●安装VisualStudio.NET2005
3.1.2系统功能模块
3.2数据库结构的设计
博客系统的数据库功能主要体现在对各种信息的提供、保存、更新和查询操作上,包括文章信息、文章目录信息和评论信息,各个部分的数据内容又有内在联系。
针对该系统的数据特点,可以总结如下的需求:
1)文章信息记录作者发表的日志信息。
2)文章目录信息记录了文章所在的目录分类。
3)评论信息对应某个文章浏览者发表的评论。
经过上述需求总结,得出如下数据项和数据结构:
1)文章信息,包括数据项有:
文章内容、标题等。
2)文章目录信息,包括数据项有:
目录名称、目录描述等。
评论信息,包括数据项有:
评论编号、文章编号、评论内容等。
3.3数据库逻辑结构的设计
在博客系统中,首先要创建系统数据库,然后在数据库中创建需要的表和字段。
数据库命名为Blog,在这个数据库中管理系统中要建立5个表,分别是,用户信息表(dbo.Users),文章信息表(dbo.article),分类信息表(dbo.type),评论信息表(ment).博客表(dbo.blog)。
(1)用户信息表(Users)记录了用户的账号和密码,如下图所示:
(2)文章信息表(dbo.article)记录了文章的标题,内容,发表时间,发表人等信息,如下图所示
(3)分类信息表(dbo.type),记录了文章的分类信息,如下图所示:
(4)评论信息表(ment),记录了其他用户对于该文章的评论内容,评论时间,评论人等信息,如下图所示:
(5)博客表(dbo.blog),如下图所示:
第四章系统的展示
4.1系统开发环境
●系统:
MicrosoftWindows8.1
●编程环境:
MicrosoftVisualStudio2013
●开发语言:
C#
●数据库:
MySQL2008
4.2系统的页面设计
4.2.1登陆页面:
4.2.2首页的设计:
4.2.3文章内容显示页面:
4.2.4留言显示部分:
4.2.5文章内容编辑页面:
4.2.6博客注册页面
4.3系统部署
4.3.1数据库设置
(1)附加数据库文件
本课题的网站根目录下(DB\blog)有数据库文件,运行前将.mdf文件附加上即可
(2)创建登陆用户
用户在页面注册进行注册即可。
4.3.2服务器端运行设置步骤
(1)将文件目录复制到硬盘任意位置。
(2)用MySQL数据库附加数据库文件。
(3)用VisualStudio20013打开博客网站,按Ctrl+F5查看运行。
第五章博客设计的部分源码展示
5.1主页代码:
usingSystem;
usingSystem.Collections.Generic;
usingSystem.Linq;
usingSystem.Text;
usingSystem.Data;
usingSystem.Text.RegularExpressions;
usingSystem.Data.SqlClient;
namespaceBLL
{
publicclassindex
{
DAL.DBdb=newDAL.DB();
publicModel.articleartc;
publicDataSetdsuser()
{
stringsql="select*fromarticlewhere"+artc.Auserid;
returndb.FillDataset(sql);
}
publicDataSetdsall()
{
stringsql="select*fromarticle";
returndb.FillDataset(sql);
}
publicDataSetdstype()
{
stringsql="select*fromarticlewhereAtid="+artc.Atid;
returndb.FillDataset(sql);
}
publicstringUid()
{
stringsql="select*fromarticlewhereAid="+artc.Aid;
SqlDataReaderread=db.ExceRead(sql);
returndb.ExceString(read,"Auserid");
}
publicbooldelete()
{
stringsql="deletefromarticlewhereAid="+artc.Aid;
returndb.ExceSql(sql);
}
publicSqlDataReaderDataReader()
{
stringsql="select*fromarticlewhereAid='"+artc.Aid+"'";
returndb.ExceRead(sql);
}
#region截取字符串
///名称:
FixLengthString
///功能:
截取指定长度的字符串
///源文本
///截取的长度
///按长度截取后的字符串
///
publicstaticstringFixLengthString(stringoText,intlength)
{
stringreturnString=oText.Length>length?
oText.Substring(0,length):
oText;
returnreturnString;
}
#endregion
#region去掉html标记
publicstaticstringNoHTML(stringHtmlstring)
{
//Regex.Replace从输入字符串中的第一个字符开始,用指定的替换字符串替换由指定的正则表达式定义的模式的所有匹配项。
可指定选项来修改匹配的行为。
RegexhtmlReg=newRegex(@"<[^>]+>",RegexOptions.Compiled|RegexOptions.IgnoreCase);
RegexhtmlSpaceReg=newRegex("\\ \\;",RegexOptions.Compiled|RegexOptions.IgnoreCase);
RegexspaceReg=newRegex("\\s{2,}|\\\\;",RegexOptions.Compiled|RegexOptions.IgnoreCase);
RegexstyleReg=newRegex(@"",RegexOptions.Compiled|RegexOptions.IgnoreCase);
//删除脚本
RegexscriptReg=newRegex(@"",RegexOptions.Compiled|RegexOptions.IgnoreCase);
Htmlstring=styleReg.Replace(Htmlstring,string.Empty);
Htmlstring=scriptReg.Replace(Htmlstring,string.Empty);
Htmlstring=htmlReg.Replace(Htmlstring,string.Empty);
Htmlstring=htmlSpaceReg.Replace(Htmlstring,"");
Htmlstring=spaceReg.Replace(Htmlstring,"");
returnHtmlstring.Trim();
}
#endregion
}
}
5.2博客登陆以及注册代码:
namespaceBLL
{
publicclassRegister
{
publicModel.UsersUsers;
publicModel.CommonalityCommonality;
DAL.DBdb=newDAL.DB();
#region检查用户名是否存在
///
///检查用户名是否存在
///
///
publicintCheckName()
{
stringsql="selectcount(*)fromUserswhereUname='"+Commonality.CheckName+"'";
DataTabledt=db.reDt(sql);
if(dt.Rows[0][0].ToString()!
="0")
{
return-1;
}
else
{
return2;
}
}
#endregion
#regionMD5加密
///
///MD5加密
///
///
///
publicstringGetMD5(stringstrPwd)
{
stringpwd="";
//实例化一个md5对象
MD5md5=MD5.Create();
//加密后是一个字节类型的数组,这里要注意编码UTF8/Unicode等的选择
byte[]s=md5.ComputeHash(Encoding.UTF8.GetBytes(strPwd));
//翻转生成的MD5码
s.Reverse();
//通过使用循环,将字节类型的数组转换为字符串,此字符串是常规字符格式化所得
//只取MD5码的一部分,这样恶意访问者无法知道取的是哪几位
for(inti=3;i{
//将得到的字符串使用十六进制类型格式。
格式后的字符是小写的字母,如果使用大写(X)则格式后的字符是大写字符
//进一步对生成的MD5码做一些改造
pwd=pwd+(s[i]<198?
s[i]+28:
s[i]).ToString("X");
}
returnpwd;
}
#endregion
publicboolInsertUser()
{
stringsql="INSERTINTO[blog].[dbo].[Users]([Uname],[Upwd],[Uimg])VALUES('"+Users.Uname+"','"+Users.Upwd+"','"+Users.Uimg+"')";
returndb.ExceSql(sql);
}
publicSqlDataReaderDataReader()
{
stringsql="select*fromUserswhereUname='"+Users.Uname+"'andUpwd='"+Users.Upwd+"'";
returndb.ExceRead(sql);
}
//读取用户ID
publicStringUid()
{
stringsql="select*fromUserswhereUname='"+Users.Uname+"'";
SqlDataReaderread=db.ExceRead(sql);
returndb.ExceString(read,"Uid");
}
//读取用户图片
publicStringUimg()
{
stringsql="select*fromUserswhereUid='"+Users.Uid+"'";
SqlDataReaderread=db.ExceRead(sql);
returndb.ExceString(read,"Uimg");
}
}
}
5.3文章内容显示代码:
publicclassArticle
{
DAL.DBdb=newDAL.DB();
publicModel.articleatcl=newModel.article();
publicMmentcomment=newMment();
publicModel.UsersUsers=newModel.Users();
publicbooladdArticlenoimg()
{
stringsql="INSERTINTO[blog].[dbo].[article]([Aname],[Adetail],[Atime],[Auserid],[Atid])VALUES('"+atcl.Aname+"','"+atcl.Adetail+"','"+atcl.Atime+"','"+atcl.Auserid+"','"+atcl.Atid+"')";
returndb.ExceSql(sql);
}
publicbooladdArticle()
{
stringsql="INSERTINTO[blog].[dbo].[article]([Aname],[Adetail],[Aimg],[Atime],[Auserid],[Atid])VALUES('"+atcl.Aname+"','"+atcl.Adetail+"','"+atcl.Aimg+"','"+atcl.Atime+"','"+atcl.Auserid+"','"+atcl.Atid+"')";
returndb.ExceSql(sql);
}
publicbooleditArticle()
{
stringsql="UPDATE[blog].[dbo].[article]SET[Aname]='"+atcl.Aname+"',[Adetail]='"+atcl.Adetail+"',[Aimg]='"+atcl.Aimg+"',[Atime]='"+atcl.Atime+"',[Atid]='"+atcl.Atid+"'WHERE[Aid]="+atcl.Aid;
returndb.ExceSql(sql);
}
publicbooleditArticlenoimg()
{
stringsql="UPDATE[blog].[dbo].[article]SET[Aname]='"+atcl.Aname+"',[Adetail]='"+atcl.Adetail+"',[Atime]='"+atcl.Atime+"',[Atid]='"+atcl.Atid+"'WHERE[Aid]="+atcl.Aid;
returndb.ExceSql(sql);
}
publicDataSetArticlDetail()
{
stringsql="select*fromarticlewhereAid="+a