1.6.4 單元測(cè)試
開發(fā)完視頻監(jiān)控模塊后,為了保證程序正常運(yùn)行,一定要對(duì)其進(jìn)行單元測(cè)試。單元測(cè)試在程序開發(fā)中非常重要,只有通過(guò)單元測(cè)試才能發(fā)現(xiàn)模塊中的不足之處,從而及時(shí)地彌補(bǔ)程序中出現(xiàn)的錯(cuò)誤。下面對(duì)視頻監(jiān)控模塊中容易出現(xiàn)的錯(cuò)誤進(jìn)行分析。
實(shí)現(xiàn)視頻監(jiān)控系統(tǒng)中的云臺(tái)控制和方向控制功能時(shí),如果直接在“聚焦+”、“聚焦-”、“對(duì)焦+”、“對(duì)焦-”、“光圈+”、“光圈-”、“雨刷+”、“雨刷-”、“上”、“下”、“左”和“右”按鈕的Click事件下編寫代碼,則運(yùn)行程序時(shí),例如單擊“上”按鈕,則云臺(tái)一直向上轉(zhuǎn),但實(shí)際情況是:只有在用戶按下“上”按鈕時(shí),云臺(tái)才向上轉(zhuǎn),而當(dāng)用戶在“上”按鈕上釋放鼠標(biāo)時(shí),則云臺(tái)停止轉(zhuǎn)動(dòng)。經(jīng)過(guò)仔細(xì)分析,發(fā)現(xiàn)實(shí)現(xiàn)云臺(tái)控制和方向控制功能的代碼應(yīng)該在各個(gè)按鈕的MouseDown事件下編寫,而停止云臺(tái)轉(zhuǎn)動(dòng)的代碼則應(yīng)該在各個(gè)按鈕的MouseUp事件下編寫。
1.7 監(jiān)控管理模塊設(shè)計(jì)
1.7.1 監(jiān)控管理模塊概述
監(jiān)控管理模塊主要用來(lái)對(duì)系統(tǒng)登錄用戶進(jìn)行管理,通過(guò)此模塊,可以添加、修改和刪除用戶信息。監(jiān)控管理模塊的運(yùn)行結(jié)果如圖1.18所示。
1.7.2 監(jiān)控管理模塊技術(shù)分析
監(jiān)控管理模塊實(shí)現(xiàn)時(shí),主要用到了ADO.NET技術(shù)操作數(shù)據(jù)庫(kù),下面進(jìn)行詳細(xì)介紹。
使用ADO.NET技術(shù)操作數(shù)據(jù)庫(kù)時(shí),主要用到了Connection、Command、DataAdapter和DataSet 4個(gè)對(duì)象。其中,Connection對(duì)象主要負(fù)責(zé)連接數(shù)據(jù)庫(kù),Command對(duì)象主要負(fù)責(zé)生成并執(zhí)行SQL語(yǔ)句, DataAdapter對(duì)象主要負(fù)責(zé)在Command對(duì)象執(zhí)行完SQL語(yǔ)句后生成并填充DataSet和DataTable,而DataSet對(duì)象主要負(fù)責(zé)存取和更新數(shù)據(jù)。
例如,下面代碼使用ADO.NET技術(shù)向Access 2003數(shù)據(jù)庫(kù)中添加信息,并將數(shù)據(jù)庫(kù)中最新的所有數(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)控管理模塊實(shí)現(xiàn)過(guò)程
本模塊使用的數(shù)據(jù)表:tb_admin
監(jiān)控管理模塊的具體實(shí)現(xiàn)步驟如下:
(1)新建一個(gè)Windows窗體,命名為frmSetMonitor.cs,主要用于實(shí)現(xiàn)系統(tǒng)用戶的管理功能。該窗體用到的主要控件如表1.17示。
(2)frmSetMonitor.cs代碼文件中,實(shí)例化公共類DataOperate的一個(gè)對(duì)象,用來(lái)調(diào)用其中的方法,然后實(shí)例化一個(gè)DataSet對(duì)象,用來(lái)作為數(shù)據(jù)集。關(guān)鍵代碼如下:
例程29 代碼位置:光盤\TM\01\VWMS\VWMS\frmSetMonitor.cs
DataOperate dataoperate = new DataOperate();
DataSet ds;
frmSetMonitor.cs代碼文件中自定義了一個(gè)lviewBind方法,該方法用來(lái)對(duì)ListView控件進(jìn)行數(shù)據(jù)綁定,以顯示數(shù)據(jù)庫(kù)中已經(jīng)存在的用戶。lviewBind方法實(shí)現(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控件中的項(xiàng)。
w SubItems:該屬性用來(lái)獲取包含該項(xiàng)的所有子項(xiàng)的集合。
x Add():該方法用來(lái)向ListView控件中添加項(xiàng)。
frmSetMonitor窗體加載時(shí),調(diào)用自定義方法lviewBind()對(duì)ListView控件進(jìn)行數(shù)據(jù)綁定,顯示數(shù)據(jù)庫(kù)中已經(jīng)存在的用戶。frmSetMonitor窗體的Load事件的代碼如下:
例程31 代碼位置:光盤\TM\01\VWMS\VWMS\frmSetMonitor.cs
private void frmSetMonitor_Load(object sender, EventArgs e)
{
lviewBind();
}