ASP实验五简单聊天室设计课案.docx

上传人:b****6 文档编号:3310057 上传时间:2022-11-21 格式:DOCX 页数:21 大小:114.81KB
下载 相关 举报
ASP实验五简单聊天室设计课案.docx_第1页
第1页 / 共21页
ASP实验五简单聊天室设计课案.docx_第2页
第2页 / 共21页
ASP实验五简单聊天室设计课案.docx_第3页
第3页 / 共21页
ASP实验五简单聊天室设计课案.docx_第4页
第4页 / 共21页
ASP实验五简单聊天室设计课案.docx_第5页
第5页 / 共21页
点击查看更多>>
下载资源
资源描述

ASP实验五简单聊天室设计课案.docx

《ASP实验五简单聊天室设计课案.docx》由会员分享,可在线阅读,更多相关《ASP实验五简单聊天室设计课案.docx(21页珍藏版)》请在冰豆网上搜索。

ASP实验五简单聊天室设计课案.docx

ASP实验五简单聊天室设计课案

 

《ASP.NET程序设计》实验报告

 

学院:

临沂大学

专业:

软件工程

报告人:

学号:

班级:

实验五简单聊天室设计

一、目的与要求

1、掌握程序开发流程。

2、了解Web应用程序的逻辑结构。

3、掌握三层架构

二、实验仪器

Windows操作系统,MicrosoftVisualStudio.NET2010。

三、实验内容

1.设计与实现一个简易聊天室。

 

四、实验过程及结果

(1)设计数据库

首先,多用户聊天室具有用户表User,其字段如表20.1所示。

User(用户)表

字段名

数据类型

备注

UserName

varchar(50)notnull

用户名

Password

varchar(50)not_null

密码

记录发言信息的表Message的字段如表20.2所示。

Message(发言信息)表

字段名

数据类型

备注

UserName

varchar(50)notnull

发言者

CreateTime

varchar(50)notnull

发言时间

Content

Text

发言全文

Color

varchar(50)notnull

文字颜色

Emotion

varchar(50)notnull

用户表情

其中,color属性的取值可能为red、blue、green,它们能够直接赋值给,而不是简单的存储汉字,这样可以方便显示。

本例中,emotion存储的是文字信息,如微笑地、难过地等。

读者可以很容易地将其转变为图片信息,实现方式是首先设计一些表情图片,然后将其图片名存储在emotion属性中,在显示时根据其值构造标签即可。

(2)实现数据库

下面给出数据库实现的SQL命令,也可以通过SQLServer企业管理器创建:

(1)创建User表

CREATETABLE[dbo].[User](

[UserName][varchar](50)COLLATEChinese_PRC_CI_ASNOTNULL,

[Password][varchar](50)COLLATEChinese_PRC_CI_ASNOTNULL

)ON[PRIMARY]

(2)创建Message表:

CREATETABLE[dbo].[Message](

[UserName][varchar](50)COLLATEChinese_PRC_CI_ASNOTNULL,

[CreateTime][varchar](50)COLLATEChinese_PRC_CI_ASNULL,

[Content][text]COLLATEChinese_PRC_CI_ASNULL,

[Color][varchar](50)COLLATEChinese_PRC_CI_ASNULL,

[Emotion][varchar](50)COLLATEChinese_PRC_CI_ASNULL

)ON[PRIMARY]TEXTIMAGE_ON[PRIMARY]

3数据访问层

数据访问层完成所有与数据库交互的工作,本系统只包括一个类Database。

这个类的功能是向数据库提交SQL语句,并返回相应的操作结果。

(1)配置数据库连接

本例中,在Web.config文件中指定了数据库连接字符串配置信息,在Web.config文件中添加如下代码:

1.

2.

3.key="DBConnectionString"

4.value="server=(local);database=MyChatRoom;UserId=sa;pwd=sa"

5./>

6.

用户需要根据自己的配置,修改value中各个连接属性的值。

(2)Database类成员一览

把Database类放在MyChatRoom.DataAcceessLayer空间下,其类图如图20.5所示。

图20.5数据库类Database的类图

成员说明如表20.3所示

表20.3Database类的成员说明

属性/方法

功能说明

Connection

保护变量,数据库连接SqlConnection对象

ConnectionString

保护变量,数据库连接串

Open

连接数据库

Close

关闭数据库连接

Dispose

释放数据库连接资源

ExecuteSQL

执行一个非查询(SELECT)类型的SQL命令

GetDataRow

根据输入SQL命令,获取一个DataRow对象

GetDataSet

根据输入SQL命令,获取一个DataSet对象

(3)实现Database类

下面分别介绍Database类中各个方法的实现。

1.构造函数

构造函数的功能为,读取配置文件Web.config中的连接字符串,并赋予ConnectionString属性,实现如下:

1.///构造函数

2.publicDatabase()

3.{

4.ConnectionString=ConfigurationSettings.AppSettings["DBConnectionString"];

5.}

这里使用ConfigurationSettings类的的AppSettings静态属性,获取Web.config中使用元素的配置信息。

ConfigurationSettings类提供配置文件的访问信息。

2.析构函数

构造函数的功能为,关闭数据库连接,并释放连接数据库所使用的资源。

实现如下:

1.///析构函数,关闭连接,并释放资源

2.~Database()

3.{

4.try

5.{

6.if(Connection!

=null)

7.Connection.Close();

8.}

9.catch{}

10.try

11.{

12.Dispose();

13.}

14.catch{}

15.}

代码4~9行关闭连接,10~14行使用下面介绍的Dispose方法,释放资源。

3.Dispose方法

Database类继承了IDisposal接口,后者定义了释放资源的Dispose方法。

在Database中,需要实现这个方法,以释放连接数据库所占用的系统资源(如内存等)。

具体地,将使用Connection属性的Dispose方法,来释放这些资源,实现如下:

1.///公有方法,释放资源。

2.publicvoidDispose()

3.{

4.//确保连接被关闭

5.if(Connection!

=null)

6.{

7.Connection.Dispose();

8.Connection=null;

9.}

10.}

4.Open方法

Open方法根据ConnectionString属性,创建新的数据库连接对象,并赋予Connection属性。

1.///保护方法,打开数据库连接。

2.protectedvoidOpen()

3.{

4.if(Connection==null)

5.{

6.Connection=newSqlConnection(ConnectionString);

7.}

8.if(Connection.State.Equals(ConnectionState.Closed))

9.{

10.Connection.Open();

11.}

12.}

代码判断是否已经建立了连接,如果没有建立,则创建新的连接,并将其打开。

5.Close方法

Close方法关闭数据库连接。

1.///公有方法,关闭数据库连接。

2.publicvoidClose()

3.{

4.if(Connection!

=null)

5.Connection.Close();

6.}

6.ExecuteSQL方法

ExecuteSQL方法执行非查询(即非SELECT)SQL命令,并返回执行SQL所影响的数据记录数目。

1.///公有方法,执行Sql语句。

2.///Sql语句

3.///对Update、Insert、Delete为影响到的行数,其他情况为-1

4.publicintExecuteSQL(StringSqlString)

5.{

6.intcount=-1;

7.Open();

8.try

9.{

10.SqlCommandcmd=newSqlCommand(SqlString,Connection);

11.count=cmd.ExecuteNonQuery();

12.}

13.catch

14.{

15.count=-1;

16.}

17.finally

18.{

19.Close();

20.}

21.returncount;

22.}

第7行打开数据库连接;

第8~20行使用try-catch-finally语句,利用ExecuteNonQuery方法来执行SQL命令。

第21行返回执行SQL影响的记录数。

7.GetDataSet方法

GetDataSet方法接受一个SQL查询命令(SELECT语句),然后返回查询得到的数据集DataSet。

1.///公有方法,获取数据,返回一个DataSet。

2.///Sql语句

3.///DataSet

4.publicDataSetGetDataSet(StringSqlString)

5.{

6.Open();

7.SqlDataAdapteradapter=newSqlDataAdapter(SqlString,Connection);

8.DataSetdataset=newDataSet();

9.adapter.Fill(dataset);

10.Close();

11.returndataset;

12.}

第6行打开数据库连接;

第7~9行使用SqlDataAdapter对象得到查询结果,并利用其Fill方法将查询结果放入DataSet中;

第10行关闭数据库连接;

第11行返回查询结果集。

8.GetDataRow方法

GetDataRow方法接收一个SQL查询命令(SELECT语句),然后返回查询得到的一行数据对象DataRow,很明显,这个方法适合于结果中至多只包含一个记录的查询,例如根据主键查询数据等。

1.///公有方法,获取数据,返回一个DataRow。

2.///Sql语句

3.///DataRow

4.publicDataRowGetDataRow(StringSqlString)

5.{

6.DataSetdataset=GetDataSet(SqlString);

7.dataset.CaseSensitive=false;

8.if(dataset.Tables[0].Rows.Count>0)

9.{

10.returndataset.Tables[0].Rows[0];

11.}

12.else

13.{

14.returnnull;

15.}

16.}

第6行利用前面介绍的GetDataSet方法,获取查询结果数据集;

第8~15行试图取出结果集中第一个表中的第一行数据,并返回;如果数据集中不存在任何数据,则返回空(null)。

4业务逻辑层

业务逻辑层完成聊天室的功能,具体包括用户和信息管理,分别使用User和Message类来实现,下面对其一一介绍。

1用户类User

1.User类的功能

用户类模拟了一个使用聊天室的用户,位于MyCharRoom.BussinessLogicLayer空间中,其类图如图所示。

注意:

User类的实现将使用到Database类的方法,因此,在实现User类之前,不要忘记引入数据访问层所在的空间“MyCharRoom.DataAccessLayer”。

图20.6User类的类图

成员说明如表20.4所示:

表20.4User类的成员说明

属性/方法

功能说明

UserName

字符串,用户名

Password

字符串,用户密码

Exist

布尔型,指示用户是否存在

Add

将当前用户添加到数据库中

LoadData

根据用户名,得到用户的详细信息数据

2.LoadData方法

LoadData方法根据用户名参数,查询数据库,并获取该用户的详细信息。

1.///根据参数userName,获取用户详细信息

2.///用户名

3.publicvoidLoadData(stringuserName)

4.{

5.Databasedb=newDatabase();//实例化一个Database类

6.

7.stringsql="Select*from[User]whereUserName='"+userName+"'";

8.DataRowdr=db.GetDataRow(sql);//利用Database类的GetDataRow方法查询数据

9.

10.//根据查询得到的数据,对成员赋值

11.if(dr!

=null)

12.{

13.this._userName=dr["UserName"].ToString();

14.this._password=dr["Password"].ToString();

15.this._exist=true;

16.}

17.else

18.this._exist=false;

19.}

第5行得到一个Database对象db;

第7~8行构造了查询语句,形如:

Select*from[User]WhereUserName=‘ZhangSan’

然后,利用db的GetDataRow方法查询数据;

第10~18行把查询到的数据赋予User类的各个属性,并标识_exist属性为true;如果没有查询到任何数据,则_exist属性为false。

注意:

在构造查询语句时,需要在表名User上添加中括号,这是因为,SQLServer中包含名为User的系统表,为了与系统表加以区分,需要使用中括号。

3.Add方法

Add方法向数据库添加一个用户信息。

1.///向数据库添加一个用户

2.///用户名

3.///密码

4.publicvoidAdd(stringuserName,stringpassword)

5.{

6.Databasedb=newDatabase();//实例化一个Database类

7.

8.stringsql="InsertInto[User]Values("

9.+"'"+userName+"',"

10.+"'"+password+"')";

11.

12.db.ExecuteSQL(sql);//利用Database类的GetDataRow方法查询用户数据

13.}

第6行得到一个Database对象db;

第8行构造了INSERT语句,形如:

InsertInto[User]Values(‘UserName’,’Password’)

然后,利用db的ExecuteSQL方法执行命令。

2消息类Message

1.Message类的功能

Message类用户管理用户的发言信息,位于MyCharRoom.BussinessLogicLayer空间中,其类图如图20.7所示。

图20.7User类的类图

成员说明如表20.5所示。

表20.5User类的成员说明

属性/方法

功能说明

Add

将一条留言信息,添加到数据库中

LoadTop10

静态方法,查询数据库中最近的10条留言,并用DataSet返回

2.实现Add方法

Add方法向数据库添加一个留言信息,具体内容包括留言用户名、时间、内容、字体颜色,以及表情信息。

1.///向数据库中添加一条留言信息

2.///用户名

3.///留言时间

4.///留言内容

5.///颜色

6.///表情

7.publicvoidAdd(stringuserName,stringcreateTime,stringcontent,stringcolor,stringemotion)

8.{

9.Databasedb=newDatabase();//实例化一个Database类

10.

11.stringsql="InsertInto[Message]Values("

12.+"'"+userName+"',"

13.+"'"+createTime+"',"

14.+"'"+content+"',"

15.+"'"+color+"',"

16.+"'"+emotion+"')";

17.

18.db.ExecuteSQL(sql);//利用Database类的GetDataRow方法查询用户数据

19.}

第6行得到一个Database对象db;

第8行构造了INSERT语句,形如:

InsertInto[Message]Values(‘UserName’,’9:

12:

23’,’留言信息’,’red’,’微笑着’)

然后,利用db的ExecuteSQL方法执行命令。

3.LoadTop10方法

LoadTop10方法获取聊天室用户最近发表的10条发言,并用一个DataSet数据集返回。

1.///获取事件最近的10条发言

2.publicstaticDataSetLoadTop10()

3.{

4.Databasedb=newDatabase();//实例化一个Database类

5.

6.stringsql="Selecttop10*from[Message]orderbyCreateTimedesc";

7.DataSetds=db.GetDataSet(sql);//用Database类的GetDataSet查询最近的10条发言

8.

9.returnds;

10.}

第4行得到一个Database对象db;

第6行构造了INSERT语句,形如:

Selecttop10*from[Message]OrderByCreateTimeDesc

然后,利用db的GetDataSet方法得到查询结果数据集,并返回。

5页面显示层

页面显示层是最终呈现在用户浏览器上的系统功能,主要包括对逻辑层的调用,动态显示数据,以及美工两部分工作。

此处着重介绍前者。

本例中,所包含的页面有:

(1)用户登录页面Login.aspx。

(2)用户发言页面Speak.aspx。

(3)浏览信息页面ShowMessage.aspx。

为了便于使用,需要使用一个页面将

(2)(3)放在一起,即用户在同一个页面上发言并查看信息,使用框架可以实现这一点,合并的主页面为Main.aspx。

下面一一介绍这几个页面的实现。

注意:

在实现页面之前,需要引入业务逻辑层空间“MyCharRoom.BussinessLogicLayer”。

1用户登录Login.aspx

用户登录页面Login.aspx位于MyCharRoom.WebLayer空间中,主要功能为:

(1)当用户首次使用系统时,将自动将其信息注册到数据库中;

(2)用户再次登录时,系统会检查其输入的用户名和密码是否合法,如不合法,则给出提示,并使用户重新登录。

如果合法,则进入聊天室主页面Main.aspx。

Login.aspx的页面布局如图所示。

图20.8Login.aspx的页面布局

主要控件的属性为:

1.

TextBoxid="TextBoxUserName"runat="server">

TextBox>

2.

RequiredFieldValidatorid="RequiredFieldValidator1"runat="server"

ErrorMessage="警告:

必填!

"

ControlToValidate="TextBoxUserName">

RequiredFieldValidator>

3.

TextBoxid="TextBoxPassword"runat="server"

TextMode="Password">

TextBox>

4.

RequiredFieldValidatorid="RequiredFieldValidator2"runat="server"

ErrorMessage="警告:

必填!

"

ControlToValidate="TextBoxPassword">

RequiredFieldValidator>

5.

Buttonid="ButtonLogin"runat="server"

Text="登录">

Button>

当用户单击“登录”按钮时,其单击事件完成

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 小学教育 > 语文

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1