专利名称:一种实现解决具有复杂计算关系的指标计算模型的方法
技术领域:
本发明涉及计算机领域,特别是涉及一种实现解决具有复杂计算关系的指标计算模型的方法。
背景技术:
目前,在类似计算净现金流如下具有多种指标间具有复杂计算关系的计算模型中,常常会有很多的缺陷。其中,多种指标,具体如下所述计算公式净现金流=现金流入-现金流出现金流入=销售收入+回收固定资产余值+回收流动资金现金流出=工程投资+流动资金+经营成本+销售税+所得税销售收入=产品数量*产品价格流动资金=经营成本*流动资金占经营成本比例经营成本=总成本费用-折旧折耗-财务费用总成本费用=生产成本+期间费用生产成本=操作成本+折旧折耗折旧折耗=资产原值残值率)/折旧年限期间费用=管理费用+财务费用+营业费用销售税=城市维护建设税+教育税附加+资源税上面只是列举了计算净现金流部分公式,全部的计算公式有200多个。这种问题需要解决的是有很多输入指标比如残值率,折旧年限,产品价格等,输出指标是由多个其他指标(包括输入指标或其他的输出指标)采用了各种算法计算得来的。比如生产成本,销售税,折旧折耗等。目前都是把这种指标间的计算关系固化在程序中。对于指标间的计算关系固化在程序中,缺点很明显,加一个指标或者修改一个指标计算关系,主程序需要修改重新编译,把编译后的执行文件再发给用户。这样带来的实现计算模型的方法中涉及的程序的灵活性很差。因而,目前需要本领域技术人员迫切解决的一个技术问题就是如何找到一种新型的简单、快速的实现解决具有复杂计算关系的计算模型的方法。
发明内容
本发明所要解决的一个技术问题是提供一种实现解决具有复杂计算关系的指标计算模型的方法,该方法能够给用户提供一个简单、快速的计算模型来解决复杂的计算关系。为了解决上述问题,本发明公开了一种实现解决具有复杂计算关系的指标计算模型的方法,包括
采用通过树形结构计算关系的方式,建立指标计算模型,获得用户自定义的指标计算模型;采用通过gigabase面向对象数据库保存指标间的树形结构的方式,对用户自定义的指标计算模型进行保存,获得用户自定义的指标计算模型;通过TinyC编译器,将用户用C语言编写的自定义的指标的计算关系,编译成DLL 文件并对所述DLL文件进行保存,获得保存有计算函数的函数关系的数据信息文件;解析获得的用户自定义的指标计算模型并计算各项指标,获得各项指标的数值。优选的,所述采用通过树形结构计算关系的方式,建立指标计算模型,获得用户自定义的指标计算模型的步骤,包括采用通过树形结果计算关系的方式,建立指标计算模型中的指标的数据字典,并对各项指标进行编辑,获得指标计算模型中的各项指标数据;其中,所述各项指标数据为每个指标的类型及每个指标的名称;接收读取数据指令,开始执行读入指标计算模型中的各项指标数据的操作;用户执行建立指标根节点的操作,获得用户自定义的指标计算模型。优选的,所述用户执行建立指标根节点的操作,获得用户自定义的指标计算模型的步骤,包括建立指标根节点,获得指标根节点;若指标根节点需要计算,则建立指标根节点相应的指标子节点,获得指标根节点相应的指标子节点;编写根节点需要的计算函数的函数实现体,获得计算函数的函数关系;执行完上述操作,获得指标根节点、指标根节点相应的指标子节点及计算函数的函数关系,则获得用户自定义的指标计算模型。优选的,所述采用通过gigabase面向对象数据库保存指标间的树形结构的方式, 对用户自定义的指标计算模型进行保存,获得用户自定义的指标计算模型的步骤,包括将获得的指标根节点进行保存,获得保存有指标根节点的数据信息的文件;采用递归方式,针对指标根节点,依次保存指标根节点相应的每个指标子节点,获得保存有指标子节点的数据信息的文件;对获得的计算函数的函数关系进行保存,获得保存有计算函数的函数关系的数据信息的文件;其中,所述指标节点的数据信息为指标根/子节点的名称、指标根/子节点的类别、C函数名称、用户输入的计算实现C代码构成的C函数及所有指标子节点对象的ID。优选的,所述通过TinyC编译器,将用户用C语言编写的自定义的指标的计算关系,编译成DLL文件并对所述DLL文件进行保存,获得保存有计算函数的函数关系的数据信息文件的步骤,包括将所有的用户输入的计算实现C代码构造成相应的C函数,获得针对计算实现C 代码相应的一个个C函数;输入相应的一个个C函数,生成一个C函数源程序文件;采用TinyC编译器,将C函数源程序文件进行编译,获得C函数源程序文件的动态库文件;
将所述动态库文件作为一个二进制字段保存到指标计算模型文件中的表中,获得保存有计算函数的函数关系的数据信息文件。优选的,所述解析获得的用户自定义的指标计算模型并计算各项指标,获得各项指标的数值的步骤,包括读取指标计算模型文件,获得各项指标的数值;采用递归调用的方法,计算出各项指标的数值;通过调用指标容器的GetNode函数的方式,针对用户的输入指标传入指标名称, 获得指标对象;通过调用指标对象的ktValue函数的方式,对获得的指标对象进行设置,获得指标对象的结果数值;通过调用Eval函数的方式,针对根节点进行解析,获得各项指标的数值。优选的,所述读取指标计算模型文件,获得各项指标的数值的步骤,包括读取保存有指标根/子节点的数据信息的文件,获得指标根/子节点的数据信息;读取保存有计算函数的函数关系的数据信息的文件,获得计算函数的函数关系的数据信息。优选的,所述读取保存有指标根/子节点的数据信息的文件,获得指标根/子节点的数据信息的步骤,包括为每个指标建立相应的对象实例,获得每个指标的对象实例;为每个指标的子对象建立相应的子对象实例,获得每个指标的子对象实例;每个指标的对象实例及其每个对象的若干子对象的子对象实例构成树状结构的对象体系;建立对象容器对象,获得对象容器;将每个指标对象加入到对象容器中;采用hashjnap的存储方式,建立指标对象的名称与指标对象地址的映射关系,获得指标对象的名称与指标对象的地址的映射关系;若在对象容器中传入指标对象的名称, 则对象容器快速返回指标对象的地址;完成上述步骤,完成读取保存有指标根/子节点的数据信息的文件,获得指标根/ 子节点的数据信息的全过程。优选的,所述读取保存有计算函数的函数关系的数据信息的文件,获得计算函数的函数关系的数据信息的步骤,包括从计算函数的函数关系的数据信息的文件中的二进制字段中读入计算方法;将计算方法写入到动态库文件中;采用hashjnap的存储方式,建立指标对象的名称与指标对象地址的映射关系,获得指标对象的名称与指标对象的地址的映射关系;若在对象容器传入指标对象的名称,则对象容器快速返回指标对象的地址;通过调用Eval函数的方式,针对指标对象的最后一行代码,调用计算函数的函数关系,获得计算函数的函数关系的数据信息。优选的,所述通过调用Eval函数的方式,针对根节点进行解析,获得各项指标的数值的步骤,包括通过调用Eval函数的方式,针对一个根节点进行递归调用解析,获得每个根节点指标的数值;通过调用Eval函数的方式,针对每个根节点相对应的其余根节点进行递归调用解析,获得每个根节点相对应的其余根节点指标的数值;对上述每个根节点指标的数值及上述每个根节点相对应的其余根节点指标的数值进行汇总,获得各项指标的数值。本发明显著优点在于1、所建立一种指标间树状的计算模型,提供了一个图形编辑界面,让用户来自定义各种指标间的计算关系,在程序中自动解析这种计算关系,提供输入指标数据,利用计算模型计算出所有的输出指标。2、让最终用户能方便的定义指标的计算关系。3、给用户提供一个既开放又简单的计算关系配置工具。4、具有强大的扩展性,灵活性。5、建立了树状结构的计算模型,用户可以方便的自己定义;另外采用了开源的 TinyC编译器把用户定义的计算方法直接编译成了可以执行的机器码,没有采用公式解析器或者脚本语言使得运行速度与把算法固化到程序中的编程方式具有相同的速度;给用户提供了一个简单快速的开发平台。总之,本发明提供了一种实现解决具有复杂计算关系的指标计算模型的方法,该方法能够给用户提供一个简单、快速的计算模型来解决复杂的计算关系。
图1是本发明一种实现解决具有复杂计算关系的指标计算模型的方法的实施例的步骤流程图;图2是本发明一种实现解决具有复杂计算关系的指标计算模型的方法中的计算模型编辑的流程示意图;图3是本发明一种实现解决具有复杂计算关系的指标计算模型的方法中的计算模型保存的流程示意图;图4是本发明一种实现解决具有复杂计算关系的指标计算模型的方法中的计算模型解析的流程示意图;图5是本发明一种实现解决具有复杂计算关系的指标计算模型的方法中的Eval 方法的流程示意图。
具体实施例方式为使本发明的上述目的、特征和优点能够更加明显易懂,下面结合附图和具体实施方式
对本发明作进一步详细的说明。本发明的核心思想之一是提供了一种实现解决具有复杂计算关系的指标计算模型的方法,包括采用通过树形结构计算关系的方式,建立指标计算模型,获得用户自定义的指标计算模型;采用通过gigabase面向对象数据库保存指标间的树形结构的方式,对用户自定义的指标计算模型进行保存,获得用户自定义的指标计算模型;通过TinyC编译器, 将用户用C语言编写的自定义的指标的计算关系,编译成DLL文件并对所述DLL文件进行保存,获得保存有计算函数的函数关系的数据信息文件;解析获得的用户自定义的指标计算模型并计算各项指标,获得各项指标的数值;该方法能够给用户提供一个简单、快速的计算模型来解决复杂的计算关系。参照图1,示出了本发明一种实现解决具有复杂计算关系的指标计算模型的方法的实施例的步骤流程图,前面所举的净现金流的计算就采用本发明来解决,具体可以包括步骤101、采用通过树形结构计算关系的方式,建立指标计算模型,获得用户自定义的指标计算模型。为了使本领域的技术人员更好地理解本发明,在本发明的一个优选实施例中,所述步骤101,具体可以包括子步骤Al、采用通过树形结果计算关系的方式,建立指标计算模型中的指标的数据字典,并对各项指标进行编辑,获得指标计算模型中的各项指标数据;其中,所述各项指标数据为每个指标的类型及每个指标的名称。子步骤A2、接收读取数据指令,开始执行读入指标计算模型中的各项指标数据的操作。子步骤A3、用户执行建立指标根节点的操作,获得用户自定义的指标计算模型。其中,所述子步骤A3具体可以包括 子步骤Bl、建立指标根节点,获得指标根节点。子步骤B2、若指标根节点需要计算,则建立指标根节点相应的指标子节点,获得指标根节点相应的指标子节点。子步骤B3、编写根节点需要的计算函数的函数实现体,获得计算函数的函数关系。子步骤B4、执行完上述操作,获得指标根节点、指标根节点相应的指标子节点及计算函数的函数关系,则获得用户自定义的指标计算模型。其中,用户定义计算模型,在模型中加一个指标节点,如果该节点需要计算,加上子节点,编写该节点需要的计算函数的函数实现体,函数名称自动产生,函数定义如下所述double CalFun(double氺pSubNodeValue);用户在定义时只需要编写函数主体,比如指标由由两个子节点的相乘计算而来, 那么可以如下方式写上函数体。return pSubNodeValue
^pSubNodeValue[1];在最后生成模型时,会自动生成一个函数名称比如Cal_Acdf,自动加上C函数需要的〃 {",〃 }〃符号。最后这个函数如下double Cal_Acdf(double*pSubNodeValue){return pSubNodeValue
^pSubNodeValue[1];}用户只需要写实现计算的代码returnpSubNodeValue
^pSubNodeValue [1];计算函数其他部分由系统自动生成。参照图2,示出了本发明一种实现解决具有复杂计算关系的指标计算模型的方法中的计算模型编辑的流程示意图,具体如下所述1)读入指标数据字典;2)建立指标根节点;3)建立子节点;4)若还有子节点,继续建立子节点,至到所有子节点全部建立完成;5)编写计算关系C代码;6)保存。步骤102、采用通过gigabase面向对象数据库保存指标间的树形结构的方式, 对用户自定义的指标计算模型进行保存,获得用户自定义的指标计算模型。其中,所述 gigabase面向对象数据库为一种用C++编程语言编写的,开源的对象数据库。为了使本领域的技术人员更好地理解本发明,在本发明的另一个优选实施例中, 所述步骤102,具体可以包括子步骤Cl、将获得的指标根节点进行保存,获得保存有指标根节点的数据信息的文件。子步骤C2、采用递归方式,针对指标根节点,依次保存指标根节点相应的每个指标子节点,获得保存有指标子节点的数据信息的文件。子步骤C3、对获得的计算函数的函数关系进行保存,获得保存有计算函数的函数关系的数据信息的文件;其中,所述指标节点的数据信息为指标根/子节点的名称、指标根/子节点的类别、C函数名称、用户输入的计算实现C代码构成的C函数及所有指标子节点对象的ID。其中,所述C代码为用C语言编写的程序源代码;所述C函数为用C语言编写的函数;所述C函数名称为用C语言编写的函数名称,采用随机方式自动生成C函数名称;所述指标子节点对象的ID为指标子节点对象的标识。步骤103、通过TinyC编译器,将用户用C语言编写的自定义的指标的计算关系,编译成DLL文件并对所述DLL文件进行保存,获得保存有计算函数的函数关系的数据信息文件。其中,所述TinyC编译器为编译C语言的开源编译器;所述C语言为一种计算机编程语言;所述DLL文件为可以被执行的库文件。利用小巧的TinyC编译器(编译C语言的开源编译器),用户用C语言编写的自定义的指标的计算关系,利用TinyC编译成DLL文件。由于运行时是机器码,计算速度快,同时又具有脚本语言的灵活性。为了使本领域的技术人员更好地理解本发明,在本发明的另一个优选实施例中, 所述步骤103,具体可以包括子步骤D1、将所有的用户输入的计算实现C代码构造成相应的C函数,获得针对计算实现C代码相应的一个个C函数。子步骤D2、输入相应的一个个C函数,生成一个C函数源程序文件。子步骤D3、采用TinyC编译器,将C函数源程序文件进行编译,获得C函数源程序文件的动态库文件。
子步骤D4、将所述动态库文件作为一个二进制字段保存到指标计算模型文件中的表中,获得保存有计算函数的函数关系的数据信息文件。其中,用户把编辑好的计算模型保存到一个文件中。软件在用户的这个操作中,先保存根节点,然后采用递归方法,依次保存每个子节点。其中,每个节点信息包括指标名称, 指标类别,C函数名称,用户输入的计算实现C代码,所有子节点对象的ID。.另外还需要把所有的用户输入的计算实现C代码构造成一个个的C函数,生成一个C函数源程序文件, 自动采用TinyC编译器编译成一个动态库文件,把这个动态库文件作为一个二进制字段保存到模型文件中的一个表中。参照图3,示出了本发明一种实现解决具有复杂计算关系的指标计算模型的方法中的计算模型保存的流程示意图,具体如下所述1)保存子节点;2)保存父节点;3)自动生成计算方法的函数名称;4)把所有的计算方法函数形成一个C文件;5)用TinyC编译C语言源代码文件形成一个DLL文件;6)把DLL文件作为模型数据库的一个二进制字段存入。步骤104、解析获得的用户自定义的指标计算模型并计算各项指标,获得各项指标的数值。参照图4,示出了本发明一种实现解决具有复杂计算关系的指标计算模型的方法中的计算模型解析的流程示意图,具体如下所述1)读入计算模型文件;2)读入根节点;3)读入计算函数的名称;4)读入子节点;5)若还有子节点,继续读入子节点,至到读出所有的子节点,完成读入子节点的全过程;6)读入计算关系的DLL,并写入到一个DLL文件中;其中,所述DLL文件为可以被执行的库文件;7)根据计算函数的名称为每个节点获取计算函数的地址;8)读入输入指标数据;9)调用根节点的Eval方法;其中,所述Eval方法为计算指标的值的函数方法。为了使本领域的技术人员更好地理解本发明,在本发明的另一个优选实施例中, 所述步骤104,具体可以包括子步骤E1、读取指标计算模型文件,获得各项指标的数值。其中,所述子步骤El具体可以包括子步骤Fl、读取保存有指标根/子节点的数据信息的文件,获得指标根/子节点的数据信息。其中,所述子步骤Fl具体可以包括子步骤G1、为每个指标建立相应的对象实例,获得每个指标的对象实例。
子步骤G2、为每个指标的子对象建立相应的子对象实例,获得每个指标的子对象实例。子步骤G3、每个指标的对象实例及其每个对象的若干子对象的子对象实例构成树状结构的对象体系。子步骤G4、建立对象容器对象,获得对象容器。子步骤G5、将每个指标对象加入到对象容器中。子步骤G6、采用hashjnap的存储方式,建立指标对象的名称与指标对象地址的映射关系,获得指标对象的名称与指标对象的地址的映射关系;若在对象容器中传入指标对象的名称,则对象容器快速返回指标对象的地址;其中,所述hashjnap的存储方式为一种存放对象标识和对象的数据结构的存储方式。子步骤G7、完成上述步骤,完成读取保存有指标根/子节点的数据信息的文件,获得指标根/子节点的数据信息的全过程。子步骤F2、读取保存有计算函数的函数关系的数据信息的文件,获得计算函数的函数关系的数据信息。其中,所述子步骤F2具体可以包括子步骤HI、从计算函数的函数关系的数据信息的文件中的二进制字段中读入计算方法。子步骤H2、将计算方法写入到动态库文件中。子步骤H3、采用hashjnap的存储方式,建立指标对象的名称与指标对象地址的映射关系,获得指标对象的名称与指标对象的地址的映射关系;若在对象容器中传入指标对象的名称,则对象容器快速返回指标对象的地址;其中,所述hashjiiap的存储方式为一种存放对象标识和对象的数据结构的存储方式。子步骤H4、通过调用Eval函数的方式,针对指标对象的最后一行代码,调用计算函数的函数关系,获得计算函数的函数关系的数据信息;其中,所述Eval函数为计算指标的值的函数。参照图5,示出了本发明一种实现解决具有复杂计算关系的指标计算模型的方法中的Eval方法的流程示意图,具体如下所述1)找到根节点;2)调用根节点的Eval方法开始计算;3)如果已经有值,则结束;其中,有值的情况如下两种a.原始数据库中就存在原始的输入值,则直接读取,不需要运算;b.已经完成计算过程,并对计算结果进行标记。4)如果没有现成可以调用的值,则先调用第一个子节点的Eval方法;若还有其余子节点,调用其余子节点的Eval方法,至到完成所有调用子节点的Eval方法,获得所有子节点的数值;其中,采用递归调用的方式来对子节点进行调用;5)调用节点的计算函数,设置有值的标记;6)结束。
其中,读入计算模型文件,为每个指标建立一个对象实例(CComputeNode),每个对象有若干子对象,这样在内存中建立了一个树状结构的对象体系,然后建立一个对象容器对象CComputeNodeManage,把每个指标对象加入进容器中,容器对象中采用hash_map把指标对象的名称与指标对象地址建立起映射关系,这样可以容器对象就有一函数GetNode,该函数可以传入指标名称就可以快速返回指标对象地址。另外一个从模型文件中的二进制字段中读入计算方法,并写入到一个动态库文件中,每个指标对象的有个计算函数地址,函数原型是double Cal (double^pSubNodeValue)。根据节点的函数名称计算函数地址。在指标对象的EVal的最后一行代码需要调用该函数,以获得指标的值;其中,所述Eval函数为计算指标的值的函数;所述Eval方法为调用Eval函数的方法;所述所述hashjiiap的存储方式为一种存放对象标识和对象的数据结构的存储方式;所述GetNode函数为获得节点的函数。子步骤E2、采用递归调用的方法,计算出各项指标的数值。其中,把所有没有父节点的指标对象(根节点)放到一个数组中,这样在计算时只调用这些根节点指标对象的计算方法,而在指标对象的计算方法Eval中,先调用子节点的EVal 函数,这样一种递归调用方式就会计算出所有的指标的值;其中,所述Eval函数为计算指标的值的函数;所述Eval方法为调用Eval函数的方法。子步骤E3、通过调用指标容器的GetNode函数的方式,针对用户的输入指标传入指标名称,获得指标对象;其中,所述GetNode函数为获得节点的函数。子步骤E4、通过调用指标对象的ktValue函数的方式,对获得的指标对象进行设置,获得指标对象的结果数值;其中,所述ktValue函数为设置指标的值的函数。其中,把用户所有的输入的指标,通过调用指标容器的GetNode函数的方式传入指标名称,得到指标对象,然后通过调用指标对象CComputeNode的ktValue函数的方式, 设置好指标的值。子步骤E5、通过调用Eval函数的方式,针对根节点进行解析,获得各项指标的数值;其中,所述Eval函数的方式为调用Eval函数的方式。其中,所述子步骤E5具体可以包括子步骤II、通过调用Eval函数的方式,针对一个根节点进行递归调用解析,获得每个根节点指标的数值。子步骤12、通过调用Eval函数的方式,针对每个根节点相对应的其余的根节点进行递归调用解析,获得每个根节点相对应的其余根节点指标的数值。子步骤13、对上述每个根节点指标的数值及上述每个根节点相对应的其余根节点指标的数值进行汇总,获得各项指标的数值。前面所举的净现金流的计算就采用本发明来解决。总之,本发明提供了一种实现解决具有复杂计算关系的指标计算模型的方法,该方法能够给用户提供一个简单、快速的计算模型来解决复杂的计算关系。以上对本发明所提供的一种实现解决具有复杂计算关系的指标计算模型的方法进行了详细介绍,本文中应用了具体个例对本发明的原理及实施方式进行了阐述,以上实施例的说明只是用于帮助理解本发明的方法及其核心思想;同时,对于本领域的一般技术人员,依据本发明的思想,在具体实施方式
及应用范围上均会有改变之处,综上所述,本说明书内容不应理解为对本发明的限制。
权利要求
1.一种实现解决具有复杂计算关系的指标计算模型的方法,其特征在于,包括采用通过树形结构计算关系的方式,建立指标计算模型,获得用户自定义的指标计算模型;采用通过gigabase面向对象数据库保存指标间的树形结构的方式,对用户自定义的指标计算模型进行保存,获得用户自定义的指标计算模型;通过TinyC编译器,将用户用C语言编写的自定义的指标的计算关系,编译成DLL文件并对所述DLL文件进行保存,获得保存有计算函数的函数关系的数据信息文件; 解析获得的用户自定义的指标计算模型并计算各项指标,获得各项指标的数值。
2.根据权利要求1所述的方法,其特征在于,所述采用通过树形结构计算关系的方式, 建立指标计算模型,获得用户自定义的指标计算模型的步骤,包括采用通过树形结果计算关系的方式,建立指标计算模型中的指标的数据字典,并对各项指标进行编辑,获得指标计算模型中的各项指标数据;其中,所述各项指标数据为每个指标的类型及每个指标的名称;接收读取数据指令,开始执行读入指标计算模型中的各项指标数据的操作; 用户执行建立指标根节点的操作,获得用户自定义的指标计算模型。
3.根据权利要求2所述的方法,其特征在于,所述用户执行建立指标根节点的操作,获得用户自定义的指标计算模型的步骤,包括建立指标根节点,获得指标根节点;若指标根节点需要计算,则建立指标根节点相应的指标子节点,获得指标根节点相应的指标子节点;编写根节点需要的计算函数的函数实现体,获得计算函数的函数关系; 执行完上述操作,获得指标根节点、指标根节点相应的指标子节点及计算函数的函数关系,则获得用户自定义的指标计算模型。
4.根据权利要求1所述的方法,其特征在于,所述采用通过gigabase面向对象数据库保存指标间的树形结构的方式,对用户自定义的指标计算模型进行保存,获得用户自定义的指标计算模型的步骤,包括将获得的指标根节点进行保存,获得保存有指标根节点的数据信息的文件; 采用递归方式,针对指标根节点,依次保存指标根节点相应的每个指标子节点,获得保存有指标子节点的数据信息的文件;对获得的计算函数的函数关系进行保存,获得保存有计算函数的函数关系的数据信息的文件;其中,所述指标节点的数据信息为指标根/子节点的名称、指标根/子节点的类别、C函数名称、用户输入的计算实现C代码构成的C函数及所有指标子节点对象的ID。
5.根据权利要求1所述的方法,其特征在于,所述通过TinyC编译器,将用户用C语言编写的自定义的指标的计算关系,编译成DLL文件并对所述DLL文件进行保存,获得保存有计算函数的函数关系的数据信息文件的步骤,包括将所有的用户输入的计算实现C代码构造成相应的C函数,获得针对计算实现C代码相应的一个个C函数;输入相应的一个个C函数,生成一个C函数源程序文件;采用TinyC编译器,将C函数源程序文件进行编译,获得C函数源程序文件的动态库文件;将所述动态库文件作为一个二进制字段保存到指标计算模型文件中的表中,获得保存有计算函数的函数关系的数据信息文件。
6.根据权利要求1所述的方法,其特征在于,所述解析获得的用户自定义的指标计算模型并计算各项指标,获得各项指标的数值的步骤,包括读取指标计算模型文件,获得各项指标的数值; 采用递归调用的方法,计算出各项指标的数值;通过调用指标容器的GetNode函数的方式,针对用户的输入指标传入指标名称,获得指标对象;通过调用指标对象的ktValue函数的方式,对获得的指标对象进行设置,获得指标对象的结果数值;通过调用Eval函数的方式,针对根节点进行解析,获得各项指标的数值。
7.根据权利要求6所述的方法,其特征在于,所述读取指标计算模型文件,获得各项指标的数值的步骤,包括读取保存有指标根/子节点的数据信息的文件,获得指标根/子节点的数据信息; 读取保存有计算函数的函数关系的数据信息的文件,获得计算函数的函数关系的数据 fn息ο
8.根据权利要求7所述的方法,其特征在于,所述读取保存有指标根/子节点的数据信息的文件,获得指标根/子节点的数据信息的步骤,包括为每个指标建立相应的对象实例,获得每个指标的对象实例; 为每个指标的子对象建立相应的子对象实例,获得每个指标的子对象实例; 每个指标的对象实例及其每个对象的若干子对象的子对象实例构成树状结构的对象体系;建立对象容器对象,获得对象容器; 将每个指标对象加入到对象容器中;采用hashjnap的存储方式,建立指标对象的名称与指标对象地址的映射关系,获得指标对象的名称与指标对象的地址的映射关系;若在对象容器中传入指标对象的名称,则对象容器快速返回指标对象的地址;完成上述步骤,完成读取保存有指标根/子节点的数据信息的文件,获得指标根/子节点的数据信息的全过程。
9.根据权利要求7所述的方法,其特征在于,所述读取保存有计算函数的函数关系的数据信息的文件,获得计算函数的函数关系的数据信息的步骤,包括从计算函数的函数关系的数据信息的文件中的二进制字段中读入计算方法; 将计算方法写入到动态库文件中;采用hashjnap的存储方式,建立指标对象的名称与指标对象地址的映射关系,获得指标对象的名称与指标对象的地址的映射关系;若在对象容器传入指标对象的名称,则对象容器快速返回指标对象的地址;通过调用Eval函数的方式,针对指标对象的最后一行代码,调用计算函数的函数关系,获得计算函数的函数关系的数据信息。
10.根据权利要求6所述的方法,其特征在于,所述通过调用Eval函数的方式,针对根节点进行解析,获得各项指标的数值的步骤,包括通过调用Eval函数的方式,针对一个根节点进行递归调用解析,获得每个根节点指标的数值;通过调用Eval函数的方式,针对每个根节点相对应的其余根节点进行递归调用解析, 获得每个根节点相对应的其余根节点指标的数值;对上述每个根节点指标的数值及上述每个根节点相对应的其余根节点指标的数值进行汇总,获得各项指标的数值。
全文摘要
本发明提供了一种实现解决具有复杂计算关系的指标计算模型的方法,包括采用通过树形结构计算关系的方式,建立指标计算模型,获得用户自定义的指标计算模型;采用通过gigabase面向对象数据库保存指标间的树形结构的方式,对用户自定义的指标计算模型进行保存,获得用户自定义的指标计算模型;通过TinyC编译器,将用户用C语言编写的自定义的指标的计算关系,编译成DLL文件并对所述DLL文件进行保存,获得保存有计算函数的函数关系的数据信息文件;解析获得的用户自定义的指标计算模型并计算各项指标,获得各项指标的数值;该方法能够给用户提供一个简单、快速的计算模型来解决复杂的计算关系。
文档编号G06F17/50GK102393868SQ20111032251
公开日2012年3月28日 申请日期2011年10月21日 优先权日2011年10月21日
发明者李伟 申请人:克拉玛依红有软件有限责任公司