《酒店客户住宿服务管理系统.doc》由会员分享,可在线阅读,更多相关《酒店客户住宿服务管理系统.doc(51页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、酒店客户住宿服务管理系统【摘要】随着社会服务行业的发展,使用管理软件来管理整个宾馆企业的要求也逐年升温,有条件的酒店或宾馆都采用了相关的酒店管理系统,以解决宾馆全凭原始的手工记录管理,效率低、易出错的缺陷。宾馆行业对自身提供服务的质量和能力也有了更高的要求,宾馆信息管理系统正因此而越来越受到重视。宾馆信息管理系统主要实现宾馆酒店的客房管理、客户信息管理、客户添加管理、客户修改管理、客户删除管理功能。 一个宾馆信息管理系统应该包括基本的客房信息管理、客房客户信息管理、入住退房信息管理等相关的信息管理。所以整个宾馆信息管理系统分为两大部分,即后台的数据库管理维护和前台的操作。后台数据库的管理能保证
2、系统各项功能的正常运行,前台操作能提供给宾馆客户尽可能方便快捷的服务。关键词:宾馆信息管理系统,数据库,服务Abstract: With the development of social services sectors, the use of management software to manage the entire hotel business requirements are also gradually warming up, the hotel or guesthouse conditional use of the relevant hotel management sys
3、tem to address the guesthouse entirely original manual records management, low efficiency , Error-prone defects. Hotel industry on their own quality of services provided and ability to have higher requirements, hotel information management systems and are therefore more attention. Hotel Information
4、Management System main hotel rooms hotel management, customer information management, customer add management, customer modify management, customer management features deleted. A guesthouse information management system should include basic information management rooms, rooms, information management
5、, Check-In Check-Out information management, and other related information management. Therefore, the entire hotel information management system is divided into two major parts, namely the background database maintenance and future management of the operation. Background database management system t
6、o ensure the normal operation of various functions, the outlook for hotel operators can provide to clients as far as possible, convenient and efficient service.Key words: hotel management information system, database, service目 录1.NET对数据库开发的支持31.1ADO.NET概述31.2ADO.NET组件31.3数据绑定控件132概述143需求分析143.1理解需求1
7、43.2需求分析154数据库设计164.1创建数据库164.2创建表174.3创建存储过程215连接数据库266页面设计及相关代码分析296.1酒店客房管理系统首页设计及其代码分析296.2客房信息管理页面设计及其代码分析316.3客房信息添加/修改页面设计及其代码分析346.4客房经营管理页面设计及其代码分析396.5订房/退房管理页面设计及其代码分析436.6经营状况统计页面设计及其代码分析467实例演示49结束语50谢辞51文献521 .NET对数据库开发的支持大多数C# 应用程序都是围绕读取和更新数据库中的信息展开的。为了允许在分布式、可缩放应用程序中实现数据集成,Visual Stu
8、dio .NET 提供对新一代数据访问技术 ADO .NET的支持。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支
9、持多种开发需求,包括创建由应用程序、工具、语言或Internet浏览器使用的前端数据库客户端和中间层业务对象。ADO .NET提供对Microsoft SQL Server等数据源以及通过OLE DB和XML公开的数据源的一致访问。数据共享使用者应用程序可以使用ADO .NET来连接到这些数据源,并检索、操作和更新数据。在介绍如何实现ADO .NET访问SQL Server 2000数据库前,有必要介绍一下ADO .NET中的一个核心元素,它是.NET Framework数据提供程序,其组件的设计目的相当明确:为了实现数据操作和对数据的快速、只进、只读访问。Connection对象提供与数据源
10、的连接。Command对象使用户能够访问用于返回数据、修改数据、运行存储过程以及发送或检索参数信息的数据库命令。DataReader从数据源中提供高性能的数据流。最后,DataAdapter提供连接DataSet对象和数据源的桥梁。DataAdapter使用Command对象在数据源中执行SQL命令,以便将数据加载到DataSet中,并使对DataSet中数据的更改与数据源保持一致。1.2 ADO.NET组件为了实现对数据库的访问,ADO .NET定义了两个核心组件:DataSet和.NET Framework数据提供程序,后者是一组包括Connection,Command,DataReade
11、r和DataAdapter对象在内的组件。1. DataSetDataSet对象是支持ADO.NET的断开式、分布式数据方案的核心对象。DataSet的设计目的很明确:为了实现独立于任何数据源的数据访问。因此,它可以用于多种不同的数据源,用于XML数据,或用于管理应用程序本地的数据。DataSet包含一个或多个DataTable对象的集合,这些对象由数据行和数据列以及主键、外键、约束和有关DataTable对象中数据的关系信息组成。(1) DataTablesCollection对象DataSet里的表(Table)是用DataTable来表示的。一个DataSet包含DataTable对象所
12、表示的零个或更多个表的集合。DataTableCollection包含DataSet中的所有DataTable对象。DataTable在System.Data命名空间中定义,表示内存驻留数据表。它包含 DataColumn Collection所表示的列和ConstraintCollection所表示的约束的集合,这些列和约束一起定义了该表的架构。DataTable还包含DataRowCollection所表示的行的集合,而DataRow Collection则包含表中的数据。除了其当前状态之前,DataRow还会保留其当前版本和初始版本,以标识对行中存储的值的更改。(2) Relations
13、Collection对象DataSet在其DataRelationCollection对象中包含关系。关系由DataRelation对象来表示,它使一个DataTable中的行与另一个DataTable中的行相关联。关系类似于可能存在于关系数据库中的主键列和外键列之间的联接路径。DataRelation标识DataSet中两个表的匹配列。关系使用户能够在DataSet中从一个表导航至另一个表。DataRelation的基本元素为关系的名称、相关表的名称以及每个表中的相关列。关系可以通过一个表的多个列来生成,方法是将一组DataColumn对象指定为键列。当关系被添加到DataRelationC
14、ollection中时,如果已对相关列值作出更改,它可能会选择添加一个UniqueKeyConstraint和一个Foreign KeyConstraint来强制完整性约束。(3) ExtendedProperties对象DataSet(以及DataTable和DataColumn)具有ExtendedProperties属性。ExtendedProperties是一个PropertyCollection,用户可以在其中放置自定义信息,例如用于生成结果集的SELECT语句或表示数据生成时间的日期/时间戳。ExtendedProperties集合与DataSet(以及DataTable和Data
15、Column)的架构信息一起保持。2. .NET Framework数据提供程序.NET Framework数据提供程序用于连接到数据库、执行命令和检索结果。用户可以直接处理检索到的结果,或将其放入DataSet对象,以便与来自多个源的数据或在层之间进行远程处理的数据组合在一起,以特殊方式向用户公开。下表概括了组成.NET Framework数据提供程序的4个核心对象。表1-1 .NET Framework 数据提供程序的核心对象对 象说 明Connection建立与特定数据源的连接Command对数据源执行命令。公开Parameters,并且可以从Connection在Transa ctio
16、n的范围内执行DataReader从数据源中读取只进且只读的数据流DataAdapter用数据源填充DataSet并解析更新(1) Connection对象Connection对象有3种:SqlConnection,OleDbConnection和OdbcConnection。其中,SqlConnection主要用于连接SQL Server数据库。表1-2显示了部分SqlConnection属性。表1-2 SqlConnection属性属 性类 型描 述ConnectionStringstring获取或设置用来打开数据库的字符串ConnectionTimeoutint获取重试建立数据库连接时等
17、待的秒数Databasestring获取当前数据库名DataSourcestring获取数据库服务器名PacketSizeint获取与SQL Server通信的网络分组的大小ServerVersionstring获取包含SQL Server版本的字符串StateConnection获取当前连接状态WorkstationIdstring获取字符串,此字符串标识连接SQL Server的计算机表1-3显示了部分SqlConnection方法。表1-3 SqlConnection方法方 法返 回 类 型描 述BeginTransaction()SqlTransaction重载,开始数据库事务Chan
18、geDatabase()Void改变打开连接的当前数据库Close()Void关闭数据库连接CreateCommand()SqlCommand生成并返回一个命令对象Open()Void用连接字符串属性指定的属性设置打开数据库连接下面介绍如何使用SqlConnection对象连接SQL Server数据库。为了使用SqlConnection对象,首先需要导入System.Data.SqlClient命名空间。using System.Data.SqlClient;使用SqlConnection()构造函数生成SqlConnection对象。这个构造函数是重载的。SqlConnection()如下
19、:SqlConnection()SqlConnection(string connectionString)其中,connectionString包含数据库连接的细节。这里,我们使用下面语句生成新的SqlConnection对象:SqlConnection myConn = new SqlConnection();然后,可以使用myConn的连接字符串属性设置数据库连接的细节,如下所示。myConn.ConnectionString = server=localhost;uid=sa;pwd=;database=student ;其中:server指定运行SQL Server的计算机名;dat
20、abase指定数据库名;uid指定数据库用户名;pwd指定用户密码。或者,可以将连接字符串直接传入SqlConnection()构造函数,来生成新的SqlConnection对象。例如:String connectionString = server=localhost;uid=sa;pwd=;database=student ;SqlConnection myConn = new SqlConnection(connectionString);建立了对数据源的连接后,就可以打开数据库连接。只有打开它,才可以使用SqlCommand或SqlDataAdapter对象对连接的数据源执行SQL命令
21、或查询打开数据表。下例调用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 语句或存储
22、过程CommandTimeoutint获取或设置在终止执行命令的尝试并生成错误之前的等待时间CommandTypeCommandType获取或设置一个值,该值指示如何解释CommandText属性Connectionstring获取或设置SqlCommand的此实例使用的数据库连接名DesignTimeVisiblebool获取或设置一个值,该值指示命令对象是否应在Windows窗体设计器控件中可见ParametersSqlParameterCollection获取提供给命令的参数TransactionSqlTransaction获取或设置将在其中执行SqlCommand的数据库事务Updat
23、edRowSourceUpdateRowSource获取或设置命令结果在由DbDataAdapter的Update方法使用时如何应用于DataRow表1-5显示了部分SqlCommand方法。表1-5 SqlCommand方法方 法返 回 类 型描 述Cancel()Void试图取消SqlCommand的执行CreateParameter()SqlParameter创建SqlParameter对象的新实例ExecuteNonQuery()int对连接执行Transact-SQL语句并返回受影响的行数ExecuteReader()SqlDataReader已重载。将CommandText发送到
24、Connection并生成一个SqlDataReaderExecuteScalar()object执行查询,并返回查询所返回的结果集中第一行的第一列。忽略额外的列或行ExecuteXmlReader()XmlReader将CommandText发送到Connection并生成一个XmlReader对象Prepare()void在SQL Server的实例上创建命令的一个准备版本ResetCommandTimeout()void将CommandTimeout属性重置为其默认值对数据源的连接建立并打开后,必须使用Command对象执行SQL命令才能从数据库中取得所需的数据表。所以Command对象
25、就是对数据源执行SQL命令的工具,包括:Select,Update,Insert,Delete等,也可以调用存储过程。例如:生成SqlCommand对象有两种办法:一是使用SqlCommand构造函数,二是调用SqlConnection对象的CreateCommand()方法。若使用SqlCommand构造函数,首先要有创建一个SqlConnection对象,用于和SQL Server数据库通信。这里,我们继续使用前面创建的myConn对象。可以用下面语句生成新的SqlCommand对象:SqlCommand myCommand = new SqlCommand();然后,将myCommand
26、对象的Connection属性设置为myConn:myCommand.Connection mySqlConnection;到此,myConn对象就可以使用myCommand对象与数据库通信了。如果不用构造函数,也可以调用SqlConnection对象的CreateCommand()方法生成Sql Command对象。例如:SqlCommand myCommand = myConn.CreateCommand(); 若要执行SQL命令,可以通过CommandText属性来设置。下例将myCommand对象的CommandText属性设置为Update语句,如下:myCommand.Comman
27、dText = 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显示了部分SqlDa
28、taReader属性。表1-6 SqlDataReader属性属 性类 型描 述Depthint获取一个值,该值指示当前行的嵌套深度FieldCountint获取当前行中的列数IsClosedbool获取一个值,该值指示数据读取器是否已关闭RecordsAffectedint获取执行Transact-SQL语句所更改、插入或删除的行数表1-7显示了部分SqlDataReader方法。表1-7 SqlDataReader方法方 法返 回 类 型描 述GetBoolean()bool获取指定列的布尔值形式的值GetByte()byte获取指定列的字节形式的值GetBytes()long以指定的列偏
29、移量将字节流读入缓冲区,并将其作为从给定的缓冲区偏移量开始的数组GetChar()char获取指定列的单个字符串形式的值GetChars()long以指定的列偏移量将字符流作为数组从给定的缓冲区偏移量开始读入缓冲区GetDataTypeName()string获取源数据类型的名称GetDateTime()DateTime获取指定列的DateTime对象形式的值GetDecimal()decimal获取指定列的Decimal对象形式的值GetDouble()double获取指定列的双精度浮点数形式的值GetFieldType()Type获取是对象的数据类型的 TypeGetFloat()floa
30、t获取指定列的单精度浮点数形式的值GetGuid()Guid获取指定列的全局惟一标识符(GUID)形式的值GetInt16()Short获取指定列的16位有符号整数形式的值GetInt32()int获取指定列的32位有符号整数形式的值GetInt64()long获取指定列的64位有符号整数形式的值GetName()string获取指定列的名称GetOrdinal()int在给定列名称的情况下获取列序号GetScheduleTable ()DataTable返回一个DataTable,它描述SqlDataReader的列元数据GetSqlBinary()SqlBinary获取指定列的SqlBin
31、ary形式的值GetSqlBoolean()SqlBoolean获取指定列的SqlBoolean形式的值GetSqlDecimal()SqlDecimal获取指定列的SqlDecimal形式的值GetSqlDouble()SqlDouble获取指定列的SqlDouble形式的值GetSqlGuid()SqlGuid获取指定列的SqlGuid 式的值GetSqlInt16()Int16获取指定列的SqlInt16形式的值GetSqlInt32()Int32获取指定列的SqlInt32形式的值GetSqlInt64()SqlInt64获取指定列的SqlInt64形式的值GetSqlMoney()S
32、qlMoney获取指定列的SqlMoney形式的值GetSqlSingle()SqlSingle获取指定列的SqlSingle形式的值GetSqlString()SqlString获取指定列的SqlString形式的值GetSqlValue()object获取一个表示基础SqlDbType变量的ObjectGetSqlValues()int获取当前行的集合中的所有属性列GetSqlString()SqlString获取指定列的字符串形式的值GetValue()object获取以本机格式表示的指定列的值GetValues()int获取当前行的集合中的所有属性列IsDBNull()bool获取一个
33、值,该值指示列中是否包含不存在的或缺少的值NextResult()bool当读取批处理Transact-SQL语句的结果时,使数据读取器前进到下一个结果Readbool使SqlDataReader前进到下一条记录生成DataReader对象只能通过Command对象的ExecuteReader()方法。例如,下列代码生成所要的对象并执行一个Select语句,从数据库Student的StudentsInfo表中读取所有记录,将返回的行存放在SqlDataReader对象中。String connectionString = server=localhost;uid=sa;pwd=;databas
34、e=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
35、对象中取行,可以使用Read()方法。这个方法在还有可读行时返回布尔值true,否则返回布尔值false。可以从DataReader中读取一行中单独的列值,方法是在方括号中传递列名。例如,要读取Stu_Id,使用myReaderStu_Id。也可以指定需要的列,方法是在括号中传递一个数值。例如,myReaderStu_Id也返回Stu_Id列值。下面的代码演示了这两种读取列值的方法。使用列名读取列值:while ( myReader.Read() ) Console.WriteLine( myReaderStu_Id );Console.WriteLine( myReaderSname );C
36、onsole.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 );完成
37、读取操作之后,可以调用Close()方法关闭myReader对象:myReader. Close();(4) DataAdapter对象DataAdapter对象有3种:SqlDataAdapter,OleDbDataAdapter和OdbcDataAdapter。其中,SqlDataAdapter对象同步DataSet对象中存储的数据与SQL Server数据库中的数据。表1-8显示了部分SqlDataAdapter属性。表1-8 SqlDataAdapter属性属 性类 型描 述AcceptChangesDuringFillbool获取或设置一个值,该值指示在任何 Fill操作过程中,在将
38、AcceptChanges添加到DataTable之后是否针对DataRow调用它ContinueUpdateOnErrorbool获取或设置一个值,该值指定在行更新过程中遇到错误时是否生成异常SelectCommandSqlCommand获取或设置一个Transact-SQL语句或存储过程,用于在数据源中选择记录InsertCommandSqlCommand获取或设置一个Transact-SQL语句或存储过程,以在数据源中插入新记录DeleteCommandSqlCommand获取或设置一个Transact-SQL语句或存储过程,以从数据集删除记录UpdateCommandSqlComman
39、d获取或设置一个Transact-SQL语句或存储过程,用于更新数据源中的记录MissingMappingActionMissingMappingAction确定传入数据没有匹配的表或列时需要执行的操作MissingSchemaActionMissingSchemaAction确定现有DataSet架构与传入数据不匹配时需要执行的操作TableMappingsDataTableMapping-Collection获取一个集合,它提供源表和DataTable之间的主映射表1-9显示了部分SqlDataAdapter方法。表1-9 SqlDataAdapter方法方 法返 回 类 型描 述Fill
40、()int已重载。已重写。在DataSet中添加或刷新行以匹配数据源中的行FillSchema()DataTable 已重载。已重写。将DataTable添加到DataSet 中,并配置架构以匹配数据源中的架构GetFillParameters()IDataParameter 已重写。获取当执行SQL SELECT语句时由用户设置的参数Update()int已重载。为DataSet中每个已插入、已更新或已删除的行调用相应的INSERT、UPDATE 或 DELETE语句使用SqlDataAdapter ()构造函数生成SqlDataAdapter对象。这个构造函数是重载的。SqlDataAda
41、pter ()如下:SqlDataAdapter ()SqlDataAdapter (SqlCommand mySqlCommand)SqlDataAdapter (String selectCommandString, SqlConnection mySqlConnection)SqlDataAdapter (String selectCommandString, String connectionString)其中,mySqlCommand指定SqlCommand对象,selectCommandString指定Select语句或存储过程调用,mySqlConnection指定SqlConn
42、ection,connectionString指定连接数据库的连接字符串。下例使用SqlDataAdapter ()构造函数生成SqlDataAdapter对象:SqlDataAdapter myAdapter = new SqlDataAdapter ();用myAdapter建立DataSet对象之前,要将其SelectCommand属性设置为包含Select语句或存储过程的SqlCommand对象。下面将生成SqlCommand对象,并将CommandText属性设置为Select语句,从StudentsInfo表中读取所有记录,将myAdapter的Select Command属性设置
43、为这个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
44、 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 St
45、udentsInfo + 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
46、 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表中的行填充到了