宾馆客房管理系统论文Word文档下载推荐.docx
《宾馆客房管理系统论文Word文档下载推荐.docx》由会员分享,可在线阅读,更多相关《宾馆客房管理系统论文Word文档下载推荐.docx(21页珍藏版)》请在冰豆网上搜索。
![宾馆客房管理系统论文Word文档下载推荐.docx](https://file1.bdocx.com/fileroot1/2023-1/21/3fbc1f9e-14a8-49ef-8a8d-204eaaeaa87c/3fbc1f9e-14a8-49ef-8a8d-204eaaeaa87c1.gif)
客房
编号
类型
数量
入住情况
价格
信息
客户信息
来自地的地名
入住时间
预计住宿天数
退房时间
需要费用
第三章数据库逻辑设计
3.1将数据库的概念模型转换为关系模型:
实体转换成的关系模式有:
客房信息(编号,入住价格,入住情况,退房)
客户(姓名,出生年月,基本信息)
客户公司(公司id,公司名称、省份id)
由联系转换成的关系模式有:
登记(房间号,入住日期)
因为客房与客户是一比多联系,所以可以取消登记这个实体,在客房实体中添加客户号属性。
各关系模式为:
用户(用户账号,姓名,性别,年龄,电话号码,家庭住址,公司id,入住时间,退房时间,客户意见)
公司(公司id,公司名)
城市(城市id,城市名称、省份id)
第四章数据库与数据表设计
4.1
数据库设计是根据系统功能的要求和数据规模规划数据库服务器选型、数据表结构定义、分配数据库服务器端的功能实现以及创建数据库对象。
在SQL数据库中需要建立3个数据表:
物资信息数据表、仓库信息数据表和货架类型数据表。
(1)数据库与数据表设计
①Amd用来保存登录用户帐号和密码
AMD信息包括:
高级管理员和普通管理员.
表1Amd表
字段名称
数据类型
是否为空
AmdTypeName
char(10)
否
AmdName
AmdPwd
②BalBal是用来保存房间信息
BalID
RoomID
int
RoomTypeName
RoomPrice
ClientName
IDNo
char(18)
OpenRoomTime
detetime
EndTime
Days
RoomMoney
③D保存收费信息
ZID
RoomTotal
datetime
FactMoney
ChangeMoney
④Destine
Destine用来保存入住情况
ClientSex
ClientAdd
char(100)
是
Prepay
⑤Room
Room用来保存房间状态信息
RoomState
(2)数据完整性设计
设计好表的结构后,需要根据实际应用和操作规则为表制定一系列约束和规则,从而达到保证数据完整性原则的目的。
①主键约束、非空值约束
在三个表的设计中已经规定了每个表的主键列、非空列,这些规定都是在实际应用环境中所必需的。
比如tblschool表中定义了货架号rNum为主键,则在表tblschool中rNum必须是惟一的——一个饭店不可能出现两个货架号码相同的货架;
物资类型rType和仓库状态rStats不能为空值,因为rType是辨别入库物资种类的依据,所以不能为空值;
rStats是辨别物资,所以也不能为空值。
②CHECK约束
对于tblClient表,应该建立一个检查约束。
按下列步骤创建这个约束:
1)打开企业管理器,展开服务器,展开“数据库”,展开“KFGL”数据库,单击“表”。
2)用鼠标右键单击“tblClient”表,选择“设计表”,系统将弹出“设计表”对话窗口。
3)用鼠标右键单击此窗口的上方窗格,单击“CHECK约束”,单击“新建”按钮,在“约束表达式”文本框中输入表达式:
([cOutTime)=[cInTime])。
4)选择“对INSERT和UPDATE操作强制约束”复选框,单击“关闭”按钮,完成CHECK约束创建操作。
③使用缺省值
可以将三个数据表中所有货币类型的列都定义为缺省值,特别是指定了“非空”约束的列。
tblClient表的入库天数cDay的默认值可定义为1,而物资入库时间cInTime的缺省值应该就是添加物资记录的时间(除非是客房预定,在本系统中暂不考虑入库预定),所以可以设定缺省值为“(GETDATE())”。
④惟一约束
除了每个表的主键需定义为惟一性外,对于tblschoolType的物资类型名rName,也应该定义为惟一的名称。
因为在系统功能需求中,要求按货架类型对数据进行统计,如果在统计结果中只显示物资类型编号,用户就必须记忆那种类型是什么编号,这样很不直观。
所以应按照相关的SQLSener数据库教材中建立惟一约束的方法进行创建。
⑤外键约束
在数据表设计中已经讨论了各个表的外键,这里以tblClient为例说明创建步骤,tblschool和tblschoolType表可以按照相同的步骤进行操作。
3)用鼠标右键单击此窗口的上方窗格,单击“关系”,在“主键表”下拉框中选择“tblschool”,在“外键表”中选择“tblClient”。
4)在“主键表”和“外键表”下方的窗格中部选择列名“rNum”,表明出tblRoom表中的主键“rNum”就是tblClient表中的外键。
5)选择“对INSERT和UPDATE操作强制约束”复选框,表明以后对tblClient表中的rNum所有的添加和更新操作都会检查在tblschool表中是否存在与此相应的rNum。
单击“关闭”按钮,完成创建外键操作。
⑥规则
为了检查tblClient表中输入的物资号码CPNUM是有效位数,可以创建一个规则绑定到该列;
在数据操作时进行检查。
规则的定义语句为:
(LEN((@CardNum)=15)OR(LEN(@CardNum)=18)
创建和绑定的方法及步骤请参见教材中的相关内容。
⑦标识列
在设计物资信息表tblClient时,我们把用户序号cId定义为标识列,使其在添加记录时自动产生序号,并且每个序号惟一地标识一次用户信息。
完成数据完整性设计后,录入模拟数据。
第五章关系图的建立
5.1
关系是表之间的链接,用一个表中的外健引用另一个表中的主健。
关系线的终结点显示一个主键符号一表示主键到外键的关系,或者显示一个无穷符号以表示一对多关系的外键端。
使用SQLServer7/2000的企业管理器创建关系图,步骤如下:
(1)启动SQLServer企业管理器,并打开“创建数据库关系图向导”窗口。
(2)根据向导页一步步开始关系图的创建。
例为KFGL数据库中的用户信息数据(tbClient)表、城市信息数据(tbltb)表和学校类型数据(tbltblschoolType)表创建关系图。
(1)从“开始”菜单中的SQLServer程序组中启动SQLServer企业管理器,打开“SQLServerEnterpriseManager”窗口。
(2)在左边的目录树结构中选择要创建关系图的数据库文件夹,如“kfgl”文件夹,并在右边的对象窗口中选择并打开其中的“关系图”对象;
图1打开“SQLServerEnterpriseManager”窗口
(3)从“操作”菜单中选择“新建数据库关系图”命令,打开SQLServer的“创建数据库关系图向导”窗口,如图2所示。
图2“创建数据库关系图向导”窗口
(4)单击“下一步”按钮,进入“选择要添加的表”页面,如图3所示。
图3“选择要添加的表”页面
先在左边的“可用的表”列表框中选择要添加的表,如果要系统自动添加选中表的相关表,可以选中列表框下的“自动添加相关的表”复选框,然后单击“添加”按钮。
这时,在右边的“要添加到关系图中的表”列表框中就会出现选中的表。
(5)单击“下一步”按钮,进入“正在完成数据库关系图向导”页面,如图4所示。
图4“正在完成数据库关系图向导”页面
(6)单击“完成”按钮,完成数据库关系图的添加,此时在SQLServer企业管理器中就出现了刚才所创建的关系图,如图5所示。
图5客房管理系统的关系图
(7)点击快捷工具栏中的“
”保存图标,将刚创建好的关系图保存起来。
第六章建立查询
6.1简单查询
简单查询就是SELECT-----FROM------WHERE查询
可以参照教材,对于物资管理系统进行简单查询,完成系统的一些功能。
6.2复杂查询
(1)查询
PrivateSubButton2_Click(ByValsenderAsSystem.Object,ByValeAsSystem.EventArgs)HandlesButton2.Click
IfTextBox1.Text="
"
Then
MessageBox.Show("
请输入要查询的客房号!
"
提示"
)
Else
DimsAsString
s="
select*fromDestinewhereRoomID='
&
TextBox1.Text&
"
'
CallDBopen()
DimcAsNewSqlCommand(s,conn)
DimdAsSqlDataReader
d=c.ExecuteReader
Ifd.HasRowsThen
d.Read()
TextBox8.Text=d("
RoomID"
).ToString
TextBox2.Text=d("
RoomTypeName"
TextBox3.Text=d("
RoomPrice"
TextBox4.Text=d("
ClientName"
TextBox10.Text=d("
OpenRoomTime"
TextBox6.Text=d("
IDNo"
TextBox11.Text=d("
ClientSex"
TextBox7.Text=d("
ClientAdd"
TextBox5.Text=d("
Prepay"
EndIf
CallDBclose()
TextBox1.Text="
EndSub
(2)删除
PrivateSubButton5_Click(ByValsenderAsSystem.Object,ByValeAsSystem.EventArgs)HandlesButton5.Click
IfDataGridView2.Rows.Count=0Then
没有数据删除!
IfRoomID<
>
0AndRoomTypeName<
IfMessageBox.Show("
你确定要删除客房号为:
Trim(RoomID)&
客房类型为:
Trim(RoomTypeName)&
的客房!
MessageBoxButtons.OKCancel,MessageBoxIcon.Information)=Windows.Forms.DialogResult.OKThen
DataGridView1.Rows.RemoveAt(DataGridView1.CurrentCell.RowIndex)
MsgBox("
删除成功!
,"
第七章视图、触发器和存储过程设计
7.1
需要确定哪些业务处理和数据处理的功能使用MSSQLServer来实现,哪些数据处理的功能由应用程序实现。
下面将讨论系统需要设计并创建的视图、触发器和存储过程。
1注册客房处理
页面上有注册的字样点击就可进入注册页面按照上面的要求进行填写。
在这个存储过程中,需要的输入参数是用户类型,输出的结果集是所有客房的入住情况和价格.定义这个存储过程名为Selschool,定义输入的参数名为schoolType,定义输出的价格参数名为schoolPrice。
根据存储过程的创建语法,编写Selschool的实现代码如下:
在上面的代码中包含了两个SELECT语句,第一个SELECT语句从tblRoom表中选择了所有客房类型为输入参数指定类型并且货架状态为“空”(N)的货架号,并将所有记录作为结果集返回;
第二个SELECT语句从tblRoomType中取得了指定货架类型的价格,作为输出参数RoomType返回。
(2)客户入住登记处理
客户入住登记操作完成后,入住的客房状态应该及时做相应的改变,并记录客房的序号供以后查询。
这一功能可以使用触发器来自动进行;
因为进行客房入住登记操作是在客房信息表tblClient中添加一条新的记录,所以可以为tblClient设计一个Insert触发器,当tblClient执行Insert操作后自动更改出tblRoom相应货架记录的数据。
定义这个触发器名称为client_insert。
其实现代码如下:
(3)客户退房处理
客户退房时,操作人员输入退房时间,然后要计算出客房的入住费用,以便给客户结账。
同时,系统应该将物资所退货架的状态更改为“空”,以便于再次接待下一位客户入住。
这一功能也可以通过一个触发器来实现。
为出tblClient表设计一个名为client_update的UPDATE触发器,当系统对tblC1ient的cOutTime(出库时间)进行UPDATE操作后,将会自动触发它。
该触发器将自动取得当前所退房的单价,并根据无字符库的天数计算出客房的入住费用,把费用值写入cCost列,最后触发器tblRoom相应货架记录的rStats和cId更新,即将客状态置为空,并清除对应于该物资的入库标识信息。
下面是client_update触发器的定义代码;
在上面的代码中首先定义了一个变量@price,然后退过一个右联合直接得到当前物客房的单价。
在第二段语句中,使用SQL函数DATEDIFF求得客户入住时间和退房时间之差,求出存储天数,乘以@price变量就得到了客户入住费用。
值得注意的是:
UPDATE触发器可以使用inserted表和deleted表,这里必须使用inserted表,它的coumme才是最新更改的退房时间,如果使用deleted表,将得不到正确的结果。
最后,触发器对tblRoom表中cId为当前客房cId的记录的rStats列和cId列进行了更新。
(4)客户信息查询处理
在实际应用中,经常会有这样的要求:
管理员需要通过用户的部分资料查询客户的全部信息以及客户入住在哪一个房间。
由于需要通过输入查询条件,才能得到结果集,所以可以设计一个带输入参数的存储过程来实现。
定义一个名为spClientInfo的存储过程,该存储过程以客房名称(@ClientName)、类型(@ClientWork)、客户姓名(@ClientName),及来自地的地名(@ClientFrom)等作为输入参数,存储过程返回查询到的结果集。
spClientInfo的定义代码如下:
在上面的代码中,向spClientInfo传入4个参数,依次是:
客户姓名、客户家庭地址和用户来自地的地名。
在WHERE子句中使用LIKE,并在参数前、后添加“%”,使得该存储过程具有模糊查询的功能。
比如,@ClientName参数中只输入物资名称的关键字,就可以查询到所有该关键字的物资客房信息。
4个参数可以同时给出,也可以只输入一个参数,但是参数的位置顺序不能改变。
(5)查询用户的基本信息的处理
在本系统的功能需求中要求能够查询用户详细情况,包括用户单位等信息。
实现该功能可以通过一个存储过程,以用户序号为输入参数,输出上面要求的各种信息数值。
设计一个名为spClientCost的存储过程,定义代码如下:
在上面代码中,首先定义了4个变量,分别是:
@Clientprice、@ClientDays、@ClientCost、@ClientBalance,它们分别表示:
用户申请。
第一个SELECT语句起赋值作用,分别把各个表达式的结果赋值给各个变量。
第二个SELECT语句是一个选择,将tblClient表的cDeposit以及前面求得的各个变量值作为存储过程的结果集返回。
(6)统计某年份每天登录的用户量数据
实现代码如下:
注意上面的代码中如何使用GROUPBY子句来实现统计功能。
代码中还使用了日期函数DATEPART和求和函数SUM。
第八章数据库的用户与权限管理
8.1用户与权限管理
(1)创建、删除登陆帐号
(2)添加和删除固定服务器角色成员
将数据库上的数据库用户添加为固定数据库角色db_owner的成员。
将数据库用户builtin\administrators从db_ower中去除。
(3)创建数据库角色
在当前数据库中创建名为role2的新角色,并制定dbo为该角色所有者。
(4)给数据库角色添加成员
使用windows模式验证的登录名,创建数据库的用户,并将该数据库用户添加到role2数据库角色中。
(5)数据库用户、角色操作权限的授予、拒绝和收回
在当前数据库中给pubilic角色赋予对表xsb中学号,姓名字段的select权限。
拒绝用户[builtin\administartors]对表xsb的一些权限,这样,这些用户就没有对表xsb的操作权限了。
取消授予用户[builtin\administrators]的多个语句权限
(6)数据库用户、角色的删除
将数据库用户[builtin\administrators]删除
第九章数据库的备份
9.1.备份数据库
1.用sql语句:
使用逻辑名test1在e盘中创建一个命名的备份设备,并将数据库xscj完全备份到该备份。
用企业管理器创建备份,备份数据库
2.备份事务日志
创建一个命名的备份设备xscjlogbk,并备份xscj数据库的事务日志。
3.恢复备份内容
将数据库做些删除修改,运用restore恢复数据库备份内容。
第十章数据的导入与导出
10.1
利用SQLServer数据导入与导出的数据转换服务可以实现不同数据源间的数据传输和数据格式的转换。
实现数据的导入与导出有3种方法:
方法1:
单击企业管理器常用工具栏上的“运行向导”图标;
再单击“所有任务”、“导入数据”或“导出数据”。
方法2:
单击“工具”、“数据转换服务”;
方法3:
在企业管理器右边显示表的区域上按鼠标右键,
(1)数据的导出服务
将KFGL数据库中的tblclient表转换成EXCEL工作表tblclient.xls。
1)单击“工具”、“数据转换服务”、“导出数据”,再单击“下一步”按钮,进入如图2—43所示的窗口。
图6选择数据源的导入/导出入口
2)选择数据源,系统默认SQLServer2000数据库,选择SQLServer服务器及数据库。
3)单击“下一步”按钮,出现如图2。
44所示的窗口,分别输入目的数据类型:
MicroSoftExcel97—2000,目的数据的文件名:
tblclient.xls。
图7选择目的地的DTS导入/导出窗口
4)单击“下一步”按钮,再单击“下一步”按钮,出现如图2—45所示的窗口,选择表[kfgl][dbo][tblclient]。
图8选择源表和视图的DTS导入/导出窗口
5)单击“下一步”按钮,再单击“下一步”,及“完成”按钮,即可完成一个SQLServer数据库表向Excel工作表的转换。
6)进入Excell,打开工作表tlb.xls查看该工作表。
.xls
(2)数据的导入服务
按上述类似的步骤将一个Excel工作表导入到KFGL数据库中,实现数据的导入服务。
总结与心得
通过深入学习,了解了很多SQL2005的控件并会设置其相关的属性,比如BaseSalaryQuery.vb窗口的2个DataGrid,默认时,DataGrid1处于能访问状态,DataGrid2不能,DataGrid1此时显示所绑定的数据源的全部数据。
设置条件点击查询时,则DataGrid1隐藏,DataGrid2显示查询结果。
懂得了很多知识外,在本软件中还体现出了些许特色:
插入、删除、修改数据库等命令统一包装在函数里并封装在