張蕾
摘要:互聯(lián)網(wǎng)的飛速發(fā)展給人們的生活提供了極大的便利,滲透到衣食住行的各個(gè)方面,網(wǎng)上訂餐平臺(tái)的開發(fā)很好地順應(yīng)了這一潮流。該文以網(wǎng)上訂餐系統(tǒng)的設(shè)計(jì)與開發(fā)過(guò)程為例,介紹了網(wǎng)站開發(fā)的平臺(tái)選擇LAMP的依據(jù)、網(wǎng)站功能模塊的系統(tǒng)設(shè)計(jì)和主要功能模塊的詳細(xì)設(shè)計(jì),給出了主要功能模塊的實(shí)現(xiàn)效果圖和功能代碼,為系統(tǒng)開發(fā)的研究提供參考。
關(guān)鍵詞:開發(fā)平臺(tái);LAMP;系統(tǒng)設(shè)計(jì);系統(tǒng)實(shí)現(xiàn)
中圖分類號(hào):TP393 文獻(xiàn)標(biāo)識(shí)碼:A 文章編號(hào):1009-3044(2017)31-0101-04
1 開發(fā)平臺(tái)
LAMP是完全開源免費(fèi)的網(wǎng)頁(yè)開發(fā)平臺(tái),包括Linux操作系統(tǒng)、Apache服務(wù)器、MySQL數(shù)據(jù)庫(kù)和PHP服務(wù)器腳本程序。與ASP.NET相比,LAMP平臺(tái)具有通用、跨平臺(tái)、高性能、低成本的優(yōu)勢(shì),與JavaEE相比,LAMP平臺(tái)則具有資源豐富、輕量易用和發(fā)展速度快、執(zhí)行靈活的優(yōu)勢(shì)。也就是說(shuō),LAMP同時(shí)兼有低價(jià)格和高性能的特點(diǎn),這使得LAMP在全球范圍內(nèi)應(yīng)用非常廣泛,下面分別從運(yùn)行速度等9個(gè)方面對(duì)LAMP、JavaEE和ASP.NET三大開發(fā)平臺(tái)進(jìn)行對(duì)比,如表1所示。通過(guò)對(duì)比不難發(fā)現(xiàn),LAMP架構(gòu)相對(duì)本系統(tǒng)開發(fā)優(yōu)勢(shì)明顯,這也是選擇采用LAMP作為開發(fā)平臺(tái)的主要原因。
2 系統(tǒng)設(shè)計(jì)
2.1 系統(tǒng)總體架構(gòu)設(shè)計(jì)
系統(tǒng)開發(fā)基于LAMP開發(fā)平臺(tái),總體結(jié)構(gòu)采用B/S三層體系架構(gòu),即表示層,邏輯層和數(shù)據(jù)層,分別對(duì)應(yīng)客戶端瀏覽器、Web服務(wù)器和數(shù)據(jù)庫(kù)服務(wù)器。
2.2 系統(tǒng)功能模塊劃分
網(wǎng)上訂餐系統(tǒng)從層次上劃分,分為前臺(tái)應(yīng)用和后臺(tái)應(yīng)用兩部分,前臺(tái)應(yīng)用主要包括用戶個(gè)人信息管理、網(wǎng)上訂餐和消費(fèi)評(píng)價(jià)三個(gè)功能模塊,后臺(tái)應(yīng)用則主要包括用戶信息管理、訂單信息管理和系統(tǒng)內(nèi)容管理三個(gè)功能模塊。系統(tǒng)對(duì)不同的用戶進(jìn)行了權(quán)限設(shè)置,不同用戶僅能進(jìn)行權(quán)限內(nèi)的操作。系統(tǒng)總體功能結(jié)構(gòu)如圖1所示。
2.3 系統(tǒng)詳細(xì)設(shè)計(jì)
通過(guò)對(duì)系統(tǒng)功能進(jìn)行劃分,確定了系統(tǒng)的26個(gè)核心子模塊,下面僅以其中比較關(guān)鍵的幾個(gè)模塊為例進(jìn)行詳細(xì)闡述。
2.3.1 訂餐模塊設(shè)計(jì)
用戶在客戶端上搜索到合適的菜品信息選擇訂購(gòu)后,訂購(gòu)模塊首先判斷用戶是否登錄,若未登錄將自動(dòng)跳轉(zhuǎn)到注冊(cè)登錄界面。確定用戶為注冊(cè)會(huì)員并且已經(jīng)登錄以后,系統(tǒng)將根據(jù)用戶信息和用戶選擇的菜品信息自動(dòng)生成訂單記錄。用戶繼續(xù)訂購(gòu)時(shí),系統(tǒng)將在用戶已選擇菜品的基礎(chǔ)上為訂單添加新選擇的菜品信息。同時(shí)選擇多項(xiàng)菜品時(shí),系統(tǒng)僅生成一個(gè)訂單編號(hào),并在菜單信息表中存入所選的多項(xiàng)菜品記錄。接下來(lái)通過(guò)獲取用戶送餐時(shí)間、聯(lián)系方式和配送地址等信息,生成完整的訂單記錄。
2.3.2 菜品管理模塊設(shè)計(jì)
菜品管理主要用于添加、修改和刪除菜品信息,設(shè)置菜品推薦和菜品排行,及時(shí)為用戶提供最新、準(zhǔn)確、有效的菜品信息。下面以添加菜品信息為例對(duì)菜品管理的流程設(shè)計(jì)進(jìn)行說(shuō)明。食堂管理員在點(diǎn)擊添加菜單后,系統(tǒng)將判斷其是否登錄,如果沒有登錄,頁(yè)面將跳轉(zhuǎn)至登錄頁(yè)面。登錄完成后,系統(tǒng)自動(dòng)返回添加菜品添加界面。食堂管理員在輸入菜品名稱、菜品價(jià)格,選擇菜品種類,上傳菜品照片,添加菜品描述和所屬的食堂窗口后點(diǎn)擊添加按鈕,即可完成菜品信息的添加工作。
2.3.3 菜品推薦模塊設(shè)計(jì)
為了更好的提升用戶體驗(yàn),推廣食堂的各類菜品,進(jìn)一步提高用戶訂餐效率,本文基于個(gè)性化推薦算法對(duì)菜品推薦模塊進(jìn)行了設(shè)計(jì)。該算法充分考慮了用戶行為、菜品信息和用戶信息等數(shù)據(jù)信息,通過(guò)問(wèn)卷調(diào)查合理進(jìn)行權(quán)重分配,計(jì)算出各類菜品的加權(quán)推薦值,針對(duì)不同用戶喜好進(jìn)行個(gè)性化推薦,以期實(shí)現(xiàn)較好的菜品推薦功能。本文設(shè)計(jì)的個(gè)性化推薦算法主要從用戶行為、菜品與用戶關(guān)聯(lián)度、菜品相似度和菜品排行榜等方面入手,對(duì)菜品推薦功能進(jìn)行設(shè)計(jì),下面對(duì)算法的設(shè)計(jì)進(jìn)行詳細(xì)闡述。
1) 用戶行為權(quán)值
用戶的行為是反應(yīng)用戶喜好的重要的因素之一。通過(guò)記錄用戶的行為,對(duì)用戶的搜索、查看、收藏、訂購(gòu)、評(píng)價(jià)等行為設(shè)置權(quán)重,用來(lái)表示用戶對(duì)菜品的喜好程度,如表2所示。權(quán)重值根據(jù)經(jīng)驗(yàn)和問(wèn)卷調(diào)查獲取。
2) 菜品與用戶關(guān)聯(lián)度
該模塊主要通過(guò)用戶信息與菜品信息,計(jì)算二者之間的關(guān)聯(lián)度,從而推測(cè)出用戶對(duì)菜品的喜好。涉及的菜品信息主要包括菜品名稱和菜品類別,用戶信息主要包括用戶籍貫、性別和年齡。設(shè)用戶籍貫為P,性別為S,年齡為A,則菜品Di和用戶Mj的關(guān)聯(lián)度可表示為:
[RDi,Mj=RTi,Pj+RTi,Sj+RTi,Aj] (1)
式中:[RTi,Pj]—表示菜品類型和用戶籍貫的關(guān)聯(lián)度;其值通過(guò)問(wèn)卷調(diào)查獲得。其余2個(gè)子式表示的含義與此類似。
3) 菜品相似度
菜品相似度主要通過(guò)對(duì)菜品信息進(jìn)行加權(quán)計(jì)算來(lái)獲得。用于計(jì)算菜品相似度的菜品信息主要包括:菜品名稱、菜品關(guān)鍵詞、菜品類別、所屬食堂窗口。設(shè)菜品為D,菜品名稱為N,菜品關(guān)鍵詞為K,菜品類別為T,菜品所屬食堂窗口為C,其權(quán)重分別為[WN]、[WK]、[WT]、[WC],則菜品可表示為[D={N,K,T,C}],從而可以得到菜品Di和菜品Dj的相似度計(jì)算公式如式(2)所示:
[SDi,Dj=WNNi∩NjNi∪Nj+WKKi∩KjKi∪Kj+WTTi∩TjTi∪Tj+WCCi∩CjCi∪Cj] (2)
式中:
[Ni∩Nj]—表示菜品Di和菜品Dj名稱中包含相同字的數(shù)目;
[Ni∪Nj]—表示菜品Di和菜品Dj名稱中互不相同字的數(shù)目;
其余3個(gè)子式表示的含義與此類似。
3 系統(tǒng)實(shí)現(xiàn)
3.1 網(wǎng)上訂餐模塊
當(dāng)用戶通過(guò)左側(cè)導(dǎo)航欄或通過(guò)搜索功能選擇食堂窗口后,系統(tǒng)將請(qǐng)求服務(wù)器跳轉(zhuǎn)到相應(yīng)的窗口頁(yè)面,如圖2(a)所示。左側(cè)顯示所選窗口的基本信息,包括菜品的口味和服務(wù)質(zhì)量打分等。下方為所選窗口的展示的菜品信息,包括菜品名稱、價(jià)格以及評(píng)價(jià)信息等。需要訂購(gòu)菜品時(shí),點(diǎn)擊菜品后的“+”圖標(biāo),即將菜品加入購(gòu)物車,同時(shí)菜品后將出現(xiàn)“-”號(hào)圖標(biāo),以實(shí)現(xiàn)對(duì)購(gòu)物車中菜品的刪除功能。一種菜品選擇結(jié)束后,可以繼續(xù)瀏覽和添加其他菜品,如圖2(b)所示。全部菜品選擇完畢,點(diǎn)擊確定按鈕即可完成訂單的生成。
網(wǎng)上訂餐模塊關(guān)鍵代碼如下:
<?php
class Shopcar
{
public $dishesList=array();
public function checkDishes($dishes)
{ for($i=0;$i { if($this→dishesList[$i]['name']==$dishes['name']) return $i;}return -1; } public function add($dishes) { $i=$this→checkDishes($dishes); if($i==-1) array_push($this→dishesList,$dishes); else $this→dishesList[$i]['num']+=$dishes['num'];} public function delete($dishes) { $i=$this→checkDishes($dishes); if($i!=-1) array_splice($this→dishesList,$i,1);} public function show() { return $this→dishesList;} } ?> 3.2 評(píng)價(jià)打分模塊 用戶在完成訂餐后,系統(tǒng)將提示用戶對(duì)菜品的口味滿意度和服務(wù)滿意度進(jìn)行評(píng)價(jià)打分。評(píng)價(jià)分?jǐn)?shù)將作為菜品信息的一部分顯示給其他用戶,系統(tǒng)則可根據(jù)所有用戶的評(píng)價(jià)進(jìn)行加權(quán)計(jì)算獲得菜品的綜合評(píng)價(jià)分?jǐn)?shù),方便用戶按照評(píng)價(jià)打分情況對(duì)菜品列表進(jìn)行排序,優(yōu)先選擇評(píng)價(jià)較好的菜品。用戶評(píng)價(jià)界面如圖3所示。 評(píng)價(jià)打分模塊的實(shí)現(xiàn)關(guān)鍵代碼如下: var score = $(this).attr("rate"); $("#myRate").html("您的評(píng)價(jià):"+score+""); $.ajax({ type: "post", url: "post.php", data:"score="+score, success: function(msg){ if(msg==1){ $("#myRate").html("您已評(píng)分!"); }else if(msg==2){ $("#myRate").html("您評(píng)過(guò)分了!"); }else { getRate(msg); } } }); 3.3 菜品管理模塊 菜品管理模塊主要用于食堂管理員對(duì)菜品信息進(jìn)行添加、刪除和修改操作。圖4為上傳菜品信息的界面,用戶通過(guò)下拉菜單可以選擇窗口的位置和菜品的種類,通過(guò)文本框可以輸入菜品名稱、菜品描述、菜品價(jià)格、搜索關(guān)鍵詞和菜品詳細(xì)描述等,通過(guò)上傳圖片模塊可以上傳菜品的照片。上傳完畢后,可以點(diǎn)擊查看菜品列表,以客戶的視角瀏覽、檢查菜品信息。 上傳菜品信息模塊關(guān)鍵代碼如下: <?php if ($_server['request_method'] == 'post') { if (is_uploaded_file($_FILES['upfile']['tmp_name'])) { $upfile = $_FILES['upfile'] ['dishesName'])) { print_r($_FILES['upfile']); $name = $upfilep['name']; $type = $upfile['type']; $size = $upfile['size']; $ dishesName = $upfile[' dishesName ']; $error = $upfile['error']; if ($max_file_size< $size) { echo '您上傳的圖片過(guò)大'; exit (); } if (!in_arrar($type, $uptypes)) { echo '上傳文件類型錯(cuò)誤' . $type; exit (); } if (!file_exists($destination_folder)) { mkdir($destination_folder); } if (file_exists("upload/" . $_FILES["file"]["name"])) { echo$_FILES["file"]["name"] . " already exists. "; } else { move_uploaded_file($_FILES["file"]["tmp_name"], "upload/" . $_FILES["file"]["name"]);
echo "Stored in: " . "upload/" . $_FILES["file"]["name"];
}
$pinfo = pathinfo($name);
$ftype = $pinfo['extension'];
$destination = $destination_folder.time() . "." . $ftype;
if (file_exists($destination) && $overwrite != true) {
echo "同名的文件已經(jīng)存在了";
exit ();
}
if (!move_uploaded_file($tmp_name, $destination)) {
echo "移動(dòng)文件出錯(cuò)";
exit ();
}}
?>
參考文獻(xiàn):
[1] 肖萍. 基于LAMP平臺(tái)的網(wǎng)站構(gòu)建與分析[J]. 信息網(wǎng)絡(luò)安全, 2012(4).
[2] 曾志明. 網(wǎng)站開發(fā)技術(shù)的比較研究[J]. 電腦知識(shí)與技術(shù), 2010, 6(5):1075-1078.
[3] 何杭鋒. 基于LAMP平臺(tái)的WEB服務(wù)器架構(gòu)[J]. 中國(guó)新技術(shù)新產(chǎn)品, 2011(22).
[4] 李鴻飛. 淺談網(wǎng)站開發(fā)技術(shù)的發(fā)展與前景[J]. 中國(guó)新通信, 2012(5).
[5] 李衛(wèi)軍, 陳旭. 基于LAMP的網(wǎng)上訂餐系統(tǒng)的設(shè)計(jì)研究[J]. 電腦知識(shí)與技術(shù), 2014(21).
[6] 易明. 基于Web挖掘的個(gè)性化信息推薦[M]. 北京: 科學(xué)出版社, 2010.
[7] C-J. Zhang, A. Zeng. Behavior patterns of online users and the effect on information filtering [J]. Physica A, 2012(391).
[8] Wang D, Ma J. Recommendation Based on Frequent N-adic Concepts[M]. Web Technologies and Application[M]. Springer International publishing, 2014.