机房收费系统之bug是永远改不完的

前言

       机房收费系统,对于我来说已经做了好多次。现在让我们做导师,真正感觉到受益最大的就是自己。每次在给他们要求什么的时候,其实是对自己的督促。换种说法就是,你总是在要求别人怎样怎样的时候,其实也是在对自己做要求。

       知易行难,所以有些事情需要多次强调。机房收费系统也一样,又一次的回顾,又一次的测试,让我有了不同的认识。

问题概述

        这个问题是关于组合查询的,关于组合查询,我附一个图,大家看一下图就大概能明白这个组合查询是怎么回事。

              机房收费系统之bug是永远改不完的_第1张图片

       对于里面的业务逻辑和健壮性判断这里我就不说了,遇到的问题是:你说上面的查询,会查到什么,和你想查的结果一样么?

       我先说下我想查的结果:首先前两个进行或运算,然后与第三个进行与运算,所以这样的结果应该是空才对。

       可是,那只是我想的结果,但结果却是出来结果了,这是为什么呢?

问题解答

       问题就在于数据库中and和or这两个关键字优先级是不一样的。and优先级要比or的优先级高,所以出现了与愿望不符的结果。这给了我们警示:在写程序时,尽可能对运算用小括号进行优先级划分。将出错机会降低到最小。

问题深入

       现在问题来了,怎么加括号呢?首先先说一下这个程序没有修改前的运行规则:

              1. 定义一个字符串strSQL="select * from 表明 where"

              2. 如果只按照一个条件查询,假设这个条件为A,那么strSQL=strSQL+A,(A为第一个条件的字符串)

              3. 如果有两个条件,第二个条件的字符串为B,那么strSQL=strSQL+B

              4. 如果有三个条件,同3.

              5. 执行strSQL语句。

       现在需要再第一个条件和第二个条件加上括号。有两种加法

       第一种

              strSQL+(

              一个条件的话A+)

              两个条件strSQL-),然后B+)

              这样在三个条件的时候,前两个就始终最先运算

       第二种

              再定义一个变量strEndSQL。

              一个条件strEndSQL=strSQL+A,

              两个条件strEndSQL=strSQL+A+B

              三个条件的时候strEndSQL=strSQL+(+A+B+)+C

       (说明,上面说的这两种需要大家结合自己的代码想一想才更清晰,没有源代码的可以给我留言,我给你源代码)

问题深入

       其实问题已经解决了,干嘛还不停住呢?

       原因就是我感觉这个问题很有代表性。我们都太懒了,组合查询这个思路,应该是从学生信息管理系统里面学的吧。这个思路已经根深蒂固,所以每次遇到此类问题时,大家都往那方面去想,以至于已经出现了问题,首先的第一想法是,我怎么去修改。

       不得不承认,在修改的过程中,能学到新的知识。例如此例,第一种进行完后,你对字符串的操作肯定会更熟悉。但是干嘛要对自己画地为牢,固步自封呢?

       这些其实不是我自己一个人的思想结晶,是在给海燕姐测试的时候,遇到的这个问题。我当时是第一种思路,在他做出来后,我们进行交流,我们都没有想到第二种,只是她的一种我感觉行不通的方法,给了我这个思路。

       这种非技术上的学习,仅仅是看视频,是学习不到的。通过和他们交流,我感觉我收获了很多。

总结

       循规蹈矩,固然好。但是能够突破重围,体验另一个世界的美好,又有何不佳呢?不要被以往的思路禁锢住,相似的问题,用相同的解法,可能会出现你想象不到的问题,而当出现问题时,可以试着想另外的解决思路。因为相似不等于相同!!!

你可能感兴趣的:(c,数据库,测试)