美食分享軟件項目報告_第1頁
美食分享軟件項目報告_第2頁
美食分享軟件項目報告_第3頁
美食分享軟件項目報告_第4頁
美食分享軟件項目報告_第5頁
已閱讀5頁,還剩7頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

..《軟件工程技術與設計》總結報告題目:美食分享軟件的設計與實現(xiàn)組名:BMW組長:組內主要成員:姓名學號郵箱主要分工系統(tǒng)總體設計,協(xié)調各個組員的工作,Android端后臺開發(fā)Android端數(shù)據(jù)庫設計Android端交互頁面設計Web端及后臺開發(fā)Android端交互頁面設計,撰寫ppt一完成情況概述1.1系統(tǒng)主要的功能性能需求完成情況美食分享軟件系統(tǒng)包括了一般用戶、系統(tǒng)管理員兩種用戶,根據(jù)其不同的角色對系統(tǒng)有不同的需求。我們的美食分享系統(tǒng)把絕大部分的功能都實現(xiàn)了,詳細見下面分析。而且在這基礎上,還在Web端實現(xiàn)了所有功能〔原計劃僅僅打算在Android端實現(xiàn)本系統(tǒng)。一般用戶需求一般用戶可以通過安裝在Android系統(tǒng)上的應用程序來訪問美食分享軟件。在手機端,用戶可以注冊或者登錄系統(tǒng),登錄之后能夠進行搜索美食,查看美食,收藏美食,上傳美食等操作。這些功能已經(jīng)全部實現(xiàn)了。2.管理員需求當管理員登錄美食分享系統(tǒng)時,可以對整個系統(tǒng)進行管理,包括添加美食種類,刪除美食種類,更改每日推薦等等。這些功能都已經(jīng)實現(xiàn),而且直接登錄數(shù)據(jù)庫圖形化管理工具Navicat,操作數(shù)據(jù)庫更為方便。操作頁面事例如圖1.1所示:圖1-1操作頁面示例性能方面,就下面數(shù)據(jù)精確度幾個指標進行展開:我們的系統(tǒng)能夠做到:用戶在進行美食搜索時要保證查全率、查準率,所有符合條件的美食都能被找到,這達到了預期的目標。時間特性1.打開一個新的鏈接的時間不能超過3秒。2.系統(tǒng)處理美食搜索操作響應時間不能超過10秒。3.我們的系統(tǒng),打開一個新鏈接需要時間不到1秒,在毫秒的量級;4.進行美食搜索操作同樣也不到1秒,當然,這與我們的數(shù)據(jù)庫里能夠搜索的內容偏少有關。適應性本軟件系統(tǒng)應能在Android2.2及其以上手機操作系統(tǒng)上良好運行,Web端應能使用IE6.0以上內核的瀏覽器,Chrome瀏覽器,FireFox瀏覽器進行訪問,完全達到預期目標。安全性我們的系統(tǒng)具有一定程度的權限管理,邏輯分析以及檢測數(shù)據(jù)完整性功能,各個功能模塊需要相應的權限才能訪問。例如:非注冊用戶〔游客只具備瀏覽美食,搜索美食的權限,只有登錄用戶才可以對美食進行收藏、上傳等操作。這一部分在Web端和Android端已經(jīng)實現(xiàn),但是還有一些本地驗證等還需要進一步的完善。可靠性只要服務器不宕機〔充當服務器的PC不關機,系統(tǒng)可以保證一直正常運行。1.2系統(tǒng)主要設計技術我們在系統(tǒng)中主要運用的一些技術有:使用jquery圖片延遲加載插件jquery.lazyload實現(xiàn)圖片延遲實現(xiàn)原理:把所有需要延時加載的圖片改成如下的格式:<imglazy_src="圖片路徑"border="0"/>,然后在頁面加載時,把所有使用了lazy_src的圖片都保存到數(shù)組里,然后在滾動時計算可視區(qū)域的top,然后把延時加載的圖片中top小于當前可視區(qū)域〔即圖片出現(xiàn)在可視區(qū)域內的圖片的src的值用lazy_src的來替換〔加載圖片。使用方法:把頁面上需要延時加載的圖片src改成為lazy_src,然后把上面的js放到body最后面,然后調用:lazyLoad.init<>;調用的方法可以使用firebug來查看一時圖片是否是延時加載。特效優(yōu)點:〔1加速wordpress站點的頁面載入速度;〔2不唐突的圖片漸顯方式;〔3代碼精簡,便于操作維護。JAVA的動態(tài)代理〔1代理模式代理模式是常用的java設計模式,他的特征是代理類與委托類有同樣的接口,代理類主要負責為委托類預處理消息、過濾消息、把消息轉發(fā)給委托類,以及事后處理消息等。代理類與委托類之間通常會存在關聯(lián)關系,一個代理類的對象與一個委托類的對象關聯(lián),代理類的對象本身并不真正實現(xiàn)服務,而是通過調用委托類的對象的相關方法,來提供特定的服務。按照代理的創(chuàng)建時期,代理類可以分為兩種。靜態(tài)代理:由程序員創(chuàng)建或特定工具自動生成源代碼,再對其編譯。在程序運行前,代理類的.class文件就已經(jīng)存在了。動態(tài)代理:在程序運行時,運用反射機制動態(tài)創(chuàng)建而成?!?工廠模式實例化對象模式,是用工廠方法代替new操作的一種模式。著名的Jive論壇,就大量使用了工廠模式,工廠模式在Java程序系統(tǒng)可以說是隨處可見。因為工廠模式就相當于創(chuàng)建實例對象的new,我們經(jīng)常要根據(jù)類Class生成實例對象,如Aa=newA<>工廠模式也是用來創(chuàng)建實例對象的,所以以后new時就要多個心眼,是否可以考慮使用工廠模式,雖然這樣做,可能多做一些工作,但會給你系統(tǒng)帶來更大的可擴展性和盡量少的修改量。Ajax異步判斷本系統(tǒng)對一些主鍵是否重復的判斷,采用Ajax異步方式進行,只要光標離開輸入框就和數(shù)據(jù)庫進行查找比對。整個過程是異步進行的不會影響下面的輸入,比對完成后,如果有重復,在對應的輸入框后面用紅字提示已經(jīng)存在的信息。Ajax的驗證代碼流程如下?!?創(chuàng)建Ajax引擎對象XMLRequest。 xml=newXMLRequest<>;〔2調用open方法與Ajax引擎建立連接,并告訴Ajax引擎我們的請求方式為get,請求url及采用異步方式。 xml.open<"GET",url,true>;〔3告訴Ajax引擎處理完后,如何把結果反饋給我們,我們通常指定一個方法句柄,那么Ajax就會調用我們指定的方法,從而就可以得到Ajax引擎返回的數(shù)據(jù),這種方式一般稱為回調機制。xml.onreadystatechange=function<>{};〔4最后調用send方法,將設置信息發(fā)送到Ajax引擎讓其處理。 xml.send<null>;1.3系統(tǒng)開發(fā)管理過程我們組進行軟件開發(fā)的過程中,使用了SVN進行代碼版本管理。這是提交的部分記錄。圖1-2SVN提交記錄其中MSTXClient項目〔客戶端的代碼行數(shù)為3556行,MSTX項目〔服務器端的代碼行數(shù)為4753行。二系統(tǒng)設計與實現(xiàn)2.1系統(tǒng)結構設計WEB端邏輯架構本系統(tǒng)開發(fā)采用三層架構:表示層,JSP/Servlet主要負責相關的顯示;業(yè)務邏輯層,主要實現(xiàn)業(yè)務規(guī)則;持久化層,主要包裝持久化邏輯。三層架構是在MVC模式的基礎上抽取了一個持久化層。抽取持久化層,主要是為了持久層的改變不影響業(yè)務邏輯層,為了更加清楚的劃分職責。采用抽象工廠方法,三層架構依賴于抽象,每一層都建立一個抽象,是自上而下的依賴。如:程序對JDBC的依賴就是依賴了他的抽象層,程序和JDBC是單向依賴,只調用JDBC,JDBC實現(xiàn)不會調用程序,特別容易擴展。三層架構模式時序圖如圖2.l所示。圖2.1三層架構模式時序圖三層架構模式層與層的依賴關系如圖2.2所示。表示層〔JSP/Servlet表示層〔JSP/Servlet業(yè)務邏輯層〔業(yè)務規(guī)則業(yè)務邏輯層〔業(yè)務規(guī)則持久化層〔持久化邏輯,JDBC持久化層〔持久化邏輯,JDBC圖2.2層與層的依賴關系WEB端物理架構Web服務器一臺,技術解決方案。Database服務器一臺,技術解決方案MySQLServer5.1.73。WEB端總體框架如圖2.3所示:圖2.3系統(tǒng)結構圖JSP/Servlet主要負責相關的顯示,使用人員點擊jsp頁面內容,相關動作提交到Servlet業(yè)務處理端,調用業(yè)務邏輯方法,調用持久化業(yè)務邏輯和數(shù)據(jù)庫打交道。然后返回jsp界面,渲染后在顯示給用戶。4.Android端的類架構圖如下圖2-4所示:圖2.4Android類架構圖2.2系統(tǒng)主要功能接口設計眾所周知,接口是提供給其他模塊或者系統(tǒng)使用的一種約定或者規(guī)范。因此接口必須要保證足夠的穩(wěn)定性和易用性。這是設計接口的基本要求。在Android端,各個Activity模塊之間的數(shù)據(jù)交互主要是利用Bundle類對數(shù)據(jù)進行封裝,然后通過Intent機制在各個模塊之間進行傳輸。Intent是一種運行時綁定〔run-timebinding機制,它能在程序運行過程中連接兩個不同的組件。通過Intent,你的程序可以向Android表達某種請求或者意愿,Android會根據(jù)意愿的內容選擇適當?shù)慕M件來完成請求。比如,有一個Activity希望打開網(wǎng)頁瀏覽器查看某一網(wǎng)頁的內容,那么這個Activity只需要發(fā)出WEB_SEARCH_ACTION給Android,Android就會根據(jù)Intent的請求內容,查詢各組件注冊時聲明的IntentFilter,找到網(wǎng)頁瀏覽器的Activity來瀏覽網(wǎng)頁。要在不同的activity之間傳遞數(shù)據(jù),就要在intent中包含相應的內容,一般來說數(shù)據(jù)中最基本的應該包括:Action:用來指明要實施的動作是什么,比如說ACTION_VIEW,ACTION_EDIT等。具體的可以查閱androidSDK->reference中的Aent類,里面的constants中定義了所有的action。Data:要事實的具體的數(shù)據(jù),一般由一個Uri變量來表示。Category:一個字符串,包含了關于處理該intent的組件的種類的信息。一個intent對象可以有任意個category。Type:顯式指定Intent的數(shù)據(jù)類型〔MIME〔多用途互聯(lián)網(wǎng)郵件擴展,MultipurposeInternetMailExtensions。1登錄模塊〔1請求消息接口含義:客戶端通過socket請求提交用戶信息進行驗證接口協(xié)議:TCP/IP協(xié)議命令字:dout.writeUTF參數(shù)描述約束uid系統(tǒng)給用戶分配的id必須是注冊成功的idpwd密碼必須是對應的密碼〔2接收消息接口含義:客戶端接收來自服務器端發(fā)來的消息接口協(xié)議:TCP/IP協(xié)議命令字:din.writeUTF參數(shù)描述約束uid系統(tǒng)給用戶分配的id必須是注冊成功的idpwd密碼必須是對應的密碼這部分的核心代碼實現(xiàn)如下:2注冊模塊請求消息接口含義:客戶端通過socket請求提交用戶信息進行注冊接口協(xié)議:TCP/IP協(xié)議命令字:dout.writeUTF參數(shù)描述約束u_name用戶名不能為空u_pwd1密碼兩次密碼輸入一致u_qqQQ數(shù)字u_Email郵箱地址不能為空u_dis個人描述無接收消息接口含義:客戶端接收來自服務器端發(fā)來的消息接口協(xié)議:TCP/IP協(xié)議命令字:din.writeUTF參數(shù)描述約束uid系統(tǒng)給用戶分配的id必須是注冊成功的idu_name用戶名提交的用戶名這部分的核心代碼實現(xiàn)如下:3拍照模塊這一部分調用了手機上的相機api,同時將得到的照片提交到上傳模塊中,與其他內容一起提交到服務器中。拍照的API函數(shù):myCamera.takePicture調用的過程:返回數(shù)據(jù):接口含義:拍照模塊向上傳模塊發(fā)送圖片數(shù)據(jù)接口協(xié)議:TCP/IP協(xié)議命令字:onPictureTaken參數(shù)描述約束data圖片二進制數(shù)據(jù)無主要實現(xiàn)代碼:4地圖模塊這一部分調用了Google地圖的API,同時將得到的照片提交到上傳模塊中,與其他內容一起提交到服務器中。調用的Google地圖API包括以下幾個方面:返回數(shù)據(jù):接口含義:地圖模塊向上傳模塊發(fā)送圖片數(shù)據(jù)接口協(xié)議:TCP/IP協(xié)議命令字:setResult參數(shù)描述約束RESULT_OK標識符無lat經(jīng)度浮點數(shù)lon緯度浮點數(shù)主要實現(xiàn)代碼:其他模塊的接口設計與上述幾個模塊的接口設計類似,在這不再贅述。2.3系統(tǒng)的設計模式應用1MVC設計模式MVC全名是ModelViewController,是模型<model>-視圖<view>-控制器<controller>的縮寫,一種軟件設計典范,用一種業(yè)務邏輯、數(shù)據(jù)、界面顯示分離的方法組織代碼,將業(yè)務邏輯聚集到一個部件里面,在改進和個性化定制界面及用戶交互的同時,不需要重新編寫業(yè)務邏輯。MVC被獨特的發(fā)展起來用于映射傳統(tǒng)的輸入、處理和輸出功能在一個邏輯的圖形化用戶界面的結構中。MVC結構如圖2-5所示:圖2-5MVC結構圖2抽象工廠模式下面是系統(tǒng)封裝的抽象工廠描述性說明創(chuàng)建抽象工廠類publicclassBeanFactory保存相關對象保存Service相關對象privateMapserviceMap=newHashMap<>;保存Dao相關對象privateMapdaoMap=newHashMap<>;返回相關對象實例returnserviceMap.get<c.getName<>>;returndaoMap.get<c.getName<>>;將創(chuàng)建好多的對象放到Map中serviceMap.put<c.getName<>,service>;daoMap.put<c.getName<>,dao>;返回系列產(chǎn)品returnservice;returndao;抽象工廠模式示意圖如圖2-6所示。3Filter統(tǒng)一控制本系統(tǒng)采用Filter技術面向切面編程,實現(xiàn)了統(tǒng)一處理字符集;簡單的webCache,統(tǒng)一控制緩存;只有經(jīng)過登錄頁面登陸成功才能進入其他頁面。體現(xiàn)了一個責任鏈模式,提供了一種聲明式服務,具有可插拔的能力。采用Filter技術對Request和Response請求進行了攔截,這對系統(tǒng)后期的完善,權限的分配,病毒的攔截有至關重要的作用。采用Filter技術主要是調用下面的方法publicvoiddoFilter<ServletRequestrequest,ServletResponseresponse, FilterChainchain>{//完成相關的控制語句 chain.doFilter<request,response>; }通過本系統(tǒng)中的用戶維護說明Filter的基本原理如圖2-7所示。圖2-7Filter統(tǒng)一控制流程圖2.4系統(tǒng)的AOP設計應用面向方面編程〔AspectOrientedProgramming,簡稱AOP是一種聲明式編程〔DeclarativeProgramming。聲明式編程是和命令式編程〔ImperativeProgramming相對的概念。我們平時使用的編程語言,比如C++、Java、Ruby、Python等,都屬命令式編程。命令式編程的意思是,程序員需要一步步寫清楚程序需要如何做什么〔HowtodoWhat。聲明式編程的意思是,程序員不需要一步步告訴程序如何做,只需要告訴程序在哪些地方做什么〔WheretodoWhat。比起命令式編程來,聲明式編程是在一個更高的層次上編程。聲明式編程語言是更高級的語言。聲明式編程通常處理一些總結性、總覽性的工作,不適合做順序相關的細節(jié)相關的底層工作。本系統(tǒng)中能用到AOP的地方:1.統(tǒng)一字符編碼處理2.打印出所有業(yè)務類的工作流程日志3.所有關鍵業(yè)務方法都加上事務管理功能2.5系統(tǒng)的非功能設計〔如性能、安全性等這一部分已經(jīng)在第一節(jié)闡述,這里不再贅述。2.6系統(tǒng)的數(shù)據(jù)庫設計本系統(tǒng)中的信息表主要有10張表:頭像表、用戶信息表、美食種類表、美食信息表、每日推薦表、我的收藏表、廣告表、廣告圖片表和最大編號表。他們之間的關系可以用圖2-8來表示。圖2-8數(shù)據(jù)庫設計圖部分數(shù)據(jù)庫建表語句如下:createdatabasemstx;usemstx;CREATETABLEmstx_user</*用戶信息表*/ uid int NOTNULL, u_name char<50> NOTNULL, u_qq varchar<15>, u_pwd varchar<50>, u_Email varchar<50>, u_head int, u_admin booleanNOTNULL, u_mood varchar<50>, u_integral int, u_hobby varchar<50>, u_level int, u_number int, PRIMARYKEY<uid>, FOREIGNKEY<u_head>REFERENCESmstx_head<tid>>; FOREIGNKEY<gid>REFERENCESmstx_ads<gid>>;CREATETABLEmstx_info</*美食信息表*/ mid intNOTNULL, info_title char<50> NOTNULL, info_dis text, info_lon float<17,14>, info_lat float<17,14>, info_sort int, info_price double, info_time TIMESTAMP, uid int, hotel_name char<50>, PRIMARYKEY<mid>, FOREIGNKEY<uid>REFERENCESmstx_user<uid>, FOREIGNKEY<info_sort>REFERENCESmstx_sort<sid>>;其他表格設計類似,不再贅述。2.7用戶界面設計我們采用了線性布局,線性布局時最簡單布局之一,提供了控件水平或者垂直排列的模型。使用此布局時可以通過設置控件的weight參數(shù)控制各個控件在容器中的相對大小。界面主要分為八個部分:包括登錄、注冊、搜索、拍照界面等等。初步設計的WEB端界面如下:啟動配置好的Tomcat,運行該系統(tǒng),首先進入該系統(tǒng)主頁,如圖2-7所示,用戶可以在主頁點擊按鈕或者鏈接進入相應界面:圖2-7首頁在主頁可以點擊"注冊"按鈕注冊用戶,然后通過"登陸"按鈕登陸該系統(tǒng),登陸界面如圖2-8所示:圖2-8注冊界面3.登陸成功后,會自動跳轉到系統(tǒng)主頁,在主頁點擊"我的收藏"會進入"我的收藏",收藏用戶美食,如圖2-9所示,在收藏界面可以通過刪除鏈接將相應美食從收藏中刪除。圖2-9我的收藏單擊"美食搜索"鏈接便會進入搜索界面,效果如圖2-10所示,在搜索界面可以根據(jù)美食種類及價格進行美食搜索,而且可以對搜索到的美食進行收藏。圖2-10搜索界面5.單擊"上傳美食",按鈕進入上傳美食界面,在該界面中可以上傳美食信息,上傳后的美食便會存入數(shù)據(jù)庫,其他用戶便可搜索到美食,在上傳美食界面中應用了Baidu地圖技術,顯示經(jīng)緯度,如圖2-11所示:圖2-11上傳美食6.點擊右上側"美食網(wǎng)歡迎您"鏈接,進入個人資料修改頁面,可對用戶信息進行修改,如圖2-12所示:圖2-12個人資料界面7.注銷當前登陸的用戶,使用管理員賬號登陸,在網(wǎng)頁右側上出現(xiàn)"管理網(wǎng)站",通過該鏈接,進入網(wǎng)站管理頁面,如圖2-13所示,在網(wǎng)站頁面可以執(zhí)行添加刪除每日推薦美食、上傳廣告圖片、添加種類等。圖2-13美食管理Android端的主要界面如下:圖2-14美食上傳 圖2-15美食搜索圖2-16美食信息 圖2-17美食收藏圖2-18地圖顯示 圖2-19美食推薦圖2-20收藏提示 圖2-21搜索結果圖2-22刪除提示 圖2-23用戶登錄圖2-24用戶注冊2.8開發(fā)工具與環(huán)境2.8.1下載并安裝eclipseEclipse版本有要求:The"EclipseClassic"versionisrecommended.Otherwise,aJavaorRCPversionofEclipseisrecommended.1.下載eclipse只需登錄到:即可下載最新版本的eclipse安裝程序。2.將下載好的eclipse解壓到D:\eclipseforandroid。3.雙擊D:\eclipseforandroid目錄下的eclipse.exe運行eclipse即可[2]。2.8.2下載并安裝jdk1.首先登錄到SUN官方網(wǎng)站下載最新的JDK安裝程序。2.然后雙擊剛下載的JDK安裝程序jdk-7u21-windows-i586,根據(jù)提示將JDK安裝到默認目錄。3.右鍵單擊我的電腦,依次選擇屬性/高級/環(huán)境變量,在系統(tǒng)變量中新建一個名為JAVA_HOME,值為""的環(huán)境變量。再打開Path環(huán)境變量,在最后加上"C:\ProgramFiles\Java\jdk1.7.0_21\bin;",單擊"確定"按鈕即可。2.8.3開發(fā)環(huán)境簡介JDK〔JavaDevelopmentKit是SunMicrosystems針對Java開發(fā)員的產(chǎn)品。自從Java誕生以來,JDK已經(jīng)成為最廣泛的JavaSDK。JDK是整個Java的核心內容,包括了Java運行環(huán)境、Java工具和Java基礎類庫三部分。從Sun的JDK1.5開始,提供了

溫馨提示

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

評論

0/150

提交評論