我要做一个新的东西,恩,就是计算字段。
首先,我不知道会有那些字段,因为字段是由用户自己建立的。
然后计算公式也是由用户自定义的。
于是问题来了。
第一、如何检测计算公式的合法性。
第二、计算公式合法了,以什么样的方式存放到数据库中比较好呢?然后要怎么解析?(请想象一个犹如计算器般的东西,它上面的按钮为:+ - * / if ( ) else <= 等等的符号,然后在这个计算器的上面有三个下拉框:
参与计算的字段(这个下拉框里包含所有值类型为数字的字段,可以任意选择)
第二个是条件字段的名字,第三是条件字段的值(这两个下拉框也是有N多选项供选择的,举例说条件字段为“性别”,那么条件字段值就有两个“男”、“女”)来个例子吧:
如果我弄了一个计算公式出来:if(产品类型=自产产品]){成本=原材料费用+工人单人工资*工人数量}else{成本=运费+进货价格}
【要怎么检查这个公式的合法性呢?因为要呈现在文本框中,可以任意修改,字段的名称就可能会错误或者少个括号什么的。检查完合法性,保存到数据库中要采用什么样的方式比较好?计算成本的时候,要怎么取出计算公式解析他并按照公式来计算最终值?】
有代码当然好,但是代码不是万能的,主要还是求思路。有具体的例子和详细的思路解析最好~

解决方案 »

  1.   

    自定义字段别弄公式啦,性能很差的,因为没法实现放好索引。
    需要弄到自定义公式的字段,说明你们程序不够强大。没法直接实现需求。检测公式是否正确,可能还是得执行添加字段的时候用try catch 来捕获异常。
      

  2.   

    木有人回答了么...思路想的差不多了...
    来个实例吧,如果我有个计算公式:
    计算公式里会有:枚举名、枚举值,参与计算的字段
    if([枚举A]=="值2" || [枚举B]== 5){
    [需要计算的字段名] = [卖出价格] - [生产成本];
    }
    else{
     [需要计算的字段名] = [卖出价格]- [产品进价];
    }
    要检测这个公式是否合法,主要有两个方面:
    1.[]中的字段名是否存在(字段名都存在list中),[]中的枚举名是否存在,""中的值在该枚举中是否存在。(如果枚举值为int/double型的时候,不会有"")。
    2.经过1的校验之后,计算公式应该变成:
    if(==||==){=-;}else{=-;}或者在1的检查中将if中的条件全部截取出去,那就是if(){=-;}else{=-;}
    然后就是检查在剩下的字符中是否有不符合的符号(比如我在输入计算公式的时候,在最后面加了一段“aaa224fd”那么,剩下来的字符就会是“if(){=-;}else{=-;}aaa224fd”)。
    正确的应该是里面只会出现if else和各运算符等。