




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1、數(shù)據(jù)挖掘技術在電信計費系統(tǒng)中的應用摘要隨著網(wǎng)絡的高速發(fā)展,一些大型廠商推出了服務器出租這項業(yè)務。為了使得出租商快捷、方便以及高效的統(tǒng)計出用戶的登錄信息及應繳費情況,本文開發(fā)了一個電信計費系統(tǒng)。本系統(tǒng)采用C/S架構,在UNIX環(huán)境下以C+為主要的開發(fā)語言開發(fā)完成??蛻舳说墓δ馨ǘ〞r從非結構型服務器日志文件采集用戶數(shù)據(jù),匹配登入/登出信息,向服務器發(fā)送數(shù)據(jù);服務端的功能包括接收客戶端發(fā)送過來的數(shù)據(jù),存儲數(shù)據(jù)和整合數(shù)據(jù)等。從海量用戶數(shù)據(jù)中匹配登入/登出信息采用了數(shù)據(jù)挖掘技術,所提取到的有效計費信息存儲在Oracle數(shù)據(jù)庫中。關鍵詞:電信計費系統(tǒng);數(shù)據(jù)挖掘;數(shù)據(jù)匹配;數(shù)據(jù)整合 The Applica
2、tion of Data Mining Technology in the Telecom Toll SystemABSTRACTWith the rapid development of the network , some large companies such as China Telecom launched the server rent business. In order to statistic user login information and charge more fastly, conveniently and efficiently, a Telecom toll
3、 system is developed in this paper. This system is programmed by C+ language with C/S architecture in Unix operater system.The functions in client port include reading user information from unstructural log file ,matching data and sending data to a server;The functions in sever port include receivin
4、g data from client, data storage and integrating data. Data mining technology is used in the huge amount of data matching processing and all the resultful data are all stored in Oracle database. Keywords:the Telecom toll system ; Data mining ;Data matching ;Data integration 目錄1 引言11.1課題來源及意義11.2國內外發(fā)
5、展狀況1數(shù)據(jù)挖掘技術的基本知識1數(shù)據(jù)挖掘技術的基本應用2數(shù)據(jù)挖掘技術的發(fā)展21.3 本文的主要工作2設計思想和實現(xiàn)目標2論文結構安排32 系統(tǒng)分析32.1可行性研究4 技術可行性4經(jīng)濟可行性42.2需求分析4項目業(yè)務需求4功能模塊5用例描述73概要設計133.1業(yè)務流程13業(yè)務流程中幾個存儲文件的命名規(guī)則13業(yè)務規(guī)則說明133.2系統(tǒng)模塊133.3接口設計15用戶接口15外部接口15內部接口163.4數(shù)據(jù)結構設計16登入/登出記錄數(shù)據(jù)類173.4.2 匹配的用戶登錄記錄類173.5數(shù)據(jù)庫設計184 詳細設計和實現(xiàn)204.1 客戶端模塊204.1.1 數(shù)據(jù)讀取模塊設計204.1.2 數(shù)據(jù)匹配模塊
6、設計234.1.3 數(shù)據(jù)發(fā)送模塊設計274.2 服務端模塊31數(shù)據(jù)接收模塊設計33數(shù)據(jù)存儲模塊設計36數(shù)據(jù)緩沖池384.3異常設計39異常類結構圖39客戶端異常類說明394.4數(shù)據(jù)庫具體實現(xiàn)405 結論42參考文獻43致謝441 引言1.1課題來源及意義隨著計算機及互聯(lián)網(wǎng)技術的高速發(fā)展,一些大的廠家例如電信,推出了服務器出租這項業(yè)務,選擇這項業(yè)務的用戶可以通過遠程登錄服務器上進行自己的工作。服務器出租就是指用戶不需要自己購買服務器,只需要根據(jù)自己的業(yè)務要求,向運營商申請一個帳號通過遠程登錄,便可以輕松享用服務器。由于服務器的價格相當昂貴,所以更多的用戶更傾向于選擇租用,而不是購買。這樣服務器出
7、租便得到了廣泛的發(fā)展。這時就需要一款運行在服務器上的計時軟件,來統(tǒng)計用戶的使用情況來做出相應的收費依據(jù)。在此背景下,電信計費系統(tǒng)便應運而生了,電信計費系統(tǒng)是專門為服務器租賃商開發(fā)研究的,租賃商只需要在各地區(qū)出租的服務器上安裝本系統(tǒng),就會有相應的數(shù)據(jù)從客戶端源源不斷發(fā)送到服務端,這樣便可以輕松的了解各地服務器的運營狀況,以及盈虧情況,同時也可以作為用戶繳納費用的依據(jù)。電信計費系統(tǒng)是專門為電信制作的一款計費程序,可以非常方便、快捷、實時查詢出用戶需要繳納的費用。方便運營商在后續(xù)階段進行合理的計劃調整。通過對這一課題的學習和研究,可以將電信計費系統(tǒng)的基本原理、實現(xiàn)流程等展現(xiàn)出來,并可作為新的綜合電信
8、計費系統(tǒng)來學習和研究,也可以順帶了解實際電信實時計費的工作流程,具有一定的現(xiàn)實意義。1.2國內外發(fā)展狀況由于用戶數(shù)量巨大,所有用戶信息交錯保存在非結構型日志文件中。如何從海量數(shù)據(jù)中找到某一用戶的計費信息,就需要數(shù)據(jù)挖掘技術的支持。數(shù)據(jù)挖掘技術的基本知識數(shù)據(jù)挖掘(Data Mining,簡稱DM),又稱為數(shù)據(jù)庫中知識發(fā)現(xiàn)(Knowledge Discovery from Database,簡稱KDD),它是一個從大量數(shù)據(jù)中抽取挖掘出未知的、有價值的模式或規(guī)律等知識的復雜過程1。整個知識挖掘(KDD)過程是由若干挖掘步驟組成,而數(shù)據(jù)挖掘僅是其中的一個主要步驟。盡管數(shù)據(jù)挖掘僅僅是整個知識挖掘過程中的
9、一個重要步驟,但由于目前工業(yè)界、媒體、數(shù)據(jù)庫研究領域中,“數(shù)據(jù)挖掘”一詞已被廣泛使用并被普遍接受,因此也可以廣義地使用“數(shù)據(jù)挖掘”一詞來表示整個知識挖掘過程,即數(shù)據(jù)挖掘就是一個從數(shù)據(jù)庫、數(shù)據(jù)倉庫或其它信息資源庫的大量數(shù)據(jù)中發(fā)掘出有趣的知識。1.2.2數(shù)據(jù)挖掘技術的基本應用實際上數(shù)據(jù)挖掘技術從一開始就是面向應用的。目前,在很多重要的領域,數(shù)據(jù)挖掘都可以發(fā)揮積極促進的作用。尤其是在如銀行、電信、保險、交通、零售(如超級市場)等商業(yè)應用領域。數(shù)據(jù)挖掘能夠幫助解決許多典型的商業(yè)問題,其中包括:數(shù)據(jù)庫營銷、客戶群體劃分、背景分析、交叉銷售等市場分析行為,以及客戶流失性分析、客戶信用評分、欺詐發(fā)現(xiàn)等等。1
10、.2.3數(shù)據(jù)挖掘技術的發(fā)展數(shù)據(jù)挖掘的目的就是為企業(yè)決策提供的正確依據(jù),利用計算機及信息技術輔助完成從分析數(shù)據(jù)、發(fā)現(xiàn)問題、作出決策到采取行動這一系列操作。因此人們將這種機構行為和手段稱這為“事務智能”(Business Intelligent,簡稱BI),BI能極大地改進決策的質量和及時性,從而改進機構的生產(chǎn)率或發(fā)揮競爭優(yōu)勢。所以近年來,一些大公司將數(shù)據(jù)分析和數(shù)據(jù)挖掘工具及其有關技術組合起來形成所謂BIS(Business Intelligent Softwave)。其中SAS公司的的Enterprise Minter就是將數(shù)據(jù)源、數(shù)據(jù)預處理、數(shù)據(jù)存貯、數(shù)據(jù)分析與發(fā)掘、信息表示與應用等方面技術有
11、機形成一個復雜數(shù)據(jù)挖掘系統(tǒng)有機整體。1.3 本文的主要工作1.3.1設計思想和實現(xiàn)目標設計思想是:任何用戶登錄Unix系統(tǒng),Unix系統(tǒng)都會記錄用戶的登錄信息,所有用戶登入/登出的信息都保存在Unix的系統(tǒng)日志文件中。數(shù)據(jù)采集系統(tǒng)就是通過讀取Unix系統(tǒng)日志文件中用戶登入/登出信息,并找出成對的登入/登出記錄,得到用戶登錄服務器的登入時刻、登出時刻、登錄時間長度等電信用戶收費需要使用的數(shù)據(jù)。實現(xiàn)目標是: 把匹配處理好的數(shù)據(jù)保存成電信工作人員可以閱讀的文本文件,做為電信收費依據(jù)。1.3.2論文結構安排本文的結構安排如下:第一章 引言介紹了課題的概況和相關技術的發(fā)展情況,以及課題的設計思想和實現(xiàn)目
12、標。第二章 系統(tǒng)分析介紹了項目中涉及到的各種數(shù)據(jù)信息,各個功能模塊的運行流程。第三章 概要設計概要設計文檔主要描述了數(shù)據(jù)挖掘系統(tǒng)的總體設計,從上述文檔中明確DMS系統(tǒng)需求的基礎,從而劃分出DMS系統(tǒng)的幾大功能,進行系統(tǒng)開發(fā)分工,明確各模塊之間的接口,為進行后面的詳細設計和實現(xiàn)做好準備。第四章 詳細設計及實現(xiàn)本章主要介紹了各個模塊的具體實現(xiàn)流程圖和具體實現(xiàn)代碼第五章 結論回顧并總結了課題的研究過程中所做的工作,也思考了研究過程中遇到的問題并列出了實踐中的不足之處,最后根據(jù)自己的認識對相關技術的發(fā)展前景進行了展望。2 系統(tǒng)分析2.1需求分析電信公司現(xiàn)在具有哪些設備環(huán)境,能提供哪些原始數(shù)據(jù),需要的最
13、終數(shù)據(jù)形式是什么,數(shù)據(jù)是什么。電信公司為客戶提供Unix服務器出租的服務,這樣就必須有一個程序通過從Unix系統(tǒng)日志文件的海量數(shù)據(jù)中挖掘出用戶登錄、登出的時間來計算用戶登錄時長,并生成數(shù)據(jù)報表存儲在公司另外的一個Oracle數(shù)據(jù)庫中,以便電信公司計算費用。2.2功能模塊根據(jù)用戶需求分析,電信計費系統(tǒng)主要功能模塊包括:數(shù)據(jù)讀取,數(shù)據(jù)匹配,數(shù)據(jù)發(fā)送,數(shù)據(jù)接收,數(shù)據(jù)存儲,數(shù)據(jù)整合。模塊具體活動流程如圖2-1:圖2-1系統(tǒng)活動圖數(shù)據(jù)讀取:該模塊的主要功能是讀取UNIX服務器上的的用戶登錄信息日志文件,備份日志文件,讀取上一次未匹配成功的登錄記錄信息,讀取備份的日志文件。數(shù)據(jù)匹配:該模塊的主要功能是將數(shù)
14、據(jù)讀取模塊讀取到的數(shù)據(jù)按照圖一定的關系匹配成完整的數(shù)據(jù),未完成的匹配的數(shù)據(jù)保存在到文件中。方便下次讀取時進行匹配。數(shù)據(jù)發(fā)送:該模塊的主要功能是建立客戶端socket網(wǎng)絡連接,將匹配好的用戶登錄記錄發(fā)送到服務,未發(fā)送成功的記錄保存在文件中為下次發(fā)送時重新讀取。數(shù)據(jù)接收:該模塊的主要功能是建立服務端的網(wǎng)絡連接,從客戶端讀取匹配好的用戶登錄信息放入緩沖池中。數(shù)據(jù)存儲:該模塊的主要功能是將緩沖池中的數(shù)據(jù)保存到指定的數(shù)據(jù)庫表中。數(shù)據(jù)整合:該模塊的主要功能是將數(shù)據(jù)庫中保存的用戶登錄記錄按照日、月、年整合成詳細的報表。2.3用例描述根據(jù)用戶需求和功能分析,生成系統(tǒng)用例圖。如圖2-1所示。圖2-2系統(tǒng)用例圖電
15、信計費系統(tǒng)各功能模塊的用例說明如下:數(shù)據(jù)讀取用例說明: 保存用戶登錄信息的UNIX系統(tǒng)日志文件在/var/adm目錄下,文件名為wtmpx,日志文件以二進制方式進行存儲的,如果想在UNIX下查看wtmpx,可以使用last命令:last -a -n number | -number -f filename name | ttywtmpx文件中每條記錄都包含有372個字節(jié),所包含的每條記錄項格式如下表2-1所示(其中灰色背景區(qū)域的數(shù)據(jù)為本系統(tǒng)需要采集的數(shù)據(jù)項): 表2-1用戶登錄記錄數(shù)據(jù)項格式位置范圍字節(jié)長度含義000-03132 用戶登錄名 032-0354 初始進程 id 036-06732
16、 設備名 068-0714 進程ID072-0732 登錄類型7-登入,8-登出 074-0752過程終止076-0772 退出狀態(tài)2 這是C數(shù)據(jù)類型補齊產(chǎn)生的空位080-0834 登錄時刻 /單位是秒 084-0874 和微秒 088-0914 會議編號,用于視窗 092-11120 預保留112-1132 significant length of ut_host 114-371257/* 登錄IP*/日志文件登錄數(shù)據(jù)項總數(shù)可以使用公式:記錄項總數(shù)=日志文件大小/372。數(shù)據(jù)采集基本流程如表2-2表2-2數(shù)據(jù)采集的基本流程用例名稱數(shù)據(jù)采集功能簡述DMS管理員運行數(shù)據(jù)挖掘系統(tǒng),完成數(shù)據(jù)采集的
17、功能前置條件數(shù)據(jù)挖掘系統(tǒng)在服務器上已正確安裝基本流1. 管理員啟動DMS服務端系統(tǒng)2. 管理員啟動DMS客戶端系統(tǒng)3. 客戶端程序定期將登錄數(shù)據(jù)文件備份,并清空源文件4. 客戶端系統(tǒng)讀取上次未匹配成功的登入信息5. 客戶端讀取備份的數(shù)據(jù)信息,剔除非法登錄的用戶6. 客戶端獲得用戶的登入/登出記錄表7. 客戶端將用戶登入/登出記錄匹配為完整的登錄記錄客戶端程序將不能成功匹配的登入記錄寫到文件中保存8. 客戶端程序將匹配好的登錄記錄發(fā)送到服務端9. 服務端程序接客戶端發(fā)送的數(shù)據(jù)10. 服務端程序先將數(shù)據(jù)寫到服務端文件存入緩沖池中11.服務端程序將緩沖池的數(shù)據(jù)保存到數(shù)據(jù)庫中分支與異常第1步,若服務端
18、程序啟動失敗,則發(fā)送異常報告。第2步,若客戶端程序啟動失敗,則發(fā)送異常報告。第3步,若清空文件失敗,則發(fā)送異常報告。第4步,若上次未匹配的登入記錄文件不存在,則跳過到第5步。第5步,若讀取備份的用戶記錄數(shù)據(jù)文件失敗,則發(fā)送異常報告。第7步,若指定的保存文件不存在,則創(chuàng)建文件。第7步,若創(chuàng)建目錄或寫文件失敗,則發(fā)送異常報告。第8步,若發(fā)送數(shù)據(jù)失敗,則定時重傳。第10步,若寫入文件失敗,則發(fā)送異常報告。后置條件啟動contrab命令,定時讀取、發(fā)送數(shù)據(jù)備注無數(shù)據(jù)讀取用例說明如表2-3:表2-3數(shù)據(jù)讀取的基本流程用例名稱數(shù)據(jù)讀取功能簡述客戶端程序讀取系統(tǒng)數(shù)據(jù)文件和上次未匹配的登入記錄,形成用戶登錄記
19、錄項。前置條件DMS客戶端程序啟動基本流1) 讀取上次未匹配的登入記錄。2) 將存儲到記錄放入鏈表中。3) 讀取備份的數(shù)據(jù)文件,清空源文件,將文件內容解析成可用的記錄。4. 將解析得到的用戶登錄記錄放入對應的鏈表中。5. 返回用戶登錄記錄鏈表。分支與異常第1步,若上次未匹配的登入記錄文件不存在,則跳過到第3步。第3步,若用戶登錄數(shù)據(jù)文件不存在,則報告異常。后置條件無備注無數(shù)據(jù)匹配用例說明如圖2-4:表2-4 數(shù)據(jù)匹配的基本流程用例名稱數(shù)據(jù)匹配功能簡述DMS客戶端程序讀取用戶的登入/登出記錄鏈表,找到一條匹配的數(shù)據(jù),包裝成匹配記錄,添加到匹配鏈表中,刪除登入/登出記錄,并將本次未匹配的登入記錄保
20、存到指定文件中。前置條件已經(jīng)獲得用戶登入/登出記錄鏈表基本流1. 訪問用戶登入/登出記錄鏈表,按照登入/登出的對應關系匹配數(shù)據(jù),包裝成匹配記錄。2. 把匹配好的記錄添加到匹配鏈表中3. 將未匹配的登入記錄寫到指定的文件中。分支與異常后置條件無備注無數(shù)據(jù)發(fā)送用例說明:表2-5 數(shù)據(jù)發(fā)送的基本流程用例名稱數(shù)據(jù)發(fā)送功能簡述客戶端將匹配好的數(shù)據(jù)通過網(wǎng)絡socket發(fā)送給服務端。前置條件用戶登錄記錄已經(jīng)匹配成功基本流1.讀取發(fā)送失敗的文件。2.創(chuàng)建網(wǎng)絡連接,鏈接到服務端。3.遍歷匹配的用戶登錄記錄集合,將匹配好的用戶登錄數(shù)據(jù)按照指定格式發(fā)送。4.刪除發(fā)送的信息5.循環(huán)直到所有匹配的登錄記錄處理完成。6.
21、保存發(fā)送失敗的記錄到文件中。 7.關閉網(wǎng)絡連接。分支與異常第2步,若網(wǎng)絡連接失敗,則發(fā)送異常報告。第6步,若寫文件失敗,則發(fā)送異常報告。后置條件無備注無數(shù)據(jù)接收用例說明:表2-6 數(shù)據(jù)接收的基本流程用例名稱數(shù)據(jù)接收功能簡述DMS服務端接收從客戶端傳送過來的數(shù)據(jù)。前置條件服務器程序啟動,客戶端完成匹配,連接到服務端,并已發(fā)送數(shù)據(jù)?;玖?. 開啟服務程序。2. 創(chuàng)建socket網(wǎng)絡連接。3. 開啟新的線程為客戶端服務。4. 循環(huán)從客戶端中接受數(shù)據(jù),保存在數(shù)據(jù)池中。5. 關閉流對象,關閉網(wǎng)絡連接,終止線程。分支與異常第1步,若開啟服務失敗,則發(fā)送異常報告。第2步,若獲得網(wǎng)絡連接失敗,則發(fā)送異常報告
22、。第4步,若寫出數(shù)據(jù)失敗,則發(fā)送異常報告。后置條件無備注無數(shù)據(jù)保存用例說明:表2-6 數(shù)據(jù)保存的基本流程用例名稱數(shù)據(jù)保存功能簡述采集系統(tǒng)服務器將存放在數(shù)據(jù)池中的的數(shù)據(jù)保存到數(shù)據(jù)庫。前置條件服務器已經(jīng)接收到數(shù)據(jù)。基本流1、 建立到數(shù)據(jù)庫的連接。2、循環(huán)訪問數(shù)據(jù)池中的數(shù)據(jù)。3、 將數(shù)據(jù)池中的記錄插入到數(shù)據(jù)庫相應的表格中。4、訪問完成后斷開與數(shù)據(jù)庫的鏈接。分支與異常第1步,若建立數(shù)據(jù)庫連接失敗,則發(fā)送異常報告。第2步,若插入記錄失敗,則發(fā)送異常報告。后置條件無備注無數(shù)據(jù)整合用例說明:表2-7數(shù)據(jù)整合的基本流程用例名稱數(shù)據(jù)整合功能簡述服務端將接收到的用戶登錄的數(shù)據(jù)整合成日報表,月報表和年報表。前置條件
23、數(shù)據(jù)庫中存放有用戶登錄信息基本流1. 執(zhí)行SQL語句,將數(shù)據(jù)庫中存放的前一天的記錄按照用戶名和實驗室ip地址為條件組合,統(tǒng)計出前一天,用戶登錄某一實驗室機器的總時間,整理形成日報表。2. 執(zhí)行SQL語句,根據(jù)日報表數(shù)據(jù)整合出用戶登錄服務器記錄的月報表。3. 執(zhí)行SQL語句,根據(jù)用月報表數(shù)據(jù)整合出用戶登錄服務器記錄的年報表。分支與異常后置條件無備注無3概要設計3.1業(yè)務流程3.1.1業(yè)務流程中幾個存儲文件的命名規(guī)則(1)系統(tǒng)日志文件由外部傳遞給客戶端程序,客戶端需要判定該文件是否存在然后才能采集, 采集的數(shù)據(jù)為該文件的備份文件,備份的文件由當前的日期和源文件名共同命名。(2)未匹配成功的登入數(shù)據(jù)
24、項集合保存在文件中,文件名為faillog.dat。(3)發(fā)送失敗的數(shù)據(jù)匹配集合保存在failsend.dat中。3.1.2業(yè)務規(guī)則說明日志登入/登出數(shù)據(jù)項讀取規(guī)則:系統(tǒng)日志文件中的數(shù)據(jù)項有很多類,通過登錄名和登錄類型可以獲知哪些信息需要采集,哪些信息可以舍棄,只有滿足如下條件的數(shù)據(jù)項才是需要采集的:(1)登錄名若以(.)開頭,一般是登錄程序本身的日志數(shù)據(jù)項,為非法數(shù)據(jù),不需要采集。(2)登錄類型必須是7(登入)或8(登出),其他類型的可以舍棄。3.2系統(tǒng)模塊圖3-1系統(tǒng)功能模塊圖物理上DMS系統(tǒng)分為客戶端和服務端兩部分,在客戶端包含數(shù)據(jù)采集模塊,數(shù)據(jù)匹配分析模塊和數(shù)據(jù)發(fā)送模塊;在服務端端包含
25、數(shù)據(jù)接收模塊,數(shù)據(jù)存儲模塊和數(shù)據(jù)整合模塊,各模塊的主要功能如下所示:數(shù)據(jù)采集模塊:該模塊的主要功能是讀取UNIX服務器上的用戶登錄記錄日志的備份文件,提取有用的記錄信息,如表3-1所示,保存到鏈表集合中,并傳給數(shù)據(jù)匹配模塊來進行數(shù)據(jù)匹配。表3-1 要讀取的原始記錄數(shù)據(jù)數(shù)據(jù)名數(shù)據(jù)含義是否需要采集備注說明logname用戶名是匹配同一次登錄會話的必需數(shù)據(jù)之一pid登錄進程ID匹配同一次登錄會話的必需數(shù)據(jù)之二type登錄類型7-登入,8-登出type的值在1-8之間,但只對7與8兩種情況進行處logtime登錄時刻/單位為秒是要采集的數(shù)據(jù),logtime是登入或登出的時間 登錄的IP地址是要采集的數(shù)
26、據(jù)數(shù)據(jù)匹配模塊:數(shù)據(jù)匹配模塊的主要功能是將采集到的用戶記錄信息按照登入、登出關系匹配成一條完整的登入、登出記錄,并計算出用戶的在線時間,將這些信息推入鏈表中,然后將這些信息發(fā)送給數(shù)據(jù)發(fā)送模塊。該模塊的輸入數(shù)據(jù)是從日志文件中采集到的原始記錄,輸出的是匹配好的登入、登出記錄。表3-2需要匹配登錄記錄數(shù)據(jù)數(shù)據(jù)名數(shù)據(jù)含義logname用戶登錄名logintime登入時刻logouttime登出時刻durations登錄時間長度logip登錄終端的ip地址數(shù)據(jù)發(fā)送模塊:該模塊的主要功能是建立連接到服務端,將匹配好的登錄、登出記錄用通過網(wǎng)絡TCP/IP協(xié)議發(fā)送到DMS系統(tǒng)服務端。數(shù)據(jù)接收模塊:該模塊在服務
27、器端主要功能是從網(wǎng)絡中接收客戶端發(fā)送來的登錄/登出數(shù)據(jù)。數(shù)據(jù)存儲模塊:該模塊得主要功能是將從數(shù)據(jù)接收模塊接收到的數(shù)據(jù)按照一定的格式添加到數(shù)據(jù)庫中,保存為用戶登入/登出記錄明細表。數(shù)據(jù)整合模塊:將數(shù)據(jù)庫中保存的用戶登錄/登出記錄明細表的數(shù)據(jù)整理生成日報表,根據(jù)日報表整合成月報表,根據(jù)月報表整合成年報表。用戶登錄服務器的信息在客戶端匹配好后發(fā)送給服務端,服務端接收到這些數(shù)據(jù),并保存在數(shù)據(jù)庫中形成用戶登錄記錄明細表??蛻舳硕ㄆ趶膚tmpx中提取數(shù)據(jù),定期向服務端發(fā)送信息然后我們的程序需要用plsql定期的整理出日報表,月報表和年報表。在數(shù)據(jù)庫中保存的用戶登錄記錄信息結構如下表所示:表3-3數(shù)據(jù)庫中保
28、存的登錄記錄數(shù)據(jù)數(shù)據(jù)名數(shù)據(jù)含義Logname用戶名Logintime登入時間Logouttime退出時間Durations在線時間長度Logip登錄終端的IP地址Labip用戶登錄的實驗室IP3.3接口設計3.3.1用戶接口 用戶:執(zhí)行命令,啟動DMS服務端程序。 系統(tǒng):服務端系統(tǒng)正常運行,等待接收數(shù)據(jù)。 用戶:執(zhí)行命令,啟動DMS客戶端程序。 系統(tǒng):客戶端系統(tǒng)正常運行,采集并發(fā)送數(shù)據(jù)。 外部接口 客戶端系統(tǒng)讀取用戶登錄記錄文件,獲得用戶登錄、登出信息。 客戶端系統(tǒng)讀取上次未匹配成功的登入記錄文件,獲取未匹配的登入記錄數(shù)據(jù)。 服務端系統(tǒng)將匹配好的數(shù)據(jù)寫入數(shù)據(jù)庫表中。 服務端系統(tǒng)整合出日報表,月
29、報表和年報表。 內部接口 客戶端讀取模塊與匹配模塊間的接口: 輸入:讀取解析好的用戶登入/登出記錄鏈表 輸出:無 客戶端匹配模塊與發(fā)送模塊間的接口: 輸入:匹配成功的用戶登錄記錄鏈表 輸出:無 客戶端數(shù)據(jù)發(fā)送與服務端數(shù)據(jù)接收間的接口: 輸入:匹配成功的用戶登錄記錄項 輸出:接收成功與否的消息 服務端數(shù)據(jù)接收模塊與數(shù)據(jù)保存模塊間的接口: 輸入:發(fā)送成功的用戶登錄記錄列表 輸出:無 服務端數(shù)據(jù)保存模塊與數(shù)據(jù)庫間接口: 輸入:發(fā)送成功的用戶登錄記錄列表 輸出:無 服務端數(shù)據(jù)整合模塊與數(shù)據(jù)庫間接口: 輸入:用戶登錄記錄明細表 輸出:用戶登錄記錄的日報表,月報表和年報表3.4數(shù)據(jù)結構設計根據(jù)系統(tǒng)需求,設
30、計出如下數(shù)據(jù)實體:1、LogRec:登入/登出記錄類,用來存放一條原始的用戶登入/登出記錄。2、MatchedLogRec:匹配成功的登錄記錄類,用來表示一條匹配成功的用戶 登錄記錄。登入/登出記錄數(shù)據(jù)類(1)LogRec類圖:圖3-2 LogRec類圖(2)LogRec類成員變量說明成員變量定義成員變量說明備注char logname32用戶名int pid用戶的進程IDshort type登錄類型7=登入;8=登出int logtime用戶登入/登出時刻(秒)char logip257用戶登錄IP表3-4LoRec類成員變量3.4.2 匹配的用戶登錄記錄類MatchedLogRec類圖:圖
31、3-3MatchedLogRec類圖MatchedLogRec類成員變量說明:表3-5MatchedLoRec類成員變量成員變量定義成員變量說明備注char logname32用戶登錄名char logip32用戶登錄終端IPint logintime登入時刻(秒)int logoutTime登出時刻(秒)int durations用戶在線總時間(秒)char labip257實驗室IP3.5數(shù)據(jù)庫設計根據(jù)用戶需求,最后生成的數(shù)據(jù)庫表包括:用戶登錄記錄明細表、用戶登錄記錄日報表、用戶登錄記錄月報表和用戶登錄記錄年報表。數(shù)據(jù)庫具體表結構如下:表3-6用戶登錄記錄明細表字段類型長度約束備注登錄記錄
32、編號Number15PK系統(tǒng)自動生成用戶IDchar32NOT NULL實驗室IPchar20NOT NULL用戶終端IPchar257NOT NULL登入時間Number20NOT NULL登出時間Number20NOT NULL登錄時長Number12由登出時間-登入時間求得表3-7用戶登錄記錄日報表字段類型長度約束備注用戶IDchar32PK實驗室IPchar20PK日登錄時長Number12NOT NULL登出時間Date表3-8用戶登錄記錄月報表字段類型長度約束備注用戶IDchar32PK實驗室IPchar257PK月登錄時長Number12NOT NULL登出時間Date表3-9用
33、戶登錄記錄年報表字段類型長度約束備注用戶IDchar32PK實驗室IPchar20PK年登錄時長Number12NOT NULL登出時間Date4 詳細設計和實現(xiàn)4.1 客戶端模塊Client類封裝數(shù)據(jù)挖掘系統(tǒng)客戶端的所有功能。 圖4-1Client類圖sendLogs方法定義:表4-1sendLogs方法方法原型public void sendLogs()方法功能執(zhí)行數(shù)據(jù)挖掘系統(tǒng)客戶端的完整過程,其中l(wèi)ogReader 負責讀取數(shù)據(jù),logSender負責發(fā)送數(shù)據(jù)參數(shù)說明無返回類型void拋出異常調用類的異常 數(shù)據(jù)讀取模塊設計 logReader類封裝了讀取日志數(shù)據(jù)的各項功能圖4-2logR
34、eader類圖LogReader成員變量說明如表4-2所示:表4-2logReader成員變量成員變量定義成員變量說明char logFileName50讀取用戶登錄數(shù)據(jù)的日志文件名char backFileName50備份的日志文件名char failLoginsFileName50未匹配成功的登錄記錄保存文件名logins list保存登入的記錄鏈表logouts list保存退出的記錄鏈表matches list保存匹配成功的記錄鏈表readLogs方法如表4-3所示:表4-3readLogs定義方法方法原型Public : list readlogs()方法功能讀取日志文件總調度函數(shù)
35、存儲匹配好的數(shù)據(jù)集合參數(shù)說明無返回類型list拋出異常調用函數(shù)中可能拋出的異常readLogs方法活動圖:圖4-3readLogs活動圖數(shù)據(jù)讀取模塊具體代碼實現(xiàn):int fd=open(backFileName,O_RDONLY); struct stat filestate; fstat(fd,&filestate); coutfilesize:filestate.st_sizeendl; for(int i=0;ifilestate.st_size/372;i+) LogRec log; read(fd,&log.logname,32); lseek(fd,36,SEEK_CUR); re
36、ad(fd,&log.pid,4); log.pid=htonl(log.pid); / 大小端轉換htons! read(fd,&log.logtype,2); log.logtype=htons(log.logtype); lseek(fd,6,SEEK_CUR); read(fd,&log.logtime,4); log.logtime=htonl(log.logtime); lseek(fd,30,SEEK_CUR); read(fd,&log.logip,257); lseek(fd,1,SEEK_CUR); if(log.logname0!=.) if(log.logtype=7)
37、 logins.push_back(log); if(log.logtype=8) logouts.push_back(log); 數(shù)據(jù)匹配模塊設計backup方法如表4-4所示:表4-4backup定義方法方法原型private:void backup()方法功能備份日志文件 并清空原文件參數(shù)說明無返回類型void拋出異常讀取數(shù)據(jù)失敗,拋出BackupExceptionbackup方法活動圖: 圖4-4backup活動圖readFailLogins方法如表4-5所示:表4-5readFailLogins定義方法方法原型public: void readFailLogins方法功能讀取上一次未
38、匹配成功的登入記錄參數(shù)說明無返回類型void拋出異常讀取數(shù)據(jù)失敗,拋出ReadFailLoginExceptionreadFailLogins方法活動圖:圖4-5readFailLogins活動圖readBackupFile方法如表4-6所示:表4-6readBackupFile定義方法方法原型public: void readBackupFile方法功能讀取備份的日志文件 把讀取到的數(shù)據(jù)放入對應的屬性中參數(shù)說明無返回類型Void拋出異常讀取數(shù)據(jù)失敗,拋出ReadBackFileExceptionreadBackupFile方法活動圖:圖4-6readBackupFile活動圖matchLog
39、Rec方法如表4-7所示:表4-7matchLogRec定義方法方法原型Public: void matchLogRec()方法功能將用戶登入/登出記錄按照用戶名和IP匹配為完整的登錄記錄,存入matches參數(shù)說明無返回類型void拋出異常匹配數(shù)據(jù)失敗,拋出MatchLogRecExceptionmatchLogRec方法活動圖:圖4-7matchLogRec方法活動圖saveFailLogins方法如表4-8:表4-8saveFailLogins定義方法方法原型Public: void saveFailLogins()方法功能將匹配失敗的日志記錄保存到指定的文件中參數(shù)說明無返回類型無拋出異
40、常匹配數(shù)據(jù)失敗拋出SaveFailLoginsException數(shù)據(jù)匹配模塊具體代碼實現(xiàn):list:iterator oit=logouts.begin(); list:iterator iit=logins.begin(); for(;oit!=logouts.end();) for(iit=logins.begin();iit!=logins.end() if(!strcmp(oit-logname,iit-logname) & oit-pid=iit-pid& !strcmp(oit-logip,iit-logip) MatchedLogRec mlog; strcpy(mlog.log
41、name,oit-logname); mlog.pid=oit-pid; mlog.logintime=iit-logtime; mlog.logouttime=oit-logtime; mlog.durations=oit-logtime-iit-logtime; strcpy(mlog.logip,oit-logip); matches.push_back(mlog); logins.erase(iit); break; else iit+; logouts.erase(oit); oit=logouts.begin(); 數(shù)據(jù)發(fā)送模塊設計LogSender類定義圖4-8LogSender
42、圖 LogSender類成員變量說明如表4-8所示:表4-8LogSender類成員定義成員變量定義成員變量說明char failSendFileName50保存發(fā)送失敗記錄的文件名int fd采集系統(tǒng)服務器網(wǎng)絡描述符unsigned short port鏈接到的服務器端口char serverIp20要連接的服務器ipsendMatches方法如表4-9所示:表4-9sendMatches定義方法方法原型public void sendMatches(list*matches)方法功能發(fā)送匹配成功的日志集合到服務端參數(shù)說明matches 為存儲發(fā)送數(shù)據(jù)的集合鏈表返回類型Void拋出異常建立連
43、接失敗,拋出SendDataException異常 sendMatches方法活動圖: 圖4-9sendMatches活動圖initSocket方法如表4-10所示:表4-10initSocket定義方法方法原型public void initNetWork()方法功能根據(jù)ip和port 以及serverIp連接到服務端,初始化網(wǎng)絡參數(shù)說明無返回類型void拋出異常建立連接失敗,拋出SendDataException異常readSendfailed方法如表4-11所示:表4-11readSendfailed定義方法方法原型Public: voidreadSendfailed(list*matc
44、hes)方法功能讀取未發(fā)送成功的數(shù)據(jù)文件參數(shù)說明matches: 匹配好的用戶日志記錄鏈表指針返回類型void拋出異常發(fā)送數(shù)據(jù)失敗,拋出SendDataException異常saveSendfailed方法如表4-12所示:表4-12saveSendfailed定義方法方法原型Public void saveSendfailed (list*matches)方法功能存儲發(fā)送失敗的數(shù)據(jù) 以備下次重新讀取發(fā)送參數(shù)說明matches: 匹配好的用戶日志記錄鏈表指針存儲時 把集合中剩余的數(shù)據(jù)存儲到文件返回類型void拋出異常發(fā)送數(shù)據(jù)失敗,拋出SendDataException異常數(shù)據(jù)發(fā)送模塊具體代碼實
45、現(xiàn):第一步:讀取上次匹配失敗的數(shù)據(jù) int fd=open(filename,O_RDONLY|O_EXCL);if(fd=-1) return;while(1)MatchedLogRec match;int re=read(fd,&match,sizeof(match);if(repush_back(match); 第二步驟:初始化網(wǎng)絡,建立到服務器的連接 fd=socket(PF_INET,SOCK_STREAM,0); if(fd=-1) coutnet work init failedendl; struct sockaddr_in addr=0; addr.sin_family=PF
46、_INET; addr.sin_port=htons(port); addr.sin_addr.s_addr=inet_addr(serverIp); int confd=connect(fd,(sockaddr*)&addr,sizeof addr); if(confd=-1) coutnet work conn failedsize()0)list:iterator it=matches-begin();MatchedLogRec match=*it;int re=write(fd,&match,sizeof(MatchedLogRec);matches-erase(it);if(re=-1) break; close(fd);4.2 服務端模塊Server類封裝了服務端的所有模塊功能圖4-10Server類圖Server成員變量說明如表4-13所示:表4-13Server成員變量說明成員變量定義成員變量說明char labIp20實驗室ipInt fdsocket描述符DataReciveThread productor接收數(shù)據(jù)的線程DataSaveThread customer存儲數(shù)據(jù)的線程UserData dataPoolProductor和cust
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 中介招工合同范本
- 借款服務合同范本
- 低價藥店轉讓合同范本
- 麗江租車合同范本
- 北京商鋪投資合同范本
- 公司木材采購合同范本
- 勞動合同繼簽合同范本
- 包工防水合同范本
- 公寓精裝修服務合同范本
- 2024年新疆醫(yī)科大學引進考試真題
- 爆破工程師培訓
- 2024年云南省公務員考試《行測》真題及答案解析
- 教科版初中物理八年級下冊知識梳理
- 《飛科電器公司盈利能力存在的問題及完善對策(7800字論文)》
- 零星維修工程項目施工方案1
- 楚辭離騷的原文全文完整注音版、拼音版標準翻譯譯文及注釋
- 湖北省荊州市2024年七年級上學期期中數(shù)學試題【附答案】
- 刑事訴訟法課件
- 肩袖損傷病例討論
- 《ISO 41001-2018 設施管理- 管理體系 要求及使用指南》專業(yè)讀與應用指導材料之2:“4 組織環(huán)境-4.2 理解相關方的需要和期望”
- 2024年中國凍蝦仁市場調查研究報告
評論
0/150
提交評論