【机房收费系统】——结账

谁借莪1个温暖的怀抱¢ 2022-08-04 10:59 374阅读 0赞
  1. 结账,结的都是哪些账,给谁结账,结账需要涉及到哪些表?这些都是开始设计代码之前首先要想的。
  2. 看到这个界面,你会怎么想?你也许会想,这是给谁结账,怎么查的是操作员啊?不该给一般用户结账吗?一个操作员每天给一般用户进行注册,充值,退卡等,这些工作是由操作员完成的,管理员要做的就是将操作员的工作进行汇总,然后结账,所以我认为是给操作员结账,结的当然是每天没结的账了。
  3. ![Center][]

首先我们来看需要哪些表来查询相关信息。

user_info表:查询相关操作员,在这里注意,管理员也可以是操作员,优化的时候要想到这点,在以下的代码中我没有体现,大家自己想想,很简单。

student_info表:查询购卡数及购卡信息

recharge_info表:查询充值记录,充值金额

cancelcard_info表:查询退卡记录,退卡数,退卡金额

checkday_info表:将以上查到的信息更新到日结账表

checkweek_info表:将以上查到的信息更新到周结账表

明白了这些,我们就来看看具体怎么实现。

一、首先,查询操作员及他的真实姓名,Tab表里显示的都是该操作员进行过的工作,要一致。

  1. 先将已经添加的操作员用户名加载到combouserid框中,
  2. Private Sub Form_Load()
  3. '从user中查询操作员用户名
  4. txtSQL = "select * from user_info where level='操作员'"
  5. Set umrc = ExecuteSQL(txtSQL, MsgText)
  6. While (umrc.EOF = False)
  7. comboUserId.AddItem umrc.Fields(0) '加载用户名
  8. umrc.MoveNext '移动到下一条记录
  9. Wend
  10. 'user中查询操作员真实名
  11. txtSQL = "select * from user_info where level='操作员'"
  12. Set mrcc = ExecuteSQL(txtSQL, MsgText)
  13. While (mrcc.EOF = False)
  14. comboUserName.AddItem mrcc.Fields(3) '加载真名
  15. mrcc.MoveNext '移动到下一条记录
  16. Wend
  17. End Sub

然后,单击用户名,即出现相应的真名。

  1. Private Sub comboUserId_Click()
  2. '单击combouserid,查询用户名,真实名
  3. 'user表中查
  4. txtSQL = "select username from user_info where userid='" & Trim(comboUserId.Text) & "'"
  5. Set mrcc = ExecuteSQL(txtSQL, MsgText)
  6. '赋值,真名显示在combousername
  7. comboUserName.Text = mrcc.Fields(0)
  8. '关闭数据集对象
  9. mrcc.Close
  10. End Sub

二、在选中要结账的操作员后查询出相应的信息,这里以充值为例:

  1. '查询充值表语句
  2. txtSQL = "select * from recharge_info where userid= '" & Trim(comboUserId.Text) & "'and status='未结账'and date='" & Format(Date, "yyyy-mm-dd") & "'"
  3. '执行查询语句
  4. Set remrc = ExecuteSQL(txtSQL, MsgText)
  5. '将查到的信息显示到mycharge(1)控件中
  6. '如果没有记录,则显示名称就可以
  7. If (remrc.EOF Or remrc.BOF) Then
  8. With myCharge(1)
  9. .Rows = 1 '第一行
  10. .CellAlignment = 4
  11. .TextMatrix(0, 0) = "学号"
  12. .TextMatrix(0, 1) = "卡号"
  13. .TextMatrix(0, 2) = "充值金额"
  14. .TextMatrix(0, 3) = "日期"
  15. .TextMatrix(0, 4) = "时间"
  16. End With
  17. Exit Sub
  18. Else
  19. '否则显示全部查询到的信息
  20. With myCharge(1)
  21. .Rows = 1
  22. .CellAlignment = 4
  23. .TextMatrix(0, 0) = "学号"
  24. .TextMatrix(0, 1) = "卡号"
  25. .TextMatrix(0, 2) = "充值金额"
  26. .TextMatrix(0, 3) = "日期"
  27. .TextMatrix(0, 4) = "时间"
  28. Do While Not remrc.EOF '若有记录,加进去
  29. .Rows = .Rows + 1 '防止空行的出现
  30. .CellAlignment = 4
  31. .TextMatrix(.Rows - 1, 0) = Trim(remrc.Fields(1))
  32. .TextMatrix(.Rows - 1, 1) = Trim(remrc.Fields(2))
  33. .TextMatrix(.Rows - 1, 2) = Trim(remrc.Fields(3))
  34. .TextMatrix(.Rows - 1, 3) = Trim(remrc.Fields(4))
  35. .TextMatrix(.Rows - 1, 4) = Trim(remrc.Fields(5))
  36. .ColWidth(3) = 1600
  37. remrc.MoveNext '移动到下一条记录
  38. Loop
  39. remrc.Close '关闭数据集对象
  40. End With
  41. End If

其他几个,购卡、退卡、临时用户与充值雷同,在这里就不再多写了。

三、汇总,结账

  1. 汇总,汇总,无非就是把查到的所有记录加和,显示在文本框中,主要是计算,结账的时候我是结的当天的账,一天一结账,这样就不会出现结账重复的情况。
  2. '汇总,结账
  3. Dim N As Integer '定义卡数
  4. Dim TmpRate As Single '定义金额
  5. Dim cancelCash As Single '定义退卡金额
  6. '查学生表中的临时用户,计算临时用户收费
  7. txtSQL = "select * from student_info where userid='" & Trim(comboUserId.Text) & "'and type='临时用户'and date='" & Format(Date, "yyyy-mm-dd") & "'"
  8. Set mrc = ExecuteSQL(txtSQL, MsgText)
  9. TmpRate = 0
  10. '计算临时用户收费
  11. While (mrc.EOF = False)
  12. TmpRate = TmpRate + mrc.Fields(7)
  13. mrc.Fields(11) = Trim("结账") '更新数据库
  14. mrc.MoveNext '移动到下一条记录
  15. Wend
  16. txtRegister = TmpRate '将临时收费赋值给txtregister
  17. mrc.Close '关闭数据库对象
  18. '查用户名,获取总卡数
  19. txtSQL = "select * from student_info where userid='" & Trim(comboUserId.Text) & "'and date='" & Format(Date, "yyyy-mm-dd") & "'"
  20. Set mrc = ExecuteSQL(txtSQL, MsgText)
  21. N = 0
  22. TmpRate = 0
  23. '循环计算总卡数
  24. While (mrc.EOF = False)
  25. N = N + 1
  26. mrc.Fields(11) = Trim("结账") '更新数据库结账
  27. mrc.MoveNext '移动到下一条记录
  28. Wend
  29. txtnum = N '购卡数
  30. mrc.Close '关闭数据集对象
  31. '查退卡表,获取退卡数和退卡金额
  32. txtSQL = "select * from cancelcard_info where userid='" & Trim(comboUserId.Text) & "'and date='" & Format(Date, "yyyy-mm-dd") & "'"
  33. Set mrccan = ExecuteSQL(txtSQL, MsgText)
  34. N = 0
  35. cancelCash = 0
  36. '计算退卡金额
  37. While (mrccan.EOF = False)
  38. N = N + 1
  39. cancelCash = cancelCash + mrccan.Fields(2)
  40. mrccan.Fields(6) = Trim("结账") '更新数据库
  41. mrccan.MoveNext
  42. Wend
  43. txtbackcard = N
  44. txtbackmoney = cancelCash '将退卡金额赋值给txtbackmoney
  45. mrccan.Close '关闭数据集对象
  46. '查充值表,获取充值金额
  47. txtSQL = "select * from recharge_info where userid='" & Trim(comboUserId.Text) & "'and date='" & Format(Date, "yyyy-mm-dd") & "'"
  48. Set remrc = ExecuteSQL(txtSQL, MsgText)
  49. TmpRate = 0
  50. '计算充值金额
  51. While (remrc.EOF = False)
  52. TmpRate = TmpRate + remrc.Fields(3)
  53. remrc.Fields(7) = Trim("结账") '更新数据库
  54. remrc.MoveNext '移动到下一条记录
  55. Wend
  56. txtrecharge = TmpRate '将充值金额赋值给txtrecharge
  57. '计算购卡数
  58. txtBuycard.Text = Val(txtnum) + Val(txtbackcard)
  59. '计算应收金额
  60. txtcash.Text = Val(txtrecharge) + Val(txtRegister) - Val(txtbackmoney)
  61. '关闭数据集对象
  62. remrc.Close
  63. 最后把结账信息更新到日结账表和周结账表中。
  64. '填写日结账表的内容
  65. '本期余额
  66. txtSQL = "select * from student_info where userid='" & Trim(comboUserId.Text) & "'and date='" & Format(Date, "yyyy-mm-dd") & "'and type='固定用户'"
  67. ' txtSQL = "select * from student_info where datediff(dd,offtime,getdate())=1"
  68. Set mrc = ExecuteSQL(txtSQL, MsgText)
  69. Do While Not mrc.EOF
  70. allcash = allcash + mrc.Fields(7) '本期余额
  71. mrc.MoveNext
  72. Loop
  73. '当日消费余额
  74. txtSQL = "select * from line_info where offdate='" & Format(Date, "yyyy-mm-dd") & "'"
  75. Set lmrc = ExecuteSQL(txtSQL, MsgText)
  76. Do While Not lmrc.EOF
  77. consumecash = consumecash + lmrc.Fields(11)
  78. lmrc.MoveNext
  79. Loop
  80. '当日充值金额
  81. txtSQL = "select * from recharge_info where userid='" & Trim(comboUserId.Text) & "'and date='" & Format(Date, "yyyy-mm-dd") & "'"
  82. Set remrc = ExecuteSQL(txtSQL, MsgText)
  83. Do While remrc.EOF = False
  84. Rechargemoney = Rechargemoney + remrc.Fields(3)
  85. remrc.MoveNext
  86. Loop
  87. '当日退还金额
  88. txtSQL = "select * from cancelcard_info where userid='" & Trim(comboUserId.Text) & "'and date='" & Format(Date, "yyyy-mm-dd") & "'"
  89. Set mrccan = ExecuteSQL(txtSQL, MsgText)
  90. Do While mrccan.EOF = False
  91. cancelCash = cancelCash + mrccan.Fields(2)
  92. mrccan.MoveNext
  93. Loop
  94. remaincash = allcash - Rechargemoney + consumecash + cancelCash
  95. '关闭数据集对象
  96. mrc.Close
  97. lmrc.Close
  98. remrc.Close
  99. mrccan.Close
  100. '查询日结账表
  101. txtSQL = "select * from checkday_info "
  102. Set dmrc = ExecuteSQL(txtSQL, MsgText)
  103. '更新日结账表内容
  104. With dmrc
  105. .AddNew
  106. .Fields(0) = remaincash
  107. .Fields(1) = Rechargemoney
  108. .Fields(2) = consumecash
  109. .Fields(3) = cancelCash
  110. .Fields(4) = allcash
  111. .Fields(5) = Format(Date, "yyyy-mm-dd")
  112. .Update
  113. MsgBox "结账成功!" '提示结账成功
  114. End With
  115. '更新周结账单
  116. txtSQL = "select * from checkweek_info"
  117. Set wmrc = ExecuteSQL(txtSQL, MsgText)
  118. '更新到周结表中
  119. With wmrc
  120. .AddNew
  121. .Fields(0) = dmrc.Fields(0)
  122. .Fields(1) = dmrc.Fields(1)
  123. .Fields(2) = dmrc.Fields(2)
  124. .Fields(3) = dmrc.Fields(3)
  125. .Fields(4) = dmrc.Fields(4)
  126. .Fields(5) = dmrc.Fields(5)
  127. .Update '更新数据集对象
  128. wmrc.MoveNext '移动到下一条记录
  129. End With
  130. wmrc.Close '关闭数据集对象
  131. 这就是整个结账的过程。
  132. 结账这部分花了很长时间弄好的,但是我相信时间是检验真理的标准,也是磨练我们意志的最硬的基石。奉劝大家一句,刚看到结账不要急着做,要先搞清思路,搞清算账的过程,根据自己想的试着去做,相信只要思路正确很快就可以做出来的,这也是我做结账的感受,如果以上有不合理的,欢迎大家来指正!

发表评论

表情:
评论列表 (有 0 条评论,374人围观)

还没有评论,来说两句吧...

相关阅读

    相关 机房收费结账

    前言       感觉机房中最难的一部分就是结账这一部分了,越敲越乱,敲的曲曲折折的,真正弄懂结账这一块是第一次验收之后。结账是整个机房收费系统中除了上下机最核心的地方了

    相关 机房收费系统—心得

            从开学到现在,机房经历了两个月的时间,其实真正踏下心来做的时间超不过三个星期。那些没有进展的时间也不是说完全浪费掉了。应该说理思路,了解系统,系统流程逐渐清晰的

    相关 机房收费系统——结账

        机房收费系统的逻辑性很强。师傅也说了,第一次做机房,首要的是理清思路,明白它的逻辑。     做到结账这里,跟大家分享一下我对结账的一点理解: ![SouthEas

    相关 机房收费系统结账

    事实上,我觉得机房收费系统中结账的部分是耗我精力最多的。首先我就不明白结账是干嘛的,所以一上来就晕乎乎。后来看了一篇博客说结账方便老板管理的才明白了为什么是“操作员”。这里面要

    相关 机房收费系统结账

           机房收费系统中一个重要的窗体之一就是结账窗体,因为涉及到数据库中的好多表所以刚开始会觉得很难,其实理清思路后按照自己的思路写完后便觉得没有想象中的那么难!好先来看

    相关 机房收费系统(一)

    1.在MDI窗体上不能使用控件,需要用一个容器来放控件,比如使用picturebox控件来当做容器,这时真能体会到巨人的力量,这时我查到了另外一种方法。用一个窗体做容器,把这些

    相关 机房-结账

    开篇:     结账这块感觉也是一个难点,但其实正是这种不好弄的窗体我们才能学到很多,把这块弄完回头看的时候,发现还不是太难,毕竟人总是向前发展的哈!   逻辑过程