[摘要] 本文在比較B/S和C/S結構優缺點的基礎上,提出B/S和C/S復合結構的考勤系統架構。并對C/S結構的通訊模塊的實現方法進行詳細闡述。
[關鍵詞] B/S; C/S; 考勤系統
doi : 10 . 3969 / j . issn . 1673 - 0194 . 2011 . 14. 047
[中圖分類號]TP311 [文獻標識碼]A [文章編號]1673 - 0194(2011)14- 0080- 03
0引言
B/S軟件體系結構,即Browser/Server(瀏覽器/服務器)結構(如圖1所示),是隨著Internet技術的興起而發展起來的。其用戶界面完全通過WWW瀏覽器實現,一部分事務邏輯在前端實現,主要事務邏輯在服務器端實現,在邏輯上分為三層:客戶層、應用服務層和數據服務層。B/S的優勢在于適用于Internet,維護工作量小,增強了系統的可擴展性,更新方便,易于管理和維護,但是它的運行速度較慢,實時性差[1]。
C/S(Client/Server,客戶機/服務器)體系結構如圖2所示。在這種架構中,服務器一般是數據庫服務器,而客戶機一般是PC機,兩者之間通過局域網相連。客戶機上運行處理業務邏輯的應用軟件,并且還負責圖形用戶界面的處理。它運行速度快,數據安全性高,實時性較好[2]。
綜合考慮C/S架構和B/S架構各自的特點,以及考勤管理系統中與終端通訊的實時性要求較高,故系統采用B/S和C/S復合結構來實現。
1結構概述
本文所開發的C/S通訊模塊安裝在工作站上,主要完成的任務是:實時執行B/S模塊下達到數據庫中的命令;實時輪詢考勤機;執行工作站管理人員的命令;將相關信息寫入數據庫。系統架構如圖3所示。
2C/S模塊數據庫表設計
根據C/S模塊在系統中的作用和功能,設計如下數據庫表:
(1) AttWkStation(工作站表):主要存放工作站信息。
WkStationID:工作站編號;
WkStationIP:工作站IP設置;
WkStationName:工作站名稱;
SerialPorts:可用串口;
PollCycle:輪詢周期,工作站按輪詢周期給管理的終端發信號,查看是否通訊正常;
ManageID:管理員編號。
(2) 考勤終端表(AttTerm):存放考勤終端(考勤機)的相關信息,設計如下:
WorkStaionID:工作站編號,由此區分考勤機是屬于那個工作站管理的;
TermID:終端編號;
PortAddress:通訊端口地址;
PortSettings:通訊端口設置;
AuthorityIDs:可接受的授權卡類型組合,表明哪些卡可以在該考勤機上考勤。
(3) AttTermTask(終端任務表):存放由B/S模塊下達的需考勤機完成的命令,并將完成情況寫回,便于查詢。主要指令字段見表1。
其他相關字段如下:
OverStatus:B/S模塊寫入0,C/S通訊模塊執行指令后,如成功寫入1,失敗寫入0;
ExcuteTime:C/S模塊寫入取出指令執行的時間。
(4) 原始記錄表(AttData):記錄員工刷卡時間及刷卡終端號,設計如下:
TermNo:終端號;
EmployeeID:員工編號;
AttDate:簽名日期;
SignType:類型(1,手工簽到;0,讀取;2,計算機登記)。
3程序設計
本系統的C/S模塊采用C#語言在.NET平臺上開發。C#是一種應用于開發.NET應用程序的專屬語言,它以C語言為基礎,同時以C++對象模型,建構其面向對象的語言架構,支持完整的面向對象設計理論[3]。工作站與考勤機的通訊采用串口通訊,利用微軟的MSCOMM控件來實現。MSCOMM控件在.NET平臺上沒有集成,需要自己完成控件注冊,為方便使用,系統將MSCOMM控件的3個主要文件MSCOMM32.DEP、MSCOMM32.OCX、MSCOMM.SRG隨通訊模塊一起打包注冊。與B/S系統的交互采用SQL Server數據庫。程序核心代碼如下:
// 在ListView中顯示從數據庫中讀出的每臺工作站管理的考勤機列表并顯示在ListView控件中。
private void ListMachineInView()
{ myManuDB.iWorkStationNo.ToString("d3") + "' AND TermEnable='0'AND
DataSet myDataSet = new DataSet();
myDataSet = mydatacon.GetDataSet(myManuDB.strConnectionText, strCmdText);
DataTable myDataTable = myDataSet.Tables[0];
}
private void RealCmdTimer_Tick(object sender, System.EventArgs e)
{ myManuDB.ManageModuleCmd();
// 實時輪詢管理任務表,若有管理模塊下達的任務則先執行管理模塊命令
}
private void RealDataRefresh()
{myManuDB.GetRealTimeData();
// 定時時間到后如果已開始實時考勤,則執行實時讀取考勤記錄
}
private void GetRec_Click(object sender, System.EventArgs e)
{myManuDB. GetRecord (strSelMacNo ); // 獲取終端的記錄
}
private void DelMac_Click(object sender, System.EventArgs e)
{ myManuDB.GetRecord(sSelMacNo); // 刪除終端前先將終端記錄讀出保存
myManuDB. DelMac(strSelMacNo); // 刪除終端
}
private void InitialMac_Click(object sender, System.EventArgs e)
{myManuDB.InitialTermAtt(strSelMacNo); // 初始化終端
}
private void AutoSearchMachine_Click(object sender, System.EventArgs e)
{ myManuDB.SearchNewTerm(); // 自動搜索終端并顯示 ListMachineInView();
}
private void RegAll_Click(object sender, System.EventArgs e)
{myManuDB.WriteRegInMac(sTermNo);// 對所有終端寫注冊信息
}
// 數據庫連接操作例程:
public System.Data.SqlClient.SqlConnection IntekSqlCon;
IntekSqlCon.ConnectionString = "packet size=4096;user id=sa;data source=(local);persist security info=True;initial " +"catalog=web;password=intek";
4系統操作實例
5結論
本考勤系統是和英泰克智能卡公司合作開發的,所開發的考勤系統已投入實際使用。從使用效果來看,本文提出的考勤系統架構以及C/S模塊的開發是合理的,取得較好的使用效果。
本文創新之處在于:設計了一種B/S和C/S結構有效結合于一體的考勤系統,并用C#語言在.NET Framework平臺上實現了C/S考勤通訊模塊,將混合架構與單片機考勤終端融為一體。
主要參考文獻
[1] 葛方振,饒運濤,何斌,魏雄. 基于三層B/S和C/S結構考勤管理系統的設計與實現[J]. 計算機與現代化,2005(1):88-89.
[2] 李謙,丁香乾,石碩,姜兆寧. 基于嵌入式系統平臺的智能終端的設計[J]. 微計算機信息,2007,23(8).
[3] 呂文達. 精通C#程序設計[M]. 北京:清華大學出版社,2004:3-5.
注:本文中所涉及到的圖表、注解、公式等內容請以PDF格式閱讀原文