BBS管理系统.docx
- 文档编号:29347199
- 上传时间:2023-07-22
- 格式:DOCX
- 页数:22
- 大小:176.81KB
BBS管理系统.docx
《BBS管理系统.docx》由会员分享,可在线阅读,更多相关《BBS管理系统.docx(22页珍藏版)》请在冰豆网上搜索。
BBS管理系统
无忧无虑毕设网-大学生毕业设计站,免费毕业设计论文,无忧无虑毕设网大学生毕业设计,出售各类毕业设计源码,论文,程序源码,网站源码,免费视频教程,我们将竭诚为您服务!
BBS管理系统
目录
1.概述:
1
2.开发工具和数据库理论基础:
1
2.1、ASP.NET1
2.1.1什么是ASP.NET1
2.1.3使用ADO.NET操纵数据库2
3.BBS论坛管理系统5
3.1、需求分析5
3.2、系统设计6
3.2.1用例图6
3.2.2顺序图6
3.2.3加载流程7
3.3、系统结构8
3.3.1WEBServer分层结构8
3.3.2系统结构8
3.4、部分模块及界面设计9
3.4.1主界面9
3.4.1登录模块与注册模块10
3.5、数据库后台设计13
3.5.1部分数据表设计13
5.总结:
14
1.概述:
论坛,也被大家称为BBS,是Internet上常见的用于信息服务的WEB系统,它主要是为了用户提供相互沟通的平台。
2.开发工具和数据库理论基础:
2.1、ASP.NET
2.1.1什么是ASP.NET
ASP.NET是建立在公共语言运行库上的编程框架,可用于在服务器上生成功能强大的Web应用程序。
与以前的Web开发模型相比,ASP.NET提供了数个重要的优点:
●增强的性能。
ASP.NET是在服务器上运行的编译好的公共语言运行库代码。
与被解释的前辈不同,ASP.NET可利用早期绑定、实时编译、本机优化和盒外缓存服务。
这相当于在编写代码行之前便显著提高了性能。
●世界级的工具支持。
ASP.NET框架补充了VisualStudio集成开发环境中的大量工具箱和设计器。
WYSIWYG编辑、拖放服务器控件和自动部署只是这个强大的工具所提供功能中的少数几种。
●威力和灵活性。
由于ASP.NET基于公共语言运行库,因此Web应用程序开发人员可以利用整个平台的威力和灵活性。
.NET框架类库、消息处理和数据访问解决方案都可从Web无缝访问。
ASP.NET也与语言无关,所以可以选择最适合应用程序的语言,或跨多种语言分割应用程序。
另外,公共语言运行库的交互性保证在迁移到ASP.NET时保留基于COM的开发中的现有投资。
●简易性。
ASP.NET使执行常见任务变得容易,从简单的窗体提交和客户端身份验证到部署和站点配置。
例如,ASP.NET页框架使您可以生成将应用程序逻辑与表示代码清楚分开的用户界面,和在类似VisualBasic的简单窗体处理模型中处理事件。
另外,公共语言运行库利用托管代码服务(如自动引用计数和垃圾回收)简化了开发。
●可管理性。
ASP.NET采用基于文本的分层配置系统,简化了将设置应用于服务器环境和Web应用程序。
由于配置信息是以纯文本形式存储的,因此可以在没有本地管理工具帮助的情况下应用新设置。
此“零本地管理”哲学也扩展到了ASP.NET框架应用程序的部署。
只需将必要的文件复制到服务器,即可将ASP.NET框架应用程序部署到服务器。
不需要重新启动服务器,即使是在部署或替换运行的编译代码时。
●可缩放性和可用性。
ASP.NET在设计时考虑了可缩放性,增加了专门用于在聚集环境和多处理器环境中提高性能的功能。
另外,进程受到ASP.NET运行库的密切监视和管理,以便当进程行为不正常(泄漏、死锁)时,可就地创建新进程,以帮助保持应用程序始终可用于处理请求。
●自定义性和扩展性。
ASP.NET随附了一个设计周到的结构,它使开发人员可以在适当的级别“插入”代码。
实际上,可以用自己编写的自定义组件扩展或替换ASP.NET运行库的任何子组件。
实现自定义身份验证或状态服务一直没有变得更容易。
●安全性。
借助内置的Windows身份验证和基于每个应用程序的配置,可以保证应用程序是安全的。
2.1.2数据绑定概述和语法
ASP.NET引入了新的声明性数据绑定语法。
这种非常灵活的语法允许开发人员不仅可以绑定到数据源,而且可以绑定到简单属性、集合、表达式甚至是从方法调用返回的结果。
下表显示了新语法的一些示例。
简单属性
Customer:
<%#custID%>
集合
Orders:
ListBoxid=”List1”datasource=’<%#myArray%>’runat=”server”> 表达式 Contact: <%#(customer.FirstName+““+customer.LastName)%> 方法结果 OutstandingBalance: <%#GetBalance(custID)%> 尽管该语法看起来与ASP的Response.Write快捷方式<%=%>相似,但其行为完全不同。 ASPResponse.Write快捷方式语法在处理页时计算,而ASP.NET数据绑定语法仅在调用DataBind方法时计算。 DataBind是页和所有服务器控件的方法。 当在父控件上调用DataBind时,它级联到该控件的所有子控件。 例如,DataList1.DataBind()将因此对DataList模板中的每一控件调用DataBind方法。 在页上调用DataBind—Page.DataBind()或只是DataBind()—会导致计算页上的所有数据绑定表达式。 通常从Page_Load事件调用DataBind,如果绑定表达式在运行时计算为预期的数据类型,则可以在.aspx页的声明节中的几乎任何位置使用绑定表达式。 上面的简单属性、表达式和方法示例在计算时向用户显示文本。 这些情况下,数据绑定表达式必须计算为String类型的值。 在集合示例中,数据绑定表达式计算为ListBox的DataSource属性的有效类型值。 您可能会发现有必要转换绑定表达式中的类型值以产生所需的结果。 2.1.3使用ADO.NET操纵数据库 ADO.NET是一组向.NET程序员公开数据访问服务的类。 ADO.NET为创建分布式数据共享应用程序提供了一组丰富的组件。 它提供了对关系数据、XML和应用程序数据的访问,因此是.NETFramework中不可缺少的一部分。 ADO.NET支持多种开发需求,包括创建由应用程序、工具、语言或Internet浏览器使用的前端数据库客户端和中间层业务对象。 ADO.NET提供了Connection来连接数据库,同时也提供了Command对象来查询数据库。 同Connection对象一样,Command也有两种: OleDbCommand和SqlCommand.其区别同Connection对象。 要操纵数据库,必须先使用Connection来连接到数据库,再创建一个Command来查询。 有几种创建方式,例: SqlCommandcmd; stringstrCon=”server=localhost;database=Northwind;Trusted_Connection=Yes;”; stringstrqry=”select*fromCategories”; SqlConnectioncon=newSqlConnection(strCon); con.Open(); cmd=con.CreateCommand();//这里使用用Connection对象的CreateCommand方法来创建一个Command对象。 cmd.CommandText=strqry; cmd=newSqlCommand();? ? //直接使用new关键字来创建 cmd.CommandText=strqry; cmd.Connection=con;? ? //设置与数据库的连接 cmd=newSqlCommand(strqry,con); //直接在new的时候带两个参数来创建 执行方式: (主要有这么几种, cmd.ExecuteReader();cmd.ExecuteNonQuery();cmd.ExecuteScalar();cmd.ExecuteXmlReader();) 1,ExecuteReader();返回一个SqlDataReader对象或OleDbDataReader对象,这个看你的程序的需要去 做。 可以通过这个对象来检查查询结果,它提供了“游水”式的执行方式,即从结果中读取一行之后,移动到另一行,则前一行就无法再用。 有一点要注意的是执行之后,要等到手动去调用Read()方法之后,DataReader对象才会移动到结果集的第一行,同时此方法也返回一个Bool值,表明下一行是否可用,返回True则可用,返回False则到达结果集末尾。 使用DataReader可以提高执行效率,有两种方式可以提高代码的性能: 一种是基于序号的查找,一个是使用适当的Get方法来查找。 因为查询出来的结果一般都不会改变,除非再次改动查询语句,因此可以通过定位列的位置来查找记录。 用这种方法有一个问题,就是可能知道一列的名称而不知道其所在的位置,这个问题的解决方案是通过调用DataReader对象的GetOrdinal()方法,此方法接收一个列名并返回此列名所在的列号。 例: intid=reader.GetOrdinal(“CategoryName”); while(reader.Read()) { Response.Write(reader[id]); reader.Close(); 至于第二种方式很直观,例: while(reader.Read()) { ? Response.Write(reader.GetInt32(0).ToString()+”“+reader.GetString (1).ToString()+””); } DataReader的GetInt32()和GetString()通过接收一个列号来返回一个列的值,这两种是最常用的,其中 还有很多其它的类型。 (注: DataReader对象在调用Close()方法即关闭与数据库的连接,如果在没有关闭之前又重新打开第二个连接,则会产生一条异常信息) 2.,ExecuteNonQuery()? 这个方法并不返回一个DataReader对象,而是返回一个int类型的值,即在执行之后在数据库中所影响的行数。 例: intaffectrows=cmd.ExecuteNonQuery(); Response.Write(affectrows+”条记录受影响”); 3,ExecuteScalar()这个方法不接受任何参数,仅仅返回查询结果集中的第一行第一列,而忽略了其它的行和列,而且返回的是一个object类型,在使用之前必须先将它强制转换为所需类型。 如果返回的仅仅是一个单独的数据元,则可以使用此方法来提高代码的性能。 例: stringstrCon=”server=localhost;database=Northwind;Trusted_Connection=Yes;”; stringstrqry=”selectcount(*)fromCategories”; SqlConnectioncon=newSqlConnection(strCon); con.Open(); SqlCommandcmd=con.CreateCommand(); inti=Convert.ToInt32(cmd.ExecuteScalar()); //必须强制转换 4,ExecuteXmlReader()此方法用于XML操作,返回一个XmlReader对象,由于系统默认没有引用System.Xml名空间,因此在使用前必须前引入。 例: stringstrCon=”server=localhost;database=Northwind;Trusted_Connection=Yes;”; SqlConnectioncon=newSqlConnection(strCon); con.Open(); SqlCommandcmd=newSqlCommand(“select*fromCategoriesFORXMLAUTO,XMLDATA”,con); XmlReaderxr=cmd.ExecuteXmlReader(); Response.Write(xr.AttributeCount); //这里获取当前节点上的属性个数? xr.Close(); 执行完毕之后,照样要显式地调用Close()方法,否则会抛出异常。 使用参数化的查询 先看一段SQL语句: selectCategoryID,DescriptionfromCategorieswhereCategoryID=? 其中的问号就是一个参数。 但在使用的时候必须是带有@前缀的命名参数,因为.NET数据提供程序不支持这个通用的参数标记“? ”.使用参数化的查询可以大大地简化编程,而且执行效率也比直接查询字符串要高,也更方便,很多情况下都需要更改查询字符串,这种方式就提供了方便,只需更改参数的值即可。 例: stringstrCon=”server=localhost;database=Northwind;Trusted_Connection=Yes;”; SqlConnectioncon=newSqlConnection(strCon); con.Open(); stringstrqry=”select*fromCategorieswhereCategoryID=@CategoryID”; //带参数的查询 SqlCommandcmd=newSqlCommand(strqry,con); cmd.Parameters.Add(“@CategoryID”,SqlDbType.Int,4); //给参数赋于同数据库中相同的类型 cmd.Parameters[”@CategoryID”].Value=”3”; //给参数赋值,可灵活改变 SqlDataReaderr=cmd.ExecuteReader(); while(r.Read()) { Response.Write(r.GetString (2)+””); //取出指定参数列的值 } con.Close(); //切记关闭 使用存储过程进行查询 先看段存储过程的形式: createprocedurecateproc(@CategoryIDint(4))asselect*fromCategories whereCategoryID=@CategoryID 这个是数据库中的存储过程实现方式,要在程序中调用存储过程,一种方法是使用Command对象的 CommandType属性来实现。 CommandType有三个枚举值: Text,TableDirect,StoredProcedure。 只需将CommandType属性设为第三个值即可实现调用存储过程。 例: stringstrCon=”server=localhost;database=Northwind;Trusted_Connection=Yes;”; SqlConnectioncon=newSqlConnection(strCon); con.Open(); SqlCommandcmd=con.CreateCommand(); cmd.CommandText=”cateproc”; cmd.CommandType=CommandType.StoredProcedure; cmd.Parameters.Add(“@CategoryID”,SqlDbType.Int,4); cmd.Parameters[”CategoryID”].Value=”2”; SqlDataReaderr=cmd.ExecuteReader(); while(r.Read()) { Response.Write(r.GetString (2)+””); } con.Close(); 其实在程序中实现调用存储过程的方式跟参数化查询很类似,有点旧鞋翻新的味道。 cmd.CommandType=CommandType.StoredProcedure;这种方式有个缺点,就是当要查询的表,视图或存储过程的名称中有特殊的字符(如空格)的话,则将无法识别。 因此还有一种方式就是: cmd.CommandText=”{Callcateproc(? )}”; //这里是调用存储过程,问号为参数 cmd.CommandType=CommandType.Text; //关键是这里。 设置命令执行超时 命令超时是指Command对象在等待结果的时间,(默认为30秒)如果在30秒内没执行查询,则Command抛出一个异常。 也可以自己进行设置。 例: cmd.CommandTimeout=60; 取消执行查询 有时因某种原因,需要临时取消命令的执行,可调用Command对象的Cancel()方法来退出执行,如果在未执行查询之前,Cancel()将不做任何事。 3.BBS论坛管理系统 3.1、需求分析 用户使用论坛的流程一般是,首先注册登录进入论坛,然后选择某个板块,就某个话题(主题)展开讨论,可以发表新的话题,也可以回复其他话题;管理员则可以创建新的板块,对论坛进行管理。 (1)用户可以进入论坛发表帖子。 (2)管理员可以创建新的模块。 本论坛的使用的结构如图3-1所示。 图3-1结构图 3.2、系统设计 3.2.1用例图 本论坛系统有两种用户: 浏览者和管理员。 他们具有不同的权限。 如图3-2用例图所示 图3-2用例图 上面的用例图只是显示了系统中两类用户的权限。 3.2.2顺序图 在添加板块的过程中,管理员首先输入必要的信息,例如板块的名字,概述等,最后提交给数据库,由数据库将内容加入数据库中,而用户发表帖子的过程也是相似的,唯一不同的是,系统需要获得用户所回帖的ID,然后再将该帖子内容加入数据库中。 图3-3是用户发贴和管理员添加板块的顺序图。 图3-3顺序图。 3.2.3加载流程 图五: .加载功能模块的流程 3.3、系统结构 3.3.1WEBServer分层结构 图3-4Net中标准的BS分层式结构 该系统将采用ASP.NetWeb应用程序的典型系统架构模式: 数据库---数据访问层---业务逻辑层--页面表示层。 数据库是应用系统的最低层,它保存系统的所有数据。 本系统使用SQLServer2005Express。 数据访问层封装访问数据库的各种操作,如连接数据库,操作数据库,数据转换等。 业务逻辑层与应用系统的业务逻辑相关联,它使用数据访问层提供的服务,同时也为上层提供服务。 业务逻辑层通过数据访问层实现访问数据库的功能,同时为上层提供访问数据库的接口或函数等服务。 页面表示层实现应用系统的具体功能,一般由WEB页面,控件,组件组成。 3.3.2系统结构 图3-5系统结构图。 3.4、部分模块及界面设计 3.4.1主界面 (1)Default.aspx页面是论坛的主页面,主要显示论坛里所有的板块。 如下图 图3-6主界面 (2)加载页面代码如下: protectedvoidPage_Load(objectsender,EventArgse) { if(! IsPostBack)bindData(); } privatevoidbindData() { stringcon_str=System.Configuration.ConfigurationSettings.AppSettings["ConnectionString"]; SqlConnectionconn=null; try { conn=newSqlConnection(con_str); SqlCommandcommand=newSqlCommand("SELECTbcId,bcTitle,bcDesc,bcOrder,bcLastUpdate,bcLockFROMforumTopicsORDERBYbcOrder,bcLastUpdateDESC",conn); SqlDataAdapteradapter=newSqlDataAdapter(); adapter.SelectCommand=command; DataSetds=newDataSet(); adapter.Fill(ds); this.dotForumDisplay.DataSource=ds; this.dotForumDisplay.DataBind(); } catch(SqlExceptionex) { } finally { } 3.4.1登录模块与注册模块 (1)Login.aspx页面是论坛的登录页面。 如下图 (2)Region.aspx页面是论坛的新用户注册页面。 如下图 (3)登录需求流程图 (2)登录页面代码如下: publicpartialclassLogin: System.Web.UI.Page { //定义连接字符串 privatestaticstringstrConnect=System.Configuration.ConfigurationManager.AppSettings["ConnectionString"]; //页面初始化 protectedvoidPage_Load(objectsender,EventArgse) { } //点击登录事件 protectedvoidbtnLogin_Click(objectsender,EventArgse) { //数据库连接 SqlConnectionobjConnection=newSqlConnection(strConnect); //数据库命令 SqlCommandobjCommand=newSqlCommand("",objConnection); //设置Sql语句 objCommand.CommandText= "SELECTUSERID,NICKNAME,USERROLEFROMUSERSWHEREUSERNAME=@NAMEANDUSERPASSWORD=@PASSWORD"; //设置Sql语句参数 objCommand.Parameters.Add("NAME",SqlDbType.VarChar); objCommand.Parameters.Add("PASSWORD",SqlDbType.VarChar); //Sql语句参数赋值 objCommand.Parameters["NAME"].Value=tbxName.Text.Trim(); objCommand.Parameters["PASSWORD"].Value=tbxPassword.Text.Trim(); try { //打开数据库连接 if(objConnection.State==ConnectionState.Closed)objConnection.Op
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- BBS 管理 系统