自定义公式(100分)

  • 主题发起人 主题发起人 plwei
  • 开始时间 开始时间
P

plwei

Unregistered / Unconfirmed
GUEST, unregistred user!
我想做一个工资管理系统,请问自定义公式应该怎样做?
 
找本数据结构的书看看就知道了。
 
还是用成品吧。
自己做的话,得有心理准备,可能要花几周—几月。
 
是要自己开发通用软件吗?还是为一个单位而作,如果是前者还有必要努力。如果是后者就算拉
 
请参考电子工业出版社出版的王小华编著的《Delphi5高级应用程序设计》(书名可能不确切,
此书与重庆大学伍俊良教授所编著的关于Delphi5的书是同一套),里面介绍了用堆栈的方法实现
计算公式。
大体方法如下:(我已购买此书,没有完全看明白)
建立一数据库,其中一字段为备注型。
将计算公式保存在此字段中。(设计一程序实现计算公式生成和检测)
按行取出备注字段内容,判断+、-、*、/,把计算字段,如基本工资、奖金等和运算符号
压入堆栈,然后取出计算。

实现方法略嫌繁琐,我试图用以下方法实现:
一、将计算公式直接设计在程序中。灵活性不强,更新麻烦。
二、把计算公式保存在数据库字段中,用SQL语句计算。

不论那种方法都不理想,希望哪位高手能提出更好的方法。
 
在下做过一个这样的东东,比较复杂,所以不可能讲得太仔细,只能告诉你怎样做:
Riantwin 大虾说的只是简单的表达式计算,包括 Chenlili 说的《数据结构》,实际上
不能满足要求,比如 if 语句的分析(if 总经理 then 2000 else if 职员 then 1000 else ...)。
这个问题属于《编译原理》的范畴,可以把它看作是一个小的解释器。
第一步是词法分析,进行分词;
然后是简单的语法分析,算符优先也好,其他也好,反正要检查语法错误;
第三步生成中间形式;
最后调用预先定义好的过程计算子函数,进行解释执行。
方法就是这样的,至于实现就要看你自己了。
OK ?
From: BaKuBaKu
 
去看一看清华大学出版社的<PASACL程序设计习题与选解>(郑启华)第十二章第2题,
自己修改一下该能用,我就是这么干的.
 
其实,用不着数据结构之类的东东

假设公式:
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,即可
 
把公式作为字符串传递给sql查询语句:
select a+b as result from table1 where ....(a,b为字段名)
也可以:str1:='25+3*(18-5*4)'
'select '+str1+' as result';
用这种方法不能定义太复杂的计算公式。
 
多人接受答案了。
 
后退
顶部