使用VB编写简单的计时计费程序

Visual Basic(以下简称“VB”)是一门已经销声匿迹的古老的编程语言,而且早已退出了程序猿的语言鄙视链。但正由于许多高校仍然开设着VB相关的课程/考试,某些政府/企业仍然在使用着由VB开发的的OA系统,以及VBA在Excel宏处理/批量处理中仍然发挥着至关重要的作用,似的VB这门古老而笨拙的语言仍然活跃在少数人的视野里。

第一次正式接触VB,是因为大一时随便报名了计算机二级C语言考试。由于当时对C语言并没有什么好感,也没有专心学习,所以才导致了在学校计算机与信息工程学院网站上,看到自己38分的成绩后,毅然决然的投向VB的怀抱。(因为简单……)

当时恰逢我在某心理咨询中心实习,每天的主要工作是对心理咨询的来访者进行计时和收费。在这里铺垫一下背景(开发需求),我的主要工作是:记下来访者进入咨询室开始咨询的时间,记下来访者结束咨询的时间,对咨询总时间按照不同咨询师的咨询费用单价进行计费。当时人工计算存在以下问题:

  1. 计算速度慢。需要对结束时间与开始时间求差,并对小时部分与分钟部分分别计算计费。
  2. 遇到不能除尽的分钟数时,计算容易有误差。

于是我决定现学现卖,用VB编写一个简单的计时计费程序,代替我进行计算。

开发背景交代完毕,下面是开发过程。


1.要满足的需求:

  • 能根据输入的开始时间与结束时间计算出时长
  • 支持选择不同咨询费用
  • 支持两间咨询室同时计时
  • 支持用户修改咨询费用
  • 支持对时间进行额外调整

2.开发环境:

  • Microsoft Visual Basic 6.0

3.界面原型图:

vb-programme-rp

(已对关键信息进行隐藏处理)

4.开发过程分享

  • 时间计算

在计算咨询时间时,考虑了两种情况。第一种,若结束时的分钟数>开始的分钟数,则正常相减;第二种,若结束时的分钟数<开始的分钟数,则反向取值计算。部分代码如下:

‘判断-如果结束分钟数>开始分钟数,则直接相减。
If Val(other_finish_minute) >= Val(other_start_minute) Then
other_sum_hour = Val(other_finish_hour.Text) – Val(other_start_hour.Text)
other_sum_minute = Val(other_finish_minute.Text) – Val(other_start_minute.Text)
Else
‘否则求整后计算。
other_sum_hour = Val(other_finish_hour.Text) – Val(other_start_hour.Text) – 1
other_sum_minute = Val(other_finish_minute.Text) + (60 – Val(other_start_minute.Text))
End If

  • 咨询费用

考虑到以后用户可以自己修改咨询单价,故采用程序每次启动时,自动读取外部”.ini”文件的方式导入咨询费用单价。涉及到的代码如下:

‘声明读取ini文件的函数

Private Declare Function GetPrivateProfileString Lib “Kernel32” Alias “GetPrivateProfileStringA” (ByVal lpApplicationName As String, lpKeyName As Any, ByVal lpDefault As String, ByVal lpRetunedString As String, ByVal nSize As Long, ByVal lpFileName As String) As Long

Private Declare Function SaveINI Lib “Kernel32” Alias “WritePrivateProfileStringA” (ByVal lpApplicationName As String, ByVal lpKeyName As Any, ByVal lpString As Any, ByVal lplFileName As String) As Long
‘定义读取价格Ini文件函数GetINI
Function GetINI(AppName As String, KeyName As String, filename As String) As String
Dim RetStr As String
RetStr = String(10000, Chr(0))
GetINI = Left(RetStr, GetPrivateProfileString(AppName, ByVal KeyName, “”, RetStr, Len(RetStr), filename))
End Function

’读取两个咨询室的价格

Private Sub Form_Load()
Dim n As Integer
Dim i As String
Dim a(100) As String
‘读取主任室价格
For n = 1 To Val(GetINI(“zhurenshi”, “no”, App.Path & “\price.ini”))
i = “price” & n
a(n) = GetINI(“zhurenshi”, i, App.Path & “\price.ini”)
zr_price_list.AddItem a(n)
Next n
‘读取咨询室价格
For n = 1 To Val(GetINI(“zixunshi”, “no”, App.Path & “\price.ini”))
i = “price” & n
a(n) = GetINI(“zixunshi”, i, App.Path & “\price.ini”)
other_price_list.AddItem a(n)
Next n
End Sub

外部.ini文件结构:

[zhurenshi]
no=7
price1=600
price2=800
price3=1000
price4=1200
price5=1500
price6=1800
price7=2000
[zixunshi]
no=7
price1=200
price2=300
price3=400
price4=500
price5=600
price6=700
price7=800

至此,时间计算,读取费用功能已实现,下面是费用计算过程。

  • 费用计算

算法:小时部分直接乘单价,分钟部分除以60后再乘以单价后取整,最后二者相加。涉及到的代码如下:

‘声明计算费用函数,h=总计小时数,n=总计分钟数,p=咨询费用单价
Public Function Calculate(ByVal h As Integer, ByVal n As Integer, ByVal p As Integer)
Calculate = h * p + Int(n / 60 * p)
End Function

‘调用函数计算费用
other_total_price = Calculate(Val(other_sum_hour), (Val(other_sum_minute) + Val(other_modify_minute)), Val(other_price_list.Text))

以上,主要功能已经全部实现。放一张实际使用效果图:(请自动忽视丑到爆的界面)

vb-programme-demo

如果哪位同学有使用需求,请在下方留言,我会把代码分享给你。

 

发表评论

电子邮件地址不会被公开。 必填项已用*标注