謝飛宏 羅文輝 黃 田 何 磊
(重慶郵電大學(xué)通信與信息工程學(xué)院 重慶 400065)
我校勤工助學(xué)系統(tǒng)中現(xiàn)在的值班安排是采用人工操作的方式來實現(xiàn)的。這種方法造成了人力資源與時間上的浪費。針對此問題,如何實現(xiàn)自動排班,這就是一個值得研究的問題。目前的排班方式需要每個同學(xué)先把自己的課表以截圖的方式發(fā)給負(fù)責(zé)人,再讓負(fù)責(zé)人通過手工的方式整理各個同學(xué)的課表進行排班。這不僅需要浪費負(fù)責(zé)人大量的時間和精力,而且很容易排漏或排錯某個同學(xué)而導(dǎo)致全部重排,因此需要一種更快捷、準(zhǔn)確的方式來進行排班。
網(wǎng)絡(luò)爬蟲技術(shù)就是通過一段程序模仿瀏覽器上網(wǎng)自動地從網(wǎng)上獲取特定信息的技術(shù),是非人工獲取網(wǎng)絡(luò)信息的重要手段。經(jīng)過幾年的發(fā)展,目前出現(xiàn)了許多成熟的開發(fā)爬蟲框架,最為流行的網(wǎng)絡(luò)爬蟲常用框架基本都是基于java或python語言的。因此,基于Java的爬蟲技術(shù)完全可以自動獲取學(xué)生課表信息,進而更便捷地進行排班,完全符合該文的技術(shù)需求。
(一)用戶登錄功能。用戶需要在登錄后才可以使用該系統(tǒng)進行排班,不能通過該系統(tǒng)進行用戶注冊,因為該系統(tǒng)只是為了減輕負(fù)責(zé)人的工作負(fù)擔(dān),受眾比較小。為了減輕服務(wù)器的壓力,該系統(tǒng)不提供注冊功能。負(fù)責(zé)人可以聯(lián)系系統(tǒng)管理獲取登錄所需的用戶名和密碼。
(二)學(xué)號輸入功能。此功能為本系統(tǒng)的重要組成部分。用戶通過該功能可以對數(shù)據(jù)獲取和最后的排班做出一定的要求和限制。比如,輸入待值班學(xué)生的學(xué)號,這是獲取學(xué)生課表的必須前提條件。獲取學(xué)生課表后,為了方便下次查詢,該系統(tǒng)需要將學(xué)生課表信息保存到數(shù)據(jù)中。因此,系統(tǒng)需要建立一張學(xué)生課表信息數(shù)據(jù)表,并定時更新和維護該表,以保證數(shù)據(jù)的一致性。
(三)表格下載功能。此功能為本系統(tǒng)的核心功能,需要根據(jù)學(xué)生的空閑時間形成值班表,然后將結(jié)果寫入excel表格中。在利用Java操作excel表格時,需要用到POI或者JXL組件。最后為用戶提供下載excel的功能,通過瀏覽的文件下載功能將值班表下載到用戶電腦里。
SpringBoot框架是基于Java的一個成熟的微服務(wù)框架。Jsoup是Java提供的一個用于解析HTML頁面的解析器組件,也已經(jīng)十分成熟,完全可以承擔(dān)該文的后端技術(shù)支撐。自動排班系統(tǒng)需要的數(shù)據(jù)通過Jsoup提供的API來實現(xiàn)數(shù)據(jù)爬取,使用Jsoup解析html獲取到系統(tǒng)需要的數(shù)據(jù),通過對學(xué)生課表數(shù)據(jù)的獲取、篩選,得到一個學(xué)生周一到周五的空閑時間情況。該系統(tǒng)將每個待排班同學(xué)的空閑時間信息保存下來,得到在一個時間點內(nèi),可值班的所有同學(xué)信息,再利用計算機的快速計算能力進行排班,得到最佳的值班表。
(一)系統(tǒng)流程。首先,遵循MVC設(shè)計模式對自動排班系統(tǒng)進行搭建,系統(tǒng)獲取用戶輸入的待排班的學(xué)生學(xué)號,以此來獲取指定學(xué)生的課表。其次,系統(tǒng)將學(xué)生課表存入數(shù)據(jù)庫,同時把值班表寫入excel表格,并記錄excel表格的路徑,以便下次查詢,減少系統(tǒng)響應(yīng)時延。最后,該系統(tǒng)通過網(wǎng)絡(luò)下載的形式將結(jié)果發(fā)送到負(fù)責(zé)人的電腦里。流程圖如圖1所示:

圖1 系統(tǒng)流程圖
(二)數(shù)據(jù)庫設(shè)計。本系統(tǒng)數(shù)據(jù)將涉及兩張表,一張表為用戶表,記錄有權(quán)限訪問本系統(tǒng)的用戶。具體屬性包含主鍵id、用戶名、用戶密碼、創(chuàng)建時間、更新時間;另一張表為學(xué)生課程表,記錄學(xué)生行課時間。具體屬性包含主鍵id、學(xué)生學(xué)號、學(xué)生姓名、行課時間點、創(chuàng)建時間、更新時間。
(三)系統(tǒng)模塊設(shè)計。頁面模塊,主要是html文件,用于向用戶進行頁面展示。該頁面有兩個html文件:index.html為登錄頁面,用戶通過這個頁面輸入用戶和密碼;成功登錄后進入downExcel.html頁面,該頁面主要提供學(xué)生學(xué)號的輸入框,以及“下載excel”的下載按鈕。
數(shù)據(jù)自動獲取模塊,該模塊主要是根據(jù)用戶輸入學(xué)生學(xué)號獲取學(xué)生課表和學(xué)生姓名,會先去查找數(shù)據(jù)已經(jīng)保存指定學(xué)生的課表。如果沒有通過爬蟲技術(shù)去教務(wù)在線獲取學(xué)生課表,存入數(shù)據(jù)庫后,會返回學(xué)生課表。
排班計算模塊,數(shù)據(jù)獲取模塊能夠獲取每個學(xué)生的課表,計算每個值班時間點空閑學(xué)生人員及人員相關(guān)信息。它根據(jù)人數(shù)多少對值班時間點進行優(yōu)先級排序,優(yōu)先滿足空閑學(xué)生人員少的時間點。該模塊完成值班表后,將寫入服務(wù)器固定路徑的excel中,并將excel的下載路徑返回給瀏覽器。
我們打開瀏覽器輸入地址后出現(xiàn)登陸界面,能夠成功進入該系統(tǒng)。同時頁面的成功顯示證明,該系統(tǒng)的登錄頁面部分在實現(xiàn)邏輯和代碼編寫上沒有問題。
輸入學(xué)號并點擊獲取excel后,出現(xiàn)設(shè)計所對應(yīng)的頁面。表明系統(tǒng)后端已經(jīng)完成值班確定,并將excel發(fā)到前端頁面供用戶下載。表明學(xué)號輸入功能在邏輯和代碼實現(xiàn)上沒有問題,該功能已經(jīng)實現(xiàn)。其通過學(xué)號獲取了學(xué)生課表,進行了排班,即自動獲取數(shù)據(jù)模塊和數(shù)據(jù)庫相應(yīng)的設(shè)計成功實現(xiàn)。Excel下載功能可以得到一個可用的excel表格,表明基于Java爬蟲的勤工助學(xué)值班自動安排已經(jīng)成功實現(xiàn),排班負(fù)責(zé)人可以通過線上的方式,方便、快捷地進行排班。
在線自動排班,我們利用爬蟲技術(shù)可以自動獲取網(wǎng)絡(luò)信息的特點,應(yīng)用到系統(tǒng)設(shè)計中。該系統(tǒng)劃分為3個子模塊,一是使用JAVA爬蟲技術(shù),通過對網(wǎng)上課表信息的抓取,獲取學(xué)生行課時間和空閑時間;二是得出每個時間點的空閑人員,根據(jù)空閑人員數(shù)最少最先安排的規(guī)則進行值班人員的確定,最后形成一張excel表格;三是用戶通過瀏覽器的形式下載、觀看。這就讓用戶可以快速、便捷地完成排班工作,節(jié)省了大量時間。