《電子技術(shù)應(yīng)用》
您所在的位置:首頁(yè) > 通信與網(wǎng)絡(luò) > 設(shè)計(jì)應(yīng)用 > 基于C/S結(jié)構(gòu)的小型餐飲管理系統(tǒng)設(shè)計(jì)與實(shí)現(xiàn)
基于C/S結(jié)構(gòu)的小型餐飲管理系統(tǒng)設(shè)計(jì)與實(shí)現(xiàn)
來(lái)源:微型機(jī)與應(yīng)用2013年第22期
王新宇
(南京旅游職業(yè)學(xué)院, 江蘇 南京211100)
摘要: 為使酒店管理(信息工程)專(zhuān)業(yè)的學(xué)生掌握設(shè)計(jì)和實(shí)現(xiàn)旅游信息管理系統(tǒng)的方法,對(duì)酒店餐飲管理工作的業(yè)務(wù)流程進(jìn)行了分析,并在此基礎(chǔ)上設(shè)計(jì)了可供學(xué)生在管理信息系統(tǒng)設(shè)計(jì)課程中使用的餐飲管理系統(tǒng)設(shè)計(jì)方案。通過(guò)教學(xué)實(shí)踐證明,該小型餐飲管理系統(tǒng)完全可以滿(mǎn)足教學(xué)需求,并且具有一定的實(shí)用價(jià)值,可以在中小型酒店餐飲部使用。
Abstract:
Key words :

摘  要: 為使酒店管理(信息工程)專(zhuān)業(yè)的學(xué)生掌握設(shè)計(jì)和實(shí)現(xiàn)旅游信息管理系統(tǒng)的方法,對(duì)酒店餐飲管理工作的業(yè)務(wù)流程進(jìn)行了分析,并在此基礎(chǔ)上設(shè)計(jì)了可供學(xué)生在管理信息系統(tǒng)設(shè)計(jì)課程中使用的餐飲管理系統(tǒng)設(shè)計(jì)方案。通過(guò)教學(xué)實(shí)踐證明,該小型餐飲管理系統(tǒng)完全可以滿(mǎn)足教學(xué)需求,并且具有一定的實(shí)用價(jià)值,可以在中小型酒店餐飲部使用。
關(guān)鍵詞:餐飲信息管理系統(tǒng);C/S模式;酒店信息管理

    現(xiàn)代酒店是指向各類(lèi)旅游者提供食、宿、行、娛、購(gòu)等綜合服務(wù),具有涉外性質(zhì)的商業(yè)性的公共場(chǎng)所。餐飲部是酒店組織機(jī)構(gòu)中的重要組成部分。餐飲部經(jīng)營(yíng)點(diǎn)多,管轄范圍廣,分工細(xì),員工人數(shù)多(約占酒店員工的三分之一),人員文化程度和年齡層次差異大。要將這樣一個(gè)復(fù)雜的部門(mén)管理好,必須建立合理有效的組織網(wǎng)絡(luò),并進(jìn)行科學(xué)分工,明確職責(zé),使各部門(mén)人員各司其職,以保證餐飲部的正常運(yùn)轉(zhuǎn)[1]。餐飲管理系統(tǒng)是餐飲部不可缺少的部分,它對(duì)酒店及餐飲部的管理者都至關(guān)重要。
    酒店管理信息系統(tǒng)一直是我院酒店信息管理專(zhuān)業(yè)學(xué)生的核心課程之一,但在這門(mén)課的項(xiàng)目實(shí)踐過(guò)程中,只是讓學(xué)生熟練使用某種酒店信息管理軟件,其主要原因是成品酒店管理軟件不可能提供源代碼,故無(wú)法在代碼的基礎(chǔ)上進(jìn)行講解,而只能講解一些軟件設(shè)計(jì)基本理論,課程比較枯燥。對(duì)于酒店信息管理專(zhuān)業(yè)的學(xué)生來(lái)說(shuō),如果只是停留在簡(jiǎn)單的軟件應(yīng)用層次上,對(duì)于學(xué)生能力的培養(yǎng)顯然是不夠的,這個(gè)專(zhuān)業(yè)要求學(xué)生具備一定的軟件開(kāi)發(fā)能力,另外,學(xué)生在修完高級(jí)程序設(shè)計(jì)和數(shù)據(jù)庫(kù)應(yīng)用的課程后,也需要結(jié)合一個(gè)實(shí)際的小型信息管理系統(tǒng),在源代碼的基礎(chǔ)上,對(duì)照源程序進(jìn)行項(xiàng)目課程的實(shí)踐學(xué)習(xí)。為此,本文對(duì)酒店餐飲管理工作的業(yè)務(wù)流程進(jìn)行了分析,在此基礎(chǔ)上,設(shè)計(jì)了可供學(xué)生在管理信息系統(tǒng)設(shè)計(jì)課程中使用的餐飲管理系統(tǒng)設(shè)計(jì)方案。通過(guò)教學(xué)實(shí)踐證明,該小型餐飲管理系統(tǒng)完全可以滿(mǎn)足教學(xué)需求,并且具有一定的實(shí)用價(jià)值,可以在中小型酒店餐飲部使用。
    目前軟件開(kāi)發(fā)的體系結(jié)構(gòu)主要為C/S模式和B/S模式。在C/S模式中,客戶(hù)機(jī)與服務(wù)器相連,客戶(hù)端執(zhí)行前臺(tái)操作任務(wù),負(fù)責(zé)用戶(hù)交互、采集用戶(hù)錄入數(shù)據(jù)以及將數(shù)據(jù)傳遞給服務(wù)器;而服務(wù)器負(fù)責(zé)接收客戶(hù)端傳來(lái)的數(shù)據(jù),并對(duì)數(shù)據(jù)進(jìn)行處理,訪(fǎng)問(wèn)數(shù)據(jù)庫(kù),處理客戶(hù)端的操作要求。在B/S模式中,用瀏覽器代替了客戶(hù)端程序,與傳統(tǒng)的C/S 模式不同,瀏覽器不直接與數(shù)據(jù)庫(kù)相連,而是增加了中間層,瀏覽器通過(guò)中間層服務(wù)器與數(shù)據(jù)庫(kù)服務(wù)器相連。
    基于B/S模式的應(yīng)用程序在過(guò)去幾年非常流行[2-3],因其把所有的應(yīng)用程序都放在一個(gè)服務(wù)器上,便于管理和維護(hù),軟件升級(jí)也十分方便,但缺點(diǎn)是它們不能提供豐富的用戶(hù)交互功能,對(duì)于一些非常復(fù)雜的“重型”應(yīng)用程序,用B/S模式有些不方便,一般傾向于用C/S模式。根據(jù)餐飲管理業(yè)務(wù)的特點(diǎn),本系統(tǒng)采用了C/S模式。
1 系統(tǒng)功能設(shè)計(jì)
    (1)桌臺(tái)基本信息
    該模塊用于設(shè)置、保存所有桌臺(tái)的信息,包括桌臺(tái)名稱(chēng)、桌臺(tái)位置、桌臺(tái)狀態(tài)、桌臺(tái)類(lèi)型等信息。
    (2)桌臺(tái)狀態(tài)
    該模塊實(shí)際上顯示的是餐飲桌態(tài)圖(類(lèi)似于酒店客房部的“房態(tài)圖”[3-4]),可以使用餐廳平面布局圖的形式顯示桌態(tài),操作員根據(jù)不同的圖標(biāo)狀態(tài),可以觀察到某桌是否可用,確定可用后,即可直接在圖上選定餐桌進(jìn)行開(kāi)臺(tái)作業(yè),如圖1所示。

    (4)點(diǎn)單
    如圖3所示,在開(kāi)臺(tái)結(jié)束后進(jìn)行“點(diǎn)單”操作,操作員記錄客人所需的菜名和數(shù)量,然后保存到數(shù)據(jù)庫(kù),相關(guān)數(shù)據(jù)供結(jié)賬時(shí)使用。
    (5)結(jié)帳
 圖4為客人就餐結(jié)束后結(jié)賬的設(shè)計(jì)界面。收銀員列出清單供客人核對(duì),客人確認(rèn)后,錄入支付的金額,計(jì)算所付款是否需要找零,提示找零數(shù)量。

    (6)職員信息
    該模塊可以輸入和查詢(xún)桌臺(tái)服務(wù)生的基本情況,主要包括員工代碼、姓名、性別、聯(lián)系電話(huà)等基本信息。
    (7)消費(fèi)查詢(xún)
    主要為客人提供消費(fèi)查詢(xún),并可打印出消費(fèi)清單。
    (8)菜肴設(shè)置
    該模塊用于增加、設(shè)置、保存所有可提供的菜肴信息。
    (9)系統(tǒng)設(shè)置
    設(shè)置系統(tǒng)用戶(hù)的不同權(quán)限、備份數(shù)據(jù)庫(kù)等。
    (10)報(bào)表
    提供營(yíng)業(yè)收入日?qǐng)?bào)表(部門(mén))、營(yíng)業(yè)收入?yún)R總表、營(yíng)業(yè)收入?yún)R總明細(xì)表、營(yíng)業(yè)明細(xì)表(組)、繳款明細(xì)表(班)、繳款匯總表、日客流量分析表、日營(yíng)業(yè)報(bào)表、當(dāng)日交款表、賬項(xiàng)明細(xì)表、各站點(diǎn)收銀報(bào)表、營(yíng)業(yè)匯總表、成本分析報(bào)表、折扣一覽表等,供主管核對(duì)。
2 數(shù)據(jù)庫(kù)管理系統(tǒng)的選擇
   在開(kāi)發(fā)管理信息系統(tǒng)的應(yīng)用程序時(shí),對(duì)數(shù)據(jù)庫(kù)的操作是必不可少的,所以先要選擇一個(gè)合適的數(shù)據(jù)庫(kù)管理系統(tǒng)產(chǎn)品。對(duì)于學(xué)校來(lái)說(shuō),選用的數(shù)據(jù)庫(kù)最好是免費(fèi)的,這樣可以節(jié)約學(xué)校的經(jīng)費(fèi)。本系統(tǒng)選用了MySQL作為數(shù)據(jù)庫(kù),MySQL是使用最廣泛的開(kāi)源數(shù)據(jù)庫(kù)系統(tǒng),其突出的優(yōu)點(diǎn)包括[3,5]:
 (1)適用面廣,可在多種操作系統(tǒng)上運(yùn)行。
 (2)性能優(yōu)異,運(yùn)行穩(wěn)定。使用MySQL的成功案例很多,另外MySQL對(duì)硬件性能的要求也不苛刻,完全可以在一般的教師機(jī)上運(yùn)行。
 (3)性?xún)r(jià)比高。MySQL是一個(gè)開(kāi)源軟件產(chǎn)品,一般非商業(yè)項(xiàng)目使用MySQL數(shù)據(jù)庫(kù),均可以免費(fèi)使用。
3 前臺(tái)開(kāi)發(fā)語(yǔ)言
    前臺(tái)開(kāi)發(fā)工具選用微軟的C#,選用C#的原因主要有[2,5-6]:
    (1)C#是一種相當(dāng)新的編程語(yǔ)言,吸取了C++、JAVA等語(yǔ)言的優(yōu)點(diǎn),并擯棄了它們的缺點(diǎn),是微軟多年來(lái)最重要的新技術(shù)之一,不但可以開(kāi)發(fā)C/S模式的程序,也可以方便地開(kāi)發(fā)B/S模式的程序[7]。
    (2)近年來(lái),開(kāi)源開(kāi)發(fā)環(huán)境MonoDevlop可以很方便地把C#從Windows下移植到Linux等平臺(tái),實(shí)現(xiàn)了跨平臺(tái)應(yīng)用。今后如有需要,該餐飲管理系統(tǒng)可以移植到Linux平臺(tái)。
    (3)本酒店信息專(zhuān)業(yè)的高級(jí)程序設(shè)計(jì)課程采用C#
語(yǔ)言作為教學(xué)語(yǔ)言,通過(guò)一個(gè)學(xué)期的學(xué)習(xí),學(xué)生可以用C#編寫(xiě)一些簡(jiǎn)單的程序,在掌握了C#語(yǔ)言的基礎(chǔ)上,使用C#作為前臺(tái)開(kāi)發(fā)工具可以節(jié)省學(xué)習(xí)的時(shí)間。
    (4)從經(jīng)濟(jì)方面考慮,因?yàn)槲④洖槭褂肅#的學(xué)生們提供學(xué)習(xí)版的C#(Visual C# Express),可以免費(fèi)使用,另外,MonoDevlop和SharpDevlop也可以免費(fèi)獲得,這樣可以節(jié)約一大筆經(jīng)費(fèi),同時(shí)還可以使用正版的開(kāi)發(fā)軟件,既經(jīng)濟(jì)又實(shí)惠。
4 關(guān)鍵技術(shù)
4.1 樹(shù)型菜單的實(shí)現(xiàn)

     設(shè)數(shù)據(jù)庫(kù)有兩張表:tb_dishbaseinfo(菜肴基本信息表)和tb_dishtype(菜肴類(lèi)型表),分別如表1、表2所示。
    其中,表2中的DishTypeName字段,可以是冷盤(pán)、鍋?zhàn)?、湯羹、飲料、酒等名稱(chēng)。


  算法思想是:
  (1)先執(zhí)行SQL語(yǔ)句,讀取菜肴基本信息表和菜肴類(lèi)型表,通過(guò)內(nèi)連接,得到菜肴編號(hào)、菜肴名稱(chēng)、菜肴類(lèi)型名稱(chēng),并將數(shù)據(jù)放入數(shù)據(jù)集,供前臺(tái)程序處理。
     (2)生成一個(gè)樹(shù)節(jié)點(diǎn),先令其為空,用于顯示菜肴信息的控件為T(mén)reeView控件(命名為tvfood)。然后對(duì)從數(shù)據(jù)庫(kù)中讀取的數(shù)據(jù)集進(jìn)行循環(huán)處理:判斷當(dāng)前的菜肴類(lèi)型,如果tvfood樹(shù)節(jié)點(diǎn)中沒(méi)有該類(lèi)型,則新添加一個(gè)根節(jié)點(diǎn)(菜肴類(lèi)型),并在新的根節(jié)點(diǎn)下增加子節(jié)點(diǎn)(菜肴名稱(chēng));如有該類(lèi)型,則無(wú)需建立新根節(jié)點(diǎn),直接在當(dāng)前根節(jié)點(diǎn)下增加子節(jié)點(diǎn)。
    樹(shù)型菜單實(shí)現(xiàn)代碼如下:
     string sqlstr = "select tb_dishbaseinfo.dishid,tb_dishbaseinfo.dishname,"+
          "tb_dishtype.dishtypename"+
          " from tb_dishbaseinfo join tb_dishtype on tb_dishbaseinfo.dishtypeID"+
          "=tb_dishtype.dishtypeid";
     string temp="";
  TreeNode newnode=null;
  tvfood.Nodes.Clear();
  MySqlConnection conn =MySqlCon();
  conn.Open();
  MySqlCommand cmd = new MySqlCommand(sqlstr,conn);
  MySqlDataReader rdb = cmd.ExecuteReader();
  while(rdb.Read()){
        if(temp!=rdb["dishtypename"].ToString()){
             temp=rdb["dishtypename"].ToString();
             newnode = tvfood.Nodes.Add(temp);
             newnode.Nodes.Add(rdb["dishID"].ToString(),rdb
                ["dishname"].ToString());
           }
              else
        newnode.Nodes.Add(rdb["dishID"].ToString(), rdb
                ["dishname"].ToString());
   }
     cmd.Dispose();
     rdb.Dispose();
     conn.Dispose();
4.2 存儲(chǔ)過(guò)程
 前臺(tái)程序訪(fǎng)問(wèn)數(shù)據(jù)庫(kù)時(shí),如果是簡(jiǎn)單的業(yè)務(wù)操作,盡量利用一條SQL語(yǔ)句完成;如果是需要多條SQL語(yǔ)句的比較復(fù)雜的業(yè)務(wù)操作,一般認(rèn)為要通過(guò)MySQL的存儲(chǔ)過(guò)程來(lái)完成,以提高效率[3,5]。存儲(chǔ)過(guò)程SP(Stored Procedure)是由一些直接存儲(chǔ)和執(zhí)行的定制過(guò)程或函數(shù)組成,有了存儲(chǔ)過(guò)程就可以實(shí)現(xiàn)復(fù)雜的SQL操作,從而可以完成單條(或少量幾條)SQL語(yǔ)句無(wú)法完成的業(yè)務(wù)操作。存儲(chǔ)過(guò)程集中完成多條SQL語(yǔ)句,在數(shù)據(jù)庫(kù)端直接執(zhí)行完成,可以節(jié)省數(shù)據(jù)在網(wǎng)絡(luò)上反復(fù)傳輸?shù)臅r(shí)間,從而獲得更快的速度,提高業(yè)務(wù)處理效率。另外,存儲(chǔ)過(guò)程可以實(shí)現(xiàn)數(shù)據(jù)庫(kù)回滾等操作,提高了數(shù)據(jù)的安全性和程序的健壯性。餐飲管理系統(tǒng)中有不少?gòu)?fù)雜的業(yè)務(wù),有些操作在失敗的情況下需要進(jìn)行回滾操作,故本系統(tǒng)在數(shù)據(jù)庫(kù)設(shè)計(jì)時(shí)引入存儲(chǔ)過(guò)程。
    例如,清空當(dāng)天的營(yíng)業(yè)數(shù)據(jù),并將其復(fù)制到歷史表的存儲(chǔ)過(guò)程代碼如下:
    CREATE DEFINER=′root′@′localhost′PROCEDURE

          ′SP_Clear′(out v_msg varchar(1))
     BEGIN
         declare v_error integer default 0;
         declare continue handler for sqlexception set v_error=1;
         set autocommit = 0;
         start transaction;
         insert into tb_history_bill select * from tb_bill;
         delete from tb_bill;
         if v_error = 1 then
            rollback;
          else
              commit;
         end if;  
         set autocommit = 1;
     END;
    本文根據(jù)小型餐飲店的實(shí)際情況,從教學(xué)的需要出發(fā),設(shè)計(jì)并實(shí)現(xiàn)了基于C/S架構(gòu)的餐飲管理系統(tǒng)。整個(gè)系統(tǒng)實(shí)現(xiàn)了餐飲業(yè)務(wù)流程過(guò)程中的基本功能,達(dá)到設(shè)計(jì)目的。結(jié)合源代碼講解旅游管理信息系統(tǒng),提高了學(xué)生的學(xué)習(xí)興趣;學(xué)生自己動(dòng)手編程,又進(jìn)一步鍛煉了編程能力。投入課堂教學(xué)4年以來(lái),教學(xué)效果良好。
    如今平板電腦等移動(dòng)設(shè)備逐漸用于前臺(tái)點(diǎn)菜,而本文中的餐飲管理系統(tǒng)不支持移動(dòng)設(shè)備,所以,今后需要進(jìn)一步研究在本系統(tǒng)中增加移動(dòng)設(shè)備遠(yuǎn)程點(diǎn)菜的功能。
參考文獻(xiàn)
[1] 郭敏文.餐飲部運(yùn)行與管理[M].北京:旅游教育出版社,2005.
[2] NAGEL C, EVJEN B, GLYNN J. C#高級(jí)編程[M].李銘,譯.北京:清華大學(xué)出版社,2006.
[3] 王新宇,陳婕. 基于工作過(guò)程的“旅游管理軟件開(kāi)發(fā)技術(shù)”課程教學(xué)設(shè)計(jì)——以“小型客房管理系統(tǒng)”學(xué)習(xí)情境
設(shè)計(jì)為例[J].電子商務(wù),2012(7):78-80.
[4] 陳婕. 酒店管理信息系統(tǒng)中“房態(tài)圖”的設(shè)計(jì)和實(shí)現(xiàn)[J].軟件導(dǎo)刊,2011,10(11):122-124.
[5] KOFLER M. MySQL 5權(quán)威指南[M].北京:人民郵電出版社,2008.
[6] 唐政.C#項(xiàng)目開(kāi)發(fā)全程實(shí)錄[M]. 北京:清華大學(xué)出版社,2008.
[7] 李丹,曹小佳.電子病歷信息管理系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)[J].微型機(jī)與應(yīng)用, 2013,32(1):11-13.

此內(nèi)容為AET網(wǎng)站原創(chuàng),未經(jīng)授權(quán)禁止轉(zhuǎn)載。