信息系统项目管理师_2024年软考学习应考交流_信息系统项目管理师考试

 找回密码
 马上注册

QQ登录

只需一步,快速开始

楼主: 翔羽
打印 上一主题 下一主题

[转帖]ASP编程常用的代码

  [复制链接]

该用户从未签到

升级  30.8%

101
 楼主| 发表于 2006-2-26 10:57:58 | 只看该作者
<p><strong>如何写出优秀的ASP应用</strong></p><hr/><p><span>怎样创建鲁棒性、正确性、可维护性和性能俱佳的ASP应用程序?要做什么?不做什么?本文以提纲的形式,给出了主要的Check-Points(检查点)。</span></p><p><span><strong>什么是ASP</strong></span></p><p><span>Active Server Page,简称ASP,是:</span></p><p><span>. 连接网友界面(HTML)和商业逻辑(Business Logic);<br/></span><span>. 提供一致的、容易使用的、有状态保持的、基于WEB的客户端;<br/></span><span>. 为那些需要事务处理的WEB 应用提供应用程序环境。</span></p><p><span><strong>ASP不是</strong>:</span></p><p><span>. 实现商业逻辑(Business Logic)的地方;商业逻辑应该通过COM+、MTS或者数据库来实现。</span></p><p><span><strong>ASP的使用者应该有下面的教训</strong>:</span></p><p><span>. 开发应用程序,而不是开发一个一个的孤立ASP页面;<br/></span><span>. 对输入和输出进行缓存;<br/></span><span>. 在发布之前要测试;<br/></span><span>. 选择性能较好的部件;<br/></span><span>. 减少数据库的存取:缓存变换后的结果;<br/></span><span>. 使用MSMQ来处理有时间延迟的工作;</span></p><p><span><strong>站点设计</strong></span></p><p><span>. 你的站点想提供什么?<br/></span><span>. 信息架构:80/20准则;<br/></span><span>. 站点导航;<br/></span><span>. 页面布局;<br/></span><span>. 可用性;<br/></span><span>. 使用ALT和Title属性;<br/></span><span>. 不使用图片或者Image Map的导航;<br/></span><span>. 适合大多数低版本浏览器,考虑他们对ActiveX、RDS、XML、DHTML、Java Applet的支持状况;<br/></span><span>. 屏幕分辨率和屏幕颜色数<br/></span><span>. 是否支持WebTV、PDA…?<br/></span><span>. 设置IMG的width和height属性。<br/></span><span>. 非浏览器的访问,如自动机器人(Spider);<br/></span><span>. 使用帧(Frame)?<br/></span><span>. 使用Cookies的个性化;<br/></span><span>. 避免坏连接;<br/></span><span>. 使用meta标签;<br/></span><span>. 内容审核;<br/></span><span>. 内容检索;<br/></span><span>. 结果反馈:用户反馈和跟踪;<br/></span><span>. 减少下载时间;</span></p><p><span><strong>三层、四层应用设计</strong></span></p><p><span><strong>可读性、可维护性</strong></span></p><p><span><strong></strong>. 使用注释;<br/></span><span>. 在VBScript脚本中使用&lt;%Optio. Explicit%&gt;;<br/></span><span>. 使用字符串变量存储SQL字符串:便于调试;<br/></span><span>. 使用Server.MapPath和相对路径;<br/></span><span>. 使用ADODB.INC或者&lt;!—metadata typelib=somelib file=somedll--&gt;来引用常量,不要直接使用常量数值。<br/></span><span>. 指定ADO调用的缺省参数,避免出错;<br/></span><span>. 使用库或者部件来封装代码。</span></p><p><span><br/><strong>正确的方法</strong>:</span></p><p><span>. 使用Server.URLEncode<br/></span><span>. 错误捕获和处理</span></p><p><span><strong>国际化</strong>:</span></p><p><span>. 使用&lt;%CodePage%&gt;<br/></span><span>. 使用Session.CodePage<br/></span><span>. 在IIS5.0中,Response.write支持UTF8</span></p><p><span><strong>其他</strong>:</span></p><p><span>. 使用#include 重用代码<br/></span><span>. 使用分页技术</span></p><p><span><strong>站点安全</strong>:</span></p><p><span>. 客户身份验证<br/></span><span>. 输入验证<br/></span><span>. #include 文件不要使用.INC后缀,使用.ASP或者设置.INC的应用程序映射<br/></span><span>. 把MDB文件存放在非WEB路径下;<br/></span><span>. 使用ADSI做安全管理</span></p><p><span><br/><strong>Session和Application状态</strong></span></p><p><span><strong>Session的使用</strong>:</span></p><p><span>. 使用起来很方便但是很有问题;<br/></span><span>. HTTP是一个无状态的协议;<br/></span><span>. 设计购物推车特别有用;<br/></span><span>. 不利于可伸缩性设计(Scalability);<br/></span><span>. 在不需要Session的页面中使用&lt;%EnableSessionState=false%&gt;<br/></span><span>. 尽可能完全避免使用Session;<br/></span><span>. 在多个web服务器情况下不适合;<br/></span><span>. 某些部件使Session运行在单一线程模式,减少了吞吐量;<br/></span><span>. 消耗内存;<br/></span><span>. Session有超时的问题<br/></span><span>. 需要客户端的浏览器打开cookie设置;<br/></span><span>. 不要在session中保存recordset,或者缓存connection对象;<br/></span><span>. 在global.asa不要使用空的Session_OnEnd;<br/></span><span>. 可选方案:<br/></span><span>. cookies<br/></span><span>. 直接状态编码:简单、容易、不安全<br/></span><span>. 后端数据库的ID作为状态值<br/></span><span>. querystring 参数<br/></span><span>. 如amazon的url方式<br/></span><span>. 隐藏的表单</span></p><p><span><strong>Application变量</strong>:</span></p><p><span>. 共享变量<br/></span><span>. 不能持久保存<br/></span><span>. 多个web服务器时不行,除非只是只读变量。</span></p><p><span>缓存<br/><br/>. 对静态内容非常理想<br/></span><span>. 不要使用Response.Expires=0,使用负数:<br/></span><span>. Response.Expires=-10000;<br/></span><span>. Response.AddHeader “Pragma”,”no-cache”<br/></span><span>. Response.AddHeader “cache-control”,”no-store”<br/></span><span>. 服务器缓存<br/></span><span>. proxy缓存<br/></span><span>. 客户端缓存</span></p>

该用户从未签到

升级  30.8%

102
 楼主| 发表于 2006-2-26 10:58:15 | 只看该作者
<p><span><strong>部件</strong></span></p><p><span>. 性能<br/></span><span>. 伸缩性<br/></span><span>. 分离商务逻辑和页面表现<br/></span><span>. 被ASP或其他环境重用<br/></span><span>. 事务处理<br/></span><span>. 类型安全<br/></span><span>. 存取操作系统特性<br/></span><span>. 保护知识产权<br/></span><span>. 在下列情况下使用Server.CreateObject:<br/></span><span>. MTS事务处理<br/></span><span>. 上下文安全性<br/></span><span>. ASP内部部件<br/></span><span>. OnStartPage、OnEndPage<br/></span><span>. 使用&lt;Object RunAt=server&gt;延迟对象初始化<br/></span><span>. 是否保存到Session或者Application变量中</span></p><p><span><br/><strong>性能</strong></span></p><p><span>. Response缓冲:Response.Buffer=True<br/></span><span>. 关闭Connection并:set Connection=Nothing<br/></span><span>. 使用局部变量<br/></span><span>. 用&lt;Object &gt;代替Server.CreateObject<br/></span><span>. 不要使用Session和Application变量<br/></span><span>. 不要将COM对象存储在Session或者Application变量中<br/></span><span>. 关闭脚本调试<br/></span><span>. 避免重复的字符串相加<br/></span><span>. 在费时的页面顶端使用Response.IsClientConnected<br/></span><span>. 使用MSMQ<br/></span><span>. 不要在Session或者Application中存储大数组<br/></span><span>. 不要ReDim 数组<br/></span><span>. 将集合类型的对象赋给临时变量<br/></span><span>. 减小微处理器的最大线程数(运行regedt32,在HKEY_LOCAL_MACHINE\SYSTEM\ CurrentControlSet\Services\w3SVC\ASP\Parameters,增加ProcessorThreadMax,减小这个值,看看性能的变化;或者增大这个值。)<br/></span><span>. 设置AspScriptEngineCacheMax,使它等于ProcessorThreadMax*CPU个数。缺省的是30;(在系统路径下:\system32\inetsrv/adminisamples下,键入adsutil.vbs,设置/w3svc/AspScriptEngineCacheMax);<br/></span><span>. 减少Session.Timeout;<br/></span><span>. 在MMC中,设置ASP应用程序缓冲为有效。</span></p><p><span><br/><strong>把某些工作交给客户端</strong>:</span></p><p><span>. CSS、DHTML<br/></span><span>. XML<br/></span><span>. RDS<br/></span><span>. Remote Scripting<br/></span><span>. Xmlhttp<br/></span><span>. 客户端验证<br/></span><span>. 减小文件大小<br/></span><span>. 尽可能避免https和SSL<br/></span><span>. 使用Response.End测试性能</span></p><p><span><strong>数据库</strong></span></p><p><span>. 减少数据库存取访问;<br/></span><span>. 缓存变换后的结果;<br/></span><span>. 使用ODBC连接池和OLEDB资源池;<br/></span><span>. 使用系统DSN或者非DSN,不要使用DSN或者文件DSN;<br/></span><span>. 使ADO运行在双线程模式(Both-threaded):makefre.bat;<br/></span><span>. 使用ADO的Field对象;<br/></span><span>. GetString或者GetRows比较快;<br/></span><span>. RDS和XML把负载嫁到客户端;<br/></span><span>. 不要使用Select *,把字段写出来;<br/></span><span>. 尽量使用SQ. Server 7,不要使用Access;<br/></span><span>. 使用SQ. Server的特性:存储过程、Job、Join、sort、group<br/></span><span>. 使用SQ. Analysis,优化SQL的性能<br/></span><span>. 使用索引<br/></span><span>. 本地使用Name-pipes,远程使用Sockets<br/></span><span>. 准确地指定Command Type</span></p>

该用户从未签到

升级  30.8%

103
 楼主| 发表于 2006-2-26 10:58:33 | 只看该作者
<p><strong>ASP提速技巧五则</strong></p><p></p><hr/><p>  <font color="#006699">技巧之一:提高使用Request集合的效率 </font><br/><br/>??访问一个ASP集合来提取一个值是费时的、占用计算资源的过程。因为这个操作包含了一系列对相关集合的搜索,这比访问一个局部变量要慢得多。因此,如果打算在页面中多次使用Request集合中的一个值,应该考虑将其存贮为一个局部变量。例如将代码写成下面的形式以加快脚本引擎处理速度: </p><p>strTitle=Request.Form("Title") <br/>strFirstName=Request.Form("FirstName")  <br/>strLastName=Request.Form("LastName")  <br/>If Len(strTitle) Then strTitle=strTitle &amp; " "  <br/>If strFirstName="" Then strFullName=strTitle &amp; " " &amp; strLastName  <br/>Elseif Len(strFirstName)=1 Then <br/>strFullName=strTitle &amp; strFirstName &amp; ". " &amp; strLastName <br/>Else <br/>strFullName=strTitle &amp; strFirstName &amp; " " &amp; strLastName  <br/>End If </p><p><br/>??<font color="#006699">技巧之二:直接访问适当的集合 </font></p><p>??如果不是别无选择,否则不要使用strPage=Request("page")的这样的形式来获取参数,因为这将按顺序搜索全部的集合—QueryString、Form、Cookies、ClientCertificate、ServerVarible直到发现第一个匹配值的名称。这样做比直接访问适当的集合效率低,并且是不安全的,除非能绝对保证这个值不会出现在另外一个集合中。 <br/>例如,可能希望搜索满足客户请求的WEB服务器名称,这通过出现在每个查询中的Request.ServerVarables集合中寻找“SERVER_NAME”来实现。然而,假如其他的集合也包含名为“SERVER_NAME”的值(键名不区分大小写),当使用Request("server_Name")时,就会得到错误的结果。总而言之,应尽可能直接访问适当的集合。 </p><p><br/>??<font color="#006699">技巧之三:在费时操作前使用Response.IsClientConnected属性 </font></p><p>??使用Response.IsClientConnected是观察用户是否仍连到服务器并正在载入ASP创建的网页的有用方式。如果用户断开连接或停止下载,我们就不用再浪费服务器的资源创建网页,因为缓冲区内容将被IIS丢弃。所以,对那些需要大量时间计算或资源使用较多的网页来说,值得在每一阶段都检查游览者是否已离线: </p><p>…… Code to create first part of the page <br/>If Response.IsClientConnected Then <br/>Response.Flush <br/>Else <br/>Response.End <br/>End If <br/>…… Code to create next part of page </p><p><br/>??<font color="#006699">技巧之四:优化ASP中的ADO操作 </font></p><p>??通常面言,数据构成了WEB站点的实际内容。所以,优化ADO操作以加速ASP代码执行,十分有用: <br/>??a. 仅选择所需的列:当打开ADO记录集时,除非需要获得所有的列,否则不应自动地使用表名(即SELECT *)。使用单独的列意味着将减少发送到服务器或从服务器取出的数据量。即使需要使用全部列,单独地命名每个列也会获得最佳的性能,因为服务器不必再解释这些列的名字。 </p><p>??b. 尽可能的使用存储过程。存储过程是预先编译的程序,含有一个已经准备好的执行计划,所以比SQL语句执行更快。 </p><p>??c. 使用适当的光标和锁定模式。如果所做的全部工作只是从记录集中读取数据,并将其显示在屏幕上,那么就使用缺省的只能前移、只读的记录集。ADO用来维护记录和锁定的细节的工作越少,执行的性能就越高。 </p><p>??d. 使用对象变量。当遍历记录集时一个肯定能提高性能的方法是使用对象变量指向集合中的成员。例如: </p><p>While Not RsGc.EOF <br/>Response.Write "工程名称:" &amp; RsGc("GcMC") &amp; "(工程代码:" &amp; RsGc("GcCode") &amp; ") <br/>"  <br/>RsGc.MoveNext <br/>Wend </p><p>??可以用改写为下面的代码以加快执行: </p><p>set GcMc=RsGc("GcMc") <br/>set GcCode=RsGc("GcCode")  <br/>While Not rsGc.EOF Response.Write "工程名称:" &amp; GcMc &amp; "(工程代码:" &amp; GcCode &amp; ") <br/>" RsGc.MoveNext  <br/>Wend </p><p>??新的代码建立了对象变量的引用,所以可以使用对象变量而不是实际的变量,这意味着脚本引擎的工作减少了,因为在集合中进行索引的次数变少了。 </p><p><br/>??<font color="#006699">技巧五:不要混用脚本引擎 </font></p><p>??我们知道,ASP页面中既可以使用VBScript,也可以使用JScript。但是在同一个页面上同时使用JScript和VBScript则是不可取的。因为服务器必须实例化并尝试缓存两个(而不是一个)脚本引擎,这在一定程度上增加了系统负担。因此,从性能上考虑,不应在同一页面中混用多种脚本引擎。</p><p>&nbsp;</p>

该用户从未签到

升级  30.8%

104
 楼主| 发表于 2006-2-26 10:58:50 | 只看该作者
<p><strong>Asp编码优化技巧8则 </strong><br/><br/><br/>ASP(Active Server Page)是Microsoft公司推出的基于PWS(Personal Web Server)&amp;IIS(Internet Information Server)平台的、基于ISAPI(InternetServiceAPI)原理的动态网页开发技术,目前日趋成熟完善。在这里仅就代码优化进行一些简单讨论。 </p><hr/><p>1、<strong>声明VBScript变量 </strong><br/>在ASP中,对vbscript提供了强劲的支持,能够无缝集成vbscript的函数、方法,这样给扩展ASP的现有功能提供了很大便利。由于ASP中已经模糊了变量类型的概念,所以,在进行ASP与vbscript交互的过程中,很多程序员也惯于不声明vbscript的变量,这样加重了服务器的解析负担,进而影响服务器的响应请求速度。 <br/>鉴于此,我们可以象在VB中强制用户进行变量声明一样在vbscript中强制用户进行变量声明。实现方法是在ASP程序行首放置&lt;% option explicit%&gt;。 </p><p>2、<strong>对URL地址进行编码 </strong><br/>在我们使用asp动态生成一个带参数URL地址并进行跳转时,在IE中解析很正常,但在NetScrape浏览时却有错误如下: <br/>HTTP Error 400 <br/>400 Bad Request <br/>Due to malformed syntax, the request could not be understood by the server. <br/>The client should not repeat the request without modifications. <br/>解决方法是对生成的URL参数使用ASP内置server对象的URLencode方法进行URL编码,例子如下: <br/>&lt;% <br/>URL="xur.asp" <br/>var1="username=" &amp; server.URLencode("xur") <br/>var2="&amp;company=" &amp; server.URLencode("xurstudio") <br/>var3="&amp;phone=" &amp; server.URLencode("021-53854336-186") <br/>response.redirect URL &amp; "?" &amp; var1 &amp; var2 &amp; var3 <br/>%&gt; </p><p>3、<strong>清空对象 </strong><br/>当使用完对象后,首先使用Close方法来释放对象所占用的系统资源;然后设置对象值为“nothing”释放对象占用内存。当年,我就是在一张页面上创建了百余个没有清空对象的记录集而崩溃了我的IIS 。下面的代码使用数据库内容建立一个下拉列表。代码示例如下: <br/><br/>&lt;% myDSN="DSN=xur;uid=xur;pwd=xur" <br/>mySQL="select * from authors where AU_ID&lt;100" <br/>set conntemp=server.createobject("adodb.connection") <br/>conntemp.open myDSN <br/>set rstemp=conntemp.execute(mySQL) <br/>if rstemp.eof then <br/>response.write "数据库为空" <br/>response.write mySQL <br/>conntemp.close <br/>set conntemp=nothing <br/>response.end <br/> end if%&gt; <br/>&lt;%do until rstemp.eof %&gt; <br/>&lt;% <br/>rstemp.movenext <br/>loop <br/>rstemp.close <br/>set rstemp=nothing <br/>conntemp.close <br/>set conntemp=nothing <br/>%&gt; <br/></p><p>4、<strong>使用字符串建立SQL查询 </strong><br/>使用字符串来建立查询并不能加快服务器的解析速度,相反,它还会增加服务器的解析时间。但在这里仍然推荐使用字符串代替简单的查询语句来进行查询。这样做的好处是,可以迅速发现程序问题所在,从而便利高效地生成程序。示例如下: <br/><br/>&lt;%mySQL= ""select * " <br/>mySQL= mySQL &amp; "from publishers" <br/>mySQL= mySQL &amp; "where state='NY'" <br/>response.write mySQL <br/>set rstemp=conntemp.execute(mySQL) <br/>rstemp.close <br/>set rstemp=nothing <br/>%&gt; <br/></p><p>5、<strong>使用case进行条件选择 </strong><br/>在进行条件选择的时候,尽量使用case语句,避免使用if语句。使用case语句,可以使程序流程化,执行起来也比if语句来的快。示例如下: <br/><br/>&lt;% <br/>  FOR i = 1 TO 1000 <br/>   n = i <br/>Response.Write AddSuffix(n) &amp; "<br/>"<br/>  NEXT <br/>  %&gt; <br/>  &lt;% <br/>  Function AddSuffix(num) <br/>numpart = RIGHT(num,1) <br/>SELECT CASE numpart <br/>CASE "1" <br/>IF InStr(num,"11") THEN <br/>num = num &amp; "th" <br/>ELSE <br/>num = num &amp; "st" <br/>END IF <br/>CASE "2" <br/>IF InStr(num,"12") THEN <br/>num = num &amp; "th" <br/>ELSE <br/>num = num &amp; "nd" <br/>END IF <br/>CASE "3" <br/>IF InStr(num,"13") THEN <br/>num = num &amp; "th" <br/>ELSE <br/>num = num &amp; "rd" <br/>END IF <br/>CASE "4" <br/>num = num &amp; "th" <br/>CASE ELSE <br/>num = num &amp; "th" <br/>END SELECT <br/>AddSuffix = num <br/>  END FUNCTION <br/>%&gt; </p><p><br/>6、<strong>使用adovbs.inc文件中定义的常量打开记录集 </strong><br/>打开记录集时,可以定义记录集打开的游标类型和锁定类型。在adovbs.inc文件中定义了一些常量来定义这些类型。adovbs.inc文件保存在\inetpub\iissamples\IISamples目录下面。下面列举几个常用的游标类型和锁定类型。 <br/>游标类型:adOpenFowardOnly游标只能向前;adOpenKeyset游标可向前或者向后,如一用户添加记录,新记录不会出现在记录集中;adOpenDynamic游标动态随意;adOpenStatic记录集不对其它用户造成的记录修改有所反映。 <br/>锁定类型:adLockReadOney不能修改记录集中的记录;adLockPessimistic在编辑一条记录时锁定它;adLockOptimstic调用记录集Update方法时才锁定记录;adLockBatchOpeimstic记录只能成批更新。 <br/>&lt;!--#INCLUDE VIRTUAL="/ADOVBS.INC" --&gt; <br/>&lt;% <br/>connectme="DSN=xur;uid=xur;pwd=xur" <br/>sqltemp="select * from publishers where name='xur'" <br/>set rstemp=Server.CreateObject("adodb.Recordset") <br/>rstemp.open sqltemp, connectme, adOpenStatic,adLockOptimstic <br/>response.write rstemp.recordcount &amp; " records in<br/>" &amp; sqltemp <br/>rstemp.close <br/>set rstemp=nothing <br/>%&gt; </p><p>7、<strong>避免在使用global.asa文件中进行对象定义 </strong><br/>由于global.asa文件中的内容可以为站点内所有文件引用,无疑,在global.asa文件中进行对象定义可以省去很多重复工作。比如在global.asa中的application_onstart函数中进行如下定义: <br/>&lt;%SUB application_onstart <br/>set application("theCONN")=server.createobject("adodb.connection") <br/>END SUB %&gt;; <br/>这样就可以在站点任何代码中做类似引用: <br/>&lt;% <br/>mySQL="select * from publishers where state='xur' <br/>set rstemp=application("theconn").execute(mySQL) <br/>%&gt; <br/>同样地,可以在session_onstart函数中创建记录集对象 <br/>&lt;%SUB session_onstart <br/>set session("rstemp")=server.createobject("adodb.recordset") <br/>END SUB %&gt; <br/>然后在站点也面中进行如下引用: <br/>&lt;% <br/>mySQL="select * from publishers where state='xur' <br/>set session("rstemp")=conntemp.execute(mySQL) <br/>%&gt; <br/>但这样做的同时也有很大的负面影响,由于Application和session变量都只有在关闭网站的时候才释放占用的资源,所以session参数会浪费大量不必要内存,而且此时application变量成为服务器性能的瓶颈。 <br/>解决方法:建立定义对象asp页面,在需要进行调用这些对象的页面上,引入这张asp页面。假设定义对象的asp页面名称为define.asp,则只要在对应asp页面中加入以下语句就能引入该页面。 <br/>&lt;!--#INCLUDE VIRTUAL="/define.asp" --&gt; <br/>在进行页面引进时,最好在待引进的asp文件中不要包含&lt;%@LANGUAGE="VBSCRIPT"%&gt;语句。因为在asp文件中,只能有一句由@来定义的脚本解析语言。</p><p><strong>8、安全防护 </strong><br/>asp提供了很好的代码保护机制,所有的asp代码都在服务器端执行而只返回给客户端代码执行结果。即便这样,在老版本的IIS中还可以在文件名后面家:DATA来查看asp的源代码,这已经属于Web Server安全范畴不在本文讨论范围内。下面提出两点简单的安全注意事项。 <br/>  虽然在asp中建议引入文件以inc作为扩展名,在这里仍建议以asp作为引文件的扩展名。当这些代码在安全机制不好的Web Server上运行时,只需在地址栏上输入引入文件的地址(inc为扩展名),就可以浏览该引入文件的内容,这是由于在Web Server上,如果没有定义好解析某类型(比如inc)的动态连接库时,该文件以源码方式显示。 <br/>不要把数据库文件放在网站结构内部,这样,当恶意人士获取数据库路径后,就可以轻易获取该数据库,进而肆意更改数据库内容。比较好的做法是,为数据库建立DSN(Date Source Name),而在进行数据库访问时直接访问该DSN。</p>

该用户从未签到

升级  0%

105
发表于 2006-3-15 21:35:20 | 只看该作者
楼上的老大,放在一起做个附件好下载了!要的话复制粘贴很麻烦了!

该用户从未签到

升级  0%

106
发表于 2006-3-15 22:09:37 | 只看该作者

我把代码做成doc文件并且压缩了!要的人自己下载了!

我把代码做成doc文件并且压缩了!要的人自己下载了!

该用户从未签到

升级  0%

107
发表于 2006-3-15 22:11:05 | 只看该作者

我把代码做成doc文件并且压缩了!要的人自己下载了!

我把代码做成doc文件并且压缩了!要的人自己下载了!<br/>

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?马上注册

x

该用户从未签到

升级  30.8%

108
 楼主| 发表于 2006-4-2 22:39:27 | 只看该作者
嗬嗬,感谢你老兄这个事情做得好。

该用户从未签到

升级  22.95%

109
发表于 2006-4-22 12:27:56 | 只看该作者
谢谢 同胞们的 帮助&nbsp; 我会向我的同学宣传

该用户从未签到

升级  22.95%

110
发表于 2006-4-22 12:46:49 | 只看该作者
<p>以后我会大力支持本网站</p>
您需要登录后才可以回帖 登录 | 马上注册

本版积分规则

小黑屋|手机版|Archiver|信息系统项目管理师_软考交流平台. ( 鄂ICP备11002878号-1  公安备案号:42011102001150

GMT+8, 2025-7-6 10:54

Software by Discuz! X3.2

© 2001-2013 SKIN BY DSVUE

快速回复 返回顶部 返回列表