首页 > 文章中心 > 正文

概论变换界面的酒店管理系统

概论变换界面的酒店管理系统

一、树形控件

1.树形节点存储

数据库中新建Tree_Initialization(用于存储树形控件中节点信息)表,一共有4个字段,分别为Node_Name(String型)、Node_ID(Integer型)、Node_Location(String型)、Node_Level(Integer型),可分别对树形节点进行新增、修改、查询、删除、统计等操作。下面就Tree_Initialization表中字段分别说明:Node_Name:String型,Node_Name表示含义为具体的房间名称,组成由区-栋-房间号构成,一共有三种类型的Node_Name,如表1所示,例如#C只表示C区,#C-2只表示C区2栋,#C-2-002表示为C区2栋2号房间,在这里只显示了#A区、#B区、#C区、#D区、#E区、#F区共6个片区,在程序中,实际上可以往下继续新增区域、栋和房间号,区域个数限制10个,栋数个数限制为10个,房间号限制为100个。Node_ID:Integer型,Node_ID从数值1开始递增,计算整个酒店的可用房间数量。Node_Location:String型,Node_Location表示节点的具体位置,一共有3种,分别为长度=2、长度=3、长度=6,长度为2的表示到区,长度为3的表示到栋,长度为6的表示到房间号,区、栋、房间号之间的逻辑关系通过字段Node_Location的String值来表示,如表1所示,例如Node_Name=”#C2-2-003”所对应的字段Node_Location=”132003”,前面两位”13”表示具体的区,在表中对应找到”13”所表示的区为#C区,第三位数值”2”+前两位”13”,对应的”132”在表中可以找到对应的区-栋,#C-2,最后三位003表示具体的房间号,+前三位”132”在表中可以找到对应的Node_Name=”#C2-2-003”。Node_Level:Integer型,Node_Level分为3层,第1层、第2层、第3层,第1层表示区,第2层表示栋,第3层表示房间号。

2.树形节点变更

将Tree_Initialization表中Node_Name、Node_ID、Node_Location和Node_Level4个字段配合使用,就可以实现树形节点的新增、删除、重命名等操作,例如,在主界面左侧树形节点上#C-4上点击新建房间号,连续点击新增003,004房间号(这里假设#C-4栋下不存在003和004房间,因为按照程序设置,在具体的某区某栋下,房间号是唯一值,不能重复,但是#C-3栋和#C-4栋在程序中假定是不同的,即#C-3栋和#C-4栋下都可以存在001房间),Tree_Initialization表中变化如表2所示。表2Tree_Initialization更新表(部分节点)界面上点击新增房间003,004按钮,相当于在Tree_Initialization表中插入两条新数据,“#C-4-003、32,134006,3”和“#C-4-004、33,134007,3”,并且将之前#D-1-001和#D-1-002的Node_ID分别+2,修改至34,35,当然这里插入和修改的数据,都通过算法进行判断和计算,计算过程如下:

(1)从Tree_Initialization表中找出Node_Level=3的所有Node_Name值,sql.executeQuery("SELECTNode_Name-FROMTree_InitializationWHERENode_Level=3"),将所有Node_Name值与新建的房间号进行对比,以防重复插入房间号;

(2)从Tree_Initialization表中查找Node_Namelikenode.getUserObject()中Node_ID字段中的最大值,sql.execute-Query("SELECTmax(Node_ID)asnumFROMTree_Initializa-tionwhereNode_Namelike"+s_room);

(3)向Tree_Initialization表插入数据,"INSERTIN-TOTree_InitializationVALUES("+"''''"+t_floor+Node_Name+"''''"+","+"''''"+(max_number+1)+"''''"+","+"''''"+String_Node_Location_New+"''''"+","+"''''3''''"+")";其中变量t_floor+Node_Name和String_Node_Location_New在程序其它处通过手段获取或者计算所得,在这里不详细说明其获取值的具体方法;

(4)修改Tree_Initialization表中其他房间号的Node_ID值,这里修改的是Node_ID值大于某个值X(在此处X=32)的房间号,将值++,"UPDATETree_Initializa-tionSETNode_ID=Node_ID+1whereN-ode_Name="+"''''"+String_Node_Name+"''''",程序中每当新增一个房间号时,Node_ID值都做一个自增加运算。以上描述的是在某区某栋下新增房间号的过程,其实新增某区或者在某区下新增某栋,其算法思想都如上所述,仅仅是某些字段值需要改变,在这里不再表述。同理,笔者在实现对某区、某栋、某房间号的重命名、删除等节点操作时,其算法思想也如新增节点操作相似,目的就是保持Tree_Initialization表中各节点之间的逻辑关系。所有对树形节点的变更操作均要由系统后台管理员(系统分为前台操作员和后台管理员,这里可以限定前台操作员的变更权限)来完成。

3.树形节点读入

在启动系统过程中,从数据库中读入界面信息(这里仅仅写出读入树形控件节点信息)的源代码实现如下:publicstaticvoidcreateNodes(){try{//连接数据库代码,此处省略ResultSetrs=sql.executeQuery("SELECTNode_ID,Node_Name,Node_LocationFROMTree_InitializationorderbyNode_Locationasc");while(rs.next()){Strings=rs.getString("Node_Location");StringchildName=rs.getString("Node_Name");intnumber=rs.getInt("Node_ID");if(s.length()==1){node[number]=newDefaultMutableTreeNode(child-Name);}else{if(s.length()<=3){node[number]=newDefaultMutableTreeNode(childName);Stringparents=s.substring(0,s.length()-1);ResultSetrs1=sql1.executeQuery("SELECTNode_IDFROMTree_InitializationwhereNode_Location="+"''''"+par-ents+"''''");while(rs1.next()){intparentNumber=rs1.getInt("Node_ID");node[parentNumber].add(node[number]);}}else{node[number]=newDefaultMutableTreeNode(childName);Stringparents=s.substring(0,s.length()-3);ResultSetrs1=sql1.executeQuery("SELECTNode_IDFROMTree_InitializationwhereNode_Location="+"''''"+par-ents+"''''");while(rs1.next()){intparentNumber=rs1.getInt("Node_ID");node[parentNumber].add(node[number]);

二、总结

在开发酒店管理系统的过程中,笔者不但实现了系统界面树形控件的变更,还将界面中的菜单控件,按钮控件信息等都保存至数据库中,通过系统管理员的操作,就可实现系统的界面更改。将系统界面信息保存至数据库中,这样对系统界面的维护就像对客户信息维护那样,在系统界面中,通过对数据库增删改查命令实现系统界面的维护,这样一来也可使得系统界面在今后软件的使用过程中处于一个动态管理维护的过程中,这是一个不错的方法,并且也适用于其他的管理信息系统中。

作者:王柔徐鹏单位:南昌师范高等专科学校江西省科学技术情报研究所