基于Android手機終端點菜系統(tǒng)_第1頁
基于Android手機終端點菜系統(tǒng)_第2頁
基于Android手機終端點菜系統(tǒng)_第3頁
基于Android手機終端點菜系統(tǒng)_第4頁
基于Android手機終端點菜系統(tǒng)_第5頁
已閱讀5頁,還剩22頁未讀 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

..****2014屆本科畢業(yè)論文〔設計〕論文〔設計〕題目:Android手機終端點菜系統(tǒng)學生:***所在院系:信息工程學院所學專業(yè):計算機科學與技術(shù)導師:***完成時間:2014-05-10摘要本課題所實現(xiàn)的電子點菜系統(tǒng)改變了傳統(tǒng)的效勞員和菜單的點菜模式,采用新穎的電子終端點菜系統(tǒng),這種新式的方式使得餐館更有檔次和特色,對于其在同行業(yè)的競爭有著明顯的幫助。本課題采用c/s開發(fā)模式,分為效勞器端和Android客戶端的一些操作。在效勞器端主要采用Jsp動態(tài)網(wǎng)頁技術(shù),實現(xiàn)了后臺餐館一方對菜譜信息的管理和對顧客訂單的處理。在客戶端主要采用Android技術(shù)實現(xiàn)了顧客對菜品的查找、分類查看、顧客對自己訂單的選擇和查看,顧客在確定訂單之后可以提交給餐館一方,使得餐館一方得以查看并通知廚房做出菜品。關(guān)鍵詞Android,MySQL,Jsp,JavaABSTRACTElectronicorderingsystemtherealizationofthisprojecthaschangedthetraditionalserviceandmenumenumode,thenovelelectronicterminalordersystem,thenewmethodmakestherestaurantmoregradesandcharacteristics,thisisveryhelpfulforthesameindustrypetition.Thistopicusesc/sdevelopmentmode,dividedintosomeoperationserverandAndroidclient.OntheserversideJspdynamicWebpagetechnologymainlyuses,thishasrealizedthebackstagerestaurantmanagementsideofthemenuinformationandcustomerorderprocessing.TheclientusestheAndroidtechnologytorealizethecustomeronthefoodsearch,classificationandviewview,oftheircustomersthechoiceoforders,customersintherestaurantaftertheorderisconfirmedcanbesubmittedtoaparty.Thismakestherestaurantsidetoseeandnoticethekitchentomakedishes.KeywordsAndroid,MySQL,Jsp,Java目錄TOC\o"1-3"\h\u23431.緒論1234551.1工程背景及意義162971.2Android系統(tǒng)概述 1102292.系統(tǒng)理論和技術(shù)路線 3155402.1Android四大組件 3135522.2c/s體系 3276542.3Jsp和Servlet 4240202.4系統(tǒng)主要路線 481712.5運行環(huán)境要求 5156322.5.1硬件環(huán)境5321462.5.2軟件環(huán)境5280783.系統(tǒng)需求分析5235903.1各模塊關(guān)系圖 564713.2數(shù)據(jù)庫設計 6147103.2.1數(shù)據(jù)庫列表 6160403.2.2數(shù)據(jù)庫連接的實現(xiàn) 7308513.3功能需求描述 11160103.4主要開發(fā)工具 13250583.4.1MyEclipse 13263703.4.2ADT 14235144.軟件系統(tǒng)設計15152634.1后臺功能模塊15165334.1.1后臺登陸模塊1526449后臺菜品模塊 1710994后臺訂單模塊 19282904.2客戶端功能模塊 2058044.2.1首頁面模塊 20110234.2.2主功能模塊 21222604.2.3訂單模塊 23105044.2.4游戲模塊 25160555.結(jié)論 2629270詞 2728703參考文獻 28..緒論1.1工程背景及意義由于互聯(lián)網(wǎng)的高速開展,而電子技術(shù)由于在外國比方說美國最先得到了開展并被用于生活的各個領域,而餐飲作為我們生活中的一個重要環(huán)節(jié),它的開展也是非常迅猛的,以美國舉例,從1999年的餐飲業(yè)的營業(yè)額3500多億美元到2010年的6000多億,由于人們對餐飲業(yè)的關(guān)注,所以電子技術(shù)對餐飲的影響非常大,所以像手機點菜系統(tǒng)的開展在美國已經(jīng)逐漸得得到了普及。在我們國家,餐飲是人民非常關(guān)心的一個方向,但是點菜系統(tǒng)在餐飲業(yè)的普及還只是剛剛開場,現(xiàn)在僅僅是在一局部比擬高檔的餐廳出現(xiàn),但是我們從餐飲業(yè)的開展不難看出,點菜系統(tǒng)的普及是肯定的。近幾年,隨著Android和ios技術(shù)的開展,智能手機和平板不僅僅被廣闊的青年、青少年甚至兒童和老年人承受并使用,電子產(chǎn)品正在影響著我們生活的方方面面,而餐飲作為我們都必不可少的一局部也不可防止的和電子產(chǎn)品結(jié)合到了一起。手機、平板的點菜系統(tǒng)替代人工效勞員的點菜方式不僅僅節(jié)省了大量的勞動力,降低了本錢,而且還方便收銀員對賬單支出的管理,使得餐廳的財政能得到高效透明的管理,當然現(xiàn)代化的電子點菜方式相比擬于傳統(tǒng)的點菜員會得到廣闊消費者尤其是青年人的喜愛。根據(jù)科技的開展對社會帶來的影響,電子點菜系統(tǒng)必將取代傳統(tǒng)的點菜模式,如今電子點菜系統(tǒng)已經(jīng)在比擬高檔的餐廳中開場出現(xiàn)并被使用,電子點菜系統(tǒng)必將得到開展。1.2Android系統(tǒng)概述Android最初是Android公司創(chuàng)辦,后由Google公司收購,Google希望將Android創(chuàng)造成一個標準化的、可移動的移動平臺,進而在移動互聯(lián)網(wǎng)形成一個開放性的操作平臺。2007年谷歌發(fā)布第一個Android1.1版本,但并未得到市場的廣泛支持,但是到2009年,Android1.5版本的面世,Android憑借"豪華〞的界面和藍牙支持,獲得了大量的開發(fā)者支持。到目前為止,Android已經(jīng)超過ios在市場的占有量,國大量的手機廠商開場生產(chǎn)Android操作系統(tǒng)的手機,Android已經(jīng)成為世界上最主流的手機操作系統(tǒng)。..圖1-1Android系統(tǒng)的體系構(gòu)造Android系統(tǒng)的底層是建立在Linux系統(tǒng)之上,總共包括Linux核、Android運行時、函數(shù)庫、應用程序框架、應用程序?qū)?。Linux層為Android提供了存管理、網(wǎng)絡協(xié)議棧、驅(qū)動模型、進程管理等核心系統(tǒng)效勞。Android運行時那么是由兩局部組成:Android虛擬機和Android核心庫集,Android核心庫集提供了Java語言核心庫所能使用的絕大多數(shù)功能,而虛擬機那么負責運行Android應用程序。在這里要區(qū)分的是Android和JVM是完全不同的,JVM永興的是Java字節(jié)碼,也就是.class文件,而Android虛擬機那么運行的是專有的dex文件。函數(shù)庫包含了一整套能被Android應用程序框架所調(diào)用的庫的集合,像Android專有的輕量級數(shù)據(jù)庫SQLite等,需要注意的是Android應用程序并不..能直接調(diào)用這些庫,需要經(jīng)過應用程序框架來調(diào)用。Android應用程序框架最主要的功能是提供了大量的API供開發(fā)者使用,不管是系統(tǒng)的應用程序還是開發(fā)者自己開發(fā)的應用程序都可以公平的調(diào)用它。應用程序?qū)泳褪俏覀兤綍r在手機上所見的包括系統(tǒng)提供的時鐘瀏覽器、聯(lián)系人等等還是自己下載的由開發(fā)者自己開發(fā)的Android所有的應用程序。2.系統(tǒng)理論和技術(shù)路線2.1Android四大組件Activity要實現(xiàn)的功能是用戶交互的組件,它是用戶可以看到的,一個Activity可以包含多個UI組件并顯示,例如TextView、Button、ImageView、AdapaterView等組件。Service在地位上和Activity是并列的,但是它和Activity不同處在于Service對于用戶是不可見的,所以它不能和用戶進展交互,因此Service有自己的生命周期,并不依賴于一個Activity,他的主要功能是為其他組件提供后臺效勞和監(jiān)控其他組件的運行狀態(tài)。BroadcastReceiver從名字上說可以把其當做一個信息播送的接收組件,開發(fā)者通過集成父類BroadcastReceiver來實現(xiàn)自己的功能。其它組件通過sendBroadcast〔〕等方法來發(fā)送播送,子類BroadcastReceiver通過onReceiver〔Contextcontext,IntentIntent〕方法來監(jiān)聽接收消息。ContentProvider和其它三個組件最大不同在于其可以從其它App程序接口中取得其它App中的信息,最常見例子是:好多App需要讀取我們手機聯(lián)系人中的數(shù)據(jù),而ContentProvider就能提供這個需求。2.2c/s體系c/s即客戶端/效勞器端構(gòu)造,如果說c/s就最好和b/s作比擬,那具體的工程舉例就是需要下載的qq客戶端就屬于c/s模式,而網(wǎng)頁版的qq就屬于b/s構(gòu)造的工程。c/s構(gòu)造中需要用戶下載專有的客戶端軟件,而b/s模式,客戶端不需要下載任何用戶界面,從這一方面來說節(jié)約了開發(fā)本錢,但是從平安性來說,c/s模式對于每個用戶都有一個客戶端,而b/s模式的客戶端是被所有用戶公用,而且不固定,所以來說,c/s比擬b/s來說平安性相對較高。2.3Jsp和ServletServlet是作用在效勞器端,其本質(zhì)就是一個Java類,它可以響應客戶端的請求,并作出處理。Servlet有它自己的生命周期,包括效勞器對一個Servlet的首次加載、對Servlet的初始化、初始化后對客戶端請求的響應、最后的銷毀。對于Servlet的初始化我們只能調(diào)用其里面的init〔〕方法一次,以后再用都不會在調(diào)用這個方法,而當Servlet銷毀時,會調(diào)用destroy〔〕這個方法。需要注意的是在后臺工程里面,如果用到了Servlet,對于每一個Servlet我們需要在WEB-INF目錄中的web.xml對其進展配置。在<servlet-name>?</servlet-name>問號位置放置此Servlet的名字<servlet-class>?</servlet-class>一般和其name放置容一致。在<servlet-mApping><servlet-name></servlet-name><url-pattern>/?</url-pattern></servlet-mApping>里面,一定要放置此Servlet在工程中的位置路徑。Jsp作為Java的腳本語言,他其實也可以被當做是Servlet,因為對于Jsp語法,Jsp引擎是先將其轉(zhuǎn)換成Servlet代碼,然后才帶入執(zhí)行,Jsp有自己的標簽語言,像c標簽庫、s標簽庫等,Jsp還有自己的置對象,像request、response、session等。對于Jsp的聲明格式為<%!聲明局部%>,對于Jsp的注釋的格式為<%--注釋局部--%>。在本系統(tǒng)中我們主要是用到Jsp中requset、response、session置對象像Servlet請求數(shù)據(jù),Servlet通過doGet、doPost方法獲取請求信息,并做處理,將處理后的信息傳送給需要的Jsp頁面,Jsp頁面獲取Servlet傳送過來的信息后將其輸入在網(wǎng)頁上。2.4系統(tǒng)主要路線在數(shù)據(jù)庫方面,我所設計的電子點菜系統(tǒng)用到的是MySQL數(shù)據(jù)庫,大致包括菜品表、菜品順序表、優(yōu)惠券表、用戶表、管理員表、銷售量表、意見反應表;對于數(shù)據(jù)庫的存儲管理我們借助于navicatforMySQL工具軟件來實現(xiàn)。對于效勞器端的設計,主要用HTML、CSS來實現(xiàn),其中對于數(shù)據(jù)庫的請求和獲取數(shù)據(jù)庫的信息并顯示,主要會用到Jsp語言來實現(xiàn),,如用Jsp中JDBC技術(shù)來實現(xiàn)和數(shù)據(jù)庫的連接,用Jsp中一些置對象request、response來處理HTTP請求中各種參數(shù)的處理。通過Servlet中doGet〔〕、doPost〔〕方法來對Jsp頁面的請求信息進展處理,并反應給相對應的Jsp頁面。對于Android客戶端應用程序的設計主要分三個功能。首先是應用程序的界面設計,我們會用到UI中的一些組件,像一些布局管理器、View、Button按鈕等。其次是界面間的部通信,我們會用到Intent、IntentFilter來實現(xiàn)。最后是Android和后臺的通信我們會用到Android的網(wǎng)絡應用技術(shù)來實現(xiàn),如用URL來讀取網(wǎng)絡資源、RELConnection來提交請求。2.5運行環(huán)境要求2.5.1硬件環(huán)境效勞端:IE瀏覽器Pad客戶端:無特殊要求,因為Android工程在設計時是按照建議七寸分辨率的屏幕來做,因此最好是選用這個尺寸大小的屏幕,在cpu主頻上最好選用1.5MHZ以上,如果主頻太低,影響程序運行速度。2.5.2軟件環(huán)境效勞端:MySQL數(shù)據(jù)庫、MyEclipse、AndroidADTPad客戶端:Android4.1及以上,如果版本太低,那么一些在4.1以后新增的一些功能,因為App中用到,但是老版本不能識別,造成程序運行不了,所以盡量選用新版本的平板。3.系統(tǒng)需求分析3.1各模塊關(guān)系圖此系統(tǒng)設計主要由以下各功能組成,分別包括后臺效勞器端和客戶端的一些功能,在效勞器端主要包括管理員的登陸、管理員對菜品信息的管理、管理員對訂單信息的管理。在客戶端所要實現(xiàn)的模塊中,此App中所要實現(xiàn)的功能包括首頁面的今日特色推薦、按照不同分類來進展菜品〔包括葷菜、素材、價錢、酒品〕顯示、已點的菜品、登陸注冊、個人信息和小游戲模塊,系統(tǒng)所包含的模塊如下列圖所示:圖2-1系統(tǒng)模塊3.2數(shù)據(jù)庫設計3.2.1數(shù)據(jù)庫列表數(shù)據(jù)庫我們采用MySQL數(shù)據(jù)庫,所需要建立的表有:〔1〕菜品表〔dish〕是為了可以在客戶端可以實現(xiàn)對菜品按照不同類型的排序和查找。其中包括主鍵菜名〔ID〕、菜名〔DishName〕、菜圖〔DishImage〕、菜價〔DishPrice〕、菜品所屬類別〔DishCategory〕、菜品是否被推薦〔IsRemend〕、菜品的拼音拼寫〔Spell〕、菜品的拼音簡拼〔SimpleSpell〕?!?〕菜單順序表〔Dish_order〕是主功能,是為了餐館能正確有序的讓廚房做出每道菜,并且可以使每道菜能正確送到每個餐桌。其中包括主鍵菜品所屬上菜順序〔MenuNumber〕、桌名〔TableID〕、菜品ID〔DishID〕、菜名〔DishName〕、此類菜所點數(shù)量〔DishCount〕。〔3〕菜品的銷售量表〔dish_salevolume〕主要是方便餐館一方可以對每道菜進展統(tǒng)計,并可對此進展各方面的調(diào)整。其中包括主鍵為菜品ID〔DishID〕此菜品的銷售量〔RealSale〕?!?〕意見反應表〔feedback〕主要是方便客戶對菜的味道和餐館的效勞等提出意見。其中包括主鍵用戶ID〔ID〕、此用戶所提得意見〔Information〕?!?〕管理員表〔manager〕主要是為了餐館一方在pc端登陸所用。其中包括主鍵管理員ID〔ID〕、登錄名〔UserName〕、登錄密碼〔UserPassword〕?!?〕用戶表〔user〕主要是為了實現(xiàn)對用戶信息的存儲。其中包括主鍵用戶ID〔ID〕、登錄名〔UserName〕、登錄密碼〔Password〕?!?〕優(yōu)惠券表〔user_coupon〕主要是為了實現(xiàn)對優(yōu)惠券信息的的管理。其中包括主鍵優(yōu)惠券ID〔ID〕、優(yōu)惠券所屬用戶的用戶的ID〔UserID〕、優(yōu)惠券有效開場日期〔CouponStartTime〕、優(yōu)惠券的份額〔CouponValue〕優(yōu)惠券有效截止日期〔CouponEndTime〕。3.2.2數(shù)據(jù)庫連接的實現(xiàn)對于數(shù)據(jù)庫的連接,本系統(tǒng)用到的是Java中的JDBC技術(shù),JDBC為開發(fā)者提供很多核心的類庫,并規(guī)了連接數(shù)庫的要求,包括對數(shù)據(jù)庫的連接、對數(shù)據(jù)庫的查詢和各種操作、從數(shù)據(jù)庫中獲取數(shù)據(jù)。JDBC中有很多接口和常用類,我們主要用到的是DriverManager、Connection、Statement、ResultSet。當然我們通過JDBC技術(shù)和數(shù)據(jù)庫進展連接時,對不同的數(shù)據(jù)庫我們需要加載不同的驅(qū)動程序類,本系統(tǒng)我們用到的是MySQL數(shù)據(jù)庫,所以我們將MySQL-connector-Java的包導入程序即可保證與數(shù)據(jù)庫的連接。此系統(tǒng)采取MySQL數(shù)據(jù)庫,數(shù)據(jù)庫的連接程序在后臺PadOeder_Service程序src目錄的util包中,首先我們現(xiàn)在src目錄中建立一個名字為DBCperties的配置文件,里面存放數(shù)據(jù)庫連接需要的連接名、url、數(shù)據(jù)庫的用戶名和密碼。對于配置文件的使用可以方便其他使用者在不同的地方進展使用,其他使用者只需要在配置文件中重新改寫不同的信息而不需要在代碼中更改。DriverManager可以自動尋找相應的數(shù)據(jù)庫驅(qū)動程序,并可以與之連接,DriverManager可以識別MySQL數(shù)據(jù)庫、SQLServer等數(shù)據(jù)庫的驅(qū)動,DriverManager通過調(diào)用Class.ForName〔〞〞〕,接著我們通過DriverManager中的getConnection〔Stringurl,Stringuser,Stringpassword〕方法與數(shù)據(jù)庫即可取得連接,在getConnection方法中的三個參數(shù)中,url對于不同的數(shù)據(jù)庫有不同的url,url的組成包括協(xié)議、子協(xié)議、子名組成,由于本系統(tǒng)用的是MySQL數(shù)據(jù)庫,因此我們就用連接MySQL數(shù)據(jù)庫的url做例子,對于連接MySQL的url為:jdbc:MySQL://:4417,在這里需要注意的是常用的數(shù)據(jù)庫端口是3306,因為本人設置的是4417,因此在我們這里我的url中的端口號為4417。getConnection中的user和password分別為自己數(shù)據(jù)庫對應的賬號和密碼,對于數(shù)據(jù)庫的連接代碼如下:publicclassDBUtil{ publicConnectionopenConnection(){ Propertiesprop=newProperties(); Stringdriver=null; Stringurl=null; Stringusername=null; Stringpassword=null; Stringyhc_url=null; try{prop.load(this.getClass().getClassLoader().getResourceAsStream( "DBCperties")); driver=prop.getProperty("driver"); url=prop.getProperty("url"); username=prop.getProperty("username"); password=prop.getProperty("password"); yhc_url=prop.getProperty("YHC_url"); Class.forName(driver); returnDriverManager.getConnection(url,username,password); }catch(Exceptione){ e.printStackTrace(); } returnnull; } publicStringgetUrl(){ Propertiesprop=newProperties(); Stringyhc_url=null; try{ prop.load(this.getClass().getClassLoader().getResourceAsStream( "DBCperties")); yhc_url=prop.getProperty("YHC_url"); returnyhc_url; }catch(Exceptione){ e.printStackTrace(); }returnnull; }}配置文件DBCperties中所存放的信息如下:url=jdbc:MySQL://:4417/e-menu"useUnicode=true&characterEncoding=utf-8username=rootpassword=123456JDBC中的另外一個常用接口Connection代表與數(shù)據(jù)庫驅(qū)動程序代表的連接,一個應用程序中可以與數(shù)據(jù)庫有一個或者多個數(shù)據(jù)連接,Connection可以向數(shù)據(jù)庫輸入數(shù)據(jù)庫查詢語句,數(shù)據(jù)庫因此而能執(zhí)行其輸入的查詢語句。Statement作為JDBC的另外一個常用接口,他的出現(xiàn)主要是因為對數(shù)據(jù)庫操作的語句,是封裝在其中,它分為Statement、PreparedStatement、CallableStatement三種對象,對于如果查詢中沒有參數(shù),那么我們就可以使用Statement對象中的executeQuery、executeUpdate等方法對數(shù)據(jù)庫進展查詢、更新、增刪等操作而如果查詢的語句中如果限制條件中需要輸入?yún)?shù),那么我們就需要通過PreparedStatement來對數(shù)據(jù)庫進展操作,我們可以通過PreparedStatement可以通過里面setString〔?,?〕、setInt〔?,?〕、setBoolean〔?,?〕來對查詢語句中的參數(shù)賦值,舉例如下:Stringsql="selectID,DishName,DishImage,DishPrice,DishCategory,IsRemend,Spell,SimpleSpell,RealSalefromdish,dish_salevolumewhereDishID=IDlimit","";ps=conn.prepareStatement(sql);ps.setInt(1,pagenow);ps.setInt(2,pageSize);CallableStatement因為在本系統(tǒng)中并不常用,在這里就不做概述。ResultSet作為JDBC中另外一個重要的接口,他的主要功能是存儲從數(shù)據(jù)庫中查詢獲取的數(shù)據(jù),ResultSet中常用的方法包括next〔〕用來使光標移動到數(shù)據(jù)庫記錄的下一條,因為其這功能,我們可以在代碼中判斷數(shù)據(jù)庫查詢結(jié)果中的數(shù)據(jù)我們是否都取得完畢,如果取完,那么next〔〕方法返回一個false,因此循環(huán)就可以截止了。舉例如下:Stringsql="selectID,DishName,DishImage,DishPrice,DishCategory,IsRemend,Spell,SimpleSpell,RealSalefromdish,dish_salevolumewhereDishID=IDlimit",""; ps=conn.prepareStatement(sql); ps.setInt(1,pagenow); ps.setInt(2,pageSize); rs=ps.executeQuery(); while(rs.next()) { dish=newDish(); dish.setId(rs.getInt(1)); dish.setDishName(rs.getString(2)); dish.setDishImage(rs.getString(3)); dish.setDishPrice(rs.getInt(4)); dish.setDishCategory(rs.getString(5)); dish.setIsRemand(rs.getBoolean(6)); dish.setSpell(rs.getString(7)); dish.setSimpleSpell(rs.getString(8)); dish.setSaleVolume(rs.getInt(9));}3.3功能需求描述下表主要對整個點菜系統(tǒng)所有的模塊進展了描述,包括Android端和效勞器端功能的描述。包括每個模塊要實現(xiàn)的功能,每個模塊的優(yōu)先級,每個模塊的權(quán)限都進展了描述,像菜品類別分類顯示、用戶的登陸、在效勞器端的管理員登錄模塊、效勞器端對菜品的查找、修改、效勞器端對訂單的管理等等。具體各局部的功能如下表所示:系統(tǒng)功能需求分析圖模塊功能優(yōu)先級描述權(quán)限說明首頁顯示主界面一級圖片按鈕的形式顯示在界面;每個按鈕跳入對應的界面;運行程序后,直接進入;菜品類別葷菜系列海鮮系列素菜系列飯湯系列酒品飲料一級顯示不同類別的菜品信息今日推薦今日推薦一級顯示店家每日推薦的菜品信息本店熱賣本店熱賣一級根據(jù)銷量顯示菜品用戶登錄用戶登錄/注冊一級登錄后可以保存和使用游戲中贏取的優(yōu)惠卷登錄后按鈕轉(zhuǎn)換成我的信息按鈕我的信息我的信息二級顯示用戶的優(yōu)惠卷信息,數(shù)量等登錄后才會顯示菜品搜索簡易搜索語音搜索一級根據(jù)菜品名稱模糊搜索,不想打字也可語音搜索已點的菜已點的菜二級顧客已經(jīng)提交的菜品信息更多娛樂游戲一級給你展現(xiàn)一道本店的菜,讓你來猜菜名,連續(xù)3道你就可以獲取優(yōu)惠券了每天時機只有一次哦!獲取優(yōu)惠卷須先登錄周邊查找一級你可以利用百度地圖,搜索附近的一些KTV、超市、酒店、娛樂場所等,解決餐后安排問題意見反應二級消費者反應對本餐廳的效勞的滿意度調(diào)查和意見退出程序二級退出本程序效勞器登陸二級對菜品進展增刪改查查看訂單,桌號訂單,結(jié)賬后相應訂單記錄刪除登陸后可操作3.4主要開發(fā)工具3.4.1MyEclipse對于MyEclipse的解釋,首先要說Eclipse,Eclipse是基于Java語言且開放并且可以擴展的操作平臺。Eclipse包含了一個標準的插件集,包括JavaDevelopmentTools即JDT,Eclipse有很多的優(yōu)點。Eclipse首先來說源碼是開放的,所有的開發(fā)人員都可以研究它,另外,Eclipse是可以擴展的,它不僅支持Java的開發(fā),還包括PHP、c等很多語言的開發(fā)和使用,只需要下載相應的插件即可。而且Eclipse對于很多的平臺都是支持的,像Linux、windows等等。對于不同的平臺,Eclipse提供相對應的工具包。當然用Eclipse來開發(fā)軟件,更高效和迅速。MyEclipse作為Eclipse的擴展板,不僅繼承了Eclipse的所有功能,而且在我們的軟件中,因其能很好的處理在JavaEE和數(shù)據(jù)庫的開發(fā),因而我們能利用JavaEE中Jsp、JavaScript和數(shù)據(jù)庫來實現(xiàn)我們軟件中后臺的功能。而且MyEclipse還嵌了Tomcat,因此我們還可以直接將后臺在其上進展發(fā)布。對于Tomcat,他是一個免費的軟件,我們可以通過其來發(fā)布自己的工程。對于工程的發(fā)布,我們可以自己手動的發(fā)布,亦可以通過MyEclipse來發(fā)布。我們比擬贊同手工的工程發(fā)布,因為我們可以定期的清理Tomcat中已經(jīng)不用的工程,而不需要每次發(fā)布一次工程都要將以前的工程都發(fā)布了,如果不定期清理,我們每次發(fā)布工程所浪費的時間會增大很多。在Tomcat的目錄文件中分好幾個目錄文件,像/bin是用來存放一些腳本文件、像/config中是存放一些配置文件、/logs中存放的是日志文件而我們手動發(fā)布工程時候我們只需要將完整的工程放到/WebApps目錄下面,然后啟動Tomcat,在瀏覽器中輸入相對應的localhost:8080/之后,如果出現(xiàn)Tomcat的網(wǎng)頁,那么就證明我們的Tomcat啟動成功,接下來在瀏覽器中輸入我們工程的url,即可對工程進展查看。3.4.2ADTADT是Eclipse中的一個插件,它可以快速讓開發(fā)者創(chuàng)立一個Android的工程和開發(fā)界面,而且其包括了Android根本框架的API組件??偟膩碚f,有了ADT插件,我們可以更高效的來實現(xiàn)對Android工程的開發(fā)。在ADT中我們可以很方便的對客戶端App進展調(diào)試,對于Android工程的調(diào)試,可以有虛擬機和真機兩種調(diào)試方法。在本系統(tǒng)中因為需要的是一個占用存比擬大,而且屏幕分辨率比擬高的程序,所以我們選用真機來調(diào)試,選用真機來調(diào)試程序,首先需要下載此手機的驅(qū)動程序,如果用戶嫌棄麻煩,那么可以直接下載360手機安裝助手或者騰訊手機安裝助手,然后用數(shù)據(jù)先連接手機,在pc端手機助手中會自動幫助手機安裝客戶端手機助手,我們接著翻開系統(tǒng)設置->開發(fā)者選項->將允許USB調(diào)試、允許模擬位置、不鎖定屏幕勾選,然后點擊ADT中的運行,選中自己的手機,接著,本系統(tǒng)App將自動安裝到手機中,用戶即可調(diào)試。假設說沒有Android真機,在其它Android工程測試時,我們可以在AndroidVirtualDeviceManager中查看我們所建立的虛擬機,當然我們也可以根據(jù)自己工程要求新建立一個虛擬機,自由分配存大小,但是假設有真機我們還是第一個選擇真機,因為虛擬機在穩(wěn)定性和快捷性上都不如真機,可能有些錯誤我們在虛擬機上面不一定調(diào)試不出來。在AndroidADT的調(diào)試中,我們用專門的DDMS進展調(diào)試,DDMS主要分為設備面板,信息面板,信息輸出面板。在設備面板中,我們可以查看當前在調(diào)試Android工程所用的Android機。在DDMS中我們用到的最多的是信息輸出面板中的LogCat,當我們調(diào)試程序時,如果我們的程序有錯誤,我們可以在錯誤的地方拋出異常,而在LogCat中有一功能SavedFilters,這就相當于系統(tǒng)為我們提供了一個過濾器,我們可以在新建一個自己需要的過濾器,以此來捕獲自己工程中的錯誤,這個方法在工程初期調(diào)試運行期間后經(jīng)常用到,當然強大的ADT還為我們提供了在手機和電腦之間可以相互傳送數(shù)據(jù)的功能,在DDMS中如果我們工程中有用到SQLite數(shù)據(jù)庫,我們還可以查看這個數(shù)據(jù)庫中我們所存的數(shù)據(jù)。軟件系統(tǒng)設計4.1后臺功能模塊4.1.1后臺登陸模塊管理員登陸的模塊主要通過Jsp登陸頁面向一個Servlet提交管理員輸入的用戶名和密碼。Jsp頁面所用的技術(shù)是一個form表單,form表單中的action屬性對應相對應要驗證登陸信息正確與否的一個Servlet,而此Servlet類通過集成HttpServlet類,并通過doGet、doPost方法中的request請求獲取form表單中的管理員信息,Servlet通過連接數(shù)據(jù)庫進展驗證,如果管理員登錄信息合法,那么Servlet通過doGet方法中response方法直接跳轉(zhuǎn)到后臺管理主界面。Servlet處理中的主要代碼展示如下: publicvoiddoGet(HttpServletRequestrequest,HttpServletResponseresponse)throwsServletException,IOException{ response.setContentType("text/HTML;charset=utf-8"); PrintWriterout=response.getWriter(); HttpSessionsession=request.getSession(); Stringaction=request.getParameter("action"); System.out.println(action); ManageDaomd=newManageDaoImpl(); md.deleteCoupon(); if("login".equals(action)){ Stringusername=request.getParameter("userName"); Stringpassword=request.getParameter("userPassword"); System.out.println(username+"sdfc"); out.print(username);booleanflag=md.check(username,password); if(flag){ HttpSessionuserName=request.getSession(true); userName.setAttribute("username",username); System.out.println(username); response.sendRedirect("Manage/main.Jsp"); }else{ /*out.print("登錄失敗"); out.print("<ahref=Manage/index.Jsp>重新登錄</a>"); System.out.println("登錄失敗");*/ response.sendRedirect("Manage/index.Jsp"result=fail"); }管理員登陸界面效果圖如下:圖4-1后臺登陸4.1.2后臺菜品模塊后臺菜品的管理主要是實現(xiàn)了一個對菜品進展分頁的顯示和對菜品進展修改、刪除的功能。對菜品的分頁顯示的功能實現(xiàn)流程為:一個Jsp頁面通過Page指令中的session向一個Servlet傳輸當前頁面〔pageNow〕和每頁顯示的菜品數(shù)〔pageSize〕,Servlet通過調(diào)用分頁顯示功能的函數(shù)將Jsp頁面需要的菜品數(shù)據(jù)傳送回Jsp頁面,Jsp頁面通過c標簽將數(shù)據(jù)顯示到頁面中,Servlet獲取Jsp請求數(shù)據(jù)和向Jsp傳輸和數(shù)據(jù)所用到的方法和后臺管理員登陸時向Servlet驗證信息時用到的技術(shù)是一樣的,因此在此就不做解釋。而實現(xiàn)分頁顯示功能的函數(shù)局部代碼如下:publicPageBeanfindByPageDish(intpageSize,intpageNow){ //TODOAuto-generatedmethodstub DBUtilutil=newDBUtil(); Connectionconn=util.openConnection(); PageBeanpb=newPageBean(); pb.setPageSize(pageSize); Dishdish=null; intpagenow=(pageNow-1)*pageSize; try{ Stringsql="selectID,DishName,DishImage,DishPrice,DishCategory,IsRemend,Spell,SimpleSpell,RealSalefromdish,dish_salevolumewhereDishID=IDlimit",""; ps=conn.prepareStatement(sql); ps.setInt(1,pagenow); ps.setInt(2,pageSize); rs=ps.executeQuery(); while(rs.next()) { dish=newDish(); dish.setId(rs.getInt(1)); dish.setDishName(rs.getString(2)); dish.setDishImage(rs.getString(3)); dish.setDishPrice(rs.getInt(4)); dish.setDishCategory(rs.getString(5)); dish.setIsRemand(rs.getBoolean(6)); dish.setSpell(rs.getString(7)); dish.setSimpleSpell(rs.getString(8)); dish.setSaleVolume(rs.getInt(9)); pb.getDish().add(dish); } Stringsql2="selectcount(distinctID)fromdish"; ps=conn.prepareStatement(sql2); rs=ps.executeQuery(); if(rs.next()) { pb.setPageSizes(rs.getInt(1)); }}catch(SQLExceptione){ //TODOAuto-generatedcatchblock e.printStackTrace(); }finally{ close(); } returnpb; }后臺菜單管理界面效果圖如下:圖4-2后臺菜單管理4.1.3后臺訂單模塊后臺訂單的管理和后臺菜品的管理所用到的技術(shù)是一樣的,都是需要在Jsp頁面中對數(shù)據(jù)進展分頁顯示。二者不同在于訂單管理請求的數(shù)據(jù)庫表是dish,而后臺訂單的管理請求的數(shù)據(jù)庫是dish_order,后臺訂單管理所要實現(xiàn)的功能包括對所有訂單的查找,在顧客結(jié)賬時候?qū)?shù)據(jù)庫表dish_order中相應的數(shù)據(jù)進展去除。后臺訂單管理效果圖如下:圖4-3后臺訂單管理4.2客戶端功能模塊4.2.1首頁面模塊在首頁面模塊,我們主要實現(xiàn)的是通過一個Gallery畫廊視圖組件來實現(xiàn)一個跑馬燈的效果來自動顯示存放在一個Adapter對象中的一組菜品信息。當然我們會在adapter中每一個圖片中加上一個onClicklistener,當顧客自己通過手勢向左或者向右滑動的時候,Gallery中會更換為adapter中存儲的其它菜品圖片。我們通過在里面存放每日推薦的菜品,然后顧客在首次翻開客戶端的時候,看到的就是餐飲方主打的菜品。接著顧客可以通過自己的需求進入主功能的模塊。對于客戶端首頁面效果圖如下:圖4-4客戶端首頁面4.2.2主功能模塊在功能模塊,我們實現(xiàn)的是一個類似于新聞瀏覽頁面的界面,在上邊界和左側(cè)邊界,我們選中不同的按鈕,相應出來不同排序的界面。這種模式值得注意,一般因為手機的屏幕大小,我們不會讓側(cè)邊界的功能模塊出現(xiàn),因為這樣留給顯示信息模塊的位置就更小了,對于用戶的體驗就更不好了。因為我們本系統(tǒng)的設計是考慮到是在平板等尺寸比擬大的Android系統(tǒng)上運行,因此我們采用這種模式,這樣的模式對于用戶對于菜品的選擇更方便。而為了實現(xiàn)這個功能,我們就需要用到Fragment,對于fragment,我們可以把它認為是Activity的一個片段,它有自己的生命周期,但是它的生命周期完全是建立在Activity之上,Activity銷毀時,在他上面的Fragment也會相應的銷毀,Activity暫停的時候,相應的Fragment也會相應的銷毀。因為Fragment屬于Activity的一個子模塊,所以二者可以進展通信。當然在主功能模塊的菜品信息顯示模塊中,我們用到的是BaseAdapter,AdapterView我們可以把它當做是一個存放列表的一個容器,他有很多的子類,如果他的子類能完成我們的功能時候,那么我們直接調(diào)用子類即可,像ArrayAdapter、SimpleAdapter、BaseAdapter,像第一個我們只能存放List集合的一組值性質(zhì)的數(shù)據(jù),而對于BaseAdapter我們可以最大限度得對各列表項進展封裝,因此,我們所用的是基于對BaseAdapter進展繼承而實現(xiàn)菜單的顯示。而對于菜品信息的傳送,當然我們是像數(shù)據(jù)庫請求而獲取的,具體的流程是,我們像每一個按鍵設置一個監(jiān)聽OnClickListener,當我們點擊按鈕時候,客戶端通過URLConnection請求向效勞器端進展請求,而效勞器端的處理客戶端請求的一個Servlet獲取信息后,通過連接數(shù)據(jù)庫獲取客戶端想要的信息,接下來效勞器端將信息封裝在Json中,客戶端通過向存儲信息的一個Jsp頁面進展請求來獲取Json數(shù)據(jù),客戶端將讀取到的Json數(shù)據(jù)讀取到后,然后將Json格式的信息傳送到List列表中,然后相對應的Activity將List信息解析,通過Adapter布局管理器顯示在Activity中。對于json數(shù)據(jù)的封裝,代碼如下:publicvoiddoPost(HttpServletRequestrequest,HttpServletResponseresponse) throwsServletException,IOException{ doGet(request,response); } publicStringgetJson(StringDishCategory,inti){ List<Dish>list; if(i==1){ list=useDao.select2(DishCategory);} elseif(i==2) { list=useDao.selectSearchOrder(DishCategory); } else{ list=useDao.selectSearchOrderAsc(DishCategory); } Stringyhc_url=db.getUrl(); //if("json".equals(format)){ //[{id:56,title:"****x",timelength:90},{id:16,title:"xbbx",timelength:20}] StringBuilderbuilder=newStringBuilder(); builder.Append('['); for(Dishdish:list){ builder.Append('{'); builder.Append("ID:").Append(dish.getId()).Append(','); builder.Append("DishName:\"").Append(dish.getDishName()).Append("\",");builder.Append("DishImage:\"").Append(yhc_url+dish.getDishImage()).Append("\",");builder.Append("DishPrice:").Append(dish.getDishPrice()).Append(','); builder.Append("DishCategory:\"").Append(dish.getDishCategory()).Append("\","); builder.Append("IsRemend:\"").Append(dish.isIsRemand()).Append("\""); builder.Append("},"); } builder.deleteCharAt(builder.length()-1); builder.Append(']'); returnbuilder.toString(); }在主功能的模塊中,我們的效果圖如下:圖4-5客戶端主功能頁面4.2.3訂單模塊在我們訂單模塊,我們實現(xiàn)的功能是用戶在主功能模塊點過菜品之后,當用戶進入訂單的頁面時候,能看到自己所在桌點的菜品,那么我們就有一個問題,不同的Activity怎么傳輸信息,為什么我們在不同的Activity點過菜品之后,我們就可以在訂單模塊看到呢,這個我們就需要一個非常特別的對象,那就是Intent,雖然Intent不是四大組

溫馨提示

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

最新文檔

評論

0/150

提交評論