编程心得
我在编写财务软件时曾遇到过一些难点和问题,在解决这些问题的过程中有一点,我在里写出来,愿与各位朋友分享,同时也希望得到各位的指点。
我的一些在中小企业做会计工作的朋友往往会对我说: 他们所用的财务软件不太好用。我问他们是哪家的软件时,而他们告诉我的都是些著名的软件公司。我很纳闷。说实在话,
对财务我并非内行,于是我应邀去了他们公司现场观看了他们操作,结果我发现:
1、 他们所用的软件都是著名财务软件,功能强大,实应性强,技术是不容质疑的。
2、 这些软件面向面宽,功能齐全,自然选项就多,操作复杂。
3、 其实对许多中小企业来说,很多选项是不需要的。
在这些朋友的鼓动和激励下我考虑为中小企业设计一款财务软件。
基本流程我参照了航天信息公司的同类软件,汲取了他们的优点:
在编写凭证录入的模块中比较难的问题有三个:
1、金额制和金额数量制两中模式的转换;
2、第二个难点就是显示合计的大写;(这么简单的问题啊,见笑了);
3、第三个难点是用树形结构显示科目供选择;
这三个问题的解决我贴出来吧,与朋友交流,并希望得到指导。
我是用stringgrid 控件作为父类 增加了几个属性和方法,其中利用了Canvas 对象,来解决第一个问题的。详细的过程我就不多说了,只要有一点Delphi基础应该不难。
解决第二个问题我写了三个函数,我把源码贴出来吧:
var
sdx:string;
begin
if s='1' then
sdx:='壹'
else if s='2' then
sdx:='贰'
else if s='3' then
sdx:='叁'
else if s='4' then
sdx:='肆'
else if s='5' then
sdx:='伍'
else if s='6' then
sdx:='陆'
else if s='7' then
sdx:='柒'
else if s='8' then
sdx:='捌'
else if s='9' then
sdx:='玖'
else if s='0' then
sdx:='零';
result:=sdx;
end;
//-------------------------------------------
function TF_publicuse.wz(j:integer):string;
var
swz:string;
begin
if j=0 then
swz:='分'
else if j=1 then
swz:='角'
else if j=2 then
swz:='元'
else if j=4 then
swz:='拾'
else if j=5 then
swz:='百'
else if j=6 then
swz:='千'
else if j=7 then
swz:='万'
else if j=8 then
swz:='拾'
else if j=9 then
swz:='百'
else if j=10 then
swz:='千'
else if j=11 then
swz:='亿';
result:=swz;
end;
function TF_publicuse.DXWZ(s:string):string;
var
s1,s2 :string;
n,j:integer;
strdx:string;
begin
n:=length(s);
for j:=0 to n-1 do
begin
s1:=midstr(s,n-j,1);
if j>=7 then
begin
if (j=7) and (s1='0') then
strdx:=wz(j)+strdx
else if (j>7) and (s1='0') and (s1=s2) then
strdx:=strdx
else if (j>7) and (s1='0') and (s1<>s2) then
strdx:=dx(s1)+strdx
else
strdx:=dx(s1)+wz(j)+strdx;
end else
begin
if (j=0) and (s1='0') then
strdx:='整'
else if (j=3) and (s1='0') then
strdx:=strdx
else if (s1='0') and (s1=s2) then
strdx:=strdx
else if (s1='0') and (s1<>s2) then
strdx:=dx(s1)+strdx
else
strdx:=dx(s1)+wz(j)+strdx;
end;
s2:=s1;
end;
result:=strdx;
end;
今天就交流到此吧,下次再续(下次将交流现金流量表的编写)。
[ 本帖最后由 wangchatian 于 2011-9-10 17:08 编辑 ]