网上贴吧系统

网上贴吧系统[java毕业论文下载]

摘  要

 

20世纪末,随着计算机科学的发展,数据库技术在Internet中的应用越来越广泛,为广大网络用户提供了更加周到和人性化的服务。个性化已逐渐成为当今Web应用的潮流。本文研究了一种基于数据关联规则网上贴吧系统,贴吧也称为BBS,BBS是BULLETIN BOARD SYSTEM的缩写,意即电子公告板,一种在INTERNET上常用的用于信息服务的web系统,他的主要服务是用来帮助浏览者相互沟通,吸引用户、服务用户的。

 

Bbs起源于20世纪80年代初。最初只是用于公布公告信息和讨论问题的在线交流平台;后来随着网络的普及,贴吧的功能越来越丰富。受到广大网民的欢迎。因此商业网站对贴吧重视起来,纷纷在自己的网站上开辟贴吧,作为与网民交流的园地,同时在线技术和在线服务也在贴吧开展起来。
本文中所做的主要工作如下:

 

 (1)介绍了个性化页面的背景及Win2000+IIS+ASP系统的一般原理;
(2)阐述整个个性化页面的系统结构及工作原理;分析了系统实现中的特殊性、难点和重点。

(3)设计实现用户管理、帖子管理、版面管理、数据库管理、浏览和查找、短消息功能等ASP页面 。

(4)分析并解决实现中的若干技术问题。

(5)建立完整的网上贴吧,进行测试并分析结果。

 

【关键词】网上贴吧、ASP、ACCESS

 

第一章、引 言

Internet是目前世界上最大的计算机互联网络,它遍布全球,将世界各地各种规模的网络连接成一个整体。作为Internet上一种先进的,易于被人们所接受的信息检索手段,World Wide Web(简称WWW)发展十分迅速,成为目前世界上最大的信息资源宝库。据估计,目前Internet上已有上百万个Web站点,其内容范围跨越了教育科研、文化事业、金融、商业、新闻出版、娱乐、体育等各个领域,其用户群十分庞大,因此,建设一个好的Web站点对于一个机构的发展十分重要。近年来,随着网络用户要求的不断提高及计算机科学的迅速发展,特别是数据库技术在Internet中的广泛应用,Web站点向用户提供的服务将越来越丰富,越来越人性化。

我们发现这样一个事实,一个用户在访问一个网站时一般来讲只对该网站的部分内容感性趣,而且这种兴趣会持续一段时间。这点启发了我们,如果能根据用户的喜好为不同的用户显示其个性化的页面,即着重显示该用户感兴趣的内容,将为用户节约大量的检索时间,而且这样的网页显然是更具有吸引力的。一些站点已经在这方面作出了一定的尝试,通常采用的方法是,在用户登陆时为其提供一系列的选项,使用户能够对站点进行一些自主的设置。这样做能够使站点呈现一定程度的个性化,但是对用户来讲,还是比较烦琐,而且在用户了解一个站点前让其对站点进行设置,其结果未免有些粗糙。于是我们构想了这样一种方案,对用户登陆后的动作进行跟踪,分析,发掘用户点击的规律,即用户先后点击的关联规则,这样,在用户点击一个主题(链接)之后,系统能够自动生成一页面,其中包含了该主题下用户经常关注的内容(若干链接),这样便在无须用户作出任何额外工作的情况下实现了为用户量身订做的个性化页面。 

要实现这样的功能,离不开后台数据库的支持。用户验证信息,收集到的用户点击信息,主题层次信息,分析得出的关联规则表等大量的数据都由数据库管理系统管理。本文中数据库服务器端采用了Microsoft Access数据库作为ODBC(Open DataBase Connectivity )数据源,并以先进的ADO(ActiveX Data Objects)技术进行数据库存取等操作,使Web与数据库紧密联系起来。

整个个性化页面生成系统主要由使用Dreamweaver_MX开发的关联规则采掘系统和利用IIS+ASP技术实现的个性化Web页面生成器两部分组成。关联规则采掘系统对数据库中的历史记录进行分析,产生用户关联规则表;页面生成器则负责记录用户行为和根据关联规则表动态生成用户个性化Web页面。二者通过数据库服务器和Web服务器连接。

本文作者主要完成Web服务器端的用户管理、帖子管理、版面管理、数据库管理、浏览和查找、短消息功能等设计、实现与完善以及整个实验网站的组织建立和测试工作。

第二章、ASP技术综述

2.1 ASP的产生

近年来随着Internet技术的飞速发展及用户需求的不断升级,Web页面技术也不断的推陈出新,使得Web站点的功能越来越强大,能够提供的服务种类越来越繁多。从HTML、Client Script 到CGI,从JAVA的诞生到ActiveX, Web页面设计人员不断受到冲击,微软公司在总结了以往技术,重新思考Web页面设计的真正需要后,推出了Active Server Pages (ASP),一种用以取代CGI(Common Gateway Interface,通用网关接口)的技术。简单讲,ASP是位于服务器端的脚本运行环境,通过这种环境,用户可以创建和运行动态的交互式 Web 服务器应用程序,如交互式的动态网页,包括使用 HTML 表单收集和处理信息,上传与下载等等。更重要的是,ASP使用的ActiveX技术基于开放设计环境,用户可以自己定义和制作组件加入其中,使自己的动态网页几乎具有无限的扩充能力,这是传统的Web编写工具所远远不及的地方。使用ASP还有个好处,就在于ASP可利用ADO(Active Data Object,微软的一种新的数据访问模型)方便快捷地访问数据库,从而使得开发基于WWW的应用系统成为可能,这也是本文选择ASP作为开发工具最重要的原因之一。

 

2.2 ASP与IIS

2.2.1 IIS简介

Web服务器是Web应用程序的心脏。IIS(Internet Information Server)是微软推出的Windows NT Option Pack的主要成员,作为Win2000server的扩展,自推出以来已经有了很大发展,其体系结构是当今市场上最受关注的Web服务器之一。新推出的IIS4.0版本增强了系统安全性,具有服务器端脚本开发调试,内容管理和站点分析,崩溃防护,内置JAVA虚拟机及全面支持ASP等强大功能。

2.2.2 IIS与ASP的结合

在过去,客户机/服务器结构的设计与Web的相关技术几乎处于平行线上,两者相互独立并无法作出集成性的设计。现在我们利用IIS+ASP构成三层式Web结构(如图2.1所示)的中间一层,将客户机/服务器结构与Web密切结合,完成前后端两者的集成输出功能,使得Web站点的开发更方便,实现的功能更强大。

利用IIS+ASP技术来集成Web前后端所带来的强大效益可归结为以下几个方面:

1. 减少构建和维护成本  

2. 加快联机过程  

3. 应用软件集中在服务器端开发管理  

4. 前端可使用任何

5. 后端可存取任何数据库 (SQL、Access…..)  

6. 可使用任何脚本语开发 (VBScript、JavaScript、PERL…..)浏览器(IE、Netscape…..)  

2.3 ASP的内部特点

2.3.1 ASP内部6大对象

ASP提供了6个功能强大的内部对象,每个对象具有各自的属性(Property)、方法(Method),有的还拥有数据集合(Collection)与事件(Event),它们共同完成Web中的一些重要工作。这6个对象及其功能描述如表2.1所示。

 

表2.1  ASP 内部6大对象及其功能

对象名称

功能描述

Request

从客户端取得信息

Response

将信息送给客户端

Server

提供一些Web服务器工具

Session

储存在一个Session内的用户信息,该信息仅可被该用户访问

Application

在一个ASP-Application中让不同的客户端共享信息

ObjectContext

配合Microsoft Transaction服务器进行分布式事务处理

 

合理地运用这些对象可以使原本复杂,烦琐的工作变得简捷而条理清晰。

我们可以用以下的语法直接使用这些对象:对象/属性/方法/数据集合

2.3.2 Global 文件

 

每一个以Active Server Pages为基础的应用程序都拥有一个Global.asa文件(ASA后缀名其实是Active Server Application的缩写),它位于每一个应用程序的基点目录之下。当Active Server Pages做下面两个动作时,Server便会去读Global.asa文件:

1.Web Server启动之后,一个应用程序目录中任一个ASP文件被提出第一个HTTP请求(Request)时。

2.不具有任何Session的客户端向Server请求一个ASP文件时。

前面已经提到Application和Session这两个ASP的内部对象。Application对象内的信息供所有正在执行该应用程序的用户分享,它创建于Web Server启动后一个应用程序中任一ASP文件被提出第一个HTTP请求时,结束于Server端停止运行。而Session对象仅属于一位用户,维持一个用户端的信息,其他用户无法访问,它创建于一个不具有Session的用户向Server请求一个ASP文件时,结束于该Session到期(即用户端超过某时间段没有向Server提出要求或刷新Web页面)或Abandon语句的调用。可见,Global.asa文件的调用与Application与Session这两个对象密切相关。事实上我们通常在Global。asa文件中写入以下内容:

1. Application或Session的开始事件(Start-event)。

2. Application或Session的结束事件 (End-event)。

这样,在一个Application或Session对象被创建或结束时,系统会自动完成Global.asa文件中写入的相应事件。值得注意的是,如果一个Application与一个Session同时开始,Active Server Pages会先处理Application的开始事件,而如果一个Application与一个Session同时结束,Active Server Pages则会先处理Session的结束事件。

2.4 利用ADO访问数据库

ADO(ActiveX Data Objects)是一种操作Microsoft所支持的数据库的新技术。在ASP中,ADO可以看作是一个服务器组件(Server Component),更简单点说,是一系列的对象,应用这些功能强大的对象,即可轻松完成对数据库复杂的操作。本文中个性化页面的实现便大量地用到了ADO技术。具体的操作步骤可以归纳为以下几步:

1.创建数据库源名(DSN)

2.创建数据库链接(Connection)

3.创建数据对象

4.操作数据库

5.关闭数据对象和链接

每一步的作法如下:

一、创建数据源名

DSN(Date Source Name)即数据源名称。我们知道,ODBC是一种访问数据库的方法,只要系统中有相应的ODBC驱动程序,任何程序就可以通过ODBC操纵驱动程序的数据库。比如我们系统中有Access的ODBC驱动程序,那么即使我们没有Access软件,也可以在我们的程序中对一个Access的MDB数据库加、删、改记录。而且我们根本不用知道这个数据库是放在哪里的。我们只要写出SQL语句,ODBC驱动程序就会帮我们做一切事情。我们在给ODBC驱动程序传SQL指令时,即是用DSN来告诉它到底操作的是哪一个数据库。如果数据库的平台变了,比如我们改用了SQL Server的数据库,只要其中表的结构没变,我们就不用改写我们的程序,只要重新在系统中配置DSN就行了。由此可见,DSN是应用程序和数据库之间的桥梁。

 

二、创建数据库链接(Connection)

链接用以保持一些关于正在访问的数据的一些状态信息,以及链接者信息。ASP文件中如果要访问数据,必须首先创建与数据库的链接,其语法如下:

set Conn=Server.createObject(“ADODB.CONNECTION”)

这条语句创建了链接对象Conn,接下来:Connstr="Driver={Microsoft Access Driver (*.mdb)};dbq=" & Server.MapPath(db)

conn.Open connstr

这条语句打开链接,用到了DSN,本例为“connstr”。

以上两个步骤缺一不可,因为链接对象的创建与打开是两回事,只有打开了才真正可以使用。

 

三、创建数据对象(Record Set)

ADO中的数据对象通常保存的是查询结果。Record Set是ADO中最复杂的对象,有许多属性和方法。Record Set保存的是一行行的记录,并标有一个当前记录。以下是创建方法:

Set Record Set=Conn.Execute(sqtStr)

这条语句创建并打开了对象Record Set,其中Conn是先前创建的链接对象,sqtStr是一个字串,代表一条标准的SQL语句。例如:

sqtStr=“SELECT * FROM shop_books”  Set Record Set=Conn.Execute(sqtStr)

这条语句执行后,对象Record Set中就保存了表tab1中的所有记录。

 

四、操作数据库

我们通过调用链接对象的Execute方法来将查询结果返回给一个数据对象或进行插入、删除、修改等操作。例如:

 

 sqtStr =“INSERT INTO tab1 VALUES(1,2)”

 Conn.Execute(sqtStr)

/执行插入操作

sqtStr =“Delete from tab1 where a=b”

/执行删除操作

sqtStr =“update tab set a=b,c=d”

/执行修改操作

 

五、关闭数据对象和链接对象

在使用了ADO对象之后要关闭它,因为它使用了一定的服务器资源。通过调用方法close实现关闭,然后再释放它。

Record Set.close

Set Record Set=Nothing

/关闭创建的数据对象

Conn.close

Set Conn=Nothing

/关闭创建的链接对象

2.5 ASP与CGI的比较

CGI(Common Gateway Interface,通用网关接口)也是Internet上一种功能强大的Web页面技术,其工作方式有别于ASP。我们现对二者进行比较。

Active Server Pages开发Web应用程序的特点:

1. 完全嵌入HTML,与HTML、Script语言完美结合。

2. 无须手动编译和链接程序。

3. 面向对象,并可扩展ActiveX Server组件功能。

4. 使用脚本语言(JavaScript、VBScript或PERL)编写。

5. 存取数据库轻松容易(使用ADO组件)。

6. 可使用任何语言编写自己的ActiveX Server组件。

7. 无浏览器兼容问题。

8. 程序代码隐藏,客户端仅能看到ASP输出的HTML文件。

9. 缩短Web开发时间。

相比之下,使用CGI开发Web应用程序具有以下缺点:

1. 不易与HTML文件集成。

2. 须使用其他较复杂的语言来开发CGI程序。

3. 程序开发时间较长。

4. 存取数据库不容易。

5. 每个CGI程序被不同用户执行时都得重新执行一次,并占去Server的一个端口(Port),降低Server效率。

 

可见,ASP在数据库访问、与HTML的集成、提高服务器的效率等诸多方面都优于CGI,更适应Web应用程序开发的需要,因此本文选择了ASP作为个性化页面生成器的开发工具。

 

第三章、网上贴吧系统分析及实现

3.1网上贴吧系统说明

在开始制作之前,要明确贴吧能做些什么事情,,也就是所谓的需求。所以必须把需求做清楚,然后才能进行设计。

其实在贴吧里大家最熟悉的就是用户浏览贴吧已有的内容,针对别人的主题展开讨论,也可以发表自己的观点供大家品评。同时为了防止用户发布一些不健康不合法的内容需要有管理人员来对这些内容进行删除修改,在扩展一点,若用户想在贴吧发布信息,不允许他再来发布非法内容。这样需要管理员对用户和贴吧的内容都要进行管理。

我们要做一个多版面的贴吧。在这里用户可以注册,浏览贴吧版面和帖子,发布自己的帖子,也可以相互联系。管理人员可以设置贴吧的系统参数,管理注册用户和版面。

当用户来到贴吧可以看到版面列表。通过版面可以看到相关的帖子。如果需要进一步的功能,就需要用户注册。

用户注册以后,可以发表自己的帖子或者回复别人的主题,也可以修改自己的帖子,如果发帖数量很多,会给用户一定的积分。用户也可以升级为版主,可以删除别人的帖子,将帖子置顶,设为精华等。用户还可以修改自己的信息,查看其他用户公开的注册信息。

管理人员可以管理版面、帖子、用户、设置系统参数。

3.1.1分析需求,确定思路

首先来做名词分析。大家可能觉得奇怪,这不是阅读理解,为什么要做这个?分析需求就是要理解需求,得出重点。首先要做的就是找出这个贴吧要针对哪些进行操作,对需求中的名词进行一次筛选,得出一个简洁的列表。

下边这个表是表示各个对象间关联的,关联是单向的,是指左侧对象对上方对象的活动。没有关联我们就用X,如果两者只有单向关联,那么另一个对象反关联时我们用对号表示。根据需求,得出各个对象间的关联表。如表3.1所示

表3.1个对象间的关联表

 

 

用户

版面

帖子

管理人员

系统参数

用户

注册】

修改

浏览

联系

浏览

浏览

发布

修改

删除

特殊操作

X

版面

X

X

X

帖子

X

X

X

管理人员

删除

授权

添加

删除

修改

添加

删除

修改

X

设置

系统参数

 

X

X

X

3.1.2 设计功能

有了表3.1就可以进行十实质性的工作了。现在就来设计功能。首先从用户开始,在表3.1中用户关联的对象是自身,版面,帖子,分别根据用户与这些对象的联系给出一个明确的菜单,见表3.2

表3.2用户功能列表

 

序号

功能名称

说明

1

用户注册

用户在贴吧填写必要的信息后就可以注册成为注册用户,用户登录网站可以修改自己的用户信息

2

用户登录

用户在贴吧注册后,可以使用用户名密码在贴吧登录

3

浏览其他用户信息

用户注册后可以查看其他用户信息

4

浏览版面

用户可以看到以列表形class.asp式展现的版面信息

5

浏览帖子

用户可以以列表形式浏览帖子主题及帖子的全部内容

6

发布删除修改帖子

用户在登录后可以发布帖子,修改自己的帖子。如果被赋予版主权限还可以修改其他用户的帖子

7

与其他用户联系

在用户注册时要求用户填写电子邮件地址,那么其他用户可以利用电子邮件与其联系

8

对帖子特殊操作

 

 

接下来的版面,帖子都没有和其他对象的关联,他们在贴吧属于被动的对象,是被其他对象所操作的。因此针对他们的功能主要是由其他对象产生,例如浏览版面就属于用户的功能。

管理人员是贴吧的一个特殊群体,他们的主要工作的是保证贴吧的正常运转,他们可以和所有对象产生联系,因此他们的功能也很丰富。表3.3列出了管理人员的功能。

表3.3管理人员功能列表

序号

功能名称

说明

1

用户删除

对于在贴吧发表一些非法言论。给贴吧造成很坏的影响的用户应该删除他们的身份,不允许他们的存在

2

用户授权

贴吧的管理是纷繁复杂的,需要很多的知识需要给一些具有能力用户一些特殊权限让他们帮助管理人员完成对贴吧的维护。

3

版面管理

版面是贴吧的枝干,对于新的只是需要添加新的版面有些版面的内容可能不太适合了可以考虑修改,对于没有存在意义的版面就要删除了。

4

帖子的管理

帖子是一个贴吧的叶子,他们的内容如何,反应了贴吧使用者和管理这的水平,需要管理人员对帖子的全权管理,以保证贴吧内容的水平。、

5

设置系统参数

系统参数包含的内容很多他们直接关系到贴吧的正常运行。

 

 

 

 

现在系统功能部分已经分析完了,接下来需要对这些功能进行分类,同时根据功能给出详细的数据库设计。

3.1.3划分功能模块

一般初学程序设计的人,即掌握了某种程序设计语言的语法,按照教材做过简单实例的人,在遇到现实生活的应用系统时,他的分析思路是从计算机实现的角度来考虑问题,而不是从系统的使用者的角度考虑问题,这就制约了他的思路一个系统是给人用的,开发者需要考虑用户使用起来是否方便,而不是及其实现起来是否方便。模块的划分主要是按每一个对象操作来归类。贴吧操作的对象是上面所归纳的5个,下面就针对这5个对象划分功能模块。

 

用户:应该有两个模块,一个是用户注册、登录、修改信息等功能组合,是用户对用户的操作;另一个是管理人员对用户进行删除,授权,是管理人员对用户的操作。这两个模块功能列表如3.4所示

表3.4用户功能模块列表

模块

模块包含的功能

用户模块

用户注册

用户登录

浏览其他用户信息

与其他用户联系

用户控制自己的信息

用户登录添加验证码

管理人员模块

用户删除

用户授权

 

 

版面:也有两个模块,一个是浏览模块,一个是管理模块,其功能模块列表如表3.5所示

表3.5版面功能模块列表

 

模块

模块包含的功能

版面浏览模块

浏览版面

版面管理模块

版面管理

 

帖子:帖子的功能是最多的,也是最复杂的,但是仍把它分为两大模块。根据操作对象来区分,有很多功能是重复的,但是由于操对象不同仍然需要列出。其功能如表3.6所示

 

 

表3.6帖子功能模块

模块

模块包含的功能

帖子模块

浏览帖子

发布、修改、删除帖子

对帖子的特殊操作

帖子收藏

帖子搜索

帖子管理模块

帖子管理

 

 

管理人员:管理人员主要是对其它对象进行操作,针对他的模块就没有了。但是这里很多模块的操作人员是他,同时把系统参数设置的功能也划分出来。其功能列表如表3.7所示

 

表3.7管理人员管理功能模块

模块

模块包含的功能

管理人员管理模块

设置系统参数

数据备份

非法言论过滤

非法IP限制

 

这样贴吧的模块划分就完成了。从以上分析可以了解到模块划分的依据,就是功能的使用者。

从表可以的到贴吧的功能框架,即系统的各个部分已经确定,知道贴吧是什么样的,但是要把贴吧系统完整的构架出来,还需要进一步思考模块间的关系。

 

3.8贴吧整体架构图

 

3.2数据库设计

贴吧系统信息的存储一般是在文件或者数据库中,在这里选择数据库,用数据库要简单高效一些,能够对贴吧进行更好的控制。使用数据库的第一步就是涉及数据库的表结构,一个良好的数据库表结构,可以提高效率,方便维护,并且以后进行功能的扩充留有余地,就好比高楼大厦的地基一样,有了稳固的基础,才能有优秀的成果。

     下面来设计贴吧的数据库。

3.2.1数据库概念结构设计

首先给出贴吧使用的数据表如表3.9所示

 

表3.9贴吧数据表

序号

表名

说明

1

QiQiBoy_Admin_Disp

管理员信息表

2

QiQiBoy_Board_Disp

贴吧列表

3

QiQiBoy_Class_Disp

二级版面信息表

4

QiQiBoy_Nlass_Disp

一级版面信息表

5

QiQiBoy_Status_Disp

贴吧状态表

6

QiQiBoy_System_Disp

系统信息表

7

QiQiBoy_Topic_Disp

主题,帖子信息表

8

QiQiBoy_User_Disp

用户信息表

 

 

各表之间的联系

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

3.2.2数据库逻辑结构设计

数据库概念结构设计完毕就可以通过数据库软件转化为实际的数据模型,即数据库的逻辑设计。本系统采用的数据库软件是MICROSOFT ACCESS.

 

  • 用户信息表(QiQiBoy_User_Disp)

序号

字段名

字段类型

说明

备注

1

UserID

自动编号

用户编号

主键

2

UserName

文本

用户帐号

 

3

Pwd

文本

用户密码

 

4

Sex

数字

用户性别

 

5

Email

文本

用户邮箱

 

6

OICQ

文本

用户qq

 

7

Question

文本

找回密码提示问题

 

8

Answer

文本

提示答案

 

9

UserGroupID

数字

用户类别

 

10

Ip

文本

用户IP

 

11

RegTime

日期/时间

用户注册时间

 

12

LastLogin

日期/时间

用户最后登录时间

 

13

Visits

数字

用户访问次数

 

14

LockUser

数字

是否锁定

 

15

Integral

数字

用户积分

 

16

Topics

数字

用户发表主题数

 

17

Replys

数字

用户回复帖子数

 

18

Area

文本

用户地址

 

19

Websites

文本

用户主页

 

20

List

备注

用户简介

 

21

Photo

文本

用户头像

 

 

 

在用户信息表里保存的是所有在贴吧注册的用户的信息,用户编号是用户在贴吧的唯一标识,是不重复的,同时用户名在贴吧中也是不能重复的,大家可能奇怪既然用户名也不可以重复,为什么不用用户名作为用户在贴吧中的唯一标识呢?大家可以考虑一下,假如你有一份一百个人的名单,每个人有一个序号,这是让你从中找一个人,如果只告诉你名字,那么找起来会很麻烦,如果告诉你他是多少号是不是要简单的多?同样道计算机对数字的检索更加快速,特别是用用户很所的时候。用户名和密码是不能为空的,这是因为当用户名登录时必须输入用户名和密码我们才能定位到用户的信息,验证用户是不是真正在贴吧注册了,电子邮件不能为空的目的是为了是其他用户能够很方便的和该用户联系,同时又可以作为用户忘记密码是取回密码的联系方式。密码问题和密码答案的主要应用是。当用户忘记密码时,由系统提问,如果用户能够准确的给出密码答案我们将提示给用户密码。

 

 

2.管理员信息表(QiQiBoy_Admin_Disp)

 

序号

字段名

字段类型

说明

备注

1

ID

自动编号

管理员ID

主键

2

uid

文本

管理员姓名

 

3

pwd

文本

管理员密码

 

4

groups

文本

管理员类别

 

5

loginip

文本

管理员登录IP

 

6

updatetime

日期/时间

管理员最后登录时间

 

7

loginnum

数字

管理员登录次数

 

 

3.二级版面信息表(QiQiBoy_Class_Disp)

序号

字段名

字段类型

说明

备注

1

BoardClass

自动编号

二级版面编号

主键

2

BoardClassName

文本

二级版面名字

 

3

BoardNlass

数字

上级版面

 

 

4.贴吧状态表(QiQiBoy_Status_Disp)

序号

字段名

字段类型

说明

备注

1

StatusID

自动编号

状态信息ID

主键

2

RegUsers

数字

注册用户数

 

3

TotalBoards

数字

版面数

 

4

TotalTopics

数字

主题数

 

5

TotalReplys

数字

回复主题数

 

 

5.版面信息表2(QiQiBoy_Class_Disp)

序号

字段名

字段类型

说明

备注

1

BoardNlass

自动编号

一级版面ID

主键

2

BoardNlassName

文本

版面名称

 

 

版面列表(QiQiBoy_Board_Disp)

 

序号

字段名

字段类型

说明

备注

1

BoardID

数字

版面ID

主键

2

BoardNlass

数字

二级版面编号

 

3

BoardClass

数字

一级版面编号

 

4

BoardName

文本

版面名称

 

5

BoardDescription

文本

版面描述

 

6

BoardMaster

文本

版主

 

7

LastModify

日期/时间

最后修改时间

 

8

BoardTopics

数字

版面主题数

 

9

BoardReplys

数字

版面回复数

 

 

 

6.系统信息表(QiQiBoy_System_Disp)

序号

字段名

字段类型

说明

备注

1

SystemID

自动编号

系统信息编号

主键

2

SystemName

文本

网站名称

 

3

SystemList

文本

网站介绍

 

4

SystemUrl

文本

网站地址

 

5

SystemLogo

文本

网站LOGO

 

6

SystemUser

 

网站站长

 

7

Systememailr

文本

邮件地址

 

8

SystemQQ

文本

QQ号码

 

9

SystemReg

备注

注册提示信息

 

10

SystemHelp

备注

网站帮助指南

 

11

SystemPic

备注

 

 

12

SystemFilter

备注

过滤字符

 

13

SystemMeun

备注

首页导航菜单

 

14

SystemFont

文本

字体颜色

 

15

SystemRefresh

数字

开启/关闭防刷新功能

 

16

SystemRefreshTime

数字

防刷新间隔时间

 

17

SystemOff

数字

网站开启/关闭

 

18

SystemVip

数字

会员发表/回复帖子

 

19

SystemUbb

数字

UBB编辑功能

 

20

SystemUp

数字

图片上传功能

 

21

SystemMailAddress

文本

在线发送邮箱地址

 

22

SystemSmtpAddress

文本

发送邮箱SMTP地址

 

23

SystemMailName

文本

发送邮箱登陆帐号

 

24

SystemMailPass

文本

发送邮箱登陆密码

 

25

SystemCopyTxt

文本

 

 

26

SystemCode

数字

 

 

27

SystemEmNum

数字

帖子表情允许数目

 

 

 

 

这是个核心表,但是他的每个字段都很简单,贴吧设置字段存储了贴吧名称,贴吧地址,贴吧联系方式,过滤词这个字段很重要。他的内容是不允许发布在贴吧上的当用户发布题写非法言论是,可以通过这个字段检查出来。

7.主题,帖子信息表(QiQiBoy_Topic_Disp)

序号

字段名

字段类型

说明

备注

1

TopicID

自动编号

主题id

主键

2

ParentID

数字

父文章id

 

3

RootID

数字

主题号

 

4

BoardNlass

数字

一级版面号

 

5

BoardClass

数字

二级版面号

 

6

UserName

文本

发表主题者

 

7

LastPost

文本

最后发帖者

 

8

Title

文本

主题类型

 

9

Content

备注

主题内容

 

10

Img

文本

主题图片内容

 

11

DateAndTime

日期/时间

发表主题时间

 

12

UpdateTime

日期/时间

最后发帖时间

 

13

Reads

数字

阅读次数

 

14

Replys

数字

回复次数

 

15

Status

数字

主题状态

 

16

TopicIp

文本

发表主题者的IP

 

17

ReplyIp

文本

回复者的IP

 

18

Favorite

备注

收藏该主题

 

 

3.2.3连接数据库

在整个系统开发的过程中,数据库连接是必不可少的,是公用的,我们可以把这一部分先拿出来,单独做成一个页面,在需要的时候只需要调用这个页面就可以了,而不用每次都去写连接数据库的程序,这个做法叫做复用,是在程序开发中经常用到的。

   首先要建立同数据源的连接,我们利用ADO的Connection来建立同数据库的连接。建立asodb.connection对象,使用此对象的open方法打开数据库。

现在来看代码如程序3.01所示:

 

数据库连接程序(conn.asp)

 

<%

  • .On Error Resume Next
  • Dim Conn,Connstr,Db
  • Db="data/data.mdb"         
  • Set conn = Server.CreateObject("ADODB.Connection")
  • Connstr="Driver={Microsoft Access Driver (*.mdb)};dbq=" & Server.MapPath(db)
  • Conn.Open Connstr
  • If Err Then
  • err clear
  • response.write "<font size=""4"">·数据库连接错误....</font>"
  • Response.End
  • End If
  • Function CloseDatabase
  • Conn.close
  • Set Conn = nothing
  • End Function

%>  

 

 第一行是容错语句,发生错误后,继续执行下一句,接下来就用dim声明了变量 rs,sql,Conn,Connstr,Db,connstr这个变量是用来存储连接数据库的信息的,变量db声明了数据库文件所在的路径。

第五行,为connstr赋值。这是很关键的一步,这里声明的是ole db 连接数据库的方式,只看data sourse部分,他后面跟的是数据库文件的路径。Server.mappath函数是asp内置的server对象的一个函数,用来获取五网站目录下文件的绝对路径。

在7~9行写了一个判断错误的信息,如果连接数据库错误,系统会给出一个错误,这时候通过asp的err对象判断错误的存在,首先将错误信息从内存清除,然后将conn对象从内存中清除。

            

 

 

 

 3.3主要界面及相关代码分析

   数据库连接完了,接下来要做的就是实际模块程序的编写了。首先要写的是用户模块,用户模块包含7个功能,其中有些功能是相辅相成的。现在就一步步地实现本模块的功能。

3.3.1 用户登陆

我们已经有了用户信息表,其中的用户名和用户密码字段是用来验证用户身份的,有了这两个字段,我们就可以很容易地写出验证用户登陆的程序了。首先来看用户登陆的界面,如图所示。

 

 

我们将这个页面命名为login.asp,先看页面的内容。“用户帐号”和“用户密码”这两项就是用来读取用户名和密码的地方。接下来是一个cookie选项,cookie是用来保存用户信息的一种方式,系统登录页面所涉及的HTML表单元素如表2所示:

 

表2系统登录页面所涉及的HTML表单元素

 

名称

类型

含义

重要属性

form

Form

表单

action=" loginfox.asp" method="POST"

UserName

text

用户帐号

onFocus="this.select(); " onmouseover="this.style.background='#EAEAEA';" onmouseout="this.style.background='#FFFFFF'"

Password

password

用户密码

onFocus="this.select(); " onmouseover="this.style.background='#EAEAEA';" onmouseout="this.style.background='#FFFFFF'"

verifycode

text

验证码

onFocus="this.select(); " onmouseover="this.style.background='#EAEAEA';" onmouseout="this.style.background='#FFFFFF'" size="6" maxlength="4"

AutoLogin

checkbox

Cookies

type="checkbox" id="AutoLogin" value="true"

submit

submit

【我要登录】按钮

class="input" value=" 我要登 录 "

submit2

reset

【擦除重填】按钮

value=" 擦除重 填 " class="input"

 

 

                  验证用户身份程序(loginfox.asp)

<%

dim UserName,Password,VerifyCode  

UserName=replace(trim(Request.form("UserName")),"'","")

Password=replace(trim(Request.form("Password")),"'","")

VerifyCode=replace(trim(Request.Form("VerifyCode")),"'","")

 

if UserName="" then

response.write ("<script>alert('友情提示!\n\n用户帐号不能为空!');history.back();</script>")

response.end

end if

 

if Password="" then

response.write ("<script>alert('友情提示!\n\n用户密码不能为空!');history.back();</script>")

response.end

end if

 

If HOST_CODE=0 then

if VerifyCode="" then

response.write ("<script>alert('友情提示!\n\n验证编码不能为空!');history.back();</script>")

response.end

end if

 

if VerifyCode <> Trim(Session("VerifyCode")) then

response.write ("<script>alert('友情提示!\n\n验证编码错误!');history.back();</script>")

response.end

end if

end if

 

ip = request.ServerVariables("HTTP_X_FORWARDED_FOR")

if ip = "" then ip = request.ServerVariables("REMOTE_ADDR")

 

Sql="select * from [QiQiBoy_User_Disp] where LockUser=0 and UserName='"&showstring(UserName)&"'"

Set Rs=Conn.execute(Sql)

f Rs.eof  and rs.bof    then

Response.Write ("<script>alert('友情提示!\n\n用户帐号错误或已被锁定!');history.back();</script>")

Response.end

else

if rs("Pwd")<>md5(Password) then

Response.Write ("<script>alert('友情提示!\n\n用户密码错误!');history.back();</script>")

Response.end

else

response.Cookies("UserName")=UserName

response.Cookies("Pwd")=Md5(Password)

response.cookies("automember")=UserName

response.Cookies("automember").Expires=now()+365

if LCase(Request.Form("AutoLogin"))="true" then

response.Cookies("UserName").Expires=now()+365

response.Cookies("Pwd").Expires=now()+365

end if

 

Sql="Update [QiQiBoy_User_Disp] set Visits=Visits+1,LastLogin='"&now()&"',ip1='"&ip&"',Integral=Integral+1 where UserName='"&showstring(UserName)&"'"

Conn.execute(Sql)

 

end if

end if

rs.close

set rs=nothing

 

Response.Write ("<script>alert('友情提示!\n\n登录成功,欢迎您的到来...!');self.opener.location.reload();window.close();</script>")

Response.end

%>

 

Rs.eof  and rs. Bof  then 判断用户信息是否存在,eof 和bof是数据查询记录集的属性,它们分别表示最后一条记录的后面和第一条记录的前面。看这一句,既在最后一条的后面,又是第一条前面,说明这样的记录集一定是空的,用户是不存在的。如果数据集不为空,我们将把数据集的信息写入存储用户信息的字符串中。这里的SQL语句中只用了用户名来取信息,下边if rs("Pwd")<>md5(Password) then这一句的内容就是判断用户密码是否和数据库中的密码相符。在经过许多判断之后就获得了用户的信息。

接下来谈谈Cookie。我们知道,用户进入了贴吧后,需要访问很多页面,其中的一部页面是需要注册用户登陆才能看到的,那么要想知道用户是否登陆,这就用到Cookie了,

Cookie是由Web页服务器置于硬盘上的一个非常小的文本文件。从本质上讲,它是你的身份证。它不能作为代码执行,也不会传送病毒。它为你所专有,并且只能有提供它的服务器来读取。但是Cookie是有限制的,每个Cookie文件的大小不超过4KB。另外浏览器中选择可接受Cookie,否则一旦ASP程序中使用了Cookie,它们将无法正常运行。现在我们把用户信息写入Cookie的程序,如程序所示。

<%

response.Cookies("UserName")=UserName

response.Cookies("Pwd")=Md5(Password)

response.cookies("automember")=UserName

response.Cookies("automember").Expires=now()+365

if LCase(Request.Form("AutoLogin"))="true" then

response.Cookies("UserName").Expires=now()+365

response.Cookies("Pwd").Expires=now()+365

%>

3.3.2用户注册

涉及到用户注册,我们就会想到用户信息的验证,总不能一个用户只写个空格我们也让他注册吧,还有就是用户如果忘记密码怎么办?我们也应提供相应的服务,现在我们就对用户注册部分的网页部分,以及各个网页间的联系:如图11所示。下面就来说明程序是如何编写的。首先是registr.asp

。用户注册,首先要检查的就是用户填写的信息其中包括:

 

  • 字段是否为空白
  • 两次输入的密码是否一至
  • 用户名是否被使用
  • 电子邮件是否被使用

表注册页面所涉及的HTML表单元素

  •  

名称

类型

含义

重要属性

form

Form

表单

action=" registrfox.asp " method="POST"

username

text

用户帐号

maxLength="8" size="25" name="username" value="<%=session("UserName")%>"

Password

password

用户密码

maxLength="18" size="25" name="password"

checkPassword

text

验证密码

input type="password" maxLength="18" size="25" name="checkPassword"

sex

list

用户性别

<option value="1" name="sex"<%if session("Sex")="1" then response.write(" selected") end if%>>帅哥</option><option value="2" name="sex"<%if session("Sex")="2" then response.write(" selected") end if%>>靓女</option>

area

text

用户地区

maxLength="80" size="30" name="area" value="<%=session("Area")%>"

email

text

邮箱地址

maxLength="180" size="40" name="email" value="<%=session("Email")%>"

question

text

 

密码问题

maxLength="18" size="30" name="question" value="<%=session("Question")%>"

answer

text

密码答案

maxLength="18" size="50" name="answer" value="<%=session("Answer")%>"

websites

text

个人主页

size="60" name="websites" maxLength="250" value="<%=session("Websites")%>"

list

textarea

个人简介

rows="6" cols="60"><%=session("List")%>

submit

submit

【我要注册】按钮

class="input" value=" 我要登 录 "

submit2

reset

【擦除重填】按钮

value=" 擦除重 填 " class="input"

 
  •  

用户注册各个页面与数据库间的联系

 

网上贴吧系统[点击下载]

评论