声明:以下内容只对将卡表和退卡表放在同一张表的同学适用!

最近大家都已经开始做VB.NET机房收费系统重构版,在这里跟大家聊聊我在机房收费系统中发现的漏洞。

在机房收费系统中有这样一个窗体--结账。个人认为结账的功能是:领导对操作员注册退卡进行结账,简单的说就是领导来收钱,如果你是一个操作员,每天充值退卡,你要知道你这段时间都赚了多少钱。

今天要说的重点就是卡表的结账!在结账中,有一个购卡,有一个退卡。也就是说,对于同一张卡,它注册后需要结账一次,退卡后也需要结账一次。

让我们来看看我数据库的卡表设计:

这里我们先不要纠结卡号是否为主键,每个字段的数据类型对不对。今天主要讲的是图中红色框框中的东西!如果你的注册和退卡在一张表中,如果你的卡表设计没有这四个字段,那么我可以很肯定的告诉你,你的结账有漏洞。

下面我们就来具体的说明为什么没有这四个字段就会有漏洞:
                                                 
        如图,一般大家的卡表设计都是这样,只有一个IsCheck字段和一个Handler字段。这样我们在结账的时候,如果有一张卡正在使用、未结账,然后我们就能在结账-购卡中把它查询出来。然后我们现在把它结账,这条记录的IsCheck字段就变成“已结账”,然后我们再对这张卡进行退卡操作!这时的退卡就没有结账,可是我们在结账-退卡中却查询不出来!这时为什么呢?现在我们来对比一下我们查询时使用的SQL语句:

结账-购卡

select * from T_Card where IsCheck='未结账' and handler=@handler
select * from T_Card where regitsterIsCheck='未结账' and registerHandler=@handler

结账-退卡

select * from T_Card where status='不使用' and IsCheck='未结账' and handler=@handler
select * from T_Card where status='不使用' and logoutIsCheck='未结账' and logoutHandler=@handler

通过对比这两条SQL语句,我们就能知道,如果结账-购卡的时候就把IsCheck字段改成“已结账”那么我们结账-退卡的时候就查不出来这条记录。

说完了registerIsCheck和logoutIsCheck字段的由来,下面再说说registerHandler和logoutHandler的由来:

如果我们的卡表里面只有一个Handler字段,那么如果我们在操作员1处购卡,在操作员2处退卡,那么该记录的Handler最后应该是谁呢?

通过以上的论述,相信大家对红色框中的四个字段的由来很信服了,如果大家还有什么不懂地方,可以找我私下讨论。

机房收费系统 之 结账BUG相关推荐

  1. 【VB与数据库】——机房收费系统之结账

    到现在机房收费基本完成,相对之前的学生管理系统,有了一些小难度,个人感觉尤其在结账部分,由于涉及的表比较多,这更需要我们理清思路,保持清晰的思路,才是我们尽快完成王道! 在这一部分内容中涉及到一个之前 ...

  2. 【机房收费系统】---结账

    一.查看某操作员的工作数据信息 代码: Private Sub comboUserName_Click()Dim txtSQL As StringDim MsgText As StringDim mr ...

  3. 【VB】机房收费系统(结账)

    结账,我觉得他的作用就是能让管理员能对这一天每一位操作员的收支有一个一目了然的了解. 汇总的小知识:        售卡张数=购卡选项卡的记录总数        退卡张数=退卡选项卡的记录总数     ...

  4. 机房收费系统之纵观全局

    验收项目的时候,师父们从四方面进行了审核:界面.功能.代码.业务.之后师父布置了三项任务:用自己的理解将一般用户.操作员还有管理员的主要职能搞清楚:将本系统的主要功能化成流程图:"谈钱不伤系 ...

  5. 机房收费系统——报表(2)

    二.代码部分 跟之前写的excel相比,我觉得报表还是有点相同的.大体思路是这样的: 先定义. (报表:Dim Withevents 对象变量 As 类名 这种用法是加载该类的事件,Withevent ...

  6. VB.net版机房收费系统——结账功能实现(调错与优化)

    调错部分 上一篇博客<VB.net版机房收费系统--结账功能实现(代码部分>说的是结账功能的实现,亮出了代码.是在为这篇博客做铺垫.尽管结账功能代码是借鉴的巨人的博客.可是自己比着葫芦画瓢 ...

  7. 机房收费系统的退卡和结账

    在做机房收费系统的时候为了保证核心功能的实现,我将计费时间调成了秒.这样就可以迅速,快捷地看到了收费的结果. 在这种环境下,我的机房收费系统不负众望,终于一次又一次将金额搞错,经过n次实验,将测试的结 ...

  8. VB.net版机房收费系统——结账功能实现(代码部分)

    实现结账功能的时候,被选项卡控件整的有点郁闷,瞬间脑袋就凌乱了,听上去自己好像很可笑的样子--于是,便去爬巨人的肩膀了~ 看了欢哥的博客,发现她的结账博客是按照"索引"思想写的,在 ...

  9. 【机房收费系统】之结账

       机房收费系统中遇到的第二个难题就是结账的部分了.还是那句话,首先最重要的一点就是要有思路.不知道结账是谁结,不知道给谁结,那肯定也就无从谈起结账.下面是我对机房结账的一点理解.         ...

最新文章

  1. python试题for循环布尔值_Python自我修炼(升仙中....整数,布尔值,字符串,for循环)
  2. 网页中嵌入Excel控件
  3. logback.xml 常用配置详解
  4. 交换机三种端口模式Access、Hybrid和Trunk的理解
  5. Kettle报错:Entry to update with following key could not be found
  6. 【Okio】Okio 简单入门
  7. LAMP的部署(一)
  8. JSONObject和JSONArray使用
  9. css 网站素装 追忆过去
  10. 大数据hadoop常见端口
  11. netcore之Http请求
  12. mysql字段命名_Mysql 01—数据库表字段的命名规则
  13. Word绘制跨行表格
  14. MacOS Monterey 12.3 (21E30) OC 0.7.9 / Cl 5145 / PE 三分区原版黑苹果镜像
  15. 图像压缩编码码matlab实现——DM编码
  16. python输入单词显示长度_Python按长度打印单词
  17. 微信公众号粉丝迁移代办最新流程
  18. FIRST集合基本构造
  19. html箭头轮播,CSS-用伪类制作小箭头(轮播图的左右切换btn)
  20. 编程求E1+E2+…+E100的值​

热门文章

  1. EMMC丢失文件系统数据分析
  2. 数据结构— —双向链表
  3. Linux性能监控工具Nmon
  4. 2023年2月蓝桥STEMA评测C++中级组编程题(个人代码学习)(持续更新)
  5. live2d看板娘分享 我的老婆系列 , Vue实现看板娘!!!
  6. 浅谈功能游戏(严肃游戏)
  7. GraphMap:快速的三代序列比对算法
  8. Windows10自带虚拟机
  9. Vue 新 ref 语法糖提案引热议 尤雨溪回复
  10. 计算机与心理健康教育,计算机技术在心理健康教育中的实效性