客房管理系统设计李恒河北科技师范学院数信学院网络工程0802班一、需求分析1.1系统需求分析“客房管理信息系统”以实现宾馆客房各种信息的系统化、规范化、自动化为目标,具体要达到以下几个基本要求:(一)客户入住管理。
通过该管理功能,系统可以通过计算机对客户的一些基本信息进行录入,成为客房管理信息系统查询的数据资料。
(1)新客人信息的录入。
(2)客人信息的修改。
(3)客人信息的查询。
(4)客人信息的删除。
(5)客人信息的保存。
(6)客房信息的查询。
(二)结算管理(1)退房结算:输入客户房号,查找该客户信息、住房信息以及费用情况。
(2)收银处理:确认客户总费用,并自动登记总费用帐。
同时,自动将房间用房标志(占)改为(空);并将客户信息保存。
1.2数据分析通过进行系统调查,了解用户需求、分析应用软件系统的功能需求。
总结出了系统逻辑模型,即系统业务流程图、数据流图、应用软件功能结构图和数据字典等。
各流程图如下面的图所示:1.2.1 客房管理系统业务流程图结果1.2.2 客房管理系统数据流1.2.4 数据字典根据绘制出的数据流图,定义出本系统的数据字典。
如下列所示:1.2.3 客房管理系统功能二、数据库概念结构设计经考察和分析,本案例客房管理系统包括以下实体:客户实体、客房实体、操作员实体、结算账单实体,它们的E-R图如以下所示。
2.5客房管理系统E-R图三、数据库逻辑结构设计根据E-R图,将图转换为关系模型即:将实体、实体的属性和实体之间的联系转换为关系模式,然后对数据模型进行优化得到如下关系数据表。
客户:{客户编号,姓名,性别,年龄,身份证号,原住地址,押金,住店时间,离店时间,房号,账单编号}客房:{房号,房间类型,房间状态,房间价格}操作员:{操作员编号,操作员姓名,职称}关系数据表确定后要进行数据表的逻辑结构设计,即定义关系数据表中字段名称、数据结构、是否允许为空、关键字、说明等。
(1)客户表用于存放客户的入住信息,例如:客户名,房号等。
表3.1 客户表(2)客房表用于存放客房的相关信息,例如:房号,房间类型,房间状态等。
表3.2 客房表(3)结算账单表结算帐单表用于存放客户消费的信息。
表3.3 结算账单表住店天数Int NOT NULL房间价格Int NOT NULL总费用Int NOT NULL(4)操作员表用于存放操作员的的信息,例如:操作员的编号,密码等。
表3.4 操作员表字段名称数据结构是否允许为空说明操作员编号Int NOT NULL,主键用于登陆和识别身份操作员姓名Varchar(8)NULL职称Varchar(10)NULL密码Varchar(10)NULL 用于登陆输入密码四、数据库物理结构设计在进行了数据表的逻辑结构定义后,需要为每个数据表创建其物理结构,即在数据库系统中定义数据表具体存放的格式、位置等。
这里列出利用SQL Server2000 自带的数据库创建的数据表的物理结构。
1.“客房”表的物理结构“客房”表的物理结构如图4.1所示,关键字为”房号”图 4.12. “客户”表的物理结构“客户”表的物理结构如图 4.2所示,关键字为”客户编号”,利用”房号”可与”结算账单”表和”客房”表建立联系。
3.“结算账单”表的物理结构“结算账单”表的物理结构如图4.3所示,关键字为”账单编号”。
4. “操作员”表的物理结构“操作员”表的物理结构如图4.4所示,关键字为”操作员编号”。
图 4.2图 4.3图 4.45. “操作员_VIEW”视图的物理结构是客房和客户的连接。
图 4.5五、数据库的实施根据以上所进行的调查、设计和进行方案,建立并实施数据库。
此系统运用SQL Server 2000进行数据库的开发。
1.数据库建表语句⑴名称: 客户表“客户”标识:客户建表语句如下:create table 客户 (客户编号 int not null,客户姓名 varchar(8) null,年龄 int null,性别 varchar(2) null,身份证号 varchar(18) null,户籍 varchar(50) null,房号 int not null,住店时间 varchar(15) null,离店时间 varchar(15) null,押金 int null,账单编号 int null, constraint PK_客户 primary key (客户编号))go⑵名称: 客房表“客房”标识:客房建表语句如下:create table 客房 (房号 int not null,房间类型 varchar(10) not null,房间价格 int not null,房间状态 varchar(2) not null,constraint PK_客房 primary key (房号))go⑶名称: 操作员表“操作员”标识:操作员建表语句如下:create table 操作员 (操作员编号 int not null,操作员姓名 varchar(8) null,职称 varchar(10) null,密码 varchar(10) null,constraint PK_操作员 primary key (操作员编号))go⑷名称: 结算账单表“结算账单”标识:结算账单建表语句如下:create table 结算账单 (账单编号 int not null,住房天数 int not null,总费用 int not null,操作员编号 int not null,房号 int not null,constraint PK_结算账单 primary key (账单编号))go2.数据库的建视图语句⑴名称:“操作员_VIEW”SELECT dbo.客房.房号, dbo.客房.房间类型, dbo.客房.房间价格, dbo.客房.房间状态,dbo.客户.客户姓名, dbo.客户.年龄, dbo.客户.性别, dbo.客户.身份证号, dbo.客户.户籍,dbo.客户.住店时间, dbo.客户.离店时间, dbo.客户.押金FROM dbo.客房 INNER JOINdbo.客户 ON dbo.客房.房号 = dbo.客户.房号六、数据库的运行根据以上所做的准备以及SQL Server 2000建立好的表、试图及各种关系,运用Visual Basic 6.0 为前台开发工具,开发出客户管理系统,主要运用了ADODC控件和DataGrid控件。
1. 系统登陆界在进入主界面之前有一个用户登陆界面,用户键入用户名和密码,系统自行判定是否存在,然后进入主界面。
输入:用户名,密码。
处理:判断用户名和密码是否有效。
填入用户名和密码后点击【登录】按钮,系统将自动从数据库中判断是否存在相同的用户名和密码,如果有则进入系统,如果不存在则提示用户名和密码有错误信息。
输出:登录成功,进入系统的主页面并出现欢迎使用系统的对话框,不成功则显示错误信息页面。
系统登陆界面如图6.1所示图 6.12. 系统主界面主界面包括系统的主要功能包括新建客户信息、客房信息查询、客户信息查询、结算信息账单,四个主要的功能。
用户可以根据需要点击自己想使用的功能进入功能界面。
系统主界面如图6.2所示。
图6.23. 客户信息查询界面打开界面后左面显示所有客户的信息,中间显示编号为0的客户信息,右边为查询条件,查询结果显示在中间的部分。
如图6.3所示。
图6.34. 新建客户信息界面填写新入住客户的基本信息以及部分入住信息。
先单击“添加新用户”,然后输入信息,最后单击“确认添加”完成操作。
新建客户界面如图6.4所示。
图6.45.客户结算信息界面此界面综合显示了客户的入住信息和所入住的客房信息,能够便于操作员方便快速的结算出客户的总费用。
结算信息界面如图6.5所示图6.56.客房信息查询界面类似于客户信息查询。
左边为客房总体信息预览,右上角为查询条件即客房的房号,右下角为查询结果显示区域。
客房信息查询界面如图6.6所示。
图6.6参考文献[1] 王珊,陈红.数据库系统原理教程[M].北京:清华大学出版社,1998.7.[2] 王珊,萨师煊.数据库系统概论(第四版)[M].北京:高等教育出版社,2006.5.[3] 虞益诚,孙莉.SQL Server 2000 数据库应用技术[M].北京:中国铁道出版社,2004.11.[4] 刘钢.Visual Basic 程序设计与应用案例[M].北京:高等教育出版社,2003.9.[5] Abraham Silberschatz, Henry F.Korth ,S.Sudarshan.Database System Concepts(FourthEdition). Higher Education Press.[6] 罗运模.完全掌握SQL Server 2000[J].北京:人民邮电出版社,2001.[7] 白尚旺.PowerDesigner软件工程技术[M].北京:电子工业出版社,2004.附录Ⅰ客房管理系统部分程序代码⑴登陆验证代码代码如下:Private Sub Command1_Click()Dim conn As New ADODB.Connectionconn.ConnectionString = "Provider=SQLOLEDB.1;Integrated Security=SSPI;PersistSecurity Info=False;Initial Catalog=客房管理系统;Data Source=WWW-4FDE9FFEC01"conn.Open ‘连接并打开数据库Dim rs, rss As New ADODB.RecordsetSet rs = conn.Execute("select * from 操作员 where 操作员编号='" & Text1.Text & "'")Set rss = conn.Execute("select * from 操作员 where 密码='" & Text2.Text & "'") If rs.EOF ThenMsgBox "不存在此用户"Text1.Text = ""Text1.SetFocus ‘验证用户名ElseIf rss.EOF ThenMsgBox "密码错误!"Text2.Text = ""Text2.SetFocus‘验证密码ElseUnload MeForm1.Show ‘进入主界面MsgBox (Text1.Text + ",欢迎您使用冰舞奇迹客房管理系统")End IfEnd IfEnd Sub⑵将新建客户信息写入数据库代码代码如下:Private Sub Command4_Click()Dim cn As New ADODB.ConnectionDim sql As Stringcn.ConnectionString = "Provider=SQLOLEDB.1;Integrated Security=SSPI;Persist SecurityInfo=False;Initial Catalog=客房管理系统;Data Source=WWW-4FDE9FFEC01"cn.Open ‘连接并打开数据库Dim a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11 As Stringa1 = Text1.Texta2 = Text2.Texta3 = Text3.Texta4 = Text4.Texta5 = Text5.Texta6 = Text6.Texta7 = Text7.Texta8 = Text8.Texta9 = Text9.Texta10 = Text10.Texta11 = Text11.Textsql = "insert into 客户 values('" & a1 & "','" & a2 & "','" & a3 & "','" & a4 & "','" & a5 & "','" & a6 & "','" & a7 & "','" & a8 & "','" & a9 & "','" & a10 & "','" & a11 & "')"cn.Execute (sql) ‘执行代码将变量值负值给客户表cn.CloseEnd Sub⑶查询客户信息代码代码如下:Private Sub Command3_Click()fanghao = Text12.TextAdodc1.Recordset.Find "房号=" & Val(fanghao)End Sub ‘根据房号查询客户信息Private Sub Command5_Click()kehubianhao = Text13.TextAdodc1.Recordset.Find "客户编号=" & Val(kehubianhao)End Sub ‘根据客户编号查询Private Sub Command6_Click()kehuming = Text14.TextAdodc1.Recordset.Find "客户姓名=" & Val(kehuming)End Sub ‘根据客户姓名查询⑷客房信息查询代码如下:Private Sub Command2_Click()Dim cn As New ADODB.ConnectionDim rs As New ADODB.RecordsetDim sql As Stringcn.ConnectionString = "Provider=SQLOLEDB.1;Integrated Security=SSPI;Persist Security Info=False;Initial Catalog=客房管理系统;Data Source=WWW-4FDE9FFEC01"cn.Open ‘连接并打开数据库fanghao = Text5.TextAdodc1.Recordset.Find "房号=" & Val(fanghao)cn.Close ‘查询指定房号的房间状态End Sub(5)空房信息查询按照条件查询使结果显示在DataGrid控件里,代码如下:Private Sub Command1_Click()Dim cn As New ADODB.ConnectionDim rs As New ADODB.RecordsetDim sql As Stringcn.ConnectionString = "Provider=SQLOLEDB.1;Integrated Security=SSPI;Persist Security Info=False;Initial Catalog=客房管理系统;Data Source=WWW-4FDE9FFEC01"cn.Openrs.Open "select * from 客房where 房间状态='空'", cn, adOpenKeyset,adLockBatchOptimistic, adCmdText Set DataGrid1.DataSource = rsDataGrid1.RefreshEnd Sub客房管理系统。