首页 电信计费系统毕业论文

电信计费系统毕业论文

举报
开通vip

电信计费系统毕业论文电信计费系统毕业论文 2012届本科生毕业设计 数据挖掘技术在电信计费系统中的应用 摘 要 随着网络的高速发展,一些大型厂商推出了服务器出租这项业务。为了使得出租商快捷、方便以及高效的统计出用户的登录信息及应缴费情况,本文开发了一个电信计费系统。 本系统采用C/S架构,在UNIX环境下以C++为主要的开发语言开发完成。客户端的功能包括定时从非结构型服务器日志文件采集用户数据,匹配登入/登出信息,向服务器发送数据;服务端的功能包括接收客户端发送过来的数据,存储数据和整合数据等。从海量用户数据中匹配登入/登出...

电信计费系统毕业论文
电信计费系统毕业 论文 政研论文下载论文大学下载论文大学下载关于长拳的论文浙大论文封面下载 2012届本科生毕业 设计 领导形象设计圆作业设计ao工艺污水处理厂设计附属工程施工组织设计清扫机器人结构设计 数据挖掘技术在电信计费系统中的应用 摘 要 随着网络的高速发展,一些大型厂商推出了服务器出租这项业务。为了使得出租商快捷、方便以及高效的统计出用户的登录信息及应缴费情况,本文开发了一个电信计费系统。 本系统采用C/S架构,在UNIX环境下以C++为主要的开发语言开发完成。客户端的功能包括定时从非结构型服务器日志文件采集用户数据,匹配登入/登出信息,向服务器发送数据;服务端的功能包括接收客户端发送过来的数据,存储数据和整合数据等。从海量用户数据中匹配登入/登出信息采用了数据挖掘技术,所提取到的有效计费信息存储在Oracle数据库中。 关键词:电信计费系统;数据挖掘;数据匹配;数据整合 2012届本科生毕业设计 The Application of Data Mining Technology in the Telecom Toll System ABSTRACT With 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 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 receiving 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 2012届本科生毕业设计 目 录 1 引言 ................................................ 1 1.1 课题来源及意义 ........................................... 1 1.2 国内外发展状况 ........................................... 1 1.2.1数据挖掘技术的基本知识 .................................. 1 1.2.2 数据挖掘技术的基本应用 ................................ 2 1.2.3 数据挖掘技术的发展 .................................... 2 1.3 本文的主要工作 ........................................... 2 1.3.1 设计思想和实现目标 .................................... 2 1.3.2 论文结构安排 .......................................... 2 2 系统分析 ............................................ 2 2.1可行性研究 .............................. 错误~未定义书签。4 2.1.1 技术可行性 .......................... 错误~未定义书签。4 2.1.2 经济可行性 .......................... 错误~未定义书签。4 2.2 需求分析 ............................................... 4 2.2.1 项目业务需求 ........................ 错误~未定义书签。4 2.2.2 功能模块 .............................................. 4 2.2.3 用例描述 .............................................. 5 3 概要设计 ........................................... 11 3.1业务流程 ................................................. 11 3.1.1业务流程中几个存储文件的命名规则 ....................... 11 2012届本科生毕业设计 3.1.2业务规则说明 ........................................... 11 3.2系统模块 ................................................. 11 3.3接口设计 ................................................. 13 3.3.1用户接口 ............................................... 13 3.3.2外部接口 ............................................... 14 3.3.3内部接口 ............................................... 14 3.4数据结构设计 ............................................. 14 3.4.1登入/登出记录数据类 .................................... 15 3.4.2 匹配的用户登录记录类 .................................. 15 3.5数据库设计 ............................................... 16 4 详细设计和实现 ...................................... 18 4.1 客户端模块 .............................................. 18 4.1.1 数据读取模块设计 ...................................... 19 4.1.2 数据匹配模块设计 ...................................... 21 4.1.3 数据发送模块设计 ...................................... 27 4.2 服务端模块 .............................................. 31 4.2.1 数据接收模块设计 ..................................... 32 4.2.2 数据存储模块设计 ..................................... 35 4.2.3 数据缓冲池 ........................................... 37 4.3 异常设计 ................................................ 39 4.3.1 异常类结构图 ......................................... 39 4.3.2 客户端异常类说明 ..................................... 39 2012届本科生毕业设计 4.4 数据库具体实现 .......................................... 40 5 结论 ................................................ 41 参考文献 .............................................. 42 致 谢 .............................................. 43 2012届本科生毕业论文(设计) 1 引言 1.1 课题来源及意义 随着计算机及互联网技术的高速发展,一些大的厂家例如电信,推出了服务器出租这项业务,选择这项业务的用户可以通过远程登录服务器上进行自己的工作。服务器出租就是指用户不需要自己购买服务器,只需要根据自己的业务要求,向运营商 申请 关于撤销行政处分的申请关于工程延期监理费的申请报告关于减免管理费的申请关于减租申请书的范文关于解除警告处分的申请 一个帐号通过远程登录,便可以轻松享用服务器。由于服务器的价格相当昂贵,所以更多的用户更倾向于选择租用,而不是购买。这样服务器出租便得到了广泛的发展。这时就需要一款运行在服务器上的计时软件,来统计用户的使用情况来做出相应的收费依据。在此背景下,电信计费系统便应运而生了,电信计费系统是专门为服务器租赁商开发研究的,租赁商只需要在各地区出租的服务器上安装本系统,就会有相应的数据从客户端源源不断发送到服务端,这样便可以轻松的了解各地服务器的运营状况,以及盈亏情况,同时也可以作为用户缴纳费用的依据。 电信计费系统是专门为电信制作的一款计费程序,可以非常方便、快捷、实时查询出用户需要缴纳的费用。方便运营商在后续阶段进行合理的 计划 项目进度计划表范例计划下载计划下载计划下载课程教学计划下载 调整。通过对这一课题的学习和研究,可以将电信计费系统的基本原理、实现流程等展现出来,并可作为新的综合电信计费系统来学习和研究,也可以顺带了解实际电信实时计费的工作流程,具有一定的现实意义。 1.2 国内外发展状况 由于用户数量巨大,所有用户信息交错保存在非结构型日志文件中。如何从海量数据中找到某一用户的计费信息,就需要数据挖掘技术的支持。 1.2.1数据挖掘技术的基本知识 数据挖掘(Data Mining,简称DM),又称为数据库中知识发现(Knowledge Discovery from Database,简称KDD),它是一个从大量数据中抽取挖掘出未知的、有价值的模式或 [1]规律等知识的复杂过程。 整个知识挖掘(KDD)过程是由若干挖掘步骤组成,而数据挖掘仅是其中的一个主要步骤。尽管数据挖掘仅仅是整个知识挖掘过程中的一个重要步骤,但由于目前工业界、媒体、数据库研究领域中,“数据挖掘”一词已被广泛使用并被普遍接受,因此也可以广义地使用“数据挖掘”一词来表示整个知识挖掘过程,即数据挖掘就是一个从数据库、数据仓库或其它信息资源库的大量数据中发掘出有趣的知识。 1 2012届本科生毕业论文(设计) 1.2.2 数据挖掘技术的基本应用 实际上数据挖掘技术从一开始就是面向应用的。目前,在很多重要的领域,数据挖掘都可以发挥积极促进的作用。尤其是在如银行、电信、保险、交通、零售(如超级市场)等商业应用领域。数据挖掘能够帮助解决许多典型的商业问题,其中包括:数据库营销、客户群体划分、背景分析、交叉销售等市场分析行为,以及客户流失性分析、客户信用评分、欺诈发现等等。 1.2.3 数据挖掘技术的发展 数据挖掘的目的就是为企业决策提供的正确依据,利用计算机及信息技术辅助完成从 发现问题、作出决策到采取行动这一系列操作。因此人们将这种机构行为和手分析数据、 段称这为“事务智能”(Business Intelligent,简称BI),BI能极大地改进决策的质量和及时性,从而改进机构的生产率或发挥竞争优势。所以近年来,一些大公司将数据分析和数据挖掘工具及其有关技术组合起来形成所谓BIS(Business Intelligent Softwave)。其中SAS公司的的Enterprise Minter就是将数据源、数据预处理、数据存贮、数据分析与发掘、信息表示与应用等方面技术有机形成一个复杂数据挖掘系统有机整体。 1.3 本文的主要工作 1.3.1 设计思想和实现目标 设计思想是:任何用户登录Unix系统,Unix系统都会记录用户的登录信息,所有用户登入/登出的信息都保存在Unix的系统日志文件中。数据采集系统就是通过读取Unix系统日志文件中用户登入/登出信息,并找出成对的登入/登出记录,得到用户登录服务器的登入时刻、登出时刻、登录时间长度等电信用户收费需要使用的数据。 实现目标是: 把匹配处理好的数据保存成电信工作人员可以阅读的文本文件,做为电信收费依据。 1.3.2 论文结构安排 本文的结构安排如下: 第一章 引言 介绍了课题的概况和相关技术的发展情况,以及课题的设计思想和实现目标。 第二章 系统分析 介绍了项目中涉及到的各种数据信息,各个功能模块的运行流程。 2 2012届本科生毕业论文(设计) 第三章 概要设计 概要设计文档主要描述了数据挖掘系统的总体设计,从上述文档中明确DMS系统需求的基础,从而划分出DMS系统的几大功能,进行系统开发分工,明确各模块之间的接口,为进行后面的详细设计和实现做好准备。 第四章 详细设计及实现 本章主要介绍了各个模块的具体实现流程图和具体实现代码 第五章 结论 回顾并总结了课题的研究过程中所做的工作,也思考了研究过程中遇到的问题并列出了实践中的不足之处,最后根据自己的认识对相关技术的发展前景进行了展望。 3 2012届本科生毕业论文(设计) 2 系统分析 2.1需求分析 电信公司现在具有哪些设备环境,能提供哪些原始数据,需要的最终数据形式是什么,数据是什么。 电信公司为客户提供Unix服务器出租的服务,这样就必须有一个程序通过从Unix系统日志文件的海量数据中挖掘出用户登录、登出的时间来计算用户登录时长,并生成数据报表存储在公司另外的一个Oracle数据库中,以便电信公司计算费用。 2.2 功能模块 根据用户需求分析,电信计费系统主要功能模块包括:数据读取,数据匹配,数据发送,数据接收,数据存储,数据整合。 模块具体活动流程如图2-1: 采集系统客户端采集系统服务器 开始 读取数据 匹配数据 发送数据接收数据 保存数据 整合数据 结束 图2-1 系统活动图 4 2012届本科生毕业论文(设计) 数据读取:该模块的主要功能是读取UNIX服务器上的的用户登录信息日志文件,备份日志文件,读取上一次未匹配成功的登录记录信息,读取备份的日志文件。 数据匹配:该模块的主要功能是将数据读取模块读取到的数据按照图一定的关系匹配成完整的数据,未完成的匹配的数据保存在到文件中。方便下次读取时进行匹配。 数据发送:该模块的主要功能是建立客户端socket网络连接,将匹配好的用户登录记录发送到服务,未发送成功的记录保存在文件中为下次发送时重新读取。 数据接收:该模块的主要功能是建立服务端的网络连接,从客户端读取匹配好的用户登录信息放入缓冲池中。 数据存储:该模块的主要功能是将缓冲池中的数据保存到指定的数据库表中。 数据整合:该模块的主要功能是将数据库中保存的用户登录记录按照日、月、年整合成详细的报表。 2.3 用例描述 根据用户需求和功能分析,生成系统用例图。如图2-1所示。 读取用户登录数据文件读取上次未匹配的登入记录 匹配登录记录 数据读取 数据匹配 保存未匹配的登入记录 数据采集DMS管理员 数据发送 数据接收数据保存数据整合 整合出年报表整合出日表整合出月报表 图2-2 系统用例图 电信计费系统各功能模块的用例说明如下: 5 2012届本科生毕业论文(设计) 数据读取用例说明: 保存用户登录信息的UNIX系统日志文件在/var/adm目录下,文件名为wtmpx,日志 文件以二进制方式进行存储的,如果想在UNIX下查看wtmpx,可以使用last命令: last [-a] [-n number | -number] [-f filename] [name | tty] wtmpx文件中每条记录都包含有372个字节,所包含的每条记录项格式如下表2-1所 示(其中灰色背景区域的数据为本系统需要采集的数据项): 表2-1 用户登录记录数据项格式 位置字节含义 范围 长度 000-32 用户登录名 031 032-4 初始进程 id 035 036-32 设备名 067 068-4 进程ID 071 072-2 登录类型7-登入,8-登出 073 074-2 过程终止 075 076-2 退出状态 077 2 这是C数据类型补齐产生的 空位 080-4 登录时刻 /单位是秒 083 084-4 和微秒 087 088-4 会议编号,用于视窗 091 092-20 预保留 111 112-2 significant length of 113 ut_host 114-257 /* 登录IP*/ 371 日志文件登录数据项总数可以使用公式:记录项总数=日志文件大小/372。 6 2012届本科生毕业论文(设计) 数据采集基本流程如表2-2 表2-2 数据采集的基本流程 用例名称 数据采集 功能简述 DMS管理员运行数据挖掘系统,完成数据采集的功能 前置条件 数据挖掘系统在服务器上已正确安装 基本流 1. 管理员启动DMS服务端系统 2. 管理员启动DMS客户端系统 3. 客户端程序定期将登录数据文件备份,并清空源文件 4. 客户端系统读取上次未匹配成功的登入信息 5. 客户端读取备份的数据信息,剔除非法登录的用户 6. 客户端获得用户的登入/登出记录表 7. 客户端将用户登入/登出记录匹配为完整的登录记录 客户端程序将不能成功匹配的登入记录写到文件中保存 8. 客户端程序将匹配好的登录记录发送到服务端 9. 服务端程序接客户端发送的数据 10. 服务端程序先将数据写到服务端文件存入缓冲池中 11.服务端程序将缓冲池的数据保存到数据库中 分支与异第1步,若服务端程序启动失败,则发送异常报告。 常 第2步,若客户端程序启动失败,则发送异常报告。 第3步,若清空文件失败,则发送异常报告。 第4步,若上次未匹配的登入记录文件不存在,则跳过到第5 步。 第5步,若读取备份的用户记录数据文件失败,则发送异常报 告。 第7步,若指定的保存文件不存在,则创建文件。 第7步,若创建目录或写文件失败,则发送异常报告。 第8步,若发送数据失败,则定时重传。 第10步,若写入文件失败,则发送异常报告。 后置条件 启动contrab命令,定时读取、发送数据 备注 无 7 2012届本科生毕业论文(设计) 数据读取用例说明如表2-3: 表2-3 数据读取的基本流程 用例名称 数据读取 功能简述 客户端程序读取系统数据文件和上次未匹配的登入记录,形成 用户登录记录项。 前置条件 DMS客户端程序启动 基本流 1) 读取上次未匹配的登入记录。 2) 将存储到记录放入链表中。 3) 读取备份的数据文件,清空源文件,将文件内容解析成可 用的记录。 4. 将解析得到的用户登录记录放入对应的链表中。 5. 返回用户登录记录链表。 第1步,若上次未匹配的登入记录文件不存在,则跳过到第3分支与异 步。 常 第3步,若用户登录数据文件不存在,则报告异常。 后置条件 无 备注 无 数据匹配用例说明如图2-4: 表2-4 数据匹配的基本流程 用例名称 数据匹配 功能简述 DMS客户端程序读取用户的登入/登出记录链表,找到一条匹 配的数据,包装成匹配记录,添加到匹配链表中,删除登入/登 出记录,并将本次未匹配的登入记录保存到指定文件中。 前置条件 已经获得用户登入/登出记录链表 基本流 1. 访问用户登入/登出记录链表,按照登入/登出的对 应关系匹配数据,包装成匹配记录。 2. 把匹配好的记录添加到匹配链表中 3. 将未匹配的登入记录写到指定的文件中。 分支与异常 后置条件 无 备注 无 8 2012届本科生毕业论文(设计) 数据发送用例说明: 表2-5 数据发送的基本流程 用例名称 数据发送 功能简述 客户端将匹配好的数据通过网络socket发送给服务端。 前置条件 用户登录记录已经匹配成功 1.读取发送失败的文件。 基本流 2.创建网络连接,链接到服务端。 3.遍历匹配的用户登录记录集合,将匹配好的用户登录数据 按照指定格式发送。 4.删除发送的信息 5.循环直到所有匹配的登录记录处理完成。 6.保存发送失败的记录到文件中。 7.关闭网络连接。 第2步,若网络连接失败,则发送异常报告。 分支与异常 第6步,若写文件失败,则发送异常报告。 后置条件 无 备注 无 数据接收用例说明: 表2-6 数据接收的基本流程 用例名称 数据接收 功能简述 DMS服务端接收从客户端传送过来的数据。 前置条件 服务器程序启动,客户端完成匹配,连接到服务端,并已 发送数据。 基本流 1. 开启服务程序。 2. 创建socket网络连接。 3. 开启新的线程为客户端服务。 4. 循环从客户端中接受数据,保存在数据池中。 5. 关闭流对象,关闭网络连接,终止线程。 第1步,若开启服务失败,则发送异常报告。 分支与异常 第2步,若获得网络连接失败,则发送异常报告。 第4步,若写出数据失败,则发送异常报告。 后置条件 无 备注 无 9 2012届本科生毕业论文(设计) 数据保存用例说明: 表2-6 数据保存的基本流程 用例名称 数据保存 功能简述 采集系统服务器将存放在数据池中的的数据保存到数据库。 前置条件 服务器已经接收到数据。 基本流 1、 建立到数据库的连接。 2、循环访问数据池中的数据。 3、 将数据池中的记录插入到数据库相应的表格中。 4、访问完成后断开与数据库的链接。 第1步,若建立数据库连接失败,则发送异常报告。 分支与异常 第2步,若插入记录失败,则发送异常报告。 后置条件 无 备注 无 数据整合用例说明: 表2-7 数据整合的基本流程 用例名称 数据整合 功能简述 服务端将接收到的用户登录的数据整合成日报表,月报表和 年报表。 前置条件 数据库中存放有用户登录信息 基本流 1. 执行SQL语句,将数据库中存放的前一天的记录按 照用户名和实验室ip地址为条件组合,统计出前一天,用户 登录某一实验室机器的总时间,整理形成日报表。 2. 执行SQL语句,根据日报表数据整合出用户登录服 务器记录的月报表。 3. 执行SQL语句,根据用月报表数据整合出用户登录 服务器记录的年报表。 分支与异常 后置条件 无 备注 无 10 2012届本科生毕业论文(设计) 3 概要设计 3.1业务流程 3.1.1业务流程中几个存储文件的命名规则 (1)系统日志文件由外部传递给客户端程序,客户端需要判定该文件是否存在然后才能采集, 采集的数据为该文件的备份文件,备份的文件由当前的日期和源文件名共同命名。 (2)未匹配成功的登入数据项集合保存在文件中,文件名为faillog.dat。 (3)发送失败的数据匹配集合保存在failsend.dat中。 3.1.2业务规则说明 日志登入/登出数据项读取规则:系统日志文件中的数据项有很多类,通过登录名和登录类型可以获知哪些信息需要采集,哪些信息可以舍弃,只有满足如下条件的数据项才是需要采集的: (1)登录名若以(.)开头,一般是登录程序本身的日志数据项,为非法数据,不需要采集。 (2)登录类型必须是7(登入)或8(登出),其他类型的可以舍弃。 3.2系统模块 数据采集客户端数据采集服务器 数据存储模数据库数据读取模数据匹配模块块块 /var/ad数据整合模数据接收模数据发送模m/wtm块块块px 图3-1 系统功能模块图 11 2012届本科生毕业论文(设计) 物理上DMS系统分为客户端和服务端两部分,在客户端包含数据采集模块,数据匹配分析模块和数据发送模块;在服务端端包含数据接收模块,数据存储模块和数据整合模块,各模块的主要功能如下所示: 数据采集模块:该模块的主要功能是读取UNIX服务器上的用户登录记录日志的备份文件,提取有用的记录信息,如表3-1所示,保存到链表集合中,并传给数据匹配模块来进行数据匹配。 表3-1 要读取的原始记录数据 数据名 数据含义 是否需要采集 备注说明 logname 用户名 是 匹配同一次登录会话的必需数据之一 pid 登录进程ID 匹配同一次登录会话的必需数据之二 type 登录类型7-登 type的值在1-8之间,但只对7与8两种情况 入,8-登出 进行处 logtime 登录时刻/单是 要采集的数据,logtime是登入或登出的时间 位为秒 登录的IP地址 是 要采集的数据 数据匹配模块:数据匹配模块的主要功能是将采集到的用户记录信息按照登入、登出关系匹配成一条完整的登入、登出记录,并计算出用户的在线时间,将这些信息推入链表中,然后将这些信息发送给数据发送模块。该模块的输入数据是从日志文件中采集到的原始记录,输出的是匹配好的登入、登出记录。 表3-2 需要匹配登录记录数据 数据名 数据含义 logname 用户登录名 logintime 登入时刻 logouttime 登出时刻 durations 登录时间长度 logip 登录终端的ip地址 12 2012届本科生毕业论文(设计) 数据发送模块:该模块的主要功能是建立连接到服务端,将匹配好的登录、登出记录用通过网络TCP/IP 协议 离婚协议模板下载合伙人协议 下载渠道分销协议免费下载敬业协议下载授课协议下载 发送到DMS系统服务端。 数据接收模块:该模块在服务器端主要功能是从网络中接收客户端发送来的登录/登出数据。 数据存储模块:该模块得主要功能是将从数据接收模块接收到的数据按照一定的格式添加到数据库中,保存为用户登入/登出记录明细表。 数据整合模块:将数据库中保存的用户登录/登出记录明细表的数据整理生成日报表,根据日报表整合成月报表,根据月报表整合成年报表。 用户登录服务器的信息在客户端匹配好后发送给服务端,服务端接收到这些数据,并保存在数据库中形成用户登录记录明细表。客户端定期从wtmpx中提取数据,定期向服务端发送信息然后我们的程序需要用plsql定期的整理出日报表,月报表和年报表。在数据库中保存的用户登录记录信息结构如下表所示: 表3-3 数据库中保存的登录记录数据 数据名 数据含义 Logname 用户名 Logintime 登入时间 Logouttime 退出时间 Durations 在线时间长度 Logip 登录终端的IP地址 Labip 用户登录的实验室IP 3.3接口设计 3.3.1用户接口 用户:执行命令,启动DMS服务端程序。 系统:服务端系统正常运行,等待接收数据。 用户:执行命令,启动DMS客户端程序。 系统:客户端系统正常运行,采集并发送数据。 13 2012届本科生毕业论文(设计) 3.3.2外部接口 客户端系统读取用户登录记录文件,获得用户登录、登出信息。 客户端系统读取上次未匹配成功的登入记录文件,获取未匹配的登入记录数据。 服务端系统将匹配好的数据写入数据库表中。 服务端系统整合出日报表,月报表和年报表。 3.3.3内部接口 客户端读取模块与匹配模块间的接口: 输入:读取解析好的用户登入/登出记录链表 输出:无 客户端匹配模块与发送模块间的接口: 输入:匹配成功的用户登录记录链表 输出:无 客户端数据发送与服务端数据接收间的接口: 输入:匹配成功的用户登录记录项 输出:接收成功与否的消息 服务端数据接收模块与数据保存模块间的接口: 输入:发送成功的用户登录记录列表 输出:无 服务端数据保存模块与数据库间接口: 输入:发送成功的用户登录记录列表 输出:无 服务端数据整合模块与数据库间接口: 输入:用户登录记录明细表 输出:用户登录记录的日报表,月报表和年报表 3.4数据结构设计 根据系统需求,设计出如下数据实体: 14 2012届本科生毕业论文(设计) 1、LogRec:登入/登出记录类,用来存放一条原始的用户登入/登出记录。 2、MatchedLogRec:匹配成功的登录记录类,用来表示一条匹配成功的用户 登录记录。 3.4.1登入/登出记录数据类 (1)LogRec类图: 图3-2 LogRec类图 (2)LogRec类成员变量说明 表3-4 LoRec类成员变量 成员变量定义 成员变量说明 备注 char logname[32] 用户名 int pid 用户的进程ID short type 登录类型 7=登入;8=登出 int logtime 用户登入/登出时刻(秒) char logip[257] 用户登录IP 3.4.2 匹配的用户登录记录类 MatchedLogRec类图: 15 2012届本科生毕业论文(设计) 图3-3 MatchedLogRec类图 MatchedLogRec类成员变量说明: 表3-5 MatchedLoRec类成员变量 成员变量定义 成员变量说明 备注 char logname[32] 用户登录名 char logip[32] 用户登录终端IP int logintime 登入时刻(秒) int logoutTime 登出时刻(秒) int durations 用户在线总时间(秒) char labip[257] 实验室IP 3.5数据库设计 根据用户需求,最后生成的数据库表包括:用户登录记录明细表、用户登录记录日报 表、用户登录记录月报表和用户登录记录年报表。数据库具体表结构如下: 表3-6 用户登录记录明细表 字段 类型 长度 约束 备注 登录记录编号 Number 15 PK 系统自动生成 用户ID char 32 NOT NULL 实验室IP char 20 NOT NULL 用户终端IP char 257 NOT NULL 登入时间 Number 20 NOT NULL 16 2012届本科生毕业论文(设计) 登出时间 Number 20 NOT NULL 由登出时间-登录时长 Number 12 登入时间求得 表3-7 用户登录记录日报表 字段 类型 长度 约束 备注 用户ID char 32 PK 实验室IP char 20 PK 日登录时长 Number 12 NOT NULL 登出时间 Date 表3-8 用户登录记录月报表 字段 类型 长度 约束 备注 用户ID char 32 PK 实验室IP char 257 PK 月登录时长 Number 12 NOT NULL 登出时间 Date 表3-9 用户登录记录年报表 字段 类型 长度 约束 备注 用户ID char 32 PK 实验室IP char 20 PK 年登录时长 Number 12 NOT NULL 登出时间 Date 17 2012届本科生毕业论文(设计) 4 详细设计和实现 4.1 客户端模块 Client类封装数据挖掘系统客户端的所有功能。 图4-1 Client类图 sendLogs方法定义: 表4-1 sendLogs方法 方法原型 public void sendLogs() 方法功能 执行数据挖掘系统客户端的完整过程,其中logReader 负责读 取数据,logSender负责发送数据 参数说明 无 返回类型 void 抛出异常 调用类的异常 18 2012届本科生毕业论文(设计) 4.1.1 数据读取模块设计 logReader类封装了读取日志数据的各项功能 图4-2 logReader类图 LogReader成员变量说明如表4-2所示: 表4-2 logReader成员变量 成员变量定义 成员变量说明 char logFileName[50] 读取用户登录数据的日志文件名 char backFileName[50] 备份的日志文件名 char failLoginsFileName[50] 未匹配成功的登录记录保存文件名 logins list 保存登入的记录链表 logouts list 保存退出的记录链表 matches list 保存匹配成功的记录链表 readLogs方法如表4-3所示: 表4-3 readLogs定义方法 方法原型 Public : list readlogs() 方法功能 读取日志文件总调度函数 存储匹配好的数据集合 参数说明 无 返回类型 list 抛出异常 调用函数中可能抛出的异常 19 2012届本科生毕业论文(设计) readLogs方法活动图: 图4-3 readLogs活动图 数据读取模块具体代码实现: int fd=open(backFileName,O_RDONLY); struct stat filestate; fstat(fd,&filestate); cout<<"filesize:"<::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.logname,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(); } } 26 2012届本科生毕业论文(设计) 4.1.3 数据发送模块设计 LogSender类定义 图4-8 LogSender图 LogSender类成员变量说明如表4-8所示: 表4-8 LogSender类成员定义 成员变量定义 成员变量说明 char failSendFileName[50] 保存发送失败记录的文件名 int fd 采集系统服务器网络描述符 unsigned short port 链接到的服务器端口 char serverIp[20] 要连接的服务器ip sendMatches方法如表4-9所示: 表4-9 sendMatches定义方法 方法原型 public void sendMatches(list*matches) 方法功能 发送匹配成功的日志集合到服务端 参数说明 matches 为存储发送数据的集合链表 返回类型 Void 抛出异常 建立连接失败,抛出SendDataException异常 27 2012届本科生毕业论文(设计) sendMatches方法活动图: 初始化网络 读取上一次未发送 成功的登入记录 发送是否成功 否 保存未匹配成 功的登入记录 图4-9 sendMatches活动图 initSocket方法如表4-10所示: 表4-10 initSocket定义方法 方法原型 public void initNetWork() 方法功能 根据ip和port 以及serverIp连接到服务端,初始化网络 参数说明 无 返回类型 void 抛出异常 建立连接失败,抛出SendDataException异常 28 2012届本科生毕业论文(设计) readSendfailed方法如表4-11所示: 表4-11 readSendfailed定义方法 Public: 方法原型 voidreadSendfailed(list*matches) 方法功能 读取未发送成功的数据文件 参数说明 matches: 匹配好的用户日志记录链表指针 返回类型 void 抛出异常 发送数据失败,抛出SendDataException异常 saveSendfailed方法如表4-12所示: 表4-12 saveSendfailed定义方法 Public void saveSendfailed 方法原型 (list*matches) 方法功能 存储发送失败的数据 以备下次重新读取发送 matches: 匹配好的用户日志记录链表指针 参数说明 存储时 把集合中剩余的数据存储到文件 返回类型 void 抛出异常 发送数据失败,抛出SendDataException异常 数据发送模块具体代码实现: 第一步:读取上次匹配失败的数据 int fd=open("filename",O_RDONLY|O_EXCL); if(fd==-1){ return; } while(1){ MatchedLogRec match; int re=read(fd,&match,sizeof(match)); if(re<=0){ close(fd); return; } matches->push_back(match); } 29 2012届本科生毕业论文(设计) 第二步骤:初始化网络,建立到服务器的连接 fd=socket(PF_INET,SOCK_STREAM,0); if(fd==-1){ cout<<"net work init failed"<size()>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); 30 2012届本科生毕业论文(设计) 4.2 服务端模块 Server类封装了服务端的所有模块功能 图4-10 Server类图 Server成员变量说明如表4-13所示: 表4-13 Server成员变量说明 成员变量定义 成员变量说明 char labIp[20] 实验室ip Int fd socket描述符 DataReciveThread productor 接收数据的线程 DataSaveThread customer 存储数据的线程 UserData dataPool Productor和customer共享的数据缓冲池 Server类方法说明: initSocket方法如表4-14所示: 表4-14 initSocket方法 方法原型 public void initSocket( ) 方法功能 初始化网络,启动Socket 的bind,listen 和accept 参数说明 无 返回类型 void 抛出异常 初始ServerSocket失败,发出异常DmsServerException 31 2012届本科生毕业论文(设计) startService方法 如表4-15所示: 表4-15 startService方法 方法原型 public void startService( ) 方法功能 响应客户连接请求,开启线程为接收客户端数据 参数说明 无 返回类型 void 抛出异常 响应客户请求过程失败,发出异常DMSServerException 4.2.1 数据接收模块 图4-11 DataReceiveThread类图 DataReciveThread成员变量的说明如表4-16所示: 表4-16 DataReciveThread成员变量说明 成员变量定义 成员变量说明 pthread_t threadid 标识一个线程对象 Run()方法如表4-17所示: 表4-17 Run()定义方法 方法原型 public void run( ) 方法功能 完成具体的数据接收工作 参数说明 无 返回类型 void 抛出异常 32 2012届本科生毕业论文(设计) start方法如表4-18所示: 表4-18 start定义方法 方法原型 public void start( ) 方法功能 完成线程的创建和启动 参数说明 无 返回类型 void 抛出异常 reciveData方法如表4-19所示: 表4-19 reciveData定义方法 方法原型 public void* reciveData( ) 方法功能 创建线程时调用的线程函数 参数说明 无 返回类型 void* 抛出异常 数据接收模块具体代码实现: 通过创建线程来实现对数据的接收,这样可以接收来自多个客户端的据 第一步:初始化网络 int fd=socket(PF_INET,SOCK_STREAM,0); if(fd==-1){ cout<<"socket init failed"<run(); } void ProductThread::run(){ MatchedLogRec mlog={0}; int i=0; while(1){ i++; Sleep(1); int cfd=recv(afd,&mlog,sizeof mlog,0); if(cfd<=0){ cout<<"接受完成或者网络异常"<afd=afd; } void ProductThread:: start(){ pthread_create(&thid,0, processRecv,this); } 4.2.2 数据存储模块 图4-12 DataSaveThread类图 DataSaveThread成员变量的说明如表4-20所示: 表4-20 DataSaveThread成员变量说明 成员变量定义 成员变量说明 pthread_t threadid 标识一个线程对象 LogDao logDao 向数据库中存储数据的对象 DataSaveThread成员函数说明: 35 2012届本科生毕业论文(设计) run方法如表4-21所示: 表4-21 run定义方法 方法原型 public void run( ) 方法功能 完成具体调用类dmsDao完成数据存储的工作 参数说明 无 返回类型 void 抛出异常 start方法如表4-22所示: 表4-22 start定义方法 方法原型 public void start( ) 方法功能 完成线程的创建和启动 参数说明 无 返回类型 void 抛出异常 saveData方法如表4-23所示 表4-23 saveData定义方法 方法原型 public void* saveData( ) 方法功能 创建线程时调用的线程函数 参数说明 无 返回类型 void* 抛出异常 数据存储模块具体代码实现: 通过创建消费者线程把数据存入数据库中 36 2012届本科生毕业论文(设计) static void* CustomerThread::getData(void *par){ DmsDao dao; dao.connect("openlab/open123"); while(1){ SaveLogRec mlog=datapool.pop_data(); dao.saveData(mlog); dao.commit();} dao.disconnect(); } void CustomerThread::start(){ pthread_create(&thid,0,getData,0); } 4.2.3 数据缓冲池 图4-13 UserData类图 UserData成员变量说明如表2-24所示: 表4-24 UserData成员变量 成员变量定义 成员变量说明 deque data 缓冲客户端的数据池的真正存储容器 pthread_mutex_t mutex 控制线程安全的互斥量 pthread_cont_t con_p 控制是否生产的条件量 pthread_cont_t con_c 控制是否消费的条件量 UserData类方法说明 37 2012届本科生毕业论文(设计) push_data方法如表4-25所示: 表4-25 push data定义方法 方法原型 public:void push_data(LogData rec) 方法功能 向缓冲池中加入数据 参数说明 LogData rec是要往数据库表中存储的数据 返回类型 void 抛出异常 无 pop_data方法如表4-26所示: 表4-26 pop data定义方法 方法原型 public:LogData pop_data() 方法功能 从缓冲池中取出数据 参数说明 无 返回类型 LogData 38 2012届本科生毕业论文(设计) 4.3 异常设计 4.3.1 异常类结构图 图4-14 异常结构类图 4.3.2 客户端异常类说明 异常类名 异常类责任说明 备注 DmsReadException 读取数据失败异常。 BackupException 备份日志失败异常。 ReadFailLoginException 读取未匹配的登入记录失败异常。 MatchLogRecException 匹配日志记录失败异常。 SendDataException 发送数据失败异常 39 2012届本科生毕业论文(设计) 4.4 数据库具体实现 前置条件:数据已经按照登出的日期放入到了对应的详细日志表中,数据按照01到 31编号。 三种类型的整合: (1)日整合:把每个用户 一天的使用服务器的时间做一个统计一个用户 一天只有 一条记录。规则是统计当前对应日期的前一天的数据并把统计好的数据放入对应的天表 中。 数据库具体代码实现: create or replace procedure day_zhenghe as begin execute immediate 'insert into daydata'||to_char(sysdate,'dd')|| ' select max(id),max(username),max(logouttime),sum(durations) '|| 'from logdetailts where logouttime>='''||to_date(trunc(sysdate,'dd')) ||''' and logouttime<'''||to_date(trunc(sysdate+1,'dd'))||''' group by username '; commit; end; (2)月整合:每个用户一个月对应一条数据但这个整合不是一个月执行一次 而是 一天执行一次。当进行天整合的时候要同时执行月整合看月表中有没有这个用户的信息, 如果有则对这个用户进行更新操作,如果没有这个用户的信息则进行插入操作。 create or replace procedure month_zhenghe as begin execute immediate 'insert into monthdata'||to_char(sysdate+1,'mm')|| ' select max(id),max(username),max(logouttime),sum(durations) '||' from logdetails where logouttime>='''||to_date(trunc(sysdate,'mm')) ||''' and logouttime<'''||to_date(trunc(add_months(sysdate,1),'mm'))||''' group by username '; end; (3)年整合:每个用户一年对应一条数据执行的频率是一个月执行一次。当前月执 行的是上一个月数据的整合,如果发现年表中已经有这个用户的信息则进行更新操作,否 则就是插入操作。 40 2012届本科生毕业论文(设计) 5 结论 通过四个多月的不断努力和对中国电信行业的考察研究,终于完成了DMS数据挖掘系统,在整个的设计过程中,使我深刻的感受到软件开发过程的复杂与艰难,从最开始的需求分析、到建模的选取与设计,再到每个模块的实现与测试,每一个环节,每一个步骤,涉及到很多从未遇到的知识,让我了解到自己的知识不足与思路的狭窄,但最终还是在老师与同学的帮助下,顺利的解决了所有的问题。 在这短短的几个月里,让我体会到了实践对于学习的重要性,光懂得理论知识,而不去切身实践,是无法体会到理论的深层含义,也无法把理论知识融汇贯通起来。当然在实践过程中还需要向有经验的老师,同学虚心求教,把别人的知识转化成自己的,这样才有收获。同时我也认识到要解决一个bug是需要有足够的耐心和毅力的,不能因为一点小困难,就半途而废。当然我也相信自己有这样的勇气在编程的道路上一直走下去。 最后,该系统虽然顺利完成,但由于时间有限,还存在一些不足之处,比如说没有界面,针对与这一问题我会在以后的工作中继续完善它,扩展它的功能,使之越来越强大。 41 2012届本科生毕业论文(设计) 参考文献 [1] 周杨. 基于复杂结构的数据挖掘技术研究[D].重庆:重庆大学, 2005. [2] 谭浩强.C++程序设计[M].北京:清华大学出版社,2004. [3] Stephen Prata. C++ Primer Plus(第五版)[M].北京:人民邮电出版社, 2005. [4] 旷平剑. 数据采掘与知识发现综述[J]. 现代计算机.2002,6:13-17. [5] 童中明. 数据采集设备网络即插即用技术研究[D]. 武汉:华中科技大学,2007. [6] Bruce Molay Unix/Linux编程实践教程 清华大学出版社 2004 [7] W.Richard Stevens UNIX网络编程(第二版) 清华大学出版社 1999 42 2012届本科生毕业论文(设计) 致 谢 在论文的撰写过程中,无论是在代码的实现还是在最初的框架选择上,都遇到了大大小小的问题,在此我要感谢那些帮助过我的老师和同学们,在我困难的时候给予我的关心和支持。 首先要感谢***、**老师,是他们在我离校的这段期间,不断的催促我们按时保量的完成毕业设计。没有他们的帮助也就没有这篇论文。感谢那些在专业课程上给予我帮助的老师们,当做完本次设计时,我才深深的体会到这些专业基础课程的重要性。另外还要感谢我的班主任***老师,她不求回报,无私奉献的精神让我很感动,在此向她表示由衷的感谢。在这四年的求学生涯中结识的各位生活和学习上的挚友让我得到了人生最大的一笔财富,在此也对他们表示由衷的感谢。 本文参考大量的文献资料,在此,向学术界的前辈们致敬~ 43
本文档为【电信计费系统毕业论文】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑, 图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
该文档来自用户分享,如有侵权行为请发邮件ishare@vip.sina.com联系网站客服,我们会及时删除。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。
本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。
网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
下载需要: 免费 已有0 人下载
最新资料
资料动态
专题动态
is_212655
暂无简介~
格式:doc
大小:256KB
软件:Word
页数:0
分类:工学
上传时间:2017-09-21
浏览量:17