ASP实验五简单聊天室设计.docx
- 文档编号:30229868
- 上传时间:2023-08-07
- 格式:DOCX
- 页数:25
- 大小:114.52KB
ASP实验五简单聊天室设计.docx
《ASP实验五简单聊天室设计.docx》由会员分享,可在线阅读,更多相关《ASP实验五简单聊天室设计.docx(25页珍藏版)》请在冰豆网上搜索。
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./// 3./// 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./// 3./// 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./// 3./// 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> 当用户单击“登录”按钮时,其单
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- ASP实验五 简单聊天室设计 ASP 实验 简单 聊天室 设计