这次又是隔了好久啊,欢迎各位还愿意没事进来看看,不稳定更新的大型情感类节目——吐槽班
古人有云:“每逢佳节倍思亲!”而最近也是迎来了一个普天同庆的节日。
每年的11月11日是中国传统佳节——光棍节,相传古人在光棍节当天通常以打一天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就是刚才那个函数返回的值
搞定了这个,之后的就是读数据写数据的问题了,比较简单我就懒得写了。。。
最后呢,天冷了,有对象的搂对象,没对象的咱加衣裳啊~
以上