毕业论文范文网-论文范文
电气工程 会计论文 金融论文 国际贸易 财务管理 人力资源 学前教育 德语论文 工程管理 文化产业 工商管理 会计专业 行政管理 广告学
机械设计 汉语文学 英语论文 物流论文 电子商务 法律论文 工商管理 旅游管理 市场营销 药学论文 播音主持 人力资源 金融论文 保险学
制药工程 生物工程 包装工程 模具设计 测控专业 工业工程 教育管理 行政管理 计算机论 电子信息 市场营销 法学论文 财务管理 投资学
体育教育 小学教育 印刷工程 土木工程 书法论文 护理论文 心理学论 信息管理 公共事业 给水排水 新闻专业 摄影专业 广电编导 经济学
  • 范文首页 |
  • 毕业论文 |
  • 论文范文 |
  • 计算机论文 |
  • 外文翻译 |
  • 工作总结 |
  • 工作计划 |
  • 现成论文 |
  • 论文下载 |
  • 教学设计 |
  • 免费论文 |
  • 原创论文 |
搜索 高级搜索

原创毕业论文

当前位置:毕业论文范文网-论文范文 -> 免费论文 -> 计算机论文

终端计费系统

作者: 浏览:11次
免费专业论文范文
免费专业论文
政治工作论文
计算机论文
营销专业论文
工程管理论文范文
医药医学论文范文
法律论文范文
生物专业论文
物理教学论文范文
人力资源论文范文
化学教学论文范文
电子专业论文范文
历史专业论文
电气工程论文
社会学专业论文
英语专业论文
行政管理论文范文
语文专业论文
电子商务论文范文
焊工钳工技师论文
社科文学论文
教育论文范文
数学论文范文
物流论文范文
建筑专业论文
食品专业论文
财务管理论文范文
工商管理论文范文
会计专业论文范文
专业论文格式
化工材料专业论文
英语教学专业论文
电子通信论文范文
旅游管理论文范文
环境科学专业论文
经济论文
人力资源论文范文
营销专业论文范文
财务管理论文范文
物流论文范文
财务会计论文范文
数学教育论文范文
数学与应用数学论文
电子商务论文范文
法律专业论文范文
工商管理论文范文
汉语言文学论文
计算机专业论文
教育管理论文范文
现代教育技术论文
小学教育论文范文
机械模具专业论文
报告,总结,申请书
心理学论文范文
学前教育论文范文

收费计算机专业论文范文
收费计算机专业论文
Delphi
ASP
VB
JSP
ASP.NET
VB.NET
java
VC
pb
VS
dreamweaver
c#.net
vf
VC++
计算机论文
毕业论文范文题目:终端计费系统,论文范文关键词:终端计费系统
终端计费系统毕业论文范文介绍开始:


1系统设计

1.1.1 系统功能分析

 终端计费系统开发的目的是能够实现对不同型号的程控交换机对计费中心定时或即时传下来的原始话单信息进行及时准确的分类、查询、浏览、修改、删除、统计、话单信息的打印等。能够及时查询客户的通话数据,避免引起话费争议,提高客户的满意度。使管理更科学、更方便、更合理。同时,也能够帮助电信计费有关人员提高工作效率和服务质量。为电信局减少不必要的损失。从而有效的提高电信局经济的效益。
 通过对电信局计费中心日常工作的分析,可将终端计费系统的功能概括成如下方面。
号码管理:包括固定电话和公用电话基本信息的录入、修改、删除、查找、添加、查询等管理。
字冠管理:包括固定电话和公用电话地方基本字冠的录入、修改、删除、查找、添加、查询等管理。
原始话单管理:包话对程控交换传下来的原始话单信息的导入、浏览、删除等管理。
费率管理:包括固定电话和公用电话基本费率的录入、修改、删除、查找、添加、查询等管理。
关于系统:对有关系统的简介和对用户的管理(包括用户注册、用户删除、用户修改)。
计费统计管理:即时计费、定时周期计费、对已统计的计费表的浏览(包括对统计表的删除、删除统计表的字段、对最近操作进行恢复、查看统计表)等管理。
 考虑系统的安全性,需要对用户进行安全认证,因此还需要实现以下系统用户的管理功能。
用户登录认证。
用户管理,包括用户注册、删除用户、修改用户信息等(只有高级管理员才有此权限)。
登录日志的记录和删除日志(只有高级管理员才有此权限,普通用户只能对数据进行浏览)。

2系统功能模块设计

 根据系统所要实现的功能,按照结构化程序设计的原则将整个系统划分为如图1-1所示的若干个功能模块。

 图1-1  计费系统功能模块图

1.1.3  操作流程图
 根据系统功能模块的划分和计费管理系统的实际工作流程,画出如图1-2所示的计费管理系统操作流程图。
 
   导入 

 图1-2 计费系统操作流程图


2.1数据库设计
 
2.1.1  数据库需求设计

 在前面的1.1节里已经对计费系统操作流程进行了分析,在它的基础上,我们可以列出以下计费管理系统所需的数据项和数据结构。
固话表:号码、地名、基本月租等。
公话表:号码、地名、基本月租等。
字冠表:地名、类型、本地字冠号
费率表:主叫类型、通话类型、日期类型、费率、首次三分钟等。
登录日志:工号、登录日期等
用户注册:工号、密码、密码验证等。

2.1.2  数据库概念结构的设计

 Access 数据库是Office XP 软件包中的产品之一,是一个关系数据库
(RDBMS),与其他的关系数据库管理系统相比,Access具有简单易学、方便实用等特点,易于开发数据库应用程序。
    Access通过数据库的方式来处理数据,在Access的数据库中包含了表、表之间关系、查询、报表、宏和数据访问页等对象。其实可以把数据库看成是一个相关对象的容器,创建数据库是使用Access进行数据处理的第一步。在Access中可使用以下三种方法创建数据库:
用数据库向导创建数据库;
创建空的数据库;
用现有文件创建数据库;
 本系统所采用的数据库就是通过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  数据库的创建

    创建数据库时可以先创建一个空数据库,然后往数据库中添加相应的对象,这是一种较复杂但又非常灵活的创建数据库方法。创建数据库的步骤如下。
在Access中执行 [文件]     [新建] 命令,出现 [新建文件] 对话框。
在[新建文件] 对话框中选择 [新建] 选项中的 [空数据库], 弹出[文件新建数据库] 对话框;
在 [文件新建数据库] 对话框中选择保存文件的位置并输入要创建的数据库名称,然后单击 [创建] 按钮,出现如图2-1所示的[数据库]窗口。空数据库创建完毕。
          
                               图2-1  数据库窗口

2.1.5   数据表的创建

    创建表其实就是创建表的结构,表的结构包括表中每个字段的字段名、字段的数据类型和字段属性,为表中的每个字段设置好字段名、字段的数据类型和字段属性后,表也就创建好了。
 创建表之前首先需要打开数据库窗口,然后在数据库窗口中通过以下四种方法进行创建:
通过输入数据创建表;
使用表向导创建表;
使用表的设计视图创建表;
通过导入或链接已有的数据创建新表;
 一般采用“使用表向导创建表”来创建表,本系统所用到的表大部分都
 采用此方法来创建表。
 
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 dirtablename
 Public t, strar
 Public v '判断是否结算过
 Public gonghao, gonghao1
 Public p '判断登录级别
 Public dingshihour
 Public dingshiname1

2.5  登录模块的创建

2.5.1窗体的创建
 
 执行[工程]   [添加窗体]命令,给工程添加一个新窗体,窗体的主要属性设置如表2-7所示

                  表2-7登录窗体属性

  属性名 属性值 说明
  名称 form1  窗体名称
  caption 登录 窗体标题
  picture BitTamp 窗体背景图片
StartUpPositoon 2-屏幕中心 启动后居屏幕的中心

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所示。
 
  属性名 属性   属性值 说明
  Label3  caption 工号 标签 
  Label4  caption        密码 标签 
  Label1          caption 计费系统  标签   
 Command1(0)  caption        确定 按扭控件
 Command1(1) caption           取消 按扭控件
 Text1(0) borterstyle         1-fixed single 文本框
 Text1(1) borterstyle 1-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
               Else
 z:         i = i + 1
                  If i = 3 Then Unload Form1
 If 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 = "" Then
g:             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 If
 End Sub
 Private Sub Form_Load()
  i = 0
         Timer1.Enabled = True
 End 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 窗体名称
  caption form2 窗体标题
  picture BitTamp 窗体背景图片
StartUpPositoon 2-屏幕中心 启动后居屏幕的中心
Borderstyle 1-Fixed Single  窗体固定边界,禁止用户改变大小

将窗体保存为form2.frm。

2.6.3 模块主界面的设计

   在窗体上添加控件。窗体布局运行结果如图2-7所示。
   主要控件属性如表1-9所示。
   三个标签Label1、Label2、Label3。两个Timer控件:Timer1、Timer2。
6个单选钮,Option1—Option6。两个命令按钮command1、command2。一个Data1。


 
 图2-7主界面
 
 表2-9 主界面窗体主要控件属性

  控件  属性 属性值 说明
Option1  caption  号码管理
Option2  caption  字冠管理
Option3  caption  系统管理 单选框
Option4  caption  费率管理
Option5  caption  计费统计
Option8  caption  原始话单
Label1  caption  计费系统
Option  font 宋体  Option、Label1这两个属性值设置一
Label1 fontcolor &HooooooFF&    样
Timer1  
Timer1 interval  50 时钟
 确定
Command1  caption  退出  命令按钮
Command2  font 宋体
 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 Form2
 End Sub
 ********Label1文字标题颜色改变********
 Private Sub Form_Click()
 If i = 1 Then
         Label1.ForeColor = &HFF0000
         i = 2
 Else
         Label1.ForeColor = &HFF&
         i = 1
 End If
 End Sub
 
 Private Sub Form_Load()
    i = 1
   Timer1.Enabled = True
 End Sub
 Private 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 If
 End Sub
 
 Private Sub Timer1_Timer()
       '判断是否到结算日期
       Open App.Path + "\定时周期" For Random As #5 Len = 20
       Get #5, 1, t '定时日期
       Get #5, 3, dingshihour
 Get #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
     Wend
 Close #1
     Label3.Caption = dingshiname1 + "话单" + "成功导入数据库!"
     Label3.Caption = ""
     Timer1.Enabled = False
     strar = True
     On Error Resume Next
     Unload Form12
     Form12.Show
        End If
  End If
     Close #5
 End Sub
 Private Sub Timer2_Timer()
  Label2.Caption = Now
 End Sub
 
 以上代码完成了系统主界面所需要的各种功能的实现。可以任意在主界面上选择其功能,从而进入系统其它下一级界面执行相应的操作。除此之外,还可以判断是否已经到结算日期,是否已经结算过等功能。

2.7 系统管理模块

2.7.1  模块分析

   系统管理管理模块实现对系统安全的管理,包括了关于系统说明、登录日志的记录、登录日志的删除、用户管理。而用户管理又包括了用户的注册、用户修改、用户的删除。用户管理包括的功能只有高级管理员才有权限对此进行操作,其它普通管理员无权对此做任何操作。
 关于系统功能和登录日志功能在同一个界面上交叉显示,单击关于系统则在界面上显示关于系统的说明;单击登录日志在界面上则显示登录日志的内容(工号和登录日期)。而单击用户管理时则启动用户管理界面。在用户管理界面上又可以根据其功能进行相应的操作。
 
2.7.2 窗体的创建

 在工程中新建一个窗体,将窗体保存为系统简介.frm。窗体主要属性设置如表2-10所示。
                表2-10主界面窗体属性
 
    属性名 属性值 说明
    名称 form8 窗体名称
    caption 系统简介 窗体标题
    picture BitTamp 窗体背景图片
 StartUpPositoon 2-屏幕中心 启动后居屏幕的中心
 Borderstyle 1-Fixed Single   窗体固定边界,禁止用户改变大小

 2.7.3  系统管理模块界面的设计
 
 在窗体上添加控件,Label1、Data1、DBGrid1、Frame1、Command1~
Command4。Label1用来写存放关于系统的一些说明,Data1用来访问数据库,DBGrid1用来绑定登录日志表的字段并显示相关信息。Frame1用来对外观起到美化作用。Command1~ Command4作为命令按钮用。主要控件的属性设置如表2-11所示。
                   表2-11 主要控件的属性
         
  控件  属性 属性值 说明
Label1   caption  关于系统内容 文本框
Command1 caption  关天系统
Command2 caption  登录日志 
Command3 caption  删除日志 命令按钮
Command4 caption  用户管理
  datasource Data1
DBGrid1 caption  计费系统 数据网格控件
DBGrid1   
Label1 visible   flase 隐藏不可见
  
Command1 font 宋体 
  ~   命令按钮
Command4 fontcolor  &H80000008&                  

设置好各项属性后,运行界面如图2-8所示
              
 
  图2-8  系统管理界面
 
2.7.3.1  系统管理界面功能实现的相关代码

 Option Explicit
 Private Sub command1_click()
‘*****************关于系统的文字说明******************
   Label1.Caption = Chr(13) + "本系统是利用Visual Basic_"
   语言为背景进行编写的 , 由于时间有限和技术的不成熟_
   系统许多功能都未能很好的完善,今后有时间一定会....._
   + Chr(13) + Chr(13) + "_
   创建时间:2005-04-12" + Chr(13) + Chr(13) + "_
版本:    MyFLove ""
   DBGrid1.Visible = False
   Command3.Enabled = False
 End Sub
 Private Sub Command2_Click()
   Command3.Enabled = True
   Label1.Caption = ""
   Data1.DatabaseName = App.Path + "\计费系统"
   Data1.RecordSource = "登录日志"
   Data1.Refresh
   DBGrid1.Visible = True
End Sub
Private Sub Command3_Click()
 Dim prompt, mbook
 If p = 1 Then
   If DBGrid1.SelBookmarks.Count = 0 Then
      MsgBox "请选择要删除的记录!"
      Exit Sub
   Else
      prompt = MsgBox("确定要删除所选定记录吗?", vbYesNo, "删除选定记录")
      If prompt = vbNo Then
           Exit Sub
        Else
           For Each mbook In DBGrid1.SelBookmarks
             With Data1.Recordset
                 .Bookmark = mbook
                 .Delete
             End With
          Next
          Data1.Refresh
         End If
    End If
  Else
       MsgBox "只有高级管理员才有此权限!"
        Exit Sub
  End If
End Sub

Private Sub Command4_Click()
 Form16.Show
End Sub
'判断是不是高级管理员
Private Sub Form_Load()
   p = 0
   Data1.RecordSource = "用户注册"
   Data1.Refresh
   Data1.Recordset.MoveFirst
   If Data1.Recordset.Fields("工号").Value = gonghao Then
      p = 1
   End If
End Sub

 以上代码,就是实现系统管理模块的各项功能。需要注意的是变量p是用来判断登录的是否是高级管理员。为下面将要介绍的系统管理中用户管理子窗体模块的一些功能是否开通或封闭打上一个标记,p=0为普通用户,系统将会自己识别,并封闭一些功能:p=1为高级用户,可以对任何功能进行操作。从而达到系统的安全性。

2.7.3.2  用户管理子窗体模块

 用户管理功能是系统管理模块扩展的一个功能,当单击用户管理,便会跳出一个子窗体。在此窗体上可以注册用户,修改用户,删除用户等操作。当是高级管理员在操作时,系统就通过Data1对数据库进访问,把工号、密码、密码确认等相关内容写入数据库里的日志表里,操作界面如图2-9所示。如果不是高级管理员在操作则在执行某项功能前会有如图2-10的提示框,单击提示框确定后,数据信息将不会被保存到数据库里。
 用户管理模块的实现:在窗体上添加控件,Label1~Label3、Data1、Frame1、Command1~Command3。因为用到的控件较少,控件属性的设置也比较简单,具体的属性设置和前面所介绍的相似。在此就不做详细介绍。

             

 图2-9  高级用户管理界面

 
 
 图2-10 普通用户管理界面
 
2.7.3.3  用户管理子窗体模块功能实现的代码如下

   Option Explicit
  Dim examdb As Database
  Dim examtbl As TableDef
  Dim examfld(7) As Field
  Dim gonghao11

Private Sub command1_click()
If p = 1 Then
  If Text1.Text = "" Or Text2.Text = "" Then
   MsgBox "工号和密码不能为空!!"
   Exit Sub
  End If
  If Text3.Text = "" Then
   MsgBox "请输入密码确认!"
   Text2.Text = ""
   Exit Sub
  End If
  gonghao11 = "工号='" + Text1.Text + " ' "
  Data1.Recordset.FindFirst gonghao11
  If Data1.Recordset.NoMatch = False Then
   MsgBox "此工号已经存在!"
   Exit Sub
  Else
   Data1.Recordset.AddNew
   Data1.Recordset.Fields("工号").Value = Text1.Text
   Data1.Recordset.Fields("密码").Value = Text2.Text
   Data1.Recordset.Fields("密码确认").Value = Text3.Text
   Data1.Recordset.Update
   MsgBox "注册成功!"
  End If
 Else
  MsgBox "只有高级管理员才有此权限!"
 End If
End Sub

Private Sub Command2_Click()
 If p = 1 Then
   If Text1.Text = "" Or Text2.Text = "" Then
   MsgBox "工号和密码不能为空!!"
   Exit Sub
  End If
  If Text3.Text = "" Then
   MsgBox "请输入密码确认!"
   Text2.Text = ""
   Exit Sub
  End If
  gonghao11 = "工号='" + Text1.Text + " ' "
  Data1.Recordset.FindFirst gonghao11
  If Data1.Recordset.NoMatch = False Then
    Data1.Recordset.Edit
    'Data1.Recordset.Fields("工号").Value = Text1.Text
    Data1.Recordset.Fields("密码").Value = Text2.Text
    Data1.Recordset.Fields("密码确认").Value = Text3.Text
    Data1.Recordset.Update
    MsgBox "修改成功!"
  Else
    MsgBox "此工号不存在!"
  End If
 Else
 MsgBox "只有高级管理员才有此权限!"
End If
End Sub

Private Sub Command3_Click()
Dim msg
 If p = 1 Then
    gonghao11 = "工号='" + Text1.Text + "'"
    Data1.Recordset.FindFirst gonghao11
    If Data1.Recordset.NoMatch = False Then
     msg = MsgBox("确定要删除此工号吗?", vbYesNo, "删除用户")
      If msg = vbYes Then
           Data1.Recordset.Delete
           Data1.Refresh
      Else
           Exit Sub
      End If
     Else
      MsgBox "没有此工号!"
      Exit Sub
     End If
  Else
   MsgBox "只有高级管理员才有此权限!"
End If
 End Sub
 Private Sub Form_Load()
 Data1.DatabaseName = App.Path + "\计费系统.mdb"
 Data1.RecordSource = "用户注册"
 Data1.Refresh
 End Sub

2.8 号码管理模块

2.8.1 模块分析

 号码管理模块实现固定电话号码和公用电话号码的分类管理,包括对电话号码的添加、修改、删除和查找等功能。因此,在号码模块下有两个子窗体,因定电话子窗体和公用电话子窗体。号码的添加、修改、删除和查找等功能在各子窗体中实现,因而号码管理窗体只起到一个桥梁链接的作用。其中,采用Data对数据库的固话表和公话表进行访问。然后,通过对数据表进行绑定,在数据网格DBGrid上显示出有关电话的相关信息。数据的添加、修改、删除和查找通过DAO的Command对象完成。

2.8.2 号码管理窗体的创建
 
 在工程中新建一个窗体,将窗体保存为 类型选择.frm 。窗体主要属性设置如表2-12。
 
 如表2-12 号码管理窗体属性

    属性名 属性值 说明
    名称  类型选择.frm        窗体名称
    caption  选择类型           窗体标题
 StartUpPositoon 2-屏幕中心 启动后居屏幕的中心
   Borderstyle 1-Fixed Single 窗体固定边界,禁止用户改变大小
   
2.8.3  号码管理界面的设计
 
 在窗体上添加以下控件:Label1、command1、command2、option1、option2、frame1。各控件的属性设置如表2-13所示。
 
                  表2-13   主要控件属性

  属性名 属性   属性值 说明
  Label1  caption 请选择电话类型 标签 
 Option1     caption           固话 单选钮
 Option2  caption       公话 单选钮
 Command1  caption        确定 命令按扭控件
 Command2 caption           取消 命令按扭控件
 
模块的布局和运行结果如图2-11所示。             
              
                   图2-11 号码管理界面
 
2.8.4  模块功能实现的代码

Private Sub command1_click()
  If Option1.Value Then Form4.Show
    If Option2.Value Then Form5.Show
    Unload form9
  End Sub
Private Sub Command2_Click()
   Unload form9
End Sub

2.8.4.1 固定电话子窗体

1.模块分析

   实现对固定电话号码的添加、修改、删除和查找等功能。只有点击编辑按钮才能激活各项功能。

2.窗体的创建

 在工程中新建一个窗体,将窗体保存为 固话查询.frm 。窗体主要属性设置和表1-11相似。在此就不再做详细分析。
 
3.固话子窗体界面的设计
 
   在窗体个添加以下控件:Command1(0)~Command1(7)、Command2、Text1~Text3、Data1、DBGrid1、Label1~Label3。并将它们的属性设置为如表2-14所示。本模块的窗体布局如图2-12所示。                 

             表2-14 控件属性的设置
 
  控件  属性 属性值 说明
Command1(0)    第一条记录
Command1(1)        上一条记录
Command1(2)    下一条记录                         
Command1(3)    最后一条记录 命令按钮
Command1(4) caption 添加记录  
Command1(5) 修改记录
Command1(6) 查找记录
Command1(7) 删除记录
Command2 编辑
Command1 enabled  false
  datasource Data1             
DBGrid1  caption 固话表   数据网格控件
Label1 号码
Label2   caption  地名  文本框
Label3    基本月租

设置好各项属性后,运行界面如图2-12所示

         图2-12  固定电话窗体界面
4.模块功能实现的代码如下
Option Explicit

Private Sub command1_click(Index As Integer)
Select Case Index
    Case 0 '添加
         Data1.Recordset.AddNew
    Case 1 '修改
         Data1.Recordset.Edit
         If Text1.DataChanged Then GoTo save1
         If Text2.DataChanged Then GoTo save1
         If Text3.DataChanged Then GoTo save1
 
    Case 2 '查找
         Dim key
         Dim key1 As String
         key = InputBox("请输入查找的号码:", "查找记录")
         key1 = "号码=" + key '
        
        Data1.Recordset.FindFirst key1
         If Data1.Recordset.NoMatch Then
            MsgBox "数据表没有符合的记录!"
            Data1.Recordset.MoveFirst
        Else
           MsgBox "数据表找到符合的记录!"
        End If
     Case 3 '删除
       Dim msg
        Dim ret As String
        Dim mbook As Variant
        Dim prompt As Integer
    ret = MsgBox("是否要删除当前记录?", vbYesNo, "删除当前记录")
        If ret = vbYes Then
            Data1.Recordset.Delete
            Data1.Recordset.MoveFirst
            Exit Sub
        Else
            If DBGrid1.SelBookmarks.Count = 0 Then
               MsgBox "请选择要删除的行!"
               Exit Sub
            End If
        DBGrid1.AllowDelete = True
        prompt = MsgBox("确定要删除所选定记录吗?", vbYesNo, "删除选定记录")
        If prompt = vbNo Then Exit Sub
        For Each mbook In DBGrid1.SelBookmarks
            With Data1.Recordset
                 .Bookmark = mbook
                 .Delete
            End With
        Next
        Data1.Refresh
        End If
save1:
        msg = MsgBox("要更新的数据保存吗?", vbYesNo)
        If msg = vbYes Then
            Data1.UpdateRecord
        Else
            Data1.Recordset.CancelUpdate
        End If
    Case 4
          Data1.Recordset.MoveFirst
          If Data1.Recordset.BOF Then Data1.Recordset.MoveFirst
   Case 5
          Data1.Recordset.MovePrevious
        If  Data1.Recordset.BOF= True Then Data1.Recordset.MoveFirst
   Case 6
          Data1.Recordset.MoveNext
        If  Data1.Recordset.EOF = True Then Data1.Recordset.MoveLast
   Case 7
          Data1.Recordset.MoveLast
          End Select
End Sub

 Private Sub Command2_Click()
   Command1(0).Enabled = True
   Command1(1).Enabled = True
   Command1(2).Enabled = True
   Command1(3).Enabled = True
   Command1(4).Enabled = True
   Command1(5).Enabled = True
   Command1(6).Enabled = True
   Command1(7).Enabled = True
   Text1.Enabled = True
   Text2.Enabled = True
   Text3.Enabled = True
   Text2.SetFocus
End Sub
 Private Sub Form_Activate() '判断是否有数据
    Data1.DatabaseName = App.Path + "\计费系统.mdb"
    Data1.RecordSource = "固话表"
    Data1.Refresh
     If Data1.Recordset.RecordCount = 0 Then 'P55数据库
           MsgBox "数据库中没有数据,请添加数据!"
           Data1.Recordset.AddNew
     Else
           Data1.Recordset.MoveFirst
     End If
End Sub

 Private Sub Data1_Validate(Action As Integer, Save As Integer)
      Dim msg
      If Save Then
          msg = MsgBox("要更新的数据保存吗?", vbYesNo)
      If msg = vbNo Then Save = 0
      End If
End Sub
 
 2.8.4.2 公用电话子窗体
 
     公用电话子窗体的模块分析、窗体的创建、窗体界面的设计和固定电话
子窗体的相似。不难得出实现功能的代码也和固定电话子窗体的类似。参照2.8.4.1的第3点源代码即可。在此,也就不再重复版出。

2.9  字冠管理模块
  
2.9.1 模块分析
   
 字冠管理模块实现的功能是对本通信行业或者同行通信行业本地字冠的号码的管理。包括输入,修改、删除字冠。
 为了方便计费统计的进行,将本地字冠(包括本通信行业本地字冠和同行通信行业本地字冠)输入到计费系统库里的字冠表统一管理。
 
2.9.2窗体的创建

 在工程中新建一个窗体,将窗体保存为 字冠管理.frm 。窗体主要属性设置如表1-15所示。
 
 
 
 
 
 
  表2-15字冠管理窗体属性

    属性名 属性值 说明
    名称 form7 窗体名称
    caption 字冠管理 窗体标题
   StartUpPositoon 2-屏幕中心 启动后居屏幕的中心
 Borderstyle 1-Fixed Single   窗体固定边界,禁止用户改变大小

2.9.3  模块字冠管理界面的设计
               
     在窗体个添加以下控件:Command1(0)~Command1(5)、Command2、Text1~Text3、Data1、DBGrid1、Label1~Label3。并将它们的属性设置为如表1-16所示。本模块的窗体布局如图1-13所示。Data1用来访问数据库里的字冠表,DBGrid1与数据库里的字冠表各字段进行绑定,然后在表格里显示相应的字段值。                

 表2-16 控件属性的设置
 
  控件  属性 属性值 说明
Command1(3)    第一条记录
Command1(4)        上一条记录
Command1(5)    下一条记录                         
Command1(0) caption 添加记录 命令按钮 
Command1(1) 修改记录 
Command1(2) 删除记录
Command2 编辑
  datasource Data1             
DBGrid1  caption 字冠表   数据网格控件
Label1 地名 
Label2   caption  类型  文本框
Label3    本地字冠

 设置好各项属性后,运行界面如图2-13所示。需要注意的是,界面刚运行时,为了防止误操作,除了 编辑 命令按钮可用之外,其它命令是不可用的,只有在单击 编辑 命令按钮后,才生效。
 

           图2-13 字冠管理界面

2.9.4  模块功能实现的代码如下

Private Sub Command2_Click()
   Text1.Enabled = True
   Text2.Enabled = True
   Text3.Enabled = True
   Command1(0).Enabled = True
   Command1(1).Enabled = True
   Command1(2).Enabled = True
   Command1(3).Enabled = True
   Command1(4).Enabled = True
   Command1(5).Enabled = True
End Sub

Private Sub Form_Activate() '判断是否有数据
 Data1.DatabaseName = App.Path + "\计费系统.mdb"
  Data1.RecordSource = "字冠表"
  Data1.Refresh
  If Data1.Recordset.RecordCount = 0 Then 'P55数据库
     MsgBox "数据库中没有数据,请添加数据!"
     Data1.Recordset.AddNew
  Else
     Data1.Recordset.MoveFirst
  End If

End Sub

Private Sub command1_click(Index As Integer)
Select Case Index
    Case 0
      Data1.Recordset.AddNew
      Text2.SetFocus
       
    Case 1 '修改
 Data1.Recordset.Edit
If Text1.DataChanged Then GoTo save1
    If Text2.DataChanged Then GoTo save1
     If Text3.DataChanged Then GoTo save1
       Data1.Recordset.AddNew
       Text2.SetFocus

    Case 2 '删除
    Dim ret As String
    Dim mboook As Variant
    Dim prompt As Integer
    ret = MsgBox("是否要删除当前记录?", vbYesNo, "删除当前记录")
    If ret = vbYes Then
    Data1.Recordset.Delete
    Data1.Recordset.MoveFirst
   Exit Sub
    Else
   
   If DBGrid1.SelBookmarks.Count = 0 Then
    MsgBox "请选择要删除的行!"
    Exit Sub
   End If
   DBGrid1.AllowDelete = True
   prompt = MsgBox("确定要删除所选定记录吗?", vbYesNo, "删除选定记录")
   If prompt = vbNo Then Exit Sub
   For Each mbook In DBGrid1.SelBookmarks
   With Data1.Recordset
      .Bookmark = mbook
      .Delete
      End With
     
      Next
      Data1.Refresh
      delfinish = True
   End If
save1:
   msg = MsgBox("要更新的数据保存吗?", vbYesNo)
   If msg = vbYes Then
    Data1.UpdateRecord
   Else
    Data1.Recordset.CancelUpdate
   End If
   Case 3
   Data1.Recordset.MoveFirst
   If  Data1.Recordset.BOF Then Data1.Recordset.MoveFirst
    Case 4
   Data1.Recordset.MovePrevious
    If Data1.Recordset.BOF = True Then Data1.Recordset.MoveFirst
   Case 5
    Data1.Recordset.MoveNext
    If Data1.Recordset.EOF = True Then Data1.Recordset.MoveLast
   End Select
  End Sub
Private Sub Data1_Validate(Action As Integer, Save As Integer)
 Dim msg
 If Save Then
   msg = MsgBox("要更新的数据保存吗1?", vbYesNo)
   If msg = vbNo Then Save = 0
 End If
End Sub

3.1 费率管理模块

3.1.1 模块的分析
 
 费率管理模块是为了实现对不同地方设置不同的收费标准。为了便于用户的操作,费率管理模块可以对费率进行修改,添加,删除。

3.1.2 窗体的创建

  在工程中新建一个窗体,将窗体保存为 费率管理.frm 。窗体主要属性的设置如表3-1所示即可。

     
  表3-1费率管理窗体属性

    属性名 属性值 说明
    名称 form6 窗体名称
    caption 费率管理 窗体标题
   StartUpPositoon 2-屏幕中心 启动后居屏幕的中心
 Borderstyle 1-Fixed Single   窗体固定边界,禁止用户改变大小

3.1.3  费率管理模块界面的设计
      
       在窗体个添加以下控件:Command1(0)~Command1(5)、Command2、Text1~Text3、Data1、DBGrid1、Label1~Label3。并将它们的属性设置为如表3-2所示。本模块的窗体布局如图1-13所示。Data1用来访问数据库里的字冠表,DBGrid1与数据库里的字冠表各字段进行绑定,然后在表格里显示相应的字段值。                

 表3-2 主要控件属性的设置
 
  控件  属性 属性值 说明
Command1(0)    第一条记录
Command1(1)        上一条记录
Command1(2)    下一条记录                         
Command1(3) caption  添加记录 命令按钮
Command1(4)   修改记录 
Command1(5)  删除记录
Command2 编辑
Command1 enabled  false
  datasource Data1             
DBGrid1  caption 费率表   数据网格控件
Label1 主叫号码
Label2        通话类型 文本框
Label3  caption    日期类型  
Label4 费率 
Label5 首次三分钟

设置好各项属性后,运行界面如图3-1所示

     
 
 图3-1  费率管理界面
 
3.1.4   费率管理模块功能实现的代码
         
  Option Explicit
 Private Sub Command2_Click()
   Text1.Enabled = True
   Text2.Enabled = True
   Text3.Enabled = True
   Text4.Enabled = True
   Text5.Enabled = True
   Command1(0).Enabled = True
   Command1(1).Enabled = True
   Command1(2).Enabled = True
   Command1(3).Enabled = True
   Command1(4).Enabled = True
   Command1(5).Enabled = True
 End Sub
 
 Private Sub Form_Activate() '判断是否有数据
   Data1.DatabaseName = App.Path + "\计费系统.mdb"
   Data1.RecordSource = "费率表"
   Data1.Refresh
   If Data1.Recordset.RecordCount = 0 Then 'P55数据库
      MsgBox "数据库中没有数据,请添加数据!"
      Data1.Recordset.AddNew
   Else
      Data1.Recordset.MoveFirst
   End If
 
 End Sub
 
 Private Sub command1_click(Index As Integer)
  Select Case Index
     Case 0
     Data1.Recordset.AddNew
  Case 1 '修改
  Data1.Recordset.Edit
    Text2.SetFocus
   If Text1.DataChanged Then GoTo save1
     If Text2.DataChanged Then GoTo save1
      If Text3.DataChanged Then GoTo save1
   Case 3 '删除
     Dim msg
     Dim ret As String
     Dim mbook As Variant
     Dim prompt As Integer
    ret = MsgBox("是否要删除当前记录?", vbYesNo, "删除当前记录")
     If ret = vbYes Then
     Data1.Recordset.Delete
     Data1.Recordset.MoveFirst
    Exit Sub
     Else
   If DBGrid1.SelBookmarks.Count = 0 Then
     MsgBox "请选择要删除的行!"
    Exit Sub
       End If
    DBGrid1.AllowDelete = True
  prompt = MsgBox("确定要删除所选定记录吗?", vbYesNo, "_
删除选定记录")
    If prompt = vbNo Then Exit Sub
    For Each mbook In DBGrid1.SelBookmarks
    With Data1.Recordset
       .Bookmark = mbook
       .Delete
       End With
       Next
       Data1.Refresh
    End If
 save1:
    msg = MsgBox("要更新的数据保存吗?", vbYesNo)
    If msg = vbYes Then
     Data1.UpdateRecord
    Else
   Data1.Recordset.CancelUpdate
    End If
  Case 2
     Data1.Recordset.MoveFirst
    If Data1.Recordset.BOF Then Data1.Recordset.MoveFirst
  Case 4
     Data1.Recordset.MovePrevious
     If Data1.Recordset.BOF = True Then Data1.Recordset.MoveFirst
  Case 5
     Data1.Recordset.MoveNext
    If Data1.Recordset.EOF = True Then Data1.Recordset.MoveLast
  End Select
  End Sub
 Private Sub Data1_Validate(Action As Integer, Save As Integer)
  Dim msg
  If Save Then
    msg = MsgBox("要更新的数据保存吗?", vbYesNo)
    If msg = vbNo Then Save = 0
    End If
  End Sub
 
3.2    原始话单模块

3.2.1   模块的分析
  
 原始话单模块实现对程控交换机传下来的原始话单正确的导入数据库,对原始话单进行浏览,对导入数据库的话单进行浏览。删除话单表、删除原始话单、删除记录、显示已导入的话单表等功能。原始话单和话单表可以交叉浏览。
 
3.2.2   窗体的创建

 在工程中新建一个窗体,将窗体保存为 费率管理.frm 。窗体主要属性的设置如表3-3所示即可。
 
  
 
 表3-3费率管理窗体属性

    属性名 属性值 说明
    名称 form3 窗体名称
    caption 原始话单 窗体标题
   StartUpPositoon 2-屏幕中心 启动后居屏幕的中心
 Borderstyle 1-Fixed Single   窗体固定边界,禁止用户改变大小

 
3.2.3  费率管理模块界面的设计
      
    在窗体个添加以下控件:Command1~Command6、Text1~Text3、Data1、DBGrid1、Label1、Option1、Option2、List1、List2。并将它们的属性设置为如表1-16所示。本模块的窗体布局如图3-4所示List1用来对浏览时显示原始话单,List2用来显示已统计的表。Data1用来访问数据库里的表,DBGrid1与数据库里的表各字段进行绑定,然后在表格里显示相应的字段值。                

 表3-4 主要控件属性的设置
 
  控件  属性 属性值 说明
Command1    查看
Command2        删除记录
Command3   删除表                         
Command4 caption  保存 命令按钮
Command5  导入数据库 
Command6  编辑
  datasource Data1             
DBGrid1  caption 话单表   数据网格控件
Label1 话单表  文本框
Option1  caption       话单来源            
Option2      表名称 单选钮 
Command1
Command6 enable true
Command2
Command3 命令按钮
Command4
Command5 enable flase

设置好各项属性后,运行界面如图3-2所示

 如图3-2  原始话单界面
 
3.2.4   原始话单模块功能实现的代码

Option Explicit
  Dim examdb As Database
  Dim examtbl As TableDef
  Dim examfld(4) As Field
  Dim a As Integer '删除标记
  Dim zjhm, pjhm, qssj, zcsj, dir1, dir2
Private Sub command1_click()
      If Option1.Value Then
         dir1 = Dir(Text1.Text)
         If dir1 = "" Then
           MsgBox "此话单不存在!"
           Exit Sub
         End If
      On Error GoTo error2
error2: If (Err.Number = 53 Or Err.Number = 76) Or Err.Number = 75 Then
         List1.Visible = False
          MsgBox "请正确输入话单来源!"
          Exit Sub
        End If
       DBGrid1.Enabled = False
       DBGrid1.Visible = False
        List1.Enabled = True
        List1.Visible = True
        On Error Resume Next
        Open Text1.Text For Input As #1
        List1.Clear
        List1.AddItem "主叫号码" + Space(4) + "被叫号码" + Space(9) + "起始时间" + Space(9) + "终止时间" + Chr(10) + Chr(13)
        While Not EOF(1) '显示话单内容
            Input #1, zjhm, pjhm, qssj, zcsj
            List1.AddItem zjhm + Space(4) + pjhm + Space(6) + qssj + Space(6) + zcsj + Chr(10) + Chr(13)
        Wend
      Close #1
      End If
      If Option2.Value Then
        On Error GoTo error3
error3:    If Err.Number = 3078 Then
             DBGrid1.Enabled = False
             DBGrid1.Visible = False
             MsgBox "该表不存在!"
             Exit Sub
           End If
        If Text2 = "" Then
           MsgBox "请输入表名!"
           Exit Sub
        End If
        List1.Enabled = False
        List1.Visible = False
        DBGrid1.Enabled = True
        DBGrid1.Visible = True
        Data1.DatabaseName = App.Path + "\话单库.mdb"
        Data1.RecordSource = Text2.Text
        Data1.Refresh
      End If
End Sub

Private Sub Command2_Click()
     If Option1.Value Then
       a = 0
       If List1.Enabled = False Then
         Exit Sub
       End If
       If List1.Selected(List1.ListIndex) = True Then
           MsgBox ("注意:每次只能删除一条记录!且要马上保存!否则只对最后删除记录有效!!")
           List1.RemoveItem List1.ListIndex
           a = a + 1 '已删除过
       Else
           MsgBox "请选择要删除的记录!"
       End If
      End If
      Close #1
     If Option2.Value Then
        Dim msg
        Dim ret As String
        Dim mbook As Variant
        Dim prompt As Integer
        If DBGrid1.Enabled = False Then
          Exit Sub
        End If
        ret = MsgBox("是否要删除当前记录?", vbYesNo, "删除当前记录")
        If ret = vbYes Then
            Data1.Recordset.Delete
            Data1.Recordset.MoveFirst
            Exit Sub
        Else
            If DBGrid1.SelBookmarks.Count = 0 Then
               MsgBox "请选择要删除的行!"
               Exit Sub
            End If
        DBGrid1.AllowDelete = True
        prompt = MsgBox("确定要删除所选定记录吗?", vbYesNo, "删除选定记录")
        If prompt = vbNo Then Exit Sub
        For Each mbook In DBGrid1.SelBookmarks
            With Data1.Recordset
                 .Bookmark = mbook
                 .Delete
            End With
        Next
        Data1.Refresh
        End If
     End If
End Sub

Private Sub Command3_Click()
    
    If Text1.Text = "" Then
      Exit Sub
    End If
      Dim i As Integer
      i = 0 '记录标记
     If a <> 0 Then
            Open App.Path + "\话单\保存" For Output As #2
            Close #2
            FileCopy Text1.Text, App.Path + "\话单\保存"
            Open App.Path + "\话单\保存" For Input As #2
            Open Text1.Text For Output As #1
            While Not EOF(2)
                Input #2, zjhm, pjhm, qssj, zcsj
                If i <> List1.ListIndex Then
                      Write #1, zjhm, pjhm, qssj, zcsj
                End If
                i = i + 1
            Wend
            a = 0 '已经保存过
     End If
     Close #1
     Close #2
End Sub

Private Sub Command4_Click()
     '*********************表的生成*********************
  dir2 = Dir(Text1.Text)
  If dir2 = "" Then
    MsgBox "原始话单不存在!"
    Exit Sub
  End If
  If Text1.Text = "" Or Text2.Text = "" Then
    MsgBox "话单来源和表名称不能为空!"
    Exit Sub
  Else

  Label1.Caption = "正在导入中,请稍候..."
     Set examdb = OpenDatabase(App.Path + "\话单库")
     Set examtbl = examdb.CreateTableDef(Text2.Text)
     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
  On Error GoTo error1
  examdb.TableDefs.Append examtbl '添加表
error1:   If Err.Number = 3010 Then
            MsgBox "此表名已存在!"
            Label1.Caption = ""
            Exit Sub
          End If
        If Err.Number = 53 Then
           MsgBox "请正确输入原始话单来源!"
           Label1.Caption = ""
           Exit Sub
        End If
     Set examdb = OpenDatabase(App.Path + "\话单库")
     Data1.DatabaseName = App.Path + "\话单库"
    On Error Resume Next
    Open Text1.Text For Input As #1
    examdb.TableDefs.Append examtbl '添加表
    Data1.RecordSource = Text2.Text
    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 'Str(zjhm)
      Data1.Recordset.Fields("被叫号码").Value = pjhm 'Str(pjhm)
      Data1.Recordset.Fields("起始时间").Value = qssj 'CDate(qssj)
      Data1.Recordset.Fields("终止时间").Value = zcsj 'CDate(czsj)
      Data1.Recordset.Update
    Wend
    MsgBox Text1.Text + "话单" + "成功导入数据库!"
    Label1.Caption = ""
    Close #1
    End If
    List2.Clear
    Call DispTablename
    End Sub

Private Sub Command5_Click()
 Dim msg1
 If Text2.Text = "" Then
    MsgBox "请输入要删除的表名称!"
    Exit Sub
 End If
  On Error GoTo error4
error4: If Err.Number = 3265 Then
           MsgBox "此表不存在!"
           Exit Sub
        End If
        Set examdb = OpenDatabase(App.Path + "\话单库")
        msg1 = MsgBox("确定要删除该表吗?", vbYesNo)
        If msg1 = vbYes Then
           examdb.TableDefs.Delete Text2.Text
           Text2.Text = ""
        End If
        List2.Clear
       Call DispTablename
End Sub

Private Sub Command6_Click()
  Command2.Enabled = True
  Command4.Enabled = True
  Command5.Enabled = True
  Command3.Enabled = True
 
End Sub

Private Sub Form_Load()
  Set examdb = DBEngine.Workspaces(0).OpenDatabase(App.Path + "\话单库.mdb")
   Call DispTablename
    Dim zjhm As String, pjhm As String, qssj As String, zcsj As String  '定义字段类型
    Open App.Path + "\话单\原始话单" For Append As #1
    zjhm = InputBox("请输入主叫号码:")
    If zjhm <> "" Then
         pjhm = InputBox("请输入被叫号码:")
         qssj = InputBox("请输入起始时间:") '创建原始话单
         zcsj = InputBox("请输入终止时间:")
         Write #1, zjhm, pjhm, qssj, zcsj
    End If
    Close #1
End Sub

Private Sub DispTablename()
     List2.Clear
     With examdb
          For Each examtbl In .TableDefs
              List2.AddItem examtbl.name
          Next examtbl
    End With
End Sub


3.3  计费统计模块

3.3.1  模块分析

 计费统计模块包话即时计费、定期计费和统计表的浏览。因此,计费统计模块下包含三个子窗体:即时计费窗体、定期计费窗体、统计表浏览窗体。计费统计窗体只起到一个中间链接的作用。
 
3.3.2  窗体的建立

     在工程中新建一个窗体,将窗体保存为 form1.frm 。窗体主要属性的设置和主要控件的属性设置很简单,参照前面所介绍去设置即可。在此就不再做具体分析(下边将要介绍的子窗体也是一样不再做分析)。
 
3.3.3 模块界面的设计

 本模块的窗体运行界面如图3-3 所示。
   
                       

                   图3-3  计费统计主界面

3.3.4 模块功能实现的代码

   Private Sub command1_click(Index As Integer)
 Select Case Index
       Case 0
        Form11.Show
       Case 1
        Form12.Show
       Case 2
        Form14.Show
       End Select
 End Sub

3.3.4.1 现在计费子窗体模块

模块的分析

 可以对现有的话单表进行全部或分时段的统计。
 
 2.  窗体的创建
 
  在工程中新建一个窗体,将窗体保存为 现在计费.frm 。
 
 3.  模块界面的设计
 
     运行后模块的界面如图3-4所示。
 
 
 
 图4-4 现在计费子窗体界面

4.模块功能实现的代码

(1)流程图
 
 
      
                 N
 
  Y
 

  
 固话 公话
                                     

 

 

 

 

 Y N

 


  Y  N

     
 

   市
   话
 

 

 

 

 

 

 返回
 (2) 模块代码

Option Explicit
 Dim h As Integer  '终止标记
 Dim zjhm, pjhm, qssj, czsj
 Dim shichang, feiyong
 Dim dhlx As String '通话类型
 Dim i As String
 Dim findhaoma, findchuqiaolx, dayliexing
 Dim qssd, czsd
 Dim diming, diming1, tablename
 Dim feilu, feilu1
 Dim zhiguan2, zhiguan22, zhiguan1
 Dim firstdate
 Dim xj1, xj2, xj, fz1, fz2, fz, mm1, mm2, mm
 Dim Y As Integer '用来判断是否已经建库和表
 Dim examdb As Database
 Dim examtbl As TableDef
Public Sub jieshuan()
     feilu = Data1.Recordset.Fields("费率").Value
     feiyong = shichang * feilu
     dhlx = "国内长途"
End Sub
Public Sub dayliexing1()
     If Weekday(qssj) = 1 Or Weekday(qssj) = 7 Then
         dayliexing = "节假日"
         Exit Sub
     End If
     If Month(qssj) = 5 And (Day(qssj) >= 1 And Day(qssj <= 7)) Then
        dayliexing = "节假日"
        Exit Sub
     End If
     If Month(qssj) = 1 And (Day(qssj) >= 1 And Day(qssj <= 3)) Then
        dayliexing = "节假日"
        Exit Sub
     End If
     If Month(qssj) = 10 And (Day(qssj) >= 1 And Day(qssj <= 3)) Then
        dayliexing = "节假日"
        Exit Sub
     End If
     dayliexing = "正常工作日"
End Sub
Public Sub guoji()
           
               Data1.DatabaseName = App.Path + "\计费系统.mdb"
               Data1.RecordSource = "费率表"
               Data1.Refresh
               findchuqiaolx = "主叫类型='" + i + "'"
               Data1.Recordset.FindFirst findchuqiaolx
jiejia1:    If Data1.Recordset.NoMatch = False Then
           If Data1.Recordset.Fields("通话类型").Value = "国际长途" Then
             If Data1.Recordset.Fields("日期类型").Value = dayliexing Then
               feilu = Data1.Recordset.Fields("费率").Value
               feiyong = shichang * feilu
               dhlx = "国际长途"
             Else
               Data1.Recordset.FindNext findchuqiaolx
               GoTo jiejia1
             End If
            Else
              Data1.Recordset.FindNext findchuqiaolx
                           GoTo jiejia1
                        End If
                   Else
                        MsgBox "表参数不全,统计失败,请刷新!!"
                        Label4.Caption = ""
                        Exit Sub
                   End If
                   Call newdata(dhlx)
                   If h = 1 Then
                        MsgBox "统计已经取消!"
                        Label4.Caption = ""
                        Close #1
                        Exit Sub
                   End If
End Sub

Public Sub newdata(dhlx As String)
'*********************表的生成*************************
  Dim examfld(7) As Field
  Dim msg
  If Y = 0 Then
     Set examdb = OpenDatabase(App.Path + "\统计库.mdb")
g:   tablename = InputBox("请输入新生成话单表的名称:")
 
    If tablename = "" Then
        msg = MsgBox("要终止话单统计吗?", vbYesNo, "终止吗?")
        If msg = vbNo Then
            GoTo g
        Else
            h = 1
            Exit Sub
        End If
     End If
     Label4.Caption = "统计中,请稍候..."
    Set examtbl = examdb.CreateTableDef(tablename)
   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)
      Set examfld(4) = .CreateField("通话时长", dbInteger, 15)
      Set examfld(5) = .CreateField("通话类型", dbText, 15)
      Set examfld(6) = .CreateField("费用", dbDouble, 15)
      .Fields.Append examfld(0)
      .Fields.Append examfld(1)
      .Fields.Append examfld(2)
      .Fields.Append examfld(3)
      .Fields.Append examfld(4)
      .Fields.Append examfld(5)
      .Fields.Append examfld(6)
  End With
  examdb.TableDefs.Append examtbl '添加表
  Y = 1
End If
'**********************给新添加的表赋值*******************
 Set examdb = OpenDatabase(App.Path + "\统计库.mdb")
  Data1.DatabaseName = App.Path + "\统计库.mdb"
  Data1.RecordSource = tablename
  Data1.Refresh
  Data1.Recordset.AddNew
  Data1.Recordset.Fields("主叫号码").Value = zjhm
  Data1.Recordset.Fields("被叫号码").Value = pjhm
  Data1.Recordset.Fields("起始时间").Value = qssj
  Data1.Recordset.Fields("终止时间").Value = czsj
  Data1.Recordset.Fields("通话类型").Value = dhlx
  Data1.Recordset.Fields("通话时长").Value = shichang
  Data1.Recordset.Fields("费用").Value = feiyong ' Val(feiyong)
  Data1.Recordset.Update
End Sub
'*******************************************************
Private Sub command1_click()
     If Text1.Text = "" And Text2.Text = "" Then
        MsgBox "请输入时间段!"
        Exit Sub
     End If
     If Text1.Text = "" Then
        MsgBox "输入不完整!"
        Exit Sub
     End If
     If Text2.Text = "" Then
        MsgBox "输入不完整!"
        Exit Sub
     End If
     If Len(Trim(Text1.Text)) <> 10 Or Len(Trim(Text2.Text)) <> 10 Then 'trim删除前后空格
        MsgBox "输入的格式有误!"
        Text1.Text = ""
        Text2.Text = ""
        Exit Sub
     End If
     If Mid(Text1.Text, 5, 1) <> "-" Or Mid(Text1.Text, 8, 1) <> "-" Then
        MsgBox "输入的格式有误!"
        Text1.Text = ""
        Text2.Text = ""
        Exit Sub
     End If
     If Mid(Text2.Text, 5, 1) <> "-" Or Mid(Text2.Text, 8, 1) <> "-" Then
        MsgBox "输入的格式有误!"
        Text1.Text = ""
        Text2.Text = ""
        Exit Sub
     End If
     Label4.AutoSize = True
     qssd = CDate(Trim(Text1.Text))
     czsd = CDate(Trim(Text2.Text))
     Y = 0
     If Text3.Text = "" Then
        MsgBox "请输入话单表!"
        Exit Sub
     End If
     On Error GoTo error1
error1:  If Err.Number = 3078 Then
            MsgBox "话单表不存在!"
            Exit Sub
         End If
     Set examdb = OpenDatabase(App.Path + "\话单库.mdb")
     Data2.DatabaseName = App.Path + "\话单库.mdb"
     Data2.RecordSource = Text3.Text
     Data2.Refresh
huadanfile: Do While Data2.Recordset.EOF = False
          zjhm = Data2.Recordset.Fields("主叫号码").Value
          pjhm = Data2.Recordset.Fields("被叫号码").Value
          qssj = Data2.Recordset.Fields("起始时间").Value
          czsj = Data2.Recordset.Fields("终止时间").Value
          firstdate = CDate(Mid(Trim(qssj), 1, 10))
          xj1 = Hour(CDate(qssj))
          fz1 = Minute(CDate(qssj))
          mm1 = Second(CDate(qssj))
          xj2 = Hour(CDate(czsj))
          fz2 = Minute(CDate(czsj))
          mm2 = Second(CDate(czsj))
        If firstdate >= qssd And firstdate <= czsd Then
                  xj = Val(xj2) - Val(xj1)
                  fz = Val(fz2) - Val(fz1)
                  mm = Val(mm2) - Val(mm1)
          Else
                  Data2.Recordset.MoveNext
                  GoTo huadanfile
          End If
         
          If mm > 6 Then
                fz = fz + 1
          End If
          shichang = (xj * 60 + fz)
 ' ***************************************************************
           '判断是固话还是公话
           Data1.DatabaseName = App.Path + "\计费系统.mdb"
          Data1.RecordSource = "固话表"
          Data1.Refresh
           findhaoma = "号码=" + Str(zjhm)
          Data1.Recordset.FindFirst findhaoma
          If Data1.Recordset.NoMatch = False Then
                 i = "固话"
                 diming = Data1.Recordset.Fields("地名").Value
          Else
                 Data1.RecordSource = "公话表"
                 Data1.Refresh
                 findhaoma = "号码=" + Str(zjhm)
                 Data1.Recordset.FindFirst findhaoma '????????????
                 If Data1.Recordset.NoMatch = False Then
                    i = "公话"
                    diming = Data1.Recordset.Fields("地名").Value
                 Else
                    MsgBox "主叫号码不在号码表里!"
                    Exit Sub
                 End If
           End If
   '***************************************************************
           Call dayliexing1
           If Left(pjhm, 2) = "00" Then
             Call guoji
             Data2.Recordset.MoveNext
             GoTo huadanfile
           End If
               If Left(pjhm, 1) = "0" Then '判断是否是长途
                  Data1.DatabaseName = App.Path + "\计费系统.mdb"
                  Data1.RecordSource = "费率表"
                  Data1.Refresh
                  findchuqiaolx = "主叫类型='" + i + "'"
                  Data1.Recordset.FindFirst findchuqiaolx
next1:     If Data1.Recordset.NoMatch = False Then
           If Data1.Recordset.Fields("通话类型").Value = "国内长途" Then
            If Data1.Recordset.Fields("日期类型").Value = dayliexing Then
             Call jieshuan
            Else
             Data1.Recordset.FindNext findchuqiaolx
             GoTo next1
            End If
             Call jieshuan
           Else
             Data1.Recordset.FindNext findchuqiaolx
             GoTo next1
           End If
         Else
            MsgBox "表参数不全,统计失败,请刷新!!"
            Label4.Caption = ""
            Exit Sub
            End If
            Call newdata(dhlx)
           If h = 1 Then
                        MsgBox "统计已经取消!"
                        Label4.Caption = ""
                        Close #1
                        Exit Sub
                   Else
                        Data2.Recordset.MoveNext
                        GoTo huadanfile
                   End If
                 
             Else
     If Val(Len(pjhm)) = 7 Or Val(Len(pjhm)) = 8 Then '判断是电话还是手机
        Data1.DatabaseName = App.Path + "\计费系统.mdb"
        Data1.RecordSource = "费率表"
        Data1.Refresh
        zhiguan1 = Left(zjhm, 3)
        zhiguan2 = Left(pjhm, 3)
        If zhiguan1 <> zhiguan2 Then
        findchuqiaolx = "主叫类型='" + i + "'"
        Data1.Recordset.FindFirst findchuqiaolx
                          
next2:   If Data1.Recordset.NoMatch = False Then
        If Data1.Recordset.Fields("通话类型").Value = "网话" Then
         feilu = Data1.Recordset.Fields("费率").Value
         feiyong = shichang * feilu
         dhlx = "网话"
        Else
          Data1.Recordset.FindNext findchuqiaolx
          GoTo next2
        End If
      Else
        MsgBox "表参数不全,统计失败,请刷新!"
        Label4.Caption = ""
        Exit Sub
      End If
        Call newdata(dhlx)
        If h = 1 Then
          MsgBox "统计已经取消!"
          Label4.Caption = ""
          Close #1
          Exit Sub
          Else
          Data2.Recordset.MoveNext
          GoTo huadanfile
        End If
Else
 Data1.RecordSource = "费率表"
 Data1.Refresh
    findchuqiaolx = "主叫类型='" + i + "'"
    Data1.Recordset.FindFirst findchuqiaolx 'And "通话类型='市话'"
next3: If Data1.Recordset.NoMatch = False Then
  If Data1.Recordset.Fields("通话类型").Value = "市话" Then
    If i = "固话" Then
      feilu = Data1.Recordset.Fields("费率").Value
      feilu1 = Data1.Recordset.Fields("首次三分钟").Value
      feiyong = feilu1 + (shichang - 3) * feilu
   Else
    feilu = Data1.Recordset.Fields("费率").Value
    feiyong = shichang * feilu
   End If
    dhlx = "市话"
  Else
     Data1.Recordset.FindNext findchuqiaolx
    GoTo next3
   End If
 Else
  MsgBox "表参数不全,统计失败,请刷新!"
      Label4.Caption = ""
      Exit Sub
 End If
  Call newdata(dhlx)
  If h = 1 Then
    MsgBox "统计已经取消!"
    Label4.Caption = ""
    Close #1
      Exit Sub
   Else
    Data2.Recordset.MoveNext
    GoTo huadanfile
  End If
  End If
   Else
    zhiguan2 = Left(Str(pjhm), 6)
 Data1.DatabaseName = App.Path + "\计费系统.mdb"
 Data1.RecordSource = "字冠表"
Data1.Refresh
zhiguan22 = "本地字冠号'" + zhiguan2 + "'"
 Data1.Recordset.FindFirst zhiguan22
diming1 = Data1.Recordset.Fields("地名").Value
  If diming = diming1 Then
    Data1.RecordSource = "费率表"
    Data1.Refresh
    findchuqiaolx = "主叫类型='" + i + "'"
    Data1.Recordset.FindFirst findchuqiaolx 'And "通话类型='市话'"
next4:   If Data1.Recordset.NoMatch = False Then
    If Data1.Recordset.Fields("通话类型").Value = "市话" Then
      If i = "固话" Then
        feilu = Data1.Recordset.Fields("费率").Value
        feilu1 = Data1.Recordset.Fields("首次三分钟").Value
        feiyong = feilu1 + (shichang - 3) * feilu
      Else
        feilu = Data1.Recordset.Fields("费率").Value
        feiyong = shichang * feilu
      End If
        dhlx = "市话"
    Else
        Data1.Recordset.FindNext findchuqiaolx
        GoTo next4
       End If
  Else
      MsgBox "表参数不全,统计失败,请刷新!"
      Label4.Caption = ""
      Exit Sub
     End If
    Call newdata(dhlx)
     If h = 1 Then
      MsgBox "统计已经取消!"
      Label4.Caption = ""
      Close #1
      Exit Sub
     Else
      Data2.Recordset.MoveNext
      GoTo huadanfile
    End If
  Else
   Data1.RecordSource = "费率表"
    Data1.Refresh
    findchuqiaolx = "主叫类型='" + i + "'"
    Data1.Recordset.FindFirst findchuqiaolx 'And "通话类型='网话'"
next5:  If Data1.Recordset.NoMatch = False Then
       If Data1.Recordset.Fields("通话类型").Value = "网话" Then
        feilu = Data1.Recordset.Fields("费率").Value
        feiyong = shichang * feilu
   dhlx = "网话"
        Data1.Recordset.FindNext findchuqiaolx
   GoTo next5
   End If
  Else
   MsgBox "表参数不全,统计失败,请刷新!"
   Label4.Caption = ""
   Exit Sub
   End If
   Call newdata(dhlx)
   If h = 1 Then
     MsgBox "统计已经取消!"
     Label4.Caption = ""
    Close #1
     Exit Sub
       Else
    Data2.Recordset.MoveNext
    GoTo huadanfile
   End If
      End If
  End If
  End If
 Loop
 MsgBox ("统计成功结束!")
 Label4.Caption = ""
  End Sub
 Private Sub Command2_Click()
   Unload Form11
 End Sub
 Private Sub Command3_Click()
  Form13.Show
 End Sub


3.3.4.2 定期计费子窗体模块

1. 模块的分析

 当计费周期时间到时,能自动对每个月的话单进行统计,并且有一段音乐提示。
 
 2.  窗体的创建
 
  在工程中新建一个窗体,将窗体保存为 定期计费.frm 。
 
 3.  模块界面的设计

     运行后模块的界面如图3-5 所示。

 

             图3-5 定期计费界面

 模块功能实现的代码

        
流程图

定期计费功能模块的流程图和即时计费功能模块的流程图类似。只是个别地方有所改变。在此也不做详细介绍。参照计费功能模块的流程图即可。

功能实现的代码
 
  Option Explicit
 Dim zjhm, pjhm, qssj, czsj, shichang, feiyong
 Dim dhlx As String '通话类型
 Dim i As String
 Dim findhaoma, dayliexing
 Dim findchuqiaolx, qssd, czsd
 Dim diming, tablename, diming1
 Dim feilu, feilu1, msg
 Dim zhiguan2, zhiguan22, zhiguan1
 Dim firstdate, xj1, xj2, xj, fz1, fz2, fz
 Dim mm1, mm2, mm
 Dim Y As Integer '用来判断是否已经建库和表
 Dim examdb As Database
 Dim examtbl As TableDef
  Public Sub jieshuan()
     feilu = Data1.Recordset.Fields("费率").Value
     feiyong = shichang * feilu
     dhlx = "国内长途"
End Sub
Public Sub dayliexing1()
     If Weekday(CDate(qssj)) = 1 Or Weekday(CDate(qssj)) = 7 Then
         dayliexing = "节假日"
         Exit Sub
     End If
     If Month(CDate(qssj)) = 5 And (Day(CDate(qssj)) >= 1 And Day(CDate(qssj) <= 7)) Then
        dayliexing = "节假日"
        Exit Sub
     End If
     If Month(CDate(qssj)) = 1 And (Day(CDate(qssj)) >= 1 And Day(CDate(qssj) <= 3)) Then
        dayliexing = "节假日"
        Exit Sub
     End If
     If Month(CDate(qssj)) = 10 And (Day(CDate(qssj)) >= 1 And Day(CDate(qssj) <= 3)) Then
        dayliexing = "节假日"
        Exit Sub
     End If
 dayliexing = "正常工作日
End Sub
Public Sub guoji()
  Data1.DatabaseName = App.Path + "\计费系统.mdb"
  Data1.RecordSource = "费率表"
  Data1.Refresh
  findchuqiaolx = "主叫类型='" + i + "'"
 Data1.Recordset.FindFirst findchuqiaolx
jiejia1: If Data1.Recordset.NoMatch = False Then
   If Data1.Recordset.Fields("通话类型").Value = "国际长途" Then
    If Data1.Recordset.Fields("日期类型").Value = dayliexing Then
    feilu = Data1.Recordset.Fields("费率").Value
    feiyong = shichang * feilu
    dhlx = "国际长途"
    Else
    Data1.Recordset.FindNext findchuqiaolx
    GoTo jiejia1
                          End If
                        Else
                           Data1.Recordset.FindNext findchuqiaolx
                           GoTo jiejia1
                        End If
                   Else
                        MsgBox "表参数不全,统计失败,请刷新!!"
                        Label1.Caption = ""
                        Exit Sub
                   End If
                   Call newdata(dhlx)
                  
    End Sub
 
Private Sub Command4_Click()
   t = Text8.Text
   dingshihour = Text10.Text
   Open App.Path + "\定时周期" For Random As #5 Len = 20
   Put #5, 1, t
   Put #5, 3, dingshihour
   Close #5
   Text8.Enabled = False
   Text10.Enabled = False
End Sub

Private Sub Command5_Click()
   Text8.Enabled = True
   Text10.Enabled = True
   Text8.SetFocus
End Sub

Private Sub Form_Load()
   Open App.Path + "\定时周期" For Random As #5 Len = 20
   Get #5, 1, t
   Get #5, 2, v
   Get #5, 3, dingshihour
   Text8.Text = t
   Text10.Text = dingshihour
   Close #5
   If Val(t) = Day(Now) And Val(dingshihour) = Hour(Now) Then
     If v <> 2 Then
       Label1.Caption = "今天是结算日期,结算中请稍候。。。"
       v = 2
       Open App.Path + "\定时周期" For Random As #5 Len = 20
       Put #5, 2, v
       Close #5
       Timer1.Enabled = strar
     End If
   End If
   Label8.Caption = Now
End Sub
Private Sub Command3_Click()
   Unload Form12
End Sub

Private Sub Timer1_Timer()
   Label8.Caption = Now
   Open App.Path + "\定时周期" For Random As #5 Len = 20
   Get #5, 1, t
   Get #5, 3, dingshihour
   Close #5
   If Val(t) = Day(Now) And Val(dingshihour) = Hour(Now) Then
            Timer1.Enabled = False
            OLE1.Action = 7
            Set examdb = OpenDatabase(App.Path + "\话单库.mdb")
            Data2.DatabaseName = App.Path + "\话单库.mdb"
            Data2.RecordSource = dingshiname1 '???
            Data2.Refresh
            On Error Resume Next
now11:      Do While Data2.Recordset.EOF = False
                 zjhm = Data2.Recordset.Fields("主叫号码").Value
                 pjhm = Data2.Recordset.Fields("被叫号码").Value
                 qssj = Data2.Recordset.Fields("起始时间").Value
                 czsj = Data2.Recordset.Fields("终止时间").Value
                 xj1 = Hour(CDate(qssj))
                 fz1 = Minute(CDate(qssj))
                 mm1 = Second(CDate(qssj))
                 xj2 = Hour(CDate(czsj))
                 fz2 = Minute(CDate(czsj))
                 mm2 = Second(CDate(czsj))
                 xj = Val(xj2) - Val(xj1)
                 fz = Val(fz2) - Val(fz1)
                 mm = Val(mm2) - Val(mm1)
                If mm > 6 Then
                   fz = fz + 1
                End If
                shichang = (xj * 60 + fz)
 ' *********************************************************
          '判断是固话还是公话
                Data1.DatabaseName = App.Path + "\计费系统.mdb"
                Data1.RecordSource = "固话表"
                Data1.Refresh
                findhaoma = "号码=" + Str(zjhm)
                Data1.Recordset.FindFirst findhaoma
                If Data1.Recordset.NoMatch = False Then
                     i = "固话"
                     diming = Data1.Recordset.Fields("地名").Value
                Else
                     Data1.RecordSource = "公话表"
                     Data1.Refresh
                     findhaoma = "号码=" + Str(zjhm)
                     Data1.Recordset.FindFirst findhaoma
                    If Data1.Recordset.NoMatch = False Then
                        i = "公话"
                        diming = Data1.Recordset.Fields("地名").Value
                    Else
                         MsgBox "主叫号码不在号码表里!"
                         Exit Sub
                    End If
                 End If
                 Call dayliexing1
                 If Left(pjhm, 2) = "00" Then
                    Call guoji
                    Data2.Recordset.MoveNext
                    GoTo now11
                 End If
   '************************************************************
         If Left(pjhm, 1) = "0" Then '判断是否是长途
           Data1.DatabaseName = App.Path + "\计费系统.mdb"
           Data1.RecordSource = "费率表"
           Data1.Refresh
           findchuqiaolx = "主叫类型='" + i + "'"
           Data1.Recordset.FindFirst findchuqiaolx 'And "通话类型='长途'"
next1:      If Data1.Recordset.NoMatch = False Then
           If Data1.Recordset.Fields("通话类型").Value = "国内长途" Then
           If Data1.Recordset.Fields("日期类型").Value = dayliexing Then
            Call jieshuan
           Else
            Data1.Recordset.FindNext findchuqiaolx
            GoTo next1
           End If
           Call jieshuan
         Else
          Data1.Recordset.FindNext findchuqiaolx
          GoTo next1
       End If
        Call newdata(dhlx)
        Data2.Recordset.MoveNext
        GoTo now11
       Else
        MsgBox "表参数不全,统计失败,请刷新!"
           Exit Sub
       End If
     Else
      If Val(Len(pjhm)) = 7 Then '判断是电话还是手机
       Data1.RecordSource = "费率表"
       Data1.Refresh
       zhiguan1 = Left(zjhm, 3)
      zhiguan2 = Left(pjhm, 3)
      If zhiguan1 <> zhiguan2 Then
      findchuqiaolx = "主叫类型='" + i + "'"
 Data1.Recordset.FindFirst findchuqiaolx 'And "通话类型='网话'"
next2  If Data1.Recordset.NoMatch = False Then
      If Data1.Recordset.Fields("通话类型").Value = "网话" Then
        feilu = Data1.Recordset.Fields("费率").Value
        feiyong = shichang * feilu
        dhlx = "网话"
      Else
        Data1.Recordset.FindNext findchuqiaolx
        GoTo next2
      End If
        Call newdata(dhlx)
        Data2.Recordset.MoveNext
       GoTo now11
    Else
       MsgBox "表参数不全,统计失败,请刷新!"
       Exit Sub
   End If
 Else
   Data1.RecordSource = "费率表"
  Data1.Refresh
  findchuqiaolx = "主叫类型='" + i + "
   Data1.Recordset.FindFirst findchuqiaolx 'And "通话类型='市话'"
next3  If Data1.Recordset.NoMatch = False Then
     If Data1.Recordset.Fields("通话类型").Value = "市话" Then
      If i = "固话" Then
        feilu = Data1.Recordset.Fields("费率").Value
        feilu1 = Data1.Recordset.Fields("首次三分钟").Value
        feiyong = feilu1 + (shichang - 3) * feilu
      Else
       feilu = Data1.Recordset.Fields("费率").Value
       feiyong = shichang * feilu
      End If
       dhlx = "市话"
    Else
       Data1.Recordset.FindNext findchuqiaolx
       GoTo next3
    End If
       Call newdata(dhlx)
       Data2.Recordset.MoveNext
       GoTo now11
  Else
       MsgBox "表参数不全,统计失败,请刷新!"
       Exit Sub
  End If
   End If
  Else
  zhiguan2 = Left(Str(pjhm), 6)
    Data1.RecordSource = "字冠表"
    Data1.Refresh
  zhiguan22 = "本地字冠号'" + zhiguan2 + "'"
  Data1.Recordset.FindFirst zhiguan22
  diming1 = Data1.Recordset.Fields("地名").Value
  If diming = diming1 Then
    Data1.RecordSource = "费率表"
    Data1.Refresh
   findchuqiaolx = "主叫类型='" + i + "'"
   Data1.Recordset.FindFirst findchuqiaolx 'And "通话类型='市话'"
next4:  If Data1.Recordset.NoMatch = False Then
        If Data1.Recordset.Fields("通话类型").Value = "市话" Then
         If i = "固话" Then
           feilu = Data1.Recordset.Fields("费率").Value
           feilu1 = Data1.Recordset.Fields("首次三分钟").Value
           feiyong = feilu1 + (shichang - 3) * feilu
         Else
           feilu = Data1.Recordset.Fields("费率").Value
           feiyong = shichang * feilu
          End If
          dhlx = "市话"
       Else
         Data1.Recordset.FindNext findchuqiaolx
         GoTo next4
         End If
          Call newdata(dhlx)
          Data2.Recordset.MoveNext
          GoTo now11
          Else
           MsgBox "表参数不全,统计失败,请刷新!"
           Exit Sub
           End If
         Else
           Data1.RecordSource = "费率表"
           Data1.Refresh
           findchuqiaolx = "主叫类型='" + i + "'"
          Data1.Recordset.FindFirst findchuqiaolx 'And "通话类型='网话'"
next5:     If Data1.Recordset.NoMatch = False Then
           If Data1.Recordset.Fields("通话类型").Value = "网话" Then
            feilu = Data1.Recordset.Fields("费率").Value
            feiyong = shichang * feilu
            dhlx = "网话"
           Else
            Data1.Recordset.FindNext findchuqiaolx
            GoTo next5
           End If
            Call newdata(dhlx)
            Data2.Recordset.MoveNext
            GoTo now11
          Else
            MsgBox "表参数不全,统计失败,请刷新!"
            Exit Sub
          End If
         End If
       End If
    End If
    Loop
    msg = MsgBox("统计结束!")
    If msg = 1 Then
     OLE1.Action = 9
    End If
    Label1.Caption = ""
  End If
End Sub
 Public Sub newdata(dhlx As String)
'*********************表的生成*************************
 Dim examfld(7) As Field
   Dim msg
  If Y = 0 Then
      Set examdb = OpenDatabase(App.Path + "\统计库.mdb")
      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)
      Set examfld(4) = .CreateField("通话时长", dbInteger, 15)
      Set examfld(5) = .CreateField("通话类型", dbText, 15)
      Set examfld(6) = .CreateField("费用", dbDouble, 15)
      .Fields.Append examfld(0)
      .Fields.Append examfld(1)
      .Fields.Append examfld(2)
      .Fields.Append examfld(3)
      .Fields.Append examfld(4)
      .Fields.Append examfld(5)
      .Fields.Append examfld(6)
  End With
  On Error Resume Next
  examdb.TableDefs.Append examtbl '添加表
  Y = 1
End If
'**********************给新添加的表赋值*******************
 Set examdb = OpenDatabase(App.Path + "\统计库.mdb")
  Data1.DatabaseName = App.Path + "\统计库.mdb"
  Data1.RecordSource = dingshiname1
  Data1.Refresh
  Data1.Recordset.AddNew
  Data1.Recordset.Fields("主叫号码").Value = zjhm
  Data1.Recordset.Fields("被叫号码").Value = pjhm
  Data1.Recordset.Fields("起始时间").Value = qssj
  Data1.Recordset.Fields("终止时间").Value = czsj
  Data1.Recordset.Fields("通话类型").Value = dhlx
  Data1.Recordset.Fields("通话时长").Value = shichang
  Data1.Recordset.Fields("费用").Value = feiyong
  Data1.Recordset.Update
End Sub


3.3.4.3 统计话单表浏览子窗体模块
  
1. 窗体的创建

 在工程中新建一个窗体,将窗体保存为 话单浏览.frm。
 
2. 模块实现的功能
  
   可以对已统计的表和表的字段进行删除,恢复和显示打印。显示打印为一个子窗体。

模块界面的设计

    运行后,界面如图3-6所示。

 
                图3-6 话单浏览子窗体界面

4. 功能实现的代码

Option Explicit
Dim curdir As String
Dim jxdb As Database
Dim biao As TableDef
Dim zhiduan As Field

Private Sub command1_click()
    Dim msg
    On Error Resume Next
    Kill (App.Path + "\备份\统计库1.mdb")
    jxdb.Close
    FileCopy App.Path + "\统计库.mdb", App.Path + "\备份\统计库1.mdb"
     Set jxdb = DBEngine.Workspaces(0).OpenDatabase(App.Path + "\统计库.mdb")
    If List1.ListIndex = -1 Then
      MsgBox "请选择要删除的表!"
      Exit Sub
    End If
    msg = MsgBox("确定要删除选定的表吗?", vbYesNo, " 删除表")
    If msg = vbYes Then
         jxdb.TableDefs.Delete List1.Text '删除选定的表
         Call DispTablename '显示表名和表的数目
    Else
        Exit Sub
    End If
End Sub
      
Private Sub Command3_Click()
  On Error Resume Next
    jxdb.Close
    On Error Resume Next
    Kill (App.Path + "\备份\统计库.mdb")
    FileCopy App.Path + "\统计库1.mdb", App.Path + "\统计库.mdb"
    Set jxdb = DBEngine.Workspaces(0).OpenDatabase(App.Path + "\统计库.mdb")
    Call DispTablename
End Sub

Private Sub Command4_Click()
     If List1.Text = "" Then
      Exit Sub
     End If
      dirtablename = List1.Text
      Form15.Show
   
End Sub

Private Sub Form_Load()
 On Error Resume Next
  Kill (App.Path + "\临时\统计库.mdb")
 
     FileCopy App.Path + "\统计库.mdb", App.Path + "\临时\统计库.mdb"
     Set jxdb = DBEngine.Workspaces(0).OpenDatabase(App.Path + "\统计库.mdb")
     Call DispTablename
End Sub
Private Sub DispTablename()
     List1.Clear
     With jxdb
          For Each biao In .TableDefs
              List1.AddItem biao.name
          Next biao
              Text1.Text = .TableDefs.Count
     End With
End Sub
'************************************************
Private Sub DispFieldName()
     List2.Clear
     Set biao = jxdb.TableDefs(List1.Text)
     With biao
        For Each zhiduan In .Fields
           List2.AddItem zhiduan.name
        Next zhiduan
           Text2.Text = .Fields.Count
     End With
End Sub


Private Sub Command2_Click()
    Dim msg
   If List2.ListIndex = -1 Then
     MsgBox "请选择要删除的字段!"
     Exit Sub
   End If
    msg = MsgBox("确定要删除选定的字段吗?", vbYesNo, "删除字段")
    If msg = vbYes Then
         jxdb.TableDefs(List1.Text).Fields.Delete List2.Text
         Call DispFieldName
    Else
        Exit Sub
    End If
    
End Sub

Private Sub List1_Click()
     Call DispFieldName
End Sub

4. 显示子窗体模块

(1)窗体的创建

 在工程中新建一个窗体,将窗体保存为 话单显示.frm。

(2)模块功能的实现

 运行后的界面如图4-7 所示。
 

 图4-7 话单显示界面

(2)功能实现的代码

   Option Explicit
   Dim f, jbyz, find1, find2, g, e
   Dim file1, file2, file3, file4, file5
   Dim examdb As Database
   Dim examtbl As TableDef
   Dim i As Integer           ' 循环计数器
   Dim j As Integer
   Dim rCount As Long         ' 记录的个数
   Dim xl As Object           ' OLE自动化对象
   Dim Sn As Recordset
   Dim examfld(7) As Field
  Public Sub newdata()
  Data2.DatabaseName = App.Path + "\临时\统计库.mdb"
  Data2.RecordSource = "临时表" + dirtablename
  Data2.Refresh
  Data2.Recordset.AddNew
  Data2.Recordset.Fields("主叫号码").Value = Data1.Recordset.Fields("主叫号码").Value
  Data2.Recordset.Fields("被叫号码").Value = Data1.Recordset.Fields("被叫号码").Value
  Data2.Recordset.Fields("起始时间").Value = Data1.Recordset.Fields("起始时间").Value
  Data2.Recordset.Fields("终止时间").Value = Data1.Recordset.Fields("终止时间").Value
  Data2.Recordset.Fields("通话类型").Value = Data1.Recordset.Fields("通话类型").Value
  Data2.Recordset.Fields("通话时长").Value = Data1.Recordset.Fields("通话时长").Value
  Data2.Recordset.Fields("费用").Value = Data1.Recordset.Fields("费用").Value
  Data2.Recordset.Update
  End Sub
'********************************
Public Sub last()
 Set examdb = OpenDatabase(App.Path + "\临时\统计库.mdb")
  Data2.DatabaseName = App.Path + "\临时\统计库.mdb"
  Data2.RecordSource = "临时表" + dirtablename
  Data2.Refresh
  Data2.Recordset.AddNew
  Data2.Recordset.Fields("主叫号码").Value = g
  Data2.Recordset.Fields("被叫号码").Value = "基本月租"
  Data2.Recordset.Fields("费用").Value = jbyz
  Data2.Recordset.Update
End Sub
Private Sub command1_click()
'data1 指向的是临时
'data2 指向的是新建
 'data3 指向的是dirtablename
 'data4 指向的是固话表公话表
 Label1.Caption = "准备导出..."
 Label1.Refresh
 Set examdb = OpenDatabase(App.Path + "\临时\统计库.mdb")
     Data1.DatabaseName = App.Path + "\临时\统计库.mdb"
     Data1.RecordSource = dirtablename
     Data1.Refresh
     Do While Data1.Recordset.EOF = False
      Data1.Recordset.MoveFirst
       g = Data1.Recordset.Fields("主叫号码").Value
       Data4.DatabaseName = App.Path + "\计费系统.mdb"
       Data4.RecordSource = "固话表"
       Data4.Refresh
       find1 = "号码=" + Str(g)
       Data4.Recordset.FindFirst find1
       If Data4.Recordset.NoMatch = False Then
         jbyz = Data4.Recordset.Fields("基本月租").Value
       Else
         Data4.RecordSource = "公话表"
         Data4.Refresh
         Data4.Recordset.FindFirst find1
         If Data4.Recordset.NoMatch = False Then
            jbyz = Data4.Recordset.Fields("基本月租").Value
         Else
           MsgBox "主叫号码" + Str(Data3.Recordset.Fields("主叫号码").Value) + "在系统表里找不到!"
           Exit Sub
         End If
       End If
        find2 = "主叫号码='" + Trim(Str(g)) + "'"
        Data1.Recordset.FindFirst find2
q:          If Data1.Recordset.NoMatch = False Then
              Call newdata
              Data1.Recordset.Delete
            Else
              GoTo r
            End If
       Data1.Recordset.FindNext find2
       GoTo q
r:       Call last
      If Data1.Recordset.RecordCount = 0 Then
       Exit Do
       End If
     Loop
'**********************************
      Screen.MousePointer = 11
        Label1.Caption = "打开数据库..."
        Label1.Refresh
        Set examdb = Workspaces(0).OpenDatabase(App.Path + "\临时\统计库.mdb")
        Label1.Caption = "创建Excel对象..."
        Label1.Refresh
        Set xl = CreateObject("Excel.Sheet.8")
        Label1.Caption = "创建快照型记录集..."
        Label1.Refresh
        Set Sn = examdb.OpenRecordset("临时表" + dirtablename, dbOpenSnapshot)
        If Sn.RecordCount > 0 Then
            Label1.Caption = "将字段名添加到电子表格中"
            Label1.Refresh
            For i = 0 To Sn.Fields.Count - 1
                xl.Worksheets(1).cells(1, i + 1).Value = Sn(i).name
            Next
            Sn.MoveLast
            Sn.MoveFirst
            rCount = Sn.RecordCount
            ' 在记录中循环
            i = 0
            Do While Not Sn.EOF
                Label1.Caption = "Record:" & Str(i + 1) & " of" & _
                Str(rCount)
                Label1.Refresh
                For j = 0 To Sn.Fields.Count - 1
                   ' 加每个字段的值加到工作表中
                   If Sn(j).Type < 11 Then
                      xl.Worksheets(1).cells(i + 2, j + 1).Value = Sn(j)
                   Else
                      ' 处理Memo和LongBinary 类型的字段
                     xl.Worksheets(1).cells(i + 2, j + 1).Value = "Memo or Binary Data"
                   End If
                Next j
                Sn.MoveNext
                i = i + 1
            Loop
            ' 保存工作表
            Label1.Caption = "保存文件..."
            file1 = Month(Now)
            file2 = Day(Now)
            file3 = Hour(Now)
            file4 = Minute(Now)
            file5 = Second(Now)
            Label1.Refresh
             xl.SaveAs App.Path + "\打印\" + Str(file1) + Str(file2) + Str(file3) + Str(file4) + Str(file5) + ".xls" '"c:\Customers.XLS"
            '从内存中删除Excel对象
            Label1.Caption = "退出Excel"
            Label1.Refresh
            xl.Application.Quit
         Else
            ' 没有记录
         End If
         ' 清除
         Label1.Caption = "清除对象"
         Label1.Refresh
         Set xl = Nothing
         Set Sn = Nothing
         Set examdb = Nothing
         Screen.MousePointer = 0  ' 恢复鼠标指针
         Label1.Caption = "已成功导出..."
         Label1.Refresh
        If e = 0 Then
          e = 1
          Command1 = True
        Else
          Command1 = False
        End If
End Sub

Private Sub Command2_Click()
   Unload Form15
End Sub

Private Sub Form_Load()
 f = 0
 e = 0
 Set examdb = OpenDatabase(App.Path + "\临时\统计库.mdb")
 Set examtbl = examdb.CreateTableDef("临时表" + dirtablename)
 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)
      Set examfld(4) = .CreateField("通话时长", dbInteger, 15)
      Set examfld(5) = .CreateField("通话类型", dbText, 15)
      Set examfld(6) = .CreateField("费用", dbDouble, 15)
      .Fields.Append examfld(0)
      .Fields.Append examfld(1)
      .Fields.Append examfld(2)
      .Fields.Append examfld(3)
      .Fields.Append examfld(4)
      .Fields.Append examfld(5)
      .Fields.Append examfld(6)
  End With
  examdb.TableDefs.Append examtbl '添加表
    Label1.AutoSize = True
    Label1.Caption = ""
    Label1.Refresh
End Sub

Private Sub Form_Activate()
    Data1.DatabaseName = App.Path + "\统计库.mdb"
         Data1.RecordSource = dirtablename
         Data1.Refresh
 End Sub

3.5 通信串中的建立

3.5.1实现的功能

 实现计算机间的数据传输(采用第三方控伯PDQComm来实现)。

3.5.2用PDQComm控件实现串口通信的程序设计

通讯口初始代码如下

  Public Sub SettingLoad()
    On error resume next
 PDQcomm.InOroutput=1
 PDQcomm.CommPort=1
 PDQcomm.Settings=”38400,N,8,1”
 PDQcomm.InputLen=0
  PDQcomm.Sthreshold=1
  PDQcomm.Rthreshold=1
PDQcomm.PortOPen=True
 End usb

(2) 有关通讯代码
           
 Private Sub PQDCommon_Oncomm()
  If  InOroutput=1 then
    ………………..\\应用程序
 end if
 
3.6  发行软件的制作

 发行软件制作的步骤:
     
利用Visual Basic 的编译功能把当前工程编译在可执行文件。
启动 Visual Basic 的“Package&Deployment” 向导。
选择“包”类型为SETUP 程序。
选中编译生在的.EXE文件和所有VB自带的DLL文件。
把工程中用到的第三方DDL或ActiveX控件加载到程序包中。


以上为本篇毕业论文范文终端计费系统的介绍部分。
本论文在计算机论文栏目,由论文网(www.zjwd.net)整理,更多论文,请点论文范文查找

毕业论文降重 相关论文

收费专业论文范文
收费专业论文
汉语言文学论文
物理学论文
自动化专业论文
测控技术专业论文
历史学专业论文
机械模具专业论文
金融专业论文
电子通信专业论文
材料科学专业论文
英语专业论文
会计专业论文
行政管理专业论文
财务管理专业论文
电子商务国贸专业
法律专业论文
教育技术学专业论文
物流专业论文
人力资源专业论文
生物工程专业论文
市场营销专业论文
土木工程专业论文
化学工程专业论文
文化产业管理论文
工商管理专业论文
护理专业论文
数学教育专业论文
数学与应用数学专业
心理学专业论文
信息管理专业论文
工程管理专业论文
工业工程专业论文
制药工程专业论文
电子机电信息论文
现代教育技术专业
新闻专业论文
艺术设计专业论文
采矿专业论文
环境工程专业论文
西班牙语专业论文
热能与动力设计论文
工程力学专业论文
酒店管理专业论文
安全管理专业论文
交通工程专业论文
体育教育专业论文
教育管理专业论文
日语专业论文
德语专业论文
理工科专业论文
轻化工程专业论文
社会工作专业论文
乡镇企业管理
给水排水专业
服装设计专业论文
电视制片管理专业
旅游管理专业论文
物业管理专业论文
信息管理专业论文
包装工程专业论文
印刷工程专业论文
动画专业论文
环境艺术专业论文
信息计算科学专业
物流专业论文范文
人力资源论文范文
营销专业论文范文
工商管理论文范文
汉语言文学论文范文
法律专业论文范文
教育管理论文范文
小学教育论文范文
学前教育论文范文
财务会计论文范文

电子商务论文范文

上一篇:中小学通用成绩管理系统 下一篇:信息管理在公司管理中的作用

最新论文

精品推荐

毕业论文排版

热门论文


本站简介 | 联系方式 | 论文改重 | 免费获取 | 论文交换

本站部分论文来自网络,如发现侵犯了您的权益,请联系指出,本站及时确认删除 E-mail:229120615@qq.com

毕业论文范文-论文范文-论文同学网(www.zjwd.net)提供计算机论文毕业论文,毕业论文范文,毕业设计,论文范文,毕业设计格式范文,论文格式范文

Copyright@ 2010-2024 zjwd.net 毕业论文范文-论文范文-论文同学网 版权所有