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