


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