版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
《數(shù)據(jù)庫課程設(shè)計》美食主題安卓系統(tǒng)菜譜查詢應(yīng)用程序CookBook目錄一、選題要求 3二、選題背景 3三、需求分析 3四、設(shè)計理念 4五、開發(fā)工具 7六、實現(xiàn)步驟 7七、結(jié)果 15八、總結(jié)與體會 16課題主題美食——菜譜選題要求以美食為主線,最好與數(shù)據(jù)庫和互聯(lián)網(wǎng),移動互聯(lián)網(wǎng)相關(guān),開發(fā)一個小應(yīng)用程序或者小系統(tǒng)??蓞⒖既缦乱恍┫嚓P(guān)的美食網(wǎng)站:廣州美食團(tuán)購:/category/meishi/all?utm_campaign=1344091295&utm_medium=cpc&utm_source=baidu&utm_content=pinlei&utm_term=%E7%BE%8E%E9%A3%9F%E5%9B%A2%E8%B4%AD%E7%BD%91京東美食:/channel/virtual-quanguo-87-0-0-0-0-0-1-0-1.html美食菜譜:/china-food/選題背景隨著人們生活水平的普遍提高,對餐飲娛樂業(yè)的服務(wù)、硬件設(shè)施、菜品口味的要求越來越挑剔。加上原材料的不斷上漲,人工成本越來越高以及越來越多食品安全丑聞的曝光,自己動手做菜成了現(xiàn)代生活的最佳覓食手段。自己動手做菜,則不僅要保證色香味俱全,還要營養(yǎng)價值豐富。那么方便查閱的菜譜必不可少。一份方便的菜譜,不僅要讓用戶能夠根據(jù)食材和菜名快速的找到相關(guān)菜肴,還要對菜肴有詳細(xì)的介紹,對做菜的步驟有詳細(xì)的說明。除此之外,還要有方便快捷的信息統(tǒng)計功能,如菜譜所需食材的統(tǒng)計、食材總價的估算、當(dāng)季熱門菜譜的推薦、用戶收藏夾的查閱等等功能來幫助用戶快捷的使用菜譜。本應(yīng)用程序就是希望通過向大眾提供營養(yǎng)的食譜,向更多的關(guān)注健康的人們提供一個吃出健康的好環(huán)境。它的服務(wù)對象是非常廣泛的,前景十分廣闊。需求分析這里主要描述客戶需求1.登陸/注冊賬號根據(jù)菜譜名稱或者食材進(jìn)行模糊搜索點擊搜索返回結(jié)果以查看菜譜詳細(xì)內(nèi)容菜譜詳細(xì)內(nèi)容包括:3.1.菜譜圖片一張3.2.少于200字的菜式簡介3.3.適合人數(shù),消耗時間3.4.食材(包括配料)名稱、用量3.5.若干步驟3.6.用戶評價收藏菜譜評價菜譜將菜譜食材加入購物清單查看購物清單(包含食材名字、用量、總價)清空購物清單查看個人收藏設(shè)計理念系統(tǒng)邏輯設(shè)計初始頁面初始頁面數(shù)據(jù)庫主頁最新推薦列表查詢欄購物清單個人中心收藏列表清單列表數(shù)據(jù)庫設(shè)計2.1.E-R圖SSamountBookmarkList2.2.關(guān)系圖2.3.數(shù)據(jù)字典2.4.建表語句useCookBookDBgocreatetableDish(Didintprimarykeynotnull,Dnamenvarchar(20)notnull,Dintroductionnvarchar(200)notnulldefault'暫無介紹',Dpicnvarchar(30),DtimeCosttinyintnotnull,Dpeopletinyintnotnull,Dhotintnotnulldefault0,DdateSmalldatetimenotnulldefaultgetdate());createtableIngredient(Iidintprimarykeynotnull,Inamenvarchar(10)notnull,Ipricenumeric(4,1)notnull,Iunitnvarchar(2)notnull);createtableSeasoning(Sidintprimarykeynotnull,Snamenvarchar(8)notnull);createtableComments(Cidintprimarykeynotnull,Ccontentnvarchar(200)notnull,CdateSmalldatetimenotnull,Didintnotnullforeignkey(Did)referencesDish(Did)ondeletecascade);createtableSteps(StepIDintprimarykeynotnull,Didintnotnullforeignkey(Did)referencesDish(Did)ondeletecascade,Scontentnvarchar(200)notnull);createtableIngredientList(Iidintnotnullforeignkey(Iid)referencesIngredient(Iid)ondeletecascade,Didintnotnullforeignkey(Did)referencesDish(Did)ondeletecascade,Iamountnumeric(5,2)notnull);createtableSeasoningList(Sidintnotnullforeignkey(Sid)referencesSeasoning(Sid)ondeletecascade,Didintnotnullforeignkey(Did)referencesDish(Did)ondeletecascade,Samountnchar(5)notnull--比如‘一茶匙’)createtableUsers(Uidintprimarykeynotnull,Unamenvarchar(10)notnull,Upasswordnvarchar(20)notnull,)createtableBookmarkList(Uidintnotnullforeignkey(Uid)referencesUsers(Uid)ondeletecascade,Didintnotnullforeignkey(Did)referencesDish(Did)ondeletecascade,)createtableCommentList(Uidintnotnullforeignkey(Uid)referencesUsers(Uid)ondeletecascade,Cidintnotnullforeignkey(Cid)referencesComments(Cid)ondeletecascade,開發(fā)工具環(huán)境:SQLsevermanagementstudio2008、eclipse、VisualStudio2010語言:SQL、java、C++工具包:AndroidSDK、ADO組件實現(xiàn)步驟6.1客戶端實現(xiàn):設(shè)計程序界面:在紙上畫出草圖,確定每個功能應(yīng)該在什么界面實現(xiàn)Android編程:在裝有ADT的eclipseIDE中進(jìn)行編程,實現(xiàn)頁面布局設(shè)計、頁面間跳轉(zhuǎn)、請求數(shù)據(jù)、顯示返回數(shù)據(jù)等需求分析中提到的功能。其中,實現(xiàn)頁面布局設(shè)計是我們對ADT中的布局文件進(jìn)行了編寫,頁面間跳轉(zhuǎn)以及請求和返回數(shù)據(jù)我們是通過intent來相互傳送,其中核心步驟的代碼為:在首頁的GridView網(wǎng)格視圖中任意點擊一個item,都能傳輸菜的id(即上圖中的Did)到客戶端,客戶端連接以及得到id這個參數(shù)的核心代碼如下,然后服務(wù)端根據(jù)id作為key搜索數(shù)據(jù)庫,并返回菜譜的內(nèi)容。SQLite數(shù)據(jù)庫我們在客戶端APP加入了一個小型便捷的數(shù)據(jù)庫SQLite,用于儲存用戶的登陸信息。這是一個直接存儲在客戶端的本地數(shù)據(jù)庫,不涉及到通過網(wǎng)絡(luò)傳播的作用,每當(dāng)有用戶登陸的時候,就在數(shù)據(jù)庫中尋找匹配的項目(用戶名,用戶密碼等),如果找到匹配的信息,就登陸成功,進(jìn)入下一個界面,否則,登錄失敗。對于這個數(shù)據(jù)庫,考慮到信息都保存在本地,數(shù)據(jù)庫的規(guī)模不宜過大,因此只存儲基本的用戶信息和登陸記錄,便于查找信息。建立數(shù)據(jù)庫的語句如下:4.Socket網(wǎng)絡(luò)通信(1)建立通信我們的項目里面包括一個服務(wù)端和一個客戶端,菜譜的數(shù)據(jù)保存在服務(wù)端,客戶端如果想要獲得服務(wù)端的數(shù)據(jù),就必須通過網(wǎng)絡(luò)獲取數(shù)據(jù),這里我們使用socket通信,在客戶端,我們指定輸入服務(wù)器的IP和Port,更具客戶需求,建立通信,連接服務(wù)器的代碼如下:使用BufferReader和PrintWriter兩個函數(shù)完成數(shù)據(jù)的讀寫。每次當(dāng)客戶端需要從服務(wù)端獲取信息的時候,就向服務(wù)器發(fā)送一個請求,請求中包含對想要獲取的信息的說明;收到請求之后,客戶端解析請求,并將客戶端需要的信息分段發(fā)送給客戶端,客戶端持續(xù)監(jiān)聽,當(dāng)客戶端收到服務(wù)端發(fā)送的結(jié)束符號后,完成一次通信。通過BufferReader獲取數(shù)據(jù):通過PrintWriter發(fā)送數(shù)據(jù):除此之外,由于安卓對于socket有特殊的要求。安卓為了保證主線程的安全,需要所有的socket連接和信息傳輸?shù)墓ぷ鞫家诜志€程上完成,所以每當(dāng)需要顯示的數(shù)據(jù)時候,我們就需要調(diào)用handler函數(shù),在線程外部完成信息的輸出,具體實現(xiàn)如下:(2)分析接收到的內(nèi)容在接收到服務(wù)端發(fā)送的數(shù)據(jù)之后,客戶端必須有分析收到接收到的信息的能力,即必須能夠通過判斷分隔符的方式,將接受到了一類字符串短程一段段有意義的字符,并將這些字符分別儲存在不同的地方,或者顯示出來。(3)根據(jù)不同的需求,向服務(wù)端發(fā)送不同的數(shù)據(jù)客戶端必須根據(jù)不同的客戶需求向服務(wù)端發(fā)送不同的符號,服務(wù)器識別這些符號之后,會根據(jù)客戶的需求發(fā)送不同的信息,這里為了方面,每當(dāng)客戶點擊菜品跳轉(zhuǎn)到菜譜頁面的時候,我們就返回一個菜品的ID,具體的實現(xiàn)如下:6.1客戶端實現(xiàn):服務(wù)端主要任務(wù)是,根據(jù)客戶端的請求處理數(shù)據(jù)庫,或從數(shù)據(jù)庫調(diào)出數(shù)據(jù)。這是一種安全的訪問數(shù)據(jù)庫方式,因為客戶端并沒有直接通過SQL語句訪問數(shù)據(jù)庫,而是通過服務(wù)端;客戶端與服務(wù)端間的通信采用非明文的協(xié)議模式,不存在SQL注入等語法攻擊。Socket通信的實現(xiàn)既然要客戶端和服務(wù)端間通信,我們想到了用Socket的辦法。Socket是套接字,用于通信雙方的識別,下面是socket的建立過程。服務(wù)端多線程作為服務(wù)端,不可能只為一個客戶端服務(wù),因此在這里又要涉及到多線程的實現(xiàn)。我們采取的辦法是,主線程用于監(jiān)聽,一旦有遠(yuǎn)端socket接入,新建一個線程去處理這個連接請求,并把Server對象、接入的socket作為參數(shù)傳進(jìn)這個線程。服務(wù)端在線程中主要任務(wù)是監(jiān)聽客戶端的請求:ADO連接數(shù)據(jù)庫由于服務(wù)端是需要調(diào)用SQLserver的數(shù)據(jù)庫,并以流的方式通過Socket傳到客戶端,因此我們需要一些數(shù)據(jù)庫組件來完成這個調(diào)出數(shù)據(jù)的過程。ADO是一種程序?qū)ο?,用于表示用戶?shù)據(jù)庫中的數(shù)據(jù)結(jié)構(gòu)和所包含的數(shù)據(jù)。在MicrosoftVisualBasic編輯器中,可以使用ADO對象以及ADO的附加組件(稱為MicrosoftADOExtensionsforDLLandSecurity(ADOX))來創(chuàng)建或修改表和查詢、檢驗數(shù)據(jù)庫、或者訪問外部數(shù)據(jù)源。還可在代碼中使用ADO來操作數(shù)據(jù)庫中的數(shù)據(jù)。以下分別是連接數(shù)據(jù)庫,以及訪問數(shù)據(jù)庫實現(xiàn)登陸檢測的代碼建立SQL數(shù)據(jù)庫為了測試,我們先建立一個簡單的表格,下面是建表語句:create
table
Users(
Uid
int
primary
key
identity(1,1)
not
null,
Uname
nvarchar(10)
not
null,
Upassword
nvarchar(20)
not
null,
)
create
table
Dish(
Did
nvarchar(3)
primary
key
not
null,
Dname
nvarchar(20)
not
null,
Dintroduction
nvarchar(200)
not
null
default
'暫無介紹',
Dpic
nvarchar(200),
Dsteps
nvarchar(200)
not
null,
Dmaterial
nvarchar(200)
not
null,
);
create
table
BookmarkList(
Uid
int
not
null
foreign
key(Uid)
references
Users(Uid)
on
delete
cascade,
Did
int
not
null
foreign
key(Did)
references
Dish(Did)
on
delete
cascade,
)客戶端/服務(wù)端協(xié)議,分析指令。為了節(jié)省流量,也為了通信的安全性,我們建立了客戶端和服務(wù)端之間的協(xié)議,用代碼和參數(shù)形式格式化傳遞請求和數(shù)據(jù):結(jié)果注冊界面2)登陸界面3)主頁面購物清單界面5)菜譜界面16)菜譜界面2總結(jié)與體會通過這次的課程設(shè)計,使我們了解了更多數(shù)據(jù)庫原理與應(yīng)用這門課程,對以前不太理解和熟悉的內(nèi)容有更多的掌握,特別是如何將數(shù)據(jù)庫放在服務(wù)器端并通過網(wǎng)絡(luò)通信實現(xiàn)與應(yīng)用程序的互連。有了上個學(xué)期數(shù)據(jù)庫作業(yè)的經(jīng)驗,這次課程設(shè)計中數(shù)據(jù)庫的建立和查詢語句就不是難點了。畫出E—R圖,建表,插入一些測試數(shù)據(jù),很快就完成了。但是,本次課設(shè),最具有挑戰(zhàn)性的工作其實是:Android
溫馨提示
- 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)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 二零二五年度職工住房借款與社區(qū)養(yǎng)老配套服務(wù)協(xié)議3篇
- 二零二五年度吊裝工程安全評估與監(jiān)督管理合同2篇
- 2025年辦公家具回收利用與環(huán)保處理合同3篇
- 極簡市場營銷(杰瑞20231224)
- 二零二五年度花椒采摘與旅游融合發(fā)展合同3篇
- 2024年陽泉煤業(yè)(集團(tuán))有限責(zé)任公司總醫(yī)院三礦醫(yī)院高層次衛(wèi)技人才招聘筆試歷年參考題庫頻考點附帶答案
- 2024年河南水利與環(huán)境職業(yè)學(xué)院高職單招數(shù)學(xué)歷年參考題庫含答案解析
- 2024年河北機電職業(yè)技術(shù)學(xué)院高職單招職業(yè)適應(yīng)性測試歷年參考題庫含答案解析
- 二零二五年度美食街?jǐn)偽蛔赓U及廣告投放合同3篇
- 2024年江蘇財經(jīng)職業(yè)技術(shù)學(xué)院高職單招職業(yè)適應(yīng)性測試歷年參考題庫含答案解析
- 2024年石家莊正定國際機場改擴(kuò)建工程合同
- 2025年度愛讀書學(xué)長定制化閱讀計劃合同2篇
- 河南省信陽市浉河區(qū)9校聯(lián)考2024-2025學(xué)年八年級上學(xué)期12月月考地理試題(含答案)
- 快速康復(fù)在骨科護(hù)理中的應(yīng)用
- 國民經(jīng)濟(jì)行業(yè)分類和代碼表(電子版)
- ICU患者外出檢查的護(hù)理
- 公司收購設(shè)備合同范例
- 廣東省潮州市2023-2024學(xué)年高二上學(xué)期語文期末考試試卷(含答案)
- 2024年光伏發(fā)電項目EPC總包合同
- 試卷(完整版)python考試復(fù)習(xí)題庫復(fù)習(xí)知識點試卷試題
- GB/T 44679-2024叉車禁用與報廢技術(shù)規(guī)范
評論
0/150
提交評論