餐廳點(diǎn)菜系統(tǒng)畢業(yè)設(shè)計(jì)論文_第1頁
餐廳點(diǎn)菜系統(tǒng)畢業(yè)設(shè)計(jì)論文_第2頁
餐廳點(diǎn)菜系統(tǒng)畢業(yè)設(shè)計(jì)論文_第3頁
餐廳點(diǎn)菜系統(tǒng)畢業(yè)設(shè)計(jì)論文_第4頁
餐廳點(diǎn)菜系統(tǒng)畢業(yè)設(shè)計(jì)論文_第5頁
已閱讀5頁,還剩37頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡介

摘要中國是舉世聞名的美食大國,擁有五千年的飲食文化和巨大的餐飲市場。隨著人民生活水平和生活方式的轉(zhuǎn)變,漸漸的人們發(fā)現(xiàn)餐飲業(yè)具有巨大的投資市場。中國市場的競爭尤為劇烈,而且隨著餐飲業(yè)的迅速擴(kuò)展,其中所暴露的問題也是不容無視的,如餐飲業(yè)管理人才的專業(yè)化程度不夠?qū)е聝?nèi)供缺乏,餐廳缺少一套現(xiàn)代企業(yè)制度和監(jiān)督管理體制,效勞管理應(yīng)變能力差,缺乏先進(jìn)的信息工具等。所以,餐飲業(yè)管理從觀念意識、經(jīng)營思想和管理水平還有待專業(yè)化。因此,開發(fā)實(shí)用型點(diǎn)菜系統(tǒng)是餐飲業(yè)開展的必然趨勢。本系統(tǒng)是基于Linux系統(tǒng)下開發(fā)的餐廳點(diǎn)菜系統(tǒng),運(yùn)用效勞器/客戶端開發(fā)模式,采用的是RedHat企業(yè)版5,圖形界面功能由QT類開發(fā),后臺數(shù)據(jù)庫采用SQLITE3,網(wǎng)絡(luò)編程使用的協(xié)議是Linux支配的SocketTCP/IP協(xié)議。前臺劃分為前臺管理,點(diǎn)菜管理,后廚管理,數(shù)據(jù)庫管理,效勞器五個(gè)功能模塊。本系統(tǒng)的主要作業(yè)流程,從顧客在前臺查看餐桌空閑空閑狀態(tài),入桌點(diǎn)菜,可以加菜、刪菜等,提交菜單,后廚按照菜單做菜,顧客到前臺結(jié)賬,前臺打印賬單,顧客結(jié)賬,實(shí)現(xiàn)了開臺、點(diǎn)菜、加菜、刪菜等系統(tǒng)設(shè)計(jì)功能。關(guān)鍵詞:餐廳點(diǎn)菜系統(tǒng);Linux;QT;SQLITE3AbstractChinaisworld-famouscatebigcountry,withfivethousandyearsofdietcultureandgreatfoodmarket.Asthepeople'slivingstandardandlifetransitions,graduallypeoplefoundrestaurantindustryhasgreatinvestmentmarket.Chinawasparticularlyintensemarketcompetition,andwiththerapidexpansionofcateringindustry,whichisexposedtotheproblemisalsonotallowtoignore,suchascateringmanagementpersonnelofprofessionalenoughtoleadtointernalforshortage,lackofarestaurantmodernenterprisesystemandsupervisionandmanagementsystem,servicemanagementstrainabilityispoor,lackofadvancedinformationtoolsetc.So,cateringmanagementfromtheideaconsciousness,managementthoughtandmanagementlevelremainstobeprofessional.Therefore,thedevelopmentofpracticalordersystemisaninevitabletrendinthedevelopmentofcateringindustry.ThissystemisbasedonLinuxsystemofdevelopmentordersystemrestaurant,usingserver/clientdevelopmentmode,useisRedHatenterpriseversion5,graphicinterfacefunctionsbyQTkindofdevelopment,thebackenddatabaseusingSQLITE3,networkprogramminguseagreementisLinuxdominateSocketoftheTCP/IPprotocol.Thefrontdeskisdividedintothefrontdeskmanagement,ordermanagement,managementafterhutch,databasemanagement,serverfivefunctionmodule.Thesystem'smainoperationprocess,fromthecustomerinthefrontdeskchecktablefreeidlestate,intothetabletoorder,canaddfood,deletevegetablesetc,submitthemenu,kitchenaccordingtomenuaftercooking,thecustomertofrontdeskcheck,frontdeskprintbill,customercheckout,realizethefounding,order,andfood,deletevegetablesetcsystemdesignfunctions.Keywords:Restaurantordersystem;Linux;QT;SQLITE3目錄摘要 IAbstract II第1章緒論 11.1選題目的和意義 11.2國內(nèi)外綜述 11.3論文研究內(nèi)容 2第2章相關(guān)知識概述 32.1系統(tǒng)開發(fā)環(huán)境 32.2系統(tǒng)的結(jié)構(gòu) 42.3應(yīng)用的相關(guān)技術(shù) 52.3.1QT圖形界面 52.3.2SQLite數(shù)據(jù)庫 52.3.3Linux系統(tǒng)支配的TCP/IP協(xié)議 6本章小結(jié) 8第3章系統(tǒng)分析及設(shè)計(jì) 9系統(tǒng)需求分析 9功能需求 9性能需求 9系統(tǒng)開發(fā)環(huán)境 10系統(tǒng)總體功能模塊 103.4數(shù)據(jù)庫結(jié)構(gòu)設(shè)計(jì) 12本章小結(jié) 12第4章軟件設(shè)計(jì) 13數(shù)據(jù)庫表結(jié)構(gòu)設(shè)計(jì) 13各功能模塊的詳細(xì)設(shè)計(jì) 13效勞器管理模塊 134.2.2前臺管理模塊 144.2.3顧客點(diǎn)菜端管理模塊 154.2.4后廚管理系統(tǒng) 20數(shù)據(jù)庫管理模塊 20本章小結(jié) 22第5章系統(tǒng)測試 23測試方法與原那么 235.1.1黑盒測試 235.1.2測試根本原那么 235.2系統(tǒng)測試 235.3測試小結(jié) 26結(jié)論 27致謝 28參考文獻(xiàn) 29附錄A 30附錄B 35第1章緒論1.1選題目的和意義面對餐飲業(yè)多元化的經(jīng)營現(xiàn)狀,經(jīng)營的特色、規(guī)模、出品這些因素的不同,帶給餐飲企業(yè)的那么是不同的標(biāo)準(zhǔn)和工作流程和方法,面對著這解決方法不一的情況,對人才的專業(yè)化程度的要求也相應(yīng)地提高了,然而在國內(nèi)市場上,餐飲業(yè)人才供給缺乏,在這樣的兩難情況下,信息系統(tǒng)得出現(xiàn)暫緩了這一緊張局面。首先,餐飲管理信息系統(tǒng)不是單純的用于結(jié)帳計(jì)算的工具,它有著科學(xué)的、標(biāo)準(zhǔn)的管理體系,它是通過對目前餐飲市場的具體情況科學(xué)的調(diào)研分析后設(shè)計(jì)而成的,它能夠針對中餐因其菜品的多樣化和特色化的效勞很難實(shí)現(xiàn)標(biāo)準(zhǔn)化管理,使中餐企業(yè)的本錢控制很難實(shí)現(xiàn)這些問題給與解決。其次,餐飲管理信息系統(tǒng)能夠給出具體的相應(yīng)的符合企業(yè)自身要求的較科學(xué)的標(biāo)準(zhǔn)化管理流程,這暫時(shí)緩解了專業(yè)人才的需求,通過使用該系統(tǒng)就能完成專業(yè)人員所要做的事。最后,餐飲管理信息系統(tǒng)可以針對企業(yè)的經(jīng)營現(xiàn)狀而做出科學(xué)的分析,使得企業(yè)對市場的應(yīng)變能力得到了提高,從而通過餐飲管理信息系統(tǒng)來實(shí)現(xiàn)強(qiáng)化管理、降低本錢、堵漏節(jié)流等作用。更好的完善企業(yè)的經(jīng)營管理,提高企業(yè)自身的競爭實(shí)力。另一方面,基于ARM和Linux的嵌入式系統(tǒng),具有成熟的嵌入式硬件結(jié)構(gòu)和豐富的開放軟件資源,優(yōu)良的性能和廣泛的市場定位,這無疑對開發(fā)工作和學(xué)習(xí)研究是一個(gè)重大幫助;在GUI〔圖形用戶界面〕的選用上,使用基于C++語言面向?qū)ο缶幊痰膽?yīng)用程序開發(fā)軟件庫Qt,它聚集了豐富的C++類提供開發(fā)應(yīng)用程序用戶界面所需要的全部內(nèi)容,具有優(yōu)良的跨平臺性能和豐富的API函數(shù)及開發(fā)文檔。另外,當(dāng)前量產(chǎn)的普通PDA和PC機(jī)硬件上已經(jīng)根本滿足點(diǎn)菜需求,使自行研究的專用硬件設(shè)備不再具有明顯的本錢優(yōu)勢,為此,本課題集合嵌入式Linux和Qt開發(fā)應(yīng)用等技術(shù),以程序軟件的通用性和易用性為方向,構(gòu)造能夠方便移植的軟件。提高餐飲業(yè)的效勞質(zhì)量,并為自身研究學(xué)習(xí)嵌入式系統(tǒng)和GUI應(yīng)用開發(fā)提供一個(gè)良好的平臺。國內(nèi)外綜述餐廳點(diǎn)菜系統(tǒng)代表著當(dāng)今餐飲業(yè)解決方案中最尖端的領(lǐng)先科技,它集網(wǎng)絡(luò)通信技術(shù)與移動(dòng)電腦終端技術(shù)與一身,此高端技術(shù)應(yīng)用在餐飲行業(yè)中,即使在美國也是2001年才在洛杉磯的一家高檔餐廳中誕生;國內(nèi)于2002年3月份方有一例高檔的餐館在上海露面,開中國餐飲管理真正數(shù)字化之先河,在餐飲業(yè)轟動(dòng)一時(shí)。自此,點(diǎn)菜系統(tǒng)市場上豪杰并起,全面促進(jìn)了餐飲業(yè)信息化管理的普及和開展。目前,國內(nèi)已經(jīng)有不少公司開發(fā)出電子點(diǎn)菜系統(tǒng),例如上海工理電子的點(diǎn)菜通、餐飲通等,北京辰森計(jì)算機(jī)系統(tǒng)的手持點(diǎn)菜寶等。有些大型的餐飲企業(yè)已經(jīng)采用了這兩個(gè)公司的產(chǎn)品,例如,花雨大酒店、上海美林閣等采用了上海工理電子的點(diǎn)菜通或餐飲通;向陽漁港集團(tuán)、中國全聚集團(tuán)、四川文杏大酒樓那么采用了北京辰森計(jì)算機(jī)系統(tǒng)的手持點(diǎn)菜系統(tǒng)。但是由于本錢等原因使電子點(diǎn)菜系統(tǒng)的餐館還比擬少,市場需求很大。隨著技術(shù)的進(jìn)步及餐飲業(yè)的劇烈競爭,電子點(diǎn)菜系統(tǒng)將會(huì)越來越普遍,并越做越好。市場上出現(xiàn)的點(diǎn)菜系統(tǒng)都是作為餐廳信息化管理系統(tǒng)的一局部出現(xiàn)的,它們除了實(shí)現(xiàn)根本的點(diǎn)菜功能外,為了便于客戶及管理者的使用,還添加了許多其他的功能,例如,查詢當(dāng)前餐館的資源使用情況,記錄營業(yè)歷史,當(dāng)前工作狀態(tài)等。由此可見,開發(fā)餐廳點(diǎn)菜系統(tǒng)具有重大的意義。首先,提高運(yùn)營效率與降低運(yùn)營本錢,使用餐廳點(diǎn)菜系統(tǒng)可以加快點(diǎn)菜速度,減少人力資源的投入,防止跑、冒、漏;其次,提升餐廳品牌與形象,餐廳點(diǎn)菜系統(tǒng)是一個(gè)高科技產(chǎn)品,它代替?zhèn)鹘y(tǒng)的紙筆式點(diǎn)菜方式給人一種高貴的感覺;最后,營造一個(gè)安靜、舒服的就餐環(huán)境,傳統(tǒng)的餐廳點(diǎn)菜方式在某些環(huán)節(jié)中出現(xiàn)大聲喧嘩的場面,餐廳點(diǎn)菜系統(tǒng)那么可以防止這類情況的發(fā)生。如今開源的嵌入式Linux操作系統(tǒng)已經(jīng)開展的非常成熟,其性能并不亞于很多商業(yè)操作系統(tǒng),而且,它支持的上層軟件非常多,數(shù)據(jù)庫方面的有MySQL、Sqlite等,用戶圖形界面系統(tǒng)有Qt、MiniGUI和Microwindows等。因此,構(gòu)造一個(gè)基于嵌入式Linux的點(diǎn)菜系統(tǒng)在技術(shù)上來說已經(jīng)不是困難的事。論文研究內(nèi)容本文設(shè)計(jì)并實(shí)現(xiàn)了一個(gè)功能簡單的餐廳點(diǎn)菜系統(tǒng),基于該系統(tǒng)可以容易過渡到實(shí)用的點(diǎn)菜系統(tǒng)。在該系統(tǒng)的實(shí)現(xiàn)過程中設(shè)計(jì)到許多技術(shù),其中主要有嵌入式技術(shù)、數(shù)據(jù)庫技術(shù)、用戶圖形界面編程技術(shù)等。餐廳點(diǎn)菜系統(tǒng)一般都涉及很多數(shù)據(jù),而且還要對數(shù)據(jù)進(jìn)行各種處理,因而絕大局部餐廳點(diǎn)菜系統(tǒng)都用數(shù)據(jù)庫管理系統(tǒng)來管理數(shù)據(jù)。數(shù)據(jù)庫管理系統(tǒng)一般依賴與某種操作系統(tǒng),因此,也要選擇一個(gè)適宜的操作系統(tǒng)。另外,為了方便用戶的使用,還要設(shè)計(jì)一個(gè)人性化的圖形界面。餐廳點(diǎn)菜系統(tǒng)中,管理數(shù)據(jù)的地方與使用數(shù)據(jù)的地方往往不在同一個(gè)站點(diǎn)上,需要用到計(jì)算機(jī)網(wǎng)絡(luò)將二者聯(lián)系起來。在本文設(shè)計(jì)的系統(tǒng)中使用了MySQL來管理數(shù)據(jù),操作系統(tǒng)選用了Linux,用戶圖形界面引入了Qt。本課題通過研究現(xiàn)有的電子點(diǎn)菜系統(tǒng)的解決方案,以當(dāng)代廣泛應(yīng)用的Linux系統(tǒng)、Qt圖形界面、SQLite數(shù)據(jù)庫、系統(tǒng)支持的TCP/IP網(wǎng)絡(luò)通信協(xié)議來實(shí)現(xiàn)的點(diǎn)菜系統(tǒng)的終端。具體包括以下內(nèi)容:1.Linux系統(tǒng)開發(fā)平臺的構(gòu)建:使用是全球應(yīng)用最廣泛的RedHatLinux,建立根本的開發(fā)環(huán)境,建立編譯工具,安裝用于程序開發(fā)的Qt,用于數(shù)據(jù)管理的SQLite3。2.點(diǎn)菜終端程序設(shè)計(jì):首先利用Qt設(shè)計(jì)器規(guī)劃點(diǎn)菜終端的程序的大致界面,然后遵循Qt編程一般規(guī)那么編寫代碼,主要為主窗口類的實(shí)現(xiàn),實(shí)現(xiàn)開臺、點(diǎn)菜、加菜、刪菜等功能,并在主程序中添加國際化和中文支持,編譯后進(jìn)行測試。3.?dāng)?shù)據(jù)庫的設(shè)計(jì):首先利用Qt設(shè)計(jì)器規(guī)劃數(shù)據(jù)庫管理程序的大致界面,然后遵循Qt編程一般規(guī)那么編寫代碼,主要為主窗口類的實(shí)現(xiàn),數(shù)據(jù)庫的管理功能,包括刪除菜單列表、添加菜單列表,查詢菜單等功能,并在主程序中添加中文支持。第2章相關(guān)知識概述本系統(tǒng)主要運(yùn)用到的開發(fā)系統(tǒng)環(huán)境是Linux系統(tǒng),選擇的是RedHat企業(yè)版5,該系統(tǒng)是采用C/S〔客戶端/效勞器〕架構(gòu)開發(fā)的,其中運(yùn)用到的技術(shù)有QT圖形界面的開發(fā)、SQLITE3數(shù)據(jù)庫的開發(fā)及socket編程。系統(tǒng)開發(fā)環(huán)境Linux是一種自由和開放源碼的類Unix操作系統(tǒng)。目前存在著許多不同的Linux,但它們都使用了Linux內(nèi)核。Linux可安裝在各種計(jì)算機(jī)硬件設(shè)備中,從、平板電腦、路由器和視頻游戲控制臺,到臺式計(jì)算機(jī)、大型機(jī)和超級計(jì)算機(jī)。Linux是一個(gè)領(lǐng)先的操作系統(tǒng),世界上運(yùn)算最快的10臺超級計(jì)算機(jī)運(yùn)行的都是Linux操作系統(tǒng)。嚴(yán)格來講,Linux這個(gè)詞本身只表示Linux內(nèi)核,但實(shí)際上人們已經(jīng)習(xí)慣了用Linux來形容整個(gè)基于Linux內(nèi)核,并且使用GNU工程各種工具和數(shù)據(jù)庫的操作系統(tǒng)。:Linux操作系統(tǒng)是UNIX操作系統(tǒng)的一種克隆系統(tǒng)。Linux于1991年8月在Usenet新聞組上正式發(fā)布〔Freeminx-likekernelsourcesfor386-AT〕。其創(chuàng)始人是林納斯·本納第克特·托瓦茲〔LinesBenedictTornados〕,出生于芬蘭赫爾辛基市。他畢業(yè)于赫爾辛基大學(xué)計(jì)算機(jī)科學(xué)系。早期的版本內(nèi)核發(fā)布于1994年3月14日,兩年之后版本發(fā)布,此時(shí),Linux功能已經(jīng)非常強(qiáng)大,只是界面設(shè)計(jì)不是很理想。Linux被群眾所關(guān)注是在1998年3月,當(dāng)Netscape承諾在GNU方案的GPL〔GeneralPublicLicense,通用公共許可證〕的一個(gè)修訂版本的根底上公開NetscapeCommunicatorInternet套件的源代碼的時(shí)候。同年7月,世界上最大的兩家關(guān)系數(shù)據(jù)庫廠商Informix和Oracle宣布把他們的數(shù)據(jù)庫產(chǎn)品移植到了Linux上。一個(gè)月后,Intel和Netscape公司購置了Linux發(fā)布商中的領(lǐng)頭羊RedHat公司的少量股票,專項(xiàng)資金投入了Linux世界。次年,Linux成為了IT市場的年青分子,隨著RedHat和Valium成為上市的Linux公司,Linux得到了軟硬件廠商的投資支持,很快便眾所周知,公眾對Linux的興趣與日俱增,相關(guān)的群眾媒體也蜂擁而至,幾乎每周都有與Linux相關(guān)的消息發(fā)布,此時(shí)的Linux已經(jīng)不僅僅是愛好者的玩具了。如今Linux已經(jīng)是軟件開發(fā)人員的首選開發(fā)環(huán)境,其發(fā)行版超過了三百個(gè),最普遍被使用的發(fā)行版有大約十二個(gè),例如Bantu,RedHat,Defiant,F(xiàn)edora等。通常來講,一個(gè)Linux發(fā)行版包括Linux內(nèi)核,將整個(gè)軟件安裝到電腦上的一套安裝工具,各種GNU軟件,其他的一些自由軟件,在一些特定的Linux發(fā)行版中也有一些專有軟件。發(fā)行版為許多不同的目的而制作,包括對不同計(jì)算機(jī)結(jié)構(gòu)的支持,對一個(gè)具體區(qū)域或語言的本地化,實(shí)時(shí)應(yīng)用,和嵌入式系統(tǒng)。Linux主要作為Linux發(fā)行版〔通常被稱為"distort"〕的一局部而使用2.Linux操作系統(tǒng)特點(diǎn):Linux是一款開放源代碼的操作系統(tǒng)。用戶可以通過任何途徑免費(fèi)獲得它的源代碼,并可以任意修改其源代碼。這是其他的操作系統(tǒng)所做不到的。由于它的開放性使無數(shù)程序員積極的參與了Linux的修改、編寫工作,使得Linux吸收了無數(shù)程序員在根據(jù)自己的興趣和靈感對其所做的精華改變,并不斷壯大。Linux支持多任務(wù)、多用戶。多任務(wù)使得Linux可以同時(shí)獨(dú)立運(yùn)行多個(gè)程序而互不影響,為大型的多任務(wù)工程提供保障。多用戶使得各個(gè)用戶對于自己的文件設(shè)備有自己特殊的權(quán)利,保證了各用戶之間互不影響。Linux同時(shí)具有字符界面和圖形界面。在字符界面用戶可以通過鍵盤輸入相應(yīng)的指令來進(jìn)行操作。它同時(shí)也提供了類似Windows圖形界面的X-Window系統(tǒng),用戶可以使用鼠標(biāo)對其進(jìn)行操作。在X-Window環(huán)境中就和在Windows中相似,可以說是一個(gè)Linux版的Windows。Linux提供了先進(jìn)的網(wǎng)絡(luò)支持。它的網(wǎng)絡(luò)功能和其內(nèi)核緊密相連,用戶可以輕松實(shí)現(xiàn)網(wǎng)頁瀏覽、文件傳輸、遠(yuǎn)程登陸等網(wǎng)絡(luò)工作。并且可以作為效勞器提供WWW、FTP、E-Mail等效勞。Linux完全運(yùn)行于保護(hù)模式,其中有對讀、寫進(jìn)行權(quán)限控制、審計(jì)跟蹤、核心授權(quán)等技術(shù)。Linux以它較高的穩(wěn)定性在網(wǎng)絡(luò)效勞器上利于不敗之地。Linux可以運(yùn)行在多種硬件平臺上,如具有x86、680x0、SPARC、Alpha等處理器的平臺。此外Linux還是一種嵌入式操作系統(tǒng),業(yè)界歸納為什么Linux嵌入式操作系統(tǒng)開展如此之快的三大原因是:第一,Linux在嵌入式系統(tǒng)所需的實(shí)時(shí)性、電源管理等核心技術(shù)不斷開展,成熟可期。第二,國際標(biāo)準(zhǔn)組織OSDL、CELF等,持續(xù)建立嵌入式Linux相關(guān)標(biāo)準(zhǔn),有效解決版本分歧與兼容性問題。第三,業(yè)界主導(dǎo)組織、開發(fā)廠商等不斷推出嵌入式Linux相關(guān)開發(fā)工具、維護(hù)系統(tǒng)。2001年1月份發(fā)布的Linux2.4版內(nèi)核已經(jīng)能夠完全支持Intel64位芯片架構(gòu)。同時(shí)Linux也支持多處理器技術(shù)。多個(gè)處理器同時(shí)工作,使系統(tǒng)性能大大提高。Linux支持?jǐn)?shù)十種文件系統(tǒng)格式。普通文件,純文本文件,二進(jìn)制文件,數(shù)據(jù)格式文件,目錄,連接文件,設(shè)備與設(shè)備文件,塊設(shè)備文件,字符設(shè)備文件,套接字和管道等。采用先進(jìn)的內(nèi)存管理機(jī)制,更加有效的利用物理內(nèi)存。主要有頁面、連續(xù)內(nèi)存區(qū)管理和非連續(xù)存儲(chǔ)區(qū)管理機(jī)制。inux的根本思想:Linux的根本思想有兩點(diǎn),第一,一切都是文件;第二,每個(gè)軟件都有確定的用途。其中第一條詳細(xì)來講就是系統(tǒng)中的所有都?xì)w結(jié)為一個(gè)文件,包括命令、硬件和軟件設(shè)備、操作系統(tǒng)、進(jìn)程等等對于操作系統(tǒng)內(nèi)核而言,都被視為擁有各自特性或類型的文件。至于說Linux是基于Unix的,很大程度上也是因?yàn)檫@兩者的根本思想十分相近。2.2系統(tǒng)的結(jié)構(gòu)傳統(tǒng)的C/S體系結(jié)構(gòu)常采用的是開放模式,但這只是系統(tǒng)開發(fā)一級的開放性,在特定的應(yīng)用中無論是Client端還是Server端都還需要特定的軟件支持。由于沒能提供用戶真正期望的開放環(huán)境,C/S結(jié)構(gòu)的軟件需要針對不同的操作系統(tǒng)開發(fā)不同版本的軟件,加之產(chǎn)品的更新?lián)Q代快,已經(jīng)很難適應(yīng)百臺電腦以上局域網(wǎng)用戶同時(shí)使用。而且代價(jià)高,效率低。目前,C/S結(jié)構(gòu)的根本原那么是將計(jì)算機(jī)任務(wù)分解成多個(gè)子任務(wù),由多臺計(jì)算機(jī)分工完成,即采用“功能分布〞原那么??蛻舳送瓿蓴?shù)據(jù)處理,數(shù)據(jù)表示以及用戶接口功能;效勞器端完成DBMS的核心功能。這種客戶請求效勞、效勞器提供效勞的處理方式是一種新型的計(jì)算機(jī)應(yīng)用模式。C/S結(jié)構(gòu)的優(yōu)點(diǎn)是能充分發(fā)揮出客戶端PC的處理能力,很多工作可以在客戶端處理后再提交給效勞器。對應(yīng)的優(yōu)點(diǎn)就是客戶端響應(yīng)速度非???。缺點(diǎn)主要反映以下3個(gè)方面:1.只適用于局域網(wǎng)。而隨著互聯(lián)網(wǎng)的飛速開展,移動(dòng)辦公和分布式辦公越來越普及,這需要我們的系統(tǒng)具有擴(kuò)展性。這種方式遠(yuǎn)程訪問需要專門的技術(shù),同時(shí)要對系統(tǒng)進(jìn)行專門的設(shè)計(jì)來處理分布式的數(shù)據(jù)。2.客戶端需要安裝專用的客戶端軟件。首先涉及到安裝的工作量,其次任何一臺電腦出問題,如病毒、硬件損壞,都需要進(jìn)行安裝或維護(hù)。特別是有很多分部或?qū)Yu店的情況,不是工作量的問題,而是路程的問題。還有,系統(tǒng)軟件升級時(shí),每一臺客戶機(jī)需要重新安裝,其維護(hù)和升級本錢非常高。3.對客戶端的操作系統(tǒng)一般也會(huì)有限制??赡苓m應(yīng)于Win98,但不能用于win2000或WindowsXP?;蛘卟贿m用于微軟新的操作系統(tǒng)等等,更不用說Linux、Unix等。2.3應(yīng)用的相關(guān)技術(shù)本系統(tǒng)應(yīng)用的相關(guān)技術(shù)主要有QT的圖形界面的開發(fā)、數(shù)據(jù)庫的SQLITE的應(yīng)用、還有運(yùn)用到了TCP/IP協(xié)議。2.3.1QT圖形界面1.Qt概念:Qt是諾基亞開發(fā)的一個(gè)跨平臺的C++圖形用戶界面應(yīng)用程序框架。它提供給應(yīng)用程序開發(fā)者建立藝術(shù)級的圖形用戶界面所需的所用功能。QT是完全面向?qū)ο蟮?,很容易擴(kuò)展,并且允許真正地組件編程。所以說QT的進(jìn)步開展將會(huì)推進(jìn)諾基亞桌面等方面的大幅度進(jìn)步。2.Qt的特點(diǎn):Qt是一款面向?qū)ο蟮膱D形界面開發(fā)工具。Qt的良好封裝機(jī)制使得Qt的模塊化程度非常高,可重用性較好,對于用戶開發(fā)來說是非常方便的。Qt提供了一種稱為signals/slots的平安類型來替代callback,這使得各個(gè)元件之間的協(xié)同工作變得十分簡單。它具有豐富的API。Qt包括多達(dá)250個(gè)以上的C++類,還提供基于模板的collections,serialization,file,I/Odevice,directorymanagement,date/time類。甚至還包括正那么表達(dá)式的處理功能。Qt支持2D/3D圖形渲染,支持OpenGL。真正使得Qt在自由軟件界的眾多Widgets(如Lesstif,Gtk,EZWGL,Xforms,fltk等等)中脫穎而出的還是基于Qt的重量級軟件KDE。3.QtCreator:在發(fā)布Qt4.6的同時(shí),作為Qt開發(fā)跨平臺IDE的QtCreator也發(fā)布了更新版本。QtCreator1.3和Qt4.6共同構(gòu)成的QtSDK,包含了開發(fā)跨平臺應(yīng)用程序所需的全部功能。QtCreator是一個(gè)用于Qt開發(fā)的輕量級跨平臺集成開發(fā)環(huán)境。QtCreator可帶來兩大關(guān)鍵益處:提供首個(gè)專為支持跨平臺開發(fā)而設(shè)計(jì)的集成開發(fā)環(huán)境(IDE),并確保首次接觸Qt框架的開發(fā)人員能迅速上手和操作。QtCreator包含了一套用于創(chuàng)立和測試基于Qt應(yīng)用程序的高效工具,包括:一個(gè)高級的C++代碼編輯器上下文感知幫助系統(tǒng)可視化調(diào)試器源代碼管理工程和構(gòu)建管理工具。2.3.2SQLite數(shù)據(jù)庫SQLite,是一款輕型的數(shù)據(jù)庫,是遵守ACID的關(guān)聯(lián)式數(shù)據(jù)庫管理系統(tǒng),它的設(shè)計(jì)目標(biāo)是嵌入式的,而且目前已經(jīng)在很多嵌入式產(chǎn)品中使用了它,它占用資源非常的低,在嵌入式設(shè)備中,可能只需要幾百K的內(nèi)存就夠了。它能夠支持Windows/Linux/Unix等等主流的操作系統(tǒng),同時(shí)能夠跟很多程序語言相結(jié)合,比方Tcl、C#、PHP、Java等,還有ODBC接口,同樣比起Mysql、PostgreSQL這兩款開源世界著名的數(shù)據(jù)庫管理系統(tǒng)來講,它的處理速度比他們都快。SQLite第一個(gè)Alpha版本誕生于2000年5月,至今已經(jīng)有10個(gè)年頭,SQLite也迎來了一個(gè)版本SQLite3已經(jīng)發(fā)布。SQLite的具有以下特性:1.ACID事務(wù);–無需安裝和管理配置;3.儲(chǔ)存在單一磁盤文件中的一個(gè)完整的數(shù)據(jù)庫;4.數(shù)據(jù)庫文件可以在不同字節(jié)順序的機(jī)器間自由的共享;5.支持?jǐn)?shù)據(jù)庫大小至2TB;6.足夠小,大致3萬行C代碼,250K;7.比一些流行的數(shù)據(jù)庫在大局部普通數(shù)據(jù)庫操作要快;8.簡單,輕松的API;9.包含TCL綁定,同時(shí)通過Wrapper支持其他語言的綁定。;10.良好注釋的源代碼,并且有著90%以上的測試覆蓋率;11.獨(dú)立:沒有額外依賴;12.Source完全的Open,你可以用于任何用途,包括出售它;13.支持多種開發(fā)語言,C,PHP,Perl,Java,C#,Python?;赟QLITE有諸多特性,我在設(shè)計(jì)該點(diǎn)菜系統(tǒng)時(shí)應(yīng)用的數(shù)據(jù)庫選擇了它,它雖然很小巧,但是支持的SQL語句不會(huì)遜色于其他開源數(shù)據(jù)庫,同時(shí)還支持事務(wù)處理功能等待。2.3.3Linux系統(tǒng)支配的TCP/IP協(xié)議TCP/IP是一個(gè)網(wǎng)絡(luò)協(xié)議族的名字,協(xié)議是所有軟件產(chǎn)品必須遵守的、能夠保證各種軟件產(chǎn)品能夠正確通訊的規(guī)那么。協(xié)議還定義了每一局部數(shù)據(jù)塊怎樣管理所傳輸?shù)臄?shù)據(jù)。精確一點(diǎn)說,一個(gè)協(xié)議定義了兩個(gè)應(yīng)用程序或是計(jì)算機(jī)之間能夠進(jìn)行互相通訊,對于其中的每一個(gè)〔應(yīng)用程序或計(jì)算機(jī)〕都保證使用同樣的標(biāo)準(zhǔn)。TCP/IP代表傳輸控制協(xié)議/網(wǎng)絡(luò)協(xié)議,它是做為軟件的網(wǎng)絡(luò)組成部件而設(shè)計(jì)的。每個(gè)TCP/IP的協(xié)議都有他專門的工作,比方萬維網(wǎng)〔WWW〕,發(fā)送電子郵件〔E-mail〕,傳輸文件〔Ftp〕,提供遠(yuǎn)程登陸效勞等。從協(xié)議分層模型方面來講,TCP/IP由四個(gè)層次組成:網(wǎng)絡(luò)接口層、網(wǎng)絡(luò)層、傳輸層、應(yīng)用層。TCP/IP協(xié)議并不完全符合OSI的七層參考模型。OSI是傳統(tǒng)的開放式系統(tǒng)互連參考模型,是一種通信協(xié)議的7層抽象的參考模型,其中每一層執(zhí)行某一特定任務(wù)。該模型的目的是使各種硬件在相同的層次上相互通信。這7層是物理層、數(shù)據(jù)鏈路層、網(wǎng)絡(luò)層、傳輸層、會(huì)話層、表示層和應(yīng)用層。而TCP/IP通訊協(xié)議采用了4層的層級結(jié)構(gòu),每一層都呼叫它的下一層所提供的網(wǎng)絡(luò)來完成自己的需求。由于ARPNET的設(shè)計(jì)者注重的是網(wǎng)絡(luò)互聯(lián),允許通信子網(wǎng)〔網(wǎng)絡(luò)接口層〕采用已有的或是將來有的各種協(xié)議,所以這個(gè)層次中沒有提供專門的協(xié)議。實(shí)際上,TCP/IP協(xié)議可以通過網(wǎng)絡(luò)接口層連接到任何網(wǎng)絡(luò)上,例如X.25交換網(wǎng)或IEEE802局域網(wǎng)。TCP/IP協(xié)議的具有以下3個(gè)特點(diǎn):1.對數(shù)據(jù)可靠性的要求:對數(shù)據(jù)要求高可靠性的應(yīng)用需選擇TCP協(xié)議,如驗(yàn)證、密碼字段的傳送都是不允許出錯(cuò)的,而對數(shù)據(jù)的可靠性要求不那么高的應(yīng)用可選擇UDP傳送。2.應(yīng)用的實(shí)時(shí)性:TCP協(xié)議在傳送過程中要使用三次握手、重傳確認(rèn)等手段來保證數(shù)據(jù)傳輸?shù)目煽啃?。使用TCP協(xié)議會(huì)有較大的時(shí)延,因此不適合對實(shí)時(shí)性要求較高的應(yīng)用,如VOIP、視頻監(jiān)控等。相反,UDP協(xié)議那么在這些應(yīng)用中能發(fā)揮很好的作用。3.網(wǎng)絡(luò)的可靠性:由于TCP協(xié)議的提出主要是解決網(wǎng)絡(luò)的可靠性問題,它通過各種機(jī)制來減少錯(cuò)誤發(fā)生的概率。因此,在網(wǎng)絡(luò)狀況不是很好的情況下需選用TCP協(xié)議〔如在廣域網(wǎng)等〕,但是假設(shè)在網(wǎng)絡(luò)狀況很好的情況下〔如局域網(wǎng)等〕就不需要再采用TCP協(xié)議,而建議選擇UDP協(xié)議來減少網(wǎng)絡(luò)負(fù)荷。TCP/IP協(xié)議的運(yùn)作機(jī)制是IP層負(fù)責(zé)接收由更低層〔網(wǎng)絡(luò)接口層例如以太網(wǎng)設(shè)備驅(qū)動(dòng)程序〕發(fā)來的數(shù)據(jù)包,并把該數(shù)據(jù)包發(fā)送到更高層TCP層,相反,IP層也把從TCP層接收來的數(shù)據(jù)包傳送到更低層。IP數(shù)據(jù)包是不可靠的,因?yàn)镮P并沒有做任何事情來確認(rèn)數(shù)據(jù)包是按順序發(fā)送的或者沒有被破壞。IP數(shù)據(jù)包中含有發(fā)送它的主機(jī)的地址〔源地址〕和接收它的主機(jī)的地址〔目的地址〕。高層的TCP效勞在接收數(shù)據(jù)包時(shí),通常假設(shè)包中的源地址是有效的。也可以這樣說,IP地址形成了許多效勞的認(rèn)證根底,這些效勞相信數(shù)據(jù)包是從一個(gè)有效的主機(jī)發(fā)送來的。IP確認(rèn)包含一個(gè)選項(xiàng),叫作IPsourcerouting,可以用來指定一條源地址和目的地址之間的直接路徑。對于一些TCP和UDP的效勞來說,使用了該選項(xiàng)的IP包好似是從路徑上的最后一個(gè)系統(tǒng)傳遞過來的,而不是來自于它的真實(shí)地點(diǎn)。這個(gè)選項(xiàng)是為了測試而存在的,說明了它可以被用來欺騙系統(tǒng)來進(jìn)行平常是被禁止的連接。許多依靠IP源地址做確認(rèn)的效勞將產(chǎn)生問題并且會(huì)被非法入侵。TCP是面向連接的通信協(xié)議,通過三次握手建立連接,通訊完成時(shí)要撤除連接,由于TCP是面向連接的所以只能用于點(diǎn)對點(diǎn)的通訊。TCP提供的是一種可靠的數(shù)據(jù)流效勞,采用“帶重傳的肯定確認(rèn)〞技術(shù)來實(shí)現(xiàn)傳輸?shù)目煽啃?。TCP還采用一種稱為“滑動(dòng)窗口〞的方式進(jìn)行流量控制,所謂窗口實(shí)際表示接收能力,用以限制發(fā)送方的發(fā)送速度。如果IP數(shù)據(jù)包中有已經(jīng)封好的TCP數(shù)據(jù)包,那么IP將把它們向上傳送到TCP層。TCP將包排序并進(jìn)行錯(cuò)誤檢查,同時(shí)實(shí)現(xiàn)虛電路間的連接。TCP數(shù)據(jù)包中包括序號和確認(rèn),所以未按照順序收到的包可以被排序,而損壞的包可以被重傳。TCP將它的信息送到更高層的應(yīng)用程序,例如Telnet的效勞程序和客戶程序。應(yīng)用程序輪流將信息送回TCP層,TCP層便將它們向下傳送到IP層,設(shè)備驅(qū)動(dòng)程序和物理介質(zhì),最后到接收方。面向連接的效勞〔例如Telnet、FTP、rlogin、XWindows和SMTP〕需要高度的可靠性,所以它們使用了TCP。DNS在某些情況下使用TCP〔發(fā)送和接收域名數(shù)據(jù)庫〕,但使用UDP傳送有關(guān)單個(gè)主機(jī)的信息。基于TCP/IP有諸多特點(diǎn),它的數(shù)據(jù)可靠性剛好符合本系統(tǒng)設(shè)計(jì)的要求數(shù)據(jù)的平安性,同時(shí)它具有很好的網(wǎng)絡(luò)的平安性,保證餐廳點(diǎn)菜系統(tǒng)能夠很好的運(yùn)行,所以我在設(shè)計(jì)該系統(tǒng)的時(shí)候選擇了該協(xié)議來實(shí)現(xiàn)通信。TCP/IP協(xié)議的實(shí)現(xiàn)的流程圖如下列圖2-1所示??蛻舳丝蛻舳诵谄鞫藄ocketsocketrecv/recvfromsend/sendtoclosesend/sendtoclosebindlistenacceptconnectrecv/recvfrom圖2-1TCP/IP協(xié)議流程圖本章小結(jié)本章主要詳細(xì)介紹了該點(diǎn)菜系統(tǒng)應(yīng)用的相關(guān)的技術(shù),主要介紹了開發(fā)的系統(tǒng)環(huán)境Linux系統(tǒng)和用到的數(shù)據(jù)庫SQLITE3,運(yùn)用到的圖形界面開發(fā)工具QT,運(yùn)用到的網(wǎng)絡(luò)技術(shù)TCP/IP協(xié)議等概念,并且介紹了相關(guān)技術(shù)的特點(diǎn)。第3章系統(tǒng)分析及設(shè)計(jì)系統(tǒng)需求分析隨著局域網(wǎng)技術(shù)與電子商務(wù)的深入開展,餐廳自助點(diǎn)菜系統(tǒng)也在國內(nèi)外蓬勃開展,并日益深入到人們的生活當(dāng)中。餐廳自助自助點(diǎn)菜在國外早已成為一種時(shí)尚。餐廳每日消費(fèi)人數(shù)的巨大,自助點(diǎn)菜是一種必不可少的工具,而國內(nèi)的點(diǎn)菜系統(tǒng)還不成熟,所以本課題將設(shè)計(jì)實(shí)現(xiàn)一個(gè)餐廳自助點(diǎn)菜系統(tǒng)。本系統(tǒng)根據(jù)一般餐廳的需要,分析本系統(tǒng)的業(yè)務(wù)流程如下:1.效勞器負(fù)責(zé)前臺、廚房、數(shù)據(jù)庫管理、點(diǎn)菜終端的通信;2.點(diǎn)菜終端從數(shù)據(jù)庫獲取菜品信息;3.前臺負(fù)責(zé)查詢餐臺的空閑狀態(tài)和結(jié)賬并打印賬單;4.顧客點(diǎn)菜,并填入數(shù)據(jù)庫;5.效勞器接受點(diǎn)菜信息并發(fā)送給后廚;6.后廚開始按照菜單信息做菜;7.用戶到前臺結(jié)賬;8.結(jié)果被顯示給用戶,顧客結(jié)賬。功能需求用戶在客戶端點(diǎn)菜,通過局域網(wǎng)傳送到效勞器,后廚接受從效勞器接受到菜單信息,客戶在前臺結(jié)賬。同時(shí)有個(gè)數(shù)據(jù)庫管理界面可以實(shí)現(xiàn)菜品信息的管理。根據(jù)系統(tǒng)功能的需求,分析了所需要的系統(tǒng)總功能結(jié)構(gòu)如表3-1所示。表3-1功能需求名稱功能客戶端設(shè)置根底信息,更新菜譜,點(diǎn)菜,結(jié)賬,打印賬單;效勞器負(fù)責(zé)各終端間的通信;性能需求本系統(tǒng)性能要求主要是以下5個(gè)方面。1.系統(tǒng)處理的準(zhǔn)確性和及時(shí)性:系統(tǒng)處理的準(zhǔn)確性和及時(shí)性是系統(tǒng)的必要性能。在系統(tǒng)設(shè)計(jì)和開發(fā)過程中,要充分考慮系統(tǒng)當(dāng)前和將來可能承受的工作量,使系統(tǒng)的處理能力和響應(yīng)時(shí)間能夠滿足信息處理的需求。由于餐廳自助點(diǎn)菜系統(tǒng)客戶端的點(diǎn)菜對于整個(gè)系統(tǒng)的功能和性能完成舉足輕重。作為客戶自助點(diǎn)菜的模塊,其準(zhǔn)確性很大程度上決定了系統(tǒng)的成敗。在系開發(fā)過程中,必須保證系統(tǒng)的準(zhǔn)確性。2.系統(tǒng)的開放性和系統(tǒng)的可擴(kuò)充性:餐廳自助點(diǎn)菜系統(tǒng)在開發(fā)過程中,應(yīng)該充分考慮以后的可擴(kuò)充性。例如新增菜品,會(huì)員充值等。所有這些,都要求系統(tǒng)提供足夠的手段進(jìn)行功能的調(diào)整和擴(kuò)充。而要實(shí)現(xiàn)這一點(diǎn),應(yīng)通過系統(tǒng)的開放性來完成。3.系統(tǒng)的易用性:餐廳自助點(diǎn)菜系統(tǒng)是直接面對用戶的,而用戶往往對計(jì)算機(jī)并不是非常熟悉。這就要求系統(tǒng)能夠提供良好的用戶接口,易用的人機(jī)交互界面。要實(shí)現(xiàn)這一點(diǎn),就要求系統(tǒng)應(yīng)該盡量使用用戶熟悉的術(shù)語和中文信息的界面。4.系統(tǒng)的標(biāo)準(zhǔn)性:系統(tǒng)在設(shè)計(jì)開發(fā)使用過程中都要涉及到很多計(jì)算機(jī)硬件、軟件。所有這些都要符合主流國際、國家和行業(yè)標(biāo)準(zhǔn)。例如在開發(fā)中使用的操作系統(tǒng)、網(wǎng)絡(luò)系統(tǒng)、開發(fā)工具都必須符合通用標(biāo)準(zhǔn)。如標(biāo)準(zhǔn)的數(shù)據(jù)庫操縱界面、作為業(yè)界標(biāo)準(zhǔn)的TCP/IP網(wǎng)絡(luò)協(xié)議及ISO9002標(biāo)準(zhǔn)所要求的質(zhì)量標(biāo)準(zhǔn)等;同時(shí),在自主開發(fā)本系統(tǒng)時(shí),要進(jìn)行良好的設(shè)計(jì)工作,制訂行之有效的軟件工程標(biāo)準(zhǔn),保證代碼的易讀性、可操作性和可移植性。5.系統(tǒng)的先進(jìn)性:目前計(jì)算系統(tǒng)的技術(shù)開展相當(dāng)快,做為餐廳管理系統(tǒng)工程,應(yīng)該在系統(tǒng)的生命周期盡量做到系統(tǒng)的先進(jìn)。這一方面通過系統(tǒng)的開放性和可擴(kuò)充性,不斷改善系統(tǒng)的功能完成。另一方面,在系統(tǒng)設(shè)計(jì)和開發(fā)的過程中,應(yīng)在考慮本錢的根底上盡量采用當(dāng)前主流并先進(jìn)且有良好開展前途的工具。系統(tǒng)開發(fā)環(huán)境本系統(tǒng)是基于Linux系統(tǒng)中Qt來設(shè)計(jì)前臺應(yīng)用系統(tǒng)的可視化界面,而后臺局部數(shù)據(jù)庫的實(shí)現(xiàn)采用SQLite3來構(gòu)建。Linux系統(tǒng)采用了可視化的程序設(shè)計(jì),具有面向?qū)ο蟮目梢暬O(shè)計(jì)工具,結(jié)構(gòu)化的程序設(shè)計(jì)語言,提供了易學(xué)易用的應(yīng)用程序集成開發(fā)環(huán)境,支持多種數(shù)據(jù)庫系統(tǒng)的訪問,Linux系統(tǒng)中的Qt提供了可視化的界面。用QtCreator可以動(dòng)態(tài)的調(diào)整用戶風(fēng)格圖形界面,直到滿意為止。系統(tǒng)總體功能模塊根據(jù)對餐廳點(diǎn)菜系統(tǒng)需要實(shí)現(xiàn)的功能進(jìn)行需求分析,將本系統(tǒng)的前臺劃分為前臺管理,點(diǎn)菜管理,后廚管理,數(shù)據(jù)庫管理,效勞器五個(gè)功能模塊;系統(tǒng)功能模塊如圖3-1所示。查詢查詢餐臺信息結(jié)賬查詢餐臺信息結(jié)賬打印賬單前臺管理模塊效勞器后廚管理模塊刪菜詢問接收菜單做完顧客點(diǎn)菜模塊點(diǎn)菜加菜退菜開始圖3-1系統(tǒng)總功能模塊餐廳點(diǎn)菜系統(tǒng)的功能模塊概要描述如表3-2所示。表3-2功能模塊描述表名稱功能效勞器負(fù)責(zé)前臺,點(diǎn)菜終端,后廚終端間的通信;前臺終端負(fù)責(zé)查詢餐臺空閑信息,顧客結(jié)賬,并打印賬單信息;點(diǎn)菜終端設(shè)置根底信息,更新菜譜,點(diǎn)菜,加菜,刪菜;后廚終端接收顧客點(diǎn)菜的菜單信息進(jìn)行做菜;數(shù)據(jù)庫管理負(fù)責(zé)管理數(shù)據(jù)庫的菜菜品信息;1.效勞器功能:效勞器功能是整個(gè)系統(tǒng)的傳輸通道,是系統(tǒng)的重中之重。當(dāng)顧客點(diǎn)菜客戶端與效勞器連接后,可通過此將點(diǎn)菜信息發(fā)送到后廚。后廚和效勞器連接后,可以將做完的菜發(fā)送到效勞器,效勞器將信息發(fā)送到點(diǎn)菜客戶端和前臺。2.前臺終端管理:前臺是本系統(tǒng)重要組成局部之一。本模塊可以查詢當(dāng)前餐臺的空閑信息、接收效勞器發(fā)送過來顧客點(diǎn)菜的消費(fèi)菜單信息,并打印菜單給客戶。細(xì)分的功能模塊如圖3-2。結(jié)賬前臺管理模塊結(jié)賬前臺管理模塊查詢餐臺信息打印賬單查詢餐臺信息打印賬單圖3-2前臺終端模塊3.點(diǎn)菜終端:點(diǎn)菜終端是本系統(tǒng)給顧客的使用的,是本系統(tǒng)的重要組成局部。本模塊將用戶點(diǎn)菜單菜肴發(fā)送到效勞器,并將數(shù)據(jù)信息添加到數(shù)據(jù)庫。細(xì)分的功能模塊如圖3-3所示。選擇菜肴功能是將用戶選擇的菜肴存與表中,用戶可以添加與刪除。點(diǎn)菜信息發(fā)送功能是將用戶點(diǎn)菜信息以結(jié)構(gòu)體的形式發(fā)送到效勞器,并添加到相應(yīng)的數(shù)據(jù)庫中。點(diǎn)菜點(diǎn)菜點(diǎn)菜信息發(fā)送點(diǎn)菜終端選擇菜肴刪菜加菜圖3-3點(diǎn)菜終端模塊4.后廚終端:后廚終端從效勞器接收到顧客點(diǎn)的菜肴,可以繼續(xù)接受顧客加菜的菜單、按照菜單做菜,并可以詢問菜是否需要退菜。細(xì)分功能如圖3-4所示。詢問刪菜詢問刪菜做完接收菜單后廚管理模塊圖3-4后廚終端模塊5.?dāng)?shù)據(jù)庫管理:數(shù)據(jù)庫管理管理菜單數(shù)據(jù)庫信息,包括刪除菜單列表、添加菜單列表,查詢菜單等功能。細(xì)分?jǐn)?shù)據(jù)庫管理功能模塊如圖3-5所示。刪除菜單列表功能是將刪除不做的菜肴信息。添加菜單列表功能是允許可以添加新的菜肴信息。查詢菜單功能是查詢是否有哪道菜肴信息。數(shù)據(jù)庫管理模塊查詢菜譜信息添加菜譜信息刪除菜譜信息數(shù)據(jù)庫管理模塊查詢菜譜信息添加菜譜信息刪除菜譜信息圖3-5數(shù)據(jù)庫管理模塊3.4數(shù)據(jù)庫結(jié)構(gòu)設(shè)計(jì)根據(jù)對本系統(tǒng)數(shù)據(jù)的分析,系統(tǒng)的數(shù)據(jù)庫設(shè)計(jì)了一個(gè)表:菜肴信息表。該表用于存放菜肴的信息,包括菜肴的名字、菜肴的類別、菜肴的價(jià)格、菜肴的描述。本章小結(jié)本章主要對該系統(tǒng)設(shè)計(jì)進(jìn)行了需求分析、功能分析,最后做出詳細(xì)設(shè)計(jì)方案。設(shè)計(jì)中主要將餐廳點(diǎn)菜系統(tǒng)分為五個(gè)模塊,每個(gè)模塊的需求和實(shí)現(xiàn)的功能進(jìn)行了闡述和詳細(xì)設(shè)計(jì)過程分析。第4章軟件設(shè)計(jì)軟件采用面向?qū)ο竦脑O(shè)計(jì)方法,考慮到對計(jì)算效率的要求,采用C++編程語言,開發(fā)環(huán)境為LinuxRedHat企業(yè)版5,效勞器編譯工具為gcc,其余編程工具為g++編譯器,采用C++標(biāo)準(zhǔn)庫函數(shù)和QT類庫。數(shù)據(jù)庫表結(jié)構(gòu)設(shè)計(jì)本系統(tǒng)數(shù)據(jù)庫中建立了一張菜單信息表,該表詳細(xì)結(jié)構(gòu)如圖表4-1所示。表4-1菜單信息表名稱類型(長度)空屬性Idvarchar(20)nouniqueIddvarchar(20)yesNamevarchar(20)yesPricevarchar(20)yesImagepathvarchar(20)yesAboutvarchar(20)yes各功能模塊的詳細(xì)設(shè)計(jì)本系統(tǒng)有五個(gè)模塊組成,分別為server〔效勞器〕,前臺管理模塊,顧客點(diǎn)菜管理模塊,后廚管理模塊,數(shù)據(jù)庫管理模塊等。效勞器管理模塊效勞器模塊主要是用C語言編寫的,主要是為其他模塊間的通信。其中主要運(yùn)用到TCP/IP協(xié)議通信的。運(yùn)用到了TCP/IP協(xié)議函數(shù),首先socket()函數(shù)獲得套接字描述符,然后用bind()函數(shù)將描述符捆綁到IP上,監(jiān)聽listen()函數(shù),其中可以設(shè)置客戶端的個(gè)數(shù)。然后就是等待客戶端的請求連接用accept()函數(shù),其中運(yùn)用到了線程,創(chuàng)立線程函數(shù)pthread_create()用來處理客戶的的請求。主要實(shí)現(xiàn)代碼如下:if((sockfd=socket(AF_INET,SOCK_STREAM,0))==-1){perror("Socketerror!");exit(0);}/*效勞器端填充sockaddr_in結(jié)構(gòu)*/bzero(&server_addr,sizeof(server_addr));server_addr.sin_family=AF_INET;server_addr.sin_addr.s_addr=inet_addr("");server_addr.sin_port=htons(portnumber);/*捆綁sockfd描述符到IP地址*/if(bind(sockfd,(structsockaddr*)&server_addr,sizeof(server_addr))==-1){perror("Binderror!");exit(0);}/*設(shè)置允許連接的最大客戶端數(shù)*/if(listen(sockfd,10)==-1){perror("Listenerror!");exit(0);}address_size=sizeof(client_addr);while(1){inti=0;/*效勞器阻塞,等待客戶程序建立連接*/if((accefd=accept(sockfd,(structsockaddr*)&client_addr,&address_size))==-1){perror("Accepterror!");exit(0);}sock_accept[i]=accefd;i++;/*創(chuàng)立線程,處理客戶端請求*/pthread_ttid;pthread_create(&tid,0,run,&accefd);/*效勞器主程序返回繼續(xù)等待下一次客戶端連接*/}close(sockfd);4.2.2前臺管理模塊前臺管理模塊主要查看餐臺空閑信息,和打印賬單兩局部組成。餐臺空閑信息主要是根據(jù)Button組件文本顯示判斷的是否是空閑狀態(tài),空閑時(shí),當(dāng)顧客來時(shí)如空閑點(diǎn)擊按鈕就connect()觸發(fā)了槽函數(shù)table1(),其中槽函數(shù)中用到Button類的成員函數(shù)setText(),將button的文本信息設(shè)置為“1號有人〞。同樣,當(dāng)顧客結(jié)賬時(shí)點(diǎn)擊按鈕觸發(fā)槽函數(shù)打印賬單給顧客查看,同時(shí)將Button的文本信息設(shè)置為“2人桌〞,賬單是用QListWidget類來顯示。主要實(shí)現(xiàn)代碼如下:voidforegroundDialog::table1(){ QTextCodec::setCodecForTr(QTextCodec::codecForName("utf8"));staticboola=true;if(a){button1->setText(tr("1號有人"));a=false;}else//結(jié)帳{shou();inti=0;doublesum=0;//將客人消費(fèi)情況添加到賬單列表QListWidget*list=newQListWidget;QStringstr1=QString(tr("菜名價(jià)格數(shù)量"));list->insertItem(0,str1);while(menu1[i].num!=0){chara[50];memset(a,0,sizeof(a));sprintf(a,"%d%d",menu1[i].price,menu1[i].num);list->insertItem(i+1,QString(tr(menu1[i].name)+tr("")+tr(a)));sum+=menu1[i].price*menu1[i].num;i++;}QStringa;charaf[10];sprintf(af,"%d",menu1[0].buff[1]);a.append(QString("%1").arg(sum));QStringstr2=QString(tr("桌號:")+tr(af)+tr("共計(jì)"));list->insertItem(i+1,str2+a);list->show();//添加當(dāng)前時(shí)間到賬單time_tlt;lt=time(NULL);charaa[80];memset(aa,0,sizeof(aa));sprintf(aa,"%s",ctime(<));list->insertItem(i+2,QString(tr(aa)));button1->setText(tr("1號(2人桌)"));a=true;}4.2.3顧客點(diǎn)菜端管理模塊點(diǎn)菜端是顧客從前臺獲知該餐桌空閑,那么開臺,并開始點(diǎn)菜,點(diǎn)菜界面可以根據(jù)菜譜信息點(diǎn)擊選擇按鈕,如果需要?jiǎng)h除可以點(diǎn)擊刪除按鈕,當(dāng)確認(rèn)后點(diǎn)擊提交按鈕就將顧客點(diǎn)菜信息發(fā)送到效勞器,效勞器并發(fā)送到后廚。首先創(chuàng)立套接字描述符Socket()函數(shù),然后連接效勞器connect()。主要代碼實(shí)現(xiàn)如下:/*客戶程序建立sockfd描述符*/if((sockfd=socket(AF_INET,SOCK_STREAM,0))==-1)/*客戶程序填充效勞端的資料*/bzero(&server_addr,sizeof(server_addr));server_addr.sin_family=AF_INET;server_addr.sin_addr.s_addr=inet_addr("");server_addr.sin_port=htons(portnumber);/*客戶程序發(fā)起連接請求*/if(connect(sockfd,(structsockaddr*)&server_addr,sizeof(structsockaddr))==-1)開臺界面有兩個(gè)選擇都是用QComboBox類,可以選擇現(xiàn)在是幾號桌和人數(shù),點(diǎn)擊開臺Button同樣觸發(fā)槽函數(shù)slotOkButton()的發(fā)生,會(huì)讓點(diǎn)菜界面顯示用到QWidget類中的成員show()函數(shù)。再send()將開臺信息發(fā)送到效勞器。點(diǎn)擊主要實(shí)現(xiàn)代碼如下:voidwelcomeDialog::slotOkButton()//開臺{ if(star==true) { QStringst=numberComboBox->currentText(); tableNumber=st.toInt(); diancaiDialog*dianc=newdiancaiDialog; dianc->show(); SeleteList[0].buffer[0]=1; SeleteList[0].buffer[1]=tableNumber; send(sockfd,SeleteList,sizeof(SeleteList),0); star=false; } else {;}}菜單列表是從數(shù)據(jù)庫列表中獲取的,首先用QSqlDatabase類中的addDatabase()成員函數(shù)加載數(shù)據(jù)庫驅(qū)動(dòng),然后用setDatabaseName()成員函數(shù)指明的數(shù)據(jù)庫名稱,在用open()成員函數(shù)翻開并獲取菜單信息用QLable類組件顯示。主要實(shí)現(xiàn)代碼如下:QSqlDatabasedata=QSqlDatabase::addDatabase("QSQLITE");//加載數(shù)據(jù)庫驅(qū)動(dòng) data.setDatabaseName("database");//指明數(shù)據(jù)庫名稱 //翻開數(shù)據(jù)庫if(!data.open()){ QMessageBox::critical(0,QObject::tr("Datebaseerror"), data.lastError().text());}QSqlQueryquery;query.exec("select*frommenubook");點(diǎn)菜功能實(shí)現(xiàn)主要是中選擇按鈕按下時(shí),觸發(fā)的槽函數(shù)slotImButton(),實(shí)現(xiàn)菜品選擇功能,將選擇菜的信息添參加已選列表,并存入SeleteList中,分為提交前選菜和提交后加菜兩局部。主要代碼實(shí)現(xiàn)如下:voiddiancaiDialog::slotImButton()//選擇{ staticintn=0; QStringlistText=imLabel->text(); QStringlistText1=im1Label->text(); QStringlistText2=spinBox->text(); QStringtext; text=listText1+listText; text+="\t"; text+=listText2; okList->insertItem(n,text); spinBox->setValue(1); okList->setCurrentRow(0); ints=okList->count()-1; //遍歷MenuBook,查找與宣傳顯示相同名稱的菜,并將其信息存入SeleteList或additem for(intj=0;j<m;j++) { if(listText==MenuBook[j].Name) { QByteArrayba=MenuBook[j].Name.toUtf8(); strcpy(SeleteList[s].nam,ba.data()); SeleteList[s].num=listText2.toInt(); SeleteList[s].pric=MenuBook[j].Price; printf("add:%s\n",SeleteList[s].nam); if(pro==false)//加菜 { staticintss=0; strcpy(additem[ss].addnam,ba.data()); additem[ss].addnum=listText2.toInt(); additem[ss].addpric=MenuBook[j].Price; printf("name:%snum:%d\n",additem[ss].addnam,additem[ss].addnum); ss++; } } }}當(dāng)刪除按鈕按下時(shí),觸發(fā)的槽函數(shù)slotDelete(),實(shí)現(xiàn)提交前從已選列表及SeleteList中刪除,提交后刪菜功能。主要實(shí)現(xiàn)代碼如下:voiddiancaiDialog::slotDelete()//刪除{ if(okList->count()==0) del=false; else del=true; if(del==true) { QStringtext=okList->currentItem()->text(); intcou=okList->count(); introw=okList->currentRow(); //獲取當(dāng)前選擇工程,并將其從已選列表和SeleteList中刪除QListWidgetItem*item=okList->takeItem(okList->currentRow()); deleteitem; intf; for(f=cou-row-1;f<cou;f++) { SeleteList[f]=SeleteList[f+1]; memset(SeleteList[cou].nam,0,sizeof(SeleteList[cou].nam)); SeleteList[cou].num=0; ipric-=SeleteList[cou].num*SeleteList[cou].pric; } //提交后刪菜 if(pro==false) { intm; ipric=0; for(m=0;m<okList->count();m++) ipric+=SeleteList[m].pric*SeleteList[m].num; printf("ipric:%d\n",ipric); QByteArrayba=text.toUtf8(); strcpy(additem[0].addnam,ba.data()); additem[0].bufer[0]=4; additem[0].bufer[1]=tableNumber; additem[0].addnum=1; for(m=0;m<6;m++) additem[0].addnam[m]=''; send(sockfd,additem,sizeof(additem),0); } } else//del==false {;}}當(dāng)提交按鈕按下時(shí),觸發(fā)的槽函數(shù)on_listOkButton_clicked(),實(shí)現(xiàn)將選擇的菜品信息seletelist結(jié)構(gòu)體send()發(fā)送至效勞器的功能。主要代碼實(shí)現(xiàn)如下:voiddiancaiDialog::on_listOkButton_clicked()//提交{ QTextCodec::setCodecForTr(QTextCodec::codecForName("utf8")); //將選擇的菜發(fā)送至效勞器 if(pro==true) { SeleteList[0].buffer[0]=2; SeleteList[0].buffer[1]=tableNumber; send(sockfd,SeleteList,sizeof(SeleteList),0); } //將添加的菜發(fā)送至效勞器 elseif(pro==false) { additem[0].bufer[0]=5; additem[0].bufer[1]=tableNumber; send(sockfd,additem,sizeof(additem),0); intii=0; for(ii=0;additem[ii].addnum!=0;ii++) printf("%s%d\n",additem[ii].addnam,additem[ii].addnum); memset(additem,0,sizeof(additem)); } //計(jì)算消費(fèi)金額 intm; ipric=0; for(m=0;m<okList->count();m++) ipric+=SeleteList[m].pric*SeleteList[m].num; QMessageBox::about(this,"ok",tr("提交完成")); pro=false;}當(dāng)結(jié)賬按鈕按下時(shí),觸發(fā)此槽函數(shù)on_listPayButton_clicked(),結(jié)算清單,send()發(fā)送至效勞器。結(jié)賬功能代碼實(shí)現(xiàn)如下:voiddiancaiDialog::on_listPayButton_clicked()//結(jié)帳{if(pro==true){;}else{//建立消息框QDialog*dlg= newQDialog;dlg->setWindowTitle(tr("消費(fèi)金額"));QStringstr;str.append(QString("%1").arg(ipric));str=tr("RMB:")+str+tr("元");QLabel*label=newQLabel;label->setText(str);QPushButton*btn=newQPushButton(tr("確定"));QVBoxLayout*layout=newQVBoxLayout(dlg);layout->addWidget(label);layout->addWidget(btn);connect(btn,SIGNAL(clicked()),dlg,SLOT(close()));dlg->show();quitButton->show();//添加桌號、消費(fèi)金額SeleteList[0].buffer[0]=3;SeleteList[0].buffer[1]=tableNumber;SeleteList[0].buffer[2]=ipric;send(sockfd,SeleteList,sizeof(SeleteList),0);}}后廚管理系統(tǒng)后廚首先連接效勞器,同樣連接效勞器函數(shù)socket(),connect(),廚師點(diǎn)擊接受Button觸發(fā)槽函數(shù)slotrec(),槽函數(shù)中用TCP/IP協(xié)議中的recv()函數(shù)將顧客點(diǎn)菜信息接收到并用QListWidget類中insertItem()成員函數(shù)將菜單顯示出,其中用到time_t類將時(shí)間顯示出并按照其做菜,當(dāng)做完一個(gè)菜時(shí)點(diǎn)擊做完按鈕時(shí)將菜單信息刪除該做完了菜用QListWidgetItem類中takeItem()成員函數(shù)delete刪除一行,并將其添加到做完菜單列表中用QListWidget類中的insertItem()成員函數(shù)。主要實(shí)現(xiàn)如下:hhDialog::hhDialog(QWidget*parent,Qt::WindowFlagsf):QDialog(parent,f){QHBoxLayout*btnLayout=newQHBoxLayout;btnLayout->addWidget(rec);btnLayout->addWidget(recDel);btnLayout->addWidget(finishButton);btnLayout->addWidget(clearButton);btnLayout->addWidget(btn);QHBoxLayout*listLayout=newQHBoxLayout;listLayout->addWidget(list);listLayout->addWidget(finishList);QVBoxLayout*layout=newQVBoxLayout(this);layout->addLayout(listLayout);layout->addLayout(btnLayout);connect(rec,SIGNAL(clicked()),this,SLOT(slotrec()));connect(btn,SIGNAL(clicked()),this,SLOT(close()));connect(finishButton,SIGNAL(clicked()),this,SLOT(on_finishButton_clicked()));connect(clearButton,SIGNAL(clicked()),this,SLOT(on_clearButton_clicked()));connect(recDel,SIGNAL(clicked()),this,SLOT(on_recDelButton_clicked()));client();}數(shù)據(jù)庫管理模塊數(shù)據(jù)庫管理模塊主要是管理菜單信息的,可以添加菜品信息有添加Button、刪除菜品信息有刪除Button、并能夠查詢菜品有查詢Button。首先用QT中的QSqlTableModel類中的成員函數(shù)setTable(),setEditStrategy(),select(),連數(shù)據(jù)庫列表,用QTableView類組件中的setMode()成員函數(shù)將數(shù)據(jù)庫列表顯示出來。主要實(shí)現(xiàn)代碼如下:model=newQSqlTableModel(view);model->setTable("menubook");model->setEditStrategy(QSqlTableModel::OnManualSubmit);model->select();view->setModel(model);當(dāng)需要?jiǎng)h除某一菜肴時(shí),中選擇某一行時(shí)可以根據(jù)QTableView類中的currentIndex().row()成員函數(shù)得知,用QSqlTableModel中的revertAll()成員函數(shù)將其刪除,并且刪除時(shí)給出QMessageBox提示框提示。主要實(shí)現(xiàn)代碼如下:voidWidget::on_deleteButton_clicked(){ intcurRow=view->currentIndex().row();model->removeRow(curRow);//獲取當(dāng)前行 //刪除當(dāng)前行intok=QMessageBox::warning(this,tr("刪除當(dāng)前行內(nèi)容!"),tr("確定刪除?"),QMessageBox::Yes,QMessageBox::No);if(ok==QMessageBox::No)model->revertAll();elsemodel->submitAll();}當(dāng)需要添加菜肴信息時(shí),用QSqlTableModel類中的insertRow()成員函數(shù)添加信息,同時(shí)用setData()成員函數(shù)添加菜肴信息數(shù)據(jù)。主要實(shí)現(xiàn)代碼如下:voidWidget::on_addButton_clicked(){introwNum=model->rowCount();//獲得表的行數(shù)intid=10;model->insertRow(rowNum);//添加一行model->setData(model->index(rowNum,0),id);//參加數(shù)據(jù)}當(dāng)刪除、修改數(shù)據(jù)庫內(nèi)容完后,需要點(diǎn)擊提交修改Button,才難保存到數(shù)據(jù)中,主要用到QSqlTableModel類中的database()mit()成員函數(shù)。主要代碼實(shí)現(xiàn)如下:voidWidget::on_put_inButton_clicked(){model->database().transaction();//開始事務(wù)操作if(model->submitAll()) //提交所有更改model->database()mit(); //提交else{model->database().rollback()

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論