XML+javascript+ACCESS,制作一个个人记帐本

原创 2004年08月12日 23:28:00

前面已经完成了数据库的建立,增加记录,修改记录以及简单的统计功能。

下面的工作是添加查找功能,增加统计功能

昨天晚上一不小心按了power键,哎!写的全没了。不过还好,写的不多。

现在已经实现了上述想实现的功能了。通过些代码的编写,学会了VB中对于字符串

操作的一些函数,挺好完的。下是从网上找到的一些资料:

 

VBscript中的字符串函数

在VBscript中,系统提供了大量的字符串函数来处理有关字符串的事情。在 Javascript 中,系统为String对象提供了许多方法,而字符串变量可以不用附加说明就使用这些方法,使对字符串的处理能力更加强大。下面我们分批介绍这些函数和方法。

目标任务1  演示子字符串的截取,字符串的截空,子串的定位等。

关键字 left, right, mid, space, trim, instr, len

代码

dim Mystr, Myword,Mypos, BR
Mystr = "The built-in objects are special because they are built into ASP pages and do not need to be created before you can use them in scripts."
BR = "

"
document.write( "Mystr=" &chr(34) & Mystr & chr(34) &BR)
document.write("字符串Mystr的长度是" & len(Mystr) & BR)
document.write("7位左子串是" & left(Mystr,7) &BR)
document.write("8位左子串是" & right(Mystr,8) &BR)
document.write("从第5位开始的12个字符是" & mid(Mystr, 5, 12) &BR)
Myword = space(3) & "hello" & space(2)
document.write(chr(34) & Myword &chr(34))
document.write("这个字符串的的长度是" & len(Myword) &BR)
document.write("截去前导空格后为:" & chr(34) &Ltrim(Myword)&chr(34) &BR)
Myword = "OBJECT"
document.write ("The Myword =" & chr(34)&Myword&chr(34) )
Mypos = Instr(Mystr,Myword)
if Mypos=0 then
document.write(" Myword不是它的子串")
else
document.write(Myword & "是子串,第一个开始于" & Mypos)
end if
document.write BR
Myword = LCase(Myword)
Mypos = Instr(Mystr,Myword)
if Mypos=0 then
document.write(" Myword不是它的子串"&BR)
else
document.write(Myword & "是子串,第一个开始于" & Mypos)
end if

代码注释

这段代码演示了VBscript中的许多字符串函数的用法,用左子串left,右子串right,任意子串mid,生成空格字符串space,截去前导空格Ltrim,截去尾部空格Rtirm,截去前后空格tirn,字符串长度len,判断子字符串的存在性和出现的位置Instr。大小写转换Ucase 和Lcase,把ASCII码转换为字符的函数chr。

mid函数从字符串中返回指定数目的字符,语法:Mid(string, start[, length])
InStr函数返回子串在主字符串中第一次出现的位置,如子串不存在则返回0。语法:
    InStr([start, ]string1, string2[, compare])
省略开始位置则从开始,compare=0 or 1,表示有二进制比较(0)或进行文本比较(1),缺省为二进制比较。详见语法参考。

其它函数的语法从例程中一目了然,不再赘述。

 

现在基本上可以用了,不过在查询的地方还有点问题,已经在CSDN上问了。等待回答。

现在问题已经有人解答,并得到了解决。原来通配符搞错了,ASP不认“*”,应该用“%”

查看

后面想想还要做些什么:

1,能按月统计,总的支出,总的收入,以及节余

2,最好能做成图表的样子,能进行多个月的对比。

第一个需求已经完成:)

首先把表格的结构搞清楚。先用fireworks作几张图片:

一个是Y轴,有效长度为480,最大值为4000,上面标有3000,2000,1000,0的刻度。

然后是几个表示收,支,余的小柱子,随便选了颜色,高度都为100。

原理很简单,以2000为单位1(图片高度为240,与坐标轴对应),不同的数字占2000的比例然后乘以240,

得到的就是相应柱子的高度。

将公用的地方提取出来:

不管怎么样,连续地画三个柱子是每一个生成图表必不可少的部分,所以先将这部份提取出来:

function draw(inbox,outbox)
 dim htm
 dim h1,h2,h3

 htm = htm & "

green_v.gifyellow_v.gifblue_v.gif:" & inbox & "
" & ":" & outbox & "
:" & Cint(inbox)-Cint(outbox) &"

说明:参数inbox和outbox分别表示收入和支出的金额,胡乱起的名字:)

然后将画表头、表尾的代码再提取出来:

'打图表表头及Y轴
function drawheader()
 dim htm
 htm = htm & "
"
 htm = htm & "y.gif

 

function drawbottom(m1,m2)
 dim htm
 dim i
 htm = "
    
"
 else
 '多个月
  for i=0 to Cint(m2)-Cint(m1)
   htm = htm & "
   
"
 end if
 response.write(htm)
end function

说明:参数m1,m2表示前后两个月。如果是单月,则m1=m2。根据这个来决定表尾有几个td

OK,材料都有了,就是往上面堆了。下面是一个通过以上几个函数画出某一个时段的图表的函数:

 

'画某一个时段的图表
function drawatimezone()
 set rs = server.createobject("adodb.recordset")
 dim sql
 dim y1,m1,y2,m2,time1,time2
 dim inbox,outbox
 inbox = "0"
 outbox = "0"
 y1 = request("year1")
 m1 = request("month1")
 d1 = request("day1")
 y2 = request("year2")
 m2 = request("month2")
 d2 = request("day2")
 time1 = y1 & "-" & m1 & "-" & d1
 time2 = y2 & "-" & m2 & "-" & d2
 sql = "select * from myCount where CDate(time)>=CDate('" & time1 & "') and CDate(time) rs.open sql,cnn,1,3
 if not rs.eof then
  while not rs.eof
   if rs(2) = 0 then
    inbox = Cint(inbox)+Cint(rs(4))
   else
    outbox = Cint(outbox)+Cint(rs(4))
   end if
  rs.movenext
  wend
  
 else
 end if
 response.write("
以下是从" & time1 & "到" & time2 & "间的收支统计图表

")
 call drawheader()
 call draw(inbox,outbox)
 call drawbottom(m,m)
end function
当时写的时候思路很清晰,不过就怕日后再看的时候会晕。不管它,先记下来再讲!
收藏助手
不良信息举报
您举报文章:XML+javascript+ACCESS,制作一个个人记帐本
举报原因:
原因补充:

(最多只允许输入30个字)