本人最近在做一个小的报价系统,是一个涉及到四则混合运算的价格预算系统。
用access做了个数据表,所有的数据放一个表中,用ado连接到表,用dbgrid显示数据,每个dbgrid中的列对应一个dbedit输入框,用相对应的dbedit输入数据。
这个表包含下面一些列
产品代码,产品名称, 固定条件列:如电费,水费,材料单价,机器折旧,每个工序的材料费(这个工序要用到的材料的大单价,数量,材料合计),制造费用(如工人工资,补贴),还有合计列(当然不仅仅是这些列)这里只是举些例子,手动在dbedit中输入数据后,小计每个工序的价格,然后是各个工序小计价格的总合计,然后输入税率,利润率等一些条件,计算出一个报价并保存,显示在dbgrid中。
本人刚学的delphi,具体的计算代码,不知道采用什么方法好,是用程序计算还是用数据库计算?要注意什么问题呢?
比如如下的计算公式:色母(元/模)=产品净重*色参比率/100*色母单价/1000000应该怎么实现呢,还有更复杂的计算公式,不过都是混合4则运算。
能否请大家给点思路,给点实例。多谢!
用access做了个数据表,所有的数据放一个表中,用ado连接到表,用dbgrid显示数据,每个dbgrid中的列对应一个dbedit输入框,用相对应的dbedit输入数据。
这个表包含下面一些列
产品代码,产品名称, 固定条件列:如电费,水费,材料单价,机器折旧,每个工序的材料费(这个工序要用到的材料的大单价,数量,材料合计),制造费用(如工人工资,补贴),还有合计列(当然不仅仅是这些列)这里只是举些例子,手动在dbedit中输入数据后,小计每个工序的价格,然后是各个工序小计价格的总合计,然后输入税率,利润率等一些条件,计算出一个报价并保存,显示在dbgrid中。
本人刚学的delphi,具体的计算代码,不知道采用什么方法好,是用程序计算还是用数据库计算?要注意什么问题呢?
比如如下的计算公式:色母(元/模)=产品净重*色参比率/100*色母单价/1000000应该怎么实现呢,还有更复杂的计算公式,不过都是混合4则运算。
能否请大家给点思路,给点实例。多谢!
如果是动态的字符串,运行时才确定的,可以做成sql语句让数据库来完成——否则需要自己实现一个表达式(公式)字符串的计算功能
sql 语句计算也是可以的
最后,自己 也可以搞定,就那些运算符,挨个提取出来,并把变量提取出来,自己计算
var
i,j,skip:integer;
begin
list.Clear;
j := 1;
skip := 0;
for i := 1 to Length(exp) do
begin
if exp[i] in ['+','-','(',')','*',':','/'] then
begin
if i = j then
list.Add(Copy(exp,j,i-j+1))
else
begin
list.Add(Copy(exp,j,i-j));
list.Add(exp[i]);
end;
j := i+1;
end;
end;
list.Add(Copy(exp,j,i-1));
end;
我把目前做的程序发上来,请大家指点一下。
目前我只能做到dbedit中输入数据并在dbgrid中显示,用DBNavigator1控制。现在要实现计算,
比如色母=q21*s21/100i21/1000000 色粉=j21/1000*s21/100*(q21*v21+r21),而注塑材料费中的
材料小计=((Q21+R21/V21)*(1-Y21/100)*K21/1000000+(Q21+R21/V21)*Y21/100*X21/1000000+T21+U21)*(1+W21/100)+Z21*AA21+AB21*AC21+AD21。
该如何实现才是最佳方案呢?
这东西标准处理方式是自己写个parser,然后用逆波兰表达式求值,现在的程序员水平都烂到什么份上了
列如,色母价格的合计=q21*s21/100i21/1000000。