摘 要: 針對C/S結(jié)構(gòu)的酒店客房管理系統(tǒng)存在的不足,使用JSP+JavaBean開發(fā)模式、Tomcat 作為Web服務(wù)器、SQL Server 2000作為后臺(tái)數(shù)據(jù)庫,開發(fā)出了B/S結(jié)構(gòu)的酒店客房管理系統(tǒng)。從實(shí)際運(yùn)行效果看,該系統(tǒng)能減少軟件的開發(fā)與維護(hù)成本及酒店用戶的使用成本,體現(xiàn)了較好的擴(kuò)展性、健壯性、穩(wěn)定性,提高了酒店客房管理的效率。
關(guān)鍵詞: 酒店客房管理系統(tǒng);JSP;SQL Server 2000;Tomcat;B/S
酒店是服務(wù)與銷售同步的一類企業(yè)。因此,給住店客人提供方便快捷的服務(wù)、降低自己的營業(yè)成本是各個(gè)酒店追求的目標(biāo)。一般來說,酒店主要是靠出租房間及以此產(chǎn)生的各種消費(fèi)作為收入來源。所以,酒店客房部的管理水平直接影響到整個(gè)酒店的經(jīng)濟(jì)效益。
目前,酒店客房管理系統(tǒng)架構(gòu)上大多是C/S結(jié)構(gòu),所使用的主要有MS Visual Studio.NET系列、Delphi、Java及其相應(yīng)的開發(fā)技術(shù)。無論采用哪種開發(fā)技術(shù),對于C/S結(jié)構(gòu)的酒店客房管理系統(tǒng),都存在一個(gè)問題,即若要在一臺(tái)電腦上能夠運(yùn)行它,必須安裝相應(yīng)的軟件,對主機(jī)的硬件配置上都有不同程度地特別要求。使得軟件的開發(fā)和維護(hù)成本、酒店用戶的使用成本都較高。本文以開發(fā)一個(gè)實(shí)例的方式,詳細(xì)講解了采用SQL Server 2000作為后臺(tái)數(shù)據(jù)庫,基于JSP技術(shù)開發(fā)出一個(gè)B/S結(jié)構(gòu)的酒店客房管理系統(tǒng)的系統(tǒng)設(shè)計(jì)與編程實(shí)現(xiàn)過程。
1系統(tǒng)設(shè)計(jì)
1.1角色的功能劃分
依據(jù)需求規(guī)格說明書,將系統(tǒng)分為4個(gè)職責(zé)明確、分工合理的角色:管理員、前臺(tái)接待崗、前臺(tái)收銀崗、財(cái)務(wù)崗。每種角色都可以修改自己的登錄密碼、查看自己的登錄日志、瀏覽當(dāng)前房態(tài)。下面主要介紹各個(gè)角色各自的典型功能。
管理員職責(zé):證件類別(默認(rèn)是身份證)、現(xiàn)金幣種(默認(rèn)是人民幣)、付款方式(默認(rèn)是現(xiàn)金)、房間種類、房間消費(fèi)商品及其價(jià)格(例如零食、飲料等,在本系統(tǒng)中稱為“房間消費(fèi)商品”)、酒店提供的收費(fèi)性服務(wù)項(xiàng)目(例如電話費(fèi)、清潔費(fèi)等,在本系統(tǒng)中稱為“房間消費(fèi)雜項(xiàng)”)、前臺(tái)各崗位工作人員等基本數(shù)據(jù)的添加、修改、刪除;每種房間種類的默認(rèn)房價(jià)、為催交按金而設(shè)定的最小余額的修改;刪除誤輸入的信息。
前臺(tái)接待崗職責(zé)為客人入住登記、預(yù)訂房間、無消費(fèi)直接退房、轉(zhuǎn)房、房態(tài)轉(zhuǎn)換、客人資料錄入與查詢、隨時(shí)打印在住客人報(bào)表等。
前臺(tái)收銀崗職責(zé):領(lǐng)取按金單、收取按金、添加房間消費(fèi)、轉(zhuǎn)賬、結(jié)賬、打印各種財(cái)務(wù)報(bào)表、當(dāng)班清轉(zhuǎn)、核數(shù)過租、日結(jié)等方面。
財(cái)務(wù)崗職責(zé)主要就是強(qiáng)調(diào)從財(cái)務(wù)的角度查看各種財(cái)務(wù)報(bào)表,并以此對前臺(tái)收銀崗人員上交的各種財(cái)務(wù)報(bào)表進(jìn)行賬目核實(shí)。
從上述角色的職責(zé)功能劃分看,財(cái)務(wù)崗是前臺(tái)收銀崗的一個(gè)“子集”,故而本文重點(diǎn)介紹其余3種角色。管理員一般由前臺(tái)主管或經(jīng)理擔(dān)任。財(cái)務(wù)崗人員主要是核對前臺(tái)收銀崗上交的各種財(cái)務(wù)報(bào)表,所以一般只需設(shè)置一個(gè)賬號(hào)即可。接待崗人員不接觸和“錢”相關(guān)的操作、視圖。收銀崗人員不負(fù)責(zé)房間狀態(tài)的手工修改、客人房間的分配。但在實(shí)踐中,酒店用戶可根據(jù)自身情況,進(jìn)行靈活設(shè)置與調(diào)整。例如,對于規(guī)模較小的酒店,可將一個(gè)前臺(tái)員工同時(shí)分配一個(gè)接待崗賬號(hào)和一個(gè)收銀崗賬號(hào)。對于規(guī)模較大的酒店,可讓有接待崗和收銀崗賬號(hào)的人互不相交,只有二者合作才能完成客人入住手續(xù),即:接待崗人員為一客人分配好房間及其房價(jià)后,將房號(hào)告知收銀崗人員(客人登記時(shí),接待崗人員可以根據(jù)當(dāng)時(shí)工作的閑忙狀況,可暫時(shí)先只輸入客人的姓名,等閑點(diǎn)時(shí)再補(bǔ)充錄入客人的其他信息);然后收銀崗人員根據(jù)房號(hào)(該房的房態(tài)是“待交按金”)和收取客人按金時(shí)所開的按金單票據(jù)信息,正式確認(rèn)客人入住。系統(tǒng)中的角色與主要實(shí)體之間的聯(lián)系,見圖1所示。
圖1中①主要是刪除房間有誤的消費(fèi)、調(diào)整房租。對其說明如下:
(1) 對于由前臺(tái)收銀崗人員對某房間誤輸?shù)南M(fèi)項(xiàng)目(商品和雜項(xiàng)),他們只能采取用抵消的方法(即輸入相應(yīng)的負(fù)數(shù)),以保證該房間消費(fèi)總額的正確性。這樣,在打出的結(jié)賬單、流水賬報(bào)表里都會(huì)出現(xiàn)因用于抵消的“負(fù)數(shù)”,而造成“冗余”記錄。在本系統(tǒng)中,只有管理員才能刪除有誤的房間消費(fèi)項(xiàng)目。
(2) 在核數(shù)過租時(shí),未發(fā)現(xiàn)在住房的房價(jià)有什么錯(cuò)誤,但當(dāng)發(fā)現(xiàn)時(shí)已經(jīng)因?yàn)槿战Y(jié)而由系統(tǒng)自動(dòng)新加了一天的房租(數(shù)目是日結(jié)前設(shè)置的房價(jià))。在本系統(tǒng)中,只有管理員才能修改在住房的房租。
1.2房態(tài)轉(zhuǎn)換
從圖1中可以看出,整個(gè)客房管理系統(tǒng)的運(yùn)作基本上都是圍繞著房間而展開的,為了保持接待崗和收銀崗在合作辦理客人入住時(shí)的同步性,在房態(tài)中新設(shè)了“待交按金”狀態(tài)。具體的房態(tài)轉(zhuǎn)換如圖2所示。
對圖2中的①、②、③分別說明如下:
?、偈轻槍哟龒徣藛T在客人入住登記選擇房間時(shí),有可能發(fā)生選錯(cuò)房號(hào)的情況。此時(shí),接待崗人員只需按“取消入住登記”即可。
?、谑轻槍﹄m然客人交了相應(yīng)按金,辦完了入住手續(xù),但因自身的一些原因,要退房離店,此時(shí)經(jīng)確認(rèn)還未產(chǎn)生任何消費(fèi)。這種情況下的退房,雖比較少見,但確實(shí)是存在的。如果此時(shí)由收銀崗人員正常結(jié)賬退房,則會(huì)在結(jié)賬單流水賬報(bào)表里顯示出結(jié)果(總消費(fèi)為零)。而假如由接待崗人員辦理“無消費(fèi)直接退房”,就可以從數(shù)據(jù)庫中直接將本次入住事件的所有相關(guān)數(shù)據(jù)徹底清除。在結(jié)賬單流水賬報(bào)表里就不會(huì)出現(xiàn)這些“無實(shí)際意義、冗余”的數(shù)據(jù)。
?、凼轻槍υ陬A(yù)訂事件發(fā)生時(shí),空房較為緊張的情況下,維護(hù)酒店利益、盡可能提高開房率,使“臟房”的房間也可成為“預(yù)訂房”。在系統(tǒng)中會(huì)提示優(yōu)先清理已被預(yù)訂了的臟房。
1.3 房租零頭收取
為監(jiān)督收銀崗員工的結(jié)賬工作,在上交的財(cái)務(wù)報(bào)表中,凡涉及到客人房租消費(fèi)的,除了列出一個(gè)結(jié)賬單對應(yīng)房間的房租總額外,還進(jìn)一步將房租的“整數(shù)”、“零頭”分開列出,以方便經(jīng)理、財(cái)務(wù)人員核對賬務(wù)。所謂“整數(shù)”即經(jīng)過日結(jié),由系統(tǒng)自動(dòng)形成的房租,一般是房價(jià)的正整數(shù)倍。所謂“零頭”即收銀崗人員根據(jù)客人結(jié)賬退房時(shí),離店時(shí)間與規(guī)定的中午12點(diǎn)整點(diǎn)退房的這個(gè)時(shí)間差而產(chǎn)生的房租。為減少工作量、提高結(jié)賬速度,將其默認(rèn)為零。依據(jù)經(jīng)驗(yàn),欲結(jié)賬離店的客人一般都會(huì)在中午12點(diǎn)之前退房,這時(shí)零頭部分默認(rèn)即可;對于少量的超過12點(diǎn)結(jié)賬退房的情況,則收銀崗人員根據(jù)酒店事先制定好的超時(shí)收費(fèi)規(guī)定以及和客人達(dá)成的約定,手工輸入超時(shí)部分的房租。
1.4 有序打印財(cái)務(wù)報(bào)表
收銀崗人員打印的報(bào)表分為當(dāng)班營業(yè)報(bào)表(付款方式統(tǒng)計(jì)表、實(shí)收匯總表、結(jié)賬單流水賬明細(xì)表)、全天營業(yè)報(bào)表(和當(dāng)班營業(yè)報(bào)表類似)、按金單報(bào)表(匯總表、明細(xì)表)、在住客人消費(fèi)報(bào)表(匯總表、明細(xì)表)。
因酒店的客房部是24小時(shí)營業(yè),所以一般將前臺(tái)工作人員分為早、中、晚3個(gè)班次,輪流上班。早班和中班交接班時(shí)都是先打印當(dāng)班營業(yè)報(bào)表,然后當(dāng)班清轉(zhuǎn)、退出系統(tǒng),下一班人員登錄。較復(fù)雜的是晚班以及晚班與早班之間工作的交接。在晚班期間,臨近夜里12點(diǎn)時(shí),進(jìn)行“核數(shù)過租”,查看所有在住房的房價(jià)、按金等是否有誤。如發(fā)現(xiàn)有誤,及時(shí)修改(這項(xiàng)工作主要以剛開出的房間為主)。次日早上6點(diǎn)左右,打印當(dāng)班營業(yè)報(bào)表、當(dāng)班清轉(zhuǎn)、打印全天營業(yè)報(bào)表、日結(jié)、打印在住客人消費(fèi)的報(bào)表。至約下班前15分鐘,進(jìn)行當(dāng)班清轉(zhuǎn)、退出系統(tǒng),早班人員登錄。
2 數(shù)據(jù)庫設(shè)計(jì)
在數(shù)據(jù)庫設(shè)計(jì)時(shí),整體上綜合考慮兩方面因素:關(guān)系型數(shù)據(jù)庫規(guī)范化理論和表的連接操作對讀寫數(shù)據(jù)庫性能的影響,將數(shù)據(jù)庫設(shè)計(jì)成滿足3NF[1]。具體在每個(gè)表的每個(gè)字段上:字段名稱采取“簡潔而有意義”的原則;字段的類型和長度采取“節(jié)約夠用、適當(dāng)留有余地以便于擴(kuò)展”的原則。
在SQL Server 2000中共建了22個(gè)表:管理員表、用戶表、證件種類表、現(xiàn)金種類表、付款方式表、房間表、房態(tài)名稱表、按金催交的最小余額表、按金使用情況表、房間消費(fèi)商品表、房間消費(fèi)雜項(xiàng)表、房間維修記錄表、房種默認(rèn)價(jià)格表、日結(jié)記錄表、轉(zhuǎn)房記錄表、轉(zhuǎn)賬記錄表、客人信息表、客人-按金表、客人-房間表、房間-消費(fèi)匯總表、房間-消費(fèi)商品明細(xì)表、房間-消費(fèi)雜項(xiàng)明細(xì)表。限于篇幅,本文只介紹兩個(gè)典型的表及其字段的功能說明。
(1)客人-房間表crooms的表結(jié)構(gòu),如表1所示。
關(guān)于字段oldflag取值(在其余表中與此相同):零表示該客人是在住客人;為正整數(shù)時(shí)表示該客人已離店(本系統(tǒng)中稱為歷史客人)。如果一個(gè)客人在一天之內(nèi)多次入住、離店,其最大值即表示了該客人在當(dāng)日的離店次數(shù)。為保持?jǐn)?shù)據(jù)庫中數(shù)據(jù)的一致性和完整性約束,在日結(jié)清理數(shù)據(jù)時(shí),針對該客人的消費(fèi)記錄、住店記錄等數(shù)據(jù)采取的處理方法如下:
假如該客人還是在住客人(存在oldflag字段值為零的情況),則刪除oldflag字段值非零的消費(fèi)記錄、住店記錄。
假如該客人是歷史客人,則先查詢出與此客人相關(guān)的oldflag字段上的最大值(設(shè)為X),然后刪除oldflag≤X的消費(fèi)記錄、oldflag<X的住店記錄,最后將余下的住店記錄中的oldflag字段值復(fù)位為1。
(2) 房間-消費(fèi)匯總表rctotal的表結(jié)構(gòu),如表2所示。
3 系統(tǒng)實(shí)現(xiàn)
為客人提供快捷的服務(wù)、為酒店用戶提供人性化的操作界面是本系統(tǒng)的設(shè)計(jì)目標(biāo)。在系統(tǒng)實(shí)現(xiàn)時(shí),采用酒店行業(yè)的術(shù)語、按照酒店用戶的使用習(xí)慣,提高界面的友好性。
根據(jù)作者的項(xiàng)目實(shí)踐經(jīng)驗(yàn),酒店一般都是在服務(wù)臺(tái)用一個(gè)Hub集線器將若干主機(jī)連接起來形成一個(gè)局域網(wǎng)。在該局域網(wǎng)內(nèi)使用客房管理系統(tǒng)。若無特別需要,基本是不需連接Internet的。在這種環(huán)境下,軟件架構(gòu)采用B/S、C/S均可。但酒店客房部的營業(yè)活動(dòng)具有較為明顯的“旺季和淡季”。采用B/S結(jié)構(gòu)開發(fā),酒店用戶可根據(jù)需要,基本不受限制地自行增添、更換非服務(wù)器主機(jī)(對這些主機(jī),在硬件上無特別要求)。
基于成本、安全性、可擴(kuò)展性3個(gè)因素進(jìn)行考慮,本系統(tǒng)的架構(gòu)是B/S結(jié)構(gòu),具體采用JSP為開發(fā)技術(shù)(選用“JSP+JavaBean”模式)、Tomcat為Web服務(wù)器、SQL Server 2000為后臺(tái)數(shù)據(jù)庫。
在“JSP+JavaBean”模式下[2],將與數(shù)據(jù)庫連接池相關(guān)的操作、讀寫數(shù)據(jù)庫的操作、需經(jīng)常使用的數(shù)據(jù)庫的數(shù)據(jù)進(jìn)行的操作分別定義成一個(gè)類。考慮到某個(gè)功能可能需要用到上述建立的多個(gè)類,而JSP動(dòng)作元素中的<jsp:useBean>標(biāo)簽每次只能創(chuàng)建一個(gè)Bean實(shí)例。為避免出現(xiàn)JSP頁面中多次重復(fù)使用<jsp:useBean>標(biāo)簽的情況,在開發(fā)時(shí)單獨(dú)建立一個(gè)JSP文件,在該JSP文件中,用若干條<jsp:useBean>標(biāo)簽將上述類的實(shí)例一起創(chuàng)建好。這樣就可以在各個(gè)JSP頁面中僅用一條JSP指令元素中的include指令即可透明地讀寫數(shù)據(jù)庫,也便于修改和統(tǒng)一管理。
各個(gè)角色經(jīng)統(tǒng)一的登錄頁面成功登錄后,界面均是一個(gè)被拆分為常見的“左窄右寬型”的框架集,其中左側(cè)是功能選擇區(qū),右側(cè)是具體操作區(qū)。
本系統(tǒng)實(shí)現(xiàn)了一對一的個(gè)性化服務(wù),已被地跨廣東省佛山和江門兩市的柏麗酒店連鎖集團(tuán)的八家分店使用,現(xiàn)在已經(jīng)進(jìn)入穩(wěn)定運(yùn)行期。從運(yùn)行效果看,本系統(tǒng)體現(xiàn)了較好的擴(kuò)展性、健壯性和穩(wěn)定性。
參考文獻(xiàn)
[1] 王能斌.數(shù)據(jù)庫系統(tǒng)教程(第2版)(上冊)[M].北京:電子工業(yè)出版社,2008.
[2] 劉曉華,張健,周慧貞.JSP應(yīng)用開發(fā)詳解(第三版)[M].北京:電子工業(yè)出版社,2007.