蔣 帥, 陳 光, 任卓君
(東華大學 信息科學與技術學院, 上海 201620)
近幾年,基于Internet的遠程教育及網絡教育得到了蓬勃的發展,各種遠程教學系統相繼誕生。目前很多遠程教學系統存在一個共同的問題:就是大多數教學均以視頻或課件的形式進行,這種教學方式更適合于理論為主的教學,而對于實踐性較強的課程特別是理工科教學來說,還遠不能滿足實際需求,因而迫切需要一種遠程實驗系統來提高網上實踐教學的能力[1-5]。
遠程實驗是一個嶄新的概念,是隨著現代計算機技術進步而產生的一種嶄新的實驗模式,例如,新加坡國立大學(NUS)的遠程實驗室允許用戶通過Internet進行遠程實驗,可以實現昂貴的實驗設備共享[6]。針對計算機網絡這門課程,東華大學信息學院網絡課題組自主研發了基于B/S模式的遠程網絡實驗平臺,學生用戶通過本機web瀏覽器自主登錄該平臺,遠程訪問網絡設備進行計算機網絡實驗。然而實際實驗室的實驗設備是有限的,如何合理地進行資源分配就顯得尤為重要,本文針對這一實際需求,為了能更好、合理的進行資源的調度與分配,設計并實現了時間、網絡設備的在線預約功能。
本網絡實驗室的拓撲如圖1所示,學生通過互聯網來訪問實驗室內部網絡,首先要通過VPN的權限認證[7-8]。進入實驗室內部網絡后,遠程服務器給學生分配所能訪問的網絡設備(交換機、路由器、以及攝像頭)。交換機、路由器主要是學生做網絡實驗的硬件設備,攝像頭把網絡實驗室的實時狀態反饋給學生。該遠程網絡實驗平臺裝載在遠程服務器上,起到對實驗室資源的管理與分配作用。

圖1 平臺硬件組成
開發平臺選擇Microsoft Visual Studio 2008(VS2008),采用C#作為開發語言[9-12]。C#語言是.NET的平臺的母語。它的定義主要從C和C++繼承而來。它是一種最新的、面向對象的編程語言。C#結合了Microsoft的C++語言結構體,能夠被轉換成Web服務,允許任何操作系統上運行的任何語言通過Internet被調用。這樣既保證了操作系統的獨立性,也保證了語言本身的獨立性。由于.NET強大的類庫支撐以及VS2008代碼視圖相分離的編程模式,使得基于C#開發工作變得簡單,大大縮短了研發周期。涉及到數據操作,選用數據庫Microsoft SQL Server 2005,來進行數據的跟蹤訪問、存取和分析[13]。
在線預約的設計流程如圖2所示,其基本思想是:在登錄遠程網絡實驗平臺進行網絡實驗前,要進行時間、實驗設備等的預約,即學生首先通過web瀏覽器進行VPN認證,然后登錄該實驗平臺的預約界面并查看“查看實驗室預約情況”,參考當前預約狀況,找到空閑時間段,避免實驗高峰,然后進行預約。預約的內容包括:實驗內容、實驗機柜、開始時間、結束時間。點擊執行預約按鈕,如果提示預約成功,學生就可以在預約的時間內登錄平臺進行網絡實驗。否則,預約失敗重新進行預約。
本文所要實現的在線預約是智能化的,并不需要管理員參與其中。這樣就釋放了管理員這一角色,節省了管理的精力。要實現這一功能,涉及到復雜的預約沖突檢測,這將在下文詳細闡述。

圖2 在線預約設計流程圖

列名數據類型允許空idint主鍵非空snumbernvarchar(50)可空equipmentnvarchar(50)可空econtentnvarchar(50)可控stimedatetime可空etimedatetime可空
為了實現遠程網絡實驗的在線預約功能,必須對學生學號、時間段、機柜等數據搭建數據庫,便于存取、查詢及分析。本文中的數據庫系統采用了Microsoft SQL Server 2005。該數據庫命名為newmanagement,其數據表Ms_order如表1所示:數據列id為數據庫自動生成的編號,增量設為1,數據列snumber存放預約學生的學號,數據列econtent存放預約的實驗內容,數據列equipment存儲預約實驗機柜信息,數據列stime、etime分別存儲預約的開始、結束時間,以此來確定預約的時間段。
本文用自定義的database類中的Do_Insert()方法來實現將學生的預約信息插入到數據庫newmanagment的Ms_order表中,首先在database類中定義個數據庫連接字符串 connstring,用來連接數據庫,在Do_Insert()方法體內創建一個連接對象conn,用來打開數據庫連接,接著創建Sqlcommand對象實例,執行該對象下ExecuteNonQuery()方法[14-15],來執行數據庫更新操作,把學生的預約信息錄入到如表1 所示的數據表中。主要代碼如下:
public class database
{ string connstring = "server=localhost;user id =***;password=***;database=newmanagement";
public static void Do_Insert(string sql)
{
SqlConnection conn = new SqlConnection();
conn.ConnectionString = connstring;
conn.Open();
SqlCommand cmd = new SqlCommand(sql, conn);
cmd.ExecuteNonQuery();
conn.Close();
}
為了實現在線預約的智能化,后臺預約沖突的判斷與檢測必不可少。其邏輯流程圖如圖3所示,這里,經過多種邏輯判斷的嵌套,解決了預約沖突問題。

圖3 沖突檢測邏輯流程圖
在設計過程中,預約的實驗內容與實驗機柜信息可用DropDownList控件來實現菜單式的選擇。在線預約功能的設計重點是預約實驗的時間段,在預約時間選擇方面,有以下三條規則:
(1) 實驗室開放時間為早上八點到下午五點,學生預約的時間必須在這范圍內。
(2) 預約的時間格式必須正確。預約的結束時間與開始時間必須在同一天,預約的時間必須在當前時間之后,預約的開始時間必須小于結束時間,否則系統會給出報錯提醒。
(3) 實驗室資源有限,所以設定預約機制,每個學生每天只能預約一次。
實驗時間的選擇采用datetimepicker控件,基于jquery技術結合日歷控件和slider控件,定義小時滑動條大小為24,分鐘滑動條大小為60,秒鐘滑動條禁用。當拖動滑動條時,便可選擇相應的日期和時間。使用textbox控件,定義控件的ID為time1和time2,在頁面前端head中,定義控件的顯示樣式和功能,主要代碼如下所示:
(function(){
('#time1').datetimepicker({
showSecond: true,
timeFormat: 'hh:mm:ss'
});
……
學生通過datetimepicker控件選擇預約的時間,點擊確定按鈕。time1,time2的text屬性獲得具體的時間。文本中時間必須轉化成datetime類型,然后進行預約時間格式的判斷,主要代碼如下:
timestring = this.time1.Text.Substring(0, 10);
if (!database.iexist(s, timestring))
{if(!database.isexists(timestring))
{string sql = "insert into register(sid,econtent,equipment,stime,etime) values('" + s + "','" + s1 + "','" + s2 + "','" + d1 + "','" + d2 + "') ";
……
在此代碼中,涉及database類中iexist()與iexists()兩種方法,database.iexist()方法用于判斷是不是在同一天預約,database.isexists()用于判斷,預約的日期是否重復。
對于iexist()方法,首先建立連接對象,然后為連接字符串賦值,打開數據連接,執行SQL語句。將相應的數據讀取出來,并判斷是否存在記錄,最后關閉數據庫。參數c代表學生學號,參數d代表學生預約日期。程序獲得學生預約時間,截取其日期用作參數d,通過Session變量獲得學生學號,SQL語句查詢newmanagement數據庫中Ms_order表的stime列判斷用戶在當天是否有記錄,主要代碼代碼如下:
sql = "select * from register where (select CONVERT(varchar(10),stime,120)where sid='" + c + "')='" + d + "'";
SqlConnection conn = new SqlConnection(); conn.ConnectionString = connstring;
conn.Open(); SqlCommand comm = new SqlCommand(sql, conn);
SqlDataReader rs = comm.ExecuteReader();
if (rs.Read())
{ return true;}
rs.Close();
return false;
對于iexists()方法,與iexist()方法類似只是SQL語句不同,sql = "select * from register where (select convert(varchar(10),stime,120))='" + a + "'",即通過查詢management數據庫中Ms_order表的stime列,截取年月日,來判斷預約的日期是否重復。
時間的預約是在線預約功能的重點。其基本思路:提取數據表Ms_order中stime與etime兩列數據中的小時、分鐘信息組成一張表,放在dataset數據集中,然后把dataset里存放時間信息的表賦給datable,通過for()循環對datable表進行遍歷,把表里的時間數據轉化成整型與time1,time2里的時間數據進行比較,從而進行時間段沖突的檢測。
string connstring = "server=localhost;user id =***;password=***;database=management";
SqlConnection con = new SqlConnection();
con.ConnectionString = connstring;
SqlDataAdapter dap = new SqlDataAdapter("select convert(varchar(10),stime,108),convert(varchar(10),etime,108) from register where convert(varchar(10),stime,120)='" + timestring + "'", con);
DataSet ds = new DataSet();
dap.Fill(ds, "Ms_order");
DataTable dt = ds.Tables[0];
for (int k = 0; k < dt.Rows.Count; k++)
{
int p1 = Convert.ToInt32((dt.Rows[k][1].ToString().Replace(":","")));
int p2 = Convert.ToInt32((dt.Rows[k][0].ToString().Replace(":","")));
if ((p2<=d4&&d4<=p1)|| (p2<=d5&&d5<=p1))
{
……
break;
}
string sql2 = "insert into register(sid,excontent,equipment,stime,etime) values ('" + s + "','" + s1 + "','" + s2 + "', '" + d1 + "','" + d2 + "')";
……
break;
}
學生以用戶名2111044登錄平臺,進入預約系統,填入預約的信息,選擇預約開始時間為2013-03-29 08:14:00,預約結束時間為2013-03-29 09:12:00,實驗內容選擇static實驗,實驗機柜選擇Rack6,點擊執行預約,預約成功。最后可以點擊“查看實驗室預約情況”,如圖4所示,表明預約信息已經存儲。

圖4 預約查詢頁面
某學號為003的學生進行在線預約,該生在預約之前先點擊“查看實驗室預約情況”,如圖5所示,如果他在預約界面填入如圖6所示的預約信息,顯然與圖6中的學生學號為2007021214預約時間段沖突。當他點擊“執行預約”按鈕后,將顯示了預約失敗,預約沖突檢測成功。

圖5 已預約信息
經過反復測試,結果證明,本文提出的結合預約信息存儲與預約沖突檢測的在線預約功能能夠很好地應用在遠程網絡實驗平臺上,為實驗室設備資源的合理分配和調度提供了技術支持。

圖6 驗證預約沖突的輸入信息
基于B/S模式的遠程網絡實驗平臺為本校學生用戶提供了基于網絡的實驗環境,大大地拓展了網絡實驗的外延,提供了實驗的靈活性。本文為遠程網絡實驗平臺設計的在線預約功能,無疑為平臺的實際應用提供了保障。一方面,它為實驗室設備資源的合理分配和調度提供了技術支持。另一方面,通過對實驗時間和實驗設備的自主在線預約,減輕了實驗室管理人員的工作壓力,并提高了學生實驗的自主性,符合開放性原則。
[1] 徐曼瓊.清華大學強度與振動中心實驗室網上預約系統的建設及管理[J].實驗技術與管理,2006,23(12):137-138.
XU Man-qiong. Building and Managing the Web Reservation System for Central Laboratory of Strength and Vibration in Tsinghua University[J]. Experimental Technology and Management,2006,23(12):137-138.
[2] 陳 希,丁永尚.基于B/S方式的實驗預約查詢系統設計[J].實驗技術與管理,2008,25(7):107-108.
CHEN Xi, Ding Yong-shang. Design of Experiment Booking Inquiry System Based on B/S[J].Experiment Technology and Management,2008,25(7):107-108.
[3] 張亦華.網絡遠程實驗的實踐與思考[J].實驗技術與管理,2002,19(1):89-92.
ZHANG Yi-hua. Practice and Thought of Remote Network Experiment[J]. Experiment Technology and Management,2002,19(1):89-92.
[4] 龐文堯.遠程實驗技術發展現狀[J].科技通報,2004,20(4):311-315.
PANG Wen-yao. Research of Remote Experiment Technology Development[J].Bulletin of Science and Technology,2004,20(4):311-315.
[5] 彭 波,張福義,劉 志.基于Internet遠程實驗教學系統[J].實驗室技術與管理,2007,24(9):97-100.
PENG Bo, ZHANG Fu-yi, LIU Zhi. An Internet-based Experiment Remote-teaching System[J]. Experiment Technology and Management,2007,24(9):97-100.
[6] 殷培強.基于網絡的遠程控制實驗系統研究與開發[D].浙江:浙江工業大學,2007:3-6.
[7] 簡清明.SSL VPN及其在安全遠程訪問中的應用[J].四川理工學院學報(自然科學版),2005,18(1):57-59.
JIAN Qing-ming. SSL VPN and Application in Secure Remote Access[J].Journal of Sichuan University of Science & Engineering(Natural Science Edition),2005,18(1):57-59.
[8] 王愛兵,劉吉強.虛擬網卡在VPN網關中的應用[J].計算機安全,2006,11(11):28-29.
WANG Xue-bin, LIU Ji-qiang. Application of Virtual Network Interface Card in VPN Gateway[J].Network & Computer Security,2006,11(11):28-29.
[9] 明日科技,趙會東.C#開發之道[M].北京:電子工業出版社,2011:13-18.
[10] 王小科,徐 薇.C#從入門到精通[M].北京:清華大學出版社,2010:4-6.
[11] 明日科技.C#開發經驗技巧寶典[M].北京:人民郵電出版社,2007:130-144.
[12] 王小科,王 軍.C#開發實戰1200例[M].北京:清華大學出版社,2011:67-107.
[13] 劉麗霞,李俊民.C#范例開發大全[M].北京:清華大學出版社,2010:308-349.
[14] 薩師煊,王 珊.數據庫系統概論[M].北京:高等教育出版社,2004:94-97.
[15] 朱印宏,蘇震巍.ASP.NET 3.5+SQL Server 網站模塊化開發全程實錄 [M].北京:清華大學出版社,2009:126-128.