如题,物业管理系统中的收费模块需要允许用户自定义收费公式简单的+-*/四则运算已可以解决现在麻烦的是如何把自变量代入到公式中,例如管理费 = 面积 × 单价,面积来自于各住户的面积数在计算时如何将各住户的面积取出,然后代入公式呢?请有经验的朋友介绍一下思路,包括数据库设计和程序设计的思路

解决方案 »

  1.   

    取数,是输入的就用个Edit,已有的就用数据表中的值就行了啊,,,
    没这方面的经验,帮你顶一下,也学习学习
      

  2.   

    怎么做都可以,主要看你的实现要求。这个东西的设计要看你的需求了,就你的题目来看,如果限定只是一个公式的话,
    那可以考虑缩小设计的范围,也就是说不用考虑使用自定义或其他脚本语言来支持,(也就是说程序不用考虑,循环,分支等语句)对于公式而言,若考虑,只有一个结果,和4则运算, 那你现在的问题是变量,
    实际上,变量可以考虑为两种,一种是,我把它称为公式环境变量,另一种是,用户自定义变量,
    所谓,公式环境变量,实际上是你把用户能操作的最基本的元素定义下来,以一个由你命名的环境变量来定义这个元素.比如:
    管理费 = 面积 × 单价那这个东西的环境变量(注意我 这里说的是从某个角度看,而从你实际的工程来说,也许有些不同)就有  管理费,面积,单价,而对于你来说,你自己知道 管理费和 面积 单价 都是一个矢量(若每一户都有不同的面积,单价)所以,你要把用户需要操作的最基本的元素定义下来,而用户生成的公式所用到的变量都是由你给出的.
    在程序设计中,你一开始,就把公式转化成一棵树, 而每个叶节点你都可以在词法分析的时候知道这个是否是一个变量, 这个变量实际在程序中是哪个东西. 所以运算的时候,很轻易的就可以取到值了.对于用户自定义变量来说, 那是考虑有公式上下文的情况下使用的,如有这样的情况
    单价= 123-(当前年份-注册年份)*0.0013
    管理费 = 面积 × 单价那单价就可以作为一个用户自定义变量。
    当然最后你还可能考虑显示的问题, 对于显示来说,考虑一个变量对应多个显示,与显示的风格,如果你不需要搞显示,那就省去了一块麻烦的事情。细节的东西还有很多,比如自定义变量可以考虑所有的都是一个矢量,就如同matlab上面的变量一样,使得用户不用考虑是否还是数组之类的问题。
    最后,作这种东西,出来越简单方便越好,能固定的就固定。
    以前我做的时候,是做一套脚本(这个脚本不是用户用的,自己用的)来解释这个东西,然后在脚本上再抽出公式变量出来, 该的时候只要该脚本就可以了,
    程序中所有的数据都要经过一个 数据处理层 ,由该层在转发到各个类对象,所以我的数据所有的都可以在这一层上得到。还有一点,我看来这个东西与数据库毫无联系,如果你在程序中把这个东西和数据库紧密相连,那么改动数据库的时候,你的这个东西接着就要该,这我觉得不是一个好的方案。很难得写这么长的东西,而且时间也过了很久了,所以描述杂乱,希望不难理解,然后再和自己的工程结合起来,当然并不一定适合你的工程,因为你的需求也不明。
      

  3.   

    自定义公式以前我是这样做的:
    1.数据库结构
    做一个公式表,每次进行运算时遍历公式表即可
    公式表:
    ID  Result  Formula  FormulaDesc  A  B  C  D  E  F
    而在字段A中存放相应数据的字段名,即通过A来映射到其相应的数据表的字段中,取出数据后即可运算,公式表起到了中介作用!
    2.设置公式
    通过使用户输入诸如A+B等等式存之于公式表中(当然,在列表中写明A与B的映射基础表中基础字段的关系),不受运算限制!
    3.公式中稍有复杂的中公式的分级(我做自定义公式时一个等式最长的大约有20个运算项,很复杂),故用公式分级来实现表达能力不好:)
      

  4.   

    管理费   =   面积   ×   单价,面积来自于各住户的面积数在计算时如何将各住户的面积取出,然后代入公式呢? 
    ========================================================
    住户的ID知道了,就可以得到房屋的各项数据
    而住户的ID是根据界面查询或者选择的。