摘要:當有辦公事務時,為了能及時提醒辦公人員,應用.NET技術和數據庫技術,采用C/S和B/S相結合的方式,提出了實現事務提醒的設計思想和實現方法,并詳細論述了在Visual Studio .Net中實現該方法的過程。
關鍵詞:C#;C/S;B/S;事務提醒
中圖分類號:TP311.1文獻標識碼:A 文章編號:1009-3044(2008)28-0025-02
The Design and Implement of Office Affair Alert System Based on C#
ZHANG Han-wei
(Bengbu Naval Petty Officer Academy,Bengbu 233012,China)
Abstract: In order to alert office staff immediately while having office affairs, applying .NET and database technology, adopting C/S and B/S mode, it presents the design idea and implement means of an Affair Alert Module, and discusses in detail how to realize the method procedure in Visual Studio .Net.
Key words: C#; C/S; B/S; Affair Alert
1 引言
隨著校園網絡的應用,學校常常將一些事務發布在校園網主頁的通知欄中,由于辦公人員不可能一直打開網頁去查看事務信息,而且新的事務會隨時出現,這樣有可能導致一些緊急事務得不到及時處理或者忘記處理。為了解決這個問題,設計了辦公事務提醒系統,能在事務開始前及時通知相關人員,以提高辦公效率。
2 系統設計
2.1 系統設計模式
系統采取了C/S和B/S相結合的設計模式。由于B/S模式在客戶端不需要安裝除瀏覽器外的其它程序,能充分利用校園網的優勢,所以在瀏覽器方式下,主要實現用戶管理、事務信息的管理、查詢、打印功能,而對事務的提醒則采用C/S模式。這樣,既保持了C/S模式下數據處理方便、快捷的特點,又利用了B/S模式下查詢、檢索易用的優點。
系統開發基于Microsoft .NET Framework 2.0框架,采用微軟C#語言,后臺數據庫使用SQL Server 2005。
2.2 系統功能設計
系統采用模塊化設計,將整個系統分為用戶管理模塊、事務管理模塊、事務提醒模塊。
(1)用戶管理模塊
完成用戶和用戶角色的設置。用戶注冊時,除了提供用戶名、密碼等基本信息外,還要提供用戶辦公計算機的主機名或IP地址,以便事務提醒時根據用戶主機名來選取提醒信息。管理員可以設置用戶的角色:個人事務或公共事務。擁有個人事務權限只能向自己定制提醒的信息;擁有公共事務權限的可以向所有或指定注冊用戶發布提醒信息。
(2)事務管理模塊
事務管理模塊的流程可以用圖1來表示。
該模塊的功能主要是用戶登錄后,可以發布新的提醒事務,也可以對自己發布的事務修改、刪除、查詢以及打印或導出到Excel中。發布事務界面如圖2所示。
收信人組合框中,將列出當前注冊用戶的姓名,如果擁有公共事務權限的用戶,選擇“all”,則該提醒事務為公共事務,到時將向所有注冊用戶提醒,否則將向指定用戶提醒;事務日期和時間則為舉辦事務的具體時間。由于事務提醒應有一個提前量,所以設置了提前多少時間開始提醒。
(3)事務提醒模塊
計算機系統時間一旦到達事務設置的提醒時間,將向用戶提醒,屆時任務欄中的圖標閃爍并發出提醒聲音。
2.3 數據庫設計
采用SQL Server 2005數據庫,系統主要使用兩個數據表:用戶表和事務表。用戶表(users)包含userid(用戶名,主關鍵字)、Name(姓名)、PassWord(密碼)、Roleid(角色,與角色表中的id關聯)、Departmentid(單位,與單位表中的id關聯)、HostName(主機名)。事務表(information)結構如表1。
3 事務提醒模塊的實現
該模塊是基于C/S模式的,它的工作流程是:每隔一段時間自動查詢數據庫,從數據庫中提取當前用戶要提醒的信息,然后向用戶提醒。提醒時,窗口最小化,并且任務欄中窗口的標題閃爍,同時發出提醒聲,如果用戶沒有確認,將提醒到該事務開始時間后自動停止。
3.1 界面設計
在窗體上添加一個Timer控件,設置時間間隔為1秒;兩個Label控件,一個顯示提醒的事務,另一個(Visible屬性設置為1)用來保存當前事務的id,以便確認時,將state設置為True(已提醒);再添加一個Button控件,用來關閉該事務的提醒并將窗口最小化。
3.2 程序設計
(1)引入命名空間:using System.Runtime.InteropServices。
(2)設置閃爍的窗口標題欄。通過調用API函數FlashWindow來實現,因此,在Form類中加入API函數的聲明:
[DllImport(\"user32\", EntryPoint = \"FlashWindow\")]
public static extern void FlashWindow(int hwnd, bool bInvert);
(3)窗口最小化。在窗體Load事件中加入語句:
this.WindowState = FormWindowState.Minimized;
(4)定時查詢。在定時器timer1_Tick事件中加入以下主要代碼:
string hostname = Dns.GetHostName(); //獲取用戶機器主機名
SqlConnection conn = new SqlConnection(\"server=(local);uid=sa;pwd=;database=數據庫名\");
string strSql = \"select * from information where (touserid='all' or touserid=@userid) and state=@state and date=@date\";
SqlCommand cmd = new SqlCommand(strSql, conn);
cmd.Parameters.Add(new SqlParameter(\"@userid\", SqlDbType.VarChar, 20));
//調用自定義getUserID()函數,根據當前計算機的主機名從users表中獲取用戶名
cmd.Parameters[\"@userid\"].Value = getUserID(hostname);
cmd.Parameters.Add(new SqlParameter(\"@state\", SqlDbType.Bit));
cmd.Parameters[\"@state\"].Value = 0;
cmd.Parameters.Add(new SqlParameter(\"@date\", SqlDbType.VarChar,10));
cmd.Parameters[\"@date\"].Value = DateTime.Now.Date.ToShortDateString();
conn.Open();
SqlDataReader dr = cmd.ExecuteReader();
if(dr.Read())
{//從數據庫中獲取事務的日期和時間
DateTime date = DateTime.Parse(dr[\"date\"].ToString()+\" \"+dr[\"time\"].ToString());
int ahead = int.Parse(dr[\"ahead\"].ToString()); //取得時間提前量
TimeSpan ts = new TimeSpan(0, 0, ahead, 0);
DateTime remind_date = date.Subtract(ts); //提醒時間
if (remind_date.CompareTo(DateTime.Now) >= 0 remind_date.CompareTo(DateTime.Now.Add(ts))<0)
{ label1.Text = date.ToString()+dr[\"info\"].ToString();
label2.Text = dr[\"id\"].ToString();//保存該事務的id
FlashWindow(this.Handle.ToInt32(), true); //閃爍
System.Media.SystemSounds.Beep.Play(); //提醒聲音
}
}
dr.Close(); conn.Close();
(5)編寫命令按鈕的Click事件代碼。根據label2中保存的id ,修改該事務的state字段值為true,以關閉該事務的提醒,并將窗口最小化。
4 結束語
該事務提醒系統已經在內部網絡中安裝使用,經過一段時間的運行,效果良好。事務提醒功能的運用,對節省時間,提高辦公效率有重要的使用價值。
參考文獻:
[1] Christian Nagel,Bill Evjen,Jay Glynn.李敏波譯.C#高級編程(第3版)[M].北京:清華大學出版社,2006.
[2] 明日科技.Visual C#開發技術大全[M].北京:人民郵電出版社,2007.
[3] 程不功等.ASP.NET 2.0動態網站開發教程[M].北京:清華大學出版社,2006.