基于数据字典的查询系统 最后一篇到完工

MS大家不喜欢我说思路的方式,今天一鼓作气,把剩下的关键代码,类图贴完,加上简单说明,本系列到此结束。

我觉得技术网站应当以交流思想为主,现在看来,大家比较关注代码,呵。

界面上不写了,都比较弱智,而且我是CS的。

1.       布尔表达式的处理。

前面说过,布尔表达式两种形式

Exp àCol   + compareOp + Value

Exp àExp + boolOP +Exp

先定义compareOp和boolOp

这里没有用枚举而用静态单例,原因还是老调子,因为要有Show 和EXP

CompareOP

 

Code

BoolOp

 

Code

 

下面讨论布尔表达式的生成方式 。

一种是Exp àCol   + compareOp + Value

所以直观上类中应该有一个QueryCol,一个comareOP,和一个value做为布表达式的成员。

而对于value ,当然,我们还要分show和Exp

而对于第二种生成方式。

Exp àExp + boolOP +Exp

还是用“妥协的设计方式”,加一个不论不类的类AddBoolOp,有BoolOp和BoolExpresion两个成员。

这样BoolExpression再加一个List<AddBoolOp>就可以了。

对于在两种方式切换,我们加一个IsFirst的属性、

具体内容不多说,写代码里(大家要的就是这个吧,不好意思,两天了,我还是窝不住火,说话冲点,各位大爷息怒)、

对了,生成条件表达式的内容加在ToString()中了,这个招确实有点下三滥,呵呵,不好意思啦。

 

Code

妥协类AddBoolExpression和其集合。

 

Code

 

Code

 

现在还剩对选择列的处理。

前面说了select后面的列,可以是group 的列,也可以是count,sum,也可以是是值,因此先定义输出的方式 ,还是静态类(这招快让我用吐了,呵呵)

 

Code

下面就是选择的列了、

 

Code

在定义一个选择列的集合,对一些条件,约束的判断加在这里了

 

Code

 

最后是一个生成查询的类QueryContext。

 

Code

其中对多表连查的条件判断已经加到里面了,到此,全部关键代码。算法都已经搞定。

至于界面是BS还是CS 各位自便。

在此贴上几张俺的CS效果图(很草,算demo吧)

 主界面

串查询

 

数值(和串基本相同)

状态位

输出方式

仍然那句,欢迎拍砖(理性,不是急性)

posted @ 2008-12-21 01:01  葛云飞  阅读(2589)  评论(8编辑  收藏  举报