正文

家庭視頻監(jiān)控系統(tǒng)(16)

C#項(xiàng)目開發(fā)案例全程實(shí)錄(第2版) 作者:明日科技


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();

}

 


上一章目錄下一章

Copyright ? 讀書網(wǎng) ranfinancial.com 2005-2020, All Rights Reserved.
鄂ICP備15019699號(hào) 鄂公網(wǎng)安備 42010302001612號(hào)