vb吐槽班08 是时候展现一波文采了

时间:2021-10-25 18:14:39

    这次又是隔了好久啊,欢迎各位还愿意没事进来看看,不稳定更新的大型情感类节目——吐槽班

 

    古人有云:“每逢佳节倍思亲!”而最近也是迎来了一个普天同庆的节日。

    每年的1111日是中国传统佳节——光棍节,相传古人在光棍节当天通常以打一天DotA的方式来度过。一直以来我都是严格遵守着我们的传统习俗,虽然今年情况是没法和小伙伴们战个痛快了,但是我的灵魂依旧存活在网吧中,我依旧会影响我的小伙伴们达成网吧五连坐,从来没赢过的完美战绩。让我们高举FFF团的火把来迎接这一盛大的节日吧!

 

    这么重大的节日怎能少的了我大吐槽班呢,那么这一期也就顺便开一期光棍节特别节目。

    为什么说特别节目呢?当然是我说特别就特别啦~(_)

    史料记载曾经李白为光棍节赋诗一首:

 

                              光阴残情惹花容,

                              棍鮕不堪催烛风。

                              节贞何是欢权贵,

                              我自逍遥尘世中。

                              快意把酒乱拨弦,

                              乐尽曲终又三盅。——李白《逍遥记》

 

    既然诗仙都这么给光棍节面子了,我这个“诗体”。。。咳咳,作诗的个体,岂能甘于人后。必须要拿出点诚意是吧:

 

                              光斜影残无花前

                              棍末落英有执念

                              节缘末是空一场

                              我自会有命三千

                              快活林中与对饮

                              乐得知己把酒言——霄哥《刀塔传》

 

    见笑见笑。。。本来还想加两句的,后来发现在“光棍节我快乐”后面加俩字有点困难啊,有好主意小伙伴们可以回复一下,我可以试着再往里面加。

    

    好了该进入正题了。


    那么时隔了这么久,机房这个项目终于是有了一点点进展。虽然每次发周报的时候都是告诉师傅:“正在思考上下机。”但其实上一直都想避开这个东西,我数学不太好,能避开算法性质的代码我都是尽量避开的,能用其他方式去解决,我都会用其他的方式去解决。

    好吧,这次是终于躲不掉了。

    一直都觉得发到手里的那个系统好像一个玩具一样,真正的应用起来好像和我熟知的网吧的万象网管不一样,所以我一直都搞不懂原作者的思路,索性一直就这么自己随意地做了下来。看了以前师哥师姐的博客,还有问了一些完成的人的做法,貌似好多的人都是在下机的时候,计算消费的金额,然后写入数据库。我想实现动态显示消费时间和消费金额这样的功能,但是一直都没找到相关的博客,虽然对我来说这是个难题,但我还是希望能自己解决,既然没找到资料说明这么做的人比较少,既然做得人比较少,那么只要我能做出来就肯定是对的!

    

    妥妥的搞起~


    首先,我先在网吧泡了三天。。。咳咳~这不是重点。。。重点是搞清楚了网吧的收费机制。

    上机之后,显示的消费金额是0,但是我想这可能是网吧的数据交换频繁造成的延迟,也可能是网吧设定的有一个收费延迟。之后假设网吧一小时收费2元,那么在几分钟之后,就会直接扣除1元,可以上机30分钟,这个就是最少消费金额。然后就是,超过了最少消费的时间段,先0.5元,然后可以继续上机15分钟。之后就是没过15分钟扣0.5元。

    

    ok,搞清楚了思路,那么代码就不是很难的事情了。

    第一步,我先做了一个专门计算时间差的函数

Public Function CostTime(StartTime As String) As String
    
    Dim NowTime As Date     '用来记录现在的时间
    
    
    NowTime = Format(Now, "hh:mm:ss")
    StartTime = CDate(Format(StartTime, "yyyy-mm-dd hh:mm:ss"))
    '将两个时间转换成同一种格式
    CostTime = DateDiff("s", StartTime, NowTime)
    '用datediff计算两个时间差
    
End Function

    好了,有了这个时间差,其他的就好办了。首先收费的基础数据是可以改的,那么这些数据就不能出现数值,只能作为参数写进函数中

Public Function Charges(CostTime As String, Least As Integer, UnitTime As Integer, Rate As Integer) As Double
'--------------------------------------------------------------------
'功能:
'       计算现在的消费金额
'参数:
'       Costtime........................................经过的时间
'       Least   ........................................最少消费金额
'       UnitTime........................................单位时间
'       Rate    ........................................每小时消费金额
'--------------------------------------------------------------------
    
    Static T As Integer                                         '用来计算经过超过最短时间之后,经过了多少个单位时间
    Dim tmpTime As String                                       '用来计算超过最少时间,已经计算的单位时间之后,经过的时间
    Static tmpCharges As Double                                 '用来记录现在消费情况
    
    If Val(CostTime) < Val(Least / Rate * 3600) Then            '小于最小消费时间的情况下,收费按照最低消费
        tmpCharges = Least
    ElseIf Val(CostTime) = Val(Least / Rate * 3600) Then        '恰好为最低消费时间时,收费增加一个单位时间的消费
        tmpCharges = tmpCharges + Val(UnitTime / 60 * Rate)
    Else                                                        '超过最低消费时间后,没增加一个单位时间的上机时间,就多收一个单位时间的钱
        tmpTime = Val(CostTime) - Val(Least / Rate * 3600) - Val(UnitTime * 60 * T)
        '总时间-最低消费时间-单位时间*单位时间的个数
        If tmpTime > Val(UnitTime * 60) Then                    '每经过一个单位时间,钱数增加,单位时间的个数增加
            tmpCharges = tmpCharges + Val(UnitTime / 60 * Rate)
            T = T + 1
        End If
    End If
    
    Charges = tmpCharges                                        '返回一个总金额
End Function

    好了,这样就能动态的显示消费金额了。啊?怎么动态?放进Timer不会啊!

    最后,为什么我要单独计算消费的时间呢?刚才说过为了可以动态的显示消费时间。

    那个函数返回的数值是两个时间差了多少秒,所以我还需要把它转换为我们熟悉的hh:mm:ss。只要一句话就可以了。


txtCostTime.Text = Int(Cost / 3600) & ":" & Int((Cost - Int(Cost / 3600) * 3600) / 60) & ":" & Cost - Int(Cost / 60) * 60
'cost就是刚才那个函数返回的值

               搞定了这个,之后的就是读数据写数据的问题了,比较简单我就懒得写了。。。

    最后呢,天冷了,有对象的搂对象,没对象的咱加衣裳啊~

以上