(亳州學(xué)院 電子與信息工程系,安徽 亳州 236800)
創(chuàng)客精神是創(chuàng)業(yè)創(chuàng)新精神在互聯(lián)網(wǎng)+時(shí)代的表現(xiàn),創(chuàng)客的出現(xiàn)充分響應(yīng)了“大眾創(chuàng)業(yè),萬(wàn)眾創(chuàng)新”的號(hào)召[1]。一個(gè)科學(xué)的服務(wù)管理平臺(tái)能夠有效地指導(dǎo)和支持大學(xué)生創(chuàng)業(yè),探索在互聯(lián)網(wǎng)+創(chuàng)客模式下高校大學(xué)生創(chuàng)業(yè)APP建設(shè)與維護(hù)。對(duì)于創(chuàng)業(yè)APP的建設(shè),采用了B/S和C/S的混合架構(gòu)[2],共設(shè)計(jì)創(chuàng)業(yè)項(xiàng)目申請(qǐng)、創(chuàng)業(yè)項(xiàng)目審核處理、創(chuàng)業(yè)項(xiàng)目統(tǒng)計(jì)、創(chuàng)業(yè)項(xiàng)目成果展示、創(chuàng)業(yè)項(xiàng)目信息查詢以及系統(tǒng)管理六大功能。其中,為了提高項(xiàng)目信息查詢的效率,APP采用了增強(qiáng)版的Boyer-Moore-Horspool文本匹配算法[3]。對(duì)于創(chuàng)業(yè)APP的維護(hù),分別從升級(jí)更新和后臺(tái)數(shù)據(jù)備份兩個(gè)方面入手,詳細(xì)地闡述了APP的維護(hù)過程。
大學(xué)生創(chuàng)業(yè)APP涉及的主要角色有二級(jí)學(xué)院、高校創(chuàng)業(yè)管理部門、企業(yè)、指導(dǎo)教師、學(xué)生,APP需要為不同的角色實(shí)現(xiàn)不同的功能,以滿足用戶角色的需求。系統(tǒng)需要實(shí)現(xiàn)的主要功能包括了創(chuàng)業(yè)項(xiàng)目申請(qǐng)、項(xiàng)目審核處理、項(xiàng)目統(tǒng)計(jì)、項(xiàng)目成果展示以及項(xiàng)目信息查詢。上述各個(gè)功能的需求分析如下所示:
創(chuàng)業(yè)項(xiàng)目申請(qǐng):項(xiàng)目申請(qǐng)是一個(gè)重要的功能,涉及的主要用戶是學(xué)生。移動(dòng)端的APP或者web頁(yè)面登陸系統(tǒng)后,學(xué)生可以新增創(chuàng)業(yè)項(xiàng)目,然后填寫創(chuàng)業(yè)項(xiàng)目的申請(qǐng)書,并輸入創(chuàng)業(yè)項(xiàng)目相關(guān)信息。學(xué)生可以對(duì)申請(qǐng)書進(jìn)行保存、修改、刪除以及提交等操作。
創(chuàng)業(yè)項(xiàng)目審核處理:二級(jí)學(xué)院、高校創(chuàng)業(yè)管理部門、企業(yè)、指導(dǎo)教師需要對(duì)項(xiàng)目進(jìn)行審核。學(xué)生提交申請(qǐng)書后,首先由指導(dǎo)教師進(jìn)行審核,若審核不通過,則需要填寫審核意見,并將申請(qǐng)書退回修改或者拒絕申請(qǐng);若審核通過,則提交上一級(jí)進(jìn)行進(jìn)一步審核。教師審核通過后,由二級(jí)學(xué)院負(fù)責(zé)審核,最后由高校創(chuàng)業(yè)管理部門或者企業(yè)進(jìn)行審核。
創(chuàng)業(yè)項(xiàng)目統(tǒng)計(jì):創(chuàng)業(yè)項(xiàng)目統(tǒng)計(jì)功能是高校和企業(yè)對(duì)創(chuàng)業(yè)項(xiàng)目進(jìn)行匯總的途徑,能實(shí)現(xiàn)創(chuàng)業(yè)項(xiàng)目統(tǒng)計(jì)和報(bào)表生成的功能。
創(chuàng)業(yè)項(xiàng)目成果展示:高校創(chuàng)業(yè)管理部門通過成果展示功能,將學(xué)生的創(chuàng)業(yè)項(xiàng)目成果發(fā)布在移動(dòng)端的APP以及web端。
創(chuàng)業(yè)項(xiàng)目信息查詢:創(chuàng)業(yè)項(xiàng)目信息可以通過關(guān)鍵字進(jìn)行查詢,也可以通過條件進(jìn)行查詢。條件查詢功能允許用戶通過設(shè)置條件來(lái)對(duì)項(xiàng)目進(jìn)行篩選,用戶可以使用項(xiàng)目名稱、申請(qǐng)人名字、指導(dǎo)教師、所屬二級(jí)學(xué)院等信息來(lái)查詢項(xiàng)目信息。關(guān)鍵字查詢支持用戶進(jìn)行模糊查找。
文中的高校大學(xué)生創(chuàng)業(yè)APP采用了B/S架構(gòu)與C/S架構(gòu)的結(jié)合,移動(dòng)端APP使用C/S架構(gòu),web端使用了B/S架構(gòu)。系統(tǒng)的總體架構(gòu)如圖1所示。
圖1 系統(tǒng)架構(gòu)圖
Interface layer是視圖層,為用戶提供界面。Data access layer是模型層,負(fù)責(zé)數(shù)據(jù)持久化,提供了訪問數(shù)據(jù)庫(kù)的接口。Logic layer是控制層,Interface layer直接與Logic layer交互,負(fù)責(zé)從視圖層接收用戶輸入的數(shù)據(jù)并進(jìn)行數(shù)據(jù)處理,同時(shí)實(shí)現(xiàn)本APP的主要邏輯功能;Logic layer通過Data access layer對(duì)數(shù)據(jù)庫(kù)進(jìn)行相關(guān)操作。
系統(tǒng)功能模塊圖見圖2。
圖2 系統(tǒng)功能模塊圖
由于篇幅有限,系統(tǒng)管理和創(chuàng)業(yè)項(xiàng)目信息查詢兩個(gè)功能的詳細(xì)設(shè)計(jì)以及實(shí)現(xiàn)過程。
2.3.1 系統(tǒng)管理
權(quán)限管理和系統(tǒng)登陸是系統(tǒng)管理模塊中的最為重要的兩個(gè)功能。
權(quán)限管理的主要職責(zé)包括了角色創(chuàng)建和分配權(quán)限。在創(chuàng)建角色時(shí),系統(tǒng)管理員輸入角色的名稱,系統(tǒng)判斷該角色是否存在,若已經(jīng)存在,則顯示提示信息,若不存在,則創(chuàng)建該角色。在分配權(quán)限時(shí),系統(tǒng)管理員首先選擇需要對(duì)其分配權(quán)限的角色,然后為該角色選擇相應(yīng)的權(quán)限,并提交系統(tǒng)進(jìn)行驗(yàn)證。操作成功后將相應(yīng)的數(shù)據(jù)保存至數(shù)據(jù)庫(kù)。
用戶在登陸時(shí),需要輸入用戶名、密碼,其中,Android客戶端APP的登陸界面如圖3所示。
圖3 Android客戶端的APP登陸界面
圖3所示的登陸Activity視圖中包含了許多組件(如登錄按鈕),這些組件是通過布局管理器進(jìn)行管理的,而布局管理則是通過布局文件實(shí)現(xiàn)的[4]。
2.3.2 創(chuàng)業(yè)項(xiàng)目信息查詢
項(xiàng)目信息查詢的功能包括了關(guān)鍵字模糊查詢和條件篩選查詢兩部分,下面介紹利用關(guān)鍵字進(jìn)行模糊查詢的具體實(shí)現(xiàn)算法。用戶通過在APP或者Web輸入需要查詢的關(guān)鍵字,經(jīng)過logic layer進(jìn)行處理后使用數(shù)據(jù)庫(kù)接口查找訪問數(shù)據(jù)庫(kù),并將結(jié)果返回到APP或者Web頁(yè)面。APP采用了一種有效的基于信息檢索(IR)排序的關(guān)鍵詞搜索算法來(lái)進(jìn)行關(guān)鍵字模糊查詢。首先,利用圖對(duì)數(shù)據(jù)庫(kù)進(jìn)行建模:將數(shù)據(jù)庫(kù)中的表映射成模式圖中的節(jié)點(diǎn);當(dāng)表i的主鍵是表j的外鍵時(shí),節(jié)點(diǎn)i與節(jié)點(diǎn)j之間存在邊的連接。對(duì)于包含一組關(guān)鍵詞的查詢Q,數(shù)據(jù)庫(kù)會(huì)返回一個(gè)包含元組樹集合的結(jié)果圖。該元組樹的葉子節(jié)點(diǎn)至少包含了查詢Q中的一個(gè)關(guān)鍵詞并且每個(gè)元組僅在元組樹中出現(xiàn)一次。元組樹的生成過程如算法1所示。
算法1 元組樹生成算法輸入:查詢Q, 模式圖G輸出:結(jié)果圖AG1: Initialize ,R0,RF ; //2: EQ←Enqueue(RQ,RF); //3: while E.size() != 0 do4: hq←Dequeue(EQ); //5: if hq.size() >= MAX then6: return ;7: else8: for each Ri in hq do9: for each Rj in hq do10: if Ri is connected to Rj do11: EQ←Enqueue(Ri);12: EQ←Enqueue(Rj);13: end if14: end for15: end for16: end if17: end while
為了生成給定查詢的結(jié)果,算法首先查找元組樹中的所有元組,然后使用元組集和模式圖生成所有的結(jié)果圖,最后,計(jì)算結(jié)果圖中的連接(join)表達(dá)式,以生成結(jié)果的元組樹。
接下來(lái)提出一種基于信息檢索(IR)排序的關(guān)鍵詞搜索算法,用于關(guān)系型數(shù)據(jù)庫(kù)的關(guān)鍵字模糊查詢。首先將“文檔(document)”定義為存儲(chǔ)在文本數(shù)據(jù)庫(kù)中的基本信息單元。計(jì)算給定查詢和文檔之間的相似值,并根據(jù)該相似值為文檔排序。假設(shè)有元組樹T,元組樹中每個(gè)文本的列值為{D1,…,Dm}。將Di稱為文檔,T稱為父文檔。然后計(jì)算查詢Q和父文檔T之間的相似度,如公式1所示。相似度是查詢Q向量與父文檔T向量的點(diǎn)積。
S(Q,T)=∑k∈Q,Tω(k,Q)·ω(k,T)
(1)
其中,ω(k,Q)是查詢Q中關(guān)鍵詞k的權(quán)重,用k出現(xiàn)的頻率來(lái)代替該權(quán)重;ω(k,T)是元組樹中關(guān)鍵詞k的權(quán)重,其計(jì)算方式如公式(2)所示。
ω(k,T)=∑Di∈Tω(k,Di)/T
(2)
[T]是元組樹T的基數(shù)。為了提高查詢的效率,在計(jì)算ω(k,Di)的時(shí)候需要考慮元組樹的大小SizeT、文檔的長(zhǎng)度SizeD、文檔的頻率FreD以及文檔中單詞的頻率FreT,其計(jì)算方式如公式(3)所示。
(3)
為了更有效地維護(hù)高校大學(xué)生創(chuàng)業(yè)APP,APP的自動(dòng)升級(jí)更新功能就顯得尤為重要。基于C/S架構(gòu)的APP擁有一個(gè)龐大的客戶端,這為APP的升級(jí)更新工作帶來(lái)了較大的工作量。在升級(jí)更新APP前,首先要進(jìn)行更新檢測(cè)。當(dāng)用戶打開APP時(shí),APP會(huì)自動(dòng)檢測(cè)是否有新版本,用戶也可以手動(dòng)進(jìn)行更新檢測(cè)。以Android操作系統(tǒng)為例,實(shí)現(xiàn)自動(dòng)/手動(dòng)更新檢測(cè)的代碼如下所示:
UpdateManager.from(this)
.compare(UpdateManager.COMPARE_VERSION_NAME)
.downloadUrl("http://www.collegestudentstartupappapk.edu.cn")
.lastestVerCode(3.12)
.minVerCode(0.11)
.lastestVerName("3.12")
.update();
APP的升級(jí)更新功能使用了Android官方提供的下載庫(kù)DownloadManager[5]。DownloadManager是一個(gè)處理長(zhǎng)時(shí)間運(yùn)行的HTTP下載的系統(tǒng)服務(wù)。 客戶將指定URI的內(nèi)容下載到特定的本地文件夾。DownloadManager將在后臺(tái)執(zhí)行下載,發(fā)生故障時(shí)能夠重試下載并使系統(tǒng)重新啟動(dòng)。UpdateManager主要實(shí)現(xiàn)了檢測(cè)和新版本下載功能,其主要的Java代碼如下所示:
public UpdateManager from (Context con) {
this.mCon = con;
mCurVerName = LibUtils.getVerName(mCon);
mCurVerCode = LibUtils.getVerCode(mCon);
return this;}
public UpdateManager lastestVerName(String name) {
this.mName = name;
return this;}
public UpdateManager update() {
if (!needUpdate) {
Toast.makeText(mCon, Toast.LENGTH_SHORT).show();
return this;
} else {
check ();
return this;}}
private void check () {
if (isCheck) {
mListener.onCheckResult(RESULT_FORCE);
return; }
switch (mCom) {
case COMPARE_VERSION_CODE:
comVerCode();break;
case COMPARE_VERSION_NAME:
comVerName();break; } }
private void download() {
Uri fileUri = Uri.parse("file://" + mApkPath);
Uri uri = Uri.parse(mUrl);
DownloadManager downloadManager = (DownloadManager) mCon
.getSystemService(Con.DOWNLOAD_SERVICE);
DownloadManager.Request request = new DownloadManager.Request(uri);
request.setFileUri(fileUri);
needUpdate = false;}
3.2.1 數(shù)據(jù)庫(kù)備份
備份數(shù)據(jù)庫(kù)對(duì)于數(shù)據(jù)安全來(lái)說非常重要,當(dāng)發(fā)生問題時(shí)(例如系統(tǒng)崩潰,硬件故障或用戶錯(cuò)誤地刪除數(shù)據(jù))可以快速地恢復(fù)數(shù)據(jù)并再次啟動(dòng)運(yùn)行。在升級(jí)數(shù)據(jù)庫(kù)之前,備份也是必不可少的安全措施。APP使用了MySQL關(guān)系型數(shù)據(jù)庫(kù)系統(tǒng)[6]。MySQL提供了多種備份策略,APP利用MySQL提供的mysqldump方法進(jìn)行數(shù)據(jù)備份。mysqldump方法能備份各種各樣的表,還能對(duì)InnoDB表進(jìn)行一致性在線備份。
3.2.2 云備份
云備份(cloud backup)是一項(xiàng)為用戶提供文件系統(tǒng)備份、存儲(chǔ)和恢復(fù)服務(wù)。在線備份提供商是向最終用戶(或客戶)提供此類服務(wù)的公司。這種備份服務(wù)是云計(jì)算的一種形式。在線備份系統(tǒng)按用戶設(shè)定的模式進(jìn)行備份操作,系統(tǒng)會(huì)進(jìn)行每天一次的強(qiáng)制備份,運(yùn)行時(shí)間一般在晚上。同時(shí)云備份服務(wù)還需要實(shí)時(shí)捕獲用戶系統(tǒng)的變化,在線備份系統(tǒng)收集、壓縮,加密并將數(shù)據(jù)傳輸?shù)竭h(yuǎn)程備份服務(wù)提供商的服務(wù)器。
為了規(guī)范高校大學(xué)生創(chuàng)業(yè)過程的管理,在互聯(lián)網(wǎng)+創(chuàng)客模式的背景下,探討了高校大學(xué)生創(chuàng)業(yè)APP建設(shè)與維護(hù)。闡述了創(chuàng)業(yè)APP系統(tǒng)管理、創(chuàng)業(yè)項(xiàng)目申請(qǐng)以及創(chuàng)業(yè)項(xiàng)目信息查詢?nèi)齻€(gè)功能的部分設(shè)計(jì)以及實(shí)現(xiàn),并介紹了APP的升級(jí)更新和后臺(tái)數(shù)據(jù)備份的主要方法。后續(xù)的研究工作主要集中在APP的智能化,為APP添加數(shù)據(jù)挖掘模塊,實(shí)現(xiàn)創(chuàng)業(yè)項(xiàng)目的推薦和自動(dòng)推送功能。