孫 杰,張濤鵬,楊 潔,王君怡
(昌吉學(xué)院航空學(xué)院,新疆 昌吉 831100)
隨著我國(guó)高等教育的普及化,高校的在校生規(guī)模迅速擴(kuò)大,對(duì)于高校后勤保障能力和服務(wù)質(zhì)量都提出新的挑戰(zhàn),特別是在用餐高峰期存在排隊(duì)長(zhǎng)、選餐難、結(jié)賬難、占座難和等餐時(shí)間久等突出問題[1],嚴(yán)重影響了師生的用餐體驗(yàn)和正常的學(xué)習(xí)工作。在5G 技術(shù)和信息技術(shù)迅速發(fā)展,以及消費(fèi)升級(jí)的大背景下,一些餐飲配送平臺(tái)迅速興起,依靠便捷的訂餐方式和快速的送餐服務(wù),成功吸引了一批高校學(xué)生用戶[2]。面對(duì)上述問題和挑戰(zhàn),傳統(tǒng)的高校餐飲服務(wù)系統(tǒng)亟需利用新技術(shù)、新方法和新模式提升師生就餐便利性和保障師生餐食的安全性,充分發(fā)揮服務(wù)育人的功能[3]。
“掌上校園幫”訂餐系統(tǒng)主要利用Android 開發(fā)技術(shù)、移動(dòng)通信技術(shù)和大數(shù)據(jù)技術(shù)構(gòu)建一款連接師生和食堂的智慧預(yù)定餐食APP,既方便學(xué)生快速瀏覽食堂提供的菜品,輕松下單,又能夠讓餐飲管理者及時(shí)掌握用餐數(shù)量和時(shí)間,精準(zhǔn)備餐并優(yōu)化制作流程,不但能為師生節(jié)約用餐時(shí)間,而且可以提升高校餐飲服務(wù)質(zhì)量和效率。
“掌上校園幫”訂餐系統(tǒng)采用了兩端一服務(wù)架構(gòu)設(shè)計(jì)(如圖1所示),兩端分別是前端與管理端,一服務(wù)主要是指服務(wù)器。
圖1 掌上校園幫系統(tǒng)架構(gòu)
前端一般為手機(jī)和平板等師生手持移動(dòng)設(shè)備,通過APP 向服務(wù)器發(fā)送HTTP 請(qǐng)求,根據(jù)請(qǐng)求類型和參數(shù),調(diào)用對(duì)應(yīng)的業(yè)務(wù)邏輯,將的生成JSON 格式數(shù)據(jù)[4]發(fā)送給前端。管理端使用電腦和平板等設(shè)備,通過IE瀏覽器向服務(wù)器發(fā)送HTTP 請(qǐng)求,根據(jù)請(qǐng)求種類和參數(shù),調(diào)用相應(yīng)的業(yè)務(wù)邏輯,訪問數(shù)據(jù)庫(kù)并生成HTML、CSS或JS格式的數(shù)據(jù)反饋給管理端。
服務(wù)器主要是響應(yīng)用戶的各種請(qǐng)求,采用開源Django 應(yīng)用框架開發(fā)[5]。在Django 框架中,從客戶端提交的所有請(qǐng)求,先經(jīng)url.py類進(jìn)行URL映射,再根據(jù)正則運(yùn)算的結(jié)果調(diào)用views.py類中的視圖函數(shù)進(jìn)行處理,然后根據(jù)業(yè)務(wù)需求與模型層進(jìn)行交互,最后響應(yīng)完成請(qǐng)求的。
通過對(duì)項(xiàng)目所在高校師生的走訪調(diào)研,并與后勤餐飲管理人員進(jìn)行充分的溝通,最終確定“掌上校園幫”訂餐系統(tǒng)的主要功能,其功能模塊如下。
⑴瀏覽菜品:通過APP 查看食堂每日提供的主食、菜品、甜食和飲品[6]。
⑵美食推薦:根據(jù)后臺(tái)數(shù)據(jù)庫(kù)記錄,將購(gòu)買量和師生點(diǎn)贊量較高的餐食進(jìn)行排序展示。推薦星級(jí)的計(jì)算公式是:
其中Rating 表示星級(jí),Sale 表示該食物的每天售賣總量,Comment表示好評(píng)量。
⑶訂購(gòu)餐食:當(dāng)師生找到自己喜愛的食物時(shí),可以點(diǎn)擊購(gòu)買按鈕輕松下單。
⑷發(fā)現(xiàn)特色菜肴:將地方特色菜品集中展示,讓來自外地的學(xué)生不出校門就可以品嘗當(dāng)?shù)靥厣朗场?/p>
⑸評(píng)價(jià)菜品:根據(jù)自己購(gòu)買菜品的色澤、味道、份量給出中肯的評(píng)價(jià),為其他購(gòu)買者提供參考,也可幫助制作者改進(jìn)菜品質(zhì)量。
⑹發(fā)布幫帶信息:充分利用校園內(nèi)川流不息的人流量,發(fā)布順道取餐、代買、取快遞、捎物品等信息。
⑺個(gè)人中心:用戶可以修改個(gè)人信息和密碼,也可以瀏覽自己訂單記錄或接單幫送記錄,同時(shí)還能顯示當(dāng)前訂單等待的總?cè)藬?shù)和本筆訂單的位次。
除以上APP功能外,管理端還提供添加菜品、刪除菜品、修改菜品價(jià)格和查看菜品訂單等功能,方便食堂管理人員發(fā)布和修改菜品,并獲取餐食訂購(gòu)信息。
根據(jù)“掌上校園幫”APP 的功能,設(shè)計(jì)相應(yīng)的界面實(shí)現(xiàn)對(duì)應(yīng)的操作。
登錄界面(圖2左側(cè)所示)是為檢驗(yàn)用戶的合法性及保障師生財(cái)產(chǎn)安全而設(shè)計(jì)。它是用戶接觸APP 的第一個(gè)頁(yè)面,要從視覺效應(yīng)上傳遞APP 的設(shè)計(jì)風(fēng)格,激發(fā)用戶的興趣。登錄界面使用了約束布局(ConstraintLayout),采用漸變色做為背景,Logo 設(shè)計(jì)采用了一名踩著輪滑奔跑的大學(xué)生,充分體現(xiàn)大學(xué)生朝氣蓬勃的精神面貌,另外還利用Photoshop制作較有質(zhì)感的登錄按鈕。注冊(cè)界面(圖2右側(cè)所示)同樣使用約束布局并在色調(diào)上與登錄界面保持一致,錄入信息采用TextView、EditText和RadioButton控件實(shí)現(xiàn),其中密碼文本控件的inputType 屬性為textPassword,用于隱藏敏感信息。
圖2 登錄和注冊(cè)界面
瀏覽菜品和推薦美食界面(圖3 所示)、發(fā)現(xiàn)特色美食和幫帶信息界面需要展示大量的相同格式的信息(圖4 所示),主要采用ListView 和GridView 控件設(shè)計(jì)。由于二者都是容器控件,需為列表項(xiàng)設(shè)計(jì)布局模板,才能讓容器控件中的每一個(gè)item 項(xiàng)顯示格式一致,而其內(nèi)容則由數(shù)據(jù)庫(kù)中對(duì)應(yīng)字段值決定。
圖3 瀏覽菜品和推薦美食界面
圖4 發(fā)現(xiàn)特色美食和幫帶信息界面
⑴實(shí)體類的編寫
系統(tǒng)在使用過程中需要頻繁從數(shù)據(jù)庫(kù)中存取數(shù)據(jù),而數(shù)據(jù)庫(kù)中的表與Java 中的實(shí)體(Entity)類對(duì)應(yīng),因此根據(jù)項(xiàng)目需要存儲(chǔ)的數(shù)據(jù),編寫對(duì)應(yīng)的JavaBean,本系統(tǒng)涉及到的實(shí)體包括用戶實(shí)體、菜品實(shí)體、訂單實(shí)體和幫帶實(shí)體等。其中菜品實(shí)體類定義如下:
⑵基于okhttp的網(wǎng)絡(luò)請(qǐng)求
APP在運(yùn)行過程中要通過網(wǎng)絡(luò)與服務(wù)器進(jìn)行數(shù)據(jù)交換,網(wǎng)絡(luò)請(qǐng)求功能可以實(shí)現(xiàn)客戶端向服務(wù)器發(fā)送請(qǐng)求。Android 開發(fā)中常用okhttp 網(wǎng)絡(luò)框架處理客戶端的請(qǐng)求,該框架同時(shí)支持HTTP/1.0 和HTTP/2.0 協(xié)議封裝的網(wǎng)絡(luò)請(qǐng)求,并且使用緩存技術(shù)避免了重復(fù)請(qǐng)求。
使用okhttp 網(wǎng)絡(luò)請(qǐng)求時(shí),首先要工廠模式構(gòu)建okHttpClient對(duì)象,其次是生成Request對(duì)象,然后創(chuàng)建call 對(duì)象執(zhí)行請(qǐng)求,最后調(diào)用call 對(duì)象的enqueue 方法監(jiān)聽響應(yīng)結(jié)果。
⑶編寫Adapter類
由于ListView 和GridView 屬于容器類控件,不能直接添加子項(xiàng),因此在呈現(xiàn)數(shù)據(jù)的時(shí)候需要編寫Adapter 類將AdapterView 加入,它是將AdapterView和數(shù)據(jù)源連接的橋梁,可以將二者輕松綁定。其中菜品展示的適配器類如圖5所示。
Adapter 類要繼承BaseAdapter 父類,其中包含有泛型列表類型、上下文類型和布局服務(wù)類型的屬性,并在構(gòu)造函數(shù)中對(duì)上述三個(gè)屬性進(jìn)行初始化。列表對(duì)象mFoods的值是從服務(wù)器獲取,它用于給對(duì)應(yīng)的控件賦值,MContext指定上下文環(huán)境,mInflater是Layout文件夾中指定xml 布局文件的實(shí)例化對(duì)象,作用類似于findViewById()方法。
另外,編寫的Adapter類要覆寫父類的getCount()、getItem()、getItemID()和getView()四個(gè)方法,其功能依次為返回列表對(duì)象長(zhǎng)度、返回當(dāng)前列表項(xiàng)、返回當(dāng)前列表項(xiàng)ID 和更新視圖控件值。內(nèi)部類ViewHolder 是為了優(yōu)化性能而定義,它將所有的列表項(xiàng)控件進(jìn)行封裝,使得這些控件只需初始化一次,后續(xù)便可反復(fù)更新數(shù)據(jù),提升了APP的運(yùn)行性能。
管理端主要使用Django 和Xadmin 共同開發(fā),由于Xadmin 使用bootstrap 框架構(gòu)建,相較于Django 框架自帶的admin 后臺(tái)管理模塊界面更加美觀,而且可以支持多種尺寸屏幕。
安裝完Xadmin 模塊后,在管理端應(yīng)用下創(chuàng)建adminx.py 文件,用import命令導(dǎo)入Xadmin 模塊、菜品類、訂單類和其他需要后臺(tái)管理的類,再調(diào)用Xadmin.site.register()方法注冊(cè)這些模型類,然后設(shè)置模型字段的呈現(xiàn)方式、設(shè)置搜索字段、過濾字段、排序字段等,最后添加LoginAdmin類和SysSetting類分別用于設(shè)置登錄和修改瀏覽器顯示信息,這部分的實(shí)現(xiàn)代碼如下:
本文使用Android 移動(dòng)開發(fā)技術(shù)和Django 應(yīng)用框架開了高校食堂訂餐系統(tǒng),既可以實(shí)現(xiàn)師生通過APP輕松購(gòu)買食堂提供的餐食,又能讓后勤餐飲管理者精準(zhǔn)掌握每日學(xué)生用餐數(shù)量和就餐時(shí)間,提升了服務(wù)質(zhì)量,進(jìn)而提高了高校后勤信息化保障能力。后續(xù),將在此基礎(chǔ)上增加美食搜索功能,縮短師生查找食物所花費(fèi)的時(shí)間,進(jìn)一步優(yōu)化系統(tǒng)功能。