Board logo

标题: [原创] 消费记录程序(hta+xml) [打印本页]

作者: youxi01    时间: 2008-10-2 19:11     标题: 消费记录程序(hta+xml)

经过三天的努力奋斗,终于完成了消费记录程序(注:这个程序虽然在以前已经写过,但是“内核”已完全不同以前了,包括界面,包括数据读取、保存方式等等。)
1、程序介绍:
'/*/////////////////////////////////////////////////////////////////////////////////////
'Intro  消费记录:支持添加、删除、查询、保存消费记录
'FileName 消费记录器
'Author  2laoshi
'Version  ver1.1
'Web  http://www.2laoshi.cn
'MadeTime 2008-9-29~2008-10-2

'开发工具:notepad.exe
'文件大小:14K(另一版本18K,增加了自动分页显示)
'运行平台:WinNT
'//////////////////////////////////////////////////////////////////////////////////////////

2、运行界面:
[attach]415[/attach]

[attach]416[/attach]

3、下载:
[attach]417[/attach]

4、源代码:
  1. <!--////////程序说明/////////====
  2. Intro  消费记录:支持添加、删除、查询、保存消费记录
  3. FileName 消费记录器
  4. Author  2laoshi
  5. Version  ver1.1
  6. Web  http://www.2laoshi.cn
  7. MadeTime 2008-9-29~2008-10-2
  8. <!--//////////设置hta格式////////////-->
  9. <HTA:APPLICATION
  10. SCROLL="no"
  11. MaximizeButton="no"
  12. MinimizeButton="no"
  13. INNERBORDER="no"
  14. SHOWINTASKBAR="yes"
  15. SINGLEINSTANCE="yes"
  16. BORDER="thin"
  17. />
  18. <meta http-equiv="Content-Type" content="text/html; charset=gb2312">
  19. <!--//////////样式////////////-->
  20. <style type="text/css">
  21. a:link {color: blue}
  22. a:visited {color: blue}
  23. body  {background: #EEEEEE}
  24. fieldset {border :1px solid #BEBEBE;font-family:宋体;}
  25. legend {color:red;font-size:14px}
  26. #table {border:none;width:100%;background: #EEEEEE;}
  27. .header{text-align=center;background-color:#006699;font-size:13px;
  28.          font-family: "隶书";color:#F2F3F7;padding:2px;line-height:22px;font:bold;}
  29. .top{text-align:center;vertical-align: middle;font-size:14px;
  30.          font-family: "宋体";color:red;font:bold;padding:2px;line-height:22px;}
  31. .row_model{text-align:center;vertical-align: middle;background-color:#ccd2FF;font-size:12px;
  32.          padding-top:4px;height:20px;COLOR:red}
  33. .row_add{text-align:center;vertical-align: middle;background-color:#ccd2de;font-size:12px;
  34.          padding-top:4px;height:20px;}
  35. .new_row_add{text-align:center;vertical-align: middle;background-color:#ccd2ad;font-size:12px;padding-top:4px;height:20px;color:blue;cursor:hand;}
  36. .td{border:1 solid #BEBEBE;}
  37. .text{text-align:center;vertical-align: middle;}
  38. .proginfo{font-size:12px;color:#333333;font-family: "隶书";}
  39. .div_button{text-align:center;width:100%;border:1px solid #ccc;
  40.           background-color:#EEEEEE;font-size:12px;color:#333333;
  41.           padding:3px 2px;margin:2px;line-height:20px;}
  42. .bottom{text-align:center;font-size:14px;color:#333333;font-family: "隶书";}
  43. .div_class{WIDTH:100%; HEIGHT: 323; BACKGROUND-COLOR: transparent; overflow-y: scroll; scrollbar-shadow-color: #ffffff; scrollbar-highlight-color: #ffffff; scrollbar-face-color: #d9d9d9; scrollbar-3dlight-color: #d9d9d9; scrollbar-darkshadow-color: #d9d9d9; scrollbar-track-color: #ffffff; scrollbar-arrow-color: #ffffff;}
  44. .button {padding:1px;text-align:center;border:0;background-color:#eee;height:23px;cursor:pointer}
  45. </style>
  46. <!--//////////函数区////////////-->
  47. <script language="vbscript">
  48. ON ERROR RESUME NEXT
  49. set http=createobject("Msxml2.ServerXMLHTTP")
  50. set fso=createobject("Scripting.FileSystemObject")
  51. Select_List=""
  52. Sub Window_onLoad
  53. window.resizeTo 550,445
  54. ileft=(window.screen.width-550)/2
  55. itop=(window.screen.height-445)/2      
  56. window.moveTo ileft,itop                 
  57. document.all.namedItem("CYY").value=year(date())
  58. document.all.namedItem("CMM").value=month(date())
  59. document.all.namedItem("CDD").value=day(date())
  60. CheckFile("data.xml")
  61. End Sub
  62. Function CheckFile(filespec)
  63. if not fso.fileexists(filespec) then
  64. fso.createtextfile(filespec)
  65. CreateXMLFile(filespec)
  66. else
  67. ReadXMLFile(filespec)
  68. end if
  69. End Function
  70. Function CreateXMLFile(filespec)
  71. Const ForReading=1,ForWriting=2,ForAppending=8
  72. set f=fso.opentextfile(filespec,2,true)
  73. f.writeline("<?xml version='1.0' encoding='gb2312'?>")
  74. f.writeline("<root><data>")
  75. f.writeline("</data></root>")
  76. End Function
  77. Function ReadXMLFile(filespec)
  78. set objDom=CreateObject("microsoft.xmldom")
  79. objDom.load("data.xml")
  80. Set Node=objDom.documentElement.selectNodes("//data/list")
  81. for each element in Node
  82. CStype=element.selectsinglenode("type").text
  83. CSmoney=element.selectsinglenode("money").text
  84. CSdate=element.selectsinglenode("date").text
  85. id=element.getAttribute("id")
  86. addRow id,CSmoney,CStype,CSdate,"正常"
  87. Add_select_item(CStype)
  88. next
  89. set oXML=nothing
  90. End Function
  91. Function getID()
  92. randomize()
  93. getID=int(rnd()*10000)&int(rnd()*10000)&int(rnd()*10000)
  94. End Function
  95. Function addItem(id,mm,tt,dd)
  96. set objDom=CreateObject("microsoft.xmldom")
  97. objDom.load("data.xml")
  98. Set Node=objDom.documentElement.selectsingleNode("data")
  99. Set newNode=objDom.createElement("list")
  100. Node.appendChild newNode
  101. newNode.setAttribute "id",id
  102. Set childNode1=objDom.createElement("money")
  103. childNode1.text=mm
  104. Set childNode2=objDom.createElement("type")
  105. childNode2.text=tt
  106. Set childNode3=objDom.createElement("date")
  107. childNode3.text=dd
  108. newNode.appendChild childNode1
  109. newNode.appendChild childNode2
  110. newNode.appendChild childNode3
  111. objDom.save("data.xml")
  112. set objDom=nothing
  113. End Function
  114. Function delItem(id)
  115. set objDom=CreateObject("microsoft.xmldom")
  116. objDom.load("data.xml")
  117. Set Node=objDom.documentElement.selectNodes("//data/list")
  118. for each element in Node
  119. nodeid=element.getAttribute("id")
  120. if nodeid=id then
  121.          element.parentNode.removechild element
  122. end if
  123. next
  124. objDom.save("data.xml")
  125. set objDom=nothing
  126. End Function
  127. Function addRow(id,cnum,ctype,cdate,intro)   
  128. set objTable=document.all.namedItem("mytable")      '根据ID获取对象表格
  129. set newrow = objTable.insertRow()                   '插入一行
  130. newrow.className="row_add"                        '设置该行的样式;
  131. newrow.onmouseover=getRef("change_bgcolor")
  132. newrow.onmouseout=getRef("back_bgcolor")
  133. newrow.onclick=getRef("chooseThis")
  134. var="#"&cnum&"#"&ctype&"#"&cdate&"#"&intro      
  135. str=split(var,"#")
  136. str(0)="<input type=checkbox id="&id&">"
  137. for i=0 to 4
  138.    set newcell=newrow.insertCell()                  '插入单元格,并设置单元格的值;
  139.    newcell.innerhtml=str(i)
  140. next
  141. End Function
  142. Function delRow(num)
  143. End Function
  144. Function SaveToFile()
  145. RowNum=mytable.rows.length-1
  146. for i=1 to RowNum
  147.   if mytable.rows(i).cells(4).innertext="待添加" then
  148.   id=mytable.rows(i).cells(0).children(0).id
  149.   mm=mytable.rows(i).cells(1).innertext
  150.   tt=mytable.rows(i).cells(2).innertext
  151.   dd=mytable.rows(i).cells(3).innertext
  152.   addItem id,mm,tt,dd
  153.   end if
  154.   if mytable.rows(i).cells(4).innertext="待删除" then
  155.   id=mytable.rows(i).cells(0).children(0).id
  156.   delItem id
  157.   end if
  158. next
  159. window.location.reload
  160. End Function
  161. Function tb_del_onclick()
  162. strHTML="<font color=Green title=点击取消删除  style='cursor: hand' onclick="
  163. strHTML=strHTML&"me.parentelement.innerHTML='正常'>待删除</font>"
  164. RowNum=mytable.rows.length-1
  165. for i=1 to RowNum
  166.   if mytable.rows(i).cells(0).children(0).checked=true then
  167.   mytable.rows(i).cells(4).innerHTML=strHTML
  168. end if
  169. next
  170. End Function
  171. Function tb_add_onclick()
  172. checkValue()
  173. if tipinfo.innertext="结果输出" then
  174. ccdate=CYY.value&"-"&CMM.value&"-"&CDD.value
  175. strHTML="<font color=red title=点击取消添加 style='cursor: hand' onclick="
  176. strHTML=strHTML&"mytable.deleterow(me.parentelement.parentelement.rowindex)>待添加</font>"
  177. addRow getid,cnum.value,ctype.value,ccdate,strHtml
  178. Add_select_item(ctype.value)
  179. end if
  180. End Function
  181. Function tb_query_onclick()
  182. msgbox "此项功能停止开发!",vbinformation+0,"温馨提示"
  183. End Function
  184. Function RegExpTest(patrn,strng,info)      '建立正则表达式
  185.     Dim regEx, retVal
  186.     Set regEx = New RegExp
  187.          regEx.Pattern = patrn
  188.          regEx.IgnoreCase = False
  189.          retVal = regEx.Test(strng)
  190.     If not retVal Then
  191.             RegExpTest="<font color=red>Error:</font>"&info
  192.     End If
  193. End Function
  194. Function checkValue()
  195. CL="<font color=green>"
  196. str=CL&"『年份』应输入以2开头的四位整数</font></br>"
  197. strHTML="<legend>结果输出</legend>"
  198. strHTML=strHTML&RegExpTest("^[2]\d{3}$",CYY.value,str)
  199. strHTML=strHTML&RegExpTest("^[1-9]\d{0,}$",Cnum.value,CL&"『金额』应为100000以内正整数</font>")
  200. if len(Ctype.value)>7 or len(Ctype.value)<1 then
  201.    strHTML=strHTML&CL&"<font color=red>Error:</font>『消费项目』长度不超过6字符</font>"
  202. end if
  203. Tipinfo.innerhtml=strHTML
  204. End Function
  205. Function CT()
  206. dim CTT,Tmoney,strT,strM,strY,showFlag,CCtype,DDstr,money,CCYY,CCMM,strHTML
  207. CTT=0
  208. Tmoney=0
  209. if cntype.value="all" then
  210. CTT=CTT+1
  211. strT=""
  212. else
  213. strT="在 <font color=red>"&cntype.value&"</font> 上"
  214. end if
  215. if cnmm.value="all" then
  216. CTT=CTT+1
  217. strM=""
  218. else
  219. strM="<font color=Green>"&cnmm.value&"</font> 月"
  220. end if
  221. if cnyy.value="all" then
  222. CTT=CTT+1
  223. strY=""
  224. else
  225. strY="<font color=Blue>"&cnyy.value&"</font> 年 "
  226. end if
  227. for i=1 to mytable.rows.length-1
  228. showFlag=CTT
  229. CCtype=mytable.rows(i).cells(2).innertext
  230. DDstr=split(mytable.rows(i).cells(3).innertext,"-")
  231. money=int(mytable.rows(i).cells(1).innertext)
  232. CCYY=DDstr(0)
  233. CCMM=DDstr(1)
  234. if cntype.value=CCtype then showFlag=showFlag+1
  235. if cnmm.value=CCMM then showFlag=showFlag+1
  236. if cnyy.value=CCYY then showFlag=showFlag+1
  237. if showFlag>=3 then
  238.   mytable.rows(i).style.display="block"
  239.   Tmoney=Tmoney+money
  240. else
  241.   mytable.rows(i).style.display="none"
  242. end if
  243. next
  244. strHTML="<legend>结果输出</legend></br>"
  245. strHTML=strHTML&strY&strM&strT&" 花费总额为: <font color=Green>"&Tmoney&"</font> 元"
  246. Tipinfo.innerhtml=strHTML
  247. End Function
  248. Function Add_select_item(text)
  249. if instr(Select_List,text)=0 then
  250. Select_List=Select_List&","&text
  251. set obj=document.createElement("option")
  252. obj.value=text
  253. obj.text=text
  254. cntype.add obj
  255. end if
  256. End Function
  257. Function selectall_onclick()
  258. if selectall.checked then
  259. selectall.title="全不选"
  260. else
  261. selectall.title="全选"
  262. end if
  263. for i=1 to mytable.rows.length-1
  264. if mytable.rows(i).style.display<>"none" then
  265.   mytable.rows(i).cells(0).children(0).checked=selectall.checked
  266. end if
  267. next
  268. End Function
  269. Function change_bgcolor()
  270. me.className="new_row_add"
  271. me.title="点击(取消)选择此项"
  272. End Function
  273. Function back_bgcolor()
  274. me.className="row_add"
  275. End Function
  276. Function chooseThis()
  277. if me.cells(0).children(0).checked=true then
  278. me.cells(0).children(0).checked=false
  279. else
  280. me.cells(0).children(0).checked=true
  281. end if
  282. End Function
  283. </script>
  284. <!--//////////版面设计区////////////-->
  285. <title>消费记录程序</title>
  286. <body topmargin="2" rightmargin="0" leftmargin="0" oncontextmenu=self.event.returnvalue=false>
  287. <table id="table" cellpadding="3" cellspacing="5">
  288.     <tr>
  289.       <td width="75%" valign="top-center" rowspan=3 class="td">
  290. <TABLE ID="header" cellSpacing=1  cellPadding=0 width="100%" align=center border=0>
  291. <TR>
  292. <TD class=top colSpan=5 height=20">
  293. <select id=cnyy onchange="CT()">   
  294. <option value="all">全部</option>  
  295. <option value="2008">2008</option>   
  296. <option value="2009">2009</option>
  297. </select>
  298. 消费一览表</TD>
  299. <TR>
  300. <TD width=81 class="header"><input type=checkbox id=selectall title="全选"></TD>
  301. <TD width=121 class="header">金额</TD>
  302. <TD width=100 class="header">
  303. <div style="position:relative;" title="支持下拉查询">   
  304. <span style="margin-left:59px;width:16px;overflow:hidden;margin-top:-10;height:18">   
  305. <select style="width:75px;margin-left:-57px;" id=cntype onchange="CT()">
  306.         <option value="all">全部</option>
  307. </select></span>
  308.         <p style="width:60px;position:absolute;left:0px;margin-top:-3">消费项目</p>
  309. </div>
  310. </TD>
  311. <TD width=100 class="header">
  312. <div style="position:relative;" title="支持下拉查询">   
  313. <span style="margin-left:59px;width:16px;overflow:hidden;margin-top:-10;height:18">   
  314. <select style="width:75px;margin-left:-57px;" id=cnmm onchange="CT()">  
  315. <option value="all">全部</option>  
  316. <option value="1">一月</option>   
  317. <option value="2">二月</option>
  318. <option value="3">三月</option>   
  319. <option value="4">四月</option>
  320. <option value="5">五月</option>   
  321. <option value="6">六月</option>
  322. <option value="7">七月</option>   
  323. <option value="8">八月</option>
  324. <option value="9">九月</option>   
  325. <option value="10">十月</option>
  326. <option value="11">十一月</option>   
  327. <option value="12">十二月</option>
  328. </select></span>
  329.         <p style="width:60px;position:absolute;left:0px;margin-top:-3">消费日期</p>
  330. </div>
  331. </TD>
  332. <TD width=110 class="header">备注</TD>
  333. <TD width="20" class="header"></TD></TR></TABLE>
  334. <div class="div_class">
  335. <TABLE name="mytable" id="mytable" cellSpacing=1 cellPadding=0 width=100%>
  336. <TR title="这一行只是演示,所有数据不保存">
  337. <TD width=80 class="row_model"><input type=checkbox disabled></TD>
  338. <TD width=100 class="row_model">100000</TD>
  339. <TD width=150 class="row_model">赌博的下场</TD>
  340. <TD width=140 class="row_model">2008-10-30</TD>
  341. <TD width=100 class="row_model">正常(演示)</TD>
  342. </TABLE></div>
  343.       </td>
  344.       <td width="24%" height=120>
  345. <fieldset style="height=120;" class=proginfo id=Tipinfo>
  346. <legend>程序说明</legend>
  347.         本作品立足原作品,有较大改进:</br>
  348. 1.程序界面:优化控件布局,美化界面</br>
  349. 2.数据保存方式:以xml形式保存数据,更方便更安全</br>
  350. </fieldset>
  351.      </td>
  352.     </tr>
  353.     <tr>
  354.        <td height=42>
  355. <fieldset style="height:42;text-align:center;font-size=12px">
  356. <legend>消费设置
  357. </legend>
  358. <div style="position:relative;">
  359. <span style="margin-left:90px;width:18px;overflow:hidden;">  
  360. <select style="width:72px;margin-left:-57px" onchange="Ctype.value=me.value">   
  361. <option value="饮食">饮食</option>   
  362. <option value="娱乐">娱乐</option>   
  363. <option value="其它">其它</option>   
  364. </select></span>
  365.         <input name="Ctype" value="饮食" onmouseover=me.select style="width:58px;position:absolute;left:34px;" title="消费类型,可以自定义输入">
  366. <div style="position:absolute;left:4px;padding-top:3">项目:</div>
  367. </div>
  368. <input type=text size=4 name=CYY class=text title="年份,如:2008">-
  369. <input type=text size=1 name=CMM class=text title="月份,如:8">-
  370. <input type=text size=1 name=CDD class=text title="日期,如:8">
  371. 消费:<input type=text value="100" size=5 name=Cnum onmouseover=me.select title="消费金额"> 元</br>
  372. </fieldset>
  373.         </td>
  374.     </tr>
  375.    
  376.     <tr>
  377.        <td height=100>
  378. <fieldset style="height:100;text-align:center">
  379. <legend>控制菜单</legend>
  380. <div class="div_button">
  381. <input type=submit value="添加记录" class="button" id=tb_add></div>
  382. <div class="div_button">
  383. <input type=submit value="删除记录" class="button" id=tb_del></div>
  384. <div class="div_button">
  385. <input type=submit value="保存修改" class="button" onclick=savetofile></div>
  386. <div class="div_button">
  387. <input type=submit value="查询数据" class="button" id=tb_query></div>
  388. </fieldset>
  389.         </td>
  390.     </tr>
  391. </table>
  392. <div class="bottom">code by <a href=http://www.2laoshi.cn title=访问我的博客>2laoshi</a></div>
  393. </body>
复制代码
PS:此版本没有自动分页显示功能,但数据查询相比较快,因另一版本功能尚不稳定,待测ing;
作者: qgzhangying    时间: 2009-4-30 16:28

我是菜鸟,我来学习,谢谢你们!




欢迎光临 批处理之家 (http://www.bathome.net/) Powered by Discuz! 7.2