龙 龙丹 Unregistered / Unconfirmed GUEST, unregistred user! 2000-10-20 #3 还是用成品吧。 自己做的话,得有心理准备,可能要花几周—几月。
D devuser Unregistered / Unconfirmed GUEST, unregistred user! 2000-10-20 #4 是要自己开发通用软件吗?还是为一个单位而作,如果是前者还有必要努力。如果是后者就算拉
R Riantwin Unregistered / Unconfirmed GUEST, unregistred user! 2000-10-21 #5 请参考电子工业出版社出版的王小华编著的《Delphi5高级应用程序设计》(书名可能不确切, 此书与重庆大学伍俊良教授所编著的关于Delphi5的书是同一套),里面介绍了用堆栈的方法实现 计算公式。 大体方法如下:(我已购买此书,没有完全看明白) 建立一数据库,其中一字段为备注型。 将计算公式保存在此字段中。(设计一程序实现计算公式生成和检测) 按行取出备注字段内容,判断+、-、*、/,把计算字段,如基本工资、奖金等和运算符号 压入堆栈,然后取出计算。 实现方法略嫌繁琐,我试图用以下方法实现: 一、将计算公式直接设计在程序中。灵活性不强,更新麻烦。 二、把计算公式保存在数据库字段中,用SQL语句计算。 不论那种方法都不理想,希望哪位高手能提出更好的方法。
请参考电子工业出版社出版的王小华编著的《Delphi5高级应用程序设计》(书名可能不确切, 此书与重庆大学伍俊良教授所编著的关于Delphi5的书是同一套),里面介绍了用堆栈的方法实现 计算公式。 大体方法如下:(我已购买此书,没有完全看明白) 建立一数据库,其中一字段为备注型。 将计算公式保存在此字段中。(设计一程序实现计算公式生成和检测) 按行取出备注字段内容,判断+、-、*、/,把计算字段,如基本工资、奖金等和运算符号 压入堆栈,然后取出计算。 实现方法略嫌繁琐,我试图用以下方法实现: 一、将计算公式直接设计在程序中。灵活性不强,更新麻烦。 二、把计算公式保存在数据库字段中,用SQL语句计算。 不论那种方法都不理想,希望哪位高手能提出更好的方法。
B BaKuBaKu Unregistered / Unconfirmed GUEST, unregistred user! 2000-10-21 #6 在下做过一个这样的东东,比较复杂,所以不可能讲得太仔细,只能告诉你怎样做: Riantwin 大虾说的只是简单的表达式计算,包括 Chenlili 说的《数据结构》,实际上 不能满足要求,比如 if 语句的分析(if 总经理 then 2000 else if 职员 then 1000 else ...)。 这个问题属于《编译原理》的范畴,可以把它看作是一个小的解释器。 第一步是词法分析,进行分词; 然后是简单的语法分析,算符优先也好,其他也好,反正要检查语法错误; 第三步生成中间形式; 最后调用预先定义好的过程计算子函数,进行解释执行。 方法就是这样的,至于实现就要看你自己了。 OK ? From: BaKuBaKu
在下做过一个这样的东东,比较复杂,所以不可能讲得太仔细,只能告诉你怎样做: Riantwin 大虾说的只是简单的表达式计算,包括 Chenlili 说的《数据结构》,实际上 不能满足要求,比如 if 语句的分析(if 总经理 then 2000 else if 职员 then 1000 else ...)。 这个问题属于《编译原理》的范畴,可以把它看作是一个小的解释器。 第一步是词法分析,进行分词; 然后是简单的语法分析,算符优先也好,其他也好,反正要检查语法错误; 第三步生成中间形式; 最后调用预先定义好的过程计算子函数,进行解释执行。 方法就是这样的,至于实现就要看你自己了。 OK ? From: BaKuBaKu
小 小菜 Unregistered / Unconfirmed GUEST, unregistred user! 2000-10-27 #7 去看一看清华大学出版社的<PASACL程序设计习题与选解>(郑启华)第十二章第2题, 自己修改一下该能用,我就是这么干的.
J jqw Unregistered / Unconfirmed GUEST, unregistred user! 2000-10-27 #8 其实,用不着数据结构之类的东东 假设公式: a*b+c/d-e tmpquery: query.sql.text:='select '+inttostr(a)+'*'+inttostr(b)+'+'+ inttostr(c)+'/'+inttostr(d)+'-'+inttostr(e) from dual' //dual 可以是系统中的任何一个表 结果:=query.fields[0].asinteger; 更进一步,作一个通用的,只要判断符号:+,-,... 产生一个sql,即可
其实,用不着数据结构之类的东东 假设公式: a*b+c/d-e tmpquery: query.sql.text:='select '+inttostr(a)+'*'+inttostr(b)+'+'+ inttostr(c)+'/'+inttostr(d)+'-'+inttostr(e) from dual' //dual 可以是系统中的任何一个表 结果:=query.fields[0].asinteger; 更进一步,作一个通用的,只要判断符号:+,-,... 产生一个sql,即可
H hhzh426 Unregistered / Unconfirmed GUEST, unregistred user! 2000-10-27 #9 把公式作为字符串传递给sql查询语句: select a+b as result from table1 where ....(a,b为字段名) 也可以:str1:='25+3*(18-5*4)' 'select '+str1+' as result'; 用这种方法不能定义太复杂的计算公式。
把公式作为字符串传递给sql查询语句: select a+b as result from table1 where ....(a,b为字段名) 也可以:str1:='25+3*(18-5*4)' 'select '+str1+' as result'; 用这种方法不能定义太复杂的计算公式。