当前位置:文档之家› 酒店管理信息系统中“房态图”的设计和实现

酒店管理信息系统中“房态图”的设计和实现

酒店管理信息系统中“房态图”的设计和实现摘要:“房态图”就是用来实时反映酒店客房状态的图型化界面,大部分酒店管理软件都提供了房态图功能模块。

介绍了如何用C#语言和MySQL数据库实现客房管理系统中“房态图”模块,并对相关代码进行了详细描述。

本例可以用于软件开发类课程的教学,也可以修改完善后用于实际酒店管理软件开发中。

关键词:房态图;酒店管理信息系统;C#;MySQL0 引言房态图是用来实时反映酒店客房状态的图形,实现上就是图形化的客房状况监控,目前,绝大部分的酒店管理软件都提供了房态图功能模块,由于商业软件的原因,一般无法获得房态图的源代码或核心算法,所以不少高职院校教师在讲解旅游软件开发时,无法介绍房态图的实现。

本文将介绍一种房态图的实现算法,简洁明了,可以用于实践教学,也可以修改完善后用于实际酒店管理软件开发。

1 房态图设计1.1 开发工具和数据库的选择开发语言选用的是C#,它是一种相当新的编程语言,功能强大、容易学习。

前台开发工具选用的是SharpDevelop 2.0,SharpDevelop 是一款优秀的集成开发环境,不仅免费,而且开源。

没有选用VisualC#的原因是因为其价格昂贵,不适合一般学院使用。

对于教学来说,选用的数据库最好是免费的,这样可以节约学院的经费;而对一般中小酒店来说,也希望采用经济实惠的数据库,节省投入的费用。

结合以上实际,选用了免费的MySQL作用数据库,MySQL适用面广、性能优异、性价比高,完全可以满足一般酒店客房管理工作的应用。

1.2 数据库表设计为了简化算法,本例只设计了两张表,一张为客房基本信息表(tb_roombaseinfo),另一张为客房状态表(tb_roomstatus),如表1和表2所示。

其中,表1中的RoomType字段可以填写的内容为:01——标准间,02——单人间,03——豪华间,04——行政间。

表2中的RoomStatus字段,按酒店习惯,可以填写的内容为:VC——干净的空房,OC——干净的有客房,VD——脏的空房,OD——脏的有客房。

表1中的数据,一般是在系统初始化时,由操作员从“客房基本信息设置”中录入,或者在日常运行过程通过添加、删除、和修改操作进行维护。

表2中的数据,在系统初始化时,根据酒店已经录入的房间号,自动填写,初始化时全部设置为“VC”,即“净房”,日常运行过程中,系统各模块,根据操作员的操作,进行更新。

1.3 界面设计该模块主要使用了DataGridView控件,该控件是.NET 2.0 中的一个新控件,是针对.NET 1.x 中功能较差的标准DataGrid 控件而设计的。

使用DataGridView 控件,可以显示和编辑来自多种不同类型的数据源的表格数据。

DataGridView 控件具有极高的可配置性和可扩展性,它提供有大量的属性、方法和事件,可以用来对该控件的外观和行为进行自定义。

本例中,系统在单元格中填写客房号,用不同的颜色代表4种状态。

本例对界面作了简化,如图1所示,显示了某次房态情况,如需要美观复杂的界面,可自行修改。

图1 房态图界面设计效果1.4 算法实现1.4.1 建立数据库连接函数MySqlCon,实现数据库的连接,本例中,数据库名为hotel,用户名为root,密码为1。

public static MySqlConnection MySqlCon(){return new MySqlConnection("Data Source=127.0.0.1;InitialCatalog=hotel;user ID=root;PWD=1");}1.4.2 获取房间状态并显示算法思想是:(1)先执行SQL语句,读取客房基本信息表和客房状态表,通过左连接,获取房间的状态,得到:房间号、房间所处楼层、房间状态,并将数据放入数据集,供前台程序处理。

前台代码访问数据库时,如果是简单的业务操作,尽量利用一条SQL语句完成;如果是比较复杂的业务操作,才通过存储过程来完成。

本例的数据库操作不复杂,用一条SQL语句就可以完成,故没有必要使用存储过程。

(2)前台代码循环读取数据集:①读取房间楼层,并与当前层次记录器比较,如果两者值不同,说明开始了一个前楼层,需要进行换行显示,同时DataGridView控件的增加1行,行坐标记数器增加1位;或者如果列记数器达最大值,说明当前已经填到最后1列,需要将列坐标记数器置为0;②读取房间号,根据坐标记数器,向当前单元格中填入房间号;③对层次记数器赋值;④读取房间状态,根据不同的状态,设置当前单元格的颜色;⑤列坐标记数器加1位;⑥继续从①处执行,直至读完整个数据集。

详细的代码实现和注释如函数GetRoomStatus所示。

void GetRoomStatus(){int dgvcol = roomDV.ColumnCount; //列记数器,本例设DataGridView控件的名称为roomDV。

int i=0,j=0;//单元格行、列坐标记数器string templayer="";//层次记录器string sqlstr="select tb_roombaseinfo.roomid,tb_roombaseinfo.roomlayer,tb_roomstatus.roomstatus from tb_roombaseinfo left join tb_roomstatus on tb_roombaseinfo.roomid = tb_roomstatus.roomid order by tb_roombaseinfo.RoomLayer,tb_roombaseinfo.roomid"; //取房间的相关数据roomDV.RowCount = 1; //置网格控件行数为1MySqlConnection conn = MySqlCon(); //建立数据库连接conn.Open(); //打开连接MySqlCommand cmd = new MySqlCommand(sqlstr,conn); //关联SQL语句MySqlDataReader rdb = cmd.ExecuteReader(); //执行SQL语句并生成数据集while(rdb.Read()){ //读数据,并且判断不同的楼层,如果是新楼层或是已经写满一行,需换行。

if(j == dgvcol || templayer!=rdb["roomlayer"].ToString()){j=0;if(templayer != ""){i++;roomDV.RowCount++;}}//将相关数据写入单元格,根据房间状态不同,更改单元格颜色。

roomDV[j,i].Value = rdb["roomid"].ToString();templayer = rdb["roomlayer"].ToString();if(rdb["roomstatus"].ToString() == "VC") roomDV[j,i].Style.BackColor = Color.DeepSkyBlue;else if(rdb["roomstatus"].ToString() == "OC")roomDV[j,i].Style.BackColor = Color.Green;else if(rdb["roomstatus"].ToString() == "OD")roomDV[j,i].Style.BackColor = Color.Green;else if(rdb["roomstatus"].ToString() == "VD")roomDV[j,i].Style.BackColor = Color.DarkBlue;j++;}//释放占用内存cmd.Dispose();rdb.Dispose();conn.Dispose();}1.4.3 更新房态图可以有两种方式更新房态图:①自动更新:增加1个时间控件,设置触发时间,触发时,调用GetRoomStatus函数即可,需要注意的是,触发时间一般不要太短。

自动更新的缺点是比较耗费资源;②手动更新:在界面上适当的位置,添加一个标题为“刷新”的按钮,当按下按钮时,执行GetRoomStatus函数即可。

手动更新是当操作者需要时才更新,比较节约资源。

一般来说,酒店中能更改房态的工作点不是很多,不太可能会出现几个工作点同时“抢”订同一个房间的情况。

所以建议采用手动更新的方法,或者让房态图窗口初始化时更新1次即可,因为正式登记订房时,系统自动会检查该房间是否已经被其它点订出,如果已经订出,会给出提示,不会出现误订房的情况。

2 结束语保证房态的正确,是客房中心工作中非常重要的一项,所以酒店管理信息系统要及时、准确地反应房态,以保证前厅接待处的顺利租房。

本文用C#和MySQL实现了酒店管理信息系统中反映客房实时状态的“房态图”模块,算法简洁,使用的开发工具和数据库都是免费的,开发成本低,特别适合用于小型酒店或经济型酒店,也可以作为示例代码在课堂教学中使用,解决软件开发类课程没有相关实用代码的问题。

参考文献:[1]Michael Kofler.MySQL 5权威指南[M].北京:人民邮电出版社,2008.[2]Christian Nagel,Bill Evjen, Jay Glynn.C#高级编程[M].北京:清华大学出版社,2006.[3]郑向敏.酒店管理[M].北京:清华大学出版社,2005.。

相关主题