电信终端计费系统开发毕业论文.doc
电信终端计费系统开发1. 1系统设计1.1.1 系统功能分析终端计费系统开发的目的是能够实现对不同型号的程控交换机对计费中心定时或即时传下来的原始话单信息进行及时准确的分类、查询、浏览、修改、删除、统计、话单信息的打印等。能够及时查询客户的通话数据,避免引起话费争议,提高客户的满意度。使管理更科学、更方便、更合理。同时,也能够帮助电信计费有关人员提高工作效率和服务质量。为电信局减少不必要的损失。从而有效的提高电信局经济的效益。通过对电信局计费中心日常工作的分析,可将终端计费系统的功能概括成如下方面。(1) 号码管理:包括固定电话和公用电话基本信息的录入、修改、删除、查找、添加、查询等管理。(2) 字冠管理:包括固定电话和公用电话地方基本字冠的录入、修改、删除、查找、添加、查询等管理。(3) 原始话单管理:包话对程控交换传下来的原始话单信息的导入、浏览、删除等管理。(4) 费率管理:包括固定电话和公用电话基本费率的录入、修改、删除、查找、添加、查询等管理。(5) 关于系统:对有关系统的简介和对用户的管理(包括用户注册、用户删除、用户修改)。(6) 计费统计管理:即时计费、定时周期计费、对已统计的计费表的浏览(包括对统计表的删除、删除统计表的字段、对最近操作进行恢复、查看统计表)等管理。考虑系统的安全性,需要对用户进行安全认证,因此还需要实现以下系统用户的管理功能。(1) 用户登录认证。(2) 用户管理,包括用户注册、删除用户、修改用户信息等(只有高级管理员才有此权限)。(3) 登录日志的记录和删除日志(只有高级管理员才有此权限,普通用户只能对数据进行浏览)。1.1. 2系统功能模块设计根据系统所要实现的功能,按照结构化程序设计的原则将整个系统划分为如图1-1所示的若干个功能模块。关于系统登录日志系统管理删除日志用户管理号码添加号码查询号码管理号码修改呈码删除字冠添加计费统计计费系统原始话单话单浏览定时计费即时计费话单浏览话单删除话单导入费率管理费率删除费率修改费率添加字冠管理字冠删除字冠修改图1-1 计费系统功能模块图1.1.3 操作流程图根据系统功能模块的划分和计费管理系统的实际工作流程,画出如图1-2所示的计费管理系统操作流程图。 启动系统登录认证 字冠管理原始话单固话管理公话管理费率管理话单库即时、定期计费话费统计话单库浏览添加修改删除查找导入字冠表费率表公话表固话表话单库计费系统库图1-2 计费系统操作流程图2.1数据库设计 2.1.1 数据库需求设计在前面的1.1节里已经对计费系统操作流程进行了分析,在它的基础上,我们可以列出以下计费管理系统所需的数据项和数据结构。(1) 固话表:号码、地名、基本月租等。(2) 公话表:号码、地名、基本月租等。(3) 字冠表:地名、类型、本地字冠号(4) 费率表:主叫类型、通话类型、日期类型、费率、首次三分钟等。(5) 登录日志:工号、登录日期等(6) 用户注册:工号、密码、密码验证等。2.1.2 数据库概念结构的设计Access 数据库是Office XP 软件包中的产品之一,是一个关系数据库(RDBMS),与其他的关系数据库管理系统相比,Access具有简单易学、方便实用等特点,易于开发数据库应用程序。 Access通过数据库的方式来处理数据,在Access的数据库中包含了表、表之间关系、查询、报表、宏和数据访问页等对象。其实可以把数据库看成是一个相关对象的容器,创建数据库是使用Access进行数据处理的第一步。在Access中可使用以下三种方法创建数据库:(1) 用数据库向导创建数据库;(2) 创建空的数据库;(3) 用现有文件创建数据库;本系统所采用的数据库就是通过Access(数据库向导)来创建的。而且要创建三个数据库:计费系统库、话单库、统计库。2.1.3 数据库逻辑结构设计 从图1-2 计费系统操作流程图,可以看得出要建立六个基本的数据表来存储系统所必备的信息。这六个表分别为固话表、公话表、字冠表、费率表、登录日志表、用户注册表。实际上,还要建立统计表。但统计表的建立是在进行计费时通过程序来完成建立过程的。后面的章节会介绍到关于这方面的内容。六个数据表的结构如表2.1到表2.6所示。 表2.1 固话表 字段名称数据类型 ID自动编号 号码数字 地名文本基本月租数字表2.2 公话表 字段名称数据类型 ID自动编号 号码数字 地名文本基本月租数字表2.3 字冠表 字段名称数据类型 ID自动编号 地名文本 类型文本本地字冠号数字 表2.4费率表 字段名称数据类型 ID自动编号 主叫类型文本 通话类型文本费率文本日期类型 文本 首次三分钟货币 表2.5 字冠表 字段名称数据类型 ID自动编号 工号文本登录日期日期时间表2.6 用户注册表 字段名称数据类型 ID自动编号 工号文本 密码文本密码确认文本 2.1.4 数据库的创建 创建数据库时可以先创建一个空数据库,然后往数据库中添加相应的对象,这是一种较复杂但又非常灵活的创建数据库方法。创建数据库的步骤如下。(1) 在Access中执行 文件 新建 命令,出现 新建文件 对话框。(2) 在新建文件 对话框中选择 新建 选项中的 空数据库, 弹出文件新建数据库 对话框;(3) 在 文件新建数据库 对话框中选择保存文件的位置并输入要创建的数据库名称,然后单击 创建 按钮,出现如图2-1所示的数据库窗口。空数据库创建完毕。 图2-1 数据库窗口2.1.5 数据表的创建 创建表其实就是创建表的结构,表的结构包括表中每个字段的字段名、字段的数据类型和字段属性,为表中的每个字段设置好字段名、字段的数据类型和字段属性后,表也就创建好了。创建表之前首先需要打开数据库窗口,然后在数据库窗口中通过以下四种方法进行创建:(1) 通过输入数据创建表;(2) 使用表向导创建表;(3) 使用表的设计视图创建表;(4) 通过导入或链接已有的数据创建新表;一般采用“使用表向导创建表”来创建表,本系统所用到的表大部分都采用此方法来创建表。2.1.6 数据库版本的转换本系统采用数据控件的形式访问数据库,Visual Basic 6.0 中的数据控件不支持Access 2000以上版本的格式数据库,为了访问数据库,必须将高版本格式的数据库转化为低版本的数据库格式。具体操作如下:用高版本的Access打开数据库文件.mdb,执行 工具 数据库实用工具 转换数据库 到早期Access数据版本 命令,输入新的数据库文件路径及文件名,单击 确定 即可。将数据转换成较低版本后,不能在数据库直接修改数据库中表的结构。如果需要修改,必须将它转换回高版本的Access数据库格式后才能修改,修改完后再转换成低版本格式的数据库。2.3 工程文件及主窗体的创建数据创建完后,下一步就到系统功能的开发和实现。本系统采用中文版Visual Basic 6.0 来编写,而用DAO作为数据访问的对象。2.3.1 创建工程文件启动Visual Basic 6.0,新建一个工程文件,为工程添加必要的引用对象和部件库,执行 工程 引用命令,打开引用对话框,在可用的引用列表框中选择“Microsoft DAO 3.6 Object Library”。这样工程中就可以使用DAO对象库了。引用对话框界面如图2-2所示,其中前4项是系统创建工程时自动添加的。 图2-2 引用 对话框 系统中还需要使用表格来显示数据和插入一个音效来播入一个音频文件,为此需要给工程添加表格部件和音效对象。添加方法:执行 部件命令,打开部件对话框,在控件选项卡中选择Microsoft DataGrid Control 6.0(OLEDB),在插入对象选项卡中选择音效,然后点击确定按钮,相应的控制件就会被添加到工具箱上。保存工程,工程文件命名为工程1。2.3.2 主控模块的设计 为了提高系统的安全性,用户必须通过登录认证才能使用本系统。程序运行后首先显示的是登录窗体,用户输入正确的工号和密码才能启动主窗体。为了实现这个功能,一种解决办法是将窗体设为启动模块,另一种办法是将启动模块设置为Main过程,在Main过程中显示登录模块进行登录认证,根据认证结果确定是否显示主窗体。本系统采用的是第一种方法。 在工程文件中执行工程 工程1属性命令,打开工程1属性对话框,在通用选项卡的启动对象列表框选取form1(登录模块),单击确定 按钮。如图2-3所示。图2-3 工程1属性 对话框2.4 模块变量2.4.1 变量的定义在程序中,常用变量来临时存储数据,每个变量声有属于自己的名字和数据,变量的名字简称为变量名,变量的类型决定该变量可存储哪种类型的数据,以及变量作用的范围。全局变量的作用域是整个应用程序。局部变量的作用域只是在过程中可用。在这里我们先介绍本系统设计要用到的一些全局变量,而一些局部变量过程中用到再做介绍。全局变量只能在模块(Module1)中定义,且必须用Public关键字定义。因此,首先要在工程中添加一个Module1模块。添加模块的方法:在工程里执行 工程 添加模块 命令,就可以在工程中添加一个Module1模块,本系统的Module1模块中定义以下变量: Public dirtablenamePublic t, strar Public v '判断是否结算过Public gonghao, gonghao1Public p '判断登录级别Public dingshihourPublic dingshiname12.5 登录模块的创建2.5.1窗体的创建执行工程 添加窗体命令,给工程添加一个新窗体,窗体的主要属性设置如表2-7所示 表2-7登录窗体属性 属性名属性值说明 名称form1窗体名称 caption登录窗体标题 pictureBitTamp窗体背景图片StartUpPositoon2-屏幕中心启动后居屏幕的中心2.5.2登录窗体实现的功能 窗体右上角有日期和时间的显示。“计费系统”标题反复从右向左移动。向文体框输入密工号和密码后,通过过单击“确认”,验证工号和密码有效后,方可进入主界面。同时,如果是试用本系统,系统会提示只能试用4次,超过了第4次,就无法再进入主界面,如果你想继续使用本系统,就必须输入本软件提供的序列号。输入了序列号后就可以永久的使用本软件。2.5.3窗体界面的设计登录窗体界面布局如图2-4所示(图中标有主要控件的名称)而在试用期间系统会有相关的提示如图2-5和2-6所示。 图2-4 登录窗体界面 图2-5 序列号输入窗口 图2-6 提示框 所用到的控件包括:Label、Text、Command、Timer、data1。主要控件的属性如表2-8所示。 属性名属性 属性值说明 Label3caption工号标签 Label4caption 密码标签 Label1 caption计费系统标签 Command1(0)caption 确定按扭控件 Command1(1)caption 取消按扭控件 Text1(0)borterstyle 1-fixed single文本框 Text1(1)borterstyle1-fixed single文本框2.5.4登录窗体功能的实现功能实现的代码如下: Option Explicit Dim i As Integer Dim examdb As Database Dim examtbl As TableDef Dim b, name1, now1 Private Sub command1_click(Index As Integer) Dim name As String Dim password As Variant If Text1(0).Text = "" Or Text1(1).Text = "" Then MsgBox "用户名和密码不能为空!" Exit Sub End If Data1.DatabaseName = App.Path + "计费系统" Data1.RecordSource = "用户注册" Data1.Refresh name = "工号='" & Text1(0).Text & " ' " Data1.Recordset.FindFirst name If Data1.Recordset.NoMatch = False Then If Data1.Recordset.Fields("密码").Value = Text1(1).Text Then name1 = Text1(0).Text now1 = Now Data1.DatabaseName = App.Path + "计费系统" Data1.RecordSource = "登录日志" Data1.Refresh Data1.Recordset.AddNew Data1.Recordset.Fields("工号").Value = Text1(0).Text Data1.Recordset.Fields("登录日期").Value = Now Data1.Recordset.Update gonghao = Text1(0).Text Load Form2 '启动主界面 Form2.Show Unload Form1 Exit Sub End If GoTo z Elsez: i = i + 1 If i = 3 Then Unload Form1If i <> 3 Then MsgBox ("输入有误!输入三次不正确将自动退出!") End If End Sub Private Sub Command2_Click() Unload Form1 End Sub Private Sub Form_Activate() Dim a, c Dim xiluehao Text1(0).SetFocus c = Dir(App.Path + "购买1") If c = "" Theng: xiluehao = InputBox("为了您能够长期的使用本软件,请您输入-本软件提供正规的序列号!", "序列号") If xiluehao <> "" Then If xiluehao = Trim(123456789) Then Kill (app.path+"购买2") Open App.Path + "购买1" For Random As #4 Len = 20 Put #4, 1, xiluehao Close #4 MsgBox "欢迎使用本软件!" Else MsgBox "输入的是无效的序列号!" GoTo g End If Else a = Dir(App.Path + "购买2") If a = "" Then b = 1 Open App.Path + "购买2" For Random As #3 Len = 20 Put #3, 1, b Close #3 End If Open App.Path + "购买2" For Random As #3 Len = 20 Get #3, 1, b If b > 4 Then MsgBox "警告:该软件已经过期,请购买正式版!", 48, "-注意" Close #3 End End If If b <> 4 Then MsgBox "这是你第" + Str(b) + "次试用本软件,你还可以试-用" + Str(4 - b) + "次!" Else MsgBox "这是你第" + Str(b) + "次试用本软件, 这是最后-一试用。如果你要继续使用,请购正版!" End If b = b + 1 Put #3, 1, b Close #3 End If End IfEnd SubPrivate Sub Form_Load() i = 0 Timer1.Enabled = TrueEnd Sub Private Sub Timer1_Timer() If Label1.Left + Label1.Width > 0 Then Label1.Move Label1.Left - 200 Else Label1.Left = Label1.Width End If Label2(0).Caption = Format(Date, "dddddd") Label5.Caption = Format(Time, "ttttt")End Sub动态变量i是用来记录用户登录失败的次数,如里连续4次登验证失败,则退出整个系统。而动态变量b是用来记录试用本软件的次数,如果试用已经超过4次则不能再继续试用。要继续使用必须输入本软件提供的系列号。否则,将无法登录到主界面。2.6 系统主界面模块的创建2.6.1 模块分析 主界面模块实现为计费系统提供各种有关计费重要的操作项目,为用户提供一个简洁、方便的人机操作界面。2.6.2 窗体的创建 执行工程 添加窗体命令,给工程添加一个新窗体,窗体的主要属性设置如表2-9所示 表2-9主界面窗体属性 属性名属性值说明 名称form2窗体名称 captionform2窗体标题 pictureBitTamp窗体背景图片StartUpPositoon2-屏幕中心启动后居屏幕的中心Borderstyle1-Fixed Single窗体固定边界,禁止用户改变大小将窗体保存为form2.frm。2.6.3 模块主界面的设计 在窗体上添加控件。窗体布局运行结果如图2-7所示。 主要控件属性如表1-9所示。 三个标签Label1、Label2、Label3。两个Timer控件:Timer1、Timer2。6个单选钮,Option1Option6。两个命令按钮command1、command2。一个Data1。图2-7主界面表2-9 主界面窗体主要控件属性 控件属性属性值说明Option1caption号码管理Option2caption字冠管理Option3caption系统管理单选框Option4caption费率管理Option5caption计费统计Option8caption原始话单Label1caption计费系统Option font宋体Option、Label1这两个属性值设置一Label1fontcolor&HooooooFF& 样Timer1Timer1interval50时钟确定Command1 caption退出命令按钮Command2font宋体fontcolor&HococoFF&应该注意的是Data1、Label2和Label3的属性是在程序运行过程中通过命令赋给的。Label1用来显示当前时间和日期,Label3用来提示是否已经到了定期计费的时间。Data1数据控件用来存取数据库信息。当定期计费时间到时,通过命令自动指向在文件统计库.mdb里新成的统计数据表,以便于在表中添加数据。2.6.4 模块功能实现的代码 Option Explicit Dim examdb As Database Dim examtbl As TableDef Dim examfld(4) As Field Dim zjhm, pjhm, qssj, zcsj Dim dingshiname Dim i '确定字体颜色的改变*退出*Private Sub command1_click() Unload Form2End Sub*Label1文字标题颜色改变*Private Sub Form_Click()If i = 1 Then Label1.ForeColor = &HFF0000 i = 2Else Label1.ForeColor = &HFF& i = 1End IfEnd SubPrivate Sub Form_Load() i = 1 Timer1.Enabled = TrueEnd SubPrivate Sub Command2_Click() Dim msg As Integer If Option2.Value Then '字冠管理 Load Form7 Form7.Show End If If Option1.Value Then '号码管理 Form9.Show End If If Option5.Value Then '启动进行计费 Load Form10 Form10.Show End If If Option8.Value Then Load Form3 '启动原始话单 Form3.Show End If If Option4.Value Then Load Form6 '启动费率管理 Form6.Show End If If Option3.Value Then '系统简介 Form8.Show End IfEnd SubPrivate Sub Timer1_Timer() '判断是否到结算日期 Open App.Path + "定时周期" For Random As #5 Len = 20 Get #5, 1, t '定时日期 Get #5, 3, dingshihourGet #5, 2, v '是否结算过 If Val(t) <> Day(Now) Or Val(dingshihour) <> Hour(Now) Then v = 0 Put #5, 2, v Else If v <> 2 Then '没有结算过 Label3.Caption = "今天是结算日期!正在导入数据." Close #5*表的生成* dingshiname = App.Path + "话单" + Trim(Str(Month(Now)_ + Trim(Str(Day(Now) '话单存在放的路径 dingshiname1 = Trim(Str(Month(Now) + Trim(Str(Day(Now) Set examdb = OpenDatabase(App.Path + "话单库") Set examtbl = examdb.CreateTableDef(dingshiname1) With examtbl Set examfld(0) = .CreateField("主叫号码", dbText, 15) Set examfld(1) = .CreateField("被叫号码", dbText, 15) Set examfld(2) = .CreateField("起始时间", dbText, 50) Set examfld(3) = .CreateField("终止时间", dbText, 50) .Fields.Append examfld(0) .Fields.Append examfld(1) .Fields.Append examfld(2) .Fields.Append examfld(3) End With Set examdb = OpenDatabase(App.Path + "话单库") Data1.DatabaseName = App.Path + "话单库" Data1.RecordSource = dingshiname1 Data1.Refresh Open dingshiname For Input As #1 On Error Resume Next examdb.TableDefs.Append examtbl '添加表 Set examdb = OpenDatabase(App.Path + "话单库") Data1.Refresh While Not EOF(1) Input #1, zjhm, pjhm, qssj, zcsj Data1.Recordset.AddNew Data1.Recordset.Fields("主叫号码").Value = zjhm Data1.Recordset.Fields("被叫号码").Value = pjhm Data1.Recordset.Fields("起始时间").Value = qssj Data1.Recordset.Fields("终止时间").Value = zcsj Data1.Recordset.Update WendClose #1 Label3.Caption = dingshiname1 + "话单" + "成功导入数据库!" Label3.Caption = "" Timer1.Enabled = False strar = True On Error Resume Next Unload Form12 Form12.Show End If End If Close #5End SubPrivate Sub Timer2_Timer() Label2.Caption = NowEnd Sub以上代码完成了系统主界面所需要的各种功能的实现。可以任意在主界面上选择其功能,从而进入系统其它下一级界面执行相应的操作。除此之外,还可以判断是否已经到结算日期,是否已经结算过等功能。2.7 系统管理模块2.7.1 模块分析 系统管理管理模块实现对系统安全的管理,包括了关于系统说明、登录日志的记录、登录日志的删除、用户管理。而用户管理又包括了用户的注册、用户修改、用户的删除。用户管理包括的功能只有高级管理员才有权限对此进行操作,其它普通管理员无权对此做任何操作。关于系统功能和登录日志功能在同一个界面上交叉显示,单击关于系统则在界面上显示关于系统的说明;单击登录日志在界面上则显示登录日志的内容(工号和登录日期)。而单击用户管理时则启动用户管理界面。在用户管理界面上又可以根据其功能进行相应的操作。2.7.2 窗体的创建在工程中新建一个窗体,将窗体保存为系统简介.frm。窗体主要属性设置如表2-10所示。 表2-10主界面窗体属性 属性名属性值说明 名称form8窗体名称 caption系统简介窗体标题 pictureBitTamp窗体背景图片StartUpPositoo