徐炳文
(廣東嶺南職業(yè)技術(shù)學(xué)院電子信息工程學(xué)院, 廣東 廣州 510663)
隨著全球經(jīng)濟(jì)一體化的不斷深入,酒店餐飲業(yè)的客源更加豐富多樣化,市場(chǎng)和渠道也更加廣闊.與此同時(shí),酒店餐飲業(yè)面臨著日趨激烈的競(jìng)爭(zhēng)環(huán)境和不斷攀升的客戶期望,迫使業(yè)內(nèi)人士不斷通過(guò)擴(kuò)大業(yè)務(wù)、提高服務(wù)質(zhì)量、降低生產(chǎn)成本和提升客戶滿意度來(lái)增強(qiáng)核心競(jìng)爭(zhēng)力.其中最有效的手段之一就是應(yīng)用先進(jìn)的信息化技術(shù)去變革傳統(tǒng)意義上的競(jìng)爭(zhēng)方式和經(jīng)營(yíng)管理模式來(lái)贏得發(fā)展優(yōu)勢(shì).因此,近年來(lái)市場(chǎng)對(duì)餐飲管理信息系統(tǒng)提出了越來(lái)越多的需求,使得開(kāi)發(fā)酒店餐飲管理信息系統(tǒng)成為軟件開(kāi)發(fā)的熱點(diǎn)領(lǐng)域[1].基于此,作者提出了一個(gè)基于C#的酒店餐飲業(yè)務(wù)系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)方案.
開(kāi)發(fā)酒店餐飲管理系統(tǒng)涉及到酒店餐飲企業(yè)的各個(gè)單位、部門以及網(wǎng)絡(luò)互聯(lián)技術(shù)等.因此,建設(shè)該系統(tǒng)是一個(gè)復(fù)雜的工程,然而一旦運(yùn)轉(zhuǎn)起來(lái),它所帶來(lái)的企業(yè)效益無(wú)疑是巨大的.該系統(tǒng)以餐飲業(yè)務(wù)為基礎(chǔ),突出酒店餐飲業(yè)的前臺(tái)服務(wù)的管理,重視經(jīng)營(yíng)業(yè)務(wù)數(shù)據(jù)的分析,從專業(yè)的角度努力為餐飲企業(yè)管理者提供科學(xué)有效的管理.該系統(tǒng)開(kāi)發(fā)完成后應(yīng)該具有前臺(tái)為顧客提供酒店餐飲服務(wù),后臺(tái)提供對(duì)酒店餐飲企業(yè)業(yè)務(wù)的管理等功能.此外,系統(tǒng)還可以設(shè)置自動(dòng)服務(wù)功能,顧客可以智能獲取菜品信息以及自動(dòng)結(jié)賬.通過(guò)對(duì)這些需求功能的分析,得出組成該系統(tǒng)的平臺(tái)網(wǎng)絡(luò)結(jié)構(gòu)圖如圖1所示.
圖1 酒店餐飲業(yè)務(wù)系統(tǒng)平臺(tái)網(wǎng)絡(luò)結(jié)構(gòu)圖
系統(tǒng)架構(gòu)設(shè)計(jì)主要是根據(jù)系統(tǒng)的總體目標(biāo)和功能將整個(gè)系統(tǒng)合理劃分成若干個(gè)功能模塊,定義各個(gè)模塊的內(nèi)部結(jié)構(gòu)等.系統(tǒng)平臺(tái)網(wǎng)絡(luò)圖只是粗略地描述了一個(gè)酒店餐飲業(yè)務(wù)系統(tǒng)的體系結(jié)構(gòu)及其硬件環(huán)境.構(gòu)成該系統(tǒng)各模塊實(shí)現(xiàn)起來(lái)比較復(fù)雜,在軟件設(shè)計(jì)和實(shí)現(xiàn)時(shí)按自頂向下、逐步細(xì)化的方法將整體功能主要?jiǎng)澐譃榍芭_(tái)服務(wù)模塊、后臺(tái)服務(wù)模塊、輔助工具模塊、系統(tǒng)管理模塊等模塊[2-4].整個(gè)系統(tǒng)的功能結(jié)構(gòu)總體框架如圖2所示.
圖2 酒店餐飲業(yè)務(wù)系統(tǒng)功能結(jié)構(gòu)總體框架圖
前臺(tái)服務(wù)模塊包括菜譜信息、臺(tái)桌信息、服務(wù)員信息、智能獲取菜品以及自動(dòng)結(jié)賬功能.開(kāi)臺(tái)點(diǎn)菜是酒店餐飲服務(wù)管理系統(tǒng)最常用的功能,所以在開(kāi)發(fā)設(shè)計(jì)時(shí)要設(shè)計(jì)得更加人性化和智能化.自動(dòng)結(jié)賬是輔助人工手動(dòng)結(jié)賬,使顧客消費(fèi)后結(jié)賬更加方便快捷.臺(tái)桌信息向顧客提供可用的臺(tái)桌信息,因?yàn)轭櫩驮谙M(fèi)時(shí)首先要有空閑可用的臺(tái)桌供開(kāi)臺(tái),才能為顧客點(diǎn)菜與結(jié)賬等,所以臺(tái)桌信息管理在整個(gè)系統(tǒng)中非常重要.智能獲取菜品是輔助點(diǎn)菜功能,顧客可以根據(jù)系統(tǒng)提供的菜品信息自己點(diǎn)菜.
圖3 系統(tǒng)前臺(tái)服務(wù)模塊流程圖
后臺(tái)服務(wù)模塊包括菜品信息管理、臺(tái)桌信息管理、服務(wù)員信息管理和結(jié)賬報(bào)表管理.菜品信息管理可根據(jù)季節(jié)時(shí)菜供應(yīng)情況增刪修改菜譜信息供顧客選擇;臺(tái)桌信息管理可根據(jù)實(shí)際需要增刪修改臺(tái)桌信息供顧客開(kāi)臺(tái);服務(wù)員信息除了管理正常為顧客服務(wù)外,還根據(jù)服務(wù)員變更情況增刪修改服務(wù)員信息;結(jié)賬報(bào)表是管理系統(tǒng)不可缺少的一部分,因?yàn)榫频瓴惋嫻芾硐到y(tǒng)從某種角度來(lái)講也是一種記賬式軟件,一個(gè)記賬式軟件如果連結(jié)賬報(bào)表的功能都沒(méi)有,就好比一頭老虎失去了眼睛,所以對(duì)于酒店餐飲管理信息系統(tǒng)結(jié)賬報(bào)表管理是不可缺少的部分.
輔助工具模塊是為方便用戶操作而設(shè)計(jì)的,包括日歷、計(jì)算器和記事本.系統(tǒng)管理模塊包括賬號(hào)權(quán)限管理、系統(tǒng)鎖定設(shè)置、系統(tǒng)備份和系統(tǒng)恢復(fù)等.
前臺(tái)服務(wù)模塊與后臺(tái)服務(wù)模塊是本系統(tǒng)的核心模塊,前臺(tái)服務(wù)模塊主要面向系統(tǒng)使用者提供各種信息與功能服務(wù)操作,包括的子模塊有:菜譜信息、臺(tái)桌信息、服務(wù)員信息、智能獲取菜品以及自動(dòng)結(jié)賬功能等.后臺(tái)服務(wù)模塊主要是前臺(tái)服務(wù)模塊的支撐.考慮系統(tǒng)開(kāi)發(fā)環(huán)境與開(kāi)發(fā)工具的特點(diǎn),在這里只對(duì)本系統(tǒng)最為核心的前臺(tái)服務(wù)模塊進(jìn)行處理過(guò)程設(shè)計(jì).結(jié)合酒店餐飲業(yè)務(wù)系統(tǒng)需求,按照軟件工程方法自頂向下逐步細(xì)化,得到本系統(tǒng)前臺(tái)服務(wù)模塊的流程圖如圖3所示.
服務(wù)員登錄進(jìn)入系統(tǒng),當(dāng)有顧客前來(lái)消費(fèi)時(shí),輸入顧客人數(shù)查詢系統(tǒng)尚未使用的空臺(tái)桌信息,如果有空臺(tái)桌,則進(jìn)入開(kāi)臺(tái)管理模塊選擇開(kāi)臺(tái)桌號(hào),如果為顧客進(jìn)行了開(kāi)臺(tái)則進(jìn)入點(diǎn)菜管理模塊,向顧客展示菜品信息并點(diǎn)菜,服務(wù)員與顧客確認(rèn)點(diǎn)菜信息后菜單通過(guò)后臺(tái)服務(wù)網(wǎng)絡(luò)傳回廚房打印服務(wù)器和收銀臺(tái)打印服務(wù)器,顧客消費(fèi)完后到收銀臺(tái)付費(fèi)結(jié)賬.
開(kāi)臺(tái)管理是酒店餐飲業(yè)務(wù)系統(tǒng)的核心功能模塊之一,在整個(gè)系統(tǒng)中是非常重要的.當(dāng)有顧客前來(lái)消費(fèi)時(shí),樓層服務(wù)員首先要查看是否還有空余的臺(tái)桌信息,如果沒(méi)有空余的臺(tái)桌信息,那么顧客還想消費(fèi)的話就需要等待;如果查詢到有空余的臺(tái)桌信息,那么就可以為顧客選擇臺(tái)桌號(hào)進(jìn)行開(kāi)臺(tái)服務(wù).只有開(kāi)臺(tái)后才能為顧客提供點(diǎn)菜服務(wù)與結(jié)賬服務(wù).在開(kāi)臺(tái)管理模塊實(shí)現(xiàn)時(shí),需要注意兩方面的技術(shù):一是選擇開(kāi)臺(tái)必須是空閑的臺(tái)桌,因此要求連接服務(wù)器后臺(tái)數(shù)據(jù)庫(kù)進(jìn)行查詢;二是必須有顧客來(lái)消費(fèi)時(shí)才能開(kāi)臺(tái),因此要求顧客人數(shù)為大于0的整數(shù),否則會(huì)產(chǎn)生亂開(kāi)臺(tái),造成系統(tǒng)臺(tái)桌信息管理混亂.開(kāi)臺(tái)管理模塊主要部分實(shí)現(xiàn)如下:
public SqlConnection conn;
private void formOpentable_Db(object sender,EventArgs e){ //查詢獲取臺(tái)桌信息
while(srd.Read( )) {
cbTable.Items.Add(sdr[″TableName″].ToString( ).Trim( )); //獲取臺(tái)桌信息
}
while(srd.Read( )) {
cbServer.Items.Add(sdr[″ServerName″].ToString( ).Trim( ));} //獲取服務(wù)員信息
}
private void txtNum_KeyPress(object sender, KeyPressEventArgs e){ //必須為整數(shù)
if((e.KeyChar!=8&&!char.IsDigit(e.KeyChar))&&e.KeyChar!=13){
MessageBox.Show(″輸入的數(shù)必須是整數(shù)!″);
e.Handled=true;}
private void btnSave_Click(object sender, EventArgs e){ //數(shù)據(jù)不能為空且大于0
if(txtNum.Text= =″ ″||Convert.ToInt32(txtNum.Text)<=0) {
MessageBox.Show(″請(qǐng)輸入顧客人數(shù)! ″); }
}
點(diǎn)菜管理是酒店餐飲業(yè)務(wù)系統(tǒng)另一核心功能模塊,負(fù)責(zé)為顧客點(diǎn)菜與管理系統(tǒng)的菜品信息.點(diǎn)菜管理模塊的功能主要由3部分來(lái)構(gòu)成:菜品類別的選擇、顧客點(diǎn)菜所需要的信息操作部分、顯示為顧客已經(jīng)點(diǎn)過(guò)的菜品信息記錄.
圖4 點(diǎn)菜管理模塊主窗體界面
點(diǎn)菜管理模塊在實(shí)現(xiàn)上需要注意4點(diǎn):一是只有為顧客開(kāi)臺(tái)后才能點(diǎn)菜;二是所點(diǎn)的菜品必須是是系統(tǒng)所提供的菜品類別;三是顧客消費(fèi)的菜品數(shù)量必須是大于等于1的整數(shù);四是保證點(diǎn)菜窗體在點(diǎn)菜時(shí)連接后臺(tái)數(shù)據(jù)庫(kù)暢通且讀取菜品信息正確.
點(diǎn)菜管理模塊的實(shí)現(xiàn)窗體界面主要由4個(gè)區(qū)域來(lái)提供點(diǎn)菜管理功能:菜品類別、點(diǎn)菜信息、顯示已經(jīng)點(diǎn)過(guò)的菜品信息和保存區(qū)域.菜品類別以樹(shù)型目錄形式展開(kāi)各菜系所提供的菜品類別信息,點(diǎn)菜時(shí)只需要從菜系展開(kāi)中點(diǎn)擊所需要的菜就可以自動(dòng)在點(diǎn)菜信息區(qū)域中顯示,如果需要的份數(shù)不只1份,可以手工更改份數(shù),選上了某一菜品后就會(huì)在已經(jīng)點(diǎn)的菜品信息記錄中顯示出來(lái),防止點(diǎn)菜錯(cuò)誤.點(diǎn)菜管理模塊主要部分實(shí)現(xiàn)如圖4所示.
結(jié)賬管理模塊完成的功能主要是在顧客消費(fèi)結(jié)束后對(duì)消費(fèi)項(xiàng)目清單進(jìn)行消費(fèi)總額統(tǒng)計(jì).顧客的消費(fèi)清單來(lái)自于點(diǎn)菜模塊,而點(diǎn)菜的清單信息是綁定于臺(tái)桌號(hào),這些數(shù)據(jù)都通過(guò)開(kāi)臺(tái)管理、點(diǎn)菜管理存儲(chǔ)在服務(wù)器后臺(tái)數(shù)據(jù)庫(kù)中,因此結(jié)賬時(shí)首先需要連接后臺(tái)數(shù)據(jù)庫(kù),從數(shù)據(jù)庫(kù)中檢索出顧客消費(fèi)的所有項(xiàng)目清單,然后通過(guò)程序統(tǒng)計(jì)出顧客消費(fèi)總額,當(dāng)結(jié)賬輸入顧客支付金額后會(huì)計(jì)算出找零余額.
結(jié)賬管理在實(shí)現(xiàn)上需要注意4點(diǎn):一是保證結(jié)賬項(xiàng)目是顧客消費(fèi)的項(xiàng)目;二是打折系數(shù)只能是系統(tǒng)設(shè)定的系數(shù);三是結(jié)賬時(shí)顧客支付的金額必須大于或等于顧客消費(fèi)的總金額;四是輸入顧客支付的金額后能夠自動(dòng)計(jì)算出找零余額.
保證結(jié)賬項(xiàng)目是顧客消費(fèi)的項(xiàng)目主要通過(guò)兩方面的技術(shù)來(lái)實(shí)現(xiàn):一是點(diǎn)菜信息綁定于顧客開(kāi)臺(tái)的臺(tái)桌信息,二是在檢索統(tǒng)計(jì)顧客消費(fèi)項(xiàng)目的同時(shí)將消費(fèi)清單列舉顯示于結(jié)賬窗體界面中.為防止操作員亂輸入打折系數(shù)產(chǎn)生結(jié)賬統(tǒng)計(jì)錯(cuò)誤,打折系數(shù)通過(guò)系統(tǒng)設(shè)定,在開(kāi)發(fā)實(shí)現(xiàn)時(shí)利用TreeView控件來(lái)提供打折系數(shù).
結(jié)賬管理模塊的主要部分實(shí)現(xiàn)如下:
private void formCheckOut_Load(object sender,EventArgs e){
this.Text=CheckTableName+″結(jié)賬″; //設(shè)置結(jié)賬界面窗體名稱
groupBox1.Text= ″當(dāng)前臺(tái)桌-″+CheckTableName;
SqlConnection conn=BaseClass.DBConn.RestaurantsCon( ); //建立數(shù)據(jù)庫(kù)的連接
SqlDataAdapter sda=new SqlDataAdapter (″select disheName, DisheSum, DisheAllprice, TableName, Datetime from Customerconsumer_info where TableName = ′″+CheckTableName+″′″, conn); //查詢顧客消費(fèi)項(xiàng)目
DataSet ds=new DataSet( );
sda.Fill(ds);
dataGridVRecord.DataSource=ds.Tables[0]; //顯示指定臺(tái)桌消費(fèi)的項(xiàng)目清單
conn.Open( ); //建立數(shù)據(jù)庫(kù)的連接,創(chuàng)建SqlCommand對(duì)象
SqlCommand cmd = new SqlCommand ( ″select sum( disheallprice ) from Customerconsumer_info where TableName=′″+CheckTableName+″′″, conn);
SumPrice =Convert.ToString(cmd.ExcuteSelectTable( )); //計(jì)算顧客消費(fèi)總金額
}
計(jì)算機(jī)應(yīng)用系統(tǒng)在運(yùn)行過(guò)程中常常會(huì)遇到意外事故的發(fā)生,比如正當(dāng)顧客消費(fèi)時(shí)遇到突然斷電或者計(jì)算機(jī)意外重啟,如果開(kāi)發(fā)系統(tǒng)沒(méi)有采取必要的措施來(lái)保護(hù)數(shù)據(jù)信息,勢(shì)必會(huì)當(dāng)再次進(jìn)入系統(tǒng)時(shí)后原來(lái)正在消費(fèi)還沒(méi)有結(jié)賬的顧客信息受到破壞.要保證這些消費(fèi)記錄信息在發(fā)生意外后重啟計(jì)算機(jī)進(jìn)入系統(tǒng)時(shí)都保持不變,經(jīng)過(guò)分析設(shè)計(jì),我們開(kāi)發(fā)系統(tǒng)時(shí)在數(shù)據(jù)庫(kù)中針對(duì)每個(gè)臺(tái)桌都設(shè)計(jì)了一個(gè)用于標(biāo)識(shí)此臺(tái)桌當(dāng)前狀態(tài)的字段:“*”狀態(tài)表示當(dāng)前該臺(tái)桌已經(jīng)開(kāi)臺(tái)正在使用,“0”狀態(tài)表示該臺(tái)桌沒(méi)有被使用,即“待用”狀態(tài).每次進(jìn)入系統(tǒng)時(shí),都會(huì)從數(shù)據(jù)庫(kù)中檢索出每一個(gè)臺(tái)桌的狀態(tài),然后根據(jù)原來(lái)標(biāo)識(shí)的狀態(tài)為每一個(gè)臺(tái)桌添加數(shù)據(jù)庫(kù)信息,保證消費(fèi)數(shù)據(jù)的正確性.主要部分實(shí)現(xiàn)如下:
private void AddItems(string state) {
if(state= = ″運(yùn)行中″) {
lvDesk.Items.Add(srd[″TableName″].Tostring( ),*); //當(dāng)前使用的臺(tái)桌標(biāo)*狀態(tài)
}
else {
lvDesk.Items.Add(srd[″TableName″].Tostring( ),0);} //不使用的臺(tái)桌標(biāo)0狀態(tài)
}
系統(tǒng)登錄成功后進(jìn)入系統(tǒng)的主窗體界面,系統(tǒng)主窗體界面主要由上端菜單欄、臺(tái)桌顯示區(qū)域與系統(tǒng)狀態(tài)欄3部分構(gòu)成.菜單欄提供需求分析所要求的所有功能命令,實(shí)現(xiàn)鏈接系統(tǒng)功能菜單.臺(tái)桌區(qū)域顯示已經(jīng)使用與待用的所有的臺(tái)桌信息,雙擊臺(tái)桌就會(huì)彈出臺(tái)桌基本信息:臺(tái)桌編號(hào)、臺(tái)桌名稱、臺(tái)桌費(fèi)用、臺(tái)桌位置、臺(tái)桌狀態(tài)與臺(tái)桌類型等;右鍵單擊臺(tái)桌會(huì)彈出臺(tái)桌管理下拉菜單:開(kāi)臺(tái)、撤銷開(kāi)臺(tái)、點(diǎn)/加菜、消費(fèi)查詢、結(jié)賬等.由于主窗體顯示的臺(tái)桌比較多,為了讓服務(wù)員一目了然哪些臺(tái)桌是使用狀態(tài),哪些臺(tái)桌是待用狀態(tài),在實(shí)現(xiàn)時(shí)利用了ListView控件技術(shù)為每個(gè)臺(tái)桌做了標(biāo)識(shí):“*”表示該臺(tái)桌是使用狀態(tài),“0”表示該臺(tái)桌是待用狀態(tài).有了這個(gè)狀態(tài)標(biāo)識(shí),服務(wù)員使用主窗體界面為顧客進(jìn)行開(kāi)臺(tái)管理、點(diǎn)菜管理、結(jié)賬管理等功能操作就更加方便了.系統(tǒng)主窗體界面實(shí)現(xiàn)如圖5所示.
圖5 系統(tǒng)主窗體界面
本系統(tǒng)通過(guò)功能測(cè)試與性能測(cè)試,各方面均達(dá)到了需求分析的預(yù)計(jì)要求,而且運(yùn)行正確穩(wěn)定.本系統(tǒng)的成功實(shí)現(xiàn),豐富了軟件系統(tǒng)開(kāi)發(fā)的構(gòu)架周期理論,提出了一些改進(jìn)方法,解決了酒店餐飲業(yè)務(wù)管理系統(tǒng)災(zāi)難數(shù)據(jù)恢復(fù)等技術(shù)問(wèn)題,使開(kāi)發(fā)的系統(tǒng)不僅僅實(shí)現(xiàn)了計(jì)算機(jī)輔助手工操作的流程,而是建立在網(wǎng)絡(luò)化的各大功能模塊的集成化、智能化的應(yīng)用上.本系統(tǒng)在商業(yè)市場(chǎng)的其它類似應(yīng)用十分廣泛,值得進(jìn)行改造推廣.
參考文獻(xiàn)
[1] 王玉時(shí) 于曉明. 用.Net Remoting技術(shù)實(shí)現(xiàn)酒店管理系統(tǒng)友情查詢功能[J]. 陜西科技大學(xué)學(xué)報(bào)(自然科學(xué)版),2008,26(2):110-113.
[2] 何義釗. 中國(guó)餐飲業(yè)科學(xué)常效管理的成功方法——“六T實(shí)務(wù)”介紹[J]. 國(guó)際商業(yè)技術(shù), 2008,(2): 36-39.
[3] 黃 威,邵偉民,劉學(xué)仁.基于Web Services的商業(yè)智能系統(tǒng)研究與設(shè)計(jì)[J]. 計(jì)算機(jī)工程與設(shè)計(jì),2009,(11):2 702-2 706.
[4] 謝曉園, 徐寶文, 史 亮,等. 面向路徑覆蓋的演化測(cè)試用例生成技術(shù)[J]. 軟件學(xué)報(bào), 2009,(12):3 117-3 136.