基于QT的電子點(diǎn)餐系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)_第1頁
已閱讀5頁,還剩53頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

II目錄TOC\o"1-9"\t"樣1,1,樣2,1,樣3,1"\h24767摘要 123449Abstract 218301緒論 122061.1引言 1119171.1.1編寫目的 1229571.1.2項(xiàng)目背景 1280841.1.3現(xiàn)實(shí)背景 1278651.2術(shù)語定義 229301.3參考資料 2129221.4研究目的和意義 2286921.4.1目的 2116851.4.2意義 398642開發(fā)平臺及核心技術(shù)簡介 4105052.1開發(fā)語言介紹 451802.1.1Qt介紹 430562.1.2Qt信號槽機(jī)制簡介 511752.1.3屬性介紹 762182.2開發(fā)環(huán)境 7198172.2.1VisioStudio2008簡介 7250492.2.2VC2008與Qt4.7的開發(fā)環(huán)境搭建 8153132.3核心技術(shù)介紹 840932.3.1UDP協(xié)議 8136762.3.2TCP協(xié)議 9181042.3.3Qt數(shù)據(jù)庫支持 1060803需求分析 12145473.1目前餐飲企業(yè)工作流程 12287403.2所建議系統(tǒng)的工作流程 12134063.3產(chǎn)品功能 13147163.4軟件需求描述 14173613.5系統(tǒng)用例圖 14281463.6軟件接口 1645104總體設(shè)計(jì)與實(shí)現(xiàn) 1720814.1系統(tǒng)架構(gòu)設(shè)計(jì) 17268704.2系統(tǒng)編碼規(guī)范 17323934.2.1類型的命名 17179324.2.2方法和屬性的命名 1814084.2.3變量和常數(shù) 18146214.2.4Main函數(shù)代碼 19277815詳細(xì)設(shè)計(jì) 20151085.1數(shù)據(jù)庫模塊功能設(shè) 20233175.2登錄模塊功能設(shè)計(jì) 20182135.3點(diǎn)餐模塊功能設(shè)計(jì) 2144455.4服務(wù)器模塊功能設(shè)計(jì) 21281425.5廚房模塊功能設(shè)計(jì) 22131145.6數(shù)據(jù)庫模塊設(shè)計(jì)與實(shí)現(xiàn) 22277265.6.1數(shù)據(jù)庫模塊設(shè)計(jì) 2262365.6.2數(shù)據(jù)庫模塊實(shí)現(xiàn) 23306575.7登錄模塊設(shè)計(jì)與實(shí)現(xiàn) 23129535.7.1登錄模塊設(shè)計(jì) 23112385.7.2登陸模塊代碼 23255165.7.3注冊模塊代碼 24117185.8點(diǎn)餐模塊設(shè)計(jì)與實(shí)現(xiàn) 2497035.8.1點(diǎn)餐模塊設(shè)計(jì) 24312705.8.2點(diǎn)餐客戶端代碼 25183565.9服務(wù)器模塊設(shè)計(jì)與實(shí)現(xiàn) 26162875.9.1服務(wù)器模塊設(shè)計(jì)與實(shí)現(xiàn) 26142885.9.2服務(wù)器代碼 26272235.10廚房模塊設(shè)計(jì)與實(shí)現(xiàn) 2842605.10.1廚房模塊設(shè)計(jì) 28303435.10.2廚房客戶端代碼 28171976系統(tǒng)測試 3121046.1簡介 3116136.1.1編寫目的 31311956.1.2項(xiàng)目背景 3155016.1.3系統(tǒng)簡介 31247406.1.4參考資料 31251436.2測試概要 31155786.2.1測試用例設(shè)計(jì) 32137156.2.2測試環(huán)境與配置 32321126.2.3測試方法(和工具) 32276296.3測試結(jié)果及缺陷分析 32311456.3.1登錄模塊測試 326526.3.2點(diǎn)餐模塊實(shí)現(xiàn) 33226756.3.3服務(wù)器模塊實(shí)現(xiàn) 34121886.3.4廚房模塊實(shí)現(xiàn) 36239616.4測試結(jié)論 3716132總結(jié) 382697參考文獻(xiàn) 39732致謝 4019117外文原文 41緒論引言編寫目的本文檔是餐飲點(diǎn)餐管理系統(tǒng)的項(xiàng)目需求說明書,對餐飲點(diǎn)餐管理系統(tǒng)的發(fā)展進(jìn)行簡要回顧,分析當(dāng)前的業(yè)務(wù)流程,總結(jié)此類管理系統(tǒng)的基本特點(diǎn)以及總體功能,盡可能完整的概括提取出需求方的全部想法。本文檔對項(xiàng)目開發(fā)人員、設(shè)計(jì)人員及系統(tǒng)實(shí)施人員具有很重要的指導(dǎo)意義。項(xiàng)目背景項(xiàng)目名稱:餐飲點(diǎn)餐管理系統(tǒng);中國是舉世聞名的美食大國,擁有五千年的飲食文化和巨大的餐飲市場,隨著人民生活水平和生活方式的轉(zhuǎn)變,餐飲業(yè)具有巨大的投資市場,被稱為中國的黃金產(chǎn)業(yè),但同樣也應(yīng)看到,餐飲業(yè)不僅面臨著巨大的發(fā)展機(jī)遇,也面臨著前所未有的挑戰(zhàn)和考驗(yàn)。餐飲業(yè)的不斷發(fā)展,在經(jīng)營管理上也逐步向電子化邁進(jìn),通過電腦信息系統(tǒng)管理餐飲業(yè)的內(nèi)部事務(wù),使得作業(yè)更加簡單化、高效。以財(cái)務(wù)為中心,減輕一線操作人員的勞動(dòng)強(qiáng)度,節(jié)省營業(yè)人員的交班時(shí)間,加強(qiáng)財(cái)務(wù)審核管理。提供多種點(diǎn)菜、結(jié)算、統(tǒng)計(jì)報(bào)表功能,提供分廚房直接打印前臺點(diǎn)菜數(shù)據(jù)。在餐飲經(jīng)營中,傳統(tǒng)的紙制作業(yè)流程無法滿足現(xiàn)代客戶在信息娛樂及服務(wù)安保等方面的要求。而此系統(tǒng)的使用,使餐廳管理者便捷的進(jìn)行經(jīng)營娛樂的管理,大大增加的各店成本控制及銷售額現(xiàn)實(shí)背景我國的餐飲市場經(jīng)過30多年的改革開放及發(fā)展,可以說我國正迎來一個(gè)餐飲業(yè)大發(fā)展的時(shí)期,市場潛在力量巨大,遠(yuǎn)景很是廣闊。根據(jù)中國烹飪協(xié)會發(fā)布的2009年度餐飲業(yè)發(fā)展報(bào)告顯示,即便在經(jīng)濟(jì)遭受重創(chuàng)的2009年,全社會餐飲業(yè)零售額達(dá)依然到17998億元,同比增長16.8%。其中,每月的零售額均超過1300億元,增長率穩(wěn)定在14.4%至21.6%。在各類消費(fèi)性支出中增幅居前,僅次于交通和通信支出。并且預(yù)計(jì)2012年餐飲市場還將繼續(xù)增長,營業(yè)額也將達(dá)到20000億元。與此同時(shí),我國餐飲業(yè)發(fā)展的質(zhì)量和內(nèi)涵也發(fā)生了重大變化。行業(yè)的經(jīng)營領(lǐng)域和市場空間不斷拓寬,經(jīng)營檔次和企業(yè)管理水平不斷提高,經(jīng)營業(yè)態(tài)日趨豐富,投資主體和消費(fèi)需求多元化特點(diǎn)更加突出,網(wǎng)點(diǎn)數(shù)量和人員隊(duì)伍繼續(xù)擴(kuò)大;餐飲市場更加繁榮,消費(fèi)的個(gè)性化和特色化的趨勢明顯,追求健康營養(yǎng)和連鎖規(guī)模發(fā)展成為主題。集團(tuán)化、品牌化、產(chǎn)業(yè)化和國際化的發(fā)展步伐加快,餐飲現(xiàn)代化的進(jìn)程不斷推進(jìn)。近幾年來,中國餐飲業(yè)的發(fā)展一直保持強(qiáng)勁快速增長同時(shí),也看到目前餐飲行業(yè)普遍存在的問題。餐飲企業(yè)的發(fā)展一直處于自我摸索、自我運(yùn)作、自我積累和自我完善為主的狀態(tài),利潤低、承載重、支撐小、發(fā)展難的特點(diǎn)突出。餐飲企業(yè)在產(chǎn)品標(biāo)準(zhǔn)化技術(shù)設(shè)備開發(fā)、連鎖管理體系的建立、專業(yè)人才的培養(yǎng)、吸納資本投入、理論指導(dǎo)和信息交流等方面的條件十分不足,存在著技術(shù)開發(fā)與設(shè)備配套難、管理與人才難、配送渠道與發(fā)展資金難、溝通交流與合作難等深層次因素的制約,行業(yè)平臺和基礎(chǔ)支持力量不強(qiáng),對企業(yè)發(fā)展產(chǎn)生較大的影響。術(shù)語定義所謂”翻臺率”是指在某期間里,指餐桌座位坐滿及餐桌空蕩的速度。一個(gè)高翻臺率意味更多用餐者吃了并且走了,而一個(gè)低的翻臺率意味同樣用餐者是在一段長時(shí)間里使用餐桌,或者餐桌座位是空的。參考資料[1] 餐飲點(diǎn)餐管理系統(tǒng)項(xiàng)目開發(fā)計(jì)劃_v1.00研究目的和意義目的在我們這個(gè)“食文化”高度發(fā)達(dá)的國度里,餐飲業(yè)毋庸置疑地成為第一大傳統(tǒng)產(chǎn)業(yè)。然而,正是這歷史悠久、規(guī)模龐大的產(chǎn)業(yè),卻也是信息化程度最慢和最低的產(chǎn)業(yè)之一。至今為止,絕大多數(shù)餐飲企業(yè)的經(jīng)營方式仍然停留在“一張紙、一支筆、經(jīng)理喊破嗓、員工跑斷腿”的境地;而會計(jì)工作,也仍然是以一支筆或一個(gè)算盤,或最好的情況下一個(gè)計(jì)算器進(jìn)行加減乘除,其本質(zhì)仍然是以人腦計(jì)算為基礎(chǔ),不但工作量巨大,而且極易出錯(cuò)。筆者曾經(jīng)見過生意極好的大排檔,服務(wù)員進(jìn)進(jìn)出出地飛奔于戶外桌臺、大堂吧臺和廚房之間,而經(jīng)理則用計(jì)算器算得滿頭大汗的場景,蔚為壯觀。且不說這種日復(fù)一日的重復(fù)、單調(diào)的勞動(dòng)意義何在,單就消費(fèi)計(jì)算方面的出錯(cuò)而引發(fā)的與客戶之間的矛盾糾紛,就不可勝計(jì)。其實(shí)在人類文明已經(jīng)進(jìn)入電子信息的時(shí)代,絕大多數(shù)重復(fù)、單調(diào)、可程式化的工作都已經(jīng)可以交由計(jì)算機(jī)來完成。面對復(fù)雜和龐大的計(jì)算任務(wù),計(jì)算機(jī)在效率和準(zhǔn)確度方面是人腦所不能望其項(xiàng)背的。作為傳統(tǒng)產(chǎn)業(yè)的餐飲業(yè),同其他很多傳統(tǒng)產(chǎn)業(yè)一樣,同樣可以引入信息化改造。餐飲業(yè)的信息化改造內(nèi)容,主要有:由傳統(tǒng)的筆和紙點(diǎn)餐,改用電子點(diǎn)餐;由傳統(tǒng)的人工計(jì)算、統(tǒng)計(jì)、管理,改用電腦進(jìn)行計(jì)算、統(tǒng)計(jì)和管理;將現(xiàn)代的電子技術(shù)、無線技術(shù)、計(jì)算機(jī)技術(shù)和網(wǎng)絡(luò)技術(shù)引入到餐飲行業(yè)中來,替代部分人工操作,加快餐飲企業(yè)的運(yùn)轉(zhuǎn)效率,提升餐飲企業(yè)的管理水平,使餐飲企業(yè)運(yùn)作更規(guī)范、更科學(xué)、更高效。在餐飲企業(yè)的信息化改造當(dāng)中,無線點(diǎn)餐(點(diǎn)菜)系統(tǒng),成為其核心內(nèi)容,也是餐飲企業(yè)進(jìn)行信息化改造的必由之路。因此本論文研究的目的在于通過餐飲企業(yè)的信息化改造暨利用無線技術(shù),替代傳統(tǒng)的紙和筆進(jìn)行電子點(diǎn)餐(點(diǎn)菜)操作,實(shí)現(xiàn)遠(yuǎn)距離地進(jìn)行信息即時(shí)傳遞。當(dāng)然,無線點(diǎn)餐(點(diǎn)菜)系統(tǒng)不只是可以進(jìn)行點(diǎn)餐操作,同時(shí)通過配套的餐飲管理軟件,還可以實(shí)現(xiàn)強(qiáng)大的統(tǒng)計(jì)和管理功能,使餐飲企業(yè)真正實(shí)現(xiàn)信息化。意義能夠有效地的提升餐飲企業(yè)的檔次和管理水平,做到科學(xué)管理、科學(xué)決策、高效運(yùn)轉(zhuǎn)、降低成本,進(jìn)行信息化是必由之路。而采用無線點(diǎn)餐(點(diǎn)菜)系統(tǒng)取代傳統(tǒng)的手工點(diǎn)餐,采用餐飲管理軟件取代傳統(tǒng)的人工統(tǒng)計(jì)和粗放型管理又是信息化當(dāng)中的核心內(nèi)容。餐飲企業(yè)引進(jìn)一套無線點(diǎn)餐(點(diǎn)菜)系統(tǒng),成本大約在一萬元左右(視配置情況而不同),大約相當(dāng)于一個(gè)服務(wù)員一年的工資,但帶來的便利性和管理水平的升級則是無與倫比的。無線點(diǎn)餐(點(diǎn)菜)系統(tǒng)所帶來的運(yùn)營效率的大幅度提高和人力成本的節(jié)約,遠(yuǎn)超其投資成本,對于餐飲企業(yè)信息化,可以說是不二的選擇。

開發(fā)平臺及核心技術(shù)簡介開發(fā)語言介紹Qt介紹Qt是一個(gè)1991年由奇趣科技開發(fā)的跨平臺C++圖形用戶界面應(yīng)用程序開發(fā)框架。它既可以開發(fā)GUI程序,也可用于開發(fā)非GUI程序,比如控制臺工具和服務(wù)器。Qt是面向?qū)ο蟮目蚣?,使用特殊的代碼生成擴(kuò)展(稱為元對象編譯器(MetaObjectCompiler,moc))以及一些宏,易于擴(kuò)展,允許組件編程。2008年,奇趣科技被諾基亞公司收購,QT也因此成為諾基亞旗下的編程語言工具。2012年,Qt被Digia收購。Qt是一個(gè)跨平臺的C++圖形用戶界面庫,由挪威TrollTech公司出品,目前包括Qt/X11,基于Framebuffer的QtEmbedded,快速開發(fā)工具QtDesigner,國際化工具QtLinguist等,Qt支持Unix系統(tǒng)及Linux,還支持WinNT/Win2k,Win95/98平臺。Qt的良好封裝機(jī)制使得Qt的模塊化程度非常高,可重用性較好,對于用戶開發(fā)來說是非常方便的。QtAPI和開發(fā)工具對所有支持平臺都是一致的,從而可以進(jìn)行獨(dú)立于平臺的程序開發(fā)和配置。它使得跨平臺軟件編程直觀、簡易和方便。Qt提供了一種稱為signals/slots的安全類型來替代callback回調(diào)函數(shù),這使得各個(gè)控件之間的協(xié)同工作變得十分簡單。Qt在Linux下有GPL版,可方便用戶的學(xué)習(xí)及開發(fā)。如果用戶使用C++,對庫的穩(wěn)定性,健壯性要求比較高,并且希望跨平臺開發(fā)的話,那么使用Qt是較好的選擇,Qt還支持2D/3D圖形渲染、OpenGL、XML等。QtScriptforApplications(QSA)是Trolltech的跨平臺腳本工具箱。Qt為靜態(tài)的Qt/C++程序提供了一個(gè)腳本界面,可以定制和擴(kuò)展程序。Qtopia是為基于Linux的PDA,智能電話和其他移動(dòng)設(shè)備設(shè)計(jì)的一個(gè)全面的,可以用戶化的應(yīng)用程序平臺和用戶界面。Qt/Embedded是面向嵌入式系統(tǒng)的Qt版本,是Qt的嵌入式Linux窗口,是完整的自包含C++GUI和基于Linux的嵌入式平臺開發(fā)工具。Qt/EmbeddedAPI可用于多種開發(fā)項(xiàng)目。許多基于Qt的XWindow程序可以非常方便地移植到嵌入式版本,適用于高端PDA等產(chǎn)品。Qt/Embedded內(nèi)部對于字符集的處理采用了UNICODE編碼標(biāo)準(zhǔn)。Qt是基于面向?qū)ο蟮腃++語言,Qt提供了signal和slot的對象通信機(jī)制,具有可查詢和可設(shè)計(jì)的屬性以及強(qiáng)大的事件和事件過濾器,同時(shí),還具有字符國際化,即支持根據(jù)上下文進(jìn)行國際化的字符串翻譯。許多Qt的特性是基于QObject的繼承,通過標(biāo)準(zhǔn)C++技術(shù)實(shí)現(xiàn)的優(yōu)良的跨平臺特性:Qt支持下列操作系統(tǒng):MicrosoftWindows95/98,MicrosoftWindowsNT,Linux,Solaris,SunOS,HP-UX,DigitalUNIX(OSF/1,Tru64),Irix,F(xiàn)reeBSD,BSD/OS,SCO,AIX,OS390,QNX等等。面向?qū)ο螅篞t的良好封裝機(jī)制使得Qt的模塊化程度非常高,可重用性較好,對于用戶開發(fā)來說是非常方便的。Qt提供了一種稱為signals/slots的安全類型來替代callback,這使得各個(gè)元件之間的協(xié)同工作變得十分簡單。豐富的API:Qt包括多達(dá)250個(gè)以上的C++類,還提供基于模板的collections,serialization,file,I/Odevice,directorymanagement,date/time類。甚至還包括正則表達(dá)式的處理功能。支持2D/3D圖形渲染,支持OpenGL,豐富的XML支持。Qt信號槽機(jī)制簡介信號和槽是一種高級接口,應(yīng)用于對象之間的通信,它是QT的核心特性,也是QT區(qū)別于其它工具包的重要地方。信號和槽是QT自行定義的一種通信機(jī)制,它獨(dú)立于標(biāo)準(zhǔn)的C/C++語言,因此要正確的處理信號和槽,必須借助一個(gè)稱為moc(MetaObjectCompiler)的QT工具,該工具是一個(gè)C++預(yù)處理程序,它為高層次的事件處理自動(dòng)生成所需要的附加代碼。在我們所熟知的很多GUI工具包中,窗口小部件(widget)都有一個(gè)回調(diào)函數(shù)用于響應(yīng)它們能觸發(fā)的每個(gè)動(dòng)作,這個(gè)回調(diào)函數(shù)通常是一個(gè)指向某個(gè)函數(shù)的指針。但是,在QT中信號和槽取代了這些凌亂的函數(shù)指針,使得我們編寫這些通信程序更為簡潔明了。信號和槽能攜帶任意數(shù)量和任意類型的參數(shù),他們是類型完全安全的,不會像回調(diào)函數(shù)那樣產(chǎn)生coredumps。所有從QObject或其子類(例如Qwidget)派生的類都能夠包含信號和槽。當(dāng)對象改變其狀態(tài)時(shí),信號就由該對象發(fā)射(emit)出去,這就是對象所要做的全部事情,它不知道另一端是誰在接收這個(gè)信號。這就是真正的信息封裝,它確保對象被當(dāng)作一個(gè)真正的軟件組件來使用。槽用于接收信號,但它們是普通的對象成員函數(shù)。一個(gè)槽并不知道是否有任何信號與自己相連接。而且,對象并不了解具體的通信機(jī)制。我們可以將很多信號與單個(gè)的槽進(jìn)行連接,也可以將單個(gè)的信號與很多的槽進(jìn)行連接,甚至于將一個(gè)信號與另外一個(gè)信號相連接也是可能的,這時(shí)無論第一個(gè)信號什么時(shí)候發(fā)射系統(tǒng)都將立刻發(fā)射第二個(gè)信號??傊?,信號與槽構(gòu)造了一個(gè)強(qiáng)大的部件編程機(jī)制。(1)信號當(dāng)某個(gè)信號對其客戶或所有者發(fā)生的內(nèi)部狀態(tài)發(fā)生改變,信號被一個(gè)對象發(fā)射。只有定義過這個(gè)信號的類及其派生類能夠發(fā)射這個(gè)信號。當(dāng)一個(gè)信號被發(fā)射時(shí),與其相關(guān)聯(lián)的槽將被立刻執(zhí)行,就象一個(gè)正常的函數(shù)調(diào)用一樣。信號-槽機(jī)制完全獨(dú)立于任何GUI事件循環(huán)。只有當(dāng)所有的槽返回以后發(fā)射函數(shù)(emit)才返回。如果存在多個(gè)槽與某個(gè)信號相關(guān)聯(lián),那么,當(dāng)這個(gè)信號被發(fā)射時(shí),這些槽將會一個(gè)接一個(gè)地執(zhí)行,但是它們執(zhí)行的順序?qū)请S機(jī)的、不確定的,我們不能人為地指定哪個(gè)先執(zhí)行、哪個(gè)后執(zhí)行。信號的聲明是在頭文件中進(jìn)行的,QT的signals關(guān)鍵字指出進(jìn)入了信號聲明區(qū),隨后即可聲明自己的信號。例如,下面定義了三個(gè)信號: signals: voidmySignal(); voidmySignal(intx); voidmySignalParam(intx,inty);在上面的定義中,signals是QT的關(guān)鍵字,而非C/C++的。接下來的一行voidmySignal()定義了信號mySignal,這個(gè)信號沒有攜帶參數(shù);接下來的一行voidmySignal(intx)定義了重名信號mySignal,但是它攜帶一個(gè)整形參數(shù),這有點(diǎn)類似于C++中的虛函數(shù)。從形式上講信號的聲明與普通的C++函數(shù)是一樣的,但是信號卻沒有函數(shù)體定義,另外,信號的返回類型都是void,不要指望能從信號返回什么有用信息。信號由moc自動(dòng)產(chǎn)生,它們不應(yīng)該在.cpp文件中實(shí)現(xiàn)。(2)槽槽是普通的C++成員函數(shù),可以被正常調(diào)用,它們唯一的特殊性就是很多信號可以與其相關(guān)聯(lián)。當(dāng)與其關(guān)聯(lián)的信號被發(fā)射時(shí),這個(gè)槽就會被調(diào)用。槽可以有參數(shù),但槽的參數(shù)不能有缺省值。既然槽是普通的成員函數(shù),因此與其它的函數(shù)一樣,它們也有存取權(quán)限。槽的存取權(quán)限決定了誰能夠與其相關(guān)聯(lián)。同普通的C++成員函數(shù)一樣,槽函數(shù)也分為三種類型,即publicslots、privateslots和protectedslots:publicslots:在這個(gè)區(qū)內(nèi)聲明的槽意味著任何對象都可將信號與之相連接。這對于組件編程非常有用,你可以創(chuàng)建彼此互不了解的對象,將它們的信號與槽進(jìn)行連接以便信息能夠正確的傳遞。protectedslots:在這個(gè)區(qū)內(nèi)聲明的槽意味著當(dāng)前類及其子類可以將信號與之相連接。這適用于那些槽,它們是類實(shí)現(xiàn)的一部分,但是其界面接口卻面向外部。privateslots:在這個(gè)區(qū)內(nèi)聲明的槽意味著只有類自己可以將信號與之相連接。這適用于聯(lián)系非常緊密的類。槽也能夠聲明為虛函數(shù),這也是非常有用的。槽的聲明也是在頭文件中進(jìn)行的。例如,下面聲明了三個(gè)槽: publicslots: voidmySlot(); voidmySlot(intx); voidmySignalParam(intx,inty);(3)信號與槽的關(guān)聯(lián)建立連接:通過調(diào)用QObject對象的connect函數(shù)來將某個(gè)對象的信號與另外一個(gè)對象的槽函數(shù)相關(guān)聯(lián),這樣當(dāng)發(fā)射者發(fā)射信號時(shí),接收者的槽函數(shù)將被調(diào)用。該函數(shù)的定義如下:

boolQObject::connect(constQObject*sender,constchar*signal, constQObject*receiver,constchar*member)[static]這個(gè)函數(shù)的作用就是將發(fā)射者sender對象中的信號signal與接收者receiver中的member槽函數(shù)聯(lián)系起來。當(dāng)指定信號signal時(shí)必須使用QT的宏SIGNAL(),當(dāng)指定槽函數(shù)時(shí)必須使用宏SLOT()。如果發(fā)射者與接收者屬于同一個(gè)對象的話,那么在connect調(diào)用中接收者參數(shù)可以省略。斷開連接:disconnect函數(shù)來斷開連接。其定義如下:boolQObject::disconnect(constQObject*sender,constchar*signal, constObject*receiver,constchar*member)[static]這個(gè)函數(shù)斷開發(fā)射者中的信號與接收者中的槽函數(shù)之間的關(guān)聯(lián)。屬性介紹Qt的屬性也基于元對象系統(tǒng),在類聲明中用宏Q_PROPERTY來聲明。屬性只能在繼承于QObject的子類中聲明。宏Q_OVERRIDE用來覆蓋一些子類中由繼承得到的屬性。屬性也是一個(gè)類的成員。元對象系統(tǒng)中設(shè)置屬性和得到屬性的成員函數(shù)列出如下:QObject::setProperty()可以讓你控制類中那些在編譯時(shí)不可用的屬性。QMetaObject::propertyNames()返回所有可用屬性的名稱。QMetaObject::property()返回一個(gè)指定屬性的屬性數(shù)據(jù):一個(gè)QMetaProperty對象。下面兩個(gè)設(shè)置函數(shù)是等效的://QButton*b和QObject*o指向同一個(gè)按鈕時(shí)b->setDown(TRUE);o->setProperty("down",TRUE);開發(fā)環(huán)境VisioStudio2008簡介MicrosoftVisualStudio(簡稱VS)是美國微軟公司的開發(fā)工具包系列產(chǎn)品。VS是一個(gè)基本完整的開發(fā)工具集,它包括了整個(gè)軟件生命周期中所需要的大部分工具,如UML工具、代碼管控工具、集成開發(fā)環(huán)境(IDE)等等。所寫的目標(biāo)代碼適用于微軟支持的所有平臺,包括MicrosoftWindows、WindowsMobile、WindowsCE、.NETFramework、.NETCompactFramework和Microsoft

Silverlight

及WindowsPhone。VisualStudio2008在三個(gè)方面為開發(fā)人員提供了關(guān)鍵改進(jìn):1、快速的應(yīng)用程序開發(fā)。2、高效的團(tuán)隊(duì)協(xié)作。3、突破性的用戶體驗(yàn)。VisualStudio2008提供了高級開發(fā)工具、調(diào)試功能、數(shù)據(jù)庫功能和創(chuàng)新功能,幫助在各種平臺上快速創(chuàng)建當(dāng)前最先進(jìn)的應(yīng)用程序。VisualStudio2008包括各種增強(qiáng)功能,例如可視化設(shè)計(jì)器(使用.NETFramework3.5

加速開發(fā))、對Web開發(fā)工具的大量改進(jìn),以及能夠加速開發(fā)和處理所有類型數(shù)據(jù)的語言增強(qiáng)功能。VisualStudio2008為開發(fā)人員提供了所有相關(guān)的工具和框架支持,幫助創(chuàng)建引人注目的、令人印象深刻并支持AJAX的Web應(yīng)用程序。開發(fā)人員能夠利用這些豐富的客戶端和服務(wù)器端框架輕松構(gòu)建以客戶為中心的Web應(yīng)用程序,這些應(yīng)用程序可以集成任何后端數(shù)據(jù)提供程序、在任何當(dāng)前瀏覽器內(nèi)運(yùn)行并完全訪問ASPNET應(yīng)用程序服務(wù)和Microsoft平臺。[2]程序開發(fā)為了幫助開發(fā)人員迅速創(chuàng)建先進(jìn)的軟件,VisualStudio2008提供了改進(jìn)的語言和數(shù)據(jù)功能,例如語言集成的查詢(LINQ),各個(gè)編程人員可以利用這些功能更輕松地構(gòu)建解決方案以分析和處理信息。VisualStudio2008還使開發(fā)人員能夠從同一開發(fā)環(huán)境內(nèi)創(chuàng)建面向多個(gè).NETFramework版本的應(yīng)用程序。開發(fā)人員能夠構(gòu)建面向.NETFramework2.0、3.0或3.5的應(yīng)用程序,意味他們可以在同一環(huán)境中支持各種各樣的項(xiàng)目。VisualStudio2008為開發(fā)人員提供了在最新平臺上加速創(chuàng)建緊密聯(lián)系的應(yīng)用程序的新工具,這些平臺包括

Web、WindowsVista、Office2007、SQLServer2008

和WindowsServer2008。對于Web,ASPNETAJAX及其他新技術(shù)使開發(fā)人員能夠迅速創(chuàng)建更高效、交互式更強(qiáng)和更個(gè)性化的新一代Web體驗(yàn)。[3]高效的團(tuán)隊(duì)協(xié)作VisualStudio2008提供了幫助開發(fā)團(tuán)隊(duì)改進(jìn)協(xié)作的擴(kuò)展的和改進(jìn)的服務(wù)項(xiàng)目,包括幫助將數(shù)據(jù)庫專業(yè)人員和圖形設(shè)計(jì)人員加入到開發(fā)流程的工具。[3]VC2008與Qt4.7的開發(fā)環(huán)境搭建VC2008與Qt開發(fā)環(huán)境搭建是十分簡單的事情,Qt授權(quán)模式有三種授權(quán)協(xié)議,分別是GPL,LGPL和Commercial,選擇GPL協(xié)議即可。1.下載并安裝Vc2008專業(yè)版。2.下載并安裝Qt安裝包qt-win-opensource-4.7.0-vs2008.exe

。3.下載并安裝qt-vs-addin-1.1.7.exe。4.在系統(tǒng)環(huán)境變量中添加D:\QT\4.7.0。核心技術(shù)介紹UDP協(xié)議UDP協(xié)議是英文UserDatagramProtocol的縮寫,即用戶數(shù)據(jù)報(bào)協(xié)議,主要用來支持那些需要在計(jì)算機(jī)之間傳輸數(shù)據(jù)的網(wǎng)絡(luò)應(yīng)用。包括網(wǎng)絡(luò)視頻會議系統(tǒng)在內(nèi)的眾多的客戶/服務(wù)器模式的網(wǎng)絡(luò)應(yīng)用都需要使用UDP協(xié)議。UDP協(xié)議從問世至今已經(jīng)被使用了很多年,雖然其最初的光彩已經(jīng)被一些類似協(xié)議所掩蓋,但是即使是在今天,UDP仍然不失為一項(xiàng)非常實(shí)用和可行的網(wǎng)絡(luò)傳輸層協(xié)議。與我們所熟知的TCP(傳輸控制協(xié)議)協(xié)議一樣,UDP協(xié)議直接位于IP(網(wǎng)際協(xié)議)協(xié)議的頂層。根據(jù)OSI(開放系統(tǒng)互連)參考模型,UDP和TCP都屬于傳輸層協(xié)議。UDP協(xié)議的主要作用是將網(wǎng)絡(luò)數(shù)據(jù)流量壓縮成數(shù)據(jù)報(bào)的形式。一個(gè)典型的數(shù)據(jù)報(bào)就是一個(gè)二進(jìn)制數(shù)據(jù)的傳輸單位。每一個(gè)數(shù)據(jù)報(bào)的前8個(gè)字節(jié)用來包含報(bào)頭信息,剩余字節(jié)則用來包含具體的傳輸數(shù)據(jù)。UDP協(xié)議的全稱是用戶數(shù)據(jù)報(bào)協(xié)議[2],在網(wǎng)絡(luò)中它與TCP協(xié)議一樣用于處理數(shù)據(jù)包,是一種無連接的協(xié)議。在OSI模型中,在第四層——傳輸層,處于IP協(xié)議的上一層。UDP有不提供數(shù)據(jù)包分組、組裝和不能對數(shù)據(jù)包進(jìn)行排序的缺點(diǎn),也就是說,當(dāng)報(bào)文發(fā)送之后,是無法得知其是否安全完整到達(dá)的。UDP用來支持那些需要在計(jì)算機(jī)之間傳輸數(shù)據(jù)的網(wǎng)絡(luò)應(yīng)用。包括網(wǎng)絡(luò)視頻會議系統(tǒng)在內(nèi)的眾多的客戶/服務(wù)器模式的網(wǎng)絡(luò)應(yīng)用都需要使用UDP協(xié)議。UDP協(xié)議從問世至今已經(jīng)被使用了很多年,雖然其最初的光彩已經(jīng)被一些類似協(xié)議所掩蓋,但是即使是在今天UDP仍然不失為一項(xiàng)非常實(shí)用和可行的網(wǎng)絡(luò)傳輸層協(xié)議。與所熟知的TCP(傳輸控制協(xié)議)協(xié)議一樣,UDP協(xié)議直接位于IP(網(wǎng)際協(xié)議)協(xié)議的頂層。根據(jù)OSI(開放系統(tǒng)互連)參考模型,UDP和TCP都屬于傳輸層協(xié)議。UDP協(xié)議使用端口號為不同的應(yīng)用保留其各自的數(shù)據(jù)傳輸通道。UDP和TCP協(xié)議正是采用這一機(jī)制實(shí)現(xiàn)對同一時(shí)刻內(nèi)多項(xiàng)應(yīng)用同時(shí)發(fā)送和接收數(shù)據(jù)的支持。數(shù)據(jù)發(fā)送一方(可以是客戶端或服務(wù)器端)將UDP數(shù)據(jù)報(bào)通過源端口發(fā)送出去,而數(shù)據(jù)接收一方則通過目標(biāo)端口接收數(shù)據(jù)。有的網(wǎng)絡(luò)應(yīng)用只能使用預(yù)先為其預(yù)留或注冊的靜態(tài)端口;而另外一些網(wǎng)絡(luò)應(yīng)用則可以使用未被注冊的動(dòng)態(tài)端口。因?yàn)閁DP報(bào)頭使用兩個(gè)字節(jié)存放端口號,所以端口號的有效范圍是從0到65535。一般來說,大于49151的端口號都代表動(dòng)態(tài)端口。UDP協(xié)議的主要作用是將網(wǎng)絡(luò)數(shù)據(jù)流量壓縮成數(shù)據(jù)包的形式。一個(gè)典型的數(shù)據(jù)包就是一個(gè)二進(jìn)制數(shù)據(jù)的傳輸單位。每一個(gè)數(shù)據(jù)包的前8個(gè)字節(jié)用來包含報(bào)頭信息,剩余字節(jié)則用來包含具體的傳輸數(shù)據(jù)。TCP協(xié)議TransmissionControlProtocol

傳輸控制協(xié)議TCP是一種面向連接(連接導(dǎo)向)的、可靠的、基于字節(jié)流的傳輸層(Transportlayer)通信協(xié)議,由IETF的RFC793說明(specified)。TCP在IP報(bào)文的協(xié)議號是6。在簡化的計(jì)算機(jī)網(wǎng)絡(luò)OSI模型中,它完成第四層傳輸層所指定的功能,UDP是同一層內(nèi)另一個(gè)重要的傳輸協(xié)TCP/IP協(xié)議并不完全符合OSI的七層參考模型。傳統(tǒng)的開放式系統(tǒng)互連參考模型,是一種通信協(xié)議的7層抽象的參考模型,其中每一層執(zhí)行某一特定任務(wù)。該模型的目的是使各種硬件在相同的層次上相互通信。這7層是:物理層、數(shù)據(jù)鏈路層、網(wǎng)路層、傳輸層、話路層、表示層和應(yīng)用層。而TCP/IP通訊協(xié)議采用了4層的層級結(jié)構(gòu),每一層都呼叫它的下一層所提供的網(wǎng)絡(luò)來完成自己的需求。這4層分別為:應(yīng)用層:應(yīng)用程序間溝通的層,如簡單電子郵件傳輸(SMTP)、文件傳輸協(xié)議(FTP)、網(wǎng)絡(luò)遠(yuǎn)程訪問協(xié)議(Telnet)等。傳輸層:在此層中,它提供了節(jié)點(diǎn)間的數(shù)據(jù)傳送服務(wù),如傳輸控制協(xié)議(TCP)、用戶數(shù)據(jù)報(bào)協(xié)議(UDP)等,TCP和UDP給數(shù)據(jù)包加入傳輸數(shù)據(jù)并把它傳輸?shù)较乱粚又?,這一層負(fù)責(zé)傳送數(shù)據(jù),并且確定數(shù)據(jù)已被送達(dá)并接收?;ミB網(wǎng)絡(luò)層:負(fù)責(zé)提供基本的數(shù)據(jù)封包傳送功能,讓每一塊數(shù)據(jù)包都能夠到達(dá)目的主機(jī)(但不檢查是否被正確接收),如網(wǎng)際協(xié)議(IP)。網(wǎng)絡(luò)接口層:對實(shí)際的網(wǎng)絡(luò)媒體的管理,定義如何使用實(shí)際網(wǎng)絡(luò)(如Ethernet、SerialLine等)來傳送數(shù)據(jù)。在因特網(wǎng)協(xié)議族(Internetprotocolsuite)四層協(xié)議中,TCP層是位于IP層之上,應(yīng)用層之下的傳輸層。不同主機(jī)的應(yīng)用層之間經(jīng)常需要可靠的、像管道一樣的連接,但是IP層不提供這樣的流機(jī)制,而是提供不可靠的包交換。應(yīng)用層向TCP層發(fā)送用于網(wǎng)間傳輸?shù)?、?位字節(jié)表示的數(shù)據(jù)流,然后TCP把數(shù)據(jù)流分割成適當(dāng)長度的報(bào)文段(通常受該計(jì)算機(jī)連接的網(wǎng)絡(luò)的數(shù)據(jù)鏈路層的最大傳送單元(MTU)的限制)。之后TCP把結(jié)果包傳給IP層,由它來通過網(wǎng)絡(luò)將包傳送給接收端實(shí)體的TCP層。TCP為了保證不發(fā)生丟包,就給每個(gè)字節(jié)一個(gè)序號,同時(shí)序號也保證了傳送到接收端實(shí)體的包的按序接收。然后接收端實(shí)體對已成功收到的字節(jié)發(fā)回一個(gè)相應(yīng)的確認(rèn)(ACK);如果發(fā)送端實(shí)體在合理的往返時(shí)延(RTT)內(nèi)未收到確認(rèn),那么對應(yīng)的數(shù)據(jù)(假設(shè)丟失了)將會被重傳。TCP用一個(gè)校驗(yàn)和函數(shù)來檢驗(yàn)數(shù)據(jù)是否有錯(cuò)誤;在發(fā)送和接收時(shí)都要計(jì)算和校驗(yàn)。首先,TCP建立連接之后,通信雙方都同時(shí)可以進(jìn)行數(shù)據(jù)的傳輸,其次,它是全雙工的;在保證可靠性上,采用超時(shí)重傳和捎帶確認(rèn)機(jī)制。在流量控制上,采用滑動(dòng)窗口協(xié)議,協(xié)議中規(guī)定,對于窗口內(nèi)未經(jīng)確認(rèn)的分組需要重傳。在擁塞控制上,采用廣受好評的TCP擁塞控制算法(也稱AIMD算法),該算法主要包括三個(gè)主要部分:1,加性增、乘性減;2,慢啟動(dòng);3,對超時(shí)事件做出反應(yīng)。Qt數(shù)據(jù)庫支持Qt提供了QtSql模塊來提供平臺獨(dú)立的基于SQL的數(shù)據(jù)庫操作。這里我們所說的“平臺獨(dú)立”,既包括操作系統(tǒng)平臺,有包括各個(gè)數(shù)據(jù)庫平臺。另外,我們強(qiáng)調(diào)了“基于SQL”,因?yàn)镹oSQL數(shù)據(jù)庫至今沒有一個(gè)通用查詢方法,所以不可能提供一種通用的NoSQL數(shù)據(jù)庫的操作。Qt的數(shù)據(jù)庫操作還可以很方便的與model/view架構(gòu)進(jìn)行整合。通常來說,對數(shù)據(jù)庫的操作更多地在于對數(shù)據(jù)庫表的操作,而這正是model/view架構(gòu)的長項(xiàng)。不過,由于受到協(xié)議的限制,Qt開源版本并沒有提供上面所有驅(qū)動(dòng)的二進(jìn)制版本,而僅僅以源代碼的形式提供。通常,Qt只默認(rèn)搭載QSqlite驅(qū)動(dòng)(這個(gè)驅(qū)動(dòng)實(shí)際還包括Sqlite數(shù)據(jù)庫,也就是說,如果需要使用Sqlite的話,只需要該驅(qū)動(dòng)即可)。我們可以選擇把這些驅(qū)動(dòng)作為Qt的一部分進(jìn)行編譯,也可以當(dāng)作插件編譯。如果習(xí)慣于使用SQL語句,我們可以選擇QSqlQuery類;如果只需要使用高層次的數(shù)據(jù)庫接口(不關(guān)心SQL語法)。Qt為數(shù)據(jù)庫訪問提供的QtSql模塊實(shí)現(xiàn)了數(shù)據(jù)庫和Qt應(yīng)用程序的無縫集成,同時(shí)為開發(fā)人員提供了一套與平臺無關(guān)和具體所用數(shù)據(jù)庫均無關(guān)的調(diào)用接口。這使得開發(fā)人員只需掌握基本的SQL語句,就能進(jìn)行簡單的數(shù)據(jù)庫應(yīng)用程序開發(fā)。如下表所示,QtSql模塊由3部分組成。驅(qū)動(dòng)層 :驅(qū)動(dòng)層實(shí)現(xiàn)了特定數(shù)據(jù)庫與SQL接口的底層橋接。SQL接口層 :SQL接口層提供了數(shù)據(jù)庫類的訪問用戶接口層:用戶接口層提供從數(shù)據(jù)庫數(shù)據(jù)到用于數(shù)據(jù)庫表示的窗體的映射QtSql模塊提供了一個(gè)平臺無關(guān)且數(shù)據(jù)庫無關(guān)的訪問SQL數(shù)據(jù)庫的接口。Qt中的每個(gè)數(shù)據(jù)庫連接用一個(gè)QSqlDatabase對象來表示;Qt使用不同driver來和各種不同數(shù)據(jù)庫的API進(jìn)行通訊。QSqlQuery提供了直接執(zhí)行任意SQL語句的特性;此外還提供了兩個(gè)高層次的無需SQL命令的數(shù)據(jù)庫接口:QSqlTableModel和QSqlRelationalTableModelSection1.ConnectingandQuerying在執(zhí)行SQL命令前,必須先建立好同數(shù)據(jù)庫的連接。靜態(tài)函數(shù)QSqlDatabase::addDatabase()用于創(chuàng)建一個(gè)新的QSqlDatabase對象,函數(shù)的第一個(gè)參數(shù)指定了Qt該選擇哪個(gè)Driver來訪問數(shù)據(jù)庫。在對創(chuàng)建的QSqlDatabase對象設(shè)定好hostname,databasename,username和password后,需要調(diào)用open()函數(shù)來建立到數(shù)據(jù)庫的連接。一旦到數(shù)據(jù)庫的鏈接建立好后,就可以通過QSqlQuery::exec()來執(zhí)行底層數(shù)據(jù)庫所支持的任意SQL語句了。QSqlQuery::next()返回查詢結(jié)果集中的下一行,而QSqlQuery::value()則返回當(dāng)前行中的某一項(xiàng)的值,以QVariant的形式返回??梢允褂肣SqlQuery::isActive()來檢查SQL語句的執(zhí)行是否出現(xiàn)錯(cuò)誤。placeholderQSqlQuery::prepare()QSqlQuery::bindValue()orQSqlQuery::addBindValue()QSqlQuery::exec()Qt支持?jǐn)?shù)據(jù)庫中transaction(事務(wù))這個(gè)概念。transaction()用于啟動(dòng)transaction,而commit()或rollback()用于結(jié)束transaction。靜態(tài)函數(shù)QSqlDatabase::database(),返回指定連接所對應(yīng)的QSqlDatabase對象。QSqlDatabase::driver()返回該連接底層所使用的dirverQSqlDatabase::hasFeature()可用來查詢底層數(shù)據(jù)庫是否支持某項(xiàng)特性。Qt允許在一個(gè)程序中創(chuàng)建多個(gè)數(shù)據(jù)庫連接,這中情況下在執(zhí)行SQL語句時(shí),需要為QSqlQuery的構(gòu)造函數(shù)傳入要執(zhí)行該語句的數(shù)據(jù)庫對應(yīng)的QSqlDatabase對象。與QSqlQuery相比,QSqlTableModel提供了一個(gè)更高層次、更抽象的接口,可以避免使用原始的SQL命令。QSqlTableModel::record()&QSqlTableModel::value()QSqlTableModel::insertRow()&QSqlTableModel::setData()QSqlTableModel::submitAll(),于其他model不同,在使用QSqlTableModel時(shí),必須調(diào)用submitAll()來強(qiáng)制所有的修改都寫入數(shù)據(jù)庫。當(dāng)需要處理外鍵(foreignkey)時(shí),需要使用QSqlRelationalTableModel而不是QSqlTableModel。對于使用了SQL相關(guān)類的應(yīng)用程序,需要在對應(yīng)的.pro中添加下面一行:"QT+=sql",這樣在鏈接時(shí)會將QtSql庫鏈入。

需求分析目前餐飲企業(yè)工作流程目前的中小餐飲企業(yè)采用最多的手工記賬形式,其業(yè)務(wù)流程如圖2.1所示客人點(diǎn)餐客人點(diǎn)餐服務(wù)員登記廚師加工處理客人點(diǎn)餐收銀臺服務(wù)員登記圖3-1手工業(yè)務(wù)流程分析流程圖簡介:顧客到達(dá)餐廳有引領(lǐng)員引導(dǎo)到座位后,承上菜譜并登記客人所點(diǎn)食品,完畢后唱菜譜并由客人確認(rèn),征得客人同意后交給后臺廚師及配餐人員,配餐人員根據(jù)大廳服務(wù)員提交的菜譜為客人配齊所有飲料、酒水、甜點(diǎn)等食物,廚師根據(jù)大廳服務(wù)員提供的菜譜按照先涼后熱的順序快速加工出美味可口的食物交友送餐人員及時(shí)送到指定的餐桌??腿擞貌屯戤吅笥蟹?wù)員或者客戶到收銀處辦理結(jié)算手續(xù),客人如有會員卡的話,收銀員應(yīng)給予相應(yīng)的優(yōu)惠,結(jié)算完畢后有引領(lǐng)員送客人出餐廳,這樣的工作方式當(dāng)客流量增加的時(shí)候,必然會出現(xiàn)爭搶菜譜,上錯(cuò)菜,漏上菜、忘記上菜以及計(jì)算失誤等現(xiàn)象,輕則引起客戶的不滿,重則引起糾紛,因此有必要采用新的工作模式,來避免上述情況的發(fā)生。所建議系統(tǒng)的工作流程基于傳統(tǒng)餐飲企業(yè)手工操作所帶來的種種弊端,一種新的利用計(jì)算機(jī)來管理信息的系統(tǒng)餐飲點(diǎn)餐管理系統(tǒng)也就應(yīng)運(yùn)而生,那么該系統(tǒng)的工作流程如圖2.2所示圖3-2自動(dòng)化的點(diǎn)餐系統(tǒng)產(chǎn)品功能根據(jù)所建議系統(tǒng)的業(yè)務(wù)流程圖,分析出新系統(tǒng)的功能模塊圖如2.3所示用戶登錄用戶登錄點(diǎn)餐管理配餐管理結(jié)算管理系統(tǒng)管理圖3-3功能模塊圖軟件需求描述1.用戶登陸:用戶輸入用戶名及密碼后,系統(tǒng)自動(dòng)驗(yàn)證有效性及用戶角色,根據(jù)用戶擁有的角色自動(dòng)進(jìn)入不同的子系統(tǒng)2.客戶點(diǎn)餐子系統(tǒng):當(dāng)客人落座后,服務(wù)員手持IPAD登陸點(diǎn)餐子系統(tǒng)后,首先輸入相應(yīng)的桌號,然后由客人根據(jù)不同的服務(wù)類別(特價(jià)、涼菜、熱菜、湯、酒水、飲料)選擇不同的食物及數(shù)量,系統(tǒng)根據(jù)不同的食物計(jì)算出總價(jià)格,方便客人控制總價(jià)格,如果輸入錯(cuò)誤系統(tǒng)提供刪除的功能,最后提交到后廚配餐子系統(tǒng)中.3.配餐管理子系統(tǒng):配餐員或者廚師根據(jù)最新的配餐信息,按照時(shí)間先后順序配置食品,完成后提交給結(jié)算管理子系統(tǒng)中4.結(jié)算管理子系統(tǒng):收銀員根據(jù)服務(wù)員或者客人提供的桌號計(jì)算出總價(jià)格,客人如果提供會員卡或者會員號,系統(tǒng)自動(dòng)驗(yàn)證卡號及會員身份并計(jì)算出相應(yīng)的折扣及實(shí)付金額,根據(jù)相應(yīng)的金額出具對應(yīng)的發(fā)票5.系統(tǒng)管理子系統(tǒng):經(jīng)理登陸子系統(tǒng)后,上傳菜譜,管理菜譜及特價(jià)。在此子系統(tǒng)中,還實(shí)現(xiàn)了會員及用戶、留言、桌位的管理。系統(tǒng)用例圖系統(tǒng)用例【9】圖是按照場景的形式對系統(tǒng)的功能做清晰地設(shè)計(jì),具體用例有:登陸用例圖、點(diǎn)餐用例圖、配餐用例圖、結(jié)賬用例圖、管理用例。用戶通過餐飲管理系統(tǒng)可以實(shí)現(xiàn)用戶登陸,如圖:圖3-4登陸用例服務(wù)員通過餐飲管理系統(tǒng)可以實(shí)現(xiàn)客人點(diǎn)餐,如圖:圖3-5點(diǎn)餐用例廚師通過餐飲管理系統(tǒng)實(shí)現(xiàn)廚師配餐,如圖:圖3-6配餐用例收銀員通過餐飲管理系統(tǒng)實(shí)現(xiàn)替客人結(jié)賬功能,如圖:圖3-7結(jié)算用例經(jīng)理通過餐飲管理系統(tǒng)實(shí)現(xiàn)對系統(tǒng)的設(shè)置等操作,如圖:圖3-8系統(tǒng)設(shè)置用例軟件接口Windows操作系統(tǒng)所提供的各種API:1.基礎(chǔ)服務(wù)(BaseServices),提供對Windows系統(tǒng)可用的基礎(chǔ)資源的訪問接口。比如象:文件系統(tǒng)(filesystem)、外部設(shè)備(device)、,進(jìn)程(process)、線程(thread)以及訪問注冊表(Windowsregistry)和錯(cuò)誤處理機(jī)制(errorhandling)。這些功能接口位于,16位Windows下的kernel.exe、krnl286.exe或krnl386.exe系統(tǒng)文檔中;以及32位Windows下的kernel32.dll和advapi32.dll中。2.圖形設(shè)備接口(GDI),提供功能為:輸出圖形內(nèi)容到顯示器、打印機(jī)以及其他外部輸出設(shè)備。它位于16位Windows下的gdi.exe;以及32位Windows下的gdi32.dll。3.圖形化用戶界面(GUI),提供的功能有創(chuàng)建和管理屏幕和大多數(shù)基本控件(control),比如按鈕和滾動(dòng)條。接收鼠標(biāo)和鍵盤輸入,以及其他與GUI有關(guān)的功能。這些調(diào)用接口位于:16位Windows下的user.exe,以及32位Windows下的user32.dll。從WindowsXP版本之后,基本控件和通用對話框控件(CommonControlLibrary)的調(diào)用接口放在comctl32.dll中。4.通用對話框鏈接庫(CommonDialogBoxLibrary),為應(yīng)用程序提供標(biāo)準(zhǔn)對話框,比如打開/保存文檔對話框、顏色對話框和字體對話框等等。這個(gè)鏈接庫位于:16位Windows下的commdlg.dll中,以及32位Windows下comdlg32.dll中。它被歸類為UserInterfaceAPI之下。5.通用控件鏈接庫(CommonControlLibrary),為應(yīng)用程序提供接口來訪問操作系統(tǒng)提供的一些高級控件。比如像:狀態(tài)欄(statusbar)、進(jìn)度條(progressbars)、工具欄(toolbar)和標(biāo)簽(tab)。這個(gè)鏈接庫位于:16位Windows下的commctrl.dll中,以及32位Windows下comctl32.dll中。。它被歸類為UserInterfaceAPI之下。6.Windows外殼(WindowsShell),作為WindowsAPI的組成部分,不僅允許應(yīng)用程序訪問Windows外殼提供的功能,還對之有所改進(jìn)和增強(qiáng)。它位于16位Windows下的shell.dll中,以及32位Windows下的shell32.dll中(Windows95則在shlwapi.dll中)。它被歸類為UserInterfaceAPI之下。7.網(wǎng)絡(luò)服務(wù)(NetworkServices),為訪問操作系統(tǒng)提供的多種網(wǎng)絡(luò)功能提供接口。它包括NetBIOS、Winsock、NetDDE及RPC等。

總體設(shè)計(jì)與實(shí)現(xiàn)系統(tǒng)架構(gòu)設(shè)計(jì)本系統(tǒng)采用流行的C/S結(jié)構(gòu),既客戶端/服務(wù)器端結(jié)構(gòu),客戶端是基于.NetFrameWork平臺的應(yīng)用程序,服務(wù)器端是基于SqlServer2005的數(shù)據(jù)庫存儲應(yīng)用系統(tǒng),采用面向?qū)ο蟆?2】的開發(fā)語言C#【13】作為編程語言,使用Visualstudio2010作為開發(fā)工具以及應(yīng)用流行的軟件開發(fā)模型—瀑布模型系統(tǒng)編碼規(guī)范系統(tǒng)編碼實(shí)現(xiàn)采用目前流行的面向?qū)ο蟮木幊陶Z言—C#,因此為了今后的系統(tǒng)擴(kuò)展及測試維護(hù),所以按照微軟統(tǒng)一發(fā)布的C#編碼規(guī)范,具體內(nèi)容如下:類型的命名1.類名,以Class聲明的類,都必須以名詞或名詞短語命名,體現(xiàn)類的作用。如:ClassIndicator當(dāng)類是一個(gè)特性(Attribute)時(shí),以Attribute結(jié)尾,當(dāng)類是一個(gè)異常(Exception)時(shí),以Exception結(jié)尾:ClassColorSetExceptionClassCauseExceptionAttribute當(dāng)類只需有一個(gè)對象實(shí)例(全局對象,比如Application等),必須以Class結(jié)尾,如ClassScreenClassClassSystemClass。當(dāng)類只用于作為其他類的基類,根據(jù)情況,以Base結(jié)尾:MustInheritClassIndicatorBase,如果定義的類是一個(gè)窗體,那么名字的后面必須加后綴Form,如果是Web窗體,必須加后綴Page:ClassPrintForm:InheritsForm'*Windows窗體ClassStartPage:InheritsPage'*Web窗體2.枚舉和結(jié)構(gòu):同樣必須以名詞或名詞短語命名。最好體現(xiàn)枚舉或結(jié)構(gòu)的特點(diǎn),如:EnumColorButtons'以復(fù)數(shù)結(jié)尾,表明這是一個(gè)枚舉StructureCustomerInfoRecord'以Record結(jié)尾,表明這是一個(gè)結(jié)構(gòu)體3.委派類型:普通的委派類型以描述動(dòng)作的名詞命名,以體現(xiàn)委派類型實(shí)例的功能:DelegateSubDataSeeker(ByValSeekStringAsString),用于事件處理的委派類型,必須以EventHandler結(jié)尾,如:DelegateSubDataChangedEventHandler(ByValSenderAsObject,ByValeAsDataChangedEventArgs)4.接口:與其他類型不同,接口必須要由I作為前綴,并用形容詞命名,突出表現(xiàn)實(shí)現(xiàn)接口的類將具有什么能力:InterfaceISortable5.模塊:模塊不是類型,他的名稱除了必須以名詞命名外,必須加以后綴Module:ModuleSharedFunctionsModule,上述所有規(guī)則的共同特點(diǎn)是,每個(gè)組成名稱的詞語都必須是大寫開頭,禁止完全大寫或小寫的名稱。方法和屬性的命名1.方法:無論是函數(shù)還是子程序,方法都必須以動(dòng)詞或動(dòng)詞短語命名。無需區(qū)分函數(shù)和子程序,也無需指明返回類型。SubOpen(ByValCommandStringAsString),F(xiàn)unctionSetCopyNumber(ByValCopyNumberAsInteger),參數(shù)需要指明ByVal還是ByRef,這一點(diǎn)寫起來會讓程序邊長,但非常必要。如果沒有特別情況,都使用ByVal。參數(shù)的命名方法,參考后面“變量的命名方法”。需要重載的方法,一般不寫Overloads,根據(jù)需要編寫重載的方法。2.屬性:原則上,字段(Field)是不能公開的,要訪問字段的值,一般使用屬性。屬性以簡潔清晰的名詞命名:PropertyConcentrationAsSingle,PropertyCustomerAsCustomerTypes3.事件:事件是特殊的屬性,只能在事件處理上下文中使用。命名的原則一般是動(dòng)詞或動(dòng)詞的分詞,通過時(shí)態(tài)表明事件發(fā)生的時(shí)間:EventClickAsClickEventHandler,EventColorChangedAsColorChangedEventHangler變量和常數(shù)常數(shù)以表明常數(shù)意義的名詞命名,一般不區(qū)分常數(shù)的類型:ConstDefaultConcentrationAsSingle=0.01,在嚴(yán)格要求的代碼中,常數(shù)以c_開頭,如c_DefaultConcentration,但最好不要用它,它會帶來輸入困難。普通類型的變量,只要用有意義的名字命名即可,不可使用簡稱和無意義的名稱諸如A,x1等,下面給出了良好的例子:DimIndexAsIntegerDimNextMonthExpenditureAsDecimalDimCustomerNameAsString不能起太長的名字,應(yīng)該盡量簡潔,如下面的例子:DimVariableUsedToStoreSystemInformationAsString'*錯(cuò)誤,太復(fù)雜了DimSystemInformationAsString'*正確,簡單明了DimsysInfoAsString'*錯(cuò)誤,過于簡單特殊情況可以考慮一個(gè)字母的變量:DimgAsGraphic對于控件,應(yīng)該指明控件的類型,方法是直接在變量后面加以類名:FriendWithEventsNextPageButtonAsButton'*按鈕FriendWithEventsColorChoicerPanelAsPanel'*面版FriendWithEventsCardFileOpenDialogAsFileOpenDialog'*文件打開對話框等等,無需規(guī)定某種類型的變量的前綴,只需把類型寫在后面就行了,試對比下列代碼:btnCancel.Text="&Cancel"CancelButton.Text="&Cancel"顯然后者更能使閱讀者明白變量的類型是一個(gè)按鈕。Main函數(shù)代碼intmain(intargc,char*argv[]){ QApplicationa(argc,argv); QApplication::addLibraryPath("./plugins"); QTextCodec::setCodecForTr(QTextCodec::codecForName("GB2312")); QTextCodec::setCodecForLocale(QTextCodec::codecForName("GB2312")); QTextCodec::setCodecForCStrings(QTextCodec::codecForName("GB2312")); QApplication::addLibraryPath("./sqldrivers"); QDataBase*p=QDataBase::GetInstance(); p->ConnectDataBase(); QLoadMangerdlg; if(dlg.exec()!=QDialog::Accepted) return0; QMealw; w.show(); returna.exec();}

詳細(xì)設(shè)計(jì)數(shù)據(jù)庫模塊功能設(shè)數(shù)據(jù)庫模塊主要包括用戶管理、菜品管理、會員管理三大部分,這三大部分都需要將數(shù)據(jù)保存到數(shù)據(jù)庫,所以都?xì)w結(jié)到了數(shù)據(jù)庫模塊中。其中用戶管理模塊主要是包括用戶的注冊和用于用戶登錄的驗(yàn)證功能;而菜品管理模塊主要是實(shí)現(xiàn)對菜品的添加,對菜品的修改,對菜品的刪除三大功能;同樣會員管理也主要是實(shí)現(xiàn)對會員添加,對會員的修改,以及對會員的刪除。圖5-1登錄模塊功能設(shè)計(jì)登錄模塊主要實(shí)現(xiàn)的功能就是對系統(tǒng)管理員用戶的注冊以及對已經(jīng)注冊的用戶進(jìn)行用戶信息驗(yàn)證,用來完成用戶登錄模塊。圖5-2點(diǎn)餐模塊功能設(shè)計(jì)點(diǎn)餐模塊主要包括四個(gè)功能:用戶點(diǎn)餐、呼叫服務(wù)、結(jié)賬、更新菜單。用戶點(diǎn)餐主要是用戶用來從菜單上進(jìn)行菜品選擇,這個(gè)功能包括了用戶對菜品的選擇,既選擇菜單;下單,既將選擇的菜單同步到廚房客戶端中,告訴廚房需要做那些菜;提交菜單,既將菜單提交到了服務(wù)器中,主要是用來進(jìn)行菜品的登記以及菜價(jià)的求和等操作。呼叫服務(wù)主要是呼叫服務(wù)員,這個(gè)是需要在柜臺上進(jìn)行一下設(shè)置,所以在軟件中這個(gè)功能沒有詳細(xì)實(shí)現(xiàn),只是留下了實(shí)現(xiàn)端口。結(jié)賬功能現(xiàn)在以及實(shí)現(xiàn)了自動(dòng)算賬功能,這個(gè)功能也是需要在柜臺上留下一個(gè)實(shí)現(xiàn)端口,在投入使用后直接在柜臺電腦實(shí)現(xiàn)即可。更新菜單是將菜單從服務(wù)器中同步到點(diǎn)菜客戶端中,每次系統(tǒng)重啟后必須選擇一下更新菜單,這樣才能實(shí)現(xiàn)點(diǎn)菜客戶端的更新。圖5-3服務(wù)器模塊功能設(shè)計(jì)服務(wù)器模塊式最主要的模塊,這個(gè)模塊其實(shí)包括了上面的數(shù)據(jù)庫模塊,但是還有一些其他功能模塊包括在其中,這就是我整個(gè)系統(tǒng)的后臺服務(wù)器模塊,所有需要后臺進(jìn)行的運(yùn)算都在這個(gè)模塊中實(shí)現(xiàn)。這個(gè)服務(wù)器模塊主要還是包括了用戶登錄模塊和數(shù)據(jù)庫模塊量大部分。登錄模塊主要實(shí)現(xiàn)的功能就是對系統(tǒng)管理員用戶的注冊以及對已經(jīng)注冊的用戶進(jìn)行用戶信息驗(yàn)證,用來完成用戶登錄模塊。數(shù)據(jù)庫模塊主要包括用戶管理、菜品管理、會員管理三大部分,這三大部分都需要將數(shù)據(jù)保存到數(shù)據(jù)庫,所以都?xì)w結(jié)到了數(shù)據(jù)庫模塊中。其中用戶管理模塊主要是包括用戶的注冊和用于用戶登錄的驗(yàn)證功能;而菜品管理模塊主要是實(shí)現(xiàn)對菜品的添加,對菜品的修改,對菜品的刪除三大功能;同樣會員管理也主要是實(shí)現(xiàn)對會員添加,對會員的修改,以及對會員的刪除。同時(shí)還有一個(gè)呼叫功能在服務(wù)器模塊中進(jìn)行了實(shí)現(xiàn),該功能主要就是實(shí)現(xiàn)將用戶的點(diǎn)餐過程進(jìn)行一個(gè)記錄,所有的點(diǎn)餐呼叫都是會記錄到系統(tǒng)中的,點(diǎn)擊呼叫中心就可以進(jìn)行呼叫記錄的查看。圖5-4廚房模塊功能設(shè)計(jì)廚房客戶端的設(shè)計(jì)主要是實(shí)現(xiàn)接受訂單功能和對所點(diǎn)產(chǎn)品的刪除功能實(shí)現(xiàn),廚房客戶端在未進(jìn)行點(diǎn)菜時(shí)候是沒有顯示任何菜品的,當(dāng)在點(diǎn)菜客戶端進(jìn)行點(diǎn)菜后點(diǎn)擊提交按鈕后就可以把所點(diǎn)菜品提交到廚房客戶端。圖5-5數(shù)據(jù)庫模塊設(shè)計(jì)與實(shí)現(xiàn)數(shù)據(jù)庫模塊設(shè)計(jì)單例模式:單例模式是一種常用的軟件設(shè)計(jì)模式。在它的核心結(jié)構(gòu)中只包含一個(gè)被稱為單例類的特殊類。通過單例模式可以保證系統(tǒng)中一個(gè)類只有一個(gè)實(shí)例而且該實(shí)例易于外界訪問,從而方便對實(shí)例個(gè)數(shù)的控制并節(jié)約系統(tǒng)資源。如果希望在系統(tǒng)中某個(gè)類的對象只能存在一個(gè),單例模式是最好的解決方案。本論文中對數(shù)據(jù)庫進(jìn)行封裝成QDatabase類,采用單例模式,提供全局唯一實(shí)例化接口: staticQDataBase*GetInstance() { staticQDataBaseinstance; return&instance; }QDatabase對數(shù)據(jù)庫的操作提供接口,例如用戶登錄模塊中的添加用戶、修改用戶、檢驗(yàn)用戶是否存在提供對應(yīng)的接口: void AddUser(constUserInfo&info); void ModifyUser(constUserInfo&info); bool ExistUser(constUserInfo&info);數(shù)據(jù)庫模塊實(shí)現(xiàn)圖5-6登錄模塊設(shè)計(jì)與實(shí)現(xiàn)登錄模塊設(shè)計(jì)登陸模塊的功能就是驗(yàn)證用戶名及密碼是否有效,同時(shí)提供用戶注冊功能。登陸模塊代碼voidQLoadManger::OnLoad(){ UserInfoinfo; info.strName=m_pEdtName->text(); info.strPasswd=m_pEdtPassword->text(); QDataBase*p=QDataBase::GetInstance(); if(!p->ExistUser(info)) { QMessageBox::warning(this,tr("MealSever"), tr("用戶名或者密碼錯(cuò)誤!" ), QMessageBox::Ok); reject(); } else { accept(); }注冊模塊代碼voidQLoadManger::OnRegister(){ if(!m_pDlgRegister) return; if(m_pDlgRegister->exec()==QDialog::Accepted) { UserInfoinfo; m_pDlgRegister->GetUserInfo(info); QDataBase*p=QDataBase::GetInstance(); p->AddUser(info); } QMessageBox::warning(this,tr("MealSever"), tr("注冊完成!" ), QMessageBox::Ok);}點(diǎn)餐模塊設(shè)計(jì)與實(shí)現(xiàn)點(diǎn)餐模塊設(shè)計(jì)點(diǎn)餐模塊是系統(tǒng)中重要的模塊,主要實(shí)現(xiàn)客戶餐單的創(chuàng)建以及所點(diǎn)菜品的保存,該模塊的實(shí)現(xiàn)思路是首先系統(tǒng)分類顯示今日特價(jià)、涼菜、熱菜、湯類、酒水、飲料,客人按照所需登記桌位,選擇菜品及分?jǐn)?shù)(默認(rèn)1份),系統(tǒng)自動(dòng)計(jì)算總金額,如果有誤客人則可以刪除某類菜品,最后點(diǎn)擊提交保存到數(shù)據(jù)庫。那么該模塊實(shí)現(xiàn)的前提條件是用戶以服務(wù)員身份登錄到系統(tǒng),且數(shù)據(jù)庫中有相應(yīng)的菜品信息以及一定數(shù)量的桌位。點(diǎn)餐模塊主要包括四個(gè)功能:用戶點(diǎn)餐、呼叫服務(wù)、結(jié)賬、更新菜單。用戶點(diǎn)餐主要是用戶用來從菜單上進(jìn)行菜品選擇,這個(gè)功能包括了用戶對菜品的選擇,既選擇菜單;下單,既將選擇的菜單同步到廚房客戶端中,告訴廚房需要做那些菜;提交菜單,既將菜單提交到了服務(wù)器中,主要是用來進(jìn)行菜品的登記以及菜價(jià)的求和等操作。呼叫服務(wù)主要是呼叫服務(wù)員,這個(gè)是需要在柜臺上進(jìn)行一下設(shè)置,所以在軟件中這個(gè)功能沒有詳細(xì)實(shí)現(xiàn),只是留下了實(shí)現(xiàn)端口。結(jié)賬功能現(xiàn)在以及實(shí)現(xiàn)了自動(dòng)算賬功能,這個(gè)功能也是需要在柜臺上留下一個(gè)實(shí)現(xiàn)端口,在投入使用后直接在柜臺電腦實(shí)現(xiàn)即可。更新菜單是將菜單從服務(wù)器中同步到點(diǎn)菜客戶端中,每次系統(tǒng)重啟后必須選擇一下更新菜單,這樣才能實(shí)現(xiàn)點(diǎn)菜客戶端的更新。表5-1點(diǎn)餐模塊輸入輸出數(shù)據(jù)數(shù)據(jù)數(shù)據(jù)輸出類型數(shù)據(jù)類型約束菜名輸出字符串類型長度小于50價(jià)格輸出字符串類型長度小于50圖片輸出二進(jìn)制類型桌號輸入字符串類型長度小于50菜名編號輸入數(shù)字份數(shù)輸入數(shù)字下圖為點(diǎn)菜客戶端的類圖圖5-7點(diǎn)餐客戶端代碼QOrder::QOrder(QWidget*parent,Qt::WFlagsflags) :QMainWindow(parent,flags){ ui.setupUi(this);}QOrder::~QOrder(){}服務(wù)器模塊設(shè)計(jì)與實(shí)現(xiàn)服務(wù)器模塊設(shè)計(jì)與實(shí)現(xiàn)下圖為服務(wù)器的類圖圖5-8服務(wù)器代碼QMeal::QMeal(QWidget*parent) { setIconSize(QSize(50,50)); QMenuBar*pMenuBar=menuBar(); QMyIconStyle*pMyIconStyle=newQMyIconStyle;以下為菜品管理代碼部分,主要是實(shí)現(xiàn)對菜品的管理,首先可以實(shí)現(xiàn)添加新菜品,而且可以對添加的新菜品進(jìn)行修改和刪除,但是不管進(jìn)行什么操作都必須要進(jìn)行一下提交修改才可以同步到服務(wù)器中代碼如下: QMenu*pMenu=pMenuBar->addMenu(tr("菜品管理")); //pMenu->setStyle(pMyIconStyle); //pMenu->setFixedSize(QSize(60,60)); //pMenu->setIcon(QIcon(tr(":/images/dinnerManager.png"))); QAction*pAct=pMenu->addAction(tr("菜品管理")); connect(pAct,SIGNAL(triggered(bool)),this,SLOT(OnMealMangerClicked())); pAct=pMenu->addAction(tr("添加新菜品")); connect(pAct,SIGNAL(triggered(bool)),this,SLOT(OnAddMeal())); pAct=pMenu->addAction(tr("修改當(dāng)前菜品")); connect(pAct,SIGNAL(triggered(bool)),this,SLOT(OnModifyMeal())); pAct=pMenu->addAction(tr("刪除當(dāng)前菜品")); connect(pAct,SIGNAL(triggered(bool)),this,SLOT(OnDeleteMeal())); pAct=pMenu->addAction(tr("提交更改")); connect(pAct,SIGNAL(triggered(bool)),this,SLOT(OnSubitMealChanges()));以下為會員管理代碼部分,主要是實(shí)現(xiàn)對會員的管理,首先可以實(shí)現(xiàn)添加新會員,而且可以對添加的新會員進(jìn)行修改和刪除,但是不管進(jìn)行什么操作都必須要進(jìn)行一下提交修改才可以同步到服務(wù)器中代碼如下: pMenu=pMenuBar->addMenu(tr("會員管理")); //pMenu->setStyle(pMyI

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(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

提交評論