摘? 要: 教師往往需要將學(xué)生完成作業(yè)的情況輸入到電子表格中。但是,由于原始文檔中存在多個班級,學(xué)生完成作業(yè)的順序較為混亂,且數(shù)據(jù)量較大,直接輸入費時費力。針對該問題,提出利用PHP設(shè)計成績快速輸入系統(tǒng)的解決思路。首先將學(xué)生的學(xué)號信息導(dǎo)入到MySQL數(shù)據(jù)庫,然后通過PHP頁面的文本框接收輸入的學(xué)號字符串并自動增加新的作業(yè)字段,接著通過explode函數(shù)對字符串進(jìn)行分割并提取學(xué)號,再根據(jù)學(xué)號與數(shù)據(jù)庫對比更新當(dāng)前作業(yè)所在字段,最后將數(shù)據(jù)表導(dǎo)出到電子表格。實踐表明,該系統(tǒng)運行速度較快,穩(wěn)定可靠,能夠極大地提高工作效率。
關(guān)鍵詞: 成績快速輸入; PHP; explode函數(shù); MySQL; 字段
中圖分類號:TP319? ? ? ? ? 文獻(xiàn)標(biāo)志碼:A? ? ?文章編號:1006-8228(2019)06-49-04
Abstract: Teachers often need to input student finished jobs into spreadsheet. However, due to the students in the original document belong to different classes, the order of the finished jobs is chaotic, and the amount of data is large, so the direct input is time-consuming and laborious. To solve this problem, a solution of designing a score fast input system with PHP is put forward. Firstly, the student's Student Number Information is imported into the MySQL database, then the string of Student Number Information is received by the text box of the PHP page and the new job field is automatically added. Then the string is segmented by the explode function to extract the Student Number, and the field is updated according to the comparison of the Student Number and the database, and the data table is finally exported to a spreadsheet. Practice shows that the system runs fast, stable and reliable, and can greatly improve the work efficiency.
Key words: score fast input; PHP; explode function; MySQL; field
1 成績輸入的困難
在高校、中職學(xué)校中,大部分的平時作業(yè)為上機(jī)操作或?qū)嶒瀃1]。教師需要記錄學(xué)生完成作業(yè)情況,這也是學(xué)生期末總評成績的重要組成部分。學(xué)生成績是學(xué)生學(xué)習(xí)情況和教學(xué)質(zhì)量的晴雨表,其重要性不言而喻[2]。由于教學(xué)管理日趨嚴(yán)格,平時成績需要記錄,作為評估、考核的原始文檔,如果直接在紙質(zhì)版的成績表上記錄,則需要從中找到某學(xué)生,再找到對應(yīng)某次作業(yè),才能進(jìn)行登記。因為這樣的現(xiàn)場記錄要花費的時間太多,所以教師習(xí)慣于在白紙上記錄學(xué)生的學(xué)號,等期末再統(tǒng)一輸入到電子表格成績表。
由于學(xué)生完成作業(yè)的先后順序是隨機(jī)的,所以教師記錄在紙張上的學(xué)號自然雜亂無章。因此,在將其輸入到電子表格的時候,需要找到對應(yīng)的行(學(xué)號)和列(某次作業(yè)),非常費時費力。如果是多個班級合班上的,則輸入效率更低。因此,如何設(shè)計一種能夠?qū)⒉煌嗉壍膶W(xué)號,快速地輸入到電子表格,成為一大挑戰(zhàn)。
2 快速輸入系統(tǒng)的思路
2.1 輸入的方便快捷
教師現(xiàn)場手寫的記錄比較潦草,圖像識別的硬件技術(shù)和軟件算法又比較復(fù)雜[3],難以通過圖像識別來提高輸入效率。由此,只能在記錄和輸入的策略上減少工作量。一方面,由于同一門課程經(jīng)常存在合班現(xiàn)象,為了方便,用一位數(shù)字表示學(xué)生班別代號,用二位數(shù)字表示學(xué)生本班排序號,三位數(shù)字組合成學(xué)生的學(xué)號,如219為2班19號學(xué)生?,F(xiàn)場記錄只需記錄學(xué)號。另一方面,輸入的時候,采用右手小鍵盤、左手分隔符的方式可以實現(xiàn)快速輸入。其中,分隔符采用最大的按鍵——空格鍵。例如,某次輸入的內(nèi)容為“219 107”,就表示完成本次作業(yè)的學(xué)生的學(xué)號分別為219號和107號。按照“最短學(xué)號、左右手配合、最大按鍵”策略,使得輸入更為快捷。
2.2 提取學(xué)號并修改數(shù)據(jù)
輸入某次作業(yè)的一批學(xué)號之后,就需要從該字符串中提取學(xué)號并修改對應(yīng)的作業(yè)一列的數(shù)據(jù)。每次作業(yè),都會存在部分同學(xué)沒有完成、無法上交的情況,因此造成輸入的學(xué)號不連續(xù),無法使用電子表格的排序功能進(jìn)行自動處理。所以,最終只能通過設(shè)計程序來實現(xiàn),解決思路如下。
第一步,將學(xué)生的學(xué)號信息從電子表格導(dǎo)入數(shù)據(jù)庫。
第二步,輸入完成某次作業(yè)的學(xué)生的學(xué)號,一般為幾十個學(xué)生的學(xué)號,從而形成一長串字符串。
第三步,以空格為分割符,對字符串進(jìn)行分割,提取出每個學(xué)號,接下來就是根據(jù)提取出來的學(xué)號,與數(shù)據(jù)庫進(jìn)行比對并進(jìn)行相應(yīng)的修改。
第四步,把修改好的成績導(dǎo)出到電子表格。
3 PHP應(yīng)用程序的設(shè)計
3.1 動態(tài)技術(shù)的選擇
通過前面的分析可以看出,要實現(xiàn)設(shè)計要求,必須要設(shè)計程序。目前的程序從設(shè)計架構(gòu)看可以分為C/S(Client/Server,客戶/服務(wù)器)和B/S(Brower/Server,瀏覽器/服務(wù)器)兩大類型。前者運行速度較快,但是需要安裝才能運行,如果要修改還需要在開發(fā)平臺中重新編譯,比較麻煩。后者速度稍慢,但是只要有瀏覽器即可運行,修改也比較便捷。目前,Web系統(tǒng)的應(yīng)用日益廣泛,傳統(tǒng)需安裝的Foxmail等軟件都可以在Web頁面中完成[4]。由于Web開發(fā)成為發(fā)展主流,在此采用B/S模式設(shè)計該系統(tǒng)。
B/S模式的開發(fā)主流語言主要有PHP、JSP、ASP、ASP.NET幾種。雖然它們都能實現(xiàn)Web應(yīng)用程序,但是差異還是比較大的。PHP具有完全開源、完全免費、跨平臺、開發(fā)容易、修改維護(hù)方便等諸多優(yōu)點[5]。目前,在動態(tài)網(wǎng)頁上,PHP獲得了最廣泛的支持,全球排行前100萬的網(wǎng)站中有70%以上采用了PHP技術(shù),例如國內(nèi)的百度、淘寶、新浪等大型網(wǎng)站。在論壇、中小型企業(yè)網(wǎng)站中,PHP更是處于絕對壟斷的地位。另外,PHP的各種資源相當(dāng)豐富,容易解決技術(shù)問題。因此,選擇PHP技術(shù)來設(shè)計系統(tǒng)。
3.2 環(huán)境與數(shù)據(jù)庫設(shè)置
采用phpStudy來配置環(huán)境。該軟件小巧精悍,集成了PHP編程環(huán)境、MySQL數(shù)據(jù)庫、phpMyAdmin管理工具、Apache服務(wù)器平臺等工具,自動完成常規(guī)的配置[6]。此時,在系統(tǒng)默認(rèn)的網(wǎng)站根目錄下的WWW文件夾編寫php網(wǎng)頁文件,就可以通過http://localhost/來訪問了。
PHP默認(rèn)采用MySQL數(shù)據(jù)庫。MySQL具有開源、免費、支持千萬條記錄、容易移植、安裝調(diào)試簡便等優(yōu)點,特別適合中小型信息系統(tǒng)[7]。該系統(tǒng)的數(shù)據(jù)表中有兩種類型的字段:①學(xué)號,用于記錄若干行學(xué)生的學(xué)號;②某次作業(yè),用于記錄某學(xué)生是否完成該次作業(yè)。由于作業(yè)的次數(shù)不是固定的,因此一般采用自動增加的方式來實現(xiàn);而學(xué)號是固定的,需要從電子表格中導(dǎo)入。
要將學(xué)號導(dǎo)入到MySQL數(shù)據(jù)表,首先要將電子表格的成績表,保留nums(學(xué)號)這一列,另存為CSV格式的文件123.csv。然后在test數(shù)據(jù)庫中導(dǎo)入該文件。此處要注意勾選“文件首行包含數(shù)據(jù)表的字段名”,否則會影響該字段的名稱。完成之后,系統(tǒng)會自動新建數(shù)據(jù)表TABLE 1。例如,筆者的某門課程有兩個班,學(xué)號分別從101到135、201到235,導(dǎo)入test數(shù)據(jù)庫后如圖1所示。
默認(rèn)表TABLE 1的名字中間含有空格不方便操作,而且名稱也不容易記憶,在此采用RENAME TABLE `test`.`table 1` TO `test`.`pingshi` 的命令將該表改名為pingshi,意思是平時作業(yè)的數(shù)據(jù)表。
3.3 Session控制新的字段
不管是電子表格,還是MySQL中的數(shù)據(jù)表,都是一個行(記錄)、列(字段)的二維表?,F(xiàn)在nums列已經(jīng)有了,學(xué)號數(shù)據(jù)也有了,只需要在網(wǎng)頁每次刷新的時候插入某次作業(yè)的新列即可。為了確保每一列都不相同,采用Session技術(shù),分三個步驟:
第一,用Session_start()命令聲明使用Session變量。
第二,定義變量并使之自增,例如$_SESSION['wu']++。其中的wu變量就是一個在所有頁面中的全局變量。
第三,由于數(shù)字直接用于字段的名稱并不符合數(shù)據(jù)庫的命名規(guī)范,因此定義變量lie,用于產(chǎn)生新的字段。
3.4 字符串的接收與分割
為了接收用戶輸入的某次作業(yè)的學(xué)號,首先要在PHP頁面中添加一個Form窗體、一個textarea文本框、一個submit的提交按鈕,HTML代碼如下:
以上代碼中文本框的名字為text。當(dāng)用戶按下提交按鈕后,PHP程序通過if(!empty($_POST['button1']))判斷是否產(chǎn)生響應(yīng),然后對text的字符串進(jìn)行分割處理。字符串分割、模糊處理的算法很多[8],但是PHP提供了explode函數(shù),本系統(tǒng)的分割處理較為簡單,因此直接使用explode將字符串打散為數(shù)組即可。核心代碼如下:
此時,$tmp[$i]就是某次作業(yè)所對應(yīng)所有學(xué)號,將其插入到對應(yīng)的列即可。
3.5 數(shù)據(jù)庫操作
成績快速輸入系統(tǒng)面向的是數(shù)據(jù),因此核心的操作是數(shù)據(jù)庫。
第一步,PHP頁面要鏈接到MySQL數(shù)據(jù)庫:
第二步,將分割出來的各個學(xué)號的數(shù)值與pingshi表中的nums字段進(jìn)行匹配,如果符合則修改當(dāng)前作業(yè)列的內(nèi)容:
第三步,循環(huán)遍歷本次輸入的字符串并修改數(shù)據(jù)庫之后,需要清空各種臨時變量并關(guān)閉數(shù)據(jù)庫鏈接:
4 系統(tǒng)測試
該系統(tǒng)在廣西欽州商貿(mào)學(xué)校的“網(wǎng)頁設(shè)計”、“Internet應(yīng)用”等幾門課程中投入使用,獲得較好的效果。例如,將某次作業(yè)的成績輸入到系統(tǒng)中,如圖2所示:
第一行的“1”表示當(dāng)前session變量。第二行表示插入新的字段L1成功。接下來的文本框用于輸入學(xué)生的學(xué)號。點擊提交后,通過MySQL管理工具phpMyAdmin中可以看到插入的作業(yè)完成情況已經(jīng)成功,test數(shù)據(jù)庫中的pingshi表,里面除了nums字段外,還自動增加了L1字段。已經(jīng)完成本次作業(yè)的101、103、104、105號同學(xué),他們的L1列的內(nèi)容被修改為1;而102號同學(xué)沒有完成,保持為初始化的數(shù)值0。
輸入并提交完15次的作業(yè),就可以將該數(shù)據(jù)表導(dǎo)出為CSV格式,該格式可以在Excel中直接打開。最終效果如圖3所示。
采用PHP成績快速輸入系統(tǒng),60秒就能輸入1個班的學(xué)號字符串并完成自動處理。
假設(shè)每位教師每個學(xué)期10個班、每個班級35人、每個學(xué)期15周次的作業(yè),PHP系統(tǒng)所需要的時間為:10×15×60=9000秒。
而傳統(tǒng)的輸入方式是先在紙張上看到某學(xué)號,再在電子表格中找到該學(xué)號,將鼠標(biāo)定位到某次作業(yè)的那一列,輸入1回車確定。該操作流程每處理1人次的作業(yè)就需要消耗10秒時間,同樣的工作量需要的時間為:10×35×15×10=52500秒。
經(jīng)過比較可以看出,PHP系統(tǒng)所需要的時間僅為傳統(tǒng)方式的17.1%,效率獲得極大提高。
5 結(jié)束語
針對海量作業(yè)成績的輸入難題,利用PHP設(shè)計自動化處理系統(tǒng),通過PHP自動增加新字段、對輸入字符串進(jìn)行分割、將提取的學(xué)號與數(shù)據(jù)庫匹配、修改數(shù)據(jù)庫等步驟,將學(xué)號排列混亂、大量數(shù)據(jù)的平時作業(yè)成績快速輸入到電子表格中。實踐顯示,該系統(tǒng)具有輸入便捷、處理快速、穩(wěn)定可靠等優(yōu)點,能夠大大節(jié)約時間,減輕勞動量。該系統(tǒng)容易移植到其他亂序、海量輸入的應(yīng)用場合中。
參考文獻(xiàn)(References):
[1] 吳國輝.基于AJAX的便攜式作業(yè)管理系統(tǒng)的設(shè)計[J].電子制作,2014.16:64-65
[2] 倪玲玲.高職院校學(xué)生成績管理系統(tǒng)的設(shè)計與實現(xiàn)[D].湖北工業(yè)大學(xué)碩士學(xué)位論文,2017.
[3] 許廣強(qiáng),賈翠翠,詹念等.基于FPGA和DBN的手寫體圖像識別算法的實現(xiàn)[J].電子世界,2017.7:69
[4] 吳國輝.基于PXF模式快速提升網(wǎng)頁視覺效果的研究[J].電子技術(shù)與軟件工程,2016.14:107,165
[5] 丁寧.基于PHP的在線調(diào)研系統(tǒng)的設(shè)計與實現(xiàn)[D].北京郵電大學(xué)碩士學(xué)位論文,2017.
[6] phpstudy.phpstudy安裝及使用教程[EB/OL].http://www.phpstudy.net/jishu-php-2956.html
[7]李強(qiáng).基于MySql的物流管理系統(tǒng)的設(shè)計與實現(xiàn)[J].西安文理學(xué)院學(xué)報(自然科學(xué)版),2017.20(2):50-54
[8] 何曉明,洪親,蔡堅勇等.基于n-gram中英文字符串分割算法實現(xiàn)[J].電腦知識與技術(shù),2012.8(23):5530-5533