酒店客房管理系统.doc_第1页
酒店客房管理系统.doc_第2页
酒店客房管理系统.doc_第3页
酒店客房管理系统.doc_第4页
酒店客房管理系统.doc_第5页
免费预览已结束,剩余47页可下载查看

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

酒店客房管理系统酒店客房管理系统11.1 .NET对数据库开发的支持21.1.1 ADO .NET概述21.1.2 ADO.NET组件31.1.3 数据绑定控件131.2 概 述131.3 需 求 分 析141.3.1 理解需求141.3.2 需求分析151.4 UML系统建模161.4.1 酒店客房管理系统的用例分析161.4.2 酒店客房管理系统的域类分析161.4.3 酒店客房管理系统的设计171.5 系 统 配 置191.5.1 软件配置191.5.2 硬件配置201.5.3 网络配置211.6 数据库分析221.6.1 E-R图分析221.6.2 表与字段分析和SQL Server数据库建模231.7 数据库设计231.7.1 创建数据库231.7.2 创建表251.7.3 创建存储过程291.8 连接数据库321.9 页面设计及相关代码分析341.9.1 酒店客房管理系统首页设计及其代码分析341.9.2 客房信息管理页面设计及其代码分析361.9.3 客房信息添加/修改页面设计及其代码分析381.9.4 客房经营管理页面设计及其代码分析411.9.5 订房/退房管理页面设计及其代码分析441.9.6 经营状况统计页面设计及其代码分析471.10 实 例 演 示491.11 小 结50Microsoft .NET作为一种面向网络、支持各种用户终端的开发平台环境,推动新一代因特网的发展,真正地让人们可以在任何时间、任何地点、通过任何设备得到信息。C是专门为.NET应用而开发出的语言,它能够建造所有的.NET应用。其固有的特性保证了它是一种高效、安全、灵活、面向对象的现代程序设计语言。从最普通的应用到大规模的商业开发,C与 .NET平台的结合将为用户提供完整的解决方案。ASP .NET是建立在.NET平台架构上,使用通用语言运行时(Common Language Runtime)在服务器后端为用户提供建立强大的企业级Web应用服务的编程框架。现代化的酒店组织庞大、服务项目多、信息量大,要想提高劳动生产、降低成本、提高服务质量和管理水平,进而促进经济效益,必须借助计算机来进行现代化的信息管理。酒店管理系统正是为此而设计的。优秀的酒店客房管理系统操作方便,灵活性好,系统安全性高,运行稳定。本章将以典型的酒店客房管理系统作为实例,向读者详细讲述如何设计和使用C和ASP .NET开发企业酒店客房管理系统。1.1 .NET对数据库开发的支持大多数C# 应用程序都是围绕读取和更新数据库中的信息展开的。为了允许在分布式、可缩放应用程序中实现数据集成,Visual Studio .NET 提供对新一代数据访问技术 ADO .NET的支持。1.1.1 ADO .NET概述在介绍ADO .NET之前,先澄清一个概念:ADO .NET是一项超越ADO的重要技术,ADO .NET这个名字并不代表实际的内容 ADO。ADO原来是表示ActiveX Data Objects,Microsoft已经将ADO .NET作为一种技术的名称。ADO .NET是一组向.NET程序员公开数据访问服务的类。ADO .NET为创建分布式数据共享应用程序提供了一组丰富的组件。它提供了对关系数据、XML和应用程序数据的访问,因此是.NET Framework中不可缺少的一部分。ADO .NET支持多种开发需求,包括创建由应用程序、工具、语言或Internet浏览器使用的前端数据库客户端和中间层业务对象。ADO .NET提供对Microsoft SQL Server等数据源以及通过OLE DB和XML公开的数据源的一致访问。数据共享使用者应用程序可以使用ADO .NET来连接到这些数据源,并检索、操作和更新数据。在介绍如何实现ADO .NET访问SQL Server 2000数据库前,有必要介绍一下ADO .NET中的一个核心元素,它是.NET Framework数据提供程序,其组件的设计目的相当明确:为了实现数据操作和对数据的快速、只进、只读访问。Connection对象提供与数据源的连接。Command对象使用户能够访问用于返回数据、修改数据、运行存储过程以及发送或检索参数信息的数据库命令。DataReader从数据源中提供高性能的数据流。最后,DataAdapter提供连接DataSet对象和数据源的桥梁。DataAdapter使用Command对象在数据源中执行SQL命令,以便将数据加载到DataSet中,并使对DataSet中数据的更改与数据源保持一致。.NET Framework提供了4个.NET Framework数据提供程序,其中SQL Server .NET Framework数据提供程序就是用于实现对SQL Server 2000的连接访问,下面给出SQL Server .NET Framework的框架图,如图1-1所示。图1-1 SQL Server .NET Framework结构1.1.2 ADO.NET组件为了实现对数据库的访问,ADO .NET定义了两个核心组件:DataSet和.NET Framework数据提供程序,后者是一组包括Connection,Command,DataReader和DataAdapter对象在内的组件。1. DataSetDataSet对象是支持ADO.NET的断开式、分布式数据方案的核心对象。DataSet的设计目的很明确:为了实现独立于任何数据源的数据访问。因此,它可以用于多种不同的数据源,用于XML数据,或用于管理应用程序本地的数据。DataSet包含一个或多个DataTable对象的集合,这些对象由数据行和数据列以及主键、外键、约束和有关DataTable对象中数据的关系信息组成。图10-2将显示DataSet对象模型。图1-2 DataSet对象模型(1) DataTablesCollection对象DataSet里的表(Table)是用DataTable来表示的。一个DataSet包含DataTable对象所表示的零个或更多个表的集合。DataTableCollection包含DataSet中的所有DataTable对象。DataTable在System.Data命名空间中定义,表示内存驻留数据表。它包含 DataColumn Collection所表示的列和ConstraintCollection所表示的约束的集合,这些列和约束一起定义了该表的架构。DataTable还包含DataRowCollection所表示的行的集合,而DataRow Collection则包含表中的数据。除了其当前状态之前,DataRow还会保留其当前版本和初始版本,以标识对行中存储的值的更改。(2) RelationsCollection对象DataSet在其DataRelationCollection对象中包含关系。关系由DataRelation对象来表示,它使一个DataTable中的行与另一个DataTable中的行相关联。关系类似于可能存在于关系数据库中的主键列和外键列之间的联接路径。DataRelation标识DataSet中两个表的匹配列。关系使用户能够在DataSet中从一个表导航至另一个表。DataRelation的基本元素为关系的名称、相关表的名称以及每个表中的相关列。关系可以通过一个表的多个列来生成,方法是将一组DataColumn对象指定为键列。当关系被添加到DataRelationCollection中时,如果已对相关列值作出更改,它可能会选择添加一个UniqueKeyConstraint和一个Foreign KeyConstraint来强制完整性约束。(3) ExtendedProperties对象DataSet(以及DataTable和DataColumn)具有ExtendedProperties属性。ExtendedProperties是一个PropertyCollection,用户可以在其中放置自定义信息,例如用于生成结果集的SELECT语句或表示数据生成时间的日期/时间戳。ExtendedProperties集合与DataSet(以及DataTable和DataColumn)的架构信息一起保持。2. .NET Framework数据提供程序.NET Framework数据提供程序用于连接到数据库、执行命令和检索结果。用户可以直接处理检索到的结果,或将其放入DataSet对象,以便与来自多个源的数据或在层之间进行远程处理的数据组合在一起,以特殊方式向用户公开。下表概括了组成.NET Framework数据提供程序的4个核心对象。表1-1 .NET Framework 数据提供程序的核心对象对 象说 明Connection建立与特定数据源的连接Command对数据源执行命令。公开Parameters,并且可以从Connection在Transa ction的范围内执行DataReader从数据源中读取只进且只读的数据流DataAdapter用数据源填充DataSet并解析更新(1) Connection对象Connection对象有3种:SqlConnection,OleDbConnection和OdbcConnection。其中,SqlConnection主要用于连接SQL Server数据库。表1-2显示了部分SqlConnection属性。表1-2 SqlConnection属性属 性类 型描 述ConnectionStringstring获取或设置用来打开数据库的字符串ConnectionTimeoutint获取重试建立数据库连接时等待的秒数Databasestring获取当前数据库名DataSourcestring获取数据库服务器名PacketSizeint获取与SQL Server通信的网络分组的大小ServerVersionstring获取包含SQL Server版本的字符串StateConnection获取当前连接状态WorkstationIdstring获取字符串,此字符串标识连接SQL Server的计算机表1-3显示了部分SqlConnection方法。表1-3 SqlConnection方法方 法返 回 类 型描 述BeginTransaction()SqlTransaction重载,开始数据库事务ChangeDatabase()Void改变打开连接的当前数据库Close()Void关闭数据库连接CreateCommand()SqlCommand生成并返回一个命令对象Open()Void用连接字符串属性指定的属性设置打开数据库连接下面介绍如何使用SqlConnection对象连接SQL Server数据库。为了使用SqlConnection对象,首先需要导入System.Data.SqlClient命名空间。using System.Data.SqlClient;使用SqlConnection()构造函数生成SqlConnection对象。这个构造函数是重载的。SqlConnection()如下:SqlConnection()SqlConnection(string connectionString)其中,connectionString包含数据库连接的细节。这里,我们使用下面语句生成新的SqlConnection对象:SqlConnection myConn = new SqlConnection();然后,可以使用myConn的连接字符串属性设置数据库连接的细节,如下所示。myConn.ConnectionString = server=localhost;uid=sa;pwd=;database=student ;其中:server指定运行SQL Server的计算机名;database指定数据库名;uid指定数据库用户名;pwd指定用户密码。或者,可以将连接字符串直接传入SqlConnection()构造函数,来生成新的SqlConnection对象。例如:String connectionString = server=localhost;uid=sa;pwd=;database=student ;SqlConnection myConn = new SqlConnection(connectionString);建立了对数据源的连接后,就可以打开数据库连接。只有打开它,才可以使用SqlCommand或SqlDataAdapter对象对连接的数据源执行SQL命令或查询打开数据表。下例调用myConn对象的Open()方法:myConn.Open();完成数据库操作之后,可以调用myConn对象的Close()方法,关闭数据库连接。例如:myConn. Close();(2) Command对象Command对象有3种:SqlCommand,OleDbCommand和OdbcCommand。其中,SqlCommand主要用于对SQL Server数据库执行命令。表1-4显示了部分SqlCommand属性。表1-4 SqlCommand属性属 性类 型描 述CommandTextstring获取或设置要对数据源执行的 Transact-SQL 语句或存储过程CommandTimeoutint获取或设置在终止执行命令的尝试并生成错误之前的等待时间CommandTypeCommandType获取或设置一个值,该值指示如何解释CommandText属性Connectionstring获取或设置SqlCommand的此实例使用的数据库连接名DesignTimeVisiblebool获取或设置一个值,该值指示命令对象是否应在Windows窗体设计器控件中可见ParametersSqlParameterCollection获取提供给命令的参数TransactionSqlTransaction获取或设置将在其中执行SqlCommand的数据库事务UpdatedRowSourceUpdateRowSource获取或设置命令结果在由DbDataAdapter的Update方法使用时如何应用于DataRow表1-5显示了部分SqlCommand方法。表1-5 SqlCommand方法方 法返 回 类 型描 述Cancel()Void试图取消SqlCommand的执行CreateParameter()SqlParameter创建SqlParameter对象的新实例ExecuteNonQuery()int对连接执行Transact-SQL语句并返回受影响的行数ExecuteReader()SqlDataReader已重载。将CommandText发送到 Connection并生成一个SqlDataReader(续表) 方 法返 回 类 型描 述ExecuteScalar()object执行查询,并返回查询所返回的结果集中第一行的第一列。忽略额外的列或行ExecuteXmlReader()XmlReader将CommandText发送到Connection并生成一个XmlReader对象Prepare()void在SQL Server的实例上创建命令的一个准备版本ResetCommandTimeout()void将CommandTimeout属性重置为其默认值对数据源的连接建立并打开后,必须使用Command对象执行SQL命令才能从数据库中取得所需的数据表。所以Command对象就是对数据源执行SQL命令的工具,包括:Select,Update,Insert,Delete等,也可以调用存储过程。例如:生成SqlCommand对象有两种办法:一是使用SqlCommand构造函数,二是调用SqlConnection对象的CreateCommand()方法。若使用SqlCommand构造函数,首先要有创建一个SqlConnection对象,用于和SQL Server数据库通信。这里,我们继续使用前面创建的myConn对象。可以用下面语句生成新的SqlCommand对象:SqlCommand myCommand = new SqlCommand();然后,将myCommand对象的Connection属性设置为myConn:myCommand.Connection mySqlConnection;到此,myConn对象就可以使用myCommand对象与数据库通信了。如果不用构造函数,也可以调用SqlConnection对象的CreateCommand()方法生成Sql Command对象。例如:SqlCommand myCommand = myConn.CreateCommand(); 若要执行SQL命令,可以通过CommandText属性来设置。下例将myCommand对象的CommandText属性设置为Update语句,如下:myCommand.CommandText = Update StudentsInfo Set Sage=21 Where Sname=南潇 ;最后,用ExecuteNonQuery()方法执行SELECT语句:myCommand.ExecuteNonQuery();如果执行成功,便可将南潇的年龄改成21。(3) DataReader对象DataReader对象用Command对象从数据库中读取记录。DataReader对象有3种:SqlDataReader,OleDbDataReader和OdbcDataReader。其中,SqlDataReader主要用于从SQL Server数据库中读行。表1-6显示了部分SqlDataReader属性。表1-6 SqlDataReader属性属 性类 型描 述Depthint获取一个值,该值指示当前行的嵌套深度FieldCountint获取当前行中的列数IsClosedbool获取一个值,该值指示数据读取器是否已关闭RecordsAffectedint获取执行Transact-SQL语句所更改、插入或删除的行数表1-7显示了部分SqlDataReader方法。表1-7 SqlDataReader方法方 法返 回 类 型描 述GetBoolean()bool获取指定列的布尔值形式的值GetByte()byte获取指定列的字节形式的值GetBytes()long以指定的列偏移量将字节流读入缓冲区,并将其作为从给定的缓冲区偏移量开始的数组GetChar()char获取指定列的单个字符串形式的值GetChars()long以指定的列偏移量将字符流作为数组从给定的缓冲区偏移量开始读入缓冲区GetDataTypeName()string获取源数据类型的名称GetDateTime()DateTime获取指定列的DateTime对象形式的值GetDecimal()decimal获取指定列的Decimal对象形式的值GetDouble()double获取指定列的双精度浮点数形式的值GetFieldType()Type获取是对象的数据类型的 TypeGetFloat()float获取指定列的单精度浮点数形式的值GetGuid()Guid获取指定列的全局惟一标识符(GUID)形式的值GetInt16()Short获取指定列的16位有符号整数形式的值GetInt32()int获取指定列的32位有符号整数形式的值GetInt64()long获取指定列的64位有符号整数形式的值(续表) 方 法返 回 类 型描 述GetName()string获取指定列的名称GetOrdinal()int在给定列名称的情况下获取列序号GetScheduleTable ()DataTable返回一个DataTable,它描述SqlDataReader的列元数据GetSqlBinary()SqlBinary获取指定列的SqlBinary形式的值GetSqlBoolean()SqlBoolean获取指定列的SqlBoolean形式的值GetSqlDecimal()SqlDecimal获取指定列的SqlDecimal形式的值GetSqlDouble()SqlDouble获取指定列的SqlDouble形式的值GetSqlGuid()SqlGuid获取指定列的SqlGuid 式的值GetSqlInt16()Int16获取指定列的SqlInt16形式的值GetSqlInt32()Int32获取指定列的SqlInt32形式的值GetSqlInt64()SqlInt64获取指定列的SqlInt64形式的值GetSqlMoney()SqlMoney获取指定列的SqlMoney形式的值GetSqlSingle()SqlSingle获取指定列的SqlSingle形式的值GetSqlString()SqlString获取指定列的SqlString形式的值GetSqlValue()object获取一个表示基础SqlDbType变量的ObjectGetSqlValues()int获取当前行的集合中的所有属性列GetSqlString()SqlString获取指定列的字符串形式的值GetValue()object获取以本机格式表示的指定列的值GetValues()int获取当前行的集合中的所有属性列IsDBNull()bool获取一个值,该值指示列中是否包含不存在的或缺少的值NextResult()bool当读取批处理Transact-SQL语句的结果时,使数据读取器前进到下一个结果Readbool使SqlDataReader前进到下一条记录生成DataReader对象只能通过Command对象的ExecuteReader()方法。例如,下列代码生成所要的对象并执行一个Select语句,从数据库Student的StudentsInfo表中读取所有记录,将返回的行存放在SqlDataReader对象中。String connectionString = server=localhost;uid=sa;pwd=;database=student ;SqlConnection myConn = new SqlConnection(connectionString);SqlCommand myCommand = myConn.CreateCommand();myCommand.CommandText = Select Stu_Id, Sname, Sgender, Sage, Sdept + From StudentsInfo + Order By Stu_Id;myConn.Open();SqlDataReader myReader = myCommand.ExecuteReader();如果要从DataReader对象中取行,可以使用Read()方法。这个方法在还有可读行时返回布尔值true,否则返回布尔值false。可以从DataReader中读取一行中单独的列值,方法是在方括号中传递列名。例如,要读取Stu_Id,使用myReaderStu_Id。也可以指定需要的列,方法是在括号中传递一个数值。例如,myReaderStu_Id也返回Stu_Id列值。下面的代码演示了这两种读取列值的方法。使用列名读取列值:while ( myReader.Read() ) Console.WriteLine( myReaderStu_Id );Console.WriteLine( myReaderSname );Console.WriteLine( myReaderSgender );Console.WriteLine( myReaderSage );Console.WriteLine( myReaderSdept );使用数字列位置读取列值:while ( myReader.Read() ) Console.WriteLine( myReader0 );Console.WriteLine( myReader1 );Console.WriteLine( myReader2 );Console.WriteLine( myReader3 );Console.WriteLine( myReader4 );完成读取操作之后,可以调用Close()方法关闭myReader对象:myReader. Close();(4) DataAdapter对象DataAdapter对象有3种:SqlDataAdapter,OleDbDataAdapter和OdbcDataAdapter。其中,SqlDataAdapter对象同步DataSet对象中存储的数据与SQL Server数据库中的数据。表1-8显示了部分SqlDataAdapter属性。表1-8 SqlDataAdapter属性属 性类 型描 述AcceptChangesDuringFillbool获取或设置一个值,该值指示在任何 Fill操作过程中,在将AcceptChanges添加到DataTable之后是否针对DataRow调用它ContinueUpdateOnErrorbool获取或设置一个值,该值指定在行更新过程中遇到错误时是否生成异常SelectCommandSqlCommand获取或设置一个Transact-SQL语句或存储过程,用于在数据源中选择记录InsertCommandSqlCommand获取或设置一个Transact-SQL语句或存储过程,以在数据源中插入新记录DeleteCommandSqlCommand获取或设置一个Transact-SQL语句或存储过程,以从数据集删除记录UpdateCommandSqlCommand获取或设置一个Transact-SQL语句或存储过程,用于更新数据源中的记录MissingMappingActionMissingMappingAction确定传入数据没有匹配的表或列时需要执行的操作MissingSchemaActionMissingSchemaAction确定现有DataSet架构与传入数据不匹配时需要执行的操作TableMappingsDataTableMapping-Collection获取一个集合,它提供源表和DataTable之间的主映射表1-9显示了部分SqlDataAdapter方法。表1-9 SqlDataAdapter方法方 法返 回 类 型描 述Fill()int已重载。已重写。在DataSet中添加或刷新行以匹配数据源中的行FillSchema()DataTable 已重载。已重写。将DataTable添加到DataSet 中,并配置架构以匹配数据源中的架构GetFillParameters()IDataParameter 已重写。获取当执行SQL SELECT语句时由用户设置的参数Update()int已重载。为DataSet中每个已插入、已更新或已删除的行调用相应的INSERT、UPDATE 或 DELETE语句使用SqlDataAdapter ()构造函数生成SqlDataAdapter对象。这个构造函数是重载的。SqlDataAdapter ()如下:SqlDataAdapter ()SqlDataAdapter (SqlCommand mySqlCommand)SqlDataAdapter (String selectCommandString, SqlConnection mySqlConnection)SqlDataAdapter (String selectCommandString, String connectionString)其中,mySqlCommand指定SqlCommand对象,selectCommandString指定Select语句或存储过程调用,mySqlConnection指定SqlConnection,connectionString指定连接数据库的连接字符串。下例使用SqlDataAdapter ()构造函数生成SqlDataAdapter对象:SqlDataAdapter myAdapter = new SqlDataAdapter ();用myAdapter建立DataSet对象之前,要将其SelectCommand属性设置为包含Select语句或存储过程的SqlCommand对象。下面将生成SqlCommand对象,并将CommandText属性设置为Select语句,从StudentsInfo表中读取所有记录,将myAdapter的Select Command属性设置为这个SqlCommand对象。SqlCommand myCommand = myConn.CreateCommand();myCommand.CommandText = Select Stu_Id, Sname, Sgender, Sage, Sdept + From StudentsInfo + Order By Stu_Id;myAdapter.SelectCommand = myCommand;下例使用SqlDataAdapter (SqlCommand mySqlCommand)构造函数生成SqlDataAdapter对象:SqlDataAdapter myAdapter = new SqlDataAdapter (myCommand);下例使用SqlDataAdapter (String selectCommandString, SqlConnection mySqlConnection)构造函数生成SqlDataAdapter对象:SqlConnection myConn = new SqlConnection( server=localhost;uid=sa;pwd=;database=student );String selectCommandString = Select Stu_Id, Sname, Sgender, Sage, Sdept + From StudentsInfo + Order By Stu_Id;SqlDataAdapter myAdapter = new SqlDataAdapter (selectCommandString, myConn);最后,使用SqlDataAdapter (String selectCommandString, String connectionString)构造函数生成SqlDataAdapter对象:String selectCommandString = Select Stu_Id, Sname, Sgender, Sage, Sdept + From StudentsInfo + Order By Stu_Id;String connectionString = server=localhost;uid=sa;pwd=;database=student ;SqlDataAdapter myAdapter = new SqlDataAdapter (selectCommandString, connectionString);创建DataAdapter对象之后,就可以使用Fill()方法填充DataSet对象了。例如:DataSet myDataSet = new DataSet();myAdapter.Fill(myDataSet, StudentsInfo);上例中,我们将StudentsInfo表中的行填充到了DataSet对象中。1.1.3 数据绑定控件使用ADO.NET连接数据库并创建DataSet,主要是为了显示和操作数据库中的数据。要在Web程序中实现数据的显示和操作,则必须将数据与页面中的控件绑定起来,通过控件来显示和处理数据。ASP.NET提供了Repeater,DataList和DataGrid 3种服务器端控件。这些控件将数据集合表现为基于HTML的界面。Repeater,DataList,DataGrid控件是System.Web.UI.WebControls命名空间(Namespace)里几个相关的页面组件。这些控件把绑定到它们的数据通过HTML表现出来,它们又被称为“列表绑定控件”(list-boundcontrols)。和其他Web组件一样,这些组件不仅提供了一个一致的编程模型,而且封装了与浏览器版本相关的HTML逻辑。这种特点使得程序员可以针对这个对象模型编程,而无须考虑各种浏览器版本的差别和不一致性。这三个控件具有把它们的相关数据“翻译”成各种外观的能力。这些外观包括表格、多列列表或者任何的HTML流。同时,它们也允许创建任意的显示效果。除此之外,它们还封装了处理提交数据、状态管理、事件激发的功能。最后,它们还提供了各种级别的标准操作,包括选择、编辑、分页、排序,等等。使用这些控件,可以轻松地完成如下的Web应用:报表、购物推车、产品列表、查询结果显示、导航菜单,等等。因篇幅所限,这三个控件的工作机理就不再进行介绍了,读者可以查阅相应的技术文档。1.2 概 述酒店客房管理系统的主要任务是对酒店的客房进行管理,使用户能轻松地找到所需要的客房信息,提供订房和退房服务,并对酒店客房的业绩进行统计。图10-3是一个典型的酒店客房管理系统的界面。图1-3 典型的酒店客房管理系统界面在不同的酒店之间,酒店客房管理系统会存在一些差异。通常,酒店客房管理系统的主要功能包括以下几个方面。 (1) 用户信息管理:对酒店客房管理系统的使用员工进行管理,包括对员工的基本信息(如用户姓名、所属部门、用户类型等)进行检索、录入和修改。(2) 客房类型管理:用户可自定义客房类型,并对其进行管理,包括对客房类型的基本信息(如类型名称、面积、床位、价格等)进行检索、录入和修改。(3) 客房信息管理:用户对客房信息进行管理,包括对客房的基本信息(如客房号、客房类型、客房位置等)进行检索、录入和修改。(4) 客房经营管理:实现对客房的订房和退房管理,包括对客房的业务信息(如客房号、入房时间、退房时间、金额等)进行检索、录入和修改。 (5) 客户信息查询:用户可对入住过酒店的客户信息进行查询,包括对客户的基本信息(如身份证号、客户姓名、联系电话)进行检索。(6) 经营状况统计:根据酒店客房的业务记录,用户可选择不同的统计方式对营业额进行统计。从功能描述的内容来看,本实例可以实现六大功能。我们根据这些功能,设计出系统的功能模块,如图1-4所示。 图1-4 酒店客房管理系统功能模块示意图读者只要根据本酒店的具体情况,补充完善上述功能,就可以应用到实际应用中去。酒店客房管理系统作为当前使用非常广泛的数据库应用系统之一,其开发过程包括需求分析、UML系统建模、数据库分析和设计以及各功能模块的实现。我们将在后面几节中详细讲述。1.3 需 求 分 析需求分析阶段是酒店客房管理系统开发最重要的阶段。开发者首先要了解和澄清用户的需求,然后严格地定义该系统的需求规格说明书。这里我们将需求分析分为两个过程,一是理解需求,二是分析需求,下面分别讲解。1.3.1 理解需求理解需求是在问题及其最终解决方案之间架设桥梁的第一步。开发者只有和客户充分理解了需求之后才能开始设计系统,否则,对需求定义的任何改进,在设计上都必须大量的返工。下面是经过双方调研后得到的需求规格说明。(1) 系统界面采用Web方式,界面应简洁明了,用户可方便浏览和查找客房信息。该系统的用户有两种类型:一是管理员,二是服务员,两者应具有不同的权限。(2) 系统需对用户登录进行管理。使用各功能模块时,系统应验证用户身份的有效性,否则要求用户登录。另外,允许用户对自己的密码进行修改。(3) 系统应提供客房的分类管理功能,可分类制订客房面积、价格、是否配备空调等客房类型,对不同标准的客房进行有效管理。系统可实现对客房信息的添加、删除以及修改。 (4) 在进行订房/退房管理时,系统可以根据客房当前的状态自动提示可用服务(订房/退房)。如果客房没有客人入住,则该客房的可用服务为“订房”;否则,可用服务为“退房”。(5) 系统在各功能模块的实现当中,提供多级分类检索和组合搜索。(6) 系统的客户端在Windows平台下运行,服务器端可在Windows平台或UNIX平台下运行。系统还需要有较好的安全性和可扩展性。1.3.2 需求分析需求分析是从客户的需求中提取出软件系统能够帮助用户解决的业务问题,通过对用户业务问题的分析,规划出系统的功能模块,即定义用例。这个步骤是对理解需求的升华,直接关系到该系统的质量。 经过开发者同客户的需求分析后,确定酒店客房管理系统的功能模块(用例)包括: 用户信息管理 客房类型管理 客房信息管理 客房经营管理 客户信息查询 经营状况统计酒店系统完全采用Web方式,由前台和后台管理两个部分组成。前台作为与用户直接交互的可视化界面,由于使用方便,能将系统的各个功能提供给用户,以帮助用户进行客房管理。酒店系统前台的结构图如图1-5所示。图1-5 酒店客房管理系统前台结构图前台在考虑功能实现的同时,也考虑了操作的简洁和方便性,目的是让大多数客户能够轻松地享受电子商务给他们带来的便利。为了确保客户和酒店的信息具有更好的安全性,前台管理和后台管理是分离的。前台的各管理模块需要经过权限授权才可以使用,我们为此设计了两个角色:一是酒店管理员,二是前台服务员。其中: 酒店管理员享有最高权限,可以使用酒店客房管理系统所提供的所有功能,包括员工信息管理、客房类型管理、客房信息管理、客房经营管理、客户信息查询、经营状况统计、个人密码修改以及注销功能。 前台服务员的主要职能是负责订房和退房,以及查询入住的客户信息。所有该角色只可以使用部分功能,包括客房经营管理、客户信息查询、个人密码修改以及注销功能。后台管理主要由数据库系统作为支持,后台管理的维护工作主要由系统管理员进行,包括完成对各个数据表单的维护、数据库的备份及恢复等工作,本实例我们选用的数据库系统为SQL Server 2000。1.4 UML系统建模需求分析完成后,接下来的工作是对系统建模。因为UML很适合于对逻辑数据库模式和物理数据库模式建模,所以我们对系统进行UML建模。下面是酒店客房管理系统的 UML建模过程。这里我们将使用Rational Rose进行UML建模。1.4.1 酒店客房管理系统的用例分析系统的用例分析是UML建模的第一步。在上一节需求分析中,我们已经确定了酒店客房管理系统的各功能模块(用例),包括用户信息管理、客房类型管理、客房信息管理、客房经营管理、客户信息查询、经营状况统计等。其用例图如图1-6所示。图1-6 酒店客房管理系统用例图该用例图标记了酒店客房管理系统的所有用例,并且形象地描述了各用例与用户角色之间的关系。用例图所表示的各用例的作用以及各用户角色的权限因篇幅所限不再赘述,请读者参看上一节的需求分析部分。1.4.2 酒店客房管理系统的域类分析接下来我们对系统进行域类分析。由于类图用于对系统的静态设计视图建模,支持系统的功能需求(即系统要提供的最终服务),因此我们在此使用类图来进行域类分析。域类分析是建立在用例分析基础上的,我们根据用例来确定酒店客房管理系统中所要用到的类及类间的关系,从而得到域类图,如图1-7所示。在域类分析时,设计该系统的类图应注意以下两点。(1) 对数据对象类的确定确定对象类时需要考虑:结合数据库细节,定义类的标记值,展开这些类的结构性细节,即属性的细节。根据酒店客房管理系统的用例分析,我们确定所用到的类主要包括:用户信息(UsersInfo)、客户信息(CustomersInfo)、客房类型(RoomCategory)、客房信息(RoomsInfo)、客房状态(RoomStatus)、客房业务(RoomOperation)、业务记录(History)。(2) 对各类间关联的确定观

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论