版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、* 2014 屆本科畢業(yè)論文(設(shè)計(jì)) 論文(設(shè)計(jì))題目: android手機(jī)終端點(diǎn)菜系統(tǒng) 學(xué)生姓名: * 所在院系: 信息工程學(xué)院 所學(xué)專業(yè): 計(jì)算機(jī)科學(xué)與技術(shù) 導(dǎo)師姓名: * 完成時(shí)間: 2014-05-10 摘要 本課題所實(shí)現(xiàn)的電子點(diǎn)菜系統(tǒng)改變了傳統(tǒng)的服務(wù)員和菜單的點(diǎn)菜模式,采用新穎的電子終端點(diǎn)菜系統(tǒng),這種新式的方式使得餐館更有檔次和特色,對(duì)于其在同行業(yè)的競(jìng)爭(zhēng)有著明顯的幫助。本課題采用c/s開(kāi)發(fā)模式,分為服務(wù)器端和android客戶端的一些操作。在服務(wù)器端主要采用jsp動(dòng)態(tài)網(wǎng)頁(yè)技術(shù),實(shí)現(xiàn)了后臺(tái)餐館一方對(duì)菜譜信息的管理和對(duì)顧客訂單的處理。在客戶端主要采用android技術(shù)實(shí)現(xiàn)了顧客對(duì)菜品的查
2、找、分類查看、顧客對(duì)自己訂單的選擇和查看,顧客在確定訂單之后可以提交給餐館一方,使得餐館一方得以查看并通知廚房做出菜品。關(guān)鍵詞 android,mysql,jsp,javaabstractelectronic ordering system the realization of this project has changed the traditional service and menu menu mode,the novel electronic terminal order system,the new method makes the restaurant more grades a
3、nd characteristics,this is very helpful for the same industry competition.this topic uses c/s development mode,divided into some operation server and android client.on the server side jsp dynamic webpage technology mainly uses,this has realized the backstage restaurant management side of the menu in
4、formationand customer order processing.the client uses the android technology to realize the customer on the foodsearch, classification and view view, of their customers the choice of orders,customers in the restaurant after the order is confirmed can be submitted to a party.this makes the restauran
5、t side to see and notice the kitchen to make dishes.keywords android,mysql,jsp,java目 錄1. 緒論11.1項(xiàng)目背景及意義11.2 android系統(tǒng)概述12. 系統(tǒng)理論和技術(shù)路線32.1 android四大組件32.2 c/s體系32.3 jsp和servlet42.4系統(tǒng)主要路線42.5 運(yùn)行環(huán)境要求52.5.1 硬件環(huán)境52.5.2 軟件環(huán)境53. 系統(tǒng)需求分析53.1各模塊關(guān)系圖53.2數(shù)據(jù)庫(kù)設(shè)計(jì)63.2.1 數(shù)據(jù)庫(kù)列表63.2.2數(shù)據(jù)庫(kù)連接的實(shí)現(xiàn)73.3 功能需求描述113.4 主要開(kāi)發(fā)工具133.4.
6、1 myeclipse133.4.2 adt144. 軟件系統(tǒng)設(shè)計(jì)154.1后臺(tái)功能模塊154.1.1后臺(tái)登陸模塊154.1.2后臺(tái)菜品模塊174.1.3后臺(tái)訂單模塊194.2客戶端功能模塊204.2.1首頁(yè)面模塊204.2.2主功能模塊214.2.3訂單模塊234.2.4游戲模塊255. 結(jié)論26謝詞27參考文獻(xiàn)281. 緒論1.1項(xiàng)目背景及意義 由于互聯(lián)網(wǎng)的高速發(fā)展,而電子技術(shù)由于在外國(guó)比如說(shuō)美國(guó)最先得到了發(fā)展并被用于生活的各個(gè)領(lǐng)域,而餐飲作為我們生活中的一個(gè)重要環(huán)節(jié),它的發(fā)展也是非常迅猛的,以美國(guó)舉例,從1999年的餐飲業(yè)的營(yíng)業(yè)額3500多億美元到2010年的6000多億,由于人們對(duì)餐飲
7、業(yè)的關(guān)注,所以電子技術(shù)對(duì)餐飲的影響非常大,所以像手機(jī)點(diǎn)菜系統(tǒng)的發(fā)展在美國(guó)已經(jīng)逐漸得得到了普及。在我們國(guó)家,餐飲是人民非常關(guān)心的一個(gè)方向,但是點(diǎn)菜系統(tǒng)在餐飲業(yè)的普及還只是剛剛開(kāi)始,現(xiàn)在僅僅是在一部分比較高檔的餐廳出現(xiàn),但是我們從餐飲業(yè)的發(fā)展不難看出,點(diǎn)菜系統(tǒng)的普及是肯定的。近幾年,隨著android和ios技術(shù)的發(fā)展,智能手機(jī)和平板不僅僅被廣大的青年、青少年甚至兒童和老年人接受并使用,電子產(chǎn)品正在影響著我們生活的方方面面,而餐飲作為我們都必不可少的一部分也不可避免的和電子產(chǎn)品結(jié)合到了一起。手機(jī)、平板的點(diǎn)菜系統(tǒng)替代人工服務(wù)員的點(diǎn)菜方式不僅僅節(jié)省了大量的勞動(dòng)力,降低了成本,而且還方便收銀員對(duì)賬單支出
8、的管理,使得餐廳的財(cái)政能得到高效透明的管理,當(dāng)然現(xiàn)代化的電子點(diǎn)菜方式相比較于傳統(tǒng)的點(diǎn)菜員會(huì)得到廣大消費(fèi)者尤其是青年人的喜愛(ài)。 根據(jù)科技的發(fā)展對(duì)社會(huì)帶來(lái)的影響,電子點(diǎn)菜系統(tǒng)必將取代傳統(tǒng)的點(diǎn)菜模式,如今電子點(diǎn)菜系統(tǒng)已經(jīng)在比較高檔的餐廳中開(kāi)始出現(xiàn)并被使用,電子點(diǎn)菜系統(tǒng)必將得到發(fā)展。1.2 android系統(tǒng)概述android最初是android公司創(chuàng)辦,后由google公司收購(gòu),google希望將android創(chuàng)造成一個(gè)標(biāo)準(zhǔn)化的、可移動(dòng)的移動(dòng)電話平臺(tái),進(jìn)而在移動(dòng)互聯(lián)網(wǎng)形成一個(gè)開(kāi)放性的操作平臺(tái)。2007年谷歌發(fā)布第一個(gè)android1.1版本,但并未得到市場(chǎng)的廣泛支持,但是到2009年,android
9、1.5版本的面世,android憑借“豪華”的界面和藍(lán)牙支持,獲得了大量的開(kāi)發(fā)者支持。到目前為止,android已經(jīng)超過(guò)ios在市場(chǎng)的占有量,國(guó)內(nèi)大量的手機(jī)廠商開(kāi)始生產(chǎn)android操作系統(tǒng)的手機(jī),android已經(jīng)成為世界上最主流的手機(jī)操作系統(tǒng)。 圖1-1 android系統(tǒng)的體系結(jié)構(gòu)android系統(tǒng)的底層是建立在linux系統(tǒng)之上,總共包括linux內(nèi)核、android運(yùn)行時(shí)、函數(shù)庫(kù)、應(yīng)用程序框架、應(yīng)用程序?qū)?。linux層為android提供了內(nèi)存管理、網(wǎng)絡(luò)協(xié)議棧、驅(qū)動(dòng)模型、進(jìn)程管理等核心系統(tǒng)服務(wù)。android運(yùn)行時(shí)則是由兩部分組成:android虛擬機(jī)和android核心庫(kù)集,and
10、roid核心庫(kù)集提供了java語(yǔ)言核心庫(kù)所能使用的絕大多數(shù)功能,而虛擬機(jī)則負(fù)責(zé)運(yùn)行android應(yīng)用程序。在這里要區(qū)分的是android和jvm是完全不同的,jvm永興的是java字節(jié)碼,也就是.class文件,而android虛擬機(jī)則運(yùn)行的是專有的dex文件。函數(shù)庫(kù)包含了一整套能被android應(yīng)用程序框架所調(diào)用的庫(kù)的集合,像android專有的輕量級(jí)數(shù)據(jù)庫(kù)sqlite等,需要注意的是android應(yīng)用程序并不能直接調(diào)用這些庫(kù),需要經(jīng)過(guò)應(yīng)用程序框架來(lái)調(diào)用。android應(yīng)用程序框架最主要的功能是提供了大量的api供開(kāi)發(fā)者使用,不管是系統(tǒng)的應(yīng)用程序還是開(kāi)發(fā)者自己開(kāi)發(fā)的應(yīng)用程序都可以公平的調(diào)用它
11、。應(yīng)用程序?qū)泳褪俏覀兤綍r(shí)在手機(jī)上所見(jiàn)的包括系統(tǒng)提供的時(shí)鐘瀏覽器、聯(lián)系人等等還是自己下載的由開(kāi)發(fā)者自己開(kāi)發(fā)的android所有的應(yīng)用程序。2. 系統(tǒng)理論和技術(shù)路線2.1 android四大組件 activity要實(shí)現(xiàn)的功能是用戶交互的組件,它是用戶可以看到的,一個(gè)activity可以包含多個(gè)ui組件并顯示,例如textview、button、imageview、adapaterview等組件。service在地位上和activity是并列的,但是它和activity不同處在于service對(duì)于用戶是不可見(jiàn)的,所以它不能和用戶進(jìn)行交互,因此service有自己的生命周期,并不依賴于一個(gè)activi
12、ty,他的主要功能是為其他組件提供后臺(tái)服務(wù)和監(jiān)控其他組件的運(yùn)行狀態(tài)。broadcastreceiver從名字上說(shuō)可以把其當(dāng)做一個(gè)信息廣播的接收組件,開(kāi)發(fā)者通過(guò)集成父類broadcastreceiver來(lái)實(shí)現(xiàn)自己的功能。其它組件通過(guò)sendbroadcast()等方法來(lái)發(fā)送廣播,子類broadcastreceiver通過(guò)onreceiver(context context,intent intent)方法來(lái)監(jiān)聽(tīng)接收消息。contentprovider和其它三個(gè)組件最大不同在于其可以從其它app程序接口中取得其它app中的信息,最常見(jiàn)例子是:好多app需要讀取我們手機(jī)聯(lián)系人中的數(shù)據(jù),而conten
13、tprovider就能提供這個(gè)需求。2.2 c/s體系 c/s即客戶端/服務(wù)器端結(jié)構(gòu),如果說(shuō)c/s就最好和b/s作比較,那具體的項(xiàng)目舉例就是需要下載的qq客戶端就屬于c/s模式,而網(wǎng)頁(yè)版的qq就屬于b/s結(jié)構(gòu)的項(xiàng)目。c/s結(jié)構(gòu)中需要用戶下載專有的客戶端軟件,而b/s模式,客戶端不需要下載任何用戶界面,從這一方面來(lái)說(shuō)節(jié)約了開(kāi)發(fā)成本,但是從安全性來(lái)說(shuō),c/s模式對(duì)于每個(gè)用戶都有一個(gè)客戶端,而b/s模式的客戶端是被所有用戶公用,而且不固定,所以來(lái)說(shuō),c/s比較b/s來(lái)說(shuō)安全性相對(duì)較高。2.3 jsp和servlet servlet是作用在服務(wù)器端,其本質(zhì)就是一個(gè)java類,它可以響應(yīng)客戶端的請(qǐng)求,并
14、作出處理。servlet有它自己的生命周期,包括服務(wù)器對(duì)一個(gè)servlet的首次加載、對(duì)servlet的初始化、初始化后對(duì)客戶端請(qǐng)求的響應(yīng)、最后的銷毀。對(duì)于servlet的初始化我們只能調(diào)用其里面的init()方法一次,以后再用都不會(huì)在調(diào)用這個(gè)方法,而當(dāng)servlet銷毀時(shí),會(huì)調(diào)用destroy()這個(gè)方法。需要注意的是在后臺(tái)項(xiàng)目里面,如果用到了servlet,對(duì)于每一個(gè)servlet我們需要在web-inf目錄中的web.xml對(duì)其進(jìn)行配置。在?問(wèn)號(hào)位置放置此servlet的名字?一般和其name放置內(nèi)容一致。在 /? 里面,一定要放置此servlet在項(xiàng)目中的位置路徑。 jsp作為java
15、的腳本語(yǔ)言,他其實(shí)也可以被當(dāng)做是servlet,因?yàn)閷?duì)于jsp語(yǔ)法,jsp引擎是先將其轉(zhuǎn)換成servlet代碼,然后才帶入執(zhí)行,jsp有自己的標(biāo)簽語(yǔ)言,像c標(biāo)簽庫(kù)、s標(biāo)簽庫(kù)等,jsp還有自己的內(nèi)置對(duì)象,像request、response、session等。對(duì)于jsp的聲明格式為,對(duì)于jsp的注釋的格式為。 在本系統(tǒng)中我們主要是用到j(luò)sp中requset、response、session內(nèi)置對(duì)象像servlet請(qǐng)求數(shù)據(jù),servlet通過(guò)doget、dopost方法獲取請(qǐng)求信息,并做處理,將處理后的信息傳送給需要的jsp頁(yè)面,jsp頁(yè)面獲取servlet傳送過(guò)來(lái)的信息后將其輸入在網(wǎng)頁(yè)上。2.4系
16、統(tǒng)主要路線 在數(shù)據(jù)庫(kù)方面,我所設(shè)計(jì)的電子點(diǎn)菜系統(tǒng)用到的是mysql數(shù)據(jù)庫(kù),大致包括菜品表、菜品順序表、優(yōu)惠券表、用戶表、管理員表、銷售量表、意見(jiàn)反饋表;對(duì)于數(shù)據(jù)庫(kù)的存儲(chǔ)管理我們借助于navicat for mysql工具軟件來(lái)實(shí)現(xiàn)。對(duì)于服務(wù)器端的設(shè)計(jì),主要用html、css來(lái)實(shí)現(xiàn),其中對(duì)于數(shù)據(jù)庫(kù)的請(qǐng)求和獲取數(shù)據(jù)庫(kù)的信息并顯示,主要會(huì)用到j(luò)sp語(yǔ)言來(lái)實(shí)現(xiàn),如用jsp中jdbc技術(shù)來(lái)實(shí)現(xiàn)和數(shù)據(jù)庫(kù)的連接,用jsp中一些內(nèi)置對(duì)象request、response來(lái)處理http請(qǐng)求中各種參數(shù)的處理。通過(guò)servlet中doget()、dopost()方法來(lái)對(duì)jsp頁(yè)面的請(qǐng)求信息進(jìn)行處理,并反饋給相對(duì)應(yīng)的j
17、sp頁(yè)面。對(duì)于android客戶端應(yīng)用程序的設(shè)計(jì)主要分三個(gè)功能。首先是應(yīng)用程序的界面設(shè)計(jì),我們會(huì)用到ui中的一些組件,像一些布局管理器、view、button按鈕等。其次是界面間的內(nèi)部通信,我們會(huì)用到intent、intentfilter來(lái)實(shí)現(xiàn)。最后是android和后臺(tái)的通信我們會(huì)用到android的網(wǎng)絡(luò)應(yīng)用技術(shù)來(lái)實(shí)現(xiàn),如用url來(lái)讀取網(wǎng)絡(luò)資源、relconnection來(lái)提交請(qǐng)求。2.5 運(yùn)行環(huán)境要求 2.5.1 硬件環(huán)境 服務(wù)端:ie瀏覽器pad客戶端:無(wú)特殊要求,因?yàn)閍ndroid項(xiàng)目在設(shè)計(jì)時(shí)是按照建議七寸分辨率的屏幕來(lái)做,因此最好是選用這個(gè)尺寸大小的屏幕,在cpu主頻上最好選用1.5
18、mhz以上,如果主頻太低,影響程序運(yùn)行速度。2.5.2 軟件環(huán)境服務(wù)端:mysql數(shù)據(jù)庫(kù)、myeclipse 、android adtpad客戶端:android4.1及以上,如果版本太低,那么一些在4.1以后新增的一些功能,因?yàn)閍pp中用到,但是老版本不能識(shí)別,造成程序運(yùn)行不了,所以盡量選用新版本的平板。3. 系統(tǒng)需求分析3.1各模塊關(guān)系圖此系統(tǒng)設(shè)計(jì)主要由以下各功能組成,分別包括后臺(tái)服務(wù)器端和客戶端的一些功能,在服務(wù)器端主要包括管理員的登陸、管理員對(duì)菜品信息的管理、管理員對(duì)訂單信息的管理。在客戶端所要實(shí)現(xiàn)的模塊中,此app中所要實(shí)現(xiàn)的功能包括首頁(yè)面的今日特色推薦、按照不同分類來(lái)進(jìn)行菜品(包括
19、葷菜、素材、價(jià)錢、酒品)顯示、已點(diǎn)的菜品、登陸注冊(cè)、個(gè)人信息和小游戲模塊,系統(tǒng)所包含的模塊如下圖所示: 圖2-1 系統(tǒng)模塊3.2數(shù)據(jù)庫(kù)設(shè)計(jì)3.2.1 數(shù)據(jù)庫(kù)列表數(shù)據(jù)庫(kù)我們采用mysql數(shù)據(jù)庫(kù),所需要建立的表有:(1)菜品表(dish)是為了可以在客戶端可以實(shí)現(xiàn)對(duì)菜品按照不同類型的排序和查找。其中包括主鍵菜名(id)、菜名(dishname)、菜圖(dishimage)、菜價(jià)(dishprice)、菜品所屬類別(dishcategory)、菜品是否被推薦(isrecommend)、菜品的拼音拼寫(xiě)(spell)、菜品的拼音簡(jiǎn)拼(simplespell)。(2)菜單順序表(dish_order)是主
20、功能,是為了餐館能正確有序的讓廚房做出每道菜,并且可以使每道菜能正確送到每個(gè)餐桌。其中包括主鍵菜品所屬上菜順序(menunumber)、桌名(tableid)、菜品id(dishid)、菜名(dishname)、此類菜所點(diǎn)數(shù)量(dishcount)。(3)菜品的銷售量表(dish_salevolume)主要是方便餐館一方可以對(duì)每道菜進(jìn)行統(tǒng)計(jì),并可對(duì)此進(jìn)行各方面的調(diào)整。其中包括主鍵為菜品id(dishid)此菜品的銷售量(realsale)。(4)意見(jiàn)反饋表(feedback)主要是方便客戶對(duì)菜的味道和餐館的服務(wù)等提出意見(jiàn)。其中包括主鍵用戶id(id)、此用戶所提得意見(jiàn)(information)
21、。(5)管理員表(manager)主要是為了餐館一方在pc端登陸所用。其中包括主鍵管理員id(id)、登錄名(username)、登錄密碼(userpassword)。(6)用戶表(user)主要是為了實(shí)現(xiàn)對(duì)用戶信息的存儲(chǔ)。其中包括主鍵用戶id(id)、登錄名(username)、登錄密碼(password)。(7)優(yōu)惠券表(user_coupon)主要是為了實(shí)現(xiàn)對(duì)優(yōu)惠券信息的的管理。其中包括主鍵優(yōu)惠券id(id)、優(yōu)惠券所屬用戶的用戶的id(userid)、優(yōu)惠券有效開(kāi)始日期(couponstarttime)、優(yōu)惠券的份額(couponvalue)優(yōu)惠券有效截止日期(couponendtim
22、e)。3.2.2數(shù)據(jù)庫(kù)連接的實(shí)現(xiàn)對(duì)于數(shù)據(jù)庫(kù)的連接,本系統(tǒng)用到的是java中的jdbc技術(shù),jdbc為開(kāi)發(fā)者提供很多核心的類庫(kù),并規(guī)范了連接數(shù)庫(kù)的要求,包括對(duì)數(shù)據(jù)庫(kù)的連接、對(duì)數(shù)據(jù)庫(kù)的查詢和各種操作、從數(shù)據(jù)庫(kù)中獲取數(shù)據(jù)。jdbc中有很多接口和常用類,我們主要用到的是drivermanager、connection、statement、resultset。當(dāng)然我們通過(guò)jdbc技術(shù)和數(shù)據(jù)庫(kù)進(jìn)行連接時(shí),對(duì)不同的數(shù)據(jù)庫(kù)我們需要加載不同的驅(qū)動(dòng)程序類,本系統(tǒng)我們用到的是mysql數(shù)據(jù)庫(kù),所以我們將mysql-connector-java的包導(dǎo)入程序即可保證與數(shù)據(jù)庫(kù)的連接。 此系統(tǒng)采取mysql數(shù)據(jù)庫(kù),數(shù)據(jù)庫(kù)的
23、連接程序在后臺(tái)padoeder_service程序src目錄的util包中,首先我們現(xiàn)在src目錄中建立一個(gè)名字為dbcperties的配置文件,里面存放數(shù)據(jù)庫(kù)連接需要的連接名、url、數(shù)據(jù)庫(kù)的用戶名和密碼。對(duì)于配置文件的使用可以方便其他使用者在不同的地方進(jìn)行使用,其他使用者只需要在配置文件中重新改寫(xiě)不同的信息而不需要在代碼中更改。drivermanager可以自動(dòng)尋找相應(yīng)的數(shù)據(jù)庫(kù)驅(qū)動(dòng)程序,并可以與之連接,drivermanager可以識(shí)別mysql數(shù)據(jù)庫(kù)、sql server等數(shù)據(jù)庫(kù)的驅(qū)動(dòng),drivermanager通過(guò)調(diào)用class.forname(”),接著我們通過(guò)dr
24、ivermanager中的getconnection(string url,string user,string password)方法與數(shù)據(jù)庫(kù)即可取得連接,在getconnection方法中的三個(gè)參數(shù)中,url對(duì)于不同的數(shù)據(jù)庫(kù)有不同的url,url的組成包括協(xié)議、子協(xié)議、子名組成,由于本系統(tǒng)用的是mysql數(shù)據(jù)庫(kù),因此我們就用連接mysql數(shù)據(jù)庫(kù)的url做例子,對(duì)于連接mysql的url為:jdbc:mysql:/:4417,在這里需要注意的是常用的數(shù)據(jù)庫(kù)端口是3306,因?yàn)楸救嗽O(shè)置的是4417,因此在我們這里我的url中的端口號(hào)為4417。getconnection中的u
25、ser和password分別為自己數(shù)據(jù)庫(kù)對(duì)應(yīng)的賬號(hào)和密碼,對(duì)于數(shù)據(jù)庫(kù)的連接代碼如下:public class dbutil public connection openconnection() properties prop = new properties();string driver = null;string url = null;string username = null;string password = null;string yhc_url= null;try prop.load(this.getclass().getclassloader().getresourceasst
26、ream( 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);return drivermanager.getconnection(url, username, password); catch (exceptio
27、n e) e.printstacktrace();return null;public string geturl() properties prop = new properties();string yhc_url = null;try prop.load(this.getclass().getclassloader().getresourceasstream( dbcperties); yhc_url = prop.getproperty(yhc_url); return yhc_url; catch (exception e) e.printstacktrace();
28、return null;配置文件dbcperties中所存放的信息如下:driver=com.mysql.jdbc.driverurl=jdbc:mysql:/:4417/e-menu?useunicode=true&charactere ncoding=utf-8username=rootpassword=123456jdbc中的另外一個(gè)常用接口connection代表與數(shù)據(jù)庫(kù)驅(qū)動(dòng)程序代表的連接,一個(gè)應(yīng)用程序中可以與數(shù)據(jù)庫(kù)有一個(gè)或者多個(gè)數(shù)據(jù)連接,connection可以向數(shù)據(jù)庫(kù)輸入數(shù)據(jù)庫(kù)查詢語(yǔ)句,數(shù)據(jù)庫(kù)因此而能執(zhí)行其輸入的查詢語(yǔ)句。statement作為j
29、dbc的另外一個(gè)常用接口,他的出現(xiàn)主要是因?yàn)閷?duì)數(shù)據(jù)庫(kù)操作的語(yǔ)句,是封裝在其中,它分為statement、preparedstatement、callablestatement三種對(duì)象,對(duì)于如果查詢中沒(méi)有參數(shù),那么我們就可以使用statement對(duì)象中的executequery、executeupdate等方法對(duì)數(shù)據(jù)庫(kù)進(jìn)行查詢、更新、增刪等操作而如果查詢的語(yǔ)句中如果限制條件中需要輸入?yún)?shù),那么我們就需要通過(guò)preparedstatement來(lái)對(duì)數(shù)據(jù)庫(kù)進(jìn)行操作,我們可以通過(guò)preparedstatement可以通過(guò)里面setstring(?,?)、setint(?,?)、setboolean(?,
30、?)來(lái)對(duì)查詢語(yǔ)句中的參數(shù)賦值,舉例如下:string sql = select id,dishname,dishimage,dishprice,dishcategory,isrecommend,spell,simplespell,realsale from dish,dish_salevolume where dishid=id limit ?,? ;ps = conn.preparestatement(sql);ps.setint(1, pagenow);ps.setint(2, pagesize);callablestatement因?yàn)樵诒鞠到y(tǒng)中并不常用,在這里就不做概述。resultse
31、t作為jdbc中另外一個(gè)重要的接口,他的主要功能是存儲(chǔ)從數(shù)據(jù)庫(kù)中查詢獲取的數(shù)據(jù),resultset中常用的方法包括next()用來(lái)使光標(biāo)移動(dòng)到數(shù)據(jù)庫(kù)記錄的下一條,因?yàn)槠溥@功能,我們可以在代碼中判斷數(shù)據(jù)庫(kù)查詢結(jié)果中的數(shù)據(jù)我們是否都取得完畢,如果取完,那么next()方法返回一個(gè)false,因此循環(huán)就可以截止了。舉例如下:string sql = select id,dishname,dishimage,dishprice,dishcategory,isrecommend,spell,simplespell,realsale from dish,dish_salevolume where dish
32、id=id limit ?,? ;ps = conn.preparestatement(sql);ps.setint(1, pagenow);ps.setint(2, pagesize);rs = ps.executequery();while(rs.next() dish = new dish();dish.setid(rs.getint(1);dish.setdishname(rs.getstring(2);dish.setdishimage(rs.getstring(3);dish.setdishprice(rs.getint(4);dish.setdishcategory(rs.get
33、string(5);dish.setisrecommand(rs.getboolean(6);dish.setspell(rs.getstring(7);dish.setsimplespell(rs.getstring(8);dish.setsalevolume(rs.getint(9);3.3 功能需求描述 下表主要對(duì)整個(gè)點(diǎn)菜系統(tǒng)所有的模塊進(jìn)行了描述,包括android端和服務(wù)器端功能的描述。包括每個(gè)模塊要實(shí)現(xiàn)的功能,每個(gè)模塊的優(yōu)先級(jí),每個(gè)模塊的權(quán)限都進(jìn)行了描述,像菜品類別分類顯示、用戶的登陸、在服務(wù)器端的管理員登錄模塊、服務(wù)器端對(duì)菜品的查找、修改、服務(wù)器端對(duì)訂單的管理等等。具體各部分的功能
34、如下表所示: 系統(tǒng)功能需求分析圖 模塊功能 優(yōu)先級(jí)描述 權(quán)限說(shuō)明 首頁(yè)顯示主界面 一級(jí)圖片按鈕的形式顯示在界面;每個(gè)按鈕跳入對(duì)應(yīng)的界面; 運(yùn)行程序后,直接進(jìn)入; 菜品類別 葷菜系列海鮮系列素菜系列飯湯系列酒品飲料一級(jí)顯示不同類別的菜品信息 今日推薦今日推薦一級(jí)顯示店家每日推薦的菜品信息 本店熱賣本店熱賣一級(jí)根據(jù)銷量顯示菜品 用戶登錄用戶登錄/注冊(cè)一級(jí)登錄后可以保存和使用游戲中贏取的優(yōu)惠卷登錄后按鈕轉(zhuǎn)換成我的信息按鈕 我的信息我的信息二級(jí)顯示用戶的優(yōu)惠卷信息,數(shù)量等登錄后才會(huì)顯示 菜品搜索簡(jiǎn)易搜索語(yǔ)音搜索一級(jí) 根據(jù)菜品名稱模糊搜索,不想打字也可語(yǔ)音搜索 已點(diǎn)的菜已點(diǎn)的菜二級(jí) 顧客已經(jīng)提交的菜品信
35、息更多娛樂(lè)游戲一級(jí) 給你展現(xiàn)一道本店的菜,讓你來(lái)猜菜名,連續(xù)3道你就可以獲取優(yōu)惠券了每天機(jī)會(huì)只有一次哦! 獲取優(yōu)惠卷須 先登錄周邊查找一級(jí) 你可以利用百度地圖,搜索附近的一些ktv、超市、酒店、娛樂(lè)場(chǎng)所等,解決餐后安排問(wèn)題意見(jiàn)反饋二級(jí)消費(fèi)者反饋對(duì)本餐廳的服務(wù)的滿意度調(diào)查和意見(jiàn)退出程序二級(jí)退出本程序服務(wù)器登陸二級(jí)對(duì)菜品進(jìn)行增刪改查查看訂單,桌號(hào)訂單,結(jié)賬后相應(yīng)訂單記錄刪除 登陸后可操作3.4 主要開(kāi)發(fā)工具3.4.1 myeclipse對(duì)于myeclipse的解釋,首先要說(shuō)eclipse,eclipse是基于java語(yǔ)言且開(kāi)放并且可以擴(kuò)展的操作平臺(tái)。eclipse包含了一個(gè)標(biāo)準(zhǔn)的插件集,包括jav
36、a development tools 即jdt,eclipse有很多的優(yōu)點(diǎn)。eclipse首先來(lái)說(shuō)源碼是開(kāi)放的,所有的開(kāi)發(fā)人員都可以研究它,另外,eclipse是可以擴(kuò)展的,它不僅支持java的開(kāi)發(fā),還包括php、c等很多語(yǔ)言的開(kāi)發(fā)和使用,只需要下載相應(yīng)的插件即可。而且eclipse對(duì)于很多的平臺(tái)都是支持的,像linux、windows等等。對(duì)于不同的平臺(tái),eclipse提供相對(duì)應(yīng)的工具包。當(dāng)然用eclipse來(lái)開(kāi)發(fā)軟件,更高效和迅速。myeclipse作為eclipse的擴(kuò)展板,不僅繼承了eclipse的所有功能,而且在我們的軟件中,因其能很好的處理在javaee和數(shù)據(jù)庫(kù)的開(kāi)發(fā),因而我們能
37、利用javaee中jsp、javascript和數(shù)據(jù)庫(kù)來(lái)實(shí)現(xiàn)我們軟件中后臺(tái)的功能。而且myeclipse還內(nèi)嵌了tomcat,因此我們還可以直接將后臺(tái)在其上進(jìn)行發(fā)布。對(duì)于tomcat,他是一個(gè)免費(fèi)的軟件,我們可以通過(guò)其來(lái)發(fā)布自己的項(xiàng)目。對(duì)于項(xiàng)目的發(fā)布,我們可以自己手動(dòng)的發(fā)布,亦可以通過(guò)myeclipse來(lái)發(fā)布。我們比較贊同手工的項(xiàng)目發(fā)布,因?yàn)槲覀兛梢远ㄆ诘那謇韙omcat中已經(jīng)不用的項(xiàng)目,而不需要每次發(fā)布一次項(xiàng)目都要將以前的項(xiàng)目都發(fā)布了,如果不定期清理,我們每次發(fā)布項(xiàng)目所浪費(fèi)的時(shí)間會(huì)增大很多。在tomcat的目錄文件中分好幾個(gè)目錄文件,像/bin是用來(lái)存放一些腳本文件、像/config中是存放
38、一些配置文件、/logs中存放的是日志文件而我們手動(dòng)發(fā)布項(xiàng)目時(shí)候我們只需要將完整的項(xiàng)目放到/webapps目錄下面,然后啟動(dòng)tomcat,在瀏覽器中輸入相對(duì)應(yīng)的http:/localhost:8080/之后,如果出現(xiàn)tomcat的網(wǎng)頁(yè),那么就證明我們的tomcat啟動(dòng)成功,接下來(lái)在瀏覽器中輸入我們項(xiàng)目的url,即可對(duì)項(xiàng)目進(jìn)行查看。3.4.2 adtadt是eclipse中的一個(gè)插件,它可以快速讓開(kāi)發(fā)者創(chuàng)建一個(gè)android的項(xiàng)目和開(kāi)發(fā)界面,而且其包括了android基本框架的api組件。總的來(lái)說(shuō),有了adt插件,我們可以更高效的來(lái)實(shí)現(xiàn)對(duì)android項(xiàng)目的開(kāi)發(fā)。在adt中我們可以很方便的對(duì)客戶
39、端app進(jìn)行調(diào)試,對(duì)于android項(xiàng)目的調(diào)試,可以有虛擬機(jī)和真機(jī)兩種調(diào)試方法。在本系統(tǒng)中因?yàn)樾枰氖且粋€(gè)占用內(nèi)存比較大,而且屏幕分辨率比較高的程序,所以我們選用真機(jī)來(lái)調(diào)試,選用真機(jī)來(lái)調(diào)試程序,首先需要下載此手機(jī)的驅(qū)動(dòng)程序,如果用戶嫌棄麻煩,那么可以直接下載360手機(jī)安裝助手或者騰訊手機(jī)安裝助手,然后用數(shù)據(jù)先連接手機(jī),在pc端手機(jī)助手中會(huì)自動(dòng)幫助手機(jī)安裝客戶端手機(jī)助手,我們接著打開(kāi)系統(tǒng)設(shè)置-開(kāi)發(fā)者選項(xiàng)-將允許usb調(diào)試、允許模擬位置、不鎖定屏幕勾選,然后點(diǎn)擊adt中的運(yùn)行,選中自己的手機(jī),接著,本系統(tǒng)app將自動(dòng)安裝到手機(jī)中,用戶即可調(diào)試。假如說(shuō)沒(méi)有android真機(jī),在其它android項(xiàng)目
40、測(cè)試時(shí),我們可以在android virtual device manager 中查看我們所建立的虛擬機(jī),當(dāng)然我們也可以根據(jù)自己項(xiàng)目要求新建立一個(gè)虛擬機(jī),自由分配內(nèi)存大小,但是假如有真機(jī)我們還是第一個(gè)選擇真機(jī),因?yàn)樘摂M機(jī)在穩(wěn)定性和快捷性上都不如真機(jī),可能有些錯(cuò)誤我們?cè)谔摂M機(jī)上面不一定調(diào)試不出來(lái)。在android adt的調(diào)試中,我們用專門的ddms進(jìn)行調(diào)試,ddms主要分為設(shè)備面板,信息面板,信息輸出面板。在設(shè)備面板中,我們可以查看當(dāng)前在調(diào)試android項(xiàng)目所用的android機(jī)。在ddms中我們用到的最多的是信息輸出面板中的logcat,當(dāng)我們調(diào)試程序時(shí),如果我們的程序有錯(cuò)誤,我們可以在錯(cuò)
41、誤的地方拋出異常,而在logcat中有一功能saved filters,這就相當(dāng)于系統(tǒng)為我們提供了一個(gè)過(guò)濾器,我們可以在新建一個(gè)自己需要的過(guò)濾器,以此來(lái)捕獲自己項(xiàng)目中的錯(cuò)誤,這個(gè)方法在項(xiàng)目初期調(diào)試運(yùn)行期間后經(jīng)常用到,當(dāng)然強(qiáng)大的adt還為我們提供了在手機(jī)和電腦之間可以相互傳送數(shù)據(jù)的功能,在ddms中如果我們項(xiàng)目中有用到sqlite數(shù)據(jù)庫(kù),我們還可以查看這個(gè)數(shù)據(jù)庫(kù)中我們所存的數(shù)據(jù)。4. 軟件系統(tǒng)設(shè)計(jì)4.1后臺(tái)功能模塊4.1.1后臺(tái)登陸模塊管理員登陸的模塊主要通過(guò)jsp登陸頁(yè)面向一個(gè)servlet提交管理員輸入的用戶名和密碼。jsp頁(yè)面所用的技術(shù)是一個(gè)form表單,form表單中的action屬性對(duì)
42、應(yīng)相對(duì)應(yīng)要驗(yàn)證登陸信息正確與否的一個(gè)servlet,而此servlet類通過(guò)集成httpservlet類,并通過(guò)doget、dopost方法中的request請(qǐng)求獲取form表單中的管理員信息,servlet通過(guò)連接數(shù)據(jù)庫(kù)進(jìn)行驗(yàn)證,如果管理員登錄信息合法,那么servlet通過(guò)doget方法中response方法直接跳轉(zhuǎn)到后臺(tái)管理主界面。servlet處理中的主要代碼展示如下:public void doget(httpservletrequest request, httpservletresponse response)throws servletexception, ioexceptio
43、n response.setcontenttype(text/html;charset=utf-8);printwriter out = response.getwriter();httpsession session = request.getsession();string action = request.getparameter(action); system.out.println(action);managedao md = new managedaoimpl();md.deletecoupon();if(login.equals(action)string username =
44、request.getparameter(username);string password = request.getparameter(userpassword);system.out.println(username+sdfc);out.print(username); boolean flag = md.check(username, password);if(flag)httpsession username = request.getsession(true);username.setattribute(username, username);system.out.println(
45、username);response.sendredirect(manage/main.jsp);else/*out.print(登錄失敗);out.print(重新登錄);system.out.println(登錄失敗);*/ response.sendredirect(manage/index.jsp?result=fail); 管理員登陸界面效果圖如下:圖4-1 后臺(tái)登陸4.1.2后臺(tái)菜品模塊 后臺(tái)菜品的管理主要是實(shí)現(xiàn)了一個(gè)對(duì)菜品進(jìn)行分頁(yè)的顯示和對(duì)菜品進(jìn)行修改、刪除的功能。對(duì)菜品的分頁(yè)顯示的功能實(shí)現(xiàn)流程為:一個(gè)jsp頁(yè)面通過(guò)page指令中的session向一個(gè)servlet傳輸當(dāng)前頁(yè)面(
46、pagenow)和每頁(yè)顯示的菜品數(shù)(pagesize),servlet通過(guò)調(diào)用分頁(yè)顯示功能的函數(shù)將jsp頁(yè)面需要的菜品數(shù)據(jù)傳送回jsp頁(yè)面,jsp頁(yè)面通過(guò)c標(biāo)簽將數(shù)據(jù)顯示到頁(yè)面中,servlet獲取jsp請(qǐng)求數(shù)據(jù)和向jsp傳輸和數(shù)據(jù)所用到的方法和后臺(tái)管理員登陸時(shí)向servlet驗(yàn)證信息時(shí)用到的技術(shù)是一樣的,因此在此就不做解釋。而實(shí)現(xiàn)分頁(yè)顯示功能的函數(shù)部分代碼如下:public pagebean findbypagedish(int pagesize, int pagenow) / todo auto-generated method stubdbutil util = new dbutil()
47、;connection conn = util.openconnection();pagebean pb = new pagebean();pb.setpagesize(pagesize);dish dish = null;int pagenow = (pagenow-1)*pagesize;try string sql = select id,dishname,dishimage,dishprice,dishcategory,isrecommend,spell,simplespell,realsale from dish,dish_salevolume where dishid=id lim
48、it ?,? ;ps = conn.preparestatement(sql);ps.setint(1, pagenow);ps.setint(2, pagesize);rs = ps.executequery();while(rs.next() dish = new dish();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)
49、;dish.setisrecommand(rs.getboolean(6);dish.setspell(rs.getstring(7);dish.setsimplespell(rs.getstring(8);dish.setsalevolume(rs.getint(9);pb.getdish().add(dish);string sql2 = select count(distinct id) from dish;ps = conn.preparestatement(sql2);rs = ps.executequery();if(rs.next()pb.setpagesizes( rs.get
50、int(1) ; catch (sqlexception e) / todo auto-generated catch blocke.printstacktrace();finallyclose();return pb;后臺(tái)菜單管理界面效果圖如下:圖4-2 后臺(tái)菜單管理4.1.3后臺(tái)訂單模塊 后臺(tái)訂單的管理和后臺(tái)菜品的管理所用到的技術(shù)是一樣的,都是需要在jsp頁(yè)面中對(duì)數(shù)據(jù)進(jìn)行分頁(yè)顯示。二者不同在于訂單管理請(qǐng)求的數(shù)據(jù)庫(kù)表是dish,而后臺(tái)訂單的管理請(qǐng)求的數(shù)據(jù)庫(kù)是dish_order,后臺(tái)訂單管理所要實(shí)現(xiàn)的功能包括對(duì)所有訂單的查找,在顧客結(jié)賬時(shí)候?qū)?shù)據(jù)庫(kù)表dish_order中相應(yīng)的數(shù)據(jù)進(jìn)行清除。
51、后臺(tái)訂單管理效果圖如下:圖4-3 后臺(tái)訂單管理4. 2客戶端功能模塊4.2.1首頁(yè)面模塊在首頁(yè)面模塊,我們主要實(shí)現(xiàn)的是通過(guò)一個(gè)gallery畫(huà)廊視圖組件來(lái)實(shí)現(xiàn)一個(gè)跑馬燈的效果來(lái)自動(dòng)顯示存放在一個(gè)adapter對(duì)象中的一組菜品信息。當(dāng)然我們會(huì)在adapter中每一個(gè)圖片中加上一個(gè)onclicklistener,當(dāng)顧客自己通過(guò)手勢(shì)向左或者向右滑動(dòng)的時(shí)候,gallery中會(huì)更換為adapter中存儲(chǔ)的其它菜品圖片。我們通過(guò)在里面存放每日推薦的菜品,然后顧客在首次打開(kāi)客戶端的時(shí)候,看到的就是餐飲方主打的菜品。接著顧客可以通過(guò)自己的需求進(jìn)入主功能的模塊。對(duì)于客戶端首頁(yè)面效果圖如下:圖4-4 客戶端首頁(yè)面
52、4.2.2主功能模塊在功能模塊,我們實(shí)現(xiàn)的是一個(gè)類似于新聞瀏覽頁(yè)面的界面,在上邊界和左側(cè)邊界,我們選中不同的按鈕,相應(yīng)出來(lái)不同排序的界面。這種模式值得注意,一般因?yàn)槭謾C(jī)的屏幕大小,我們不會(huì)讓側(cè)邊界的功能模塊出現(xiàn),因?yàn)檫@樣留給顯示信息模塊的位置就更小了,對(duì)于用戶的體驗(yàn)就更不好了。因?yàn)槲覀儽鞠到y(tǒng)的設(shè)計(jì)是考慮到是在平板等尺寸比較大的android系統(tǒng)上運(yùn)行,因此我們采用這種模式,這樣的模式對(duì)于用戶對(duì)于菜品的選擇更方便。而為了實(shí)現(xiàn)這個(gè)功能,我們就需要用到fragment,對(duì)于fragment,我們可以把它認(rèn)為是activity的一個(gè)片段,它有自己的生命周期,但是它的生命周期完全是建立在activity
53、之上,activity銷毀時(shí),在他上面的fragment也會(huì)相應(yīng)的銷毀,activity暫停的時(shí)候,相應(yīng)的fragment也會(huì)相應(yīng)的銷毀。因?yàn)閒ragment屬于activity的一個(gè)子模塊,所以二者可以進(jìn)行通信。當(dāng)然在主功能模塊的菜品信息顯示模塊中,我們用到的是baseadapter,adapterview我們可以把它當(dāng)做是一個(gè)存放列表的一個(gè)容器,他有很多的子類,如果他的子類能完成我們的功能時(shí)候,那么我們直接調(diào)用子類即可,像arrayadapter、simpleadapter、baseadapter,像第一個(gè)我們只能存放list集合的一組值性質(zhì)的數(shù)據(jù),而對(duì)于baseadapter我們可以最大限度得對(duì)各列表項(xiàng)進(jìn)行封裝,因此,我們所用的是基于對(duì)baseadapter進(jìn)行繼承而實(shí)現(xiàn)菜單的顯示。而對(duì)于菜品信息的傳送,當(dāng)然我們是像數(shù)據(jù)庫(kù)請(qǐng)求而獲取的,具體的流程是,我們像每一個(gè)按鍵設(shè)置一個(gè)監(jiān)聽(tīng)onclicklistener,當(dāng)我們點(diǎn)擊按鈕時(shí)候,客戶端通過(guò)urlconnection請(qǐng)求向服務(wù)器端進(jìn)行請(qǐng)求,而服務(wù)器端的處理客戶端請(qǐng)求的一個(gè)servlet獲取信息后,
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 物流運(yùn)輸數(shù)據(jù)庫(kù)課程設(shè)計(jì)
- 2025年度定制化家具銷售合同范本2篇
- 機(jī)器視覺(jué)課課程設(shè)計(jì)書(shū)
- 2025年度建筑設(shè)備安全施工與安裝服務(wù)協(xié)議
- 二零二五年度商業(yè)綜合體給排水專業(yè)分包合同2篇
- 2025年度知識(shí)產(chǎn)權(quán)質(zhì)押委托保證反擔(dān)保服務(wù)合同3篇
- 貪吃蛇課程設(shè)計(jì)c語(yǔ)言
- 英語(yǔ)語(yǔ)法課程設(shè)計(jì)依據(jù)
- 2025年中學(xué)校長(zhǎng)開(kāi)學(xué)典禮講話(2篇)
- 網(wǎng)上投票系統(tǒng)課程設(shè)計(jì)
- 《心肺復(fù)蘇及電除顫》課件
- 建筑材料供應(yīng)鏈管理服務(wù)合同
- 養(yǎng)殖場(chǎng)巡查制度模板
- 2023-2024學(xué)年浙江省杭州市西湖區(qū)五年級(jí)(上)期末數(shù)學(xué)試卷
- 五年級(jí)上冊(cè)數(shù)學(xué)計(jì)算題大全
- 大型焰火燃放活動(dòng)方案審批表
- 管道保溫層厚度的計(jì)算方法
- 噴嘴壓力計(jì)算表及選型
- 雙淘汰制(16隊(duì))對(duì)陣圖
- CR和AVE計(jì)算表[共8頁(yè)]
- GB∕T 14383-2021 鍛制承插焊和螺紋管件
評(píng)論
0/150
提交評(píng)論