1.6.4 單元測試
開發(fā)完視頻監(jiān)控模塊后,為了保證程序正常運行,一定要對其進行單元測試。單元測試在程序開發(fā)中非常重要,只有通過單元測試才能發(fā)現(xiàn)模塊中的不足之處,從而及時地彌補程序中出現(xiàn)的錯誤。下面對視頻監(jiān)控模塊中容易出現(xiàn)的錯誤進行分析。
實現(xiàn)視頻監(jiān)控系統(tǒng)中的云臺控制和方向控制功能時,如果直接在“聚焦+”、“聚焦-”、“對焦+”、“對焦-”、“光圈+”、“光圈-”、“雨刷+”、“雨刷-”、“上”、“下”、“左”和“右”按鈕的Click事件下編寫代碼,則運行程序時,例如單擊“上”按鈕,則云臺一直向上轉(zhuǎn),但實際情況是:只有在用戶按下“上”按鈕時,云臺才向上轉(zhuǎn),而當(dāng)用戶在“上”按鈕上釋放鼠標(biāo)時,則云臺停止轉(zhuǎn)動。經(jīng)過仔細分析,發(fā)現(xiàn)實現(xiàn)云臺控制和方向控制功能的代碼應(yīng)該在各個按鈕的MouseDown事件下編寫,而停止云臺轉(zhuǎn)動的代碼則應(yīng)該在各個按鈕的MouseUp事件下編寫。
1.7 監(jiān)控管理模塊設(shè)計
1.7.1 監(jiān)控管理模塊概述
監(jiān)控管理模塊主要用來對系統(tǒng)登錄用戶進行管理,通過此模塊,可以添加、修改和刪除用戶信息。監(jiān)控管理模塊的運行結(jié)果如圖1.18所示。
1.7.2 監(jiān)控管理模塊技術(shù)分析
監(jiān)控管理模塊實現(xiàn)時,主要用到了ADO.NET技術(shù)操作數(shù)據(jù)庫,下面進行詳細介紹。
使用ADO.NET技術(shù)操作數(shù)據(jù)庫時,主要用到了Connection、Command、DataAdapter和DataSet 4個對象。其中,Connection對象主要負責(zé)連接數(shù)據(jù)庫,Command對象主要負責(zé)生成并執(zhí)行SQL語句, DataAdapter對象主要負責(zé)在Command對象執(zhí)行完SQL語句后生成并填充DataSet和DataTable,而DataSet對象主要負責(zé)存取和更新數(shù)據(jù)。
例如,下面代碼使用ADO.NET技術(shù)向Access 2003數(shù)據(jù)庫中添加信息,并將數(shù)據(jù)庫中最新的所有數(shù)據(jù)顯示在ListView控件中。
string strDPath = Application.StartupPath;
string strDataSource = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source="
+ strDPath.Substring(0, strDPath.LastIndexOf("\\")).Substring(0, strDPath.Substring(0, strDPath.LastIndexOf("\\")). LastIndexOf("\\")) + "\\DataBase\\db_VWMS.mdb";
OleDbConnection oledbcon = new OleDbConnection(strDataSource);
OleDbCommand oledbcom= new OleDbCommand("insert into tb_admin (name,pwd) values('" + txtName.Text + "','" + txtPwd.Text + "')", oledbcon);
oledbcon.Open();
oledbcom.ExecuteNonQuery();
oledbcon.Close();
OleDbDataAdapter oledbda = new OleDbDataAdapter(strCon, oledbcon);
DataSet ds = new DataSet();
oledbda.Fill(ds, tbname);
foreach (DataRow dr in ds.Tables[0].Rows)
{
ListViewItem lvItem = new ListViewItem(dr[0].ToString(), 0);
lvItem.SubItems.Add(dr[0].ToString());
lview.Items.Add(lvItem);
}
1.7.3 監(jiān)控管理模塊實現(xiàn)過程
本模塊使用的數(shù)據(jù)表:tb_admin
監(jiān)控管理模塊的具體實現(xiàn)步驟如下:
(1)新建一個Windows窗體,命名為frmSetMonitor.cs,主要用于實現(xiàn)系統(tǒng)用戶的管理功能。該窗體用到的主要控件如表1.17示。
(2)frmSetMonitor.cs代碼文件中,實例化公共類DataOperate的一個對象,用來調(diào)用其中的方法,然后實例化一個DataSet對象,用來作為數(shù)據(jù)集。關(guān)鍵代碼如下:
例程29 代碼位置:光盤\TM\01\VWMS\VWMS\frmSetMonitor.cs
DataOperate dataoperate = new DataOperate();
DataSet ds;
frmSetMonitor.cs代碼文件中自定義了一個lviewBind方法,該方法用來對ListView控件進行數(shù)據(jù)綁定,以顯示數(shù)據(jù)庫中已經(jīng)存在的用戶。lviewBind方法實現(xiàn)代碼如下:
例程30 代碼位置:光盤\TM\01\VWMS\VWMS\frmSetMonitor.cs
public void lviewBind()
{
lview.Items.Clear();
ds = dataoperate.getDs("select name from tb_admin", "tb_admin");
u foreach (DataRow dr in ds.Tables[0].Rows)
{
v ListViewItem lvItem = new ListViewItem(dr[0].ToString(), 0);
w lvItem.SubItems.Add(dr[0].ToString());
x lview.Items.Add(lvItem);
}
}
U 代碼貼士
u DataRow:該類表示DataTable中的一行數(shù)據(jù)。
v ListViewItem:該成員表示ListView控件中的項。
w SubItems:該屬性用來獲取包含該項的所有子項的集合。
x Add():該方法用來向ListView控件中添加項。
frmSetMonitor窗體加載時,調(diào)用自定義方法lviewBind()對ListView控件進行數(shù)據(jù)綁定,顯示數(shù)據(jù)庫中已經(jīng)存在的用戶。frmSetMonitor窗體的Load事件的代碼如下:
例程31 代碼位置:光盤\TM\01\VWMS\VWMS\frmSetMonitor.cs
private void frmSetMonitor_Load(object sender, EventArgs e)
{
lviewBind();
}