基于HTTP通信協(xié)議課程提醒系統(tǒng)的方案設(shè)計(jì)_第1頁
基于HTTP通信協(xié)議課程提醒系統(tǒng)的方案設(shè)計(jì)_第2頁
基于HTTP通信協(xié)議課程提醒系統(tǒng)的方案設(shè)計(jì)_第3頁
基于HTTP通信協(xié)議課程提醒系統(tǒng)的方案設(shè)計(jì)_第4頁
基于HTTP通信協(xié)議課程提醒系統(tǒng)的方案設(shè)計(jì)_第5頁
已閱讀5頁,還剩52頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

PAGE4PAGE5基于HTTP通信協(xié)議課程提醒系統(tǒng)的方案設(shè)計(jì)摘要:“基于HTTP通信協(xié)議課程提醒系統(tǒng)的方案設(shè)計(jì)”設(shè)計(jì)的是一個(gè)管理課程安排的系統(tǒng),系統(tǒng)數(shù)據(jù)包括課程表和通知信息,通過廣泛使用的HTTP通信協(xié)議、客戶端和服務(wù)端技術(shù),對(duì)在校大學(xué)生所有與課程相關(guān)的信息進(jìn)行收集,解決了課程信息的查詢、提醒和更新相關(guān)問題。該系統(tǒng)針對(duì)不同的使用者身份定義了多種使用權(quán)限,實(shí)現(xiàn)使用權(quán)限的分級(jí)管理,是一個(gè)帶有云端服務(wù)器和手機(jī)客戶端的管理系統(tǒng),可以滿足用戶對(duì)課程的添加、提醒、更新、刪除的需求,以方便在校大學(xué)生更清晰的了解學(xué)校課程安排、事務(wù)分配和通知下達(dá)等。關(guān)鍵詞:課程表;HTTP通信協(xié)議;通信;

目錄30360第一章緒論 1308711.1設(shè)計(jì)背景 174441.2設(shè)計(jì)目的 2262691.3開發(fā)環(huán)境 24371.3.1硬件開發(fā)環(huán)境 2131261.3.2軟件開發(fā)環(huán)境 261941.4技術(shù)介紹 2138241.4.1HTTP 227071.4.2Java 320061.4.3SpringBoot 3205571.4.4Android 325238第二章系統(tǒng)分析 490552.1可行性分析 425702.2功能分析 4274302.2.1整體功能分析 461232.2.2服務(wù)端功能分析 5130582.2.3客戶端APP功能分析 52169第三章系統(tǒng)設(shè)計(jì) 7130663.1設(shè)計(jì)原則 753513.2數(shù)據(jù)庫設(shè)計(jì) 7254283.2.1概念模型 745923.2.2E-R圖(關(guān)系模型) 857983.2.3表 10318273.3模塊設(shè)計(jì) 13162683.3.1基于HTTP通信協(xié)議課程提醒系統(tǒng) 13271543.3.2課程提醒APP 13233253.3.3云端服務(wù) 1437373.4流程設(shè)計(jì) 1558843.4.1客戶端使用流程 15126093.4.2云端服務(wù)使用流程 1613400第四章關(guān)鍵問題解決與系統(tǒng)實(shí)現(xiàn) 17124914.1要解決的關(guān)鍵問題 17307154.1.1賬戶管理問題 17173464.1.2數(shù)據(jù)處理問題 17142384.1.3數(shù)據(jù)同步問題 18258314.2客戶端實(shí)現(xiàn) 18223064.2.1客戶端APP頁面(activity+fragment) 1851474.2.2客戶端登錄 19236524.2.3客戶端數(shù)據(jù)庫 2259784.2.4客戶端其它數(shù)據(jù)處理 23140114.3服務(wù)端實(shí)現(xiàn) 2412164.3.1Entity 25326144.3.2JpaRepository 26260504.3.3Service 26252064.3.4Controller 2712634.3.5Enum 2871584.3.6服務(wù)器的配置 28171444.3.7數(shù)據(jù)庫創(chuàng)建與同步 294958第五章客戶端與服務(wù)端的信息交互(HTTP協(xié)議) 32299135.1HTTP協(xié)議描述 32121805.2傳輸報(bào)文架構(gòu) 3372465.3Post和Get請(qǐng)求的使用 3341085.3.1Get請(qǐng)求 3353785.3.2Post請(qǐng)求 3531680第六章系統(tǒng)測試 38256216.1客戶端APP測試 3874506.1.1注冊測試 3812586.1.2登錄后數(shù)據(jù)獲取測試 3866686.1.3數(shù)據(jù)提交測試 4195716.2服務(wù)端測試 43209556.2.1通過IDEA進(jìn)行的test 4353576.2.2調(diào)用接口的測試 4457496.2.3jar包的導(dǎo)出 4512996.3測試結(jié)論 459545第七章總結(jié) 46285207.1項(xiàng)目成果概述 4610117.2主要困難及難點(diǎn) 46215167.2.1頁面的轉(zhuǎn)跳與銷毀 46182397.2.2本周課程展示 46238377.2.3系統(tǒng)的構(gòu)建 46162077.3不足與改進(jìn) 4658317.3.1系統(tǒng)不足 4666337.3.2改進(jìn)思想 47104577.4收獲心得體會(huì) 4721557第八章結(jié)語 499739參考文獻(xiàn) 50計(jì)PAGE52PAGE51第一章緒論1.1設(shè)計(jì)背景目前絕大多數(shù)的Web開發(fā),都是構(gòu)建在HTTP協(xié)議之上的Web應(yīng)用[1]。課程提醒系統(tǒng)也是這樣的設(shè)定。在當(dāng)今的社會(huì),大學(xué)生是一個(gè)龐大的群體,大學(xué)招生人數(shù)也在逐年增長,在校大學(xué)生數(shù)量也隨著增長,因此,大學(xué)生的個(gè)人課程表就成了每個(gè)大學(xué)生必不可少的工具,課程表也越來越不滿足于老式的紙質(zhì)文檔形式,需要更多的創(chuàng)新。有人認(rèn)為,時(shí)間表問題是最困難的作業(yè)調(diào)度問題之一。大學(xué)課程表問題以其規(guī)模大、涉及因素多、結(jié)構(gòu)復(fù)雜著稱,故由集成系統(tǒng)較為困難。[2]應(yīng)用市場已經(jīng)出現(xiàn)了一些優(yōu)秀的課表系統(tǒng),如“超級(jí)課程表”等?!俺?jí)課程表”是廣州超級(jí)周末科技有限公司旗下一款針對(duì)大學(xué)生的校園應(yīng)用。它功能強(qiáng)大且復(fù)雜,但是不可避免的,“超級(jí)課程表”與類似APP都忽略了教師群體,且針對(duì)教師所設(shè)計(jì)的超級(jí)課程表顯得過于簡單,無法滿足需要[3]?!俺?jí)課程表”的其中一個(gè)弊端就是所含的信息非常駁雜,更傾向“大學(xué)社交”、“信息交流”之類,對(duì)學(xué)生干擾嚴(yán)重,大有發(fā)展成娛樂系統(tǒng)的趨勢。學(xué)校老師和領(lǐng)導(dǎo)也幾乎不會(huì)采用。這些信息化的課表使教學(xué)和學(xué)生幾乎脫節(jié),無法滿足學(xué)生真正的需求。大學(xué)的上課方式與高中最大的不同是沒有固定的教室,學(xué)生需要在不同的地方上課。這種靈活的上課安排,一旦變動(dòng),如老師病假或其它原因需要補(bǔ)課調(diào)課的話,事情就變得很復(fù)雜。除了上課的安排,作業(yè)的上交通知、輔導(dǎo)員的信息收集通知,班會(huì)的召開通知等也是需要靈活安排的事務(wù)。課程調(diào)動(dòng)或者其它通知都需要傳達(dá)給我們這些學(xué)生,通常我們是在微信群或者QQ群里面發(fā)送消息進(jìn)行通知。在我看來群消息過分駁雜,幾乎是任何人都有在群里發(fā)言的權(quán)力。通知過早會(huì)被其它消息“刷”上去,通知過晚則學(xué)生來不及準(zhǔn)備也可能沒有來得及發(fā)現(xiàn)消息。也經(jīng)常會(huì)有同學(xué)錯(cuò)過一些通知,上課跑錯(cuò)教室,作業(yè)忘記攜帶也是常有的事情。這些疏忽可能是部分學(xué)生個(gè)人原因,但是我認(rèn)為消息傳達(dá)的方式也是造成這種現(xiàn)象的重要原因。為了避免駁雜的消息干擾的學(xué)生對(duì)有用信息的獲取,“基于HTTP通信協(xié)議課程提醒系統(tǒng)的方案設(shè)計(jì)”設(shè)想就出現(xiàn)了。需要用到的技術(shù)包括HTTP協(xié)議、Web服務(wù)器和Android技術(shù)。

1.2設(shè)計(jì)目的基于HTTP通信協(xié)議的課程提醒系統(tǒng)是一個(gè)管理課程安排的系統(tǒng),系統(tǒng)數(shù)據(jù)包括課程表和課程通知,旨在將在校大學(xué)生所有與課程相關(guān)的信息收集起來,避免大學(xué)生因?yàn)槭虑檫^多而無法準(zhǔn)確接收到有用信息的情況。該系統(tǒng)的用戶包括學(xué)校管理者(輔導(dǎo)員或院長等)、學(xué)校教授者(教授、講師等老師)、班級(jí)管理者(學(xué)習(xí)委員)、普通學(xué)生。所有用戶身份的權(quán)限各不相同。1.3開發(fā)環(huán)境1.3.1硬件開發(fā)環(huán)境處理器:Intel(R)Corei5-6200UCPU@2.3GHz(4CPUs),-2.4GHz內(nèi)存:4096MBRAM1.3.2軟件開發(fā)環(huán)境操作系統(tǒng):Windows10專業(yè)版軟硬件開發(fā)工具:AndroidStudio、KeiluVision5、IntelliJIDEA2019.2x64數(shù)據(jù)庫工具:MySQLWorkbench6.3CE、NavicatPremium開發(fā)語言:Java、C++調(diào)試查看工作:Postman、GoogleChrome瀏覽器、InternetExplorer瀏覽器項(xiàng)目管理工具:MindMaster、GitHab1.4技術(shù)介紹1.4.1HTTPHTTP是目前在Internet上應(yīng)用最廣泛的通信協(xié)議之一。HTTP通信協(xié)議允許用戶提出HTTP“請(qǐng)求”,然后由服務(wù)器視實(shí)際處理結(jié)果傳回HTIP“回應(yīng)”?;具\(yùn)行方式為:當(dāng)用戶向Web服務(wù)器送出請(qǐng)求時(shí),Web服務(wù)器將會(huì)開啟一個(gè)新連接。通過這個(gè)連接,用戶可以將HTIP請(qǐng)求傳送給Web服務(wù)器。當(dāng)Web服務(wù)器收到HTTP請(qǐng)求時(shí),將進(jìn)行解析與處理,并將處理結(jié)果包裝成HTTP回應(yīng)。最后,Web服務(wù)器會(huì)將HTTP回應(yīng)傳送至用戶。只要用戶接收到HTTP回應(yīng),Web服務(wù)器就會(huì)關(guān)閉這個(gè)連接,用戶的執(zhí)行狀態(tài)不會(huì)被保存。[4]

1.4.2JavaJava是一門面向?qū)ο缶幊陶Z言,具有功能強(qiáng)大和簡單易用兩個(gè)特征。Java語言作為靜態(tài)面向?qū)ο缶幊陶Z言的代表,極好地實(shí)現(xiàn)了面向?qū)ο罄碚摗ava具有簡單性、面向?qū)ο?、分布式、健壯性、安全性、平臺(tái)獨(dú)立與可移植性、多線程、動(dòng)態(tài)性等特點(diǎn)。Java可以編寫桌面應(yīng)用程序、Web應(yīng)用程序、分布式系統(tǒng)和嵌入式系統(tǒng)應(yīng)用程序等。[5]1.4.3SpringBootSpringBoot是由Pivotal團(tuán)隊(duì)提供的全新框架,它基于Spring4.0設(shè)計(jì),不僅繼承了Spring框架原有的優(yōu)秀特性,而且還通過簡化配置來進(jìn)一步簡化了Spring應(yīng)用的整個(gè)搭建和開發(fā)過程。另外SpringBoot通過集成大量的框架使得依賴包的版本沖突,以及引用的不穩(wěn)定性等問題得到了很好的解決。[6]1.4.4AndroidAndroid是一種基于Linux的自由及開放源代碼的操作系統(tǒng),Android分為四個(gè)層,從高層到低層分別是應(yīng)用程序?qū)?、?yīng)用程序框架層、系統(tǒng)運(yùn)行庫層和Linux內(nèi)核層。谷歌公司推出了開源的Android系統(tǒng),現(xiàn)在應(yīng)用非常廣泛,開發(fā)環(huán)境不會(huì)受到各種條條框框的限制,開發(fā)者任意修改開放的源代碼來實(shí)現(xiàn)與開發(fā)各種實(shí)用的手機(jī)App軟件,具有高級(jí)圖形顯示、界面友好等特點(diǎn)。[7]

第二章系統(tǒng)分析2.1可行性分析通過HTTP通信協(xié)議完成客戶端和服務(wù)端的數(shù)據(jù)傳輸,實(shí)現(xiàn)用戶對(duì)數(shù)據(jù)的添加、查詢、更改、刪除操作。采用HTTP通信協(xié)議進(jìn)行客戶端與云端數(shù)據(jù)交互。采用騰訊云服務(wù)器進(jìn)行云端服務(wù)器的搭建。使用java語言+AndroidStudio進(jìn)行手機(jī)APP的開發(fā)。使用java語言+IntelliJIDEA+SpringBoot框架進(jìn)行云端服務(wù)器搭建。使用SQLite作為APP內(nèi)部數(shù)據(jù)存儲(chǔ)的數(shù)據(jù)庫。使用MySQL作為云端服務(wù)局的數(shù)據(jù)庫。以上所述均為已經(jīng)成熟的技術(shù),整體上運(yùn)行穩(wěn)定,故障率低,只有部分系統(tǒng)優(yōu)化時(shí),需要采用一些算法。因?yàn)檎n程表和事件通知不存在保密需求,所以不必采用加密算法。除此之外,安卓開發(fā)的部分功能實(shí)現(xiàn)需要進(jìn)行學(xué)習(xí),學(xué)習(xí)量在可承受范圍內(nèi)。2.2功能分析2.2.1整體功能分析賬戶管理功能初定計(jì)劃為單個(gè)大學(xué)設(shè)計(jì),可運(yùn)行在學(xué)校私有服務(wù)器上,提供給該校學(xué)生賬戶。如果需要擴(kuò)展為運(yùn)行在某個(gè)服務(wù)器且為多個(gè)高校學(xué)生賬戶提供服務(wù),有數(shù)據(jù)沖突概率,但基本可行。賬戶身份包括:待定、管理員、教師、學(xué)委、學(xué)生。由管理員賬戶更改普通用戶賬戶的身份分類同時(shí)系統(tǒng)將賦予被分類用戶各種操作權(quán)限。用戶上傳功能可上傳與用戶本人賬戶相關(guān)的信息。可上傳對(duì)其所管理人員的通知信息??缮蟼鲗?duì)其所管理人員賬戶的更改信息。管理者可上傳其所在學(xué)校的學(xué)校信息。管理者可上傳與課程相關(guān)的一切信息。教師和學(xué)委可上傳對(duì)“課時(shí)表”的更改信息,即可以多次更改單節(jié)課程安排。用戶查詢功能用戶可查詢所有自己有上傳權(quán)限的信息。學(xué)生和學(xué)委可以查詢自己所在班級(jí)的開課信息。所有用戶都可以查看自己所在學(xué)校的學(xué)校信息。系統(tǒng)顯示功能不提供網(wǎng)頁端操作的用戶系統(tǒng)顯示,僅提供服務(wù)器的開發(fā)者操作系統(tǒng)。提供手機(jī)安卓客戶端系統(tǒng)操作顯示,且根據(jù)用戶權(quán)限不同所顯示的內(nèi)容略有不同。2.2.2服務(wù)端功能分析作為云端服務(wù),服務(wù)端提供了課程提醒的各種訪問請(qǐng)求接口,包括:用戶注冊信息的增刪查改接口用戶身份信息的增刪改查接口課程表的增刪改查接口選修表的增刪改查接口課時(shí)表的增刪改查接口通知表的增刪改查接口學(xué)校信息表的增刪改查接口除此之外,服務(wù)端有MySQL數(shù)據(jù)庫的存在,可以直接對(duì)數(shù)據(jù)庫進(jìn)行修改,大大減輕了移動(dòng)端的功能需求壓力。2.2.3客戶端APP功能分析用戶可進(jìn)行賬號(hào)注冊,注冊賬號(hào)默認(rèn)身份信息為“待定”,等待管理員更改身份信息。用戶可登錄自身賬號(hào),并對(duì)部分賬號(hào)信息做出修改。用戶可獲取用戶表信息,即自身的基本信息。移動(dòng)端根據(jù)登錄賬號(hào)的用戶身份判斷并獲取對(duì)應(yīng)身份的身份信息。如:課時(shí)安排、通知信息、查詢權(quán)限等。用戶獲取課時(shí)安排信息,身份不同,課時(shí)安排不同。用戶獲取通知信息,身份不同,通知信息不同。用戶如果為“教師”身份,可查詢?nèi)W(xué)生基本信息。用戶如果為“學(xué)委”身份,可查詢同班級(jí)學(xué)生基本信息。所有身份非“待定”用戶,均可查詢學(xué)校信息,即OtherInfo表信息?!皩W(xué)生”或“學(xué)委”身份,可以查看自己班級(jí)選修情況?!敖處煛鄙矸菘梢圆榭醋约航淌谡n程的選修情況。移動(dòng)端需負(fù)責(zé)計(jì)算當(dāng)前周是第幾周,并查詢顯示當(dāng)前周課程安排。

第三章系統(tǒng)設(shè)計(jì)3.1設(shè)計(jì)原則本系統(tǒng)遵循以下基本設(shè)計(jì)原則:實(shí)用性:盡量選擇成熟實(shí)用的技術(shù),使得整個(gè)系統(tǒng)有一個(gè)安全、穩(wěn)定的運(yùn)行環(huán)境。安全性:為了保障系統(tǒng)平穩(wěn)正常的運(yùn)行,以及數(shù)據(jù)的完整性,整個(gè)系統(tǒng)必須有很好的安全性,必須加強(qiáng)數(shù)據(jù)庫的安全保密設(shè)計(jì)。開放性:該系統(tǒng)在建設(shè)上必須加強(qiáng)標(biāo)準(zhǔn)化及采用統(tǒng)一的技術(shù)規(guī)范,以實(shí)現(xiàn)網(wǎng)絡(luò)互聯(lián),資源共享,高效運(yùn)行和科學(xué)管理。[8]3.2數(shù)據(jù)庫設(shè)計(jì)本次設(shè)計(jì)共采用兩個(gè)數(shù)據(jù)庫類型,一個(gè)是安卓自帶數(shù)據(jù)庫(SQLite),一個(gè)是服務(wù)端數(shù)據(jù)庫(MySOL)。兩個(gè)數(shù)據(jù)庫的表完全一致,但是建表方式存在很大區(qū)別。3.2.1概念模型用戶:(用戶賬號(hào)、姓名、性別、身份證號(hào)、用戶昵稱、用戶密碼、電話號(hào)碼、學(xué)校代碼、身份)管理者:(管理者編號(hào)、用戶賬號(hào)、學(xué)院名稱、是否admin添加、姓名)教師:(教師編號(hào)、用戶賬號(hào)、姓名、教師介紹)學(xué)生:(學(xué)號(hào)、姓名、班級(jí)編號(hào)、管理者編號(hào)、用戶賬號(hào))學(xué)委:(學(xué)號(hào)、姓名、班級(jí)編號(hào)、用戶賬號(hào))課程:(課程編號(hào)、課程名、課程介紹)選修:(選修編號(hào)、課程編號(hào)、課程名、教師編號(hào)、教師姓名、班級(jí)編號(hào)、上課安排)課時(shí):(課時(shí)編號(hào)、課程編號(hào)、教師編號(hào)、班級(jí)編號(hào)、上課地點(diǎn)、周星期節(jié)、課程名、教師姓名)通知:(通知編號(hào)、創(chuàng)建人、通知分類、通知內(nèi)容、發(fā)布時(shí)間、失效時(shí)間、班級(jí)編號(hào)、姓名)其它:(學(xué)校代碼、學(xué)校名稱、第一周日期、作息時(shí)間、第一節(jié)、第二節(jié)、第三節(jié)、第四節(jié)、第五節(jié)、第六節(jié)、第七節(jié)、第八節(jié)、第九節(jié)、第十節(jié)、第十一節(jié)、第十二節(jié)、第十三節(jié)、第十四節(jié))班級(jí):(班級(jí)編號(hào)、班級(jí)名、學(xué)校代碼、學(xué)委學(xué)號(hào))

3.2.2E-R圖(關(guān)系模型)基于HTTP通信協(xié)議課程提醒系統(tǒng)的數(shù)據(jù)庫E-R圖如圖3-1所示。圖3-1數(shù)據(jù)庫關(guān)系模型

基于HTTP通信協(xié)議課程提醒系統(tǒng)的數(shù)據(jù)庫詳細(xì)關(guān)系模型如圖3-2所示。圖3-2數(shù)據(jù)庫詳細(xì)關(guān)系模型

3.2.3表數(shù)據(jù)庫表共11個(gè),其中服務(wù)端MySQL數(shù)據(jù)表有11個(gè),移動(dòng)端數(shù)據(jù)表共3個(gè),如表3-1至表3-11所示。表3-1用戶表UserInfo(僅存在于服務(wù)端)序號(hào)屬性名字段名數(shù)據(jù)類型字段長度字段說明1用戶賬號(hào)user-idchar16主鍵,由系統(tǒng)生成,每個(gè)用戶唯一(2-17位)2姓名user-namechar16用戶身份證上的名字3性別user-sexchar4用戶的性別(限定)4身份證號(hào)id-numberchar32身份證號(hào)5用戶昵稱user-nicknamevchar32用戶的昵稱6用戶密碼user-passwordvchar32密碼,長度6-20位7電話號(hào)碼user-telephonechar16用戶的聯(lián)系電話8學(xué)校代碼school-idvchar16用戶所在學(xué)校的編碼9身份user-capacityvchar8用戶身份包括(教師、學(xué)生、學(xué)委、管理者、待定)表3-2管理者表InstructorInfo(僅存在于服務(wù)端)序號(hào)屬性名字段名數(shù)據(jù)類型字段長度字段說明1管理者編號(hào)instructor-idvchar32主鍵,由管理者設(shè)置(學(xué)校代碼+管理者編號(hào))2用戶賬號(hào)user-idchar16外鍵,用戶表的主鍵3學(xué)院名稱institute-namevchar32管理者隸屬學(xué)院的名稱(可以為空)4是否admin添加is-adminbit1記錄是否為權(quán)限管理員賬戶5姓名user-namechar16管理者的姓名表3-3教師表TeacherInfo(僅存在于服務(wù)端)序號(hào)屬性名字段名數(shù)據(jù)類型字段長度字段說明1教師編號(hào)teacher-idvchar32主鍵,由管理者設(shè)置(學(xué)校代碼+教師編號(hào))2用戶賬號(hào)user-idchar16外鍵,用戶表的主鍵3姓名user-namechar16教師姓名4教師介紹teacher-introductiontext介紹類似職稱和成就等相關(guān)信息表3-4學(xué)生表StudentInfo(僅存在于服務(wù)端)序號(hào)屬性名字段名數(shù)據(jù)類型字段長度字段說明1學(xué)號(hào)student-idvchar32主鍵,由管理者設(shè)置規(guī)則(學(xué)校代碼+學(xué)號(hào))2姓名user-namechar16學(xué)生姓名3班級(jí)編號(hào)class-idvchar32外鍵,班級(jí)表的主鍵4管理者編號(hào)instructor-idvchar32外鍵,管理者表的主鍵5用戶賬號(hào)user-idchar16外鍵,用戶表的主鍵表3-5學(xué)委表StudyInfo(僅存在于服務(wù)端)序號(hào)屬性名字段名數(shù)據(jù)類型字段長度字段說明1學(xué)號(hào)student-idvchar32主鍵,由管理者設(shè)置規(guī)則(學(xué)校代碼+學(xué)號(hào))2姓名user-namechar16學(xué)生姓名3班級(jí)編號(hào)class-idvchar32外鍵,班級(jí)表的主鍵4用戶賬號(hào)user-idchar16外鍵,用戶表的主鍵表3-6課程表CurriculumInfo(僅存在于服務(wù)端)序號(hào)屬性名字段名數(shù)據(jù)類型字段長度字段說明1課程編號(hào)curriculum-idvchar32主鍵,由管理者設(shè)置(學(xué)校代碼+課程編號(hào))2課程名curriculum-namevchar64課程的命名3課程介紹curriculum-introductiontext簡要介紹課程內(nèi)容表3-7選修表ElectiveInfo(不僅存在于服務(wù)端,也存在于移動(dòng)端)序號(hào)屬性名字段名數(shù)據(jù)類型字段長度字段說明1選修編號(hào)elective-idvchar32主鍵,由管理員設(shè)置,課程對(duì)應(yīng)到上課班級(jí)(學(xué)校代碼+選修編號(hào))2課程編號(hào)curriculum-idvchar32外鍵,課程表的主鍵3課程名curriculum-namevchar64課程的命名4教師編號(hào)teacher-idvchar32外鍵,教師表的主鍵5教師姓名teacher-namechar16教師姓名6班級(jí)編號(hào)class-idvchar32外鍵,班級(jí)表的主鍵7上課安排course-arrangementtext用文字存儲(chǔ)上課的時(shí)間地點(diǎn)教師等信息表3-8課時(shí)表HoursInfo(不僅存在于服務(wù)端,也存在于移動(dòng)端)序號(hào)屬性名字段名數(shù)據(jù)類型字段長度字段說明1課時(shí)編號(hào)hour-idvchar32主鍵,由管理員設(shè)置,每節(jié)課都有對(duì)應(yīng)的課時(shí)編號(hào)(學(xué)校代碼+課時(shí)編號(hào))2課程編號(hào)curriculum-idvchar32外鍵,課程表的主鍵3教師編號(hào)teacher-idvchar32外鍵,教師表的主鍵4班級(jí)編號(hào)class-idvchar32外鍵,班級(jí)表的主鍵5上課地點(diǎn)curriculum-placevchar32上課的地點(diǎn),如教室或者集合地點(diǎn)6周星期節(jié)hour-timevchar8當(dāng)前課程是第幾周星期幾第幾節(jié)(格式:xx-x-xx)7課程名curriculum-namevchar64課程的命名8教師姓名teacher-namechar16教師姓名

表3-9通知表NotificationInfo(不僅存在于服務(wù)端,也存在于移動(dòng)端)序號(hào)屬性名字段名數(shù)據(jù)類型字段長度字段說明1通知編號(hào)notification-idint32主鍵,自動(dòng)增長2創(chuàng)建人created-byvchar32創(chuàng)建通知的人(用戶賬號(hào))3通知分類notification-classifychar8通知分類(作業(yè)、考試、活動(dòng)、收集、提示、檢查、課程)4通知內(nèi)容notification-contenttext詳細(xì)描述通知的目標(biāo)事件5發(fā)布時(shí)間release-timevchar32通知生成的時(shí)間6失效時(shí)間dead-timevchar32通知被自動(dòng)刪除的時(shí)間(默認(rèn)刪除時(shí)間)7班級(jí)編號(hào)class-idvchar32外鍵,班級(jí)表的主鍵8姓名user-namechar16用戶身份證上的名字表3-10其它信息表OtherInfo(僅存在于服務(wù)端)序號(hào)屬性名字段名數(shù)據(jù)類型字段長度字段說明1學(xué)校代碼school-idvchar16主鍵,由管理員設(shè)置2學(xué)校名稱school-namevchar32學(xué)校名稱3第一周日期first-weekvchar16學(xué)校開課的日期,實(shí)際系統(tǒng)會(huì)進(jìn)行計(jì)算4作息時(shí)間regular-timevchar8課程持續(xù)時(shí)長,單位為分鐘5第一節(jié)lesson-onevchar32第一節(jié)課的開始時(shí)間6第二節(jié)lesson-twovchar33第二節(jié)課的開始時(shí)間7第三節(jié)lesson-threevchar34第三節(jié)課的開始時(shí)間8第四節(jié)lesson-fourvchar35第四節(jié)課的開始時(shí)間9第五節(jié)lesson-fivevchar36第五節(jié)課的開始時(shí)間10第六節(jié)lesson-sixvchar37第六節(jié)課的開始時(shí)間11第七節(jié)lesson-sevenvchar38第七節(jié)課的開始時(shí)間12第八節(jié)lesson-eightvchar39第八節(jié)課的開始時(shí)間13第九節(jié)lesson-ninevchar40第九節(jié)課的開始時(shí)間14第十節(jié)lesson-tenvchar41第十節(jié)課的開始時(shí)間15第十一節(jié)lesson-elevenvchar42第十一節(jié)課的開始時(shí)間16第十二節(jié)lesson-twelvevchar43第十二節(jié)課的開始時(shí)間17第十三節(jié)lesson-thirteenvchar44第十三節(jié)課的開始時(shí)間18第十四節(jié)lesson-fourteenvchar45第十四節(jié)課的開始時(shí)間表3-11班級(jí)表ClassInfo(僅存在于服務(wù)端)序號(hào)屬性名字段名數(shù)據(jù)類型字段長度字段說明1班級(jí)編號(hào)class-idvchar32主鍵,由管理員設(shè)置(學(xué)校代碼+班級(jí)編號(hào))2班級(jí)名class-namevchar32班級(jí)名(如xx級(jí)xxxxxx專業(yè)xx班3學(xué)校代碼school-idvchar16外鍵,其它信息表的主鍵4學(xué)委學(xué)號(hào)student-idvchar32學(xué)委表的主鍵

3.3模塊設(shè)計(jì)3.3.1基于HTTP通信協(xié)議課程提醒系統(tǒng)基于HTTP通信協(xié)議課程提醒系統(tǒng)分為兩大塊,這兩大模塊之間靠著HTTP通信協(xié)議聯(lián)系,如下圖3-3是課程提醒系統(tǒng)的設(shè)計(jì)展示。圖3-3基于HTTP通信協(xié)議課程提醒系統(tǒng)概要3.3.2課程提醒APP課程提醒APP含有引導(dǎo)頁面1個(gè),登錄頁面2個(gè),注冊頁面3個(gè),主頁面3個(gè),第二個(gè)主頁面含轉(zhuǎn)跳頁面2個(gè),第三個(gè)主頁面含轉(zhuǎn)跳頁面9個(gè),分別為用戶信息、身份信息、學(xué)校信息、身份操作、設(shè)置、關(guān)于以及三個(gè)待定。其中用戶信息頁面含轉(zhuǎn)跳頁面5個(gè),身份操作含直接轉(zhuǎn)跳頁面6個(gè),二級(jí)轉(zhuǎn)跳頁面4個(gè)。一共35個(gè)頁面。如下圖3-4是課程提醒手機(jī)APP的設(shè)計(jì)展示。圖3-4基于HTTP通信協(xié)議課程提醒系統(tǒng)安卓移動(dòng)端概要

3.3.3云端服務(wù)云端服務(wù)建立在對(duì)數(shù)據(jù)的操作上,包括增刪改查、數(shù)據(jù)傳輸?shù)取V饕翘峁┡c數(shù)據(jù)庫相關(guān)的各種接口,包括UserInfo表相關(guān)接口、InstructorInfo表相關(guān)接口、StudentInfo表相關(guān)接口、StudyInfo表相關(guān)接口、TeacherInfo表相關(guān)接口、CurriculumInfo表相關(guān)接口、ElectiveInfo表相關(guān)接口、HoursInfo表相關(guān)接口、NotificationInfo表相關(guān)接口、OtherInfo表相關(guān)接口、ClassInfo表相關(guān)接口。課程提醒系統(tǒng)后臺(tái)接口中,數(shù)據(jù)表字段和入?yún)⒌挠成潢P(guān)系如例:class_id>classId每個(gè)表的相關(guān)接口各不相同,但是接口地址的生成規(guī)則一致,以UserInfo表相關(guān)接口為例:|接口地址|接口參數(shù)|接口說明||/table/user/save|入?yún)閁serInfo表的所有字段|傳入賬號(hào)信息,返回保存結(jié)果||/table/user/findByUserId|userId|傳入用戶賬號(hào),校驗(yàn)后返回結(jié)果||/table/user/findByIdNumber|idNumber|傳入用戶身份證號(hào),校驗(yàn)后返回結(jié)果||/table/user/findBySchoolId|schoolId|傳入學(xué)校代碼,校驗(yàn)后返回結(jié)果||/table/user/findByUserIdAndUserPassword|userId,password|傳入用戶賬號(hào)和密碼,校驗(yàn)后返回結(jié)果||/table/user/findByIdNumberAndUserPassword|idNumber,password|傳入用戶身份證號(hào)和密碼,校驗(yàn)后返回結(jié)果||/table/user/deleteByUserId|userId|根據(jù)傳入的賬號(hào)刪除賬號(hào)信息||/table/user/deleteByUserIdAndUserPassword|userId,password|根據(jù)傳入的賬號(hào)和密碼刪除賬號(hào)信息|云端服務(wù)概要如圖3-5所示。圖3-5基于HTTP通信協(xié)議課程提醒系統(tǒng)云端接口設(shè)計(jì)3.4流程設(shè)計(jì)3.4.1客戶端使用流程該APP不支持游客訪問,如果需要使用,首先需要注冊賬號(hào),填寫部分個(gè)人信息和賬號(hào)設(shè)置信息。注冊賬號(hào)后身份默認(rèn)為“待定”,需等待后臺(tái)審核確認(rèn)注冊者身份,然后才會(huì)具有相應(yīng)的操作權(quán)限。如果注冊身份為“學(xué)生”或“學(xué)委”,則可以在APP“通知”頁查看到下發(fā)給所在班級(jí)的通知信息,通知內(nèi)容包括通知分類、具體事項(xiàng)、通知時(shí)間、通知人。如果注冊身份為“學(xué)生”或“學(xué)委”,可以在APP“課程”頁查看到所在班級(jí)的當(dāng)日詳細(xì)課時(shí)安排信息、本周大致課時(shí)安排、本學(xué)期選修課程內(nèi)容。如果注冊身份為“學(xué)委”,可以在APP“我的”進(jìn)入到身份操作頁面,進(jìn)行本班級(jí)學(xué)生信息查詢、針對(duì)所在班級(jí)的通知插入刪除、針對(duì)所在班級(jí)的課時(shí)更改。如果注冊身份為“教師”或“管理者”,則可以在APP“通知”頁查看到由該賬號(hào)下發(fā)給所有班級(jí)的通知信息,通知內(nèi)容包括通知分類、具體事項(xiàng)、通知時(shí)間、通知人。如果注冊身份為“教師”或“管理者”,可以在APP“課程”頁查看到與自己相關(guān)的當(dāng)日詳細(xì)課時(shí)安排信息、本周大致課時(shí)安排、本學(xué)期選修所需教授的課程內(nèi)容。如果注冊身份為“教師”或“管理者”,可以在APP“我的”進(jìn)入到身份操作頁面,進(jìn)行所有學(xué)生基本信息查詢、所有學(xué)委基本信息查詢、針對(duì)所有班級(jí)的通知插入刪除、針對(duì)所有班級(jí)的課時(shí)更改。3.4.2云端服務(wù)使用流程服務(wù)端主要針對(duì)開發(fā)者,由APP調(diào)用對(duì)應(yīng)的接口,從而實(shí)現(xiàn)相應(yīng)的功能。沒有web網(wǎng)頁的存在。首先由APP發(fā)起get或post請(qǐng)求,傳入相關(guān)信息。服務(wù)端根據(jù)收到的請(qǐng)求,判斷應(yīng)該執(zhí)行的操作,包括(每個(gè)表的增刪查改),如果是查取信息,服務(wù)端返回查取到的數(shù)據(jù),如果是其它操作,服務(wù)端返回massage消息,告知客戶端操作是否成功。除了APP通過HTTP通信協(xié)議訪問云端更改數(shù)據(jù)庫的使用方法外,也可以由服務(wù)端管理人員直接對(duì)數(shù)據(jù)庫進(jìn)行增刪改查操作,保證更高效的為使用者提供便捷服務(wù)。

第四章關(guān)鍵問題解決與系統(tǒng)實(shí)現(xiàn)4.1要解決的關(guān)鍵問題4.1.1賬戶管理問題賬戶管理問題解決方案如下:采用賬戶分級(jí)管理,避免不必要的損失,賬戶權(quán)限由高到低為:管理員(admin)、管理員、教師、學(xué)委、學(xué)生、待定。除待定賬戶以外,所有賬戶均分有兩個(gè)數(shù)據(jù)表存儲(chǔ)賬戶信息。因?yàn)榇嬖谳^多賬戶,故建議分學(xué)校運(yùn)行在私有服務(wù)器上,避免賬戶數(shù)據(jù)沖突導(dǎo)致混亂。如果無法分學(xué)校運(yùn)行系統(tǒng),則強(qiáng)制給數(shù)據(jù)庫表主鍵加上學(xué)校代碼以示區(qū)分,此方法仍存在數(shù)據(jù)過多加載時(shí)間過長的缺陷。4.1.2數(shù)據(jù)處理問題數(shù)據(jù)采集處理方法:多為用戶主動(dòng)錄入數(shù)據(jù)完成采集。管理者通過數(shù)據(jù)庫錄入采集。時(shí)間相關(guān)的數(shù)據(jù)部分通過安卓系統(tǒng)函數(shù)或數(shù)據(jù)庫函數(shù)聯(lián)網(wǎng)獲取。部分由系統(tǒng)計(jì)算生成。數(shù)據(jù)存儲(chǔ)處理方法:服務(wù)器端完全采用數(shù)據(jù)庫進(jìn)行數(shù)據(jù)存儲(chǔ)。客戶端采用網(wǎng)絡(luò)+數(shù)據(jù)庫+SharedPreference進(jìn)行數(shù)據(jù)存儲(chǔ)。數(shù)據(jù)庫設(shè)計(jì)僅達(dá)到并未完全達(dá)到3NF,但除了3NF外只有2NF。所有數(shù)據(jù)庫表的其它數(shù)據(jù)元素均依賴于主關(guān)鍵字。數(shù)據(jù)檢索處理方法:數(shù)據(jù)庫檢索和SharedPreference取值。進(jìn)行數(shù)據(jù)加工和變換后方便檢索??蛻舳硕嗖捎肧tring數(shù)據(jù)類型,數(shù)據(jù)庫中有int、char、vchar、text這四種數(shù)據(jù)類型。數(shù)據(jù)傳輸處理方法:采用HTTP通信傳輸協(xié)議,客戶端通過基于時(shí)間的輪詢機(jī)制和服務(wù)端進(jìn)行通信。通過HTTP的get請(qǐng)求向服務(wù)端發(fā)起請(qǐng)求,獲取服務(wù)端數(shù)據(jù)。通過HTTP的post請(qǐng)求向服務(wù)端提交數(shù)據(jù),服務(wù)端將數(shù)據(jù)存入數(shù)據(jù)庫。4.1.3數(shù)據(jù)同步問題數(shù)據(jù)同步問題解決方案如下:處理課程提醒信息的同步時(shí),因?yàn)閿?shù)據(jù)是提交給服務(wù)端進(jìn)行管理的,所以處理好客戶端和服務(wù)端的數(shù)據(jù)同步就好了。服務(wù)端不能發(fā)起請(qǐng)求,由客戶端的使用者手動(dòng)刷新同步或者系統(tǒng)自動(dòng)時(shí)間輪詢刷新同步。處理通知欄消息提醒響應(yīng)顯示時(shí),采用安卓客戶端Calendar()類進(jìn)行定時(shí)數(shù)據(jù)同步提醒。4.2客戶端實(shí)現(xiàn) 客戶端使用AndroidStudio進(jìn)行APP開發(fā),用到了三種布局格式,分別是:ConstraintLayout(約束布局)、LinearLayout(線性布局)、RelativeLayout(相對(duì)布局)。用到了大量控件、包括單選按鈕、普通按鈕、文本框、輸入框、圖像按鈕、滾動(dòng)條等。除此之外,還使用了Adapter適配器、ListView清單、Spinner列表選項(xiàng)框、Tost提示、AlertDialog對(duì)話框、Intent意圖、Fragment碎片、\o"6.2數(shù)據(jù)存儲(chǔ)與訪問之——SharedPreferences保存用戶偏好參數(shù)"SharedPreferences保存用戶偏好參數(shù)、\o"6.3.1數(shù)據(jù)存儲(chǔ)與訪問之——初見SQLite數(shù)據(jù)庫"SQLite數(shù)據(jù)庫存儲(chǔ)、兩種HTTP請(qǐng)求方式、JSON數(shù)據(jù)解析和安卓動(dòng)畫等。使用以上技術(shù),搭建的客戶端APP實(shí)現(xiàn)了通知消息的顯示、查詢、刪除,課程安排的顯示、查詢、刪除,個(gè)人信息的顯示、查詢、刪除。4.2.1客戶端APP頁面(activity+fragment)采用activity+fragment的嵌套方式實(shí)現(xiàn)APP主頁功能呈現(xiàn),fragment有自己的控制函數(shù),如圖4-1所示。圖4-1fragment控制函數(shù)

4.2.2客戶端登錄采用登錄標(biāo)記判斷,選擇APP要呈現(xiàn)的頁面,代碼如圖4-2所示。圖4-2判斷引導(dǎo)頁面是否需要顯示的代碼登錄同時(shí)將聯(lián)網(wǎng)獲取到的賬號(hào)信息或輸入的賬號(hào)信息保存到本地?cái)?shù)據(jù)庫中。不僅保存到數(shù)據(jù)庫,而且存入SharedPreferences中,方便后續(xù)驗(yàn)證和使用。獲取用戶信息和學(xué)校信息,如圖4-3:圖4-3用戶信息和學(xué)校信息獲取請(qǐng)求代碼

判斷用戶身份并做出相應(yīng)操作,如圖4-4、圖4-5:圖4-4待定和管理者身份判斷圖4-5教師、學(xué)生和學(xué)委身份判斷

為了保證數(shù)據(jù)獲取不出錯(cuò),采用了兩個(gè)handler來等待頁面UI更新時(shí)機(jī)。如下圖4-6、圖4-7是handler函數(shù)代碼展示:圖4-6handler函數(shù)(1)圖4-7handler函數(shù)(2)4.2.3客戶端數(shù)據(jù)庫選修表建表,如圖4-8:圖4-8選修表建表函數(shù)課時(shí)表建表,如圖4-9:圖4-9課時(shí)表建表函數(shù)

通知表建表如圖4-10:圖4-10通知表建表函數(shù)4.2.4客戶端其它數(shù)據(jù)處理采用SharedPreferences存儲(chǔ),SharedPreferences緩存的參數(shù)包括:welcome——存儲(chǔ)判斷賬號(hào)是否登錄(start_main)userInfo——存儲(chǔ)用戶的信息(userId,userName,userSex,idNumber,userNickname,userPassword,userTelephone,schoolId,userCapacity)

(instructorId,instituteName,isAdmin)

(studentId,classId)

(teacherId,teacherIntroduction)

(3)otherInfo——存儲(chǔ)和課程相關(guān)的信息(schoolName,firstWeek,regularTime,lessonOne,lessonTwo,lessonThree,lessonFour,lessonFive,lessonSix,lessonSeven,lessonEight,lessonNine,lessonTen,lessonEleven,lessonTwelve,lessonThirteen,lessonFourteen)

圖4-11展示了客戶端SharedPreferences存儲(chǔ)代碼。圖4-11SharedPreferences存儲(chǔ)函數(shù)4.3服務(wù)端實(shí)現(xiàn)服務(wù)端的設(shè)計(jì)分為三個(gè)層次,分別是DAO層、Service層、Controller層。在這三個(gè)層次構(gòu)建之前,需要先對(duì)服務(wù)端應(yīng)用開發(fā)工具IDEA進(jìn)行配置,使其關(guān)聯(lián)到對(duì)應(yīng)數(shù)據(jù)庫。此外,還需要確認(rèn)服務(wù)端訪問地址以及進(jìn)行依賴包的配置與下載。DAO即DataAccessObject,負(fù)責(zé)服務(wù)程序與數(shù)據(jù)庫的字段關(guān)聯(lián)。Service層用于封裝DAO層操作,使一個(gè)方法表現(xiàn)為實(shí)現(xiàn)一種功能。Controller層是業(yè)務(wù)控制層,負(fù)責(zé)接收數(shù)據(jù)和請(qǐng)求,并且調(diào)用Service層實(shí)現(xiàn)對(duì)應(yīng)的業(yè)務(wù)邏輯。服務(wù)端的搭建代碼文件分為五大板塊,即Entity、JpaRepository、Service、Controller、Enum,這五大板塊的存在構(gòu)建了整個(gè)服務(wù),定義了客戶端請(qǐng)求路徑、響應(yīng)消息、數(shù)據(jù)格式等。

4.3.1Entity這是一個(gè)對(duì)應(yīng)數(shù)據(jù)庫表的類,以選修表的映射為例,如圖4-12。圖4-12選修表的映射為例代碼

4.3.2JpaRepository以選修表的JpaRepository為例,利用自定義接口繼承系統(tǒng)接口,如圖4-13。圖4-13選修表接口函數(shù)代碼4.3.3Service同樣以選修表的service為例。(1)interface,如圖4-14:圖4-14選修表Service函數(shù)代碼(2)serviceImpl,如圖4-15:圖4-15選修表ServiceImpl函數(shù)代碼4.3.4Controller同樣以選修表的controller為例,controller寫完后就可以使用訪問接口了。值得一提的是,controller層會(huì)返回json數(shù)據(jù),是云端服務(wù)搭建的最后一步,也是最重要的一步。它定義了HTTP協(xié)議訪問請(qǐng)求的路徑,定義了HTTP協(xié)議get請(qǐng)求和post請(qǐng)求的響應(yīng)效果,controller層函數(shù)代碼如圖4-16。圖4-16選修表controller層函數(shù)代碼

4.3.5Enum枚舉信息提示,定義message和code用于返回給前端或移動(dòng)端。由于系統(tǒng)未進(jìn)行詳細(xì)完善,故只定義兩個(gè)code,如圖4-17。圖4-17服務(wù)端枚舉定義代碼4.3.6服務(wù)器的配置每個(gè)平臺(tái)能提供的服務(wù)器都會(huì)存在或大或小的差異,基于HTTP通信協(xié)議課程提醒系統(tǒng)采用的是阿里云服務(wù)器。我購買的阿里云服務(wù)器版本是輕量級(jí)應(yīng)用服務(wù)器。以下為部分服務(wù)器配置過程。設(shè)置防火墻規(guī)則允許訪問數(shù)據(jù)庫端口,然后設(shè)置允許遠(yuǎn)程連接到root權(quán)限下的所有數(shù)據(jù)庫,命令:grantallprivilegeson*.*toroot@"%"identifiedby'86Eeef5d70ae';flushprivileges;安裝JDK,我采用的是linux在線安裝JDK,安裝版本為:1.8版本。命令:wget--no-check-certificate--no-cookies--header"Cookie:oraclelicense=accept-securebackup-cookie"/otn-pub/java/jdk/8u131-b11/d54c1d3a095b4ff2b6607d096fa80163/jdk-8u131-linux-x64.rpmJDK安卓包下載成功后,添加執(zhí)行權(quán)限,命令:chmod+xjdk-8u131-linux-x64.rpm執(zhí)行rpm進(jìn)行安裝,命令:rpm-ivhjdk-8u131-linux-x64.rpm查看JDK是否安裝成功,命令:java-version然后還需要編輯環(huán)境變量,編輯/etc/profile,進(jìn)行環(huán)境配置。通過XShell連接阿里云,使用拖拽方式將jar等文件上傳到云服務(wù)器。也可以使用rz命令進(jìn)行文件上傳。jar包的運(yùn)行:方法一:java-jardemo.jar特點(diǎn):當(dāng)前ssh窗口被鎖定,可按CTRL+C打斷程序運(yùn)行,或直接關(guān)閉窗口,程序退出方法二:java-jardemo.jar&特點(diǎn):當(dāng)前ssh窗口不被鎖定,但是當(dāng)窗口關(guān)閉時(shí),程序中止運(yùn)行。方法三:nohupjava-jardemo.jar&nohup代表不掛斷運(yùn)行命令,當(dāng)賬戶退出或終端關(guān)閉時(shí),程序仍然運(yùn)行。方法四:nohupjava-jardemo.jar>demo.log&其中>demo.log是將command的所有輸出重定向到demo.log文件。如果想殺掉運(yùn)行中的jar程序,查看進(jìn)程命令為:psaux|grepgetCimiss-surf.jar將會(huì)看到此jar的進(jìn)程信息data57960.00.0112656996pts/1S+09:110:00grep--color=autogetCimiss-surf.jardata307686.30.435468508576800Sl09:090:08java-jargetCimiss-surf.jar其中30768則為此jar的pid,殺掉進(jìn)程命令為:kill-9307684.3.7數(shù)據(jù)庫創(chuàng)建與同步在數(shù)據(jù)庫搭建問題上,我采用的是先搭建本地?cái)?shù)據(jù)庫,然后再使用NavicatPremium將數(shù)據(jù)庫同步到云端的方式。數(shù)據(jù)庫創(chuàng)建代碼如下圖4-18至圖4-23:圖4-18curriculum_info的創(chuàng)建代碼圖4-19other_info的創(chuàng)建代碼圖4-20user_info、instructor_info、class_info的創(chuàng)建代碼圖4-21student_info、study_info、teacher_info的創(chuàng)建代碼圖4-22elective_info、hours_info的創(chuàng)建代碼圖4-23notification_info的創(chuàng)建代碼

第五章客戶端與服務(wù)端的信息交互(HTTP協(xié)議)5.1HTTP協(xié)議描述(1)HTTP請(qǐng)求/響應(yīng)步驟:1.客戶端連接到Web服務(wù)器(TCP套接字連接)。2.發(fā)送HTTP請(qǐng)求(文本報(bào)文)。3.服務(wù)器接受請(qǐng)求并返回HTTP響應(yīng)(解析請(qǐng)求,定位請(qǐng)求資源,將資源復(fù)本寫到TCP套接字,客戶端讀?。?。4.釋放連接TCP連接。5.客戶端瀏覽器解析HTML內(nèi)容。(2)HTTP協(xié)議是基于TCP/IP協(xié)議之上的應(yīng)用層協(xié)議?;凇罢?qǐng)求-響應(yīng)”的模式工作。必需由客戶端向服務(wù)端發(fā)起請(qǐng)求,服務(wù)端不能在沒有收到請(qǐng)求報(bào)文時(shí)主動(dòng)傳輸數(shù)據(jù)。(3)無狀態(tài)保存,HTTP是一種無狀態(tài)協(xié)議,協(xié)議自身不對(duì)請(qǐng)求和響應(yīng)之間的通信狀態(tài)進(jìn)行保存,對(duì)于發(fā)送過的請(qǐng)求或響應(yīng)都不做持久化處理。(4)無連接,限制每次連接只處理一個(gè)請(qǐng)求。服務(wù)器處理完客戶的請(qǐng)求,并收到客戶的應(yīng)答后,即斷開連接。(5)HTTP協(xié)議中共定義了八種方法來以不同方式操作指定的資源,分別是:GET、HEAD、POST、PUT、DELETE、TRACE、OPTIONS、CONNECT。本設(shè)計(jì)只采用了GET和POST方法,這里對(duì)其做出詳細(xì)介紹:1、GET:向指定的資源發(fā)出“顯示”請(qǐng)求。使用GET方法應(yīng)該只用在讀取數(shù)據(jù)時(shí),其中一個(gè)原因是GET可能會(huì)被網(wǎng)絡(luò)蜘蛛等隨意訪問。2、POST:向指定資源提交數(shù)據(jù),請(qǐng)求服務(wù)器進(jìn)行處理。數(shù)據(jù)被包含在請(qǐng)求本文中。這個(gè)請(qǐng)求可能會(huì)創(chuàng)建新的資源或修改現(xiàn)有資源,或二者皆有。[9]

5.2傳輸報(bào)文架構(gòu)HTTP通信協(xié)議請(qǐng)求報(bào)文和響應(yīng)報(bào)文的格式如下圖5-1、圖5-2所示:圖5-1HTTP請(qǐng)求格式(請(qǐng)求協(xié)議)圖5-2HTTP響應(yīng)格式(響應(yīng)協(xié)議)5.3Post和Get請(qǐng)求的使用HTTP協(xié)議是完成安卓端和服務(wù)端信息交互不可或缺的協(xié)議,這里我通過HTTP的get請(qǐng)求向服務(wù)端發(fā)起請(qǐng)求,獲取服務(wù)端數(shù)據(jù)。通過HTTP的post請(qǐng)求向服務(wù)端提交數(shù)據(jù),服務(wù)端將數(shù)據(jù)存入數(shù)據(jù)庫??梢哉fHTTP協(xié)議是安卓端和服務(wù)端的溝通橋梁,也是課程提醒系統(tǒng)的重中之重。5.3.1Get請(qǐng)求(1)客戶端與服務(wù)端的信息交互get請(qǐng)求函數(shù)如圖5-3所示:圖5-3客戶端與服務(wù)端的信息交互get請(qǐng)求函數(shù)(2)get請(qǐng)求獲取的josn解析過程:整個(gè)安卓移動(dòng)端共有12個(gè)josn解析函數(shù),每個(gè)函數(shù)對(duì)應(yīng)不同get請(qǐng)求的返回?cái)?shù)據(jù),用于解析的服務(wù)端返回?cái)?shù)據(jù),數(shù)據(jù)解析完成后,可以將其轉(zhuǎn)存到安卓端數(shù)據(jù)庫或者SharedPreferences里面,如圖5-4所示。圖5-4josn解析函數(shù)

(3)get請(qǐng)求發(fā)起,如圖5-5、圖5-6所示:圖5-5get請(qǐng)求發(fā)起代碼(1)圖5-6get請(qǐng)求發(fā)起代碼(2)5.3.2Post請(qǐng)求(1)客戶端與服務(wù)端的信息交互post請(qǐng)求函數(shù)如圖5-7、圖5-8所示:圖5-7post請(qǐng)求函數(shù)代碼(1)圖5-8post請(qǐng)求函數(shù)代碼(2)(2)post請(qǐng)求發(fā)起:整個(gè)客戶端共有4個(gè)Post數(shù)據(jù)設(shè)置函數(shù),分別是注冊用戶賬號(hào)、注冊更改賬號(hào)信息、發(fā)送通知消息、更改課時(shí)。這四個(gè)函數(shù)是學(xué)生身份無法使用的,函數(shù)代碼如圖5-9、圖5-10所示。圖5-9post請(qǐng)求發(fā)起代碼(1)圖5-10post請(qǐng)求發(fā)起代碼(2)

第六章系統(tǒng)測試6.1客戶端APP測試軟件測試在軟件開發(fā)過程非常重要,在編寫代碼時(shí),測試就開始了。而每一階段編寫完成,又會(huì)分模塊進(jìn)行測試。其中測試用例的選取是很重要的,關(guān)系到測試路徑的覆蓋和測試的效果。當(dāng)然,bug的出現(xiàn)很難避免,我只能盡力完善該系統(tǒng)。6.1.1注冊測試(1)如下圖6-1至圖6-4,為安裝APP后首次啟動(dòng)的頁面展示到注冊完成的頁面展示測試:圖6-1 圖6-2 圖6-3 圖6-46.1.2登錄后數(shù)據(jù)獲取測試(1)如下圖6-5至圖6-10為“學(xué)生”身份登錄后主頁面Activity和Fragment的頁面展示測試:圖6-5 圖6-6 圖6-7圖6-8 圖6-9 圖6-10(2)以下為“學(xué)生”身份登錄后個(gè)人信息頁面及頁面按鈕點(diǎn)擊后的效果展示:1、用戶信息按鈕點(diǎn)擊效果如圖6-11至圖6-18所示。圖6-11 圖6-12 圖6-13 圖6-14圖6-15 圖6-16 圖6-17 圖6-182、身份信息按鈕點(diǎn)擊效果如圖6-19所示。3、學(xué)校信息按鈕點(diǎn)擊效果如圖6-20所示。圖6-19圖6-204、身份操作按鈕點(diǎn)擊效果如圖6-21至圖6-26所示。圖6-21 圖6-22 圖6-23圖6-24 圖6-25 圖6-26登錄身份除了“學(xué)生”,還有“管理者”、“教師”、“學(xué)委”和“待定”身份。經(jīng)測試,頁面展示大同小異?!敖處煛焙汀肮芾碚摺睋碛猩矸莶僮黜撁嫠械臋?quán)限,“學(xué)委”擁有查詢學(xué)生信息的權(quán)限。6.1.3數(shù)據(jù)提交測試這里以教師身份登錄,模擬一次通知插入過程,經(jīng)測試,通知插入成功。如下圖6-27至圖6-35所示:圖6-27 圖6-28 圖6-29圖6-30 圖6-31 圖6-32圖6-33 圖6-34 圖6-35

6.2服務(wù)端測試6.2.1通過IDEA進(jìn)行的test(1)以ClassRepository和ClassService為例,如圖6-36、圖6-37所示:圖6-36ClassRepository函數(shù)圖6-37ClassService函數(shù)

6.2.2調(diào)用接口的測試通過post和get請(qǐng)求,訪問服務(wù)端接口,修改云端信息并能獲取返回信息。(1)通過瀏覽器以網(wǎng)頁get方式訪問接口的返回?cái)?shù)據(jù),6為阿里云服務(wù)器地址,訪問響應(yīng)如圖6-38所示。圖6-38通過瀏覽器訪問服務(wù)端接口(2)postman采用post方式訪問接口的測試,訪問響應(yīng)如圖6-39所示。圖6-39通過postman訪問服務(wù)端接口

6.2.3jar包的導(dǎo)出當(dāng)服務(wù)端功能實(shí)現(xiàn)后,在Idea里面將工程打包成jar包,導(dǎo)出后可在電腦和云端服務(wù)器上運(yùn)行。運(yùn)行如圖6-40所示。圖6-40jar包運(yùn)行圖示6.3測試結(jié)論經(jīng)測試,服務(wù)端運(yùn)行良好,可通過Get和Post請(qǐng)求正常訪問。無論是通過瀏覽器、postman測試工具,還是在客戶端的測試過程中都表現(xiàn)良好。在客戶端的測試過程中,各頁面顯示良好,操作響應(yīng)迅速,響應(yīng)結(jié)果符合預(yù)期。成功實(shí)現(xiàn)了通知信息的加載和刪除、當(dāng)天課程的加載、本周課程的加載、學(xué)期選修課程的顯示、個(gè)人信息的獲取與顯示、個(gè)人信息的修改、學(xué)校信息的展示、“學(xué)生”與“學(xué)委”身份的用戶信息查詢、課時(shí)信息的增刪改查,刷新操作也取得了較好的效果。綜上所述,基于HTTP通信協(xié)議課程提醒系統(tǒng)通過測試,不同身份的賬戶使用體驗(yàn)良好,沒有出現(xiàn)數(shù)據(jù)沖突情況,客戶端的刪除、更改、插入請(qǐng)求也在服務(wù)端得到良好的同步,達(dá)成預(yù)期。

第七章總結(jié)7.1項(xiàng)目成果概述實(shí)現(xiàn)了服務(wù)端和移動(dòng)端通過HTTP通信協(xié)議進(jìn)行的信息同步和交互。實(shí)現(xiàn)了對(duì)課程信息和通知信息的更新和管理。實(shí)現(xiàn)了身份權(quán)限的區(qū)分操作。7.2主要困難及難點(diǎn)7.2.1頁面的轉(zhuǎn)跳與銷毀頁面轉(zhuǎn)跳十分簡單,但是由于嵌套了Fragment,跳轉(zhuǎn)時(shí)可能會(huì)出現(xiàn)找不到Fragment的現(xiàn)象。為了解決該錯(cuò)誤,需要在主頁面不可見時(shí)及時(shí)銷毀相關(guān)的Fragment,讓主頁面可見時(shí)能夠重新查詢到Fragment。7.2.2本周課程展示按星期展示課程的方式有很多種,可以通過增加數(shù)據(jù)庫字段來達(dá)到查詢需求。但是字段的增加也會(huì)增高異常風(fēng)險(xiǎn),還要考慮到時(shí)延問題。所以我自己重新設(shè)置的字段內(nèi)容的格式,用到了一些簡單的算法,實(shí)現(xiàn)了按星期展示課程的需求。7.2.3系統(tǒng)的構(gòu)建剛開始構(gòu)思課程提醒系統(tǒng)時(shí)困難重重,數(shù)據(jù)表的設(shè)計(jì)和HTTP返回?cái)?shù)據(jù)的需求設(shè)計(jì)都很具有挑戰(zhàn)性。由于沒有可供借鑒的設(shè)計(jì),只能折中處理,最終方案數(shù)據(jù)庫只達(dá)到了2NF,存在冗余。而安卓移動(dòng)端的信息更改操作受限,部分操作只能直接對(duì)數(shù)據(jù)庫進(jìn)行。7.3不足與改進(jìn)7.3.1系統(tǒng)不足基于HTTP通信協(xié)議的課程提醒系統(tǒng),重在通信協(xié)議和“提醒”。通信協(xié)議是整個(gè)系統(tǒng)連接的橋梁毋庸置疑,但是“提醒”的地位有待提升。該系統(tǒng)最終效果需要使用者手動(dòng)刷新,這一點(diǎn)有待改善。測試用例可能存在路徑不能完全覆蓋的問題,即部分bug未被發(fā)現(xiàn)。身份信息的更改、身份表的插入,需要通過數(shù)據(jù)庫進(jìn)行,客戶端不夠完善。因?yàn)樵撓到y(tǒng)面向大學(xué)生而設(shè)計(jì),所有沒有考慮信息加密問題,存在安全隱患。同時(shí),沒有身份驗(yàn)證也是系統(tǒng)的缺陷。7.3.2改進(jìn)思想采用時(shí)間輪詢刷新,獲取服務(wù)端最新數(shù)據(jù),保證客戶端和服務(wù)端高效同步。增加鬧鐘或鈴聲,作為課時(shí)更改和通知下達(dá)后的提醒方式。增加通知欄消息提醒。增加移動(dòng)端post請(qǐng)求函數(shù),增加移動(dòng)端修改和添加信息的操作,減小數(shù)據(jù)庫管理的壓力。優(yōu)化完善身份操作權(quán)限。7.4收獲心得體會(huì)通過這次的項(xiàng)目設(shè)計(jì),我發(fā)現(xiàn)了自己存在大量的不足。項(xiàng)目的實(shí)現(xiàn)過程經(jīng)歷了漫長的時(shí)間,整個(gè)開發(fā)過程充滿曲折。首先,我對(duì)知識(shí)點(diǎn)并不熟悉,實(shí)現(xiàn)過程都是邊學(xué)邊用。好處是在學(xué)習(xí)的同時(shí)可以運(yùn)用,加深了印象。壞處是浪費(fèi)時(shí)間,功能實(shí)現(xiàn)過于拖沓,而且無法對(duì)自己項(xiàng)目的實(shí)現(xiàn)過程擁有正確的估計(jì)和判斷,往往自己設(shè)定的目標(biāo)超過了自己的能力,不能完成開發(fā)任務(wù)。進(jìn)度估計(jì)的錯(cuò)誤導(dǎo)致自己一度感受到巨大的壓力,好在最終也算完成了項(xiàng)目的開發(fā)。說到項(xiàng)目的完成,雖然目前系統(tǒng)可以使用,但是是在原定功能上進(jìn)行了大量的壓縮和折中處理?,F(xiàn)在的系統(tǒng)放棄了很多功能的實(shí)現(xiàn),所以有較大的優(yōu)化空間,可以變得更加完善和高級(jí)。以上是我對(duì)項(xiàng)目實(shí)現(xiàn)程度的總結(jié),在實(shí)現(xiàn)過程中,我也學(xué)到了很多東西。我對(duì)Java語言和C++語言更加熟悉了。不管是什么編程語言,總是有他們的共通之處。java我并沒有系統(tǒng)學(xué)習(xí)過,但是在開發(fā)時(shí),我依靠對(duì)零星的知識(shí)點(diǎn)加以運(yùn)用,也無疑加深了我的熟練度。除此之外,我在使用studio時(shí),也學(xué)習(xí)到了更多控件的使用方式,了解了一些接口的實(shí)現(xiàn)過程,并且學(xué)會(huì)運(yùn)用很多新的定義函數(shù)和數(shù)據(jù)類型。然后是IDEA的使用,IDEA是搭建云端服務(wù)的工具。這雖然不是我第一次接觸到云端服務(wù),但是依舊只能依靠框架實(shí)現(xiàn)需求。我通過學(xué)習(xí)了SpringBoot,完成了整個(gè)搭建過程。同時(shí),我還學(xué)習(xí)了了MySQL數(shù)據(jù)庫,由于我對(duì)MySQL的使用需求不大,學(xué)習(xí)過程比較輕松。在搭建云端服務(wù)的過程中,我學(xué)習(xí)了一些阿里云的使用知識(shí),包括Linux命令、服務(wù)器配置、域名綁定等。當(dāng)然我也對(duì)服務(wù)器進(jìn)行了很多測試,我學(xué)會(huì)了利用“Postman”發(fā)送post請(qǐng)求、學(xué)會(huì)了用NavicatPremium查看數(shù)據(jù)庫、學(xué)會(huì)了用natapp進(jìn)行內(nèi)網(wǎng)穿透訪問、學(xué)會(huì)了jar包的運(yùn)行和查看調(diào)試。所有以上的操作都是為實(shí)現(xiàn)項(xiàng)目需求服務(wù),為了更好的管理自己的項(xiàng)目,我嘗試使用了GitHub進(jìn)行項(xiàng)目托管,托管到云端后就不怕本地?cái)?shù)據(jù)丟失了,而且每次提交都可以看到自己對(duì)項(xiàng)目做出了哪些修改。完成項(xiàng)目的過程雖然艱辛,但是也收獲滿滿,果然付出與收獲都是成正比的。不過,我雖然實(shí)現(xiàn)了項(xiàng)目需求,但是仍離預(yù)期有一定的差距。對(duì)各種知識(shí)的學(xué)習(xí)依舊停留在表面,算是會(huì)用,并沒有深入了解它們的原理,也做不到舉一反三。甚至在使用的過程還可能存在沒有及時(shí)發(fā)現(xiàn)的不規(guī)范使用方式。部分已經(jīng)發(fā)現(xiàn)的不規(guī)范使用方式目前找不到修改方式。所以我還要繼續(xù)努力。

第八章結(jié)語IT行業(yè)是一個(gè)長盛不衰的行業(yè),5G時(shí)代的到來也為它的發(fā)展提供了無限的可能。目前市面上的各類APP已經(jīng)數(shù)不勝數(shù)了,隨著編程的門檻貶低,越來越多的技術(shù)人才也紛紛涌現(xiàn)。想要在如此艱難的環(huán)境中為自己的設(shè)計(jì)找到一席之地實(shí)非易事。我清楚的知道基于HTTP通信協(xié)議課程提醒系統(tǒng)還不夠完善,無論是系統(tǒng)的架構(gòu)還是系統(tǒng)的功能,還無法達(dá)到發(fā)布和推廣的要求。但是該系統(tǒng)的設(shè)想面向大學(xué)生群體,就目前我畢業(yè)前所用過的APP對(duì)比而言,基于HTTP通信協(xié)議課程提醒系統(tǒng)的設(shè)想如果完全實(shí)現(xiàn),也能解決一些在課程提醒客觀問題,為在校大學(xué)生提供學(xué)習(xí)上的便利。雖然最終系統(tǒng)成果沒能徹底達(dá)到預(yù)期效果,但是整個(gè)系統(tǒng)構(gòu)建過程也讓我受益匪淺。從畢業(yè)設(shè)計(jì)選題到設(shè)計(jì)論文的撰寫,我付出了足夠的努力,看著自己的系統(tǒng)一點(diǎn)點(diǎn)完善,也會(huì)有一點(diǎn)小小的成就感。

參考文獻(xiàn)[1]祝瑞[1],車敏[1].基于HTTP協(xié)議的服務(wù)器程序分析[J].現(xiàn)代電子技術(shù),2012(4).[2]王能斌,錢祥根.大學(xué)課程表調(diào)度系統(tǒng)——UTSS[J].計(jì)算機(jī)學(xué)報(bào)(05):65-71.[3]肖軍[1,2],李濤[1,2].基于

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(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ì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論