基于Android手機的網(wǎng)上訂餐系統(tǒng)_第1頁
基于Android手機的網(wǎng)上訂餐系統(tǒng)_第2頁
基于Android手機的網(wǎng)上訂餐系統(tǒng)_第3頁
基于Android手機的網(wǎng)上訂餐系統(tǒng)_第4頁
基于Android手機的網(wǎng)上訂餐系統(tǒng)_第5頁
已閱讀5頁,還剩29頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

畢業(yè)設(shè)計(論文)題目系(部)專業(yè)班級姓名學號指導老師系主任年月日摘要隨著科技的發(fā)展,二十一世紀成為了以網(wǎng)絡(luò)化,信息化為核心的社會。網(wǎng)絡(luò)商業(yè)化也成為了時下最熱門的詞匯。隨著信息技術(shù)的不斷更新,特別是07年谷歌公司推出了Android開放源碼,讓Android操作系統(tǒng)成為了移動平臺的寵兒,本系統(tǒng)主要分析了中小型餐飲店管理與發(fā)展的現(xiàn)狀所面臨的問題,發(fā)現(xiàn)傳統(tǒng)的服務模式已經(jīng)不能適應市場發(fā)展的需求,方便、快捷、個性化的網(wǎng)上訂餐服務正在進入人們的生活。針對這類問題,結(jié)合當代科技發(fā)展的新成果,本文構(gòu)思規(guī)劃了一套最貼切的服務模式,為中小型餐飲店外送服務提供了一套系統(tǒng)。本設(shè)計是一個基于Android手機的網(wǎng)上訂餐系統(tǒng),采用C/S模式,能為客戶提供網(wǎng)上選擇瀏覽菜品介紹,點菜訂餐服務,并為管理員提供一個服務平臺實現(xiàn)用戶信息與顧客訂單的管理,從而提高了服務的質(zhì)量,本文從系統(tǒng)需求、系統(tǒng)實際、代碼實現(xiàn)幾個方面介紹了整個軟件的開發(fā)過程,這個系統(tǒng)采用JAVA、SQLServer數(shù)據(jù)庫,并利用MyEclipse、TOMCAT、AndroidSDK、ADT、AVD、DDMS等開發(fā)環(huán)境或者開發(fā)工具。關(guān)鍵詞:Android;Java;MyEclipse;SQLite;SQLServer2005目錄3391第一章引言 178091.1項目背景 1247151.2項目目的 1256421.3主要內(nèi)容 214984第二章系統(tǒng)理論與技術(shù) 362562.1Android 334852.1.1Android簡介 3111602.1.2AndroidFeatures特性 368022.1.3Android基本框架(AndroidArchitecture) 3283062.1.4Android系統(tǒng)的四大組件 4237342.2Java 4115332.3SQLServer2005和SQLite數(shù)據(jù)庫 582412.4C/S模式 515612第三章系統(tǒng)分析與設(shè)計 8235303.1功能需求 8296153.2模塊結(jié)構(gòu)與流程 9277403.2.1客戶端 9277723.2.2服務端 9299083.3數(shù)據(jù)庫設(shè)計 9112833.3.1數(shù)據(jù)庫表及其結(jié)構(gòu) 1056793.3.2數(shù)據(jù) 10261823.3.3客戶端數(shù)據(jù)庫的連接 11207173.3.4服務器數(shù)據(jù)庫的連接 12116823.4系統(tǒng)結(jié)構(gòu) 12310283.4.1部署圖 1226513.4.2類圖 13288023.5執(zhí)行概念 1320903第四章系統(tǒng)實現(xiàn) 1446404.1Android環(huán)境搭建 1422844.2客戶端 1541144.2.1系統(tǒng)登錄 15152164.2.2系統(tǒng)注冊 16114114.2.3瀏覽菜品 1777844.2.4搜索菜品 18236444.2.5訂餐 19324094.2.6結(jié)賬 21754.3服務端 2230474.3.1系統(tǒng)登錄 22313734.3.2訂單管理 23119284.3.3菜品管理 24283614.3.4會員管理 2610861第五章結(jié)束語 283913參考文獻 3013327致謝 31第一章引言1.1項目背景伴隨著我國市場經(jīng)濟的高度發(fā)展,企業(yè)越來越依賴于市場和客戶,這種依賴關(guān)系已經(jīng)開始逐步提升到關(guān)乎企業(yè)生存的高度。如何獲得更多客流量,如何通過小的代價而使商家獲得更大的知名度,這是使企業(yè)得以生存、發(fā)展、壯大的關(guān)鍵。年銷售過億的眾多電子商務案例讓人們看到了更多的商機。與應用場景相當有限的PC(個人電腦)相比,生而具備便攜屬性的手機給了電商們更大的想象空間。移動電子商務由此產(chǎn)生了。移動電子商務就是利用手機、PDA及掌上電腦等無線終端進行的B2B、B2C或C2C的電子商務。它將因特網(wǎng)、移動通信技術(shù)、短距離通信技術(shù)及其它信息處理技術(shù)完美的結(jié)合,使人們可以在任何時間、任何地點進行各種商貿(mào)活動,實現(xiàn)隨時隨地、線上線下的購物與交易、在線電子支付以及各種交易活動、商務活動、金融活動和相關(guān)的綜合服務活動等。而Android操作系統(tǒng)憑借著自己開放的平臺允許任何移動終端廠商加入到Android聯(lián)盟中,從而使得越來越多的用戶傾向于選擇操作系統(tǒng)為Android的手機品牌。選擇設(shè)計基于Android平臺的軟件,毫無疑問能覆蓋更多的群眾,餐飲業(yè)在電子商務中還處于形成的初期,傳統(tǒng)的餐飲業(yè)中,大都是以實際門面形式來進行宣傳和交流。作為網(wǎng)絡(luò)普及化的社會,這還缺少了一些更為現(xiàn)代化的元素。餐飲業(yè)是一個個性化、多樣化的服務業(yè),而電子商務則最能體現(xiàn)個性化、多樣化服務的方式。而且現(xiàn)在大部分電子商務都體現(xiàn)為向大企業(yè)服務,結(jié)合餐飲這個行業(yè)的特點,最終還發(fā)展為同小區(qū)小店服務的模式。以最貼切的方式,最靈便的服務進入個個網(wǎng)絡(luò)社區(qū),進入人們的生活。1.2項目目的如今宅男宅女日益增加,很多餐飲店都提供外賣服務,傳統(tǒng)的外賣服務需要客戶給商家打電話并報出地址,商家那邊也需要記錄下客戶的信息,才能將外賣準確的送達,但在這之間都是人在操作,難免會出現(xiàn)偏差和遺漏為客戶或者商家?guī)頁p失。如今3G網(wǎng)絡(luò)覆蓋范圍越來越廣,Android手機也占領(lǐng)了手機行業(yè)的大頭,那么我們可以考慮做一個Android的應用來方便商家和客戶,讓出錯率達到最低。用戶要點餐的時候只需手機上網(wǎng)點一下菜單就能吃到自己喜歡吃的菜品,這里面蘊含了很大的商機,完全能夠有效的提高商家的營業(yè)額,基于以上因素,所以提出了這樣一個基于Android的網(wǎng)上訂餐系統(tǒng)。本項目的目的是開發(fā)一個可以讓用戶在手機上操作的客戶端,然后與服務器連接進行數(shù)據(jù)交互,來實現(xiàn)網(wǎng)上訂餐的流程??蛻舳诵枰獙崿F(xiàn)瀏覽菜品,點菜,下訂單,搜索等功能。服務器端需實現(xiàn)添加、刪除、修改菜品、對訂單的處理,以及對會員的管理等功能。本項目是一款基于Android手機平臺的訂餐系統(tǒng),使擁有Android手機的用戶生活更加方便快捷,使得手機顯得更生動靈活化,與人們更為接近,讓手機主人隨時隨地都能吃到自己喜歡的菜品。使人們的生活更加多樣化。也使設(shè)計者更加熟練Android的技術(shù)和其他在市場上的特點。1.3主要內(nèi)容通過對實際情況的調(diào)研,本系統(tǒng)大致可分為三個部分,即手機客戶端、電腦服務器端和圖形化界面工具。系統(tǒng)采用HTTP協(xié)議來進行數(shù)據(jù)傳輸。采用C/S結(jié)構(gòu),客戶端為基于Android操作系統(tǒng)平臺的智能手機,主要的業(yè)務邏輯則服務器端來實現(xiàn),數(shù)據(jù)存儲在數(shù)據(jù)庫服務器。客戶端主要實現(xiàn)位置服務,商品展示,會員注冊及登錄,購物車,商品搜索和個人信息等功能,服務器端主要是完成數(shù)據(jù)交互和數(shù)據(jù)邏輯處理,而圖形界面化工具則是負責商品、訂單等的增刪改查。為了一步步實現(xiàn)確定的功能,本論文主要內(nèi)容安排如下:第一章:引言(介紹課題研究的背景和目的)第二章:系統(tǒng)理論與技術(shù)(在本項目中設(shè)計到的技術(shù)簡介)第三章:系統(tǒng)分析與設(shè)計(需求分析,數(shù)據(jù)庫的分析與設(shè)計以及系統(tǒng)結(jié)構(gòu)的設(shè)計)第四章:系統(tǒng)實現(xiàn)(根據(jù)需求分析來實現(xiàn)系統(tǒng)的各個模塊功能,使客戶端與服務器,服務器與數(shù)據(jù)庫能正常數(shù)據(jù)交互。這部分主要搭建開發(fā)環(huán)境,編寫代碼,測試,運行)第五章:結(jié)束語(對本項目做一個項目總結(jié))

第二章系統(tǒng)理論與技術(shù)2.1Android2.1.1Android簡介Android一詞的本義指“機器人”,同時也是Google于2007年11月5日宣布的基于Linux平臺的開源手機操作系統(tǒng)的名稱,該平臺由操作系統(tǒng)、中間件、用戶界面和應用軟件組成,號稱是首個為移動終端打造的真正開放和完整的移動軟件。Android是基于Linux內(nèi)核的軟件平臺和操作系統(tǒng),早期由Google開發(fā)(在華注冊商標名為“安致”),后由開放手機聯(lián)盟(OpenHandsetAlliance)開發(fā)。它采用了軟件堆層(softwarestack,又名以軟件疊層)的架構(gòu),主要分為三部分。低層以Linux內(nèi)核工作為基礎(chǔ),只提供基本功能;其他的應用軟件則由各公司自行開發(fā),以Java作為編寫程序的一部分。另外,為了推廣此技術(shù),Google和其它幾十個手機公司建立了開放手機聯(lián)盟。Android在未公開之前常被傳聞為Google電話或gPhone。大多傳聞認為Google開發(fā)的是自己的手機電話產(chǎn)品,而不是一套軟件平臺。到了2010年1月,Google開始發(fā)表自家品牌手機電話的NexusOne,目前最新SDK版本為Android4.0.3。2.1.2AndroidFeatures特性Android系統(tǒng)有如下的幾大特性[1]:·應用程序框架支持組件的重用與替換

·Dalvik虛擬機專門為移動設(shè)備做了優(yōu)化

·內(nèi)部集成瀏覽器該瀏覽器基于開源的WebKit引擎

·優(yōu)化的圖形庫包括2D和3D圖形庫,3D圖形庫基于OpenGLES

·SQLite用作結(jié)構(gòu)化的數(shù)據(jù)存儲

·多媒體支持包括常見的音頻、視頻和靜態(tài)印象文件格式(如MPEG4,MP3,AAC,AMR,JPG,PNG)

·GSM電話(依賴于硬件)

·藍牙Bluetooth,EDGE,3G,andWiFi(依賴于硬件)

·照相機,GPS,指南針,和加速度計(依賴于硬件)

·豐富的開發(fā)環(huán)境包括設(shè)備模擬器,調(diào)試工具,內(nèi)存及性能分析圖表,和Eclipse集成開發(fā)環(huán)境插件2.1.3Android基本框架(AndroidArchitecture)圖2.1AndroidArchitecture2.1.4Android系統(tǒng)的四大組件在Android系統(tǒng)中,為我們提供了四大基本組件,每個組件是一個視圖,但是有些是可見的,有些是不可見的視圖,像Activity,ContentProvider是可見的視圖,Service和BroadcastReceiver是不可見的,它們只在系統(tǒng)的后臺運行。下面分別介紹四大組件[3]:(1)Activity簡介在Android系統(tǒng)中Activity提供可視化的用戶界面,一個Android應用通常由多個Activity組成。多個Activity組成了Activity棧(Stack),當前活動的Activity處于棧頂。Activity有自己的生命周期,由Android系統(tǒng)來控制。(2)Service簡介顧名思義Service就是運行在后臺的一種服務程序,一般很少和用戶交互,因此沒有可視化界面定義一個Service類比較簡單,只要繼承Service類,實現(xiàn)其生命周期中的方法就可以了。一個定義好的Service必須在AndroidManifest.xml配置文件注冊,通過<service>元素聲明才能使用.Service有自己的生命周期,我們可以調(diào)用startService()啟動一個Service或者bindService()方法來綁定一個存在的Service(3)BroadcastReceiver簡介BroadcastReceiver顧名思義廣播接收器,它和事件處理機制類似,只不過事件處理機制是程序組件級別的(例如,某個按鈕的單擊事件),而廣播事件處理機制是系統(tǒng)級別的。到目前為止我們可以使用Intent來啟動一個程序組件,我們還可以通過使用sendBroadcast()方法來發(fā)起一個系統(tǒng)級別的事件廣播來傳遞消息。我們可以在你的應用程序中實現(xiàn)BroadcastReceiver來監(jiān)聽和響應這些廣播的Intent(4)ContentProvider簡介ContentProvider用來保存和檢索數(shù)據(jù),并且使應用程序之間相互訪問數(shù)據(jù)成為可能。它是跨應用程序共享數(shù)據(jù)的唯一方法。Android為常用的數(shù)據(jù)類型(如:音視頻、圖片和聯(lián)系方式等)提供了大量的ContentProvider。它們被定義在vider包下面。通過這樣定義好的ContentProvider我們可以方便的進行數(shù)據(jù)操作。當然我們必須擁有適當?shù)臋?quán)限。我們也可以自己來定ContentProvider共享我們的數(shù)據(jù),方便用戶的訪問。2.2JavaJava是一種可以撰寫跨平臺應用軟件的面向?qū)ο蟮某绦蛟O(shè)計語言,是由SunMicrosystems公司于1995年5月推出的Java程序設(shè)計語言和Java平臺(即JavaSE,JavaEE,JavaME)的總稱。Java技術(shù)具有卓越的通用性、高效性、平臺移植性和安全性,廣泛應用于個人PC、數(shù)據(jù)中心、游戲控制臺、科學超級計算機、移動電話和互聯(lián)網(wǎng),同時擁有全球最大的開發(fā)者專業(yè)社群。在全球云計算和移動互聯(lián)網(wǎng)的產(chǎn)業(yè)環(huán)境下,Java更具備了顯著優(yōu)勢和廣闊前景。Eclipse是一個開放源代碼的、基于Java的可擴展開發(fā)平臺。就其本身而言,它只是一個框架和一組服務,用于通過插件組件構(gòu)建開發(fā)環(huán)境。幸運的是,Eclipse附帶了一個標準的插件集,包括Java開發(fā)工具(JavaDevelopmentKit,JDK)。雖然大多數(shù)用戶很樂于將Eclipse當作Java集成開發(fā)環(huán)境(IDE)來使用,但Eclipse的目標卻不僅限于此。Eclipse還包括插件開發(fā)環(huán)境(Plug-inDevelopmentEnvironment,PDE),這個組件主要針對希望擴展Eclipse的軟件開發(fā)人員,因為它允許他們構(gòu)建與Eclipse環(huán)境無縫集成的工具。由于Eclipse中的每樣東西都是插件,對于給Eclipse提供插件,以及給用戶提供一致和統(tǒng)一的集成開發(fā)環(huán)境而言,所有工具開發(fā)人員都具有同等的發(fā)揮場所。這種平等和一致性并不僅限于Java開發(fā)工具。盡管Eclipse是使用Java語言開發(fā)的,但它的用途并不限于Java語言;例如,支持諸如C/C++和COBOL等編程語言的插件已經(jīng)可用,或預計將會推出。Eclipse框架還可用來作為與軟件開發(fā)無關(guān)的其他應用程序類型的基礎(chǔ),比如內(nèi)容管理系統(tǒng)?;贓clipse的應用程序的一個突出例子是IBMRationalSoftwareArchitect,它構(gòu)成了IBMJava開發(fā)工具系列的基礎(chǔ)[7]。2.3SQLServer2005和SQLite數(shù)據(jù)庫SQLServer是一個關(guān)系數(shù)據(jù)庫管理系統(tǒng)。它最初是由MicrosoftSybase和Ashton-Tate三家公司共同開發(fā)的,于1988年推出了第一個OS/2版本。在WindowsNT推出后,Microsoft與Sybase在SQLServer的開發(fā)上就分道揚鑣了,Microsoft將SQLServer移植到WindowsNT系統(tǒng)上,專注于開發(fā)推廣SQLServer的WindowsNT版本。Sybase則較專注于SQLServer在UNIX操作系統(tǒng)上的應SQLServer安裝界面用。SQLite,是一款輕型的數(shù)據(jù)庫,是遵守ACID的關(guān)聯(lián)式數(shù)據(jù)庫管理系統(tǒng),它的設(shè)計目標是嵌入式的,而且目前已經(jīng)在很多嵌入式產(chǎn)品中使用了它,它占用資源非常的低,在嵌入式設(shè)備中,可能只需要幾百K的內(nèi)存就夠了。它能夠支持Windows/Linux/Unix等等主流的操作系統(tǒng),同時能夠跟很多程序語言相結(jié)合,比如Tcl、C#、PHP、Java等,還有ODBC接口,同樣比起Mysql、PostgreSQL這兩款開源世界著名的數(shù)據(jù)庫管理系統(tǒng)來講,它的處理速度比他們都快。SQLite第一個Alpha版本誕生于2000年5月.至今已經(jīng)有10個年頭,SQLite也迎來了一個版本SQLite3已經(jīng)發(fā)布。2.4C/S模式在網(wǎng)絡(luò)連接模式中,除對等網(wǎng)外,還有另一種形式的網(wǎng)絡(luò),即客戶機/服務器網(wǎng),Client/Server。在客戶機/服務器網(wǎng)絡(luò)中,服務器是網(wǎng)絡(luò)的核心,而客戶機是網(wǎng)絡(luò)的基礎(chǔ),客戶機依靠服務器獲得所需要的網(wǎng)絡(luò)資源,而服務器為客戶機提供網(wǎng)絡(luò)必須的資源。這里客戶和服務器都是指通信中所涉及的兩個應用進程(軟件)。使用計算機的人是計算機的“用戶”(user)而不是“客戶”(client)。但在許多國外文獻中,也經(jīng)常把運行客戶程序的機器稱為client(這種情況下也可把client譯為“客戶機”),把運行服務器程序的機器稱為server。所以有時要根據(jù)上下文判斷client與server是指軟件還是硬件。它是軟件系統(tǒng)體系結(jié)構(gòu),通過它可以充分利用兩端硬件環(huán)境的優(yōu)勢,將任務合理分配到Client端和Server端來實現(xiàn),降低了系統(tǒng)的通訊開銷。目前大多數(shù)應用軟件系統(tǒng)都是Client/Server形式的兩層結(jié)構(gòu),由于現(xiàn)在的軟件應用系統(tǒng)正在向分布式的Web應用發(fā)展,Web和Client/Server應用都可以進行同樣的業(yè)務處理,應用不同的模塊共享邏輯組件;因此,內(nèi)部的和外部的用戶都可以訪問新的和現(xiàn)有的應用系統(tǒng),通過現(xiàn)有應用系統(tǒng)中的邏輯可以擴展出新的應用系統(tǒng)。這也就是目前應用系統(tǒng)的發(fā)展方向。C/S架構(gòu)軟件的優(yōu)勢和劣勢[9]:應用服務器運行數(shù)據(jù)負荷較輕。最簡單的C/S體系結(jié)構(gòu)的數(shù)據(jù)庫應用由兩部分組成,即客戶應用程序和數(shù)據(jù)庫服務器程序。二者可分別稱為前臺程序與后臺程序。運行數(shù)據(jù)庫服務器程序的機器,也稱為應用服務器。一旦服務器程序被啟動,就隨時等待響應客戶程序發(fā)來的請求;客戶應用程序運行在用戶自己的電腦上,對應于數(shù)據(jù)庫服務器,可稱為客戶電腦,當需要對數(shù)據(jù)庫中的數(shù)據(jù)進行任何操作時,客戶程序就自動地尋找服務器程序,并向其發(fā)出請求,服務器程序根據(jù)預定的規(guī)則作出應答,送回結(jié)果,應用服務器運行數(shù)據(jù)負荷較輕。數(shù)據(jù)的儲存管理功能較為透明。在數(shù)據(jù)庫應用中,數(shù)據(jù)的儲存管理功能,是由服務器程序和客戶應用程序分別獨立進行的,前臺應用可以違反的規(guī)則,并且通常把那些不同的(不管是已知還是未知的)運行數(shù)據(jù),在服務器程序中不集中實現(xiàn),例如訪問者的權(quán)限,編號可以重復、必須有客戶才能建立定單這樣的規(guī)則。所有這些,對于工作在前臺程序上的最終用戶,是“透明”的,他們無須過問(通常也無法干涉)背后的過程,就可以完成自己的一切工作。在客戶服務器架構(gòu)的應用中,前臺程序不是非?!笆菪 ?,麻煩的事情都交給了服務器和網(wǎng)絡(luò)。在C/S體系的下,數(shù)據(jù)庫不能真正成為公共、專業(yè)化的倉庫,它受到獨立的專門管理。C/S架構(gòu)的劣勢是高昂的維護成本且投資大。首先,采用C/S架構(gòu),要選擇適當?shù)臄?shù)據(jù)庫平臺來實現(xiàn)數(shù)據(jù)庫數(shù)據(jù)的真正“統(tǒng)一”,使分布于兩地的數(shù)據(jù)同步完全交由數(shù)據(jù)庫系統(tǒng)去管理,但邏輯上兩地的操作者要直接訪問同一個數(shù)據(jù)庫才能有效實現(xiàn),有這樣一些問題,如果需要建立“實時”的數(shù)據(jù)同步,就必須在兩地間建立實時的通訊連接,保持兩地的數(shù)據(jù)庫服務器在線運行,網(wǎng)絡(luò)管理工作人員既要對服務器維護管理,又要對客戶端維護和管理,這需要高昂的投資和復雜的技術(shù)支持,維護成本很高,維護任務量大。(4)傳統(tǒng)的C/S結(jié)構(gòu)的軟件需要針對不同的操作系統(tǒng)系統(tǒng)開發(fā)不同版本的軟件,由于產(chǎn)品的更新?lián)Q代十分快,代價高和低效率已經(jīng)不適應工作需要。在JAVA這樣的跨平臺語言出現(xiàn)之后,B/S架構(gòu)更是猛烈沖擊C/S,并對其形成威脅和挑戰(zhàn)。

第三章系統(tǒng)分析與設(shè)計3.1功能需求隨著3G時代的到來,手機應用越來越普遍,加之國民手機持有量更是爆炸式增長。為了方便Android手機用戶能隨時隨地點到自己喜歡的菜品,提出一種操作簡便,功能齊全,占用資源少,能為用戶節(jié)約流量的的網(wǎng)上訂餐應用,于是提出本系統(tǒng)的主要功能。需求界面如下:客戶端:1、登陸、注冊界面2、顯示菜品界面3、搜索菜品界面(按菜品名稱、種類、店鋪名稱進行搜索)4、購物車界面5、個人信息界面6、菜品詳情界面服務器端:登陸界面訂單管理、菜品管理、會員管理界面需求實現(xiàn)功能如下:客戶端:1、實現(xiàn)客戶端與服務器之間的連接2、實現(xiàn)登陸、注冊功能3、實現(xiàn)登陸后能瀏覽到服務器數(shù)據(jù),并對數(shù)據(jù)進行一系列的操作4、能把菜品加入到購物車,并結(jié)算生成訂單5、把生成的訂單信息傳回服務器端服務器端:1、實現(xiàn)管理員登陸2、實現(xiàn)添加、刪除、修改菜品信息3、實現(xiàn)對客戶端傳過來的訂單進行處理4、實現(xiàn)添加、刪除會員列表功能模塊圖如3.1所示:圖3.1系統(tǒng)功能模塊圖3.2模塊結(jié)構(gòu)與流程3.2.1客戶端表3.1客戶端概要設(shè)計表客戶端模塊簡要說明登陸模塊在連接上服務器的前提下登陸成功注冊模塊在連接上服務器的前提下注冊成功瀏覽菜品模塊從服務器中讀取數(shù)據(jù),并把數(shù)據(jù)封裝顯示在菜品列表中菜品詳情模塊點擊菜品進入到菜品的詳細介紹和訂餐服務頁面搜索模塊按照用戶選擇的條件從手機數(shù)據(jù)庫中搜索菜品購物車模塊當用戶定了菜品之后,所有訂單信息都顯示在這個模塊中,并且點擊結(jié)算按鈕生成訂單傳送回服務器個人信息模塊顯示用戶的個人信息圖3.2客戶端流程圖3.2.2服務端表3.2服務器端概要設(shè)計表服務器端模塊簡要說明登陸模塊提供管理員登陸訂單信息模塊顯示現(xiàn)有的訂單信息并給與處理按鈕菜品添加刪除修改模塊對要顯示在客戶端的菜品進行添加刪除修改操作會員管理模塊對會員進行添加和刪除以及查看信息圖3.3服務器流程圖3.3數(shù)據(jù)庫設(shè)計數(shù)據(jù)庫結(jié)構(gòu)組織和數(shù)據(jù)庫文件設(shè)計要根據(jù)不同用途,使用要求等,來決定數(shù)據(jù)庫的整體組織形式等一系列問題。數(shù)據(jù)庫,顧名思義,是存放數(shù)據(jù)的倉庫,只不過這個倉庫是在計算機存儲設(shè)備上的,而且數(shù)據(jù)是按一定格式存放。數(shù)據(jù)庫中的數(shù)據(jù)按一定模型組織描述和存儲。具有較小的重復度,較高的數(shù)據(jù)獨立性和易擴張性,并且可以被一定范圍內(nèi)的各種用戶共享。在涉及數(shù)據(jù)庫的軟件開發(fā)中,需要根據(jù)有待解決的問題性質(zhì),規(guī)模,以及所采用的前端程序創(chuàng)建工具等。做出合適的數(shù)據(jù)庫類型選擇。在該項目中建立了兩個數(shù)據(jù)庫,客戶端和服務器各一個,用這種設(shè)計方式主要是為用戶減少許多不必要的流量浪費,如果只創(chuàng)建一個服務器數(shù)據(jù)庫的話,用戶每次連接上服務器時都會將服務器的所有資源全部接受一遍,但是事實上該項目并不需要實時的更新數(shù)據(jù),因為有些菜品的信息可能很久都不會有變動,所以考慮在客戶端也創(chuàng)建一個數(shù)據(jù)庫把服務器端發(fā)送過來的數(shù)據(jù)存儲在本地數(shù)據(jù)庫中,當服務器有更新時只需要傳遞改變的數(shù)據(jù)就可以實現(xiàn)更新。3.3.1數(shù)據(jù)庫表及其結(jié)構(gòu)服務器數(shù)據(jù)庫(SQLServer2005)Admin表:管理員編號,用戶名,密碼,權(quán)限。BaseProducts表:菜品編號,菜品名字,菜品種類,菜品價格,菜品圖片。DetailOrders表:訂單編號,詳細編號,菜品編號,數(shù)量。DetailProducts表:編號,菜品編號,菜品價格,菜品狀態(tài),折扣,菜品描述。Member表:會員編號,會員名字,會員密碼,會員性別,會員電話,會員地址,會員積分,會員金錢。Orders表:訂單編號,訂單生成時間,會員編號,訂單狀態(tài)。客戶端數(shù)據(jù)庫(SQLite)Shoppingrecord表:訂單編號,詳細編號,菜品編號,數(shù)量。Showedgoods表:菜品編號,菜品名字,菜品種類,菜品價格,菜品圖片。3.3.2數(shù)據(jù)系統(tǒng)E-R(實體-聯(lián)系)圖用來描述數(shù)據(jù)關(guān)系模型,可以用來建立數(shù)據(jù)模型。本系統(tǒng)共有8個實體,其關(guān)系如圖3.4所示。圖3.4全局E-R圖下面列舉主要實體:管理員實體(Admin)包括管理員編號、管理員姓名(登錄姓名)、登錄密碼、管理員等級等屬性,如圖3.5所示。圖3.5管理員實體屬性圖會員實體(Member)包括會員編號、會員姓名(登錄帳號)、登錄密碼、管理員性別,聯(lián)系電話,聯(lián)系地址,會員積分等屬性。如圖3.6所示。圖3.6會員實體屬性圖3.3.3客戶端數(shù)據(jù)庫的連接Andorid數(shù)據(jù)庫存儲的位置在data/data/<項目文件夾>/databases/目錄下,Android是利用ContentProvider作為內(nèi)容提供商,SQLiteOpenHelper數(shù)據(jù)庫幫助類來進行對數(shù)據(jù)庫的創(chuàng)建和操作。程序中數(shù)據(jù)庫類為MyopenHelperextendsSQLiteOpenHelper(繼承關(guān)系),在此列出連接數(shù)據(jù)庫的代碼:publicclassMyopenHelperextendsSQLiteOpenHelper{ //生成表shoppingrecod,用以記錄購買過的商品 privatestaticfinalStringRECORD_TABLE="createtableshoppingrecord(oidintegerprimarykey,doidinteger,bidinteger,donuminteger)"; //生成表showedgoods,用以存儲上次購買過的商品 privatestaticfinalStringGOODS_TABLE="createtableshowedgoods(bidintegerprimarykey,bnamevarchar,bstylevarchar,bpricefloat,bpicturevarchar)"; //創(chuàng)建表 publicvoidonCreate(SQLiteDatabasedb){ db.execSQL(RECORD_TABLE); db.execSQL(GOODS_TABLE); } //更新表 publicvoidonUpgrade(SQLiteDatabasedb,intoldVersion,intnewVersion){ db.execSQL("droptableifexistsshoppingrecord"); db.execSQL("droptableifexistsshowedgoods"); db.execSQL(RECORD_TABLE); db.execSQL(GOODS_TABLE);}3.3.4服務器數(shù)據(jù)庫的連接服務器端采用SQLServer2005來創(chuàng)建數(shù)據(jù)庫,首先得導入sql2000_2005jdbc.jar庫文件,然后在數(shù)據(jù)庫的配置工具中開啟SQLServer服務,接下來就要在java代碼中實現(xiàn)連接數(shù)據(jù)庫的功能了,代碼如下: publicstaticConnectiongetCon(){ Connectioncon=null; if(!isInitialized){ returncon; } try{ Class.forName(prop.getProperty("className")); //連接數(shù)據(jù)庫語句,urluserpwd都在配置文件sql.ini中 con=DriverManager.getConnection(prop.getProperty("url"),prop .getProperty("user"),prop.getProperty("pwd")); }catch(Exceptione){ e.printStackTrace(); } returncon; }Sql.ini配置文件內(nèi)容:className=com.microsoft.sqlserver.jdbc.SQLServerDriverurl=jdbc:sqlserver://localhost:1433;databaseName=Dinneruser=sapwd=1233.4系統(tǒng)結(jié)構(gòu)本系統(tǒng)采用HTTP協(xié)議來進行數(shù)據(jù)傳輸。采用C/S結(jié)構(gòu),客戶端為基于Android操作系統(tǒng)平臺的智能手機,主要的業(yè)務邏輯則服務器端來實現(xiàn),數(shù)據(jù)存儲在數(shù)據(jù)庫服務器。3.4.1部署圖系統(tǒng)部署如圖3.7所示,客戶端采用基于Android操作系統(tǒng)平臺的智能手機,服務器端包括服務器、圖形界面化工具和數(shù)據(jù)庫服務器,主要處理業(yè)務邏輯和對數(shù)據(jù)的增刪改查。圖3.7系統(tǒng)部署圖3.4.2類圖根據(jù)已建立的用例圖確定要建立的對象類并確定屬性和操作。通過檢查類的定義,分析問題的需求和運用該領(lǐng)域知識來確定類的屬性。根據(jù)系統(tǒng)功能需求和系統(tǒng)設(shè)計需要確定類的操作,本系統(tǒng)有6個實體類,分別為管理員實體類(Admin)、會員實體類(Member)、訂單實體類(Orders)、訂單詳情實體類(DetailOrders)、商品實體類(Products)、商品詳情實體類(DetailProducts),如圖3.8所示。圖3.8實體類3.5執(zhí)行概念 本系統(tǒng)時序圖如圖3.9所示。圖3.9系統(tǒng)時序圖1、客戶端發(fā)送請求給服務器,服務器的后臺Servlet負責處理數(shù)據(jù)。2、服務器業(yè)務邏輯處理會調(diào)用DAO,進行數(shù)據(jù)處理。3、調(diào)用實體類,把數(shù)據(jù)保存到數(shù)據(jù)庫DB中。4、DAO返回結(jié)果給Servlet。5、Servlet把結(jié)果返回給客戶端。

第四章系統(tǒng)實現(xiàn)4.1Android環(huán)境搭建任何事物要運行,都要有它的環(huán)境,Android也有它的環(huán)境才能夠運行,下面介紹Android的開發(fā)環(huán)境配置.搭建開發(fā)環(huán)境需要的軟件:1、操作系統(tǒng):Windows7或Linux2、軟件包:AndroidSDK(SoftwareDevelopmentkitJavaDevelopmentkit)、ADT(AndroidDeveloopmentTool)3、IDE環(huán)境:EclipseIDE+ADTEclipse3.3以上4、JDK:JavaRuntimeEnvironment虛擬機、(JDK)JavaDevelopmentkit安裝步驟如下:第一步:安裝Java虛擬機sun-java6-jdk版本第二步:安裝Eclipse3.5工具官網(wǎng)/downloads/選擇版本(圖4.1):進行安裝圖4.1eclipse下載第三步:安裝AndroidSDK:首先要下載SDK,可以在這個網(wǎng)址下載Http:///sdk,如圖4.2,選擇相應的系統(tǒng)進行安裝圖4.2SDK下載第四步:安裝AndroidADT插件運行Eclipse,選擇help->installnewsoftware選擇add,將會彈出一個框,如圖4.3所示圖4.3ADT的安裝點擊OK,選擇要安裝的軟件,占next,然后選擇接受協(xié)議,直到安裝成功,重啟Eclipse軟件,設(shè)置AndroidSDKHome,Window->refrence圖4.4設(shè)置SDK路徑在SDKlocation中輸入SDKTools路徑:D:\android\android-sdk點擊OK這樣Android環(huán)境就已經(jīng)搭建成功了。4.2客戶端4.2.1系統(tǒng)登錄登陸模塊界面如圖4.5所示,顯示了一個登陸窗口,在其中加入許多控件,如文本輸入框(EditText),文本顯示框(TextView),單選按鈕(RaidoButton),復選按鈕(CheckBox)等,然后用一系列的布局將其有條理的放在這個窗口中。圖4.5登陸窗口當用戶點擊游客登陸時,將不會跟服務器的數(shù)據(jù)庫進行匹配,直接進入主界面,代碼如下:if(flag){//當用戶選擇游客登陸時點擊登陸按鈕直接進入主界面Intentintent=newIntent(LoginActivity.this,ProductListActivity.class);startActivity(intent);Intentintent1=newIntent(LoginActivity.this,UpdateService.class);startService(intent1);}當用戶點擊會員登陸時,會把用戶輸入的數(shù)據(jù)跟服務器端數(shù)據(jù)庫中的數(shù)據(jù)進行匹配,如果相同則登陸成功,否則彈出登陸失敗的信息。如果用戶點擊了記住密碼選項,則把用戶輸入的用戶名和密碼都保存到SharedPreferences中。代碼如下:Stringname=etUsername.getText().toString().trim();Stringpassword=etPassword.getText().toString().trim();//包裝用戶發(fā)送的用戶數(shù)據(jù)Membermember=newMember(name,password);protocolHelper.setObject(member);protocolHelper.setRequest(ProtocolHelper.REGISTER,ProtocolHelper.QUERY,member);result=protocolHelper.sendRequestVO();//向服務端發(fā)送數(shù)據(jù)if(result.size()>0){ response=result.get(0); }//根據(jù)服務端的相應信息進行相應判斷 if(response!=null){//將用戶名存在sharedPreferences Editornamedata=sharedPreferences.edit(); namedata.putString("name",etUsername.getText().toString().trim()); mit(); //將密碼存在sharedPreferences Editorpassworddata=sharedPreferences.edit(); passworddata.putString("password",etPassword.getText().toString().trim()); mit(); //登錄成功,進入主界面 else//登錄失敗,彈出錯誤信息當用戶點擊注冊按鈕時,通過Android的Intent機制,就從登陸界面跳轉(zhuǎn)到注冊界面,接下來實現(xiàn)系統(tǒng)注冊的功能。4.2.2系統(tǒng)注冊注冊界面如圖4.6,跟登陸界面一下,它也有一個屬于它的布局文件來擺放這些控件,在此模塊中必須要輸入正確這些注冊信息,才能正常的進行注冊。圖4.6注冊界面當用戶點擊取消按鈕時,界面會跳轉(zhuǎn)回到登陸界面,當用戶點擊注冊按鈕時會跟服務器端的數(shù)據(jù)庫進行連接,把用戶所填的信息拼接發(fā)給服務器,服務器處理過后將數(shù)據(jù)插入到數(shù)據(jù)庫中對應的表中??蛻舳藢崿F(xiàn)注冊代碼如下:bRegister.setOnClickListener(newOnClickListener(){ publicvoidonClick(Viewv){//獲取用戶輸入數(shù)據(jù) if(name.equals("")||password.equals("")||repassword.equals("")){//如果用戶輸入用戶名或密碼為空,則給出提示,用戶名和密碼不能為空 }else{//如果不為空則先放入HashMap中,再做密碼輸入是否一致的判斷 //判斷輸入的密碼是否一致 if(infoHashMap.get("password").equals( infoHashMap.get("repassword"))){ //拼湊數(shù)據(jù) data="name"+infoHashMap.get("username")+";" +"password"+infoHashMap.get("password")+";" +"sex"+infoHashMap.get("sex")+";"+"num" +infoHashMap.get("number")+";"+"address" +infoHashMap.get("address"); Membermember=newMember(name,password,infoHashMap.get("sex"),number,address); protocolHelper.setObject(member); //準備請求數(shù)據(jù) protocolHelper.setRequest(ProtocolHelper.REGISTER, ProtocolHelper.INSERT,data); //向服務端發(fā)送請求 response=protocolHelper.sendRequest(); //判斷響應信息,根據(jù)信息觸發(fā)不同的事件 if(response.equals("success")){ //跳轉(zhuǎn)到主界面 }else//以對話框的形式給出錯誤信息 }else//以對話框的形式給出錯誤信息:密碼必須一致 4.2.3瀏覽菜品用戶登陸成功或者選擇游客登陸成功后,會直接進入到主界面,如圖4.7,主界面的布局采用的是TabHost分頁式布局,每一個Tab都對應一個Activity,通過addTab這個方法來添加Tab,這個控件讓Android手機多個Activity共享一個界面,而且操作方便,簡單,布局好看。圖4.7主界面當用戶選擇菜單選項時,在其下面將列出從服務器端發(fā)送過來菜品簡要信息數(shù)據(jù),客戶端想要看到這些數(shù)據(jù)必須對它進行一系列的處理,在此,本模塊采用了ListView來顯示菜品信息,ListView是以列表的形式來展示具體內(nèi)容,并且能夠根據(jù)數(shù)據(jù)的長度自適應的顯示,要想ListView顯示數(shù)據(jù)必須要為其添加適配器(Adapter),適配器分為很多種,有ArrayAdapter、SimpleAdapter、BaseAdapter等等,由于在該ListView中顯示的數(shù)據(jù)比較多,而且還有圖片信息等,所以在此采用BaseAdapter來構(gòu)建適配器。構(gòu)建BaseAdapter核心代碼://菜單模塊的自定義適配器。classProductAdapterextendsBaseAdapter{ publicViewgetView(intposition,ViewconvertView,ViewGroupparent){ ViewHolderviewHolder=null;//如果convertView為空則為其創(chuàng)建一個View if(convertView==null){ LayoutInflaterinflater=LayoutInflater.from(ctx); viewHolder=newViewHolder(); convertView=inflater.inflate(R.layout.listitem,null); //獲得listitem布局中的控件并添加到View上 convertView.setTag(viewHolder); }//如果convertView不為空那么直接為其灌入數(shù)據(jù) else{ viewHolder=(ViewHolder)convertView.getTag(); } //獲得所有的數(shù)據(jù)并灌入convertView中 returnconvertView;}}向服務器獲得菜品信息的數(shù)據(jù)代碼:publicvoidproRequest(){helper.setRequest(ProtocolHelper.GOODSLIST,ProtocolHelper.QUERY,""); BaseProductsbp=newBaseProducts(); bp.setBid(1); helper.setObject(bp); List<Object>result=helper.sendRequestVO(); if(result==null){ }}4.2.4搜索菜品圖4.8搜索界面如果菜品數(shù)量過多,用戶將會很難找到自己心儀的菜品,在此,本項目為了方便用戶選擇特定的菜品,設(shè)計了一個搜索菜品的功能,通過搜索界面,用戶可以通過商品名稱、商家名稱、商品價格三個搜索條件來搜索對自己胃口的菜品,如圖4.8,該功能暫時僅支持單條件搜索,在此列出按商品名稱搜索的核心代碼,另外兩種搜索代碼跟此差不多。//通過商品名稱模糊查詢。 publicvoidgetProductByName(Stringname){ ListproductListByname=newArrayList(); Cursorcursor=dbutil.querygoodsByName(name); intcount=cursor.getCount(); cursor.moveToFirst(); if(count>0){//對菜品數(shù)據(jù)遍歷查找 for(inti=0;i<count;i++){ HashMapmap=newHashMap(); map.put("bid",cursor.getInt(0)); map.put("bpicture",cursor.getString(4)); map.put("bname",cursor.getString(1)); map.put("bstyle",cursor.getString(2)); map.put("bprice",cursor.getString(3)); productListByname.add(map); cursor.moveToNext(); } cursor.close(); productList=productListByname; searchAdapter.notifyDataSetChanged(); }else//提示沒有找到要查詢的菜品}4.2.5訂餐訂餐功能是本項目的核心功能,前面做的那些僅僅是為訂餐功能做鋪墊。當用戶點擊每一行菜品時,不論這菜品時在菜品列表中還是在搜索列表中都會跳轉(zhuǎn)到菜品詳細信息界面,在跳轉(zhuǎn)的同時,Intent里面會PutExtra菜品的數(shù)據(jù),在詳細信息界面中再將Intent里面的數(shù)據(jù)取出并顯示。界面如圖4.9,在該界面中顯示了菜品的圖片、價格、評分、是否有折扣、菜品詳細介紹等菜品信息,還有兩個按鈕和輸入訂餐份數(shù)的文本輸入框,該輸入框只允許輸入數(shù)字。如果用戶選好了菜品,并且準備將菜品加入購物車時,用戶首先得輸入一個菜品份數(shù),并點擊加入購物車按鈕,這時系統(tǒng)將進行一系列的邏輯處理,如果購物車中沒有物品則直接加入,如果購物車中已經(jīng)有物品了,則將用戶剛加入購物車的菜品數(shù)據(jù)跟購物車中原有的數(shù)據(jù)進行匹配,如果已經(jīng)有了,那么將提示用戶,該物品購物車里已有,反之則加入購物車。圖4.9菜品詳情在此列出跳轉(zhuǎn)界面時對數(shù)據(jù)處理的代碼:菜品行點擊事件,把數(shù)據(jù)putExtra到Intent中publicvoidonItemClick(AdapterView<?>parent,Viewview,intid, longposition){ if(position!=-1){ ViewHolderholder=(ViewHolder)view.getTag(); TextViewtvid=(TextView)view.findViewById(R.id.tvid); TextViewtvname=(TextView)view.findViewById(R.id.tvname); TextViewtvprice=(TextView)view.findViewById(R.id.tvprice); Intentintent=newIntent(ProductListActivity.this,DetailsActivity.class); intent.putExtra("pic",(Bitmap)holder.ivpicture.getTag()); intent.putExtra("bid",tvid.getText().toString()); intent.putExtra("bname",tvname.getText().toString()); intent.putExtra("bprice",tvprice.getText().toString()); startActivity(intent);在詳細信息界面中取出Intent里面的數(shù)據(jù)代碼: Intentintent=getIntent(); Bitmappic=(Bitmap)intent.getParcelableExtra("pic"); ivdish=(ImageView)findViewById(R.id.ivdish); ivdish.setImageBitmap(pic); //獲得商品id tvbid=intent.getStringExtra("bid"); //獲得菜名 bname=intent.getStringExtra("bname"); price=intent.getStringExtra("bprice");將菜品添加到購物車中代碼:badd.setOnClickListener(newOnClickListener(){ publicvoidonClick(Viewv){ intcount=ProductListActivity.cartdata.size(); if(count>0)//表示購物車中有數(shù)據(jù) { for(inti=0;i<count;i++){Stringexistid=(String)((HashMap)ProductListActivity.cartdata.get(i)).get("bid"); if(existid.equals(tvbid)) //購物車中有相同的數(shù)據(jù) else { HashMapitem=newHashMap(); item.put("bid",tvbid); item.put("bprice",price); item.put("bname",bname); item.put("bnum",etinput.getText().toString()); data.add(item);//將HashMap添加到List中 else//購物車為空時直接添加 Intentintent=newIntent(DetailsActivity.this,ProductListActivity.class); intent.putExtra("changenum",etinput.getText().toString()); startActivity(intent); 4.2.6結(jié)賬當然,訂餐完成之后就得去購物車模塊進行結(jié)賬操作。首先用戶可以選中購物車中的物品,點擊menu按鈕對物品進行修改數(shù)量和刪除操作。要實現(xiàn)Androidmenu功能必須重載onCreateOptionsMenu、onPrepareOptionsMenu以及onOptionsItemSelected三個方法,第一個方法是用來創(chuàng)建menu按鈕顯示的菜單項,第二個方法是限制菜單項只在購物車列表中顯示,第三個方法則是實現(xiàn)菜單項功能的。在本模塊中,為menu添加了兩個菜單項,一個是修改數(shù)量,一個是刪除,可以對購物車中物品的數(shù)量進行修改和刪除操作,沒選中物品則會提示錯誤。其次為每一條ListView添加了一個長點擊事件,及setOnLongClickListener接口,在此接口中必須實現(xiàn)onClick方法,當用戶點擊物品不放時會直接將該選中物品刪除。最后點擊結(jié)算按鈕系統(tǒng)將會把訂單中的數(shù)據(jù)進行封裝,并使用protocolHelper中的sendRequest方法向服務器發(fā)送請求,并接受服務器端返回的消息,如果消息不為空則說明訂單生成成功,提示用戶訂單生成,該方法代碼如下://使用ProtocolHelper的setRequest方法對請求類型,操作及傳送來的數(shù)據(jù)data進行封裝 helper.setObject(order); helper.setRequest(helper.ORDER,helper.INSERT,"");//使用ProtocolHelper的sendRequest方法對服務器發(fā)送請求并返回服務器發(fā)回得消息 Stringresult=helper.sendRequest();//如果服務器返回消息不為null,則說明訂單以生產(chǎn)成功,彈出提示 if(result!=null&&!result.equals("fail")){ Toast.makeText(ProductListActivity.this, "訂單已生成,謝謝惠顧?。?!",Toast.LENGTH_LONG).show(); List<Object>list=newArrayList<Object>(); setList(list); //創(chuàng)建適配器對象 cartadapter=newSimpleAdapter( ProductListActivity.this,cartdata, R.layout.cartlist,newString[]{"bid", "bname","bprice","bnum"},newint[]{ R.id.markid,R.id.shopname,R.id.price, R.id.number}); //設(shè)置listview的適配器 cartlistView.setAdapter(cartadapter);客戶端的基本功能介紹到此結(jié)束了,接下來介紹服務器端的功能實現(xiàn)。4.3服務端服務端分為管理員登陸、訂單管理、菜品管理、會員管理四個模塊,主要是為商家對客戶端發(fā)送過來的數(shù)據(jù)進行處理,以及對客戶端的數(shù)據(jù)進行更新操作。服務端代碼是用JavaSE來實現(xiàn),下面對每一個模塊進行詳細分析。4.3.1系統(tǒng)登錄當管理員運行程序后,必須得進行登錄認證,在服務器端數(shù)據(jù)庫的用戶表中有一個用戶權(quán)限的字段,如果值為0則表示為管理員賬號,如果值為1則表示用戶賬號,在此模塊中僅僅為管理員提供登錄功能,并不支持管理員注冊功能,所以管理員是唯一的,這也是系統(tǒng)數(shù)據(jù)安全性的一種表現(xiàn)。登錄界面如圖4.10所示,管理員點擊登陸時如果用戶名和密碼輸入錯誤則會彈出錯誤信息,輸入正確則進入管理界面。圖4.10管理員登陸界面在該模塊中核心代碼在于獲取用戶輸入的信息并跟數(shù)據(jù)庫中管理員的信息進行匹配,代碼如下:publicvoidactionPerformed(ActionEvente){ if(e.getActionCommand().equals("login")){ if(jt_password.getText().toString().equals("") |jt_username.getText().toString().equals("")){ JOptionPane.showMessageDialog(null,"用戶名或密碼不能為空"); }else{ AdminDAOadmin=newAdminDAO("config"); Stringlogo=admin.loginAdmins(jt_username.getText().toString(), jt_password.getText().toString()); if(logo.equals("success")){ login.dispose(); MainJframe.getInstance(); }else{ JOptionPane.showMessageDialog(null,"用戶名或密碼錯誤");}} }elseif(e.getActionCommand().equals("exist")){ System.exit(0);}}4.3.2訂單管理當管理員登陸成功后,那么就進入了管理界面,在該界面中采用了JavaSE的卡片布局方式,這個布局方式跟客戶端主界面的布局方式差不多,也是多個面板共用一個框架。在管理界面中,將管理員操作數(shù)據(jù)的方式分為了訂單管理、菜品管理、會員管理三個模塊,首先介紹一下訂單管理模塊的設(shè)計與實現(xiàn)。在訂單管理模塊中,從上到下分為三個部分,最上面是查看訂單按鈕,中間是訂單的一些基本信息表結(jié)構(gòu),有訂單編號、訂單生成時間、請求人姓名、請求人聯(lián)系方式、訂單狀態(tài),這里主要是使用DefaultTableModle來實現(xiàn)這樣一個表結(jié)構(gòu),最下面是一個查詢訂單詳細信息的按鈕,如圖4.11。當管理員點擊查看訂單時,系統(tǒng)將會從數(shù)據(jù)庫中將訂單表的信息取出并放入到DefaultTableModle里面一遍管理員對訂單進行查看。當管理員選中一行訂單信息,再點擊查看訂單詳細信息按鈕時,將會彈出一個訂單詳情對話框,如圖4.12所示,在該對話框中顯示了訂單中的信息,以及一個訂單完成的按鈕,如果交易完成,在這里的交易完成的定義是商家把菜品做好,送到用戶的地址并且用戶付清所有費用,則管理員點擊該按鈕,將會彈出訂單完成消息框,并且將此訂單從訂單管理界面中移除。圖4.11訂單管理界面圖4.12訂單詳細對話框在此功能中的難點在于,當訂單完成之后將其從訂單列表中移除,在此該模塊是這樣設(shè)計的,在數(shù)據(jù)庫中為每一個訂單加一個標識位初始化為0,查詢訂單時把標識位為0的訂單都添加到列表中,當點擊訂單完成時將標識位改為1,然后再查詢一次訂單表那么就能將訂單移除。核心代碼如下:publicvoidcomplete(finalintid){ btn_complete=newButton("訂單已完成"); btn_complete.setBounds(300,20,100,30); this.add(btn_complete); btn_complete.addActionListener(newActionListener(){ publicvoidactionPerformed(ActionEvente){ if(OrdersDAO.updateState(id,1)){ JOptionPane.showMessageDialog(null,"訂單已完成"); listJPanellist=listJPanel.getInstance(); list.insertIntoTable(vec);}} });}4.3.3菜品管理菜品管理界面需要實現(xiàn)的功能是能使管理員對菜品進行增加、刪除、修改等操作,在該模塊中布局方式跟訂單管理界面基本一樣,如圖4.13所示。圖4.13菜品管理界面添加新菜功能實現(xiàn):當管理員點擊添加新菜按鈕時會彈出一個輸入菜品信息的界面,如圖4.14所示,在此界面中可以輸入菜品的名稱、價格、菜系、折扣、上傳圖片、詳細描述等。點擊新增按鈕時會進行一系列的判斷,比如名稱不能為空,價格不能為空等等限制。管理員將信息輸入完成后就會將這些信息添加到數(shù)據(jù)庫中的菜品信息表中,然后再菜品列表中讀取出來,該功能的難點在于圖片的上傳功能,圖片存入數(shù)據(jù)庫中的是圖片的絕對路徑,如果在該路徑中找不到圖片資源那么將會不能顯示圖片,該功能核心代碼如下:上傳圖片按鈕功能代碼:btn_uploadIma.addActionListener(newActionListener(){ publicvoidactionPerformed(ActionEvente){ //初始化jfc_upload控件,并設(shè)置其只能上傳圖片 jfc_upload=newJFileChooser(); jfc_upload.setAcceptAllFileFilterUsed(false); //設(shè)置該控件過濾器,圖片格式為(.png) jfc_upload.setFileFilter(newFileFilter(){ publicStringgetDescription(){ return"圖片格式(.png)";} publicbooleanaccept(Filef){ if//圖片名稱以.jpg結(jié)尾returntrue

溫馨提示

  • 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

提交評論