摘? 要:目前很多中小學(xué)校開設(shè)了豐富多彩的社團(tuán)課程,但由于缺乏有效的信息化管理手段,學(xué)校社團(tuán)的管理任務(wù)非常的繁重。針對中小學(xué)社團(tuán)管理的現(xiàn)狀,利用LNMP、MVC等軟件開發(fā)技術(shù),設(shè)計了一款社團(tuán)申請系統(tǒng),系統(tǒng)采用B/S架構(gòu)。系統(tǒng)的用戶端實現(xiàn)了社團(tuán)列表的查看、申請和審核結(jié)果的查詢;服務(wù)端實現(xiàn)了社團(tuán)上線和更新,社團(tuán)教師的配置等。系統(tǒng)經(jīng)過不斷的迭代開發(fā),目前已成功上線。
關(guān)鍵詞:社團(tuán)選課;PHP;LNMP;MVC
Abstract:At present,many primary and secondary schools have opened a variety of interest courses,but due to the lack of effective information management means,the courses management task is very heavy. In view of the current situation of management in primary and secondary schools,a courses application system is designed by using software development technologies such as LNMP and MVC. The system client adopts B/S mode. The client side of the system realizes the inquiry of viewing,applying and reviewing the list of associations. The service side realizes the community on-line and the renewal,the community teacher configuration and so on. After continuous iterative development,the system has been successfully launched at present.
Keywords:community course selection;PHP;LNMP;MVC
0? 引? 言
學(xué)生社團(tuán)是指學(xué)生在自愿基礎(chǔ)上形成的各種群眾性文化、藝術(shù)、學(xué)術(shù)團(tuán)體。不分年級、系科甚至學(xué)校的界限,由興趣愛好相近的同學(xué)組成[1]。傳統(tǒng)的應(yīng)試教育在學(xué)生的知識技能發(fā)展上出現(xiàn)了嚴(yán)重的片面化傾向——唯分?jǐn)?shù)論,這些并不利于學(xué)生的全面發(fā)展。為彌補傳統(tǒng)教育的不足,很多中小學(xué)開設(shè)了社團(tuán)課程,近些年學(xué)校的社團(tuán)課程呈現(xiàn)井噴式發(fā)展,棋類、樂器、程序設(shè)計、3D打印、繪畫、戲曲、語言藝術(shù)等等。繁多的社團(tuán)課程豐富學(xué)生生活的同時,社團(tuán)的管理工作也給學(xué)校教務(wù)管理人員和社團(tuán)教師帶來不小的壓力。
我校有80個教學(xué)班,目前有53個校級社團(tuán)和多個年級社團(tuán)。每學(xué)年開學(xué)伊始,社團(tuán)招生納新活動,時間短、任務(wù)重、社團(tuán)教師的壓力非常大。學(xué)校傳統(tǒng)的做法是社團(tuán)教師進(jìn)每個班級宣講,宣講完后登記下報名學(xué)生。隨著學(xué)校社團(tuán)的不斷發(fā)展,社團(tuán)數(shù)量會越來越多,這種傳統(tǒng)的選課方式,越來越難滿足我校的需求。
基于目前社團(tuán)招生的現(xiàn)狀,學(xué)校迫切需要開發(fā)一個社團(tuán)在線申請系統(tǒng)。系統(tǒng)開放時間給學(xué)生選課,社團(tuán)教師審核通過申請數(shù)據(jù),以解決學(xué)生們選課難的問題,并減輕教務(wù)人員以及社團(tuán)教師的壓力。
1? 技術(shù)選型
本系統(tǒng)采用B/S架構(gòu),學(xué)生和教師使用瀏覽器直接訪問系統(tǒng),無須安裝額外軟件。后端主要采用LNMP(Linux+ Nginx+MySQL+PHP)技術(shù)。Linux、Nginx、MySQL、PHP都是免費開源項目,不涉及任何版權(quán)糾紛,是目前Web開發(fā)過程中,應(yīng)用最為廣泛的Web開發(fā)技術(shù)之一。
Linux是一類Unix計算機操作系統(tǒng)的統(tǒng)稱,是目前最流行的免費操作系統(tǒng)。在互聯(lián)網(wǎng)已知數(shù)據(jù)的網(wǎng)站中,有超過半數(shù)的流量基于LAMP或者LNMP架構(gòu);包括百度、騰訊、新浪等多家全球著名的網(wǎng)站。代表版本有:Ubuntu、CentOS、Debian等。其中,CentOS在服務(wù)器里,以安全穩(wěn)定著稱,這里我們選擇CentOS作為我們的服務(wù)器系統(tǒng)。Nginx也是一款非常優(yōu)秀的反向代理服務(wù)器,可以非常方便地實現(xiàn)服務(wù)器集群和負(fù)載均衡。這里我們使用Nginx作為Web服務(wù)器,以后可以非常方便地實現(xiàn)服務(wù)器的擴展。MySQL是免費開源的關(guān)系型數(shù)據(jù)庫服務(wù)器,廣泛運用于Web系統(tǒng)、大數(shù)據(jù)架構(gòu)、數(shù)據(jù)庫集群系統(tǒng)中。這里我們采用MySQL作為系統(tǒng)的數(shù)據(jù)庫服務(wù)器。PHP是最常用的網(wǎng)站編程語言,廣泛運用于網(wǎng)站系統(tǒng)中。和傳統(tǒng)的強類型編程語言不同,PHP是一門解釋型語言,系統(tǒng)解釋運行,無須先編譯后運行。PHP具有數(shù)據(jù)支持的優(yōu)勢,PHP支持多種主流與非主流的數(shù)據(jù)庫,比如PHP與MySQL是絕佳的組合,可以實現(xiàn)跨平臺運行[2]。特別是在PHP 7新版本發(fā)布后,PHP語言的性能也有了很大的飛躍,我們采用這門語言作為系統(tǒng)開發(fā)語言,能夠快速地實現(xiàn)系統(tǒng)的架構(gòu)。
模型-視圖-控制器(Model-View-Controller,MVC)是當(dāng)前非常成熟程序架構(gòu),它實現(xiàn)了數(shù)據(jù)、視圖和業(yè)務(wù)邏輯的分層。其中模型層主要和數(shù)據(jù)庫交互,主要是對數(shù)據(jù)庫表的抽象,負(fù)責(zé)數(shù)據(jù)的存取。視圖層負(fù)責(zé)顯示數(shù)據(jù)和接收用戶提交的數(shù)據(jù)??刂茖迂?fù)責(zé)從視圖層讀取數(shù)據(jù),控制用戶請求的轉(zhuǎn)發(fā),向模型層提取或提交數(shù)據(jù)。使用MVC設(shè)計的目的是實現(xiàn)一種動態(tài)的程序設(shè)計,方便系統(tǒng)的模塊開發(fā)和團(tuán)隊開發(fā),簡化軟件后期維護(hù)和擴展,并且有利于程序代碼重復(fù)利用[3]。利用MVC分層方式構(gòu)建B/S模式的系統(tǒng)時,MVC三層擔(dān)任不同的角色,互不干擾,互相之間充分解耦的同時又能緊密協(xié)同完成任務(wù)。
2? 系統(tǒng)設(shè)計
2.1? 系統(tǒng)整體設(shè)計
系統(tǒng)設(shè)計大體上分兩部分:管理端和用戶端。管理端主要涉及社團(tuán)教師的增刪改、社團(tuán)課程的增刪改、社團(tuán)招收人數(shù)、社團(tuán)招生開放與結(jié)束時間的配置等。用戶端涉及社團(tuán)課程的瀏覽、報名、審核結(jié)果的查詢。
2.2? 管理端設(shè)計
管理端分兩種權(quán)限,一種是超級管理員,超級管理員可以管理社團(tuán)教師、社團(tuán)課程、設(shè)置社團(tuán)申請截止時間。超級管理員需要將所有的教師、社團(tuán)錄入到數(shù)據(jù)庫,這也是一項非常煩瑣的工作,因此本系統(tǒng)設(shè)計了社團(tuán)數(shù)據(jù)和教師數(shù)據(jù)一鍵導(dǎo)入的功能,管理員將社團(tuán)和教師信息做成一份Excel,Excel包含以下字段:課程名、課程簡介、招收年級、教師姓名、教師賬號、教師密碼、預(yù)報名人數(shù)、招收人數(shù),Excel格式如圖1所示。
其中一個社團(tuán)可以面向多個年級招生,對于Excel中的年級字段,每個年級之間以空格間隔。系統(tǒng)設(shè)計預(yù)報名人數(shù)和招收人數(shù),預(yù)報名人數(shù)應(yīng)大于或等于招收人數(shù),社團(tuán)教師選擇預(yù)報名人數(shù)中選擇接受的學(xué)生;每個學(xué)生可以同時報三個社團(tuán),但只有一個社團(tuán)會錄取。這樣對于教師和學(xué)生都有一定的選擇空間,實現(xiàn)社團(tuán)教師和學(xué)生的雙向選擇。系統(tǒng)中,實現(xiàn)Excel導(dǎo)入導(dǎo)出是一個相對復(fù)雜的操作,這里我借助了GitHub中的PHPOffice/PhpSpreadsheet項目。PhpSpreadsheet是一個純PHP編寫的程序庫,提供了xls和xlsx格式文件的讀取、寫入和格式修改的操作。采用PhpSpreadsheet,我們不僅可以方便地實現(xiàn)Excel文件的導(dǎo)入與導(dǎo)出,而且避免了“重復(fù)造輪子”,提高了程序設(shè)計的效率。
Excel批量導(dǎo)入時,Excel文件中的社團(tuán)或者教師可能已經(jīng)存在與系統(tǒng)中,此時就會存在重復(fù)導(dǎo)入的問題。起初考慮每一條數(shù)據(jù)寫庫前先查詢一下是否存在,存在時更新數(shù)據(jù),不存在再批量寫入數(shù)據(jù)庫。實踐下來發(fā)現(xiàn),數(shù)據(jù)庫I/O時間過長,設(shè)想有100個社團(tuán)和100個社團(tuán)教師,查詢社團(tuán)和社團(tuán)教師就會訪問200次數(shù)據(jù)庫,加上更新和寫庫的操作,經(jīng)常會出現(xiàn)數(shù)據(jù)庫操作時間超時。因此,插入數(shù)據(jù)庫時使用MySQL的ON DUPLICATE KEY UPDATE操作,如果數(shù)據(jù)不存在,MySQL會直接寫庫,該數(shù)據(jù)若已存在(插入數(shù)據(jù)時,唯一索引上出現(xiàn)重復(fù)值),MySQL會自動執(zhí)行更新操作,無須先查詢。
2.3? 用戶端設(shè)計
用戶端,學(xué)生在系統(tǒng)首頁可以看到分年級排列的社團(tuán)列表、每個社團(tuán)招收人數(shù)、目前報名及已審核的人數(shù),并且提供入口搜索自己是否已審核通過。
考慮到學(xué)生選課時類似于商品的搶購,容易出現(xiàn)課程超報的現(xiàn)象,比如小提琴社團(tuán)只剩一個名額了(n=1),但一瞬間有多個人同時搶報,由于學(xué)生搶報的時間間隔非常短,A學(xué)生在報名時,系統(tǒng)查詢到有一個名額,于是報名成功,此時名額需要減1(n=n-1);但減1操作還沒有完成,B學(xué)生也進(jìn)入了系統(tǒng),此時查詢到名額還是1,B學(xué)生報名也成功。B學(xué)生報名成功后,A學(xué)生的程序執(zhí)行減1的操作完成,剩余名額為0,B學(xué)生的程序執(zhí)行減1程序,導(dǎo)致剩余名額變成了-1。系統(tǒng)中我們采用Redis緩存服務(wù)器解決類似于搶購的課程超報現(xiàn)象。我們將課程名額寫入緩存服務(wù)器,利用Redis的原子性操作,每進(jìn)入一個學(xué)生報名時,鎖定一個名額,這個名額被該學(xué)生獨占,避免了多個學(xué)生搶一個名額的現(xiàn)象,如圖2所示。Redis數(shù)據(jù)庫中的所有數(shù)據(jù)都存儲在內(nèi)存中。內(nèi)存的讀寫速度要比硬盤快得多,因而,相對于其他基于硬盤存儲的數(shù)據(jù)庫,Redis在性能上有明顯的優(yōu)勢[4]。Redis的I/O性能遠(yuǎn)高于MySQL服務(wù)器,因此我們在Redis中執(zhí)行完搶課操作后,再將數(shù)據(jù)用定時的CLI命令持久化到數(shù)據(jù)庫中,這樣不僅解決了課程超報的現(xiàn)象,還提高了系統(tǒng)的吞吐率。
2.4? 界面UI設(shè)計
Web前端,我采用的是Bootstrap框架,該框架起源于Twitter,基于HTML、CSS、JavaScript,是目前最受歡迎,應(yīng)用最廣的前端框架之一。采用Bootstrap框架,我們可以快速地構(gòu)建我們的前端頁面,下面介紹下系統(tǒng)中主要的幾個頁面。
教師端登錄之后跳轉(zhuǎn)課程設(shè)置界面,如圖3所示。對于系統(tǒng)管理員,黑色導(dǎo)航顯示課程、教師、申請、退出四個按鈕,對課程、教師、學(xué)生申請都有處理權(quán)限。在課程界面中可以上傳如圖1所示的Excel表格,一次性的導(dǎo)入教師和課程數(shù)據(jù)。對于社團(tuán)教師,系統(tǒng)設(shè)計了報名數(shù)據(jù)導(dǎo)出功能,按照已審核、未審核、已拒絕三個工作表導(dǎo)出Excel,報名數(shù)據(jù)一目了然,為后續(xù)社團(tuán)點名提供了便利,導(dǎo)出格式如圖4所示。
對于學(xué)生端,導(dǎo)航欄有兩個功能:社團(tuán)、審核查詢。社團(tuán)功能將所有社團(tuán)按年級展示,如圖5所示,點擊年級選項卡可以切換年級社團(tuán)。在審核查詢中,學(xué)生可以查詢到自己的申請是否審核通過。
3? 結(jié)? 論
社團(tuán)實踐活動是落實“立德樹人”的重要載體,對小學(xué)生的成長起著非常重要的作用。因此,實現(xiàn)社團(tuán)課程的信息化管理非常重要。本系統(tǒng)是根據(jù)學(xué)校社團(tuán)招新業(yè)務(wù)量身定制的一款教務(wù)軟件,實現(xiàn)了中小學(xué)社團(tuán)招新的電子化流程,很大程度上減輕了社團(tuán)教師的工作量。在未使用本系統(tǒng)前,學(xué)校社團(tuán)招生一般耗時兩到三周,并且社團(tuán)教師去班級招生時,還容易遺漏一些偏僻角落的班級。系統(tǒng)應(yīng)用之后,只需等待學(xué)生報名,報名結(jié)束即可直接導(dǎo)出報名數(shù)據(jù),并且該表格數(shù)據(jù)可以直接用于后期課上點名,非常的方便。
并且基于LNMP的軟件系統(tǒng),較傳統(tǒng)的Windows服務(wù)器架構(gòu)在系統(tǒng)的安全系、穩(wěn)定性上也有質(zhì)的飛躍。在系統(tǒng)運行階段,我會不斷地收集用戶體驗數(shù)據(jù),不斷地迭代完善系統(tǒng)。后期,當(dāng)系統(tǒng)運行到非常穩(wěn)定的階段,預(yù)計會再加上課程展示模塊和作業(yè)成績模塊,屆時,系統(tǒng)會收集到報名數(shù)據(jù)、學(xué)生平時的作業(yè)數(shù)據(jù)和社團(tuán)最后的結(jié)業(yè)成績數(shù)據(jù),最后我們對這些數(shù)據(jù)運用大數(shù)據(jù)技術(shù)進(jìn)行綜合分析,可以為學(xué)校的社團(tuán)建設(shè)和學(xué)生的社團(tuán)申請?zhí)峁┮恍┯袃r值的建議。
參考文獻(xiàn):
[1] 趙學(xué)敏.以社團(tuán)活動為平臺,促進(jìn)學(xué)校藝術(shù)教育 [J].高考,2020(32):127.
[2] 劉曉知.PHP在動態(tài)網(wǎng)站開發(fā)中的優(yōu)勢 [J].電子制作,2020(8):64-65.
[3] 蔣亞輝.基于LNMP搭建教學(xué)資源分享網(wǎng)盤FileRun [J].中國信息技術(shù)教育,2020(2):95-98.
[4] 徐茂紅,王飛,張明.基于大數(shù)據(jù)量的Redis技術(shù)應(yīng)用與研究 [J].信息技術(shù)與信息化,2019(11):228-230.
[5] 史正鶴.淺析如何在社團(tuán)實踐活動中培養(yǎng)學(xué)生的品德 [J].天天愛科學(xué)(教育前沿),2020(7):138.
作者簡介:袁源(1990.11—),男,漢族,江蘇揚州人,信息技術(shù)教師,研究生,研究方向:遠(yuǎn)程教育平臺設(shè)計及開發(fā)。