今天养殖艺技术网的小编给各位分享设计编码有什么用途的养殖知识,其中也会对什么是代码设计(什么是代码设计?为什么要进行代码设计)进行专业解释,如果能碰巧解决你现在面临的问题,别忘了关注本站,现在我们开始吧!

什么是代码设计

代码是用字母、数字、特殊字符组成的一系列命令编码,用它可以实现人们想要实现的功能,之所以要设计代码是为了提高代码地利用率,实现代码的多次利用及便于理解。
代码是为了实现某种程序功能所必须的没有代码就没有办法完成所要的程序。就好像我们现在用的各种不同的系统就是由代码构成的。
应用不同的系统,代码不同就好像你用VB和C++,设计一样的程序,但由于软件不同,代码又有所区别,这就需要我们自己设计来完成我们要做的功能。

在实际生活中数字编码有什么作用?

1、归档整理方便,特别在电子管理系统中,可以使用数字编码更好的区分文档的存储区域,在查找时可以通过数字编码轻而易举找到;

2、数字编码更容易进行管理,无论谁进行的编码都是一样,管理方便,人员无论怎么换,程序和事务不会乱;

什么是代码设计

3、从数字上能得到详细的对应信息,譬如年月日甚至时分秒、单位、部门、建档人等等,这样使用数字编码可以更详细的记载事物发生的时间;

***的第一个是汉字,代表该车户口所在省的简称;第二个是英文,代表该车所在地的地市一级代码;然后就是后五位啦,这后五位是这样的规律,如果你是第一个在该省该地区上的第一个车牌,从理论上讲你车牌后五位就是00001。

扩展资料:数字编码是只采用数字和有关特殊字符来表示数据和指令的编码。大多数数字编码采用位置表示法,即任何一个数字量都可以通过一些数字的和来表示。根据这些数字码在表示式中所处的不同位置,有不同的值。也就是说,每个不同的位置,都具有自己的“权"。

十进制数据系统是人们最熟悉的数字系统,但是在数据转换和计算机处理中,使用十进制数据系统是很困难的,甚至是不现实的,这需要使用十个不同的电路状态分别表示十个数字符号。然而,可以采取许多方法使电路表示出两种不同的状态,于是,二进制数据系统得到了广泛的应用。

对数字数据的数字编码是指将二进制0/1数字数据变换成具有一定极性、幅度、比特速率,跳变规则的方波波形。

参考资料来源:人民网-数字天下

参考资料来源:百度百科-数字编码

在实际生活中数字编码有什么作用?

图书(不是杂志):编号一般为ISBN号,其编码规则如下
ISBN号是由10位数字组成,共分四段:

1.组号: 代表出版者的国家,地理区域,语种等.我国的组号为”7”。

2.出版者号: 代表组内所属的一个具体出版者(出版社,出版公司等)。由国家或地区的ISBN中心设置和分配,可取1-7位数字。

3.书名号:书名号是由出版者给予每种出版物的编号。

4.校验号: 校验号是ISBN号的最后一位数值,它能够校验出ISBN号是否正确,即:将ISBN1-9位数字顺序乘以10-2这9个数字,将这些乘积之和再加上校验号,假如能被11整除,则这个ISBN号是正确的,算式为7*10+3*9+0*8 +5*7+0*6+1*5+5*4+6*3+8*2+7=198,198/11=18,能被11整除。校验号只能是1位数,当为10时,记为罗马数字X

***号码规律
18位***号码各位的含义:
1-2位省、自治区、直辖市代码;
3-4位地级市、盟、自治州代码;
5-6位县、县级市、区代码;
7-14位出生年月日,比如19670401代表1967年4月1日;
15-17位为顺序号,其中17位(倒数第二位)男为单数,女为双数;
18位为校验码,0-9和X。作为尾号的校验码,是由号码编制单位按统一的公式计算出来的,计算的结果是0-10,如果某人的尾号是0-9,都不会出现X,但如果尾号是10,那么就得用X来代替,因为如果用10做尾号,那么此人的***就变成了19位。X是罗马数字的10,用X来代替10。
举例:
130503 19670401 0012这个***号的含义: 13为河北,05为邢台,03为桥西区,出生日期为1967年4月1日,顺序号为001,2为校验码。


公路路线编号规则
公路路线编号由一位公路管理等级代码和三位数字构成。

国道按首都放射、北南纵线、东西横线分别顺序编号——

1)以首都为中心的放射线由一位标识码"1"和两位路线顺序号构成;

2)由北向南的纵线由一位标识码"2"和两位路线顺序号构成;

3)由东向西的横线由一位标识码"3"和两位路线序号构成。

省道在各省、自治区、直辖市界内按省会(首府)放射线、北南纵线、东西横线分别顺序编号;编号规则参照5.2条。

县、乡、专用公路及其他公路以各省、自治区、直辖市公路管理区域为基础分别顺序编制。均由三位路线顺序构成;顺序号不足三位数字时,在前位充"0"。

编号区间:公路路线编号区间国道为G101至G199、G201至G299、G301至G399;

省道为S101至S199、S201至S299、S301至S399;

县、乡专用公路及其公路为X/Y/Z/Q999。

编号结构说明:G××× 国道G1××指首都放射线,G2××指北南纵线,G3××指东西横线

S××× 省道SI××指省会(省府)放射线,S2×××指北南纵线,S3××指东西横线

X××× 县公路编号

Y××× 乡公路编号

Z××× 专用公路编号

Q××× 其他公路编号
还有很多呢

谈谈信息技术在教学应用中的作用主要体现在哪些方面

信息技术在课堂教学中的运用越来越广泛,而教师如何合理又有效的使用信息技术,这就需要教师充分理解信息技术在课堂教学中的作用,本文试着从以下方面来论述信息技术在课堂教学中的作用:改变传统的教学方法;加强教师的主导作用;提高学生的学习兴趣,活跃课堂气氛;分散教学难点,突破教学重点,促进学生知识内化;帮助学生进行探索和发现;帮助学生获取技能和经验;使课堂练习方式多样化;促进学生全面发展;制作具有实效性的教学课件;提高教师的业务水平和计算机使用技能;信息技术在课堂教学中的反思。
关键词:信息技术;课堂;教学;作用

传统的课堂教学因其固有的弱点而经常遭致批评。然而,在可预见的将来,课堂教学仍然会是学校教学活动的主要方式。信息技术的飞速发展,推动了教育从目的、内容、形式、方法到组织的全面变革。站在教育第一线的教师,完全有必要对教学过程重新认识。《基础教育课程改革纲要(试行)》指出:“大力推进多媒体信息技术在教学过程中的普遍应用,促进信息技术与学科课程的整合,逐步实现教学内容的呈现方式、学生的学习方式、教师的教学方式和师生互动方式的变革,充分发挥信息技术的优势,为学生的学习和发展提供丰富多彩的教育环境和有力的学习工具。”由此可见,教师运用现代信息技术,发挥信息技术辅助教学的特有功能,来改进课堂教学是当前学校教育改革的一条重要思路。为了能够在教学中合理又有效地使用信息技术,我们首先需要充分理解信息技术在课堂教学中的作用。

一、信息技术的运用,改变传统的教学方法 

课堂教学中良好的教学效果的取得,有赖于先进的教学媒体,帮助学生做出各种学习的反应。传统教学模式中,教师的教学活动仅限于一本教科书、一块黑板和简单的幻灯片演示来完成。枯燥无味,缺乏生动性,学生的主动性、创造性不能得到很好的发挥。在多媒体信息技术介入教学后,像一股春风一样,催促着我们教育观念以及教育模式的改变,使我们的师生能够共享到优质的教育资源,享受最前沿的教学资源,给基础教育的改革和发展带来了机遇。它彻底改变了传统的教育教学模式,让教师从繁重的重复性劳动中解放出来。

二、信息技术的运用,加强教师的主导作用

信息技术走进课堂后,在课堂教学中,以学生为主体,教师转变传统的教学方法,引导学生在一定的情境下利用学习资料和教师帮助主动获取知识。信息技术教学手段取代了粉笔在黑板上涂抹,变成了好看的图片、影视资料在荧屏上展示,学生们在直观的感受中创设了情境,体会语言就变成了有血有肉的人物进入思维中,参与到学生的理解、欣赏、与主人公的思想感情发生碰撞、产生共鸣、情感交流得到实现。课堂教学的内容更加丰富、生动,创设教学情景,调动学生的生活积累,诱导学生主动参与到学习过程中来。而这一切,都是教师利用信息技术辅助教学的结果,更加体现出了教师的主导作用。例如,一位教师在教《称象》这篇课文时,根据课文内容适时的播放课件,让学生在头脑中形成完全相同的事物画面或事理。另外,现代化的信息技术为教学提供了更为广阔的空间,教师通过资源共享,博采众长,更好的发挥了为学生提供学习资源,帮助学生解决困难的辅导作用。教师备课时,可先输入关键词,在网上搜索与之有关的资料,在进行分类制成课件,在指导学生学习的过程中,根据需要,一点鼠标,迅速调出,方便快捷。资料调出学生可根据需要、或兴趣去学习。这样真正实现了学生的主动性,教师真正成为了学生的帮助者、促进者。教师在教学的过程中,引导了学生拓宽视野。学生在积累大量素材的条件下,做到了课堂气氛真正活跃起来,激发了学生主动获取知识的自觉性。充分体现了教师的主导作用。

三、信息技术的运用,有利于提高学生的学习兴趣,活跃课堂气氛


“兴趣是最好的老师”,有良好的兴趣就有良好的学习动机,但不是每个学生都具有良好的学习兴趣。“好奇”是学生的天性,他们对新颖的事物、知道而没有见过的事物都感兴趣,要激发学生的学习积极性,就必须满足他们这些需求。而传统的教学和现在的许多教学都是严格按照教学大纲,把学生封闭在枯燥的教材和单调的课堂内,使其和丰富的资源、现实完全隔离,致使学生学习的兴趣日益衰减。将多媒体信息技术融于教学课堂,利用多媒体信息技术图文并茂、声像并举、能动会变、形象直观的特点为学生创设各种情境,有效地再现实物的可观属性,使学生感知事物的艺术效果,在大脑中形成一幅活生生的画面,创设了一定的情景,学生产生身临其境的感受,使学生真正的进入角色,进行情感体验,从而有效的激起学生的各种感官的参与,调动学生强烈的学习**,激发动机和兴趣,有利于营造轻松的课堂气氛,使学生借助生动形象的画面理清学习思路,与作者进入同样的境界,从而领会课文的主旨。如:《林海》是一篇描写大兴安岭美丽的风景课文。教师在讲解段意时,可事先制作出反映大兴安岭岭、林、花、等风景的课件,让学生目睹屏幕上浩瀚无边的绿色的森林,起伏的群山似滚滚的波浪,课文中“目之所及,哪里都是绿的。”“林海”等内容便可迎刃而解。伴随悦耳的解说词,学生再看录像中哗哗流淌的雪水,树木抽出新枝,长出嫩叶。再看看伐木工人欢声笑语,植树工人的辛勤劳作。疾驰的火车把木材源源不断的运到全国各地。此时,教师只要稍加点拨,学生便能明白这课文的主旨:写出了大兴安岭与祖国建设密不可分。真正理解“兴国安邦”这个词语的意义。当教师合理的展现其它大兴安岭景色的设计后,学生会由衷感到大兴安岭的确是一个巨大的宝库。于是课文中的语言成了学生内心急于表达的话语,面对教师的提问,他们的学习兴趣油然而生,纷纷伸出小手跃跃欲试,课堂气氛活跃。又例如,一位教师在上苏教版古诗两首《所见》笛子曲:《快乐的小牧童》时,利用课件出示画面:牧童骑在黄牛背上,快乐地唱着歌儿。

师:(动情地)你们看,你们听,小牧童坐在黄牛宽厚的背上走来了,他摇呀,晃呀,就像坐在摇篮里,真舒服呀!小树林里,花儿在笑,风儿在吹,蝴蝶儿在飞,多美呀!多快乐呀!小牧童忍不住放声歌唱,歌声飞出了密密的树林。我们来读一读这两行诗。

一个汉字对应的编码有哪几种,个有什么作用

汉字信息处理系统一般包括编码、输入、存储、编辑、输出和传输.编码是关键.不解决这个问题,汉字就不能进入计算机.
  汉字进入计算机的三种途径  分别为:
  ①机器自动识别汉字:计算机通过“视觉”装置(光学字符阅读器或其他),用光电扫描等方法识别汉字.
  ②通过语音识别输入:计算机利用人们给它配备的“听觉**”,自动辨别汉语语音要素,从不同的音节中找出不同的汉字,或从相同音节中判断出不同汉字.
  ③通过汉字编码输入:根据一定的编码方法,由人借助输入设备将汉字输入计算机.
  机器自动识别汉字和汉语语音识别,国内外都在研究,虽然取得了不少进展,但由于难度大,预计还要经过相当一段时间才能得到解决.在现阶段,比较现实的就是通过汉字编码方法使汉字进入计算机.
  汉字编码的困难点  汉字进入计

在实际生活中数字编码有什么作用?

1、归档整理方便,特别在电子管理系统中,可以使用数字编码更好的区分文档的存储区域,在查找时可以通过数字编码轻而易举找到;

2、数字编码更容易进行管理,无论谁进行的编码都是一样,管理方便,人员无论怎么换,程序和事务不会乱;

3、从数字上能得到详细的对应信息,譬如年月日甚至时分秒、单位、部门、建档人等等,这样使用数字编码可以更详细的记载事物发生的时间;

***的第一个是汉字,代表该车户口所在省的简称;第二个是英文,代表该车所在地的地市一级代码;然后就是后五位啦,这后五位是这样的规律,如果你是第一个在该省该地区上的第一个车牌,从理论上讲你车牌后五位就是00001。

扩展资料:数字编码是只采用数字和有关特殊字符来表示数据和指令的编码。大多数数字编码采用位置表示法,即任何一个数字量都可以通过一些数字的和来表示。根据这些数字码在表示式中所处的不同位置,有不同的值。也就是说,每个不同的位置,都具有自己的“权"。

十进制数据系统是人们最熟悉的数字系统,但是在数据转换和计算机处理中,使用十进制数据系统是很困难的,甚至是不现实的,这需要使用十个不同的电路状态分别表示十个数字符号。然而,可以采取许多方法使电路表示出两种不同的状态,于是,二进制数据系统得到了广泛的应用。

对数字数据的数字编码是指将二进制0/1数字数据变换成具有一定极性、幅度、比特速率,跳变规则的方波波形。

参考资料来源:人民网-数字天下

参考资料来源:百度百科-数字编码

建筑工程设计信息模型编码有什么用

《建筑工程设计信息模型分类和编码》是为实现建筑工程建设与使用各阶段建筑工程信息的有序分类与传递,以及为建筑工程规划、设计、施工阶段的成本预算与控制,设计阶段项目描述建立,建筑信息模型数据库建立,规范建筑工程中建筑产品信息交换、共享,促进建筑工程信息化发展而制定的。
《建筑工程设计信息模型分类和编码》填补了建筑工程数字化设计信息模型的分类与编码应用空白,对保证建筑工程信息化,实现建筑工程相关的行业管理,投资、标准、造价的信息化管理,具有重大的意义。

数据库设计中为什么进行分类编码设计?分类的方法是什么

分类算法要解决的问题

在网站建设中,分类算法的应用非常的普遍。在设计一个电子商店时,要涉及到商品分类;在设计发布系统时,要涉及到栏目或者频道分类;在设计软件下载这样的程序时,要涉及到软件的分类;如此等等。可以说,分类是一个很普遍的问题。

我常常面试一些程序员,而且我几乎毫无例外地要问他们一些关于分类算法的问题。下面的举几个我常常询问的问题。你认为你可以很轻松地回答么?

1、分类算法常常表现为树的表示和遍历问题。那么,请问:如果用数据库中的一个Table来表达树型分类,应该有几个字段?

2、如何快速地从这个Table恢复出一棵树?

3、如何判断某个分类是否是另一个分类的子类?

4、如何查找某个分类的所有产品?

5、如何生成分类所在的路径。

6、如何新增分类?

在不限制分类的级数和每级分类的个数时,这些问题并不是可以轻松回答的。本文试图解决这些问题。

分类的数据结构

我们知道:分类的数据结构实际上是一棵树。在《数据结构》课程中,大家可能学过Tree的算法。由于在网站建设中我们大量使用数据库,所以我们将从Tree在数据库中的存储谈起。

为简化问题,我们假设每个节点只需要保留Name这一个信息。我们需要为每个节点编号。编号的方法有很多种。在数据库中常用的就是自动编号。这在Access、SQL Server、Oracle中都是这样。假设编号字段为ID。

为了表示某个节点ID1是另外一个节点ID2的父节点,我们需要在数据库中再保留一个字段,说明这个分类是属于哪个节点的儿子。把这个字段取名为FatherID。如这里的ID2,其FatherID就是ID1。

这样,我们就得到了分类Catalog的数据表定义:


Create Table [Catalog](

[ID] [int] NOT NULL,

[Name] [nvarchar](50) NOT NULL,

[FatherID] [int] NOT NULL

);

约定:我们约定用-1作为最上面一层分类的父亲编码。编号为-1的分类。这是一个虚拟的分类。它在数据库中没有记录。

如何恢复出一棵树

上面的Catalog定义的最大优势,就在于用它可以轻松地恢复出一棵树?分类树。为了更清楚地展示算法,我们先考虑一个简单的问题:怎样显示某个分类的下一级分类。我们知道,要查询某个分类FID的下一级分类,SQL语句非常简单:


select Name from catalog where FatherID=FID

显示这些类别时,我们可以这样:


<%

REM oConn---数据库连接,调用GetChildren时已经打开

REM FID-----当前分类的编号


Function GetChildren(oConn,FID)

strSQL = "select ID,Name from catalog where FatherID="&FID

set rsCatalog = oConn.Execute(strSQL)

%>



<%

Do while not rsCatalog.Eof

%>



<%

Loop

%>



<%

rsCatalog.Close

End Function

%>

现在我们来看看如何显示FID下的所有分类。这需要用到递归算法。我们只需要在GetChildren函数中简单地对所有ID进行调用:GetChildren(oConn,Catalog(“ID”))就可以了。


<%

REM oConn---数据库连接,已经打开

REM FID-----当前分类的编号


Function GetChildren(oConn,FID)

strSQL = "select Name from catalog where FatherID="&FID

set rsCatalog = oConn.Execute(strSQL)

%>



<%

Do while not rsCatalog.Eof

%>





<%

Loop

%>



<%

rsCatalog.Close

End Function

%>

修改后的GetChildren就可以完成显示FID分类的所有子分类的任务。要显示所有的分类,只需要如此调用就可以了:


<%

REM strConn--连接数据库的字符串,请根据情况修改

set oConn = Server.CreateObject("ADODB.Connection")

oConn.Open strConn

=GetChildren(oConn,-1)

oConn.Close

%>

如何查找某个分类的所有产品

现在来解决我们在前面提出的第四个问题。第三个问题留作习题。我们假设产品的数据表如下定义:


Create Table Product(

[ID] [int] NOT NULL,

[Name] [nvchar] NOT NULL,

[FatherID] [int] NOT NULL

);

其中,ID是产品的编号,Name是产品的名称,而FatherID是产品所属的分类。对第四个问题,很容易想到的办法是:先找到这个分类FID的所有子类,然后查询所有子类下的所有产品。实现这个算法实际上很复杂。代码大致如下:


<%

Function GetAllID(oConn,FID)

Dim strTemp


If FID=-1 then

strTemp = ""

else

strTemp =","

end if


strSQL = "select Name from catalog where FatherID="&FID

set rsCatalog = oConn.Execute(strSQL)

Do while not rsCatalog.Eof

strTemp=strTemp&rsCatalog("ID")&
GetAllID(oConn,Catalog("ID")) REM 递归调用

Loop

rsCatalog.Close


GetAllID = strTemp

End Function


REM strConn--连接数据库的字符串,请根据情况修改

set oConn = Server.CreateObject("ADODB.Connection")

oConn.Open strConn


FID = Request.QueryString("FID")


strSQL = "select top 100 * from Product
where FatherID in ("&GetAllID(oConn,FID)&")"

set rsProduct=oConn.Execute(strSQL)

%>

<%

Do while not rsProduct.EOF

%>



<%

Loop

%>



<%rsProduct.Close

oConn.Close

%>

这个算法有很多缺点。试列举几个如下:

1、 由于我们需要查询FID下的所有分类,当分类非常多时,算法将非常地不经济,而且,由于要构造一个很大的strSQL,试想如果有1000个分类,这个strSQL将很大,能否执行就是一个问题。

2、 我们知道,在SQL中使用In子句的效率是非常低的。这个算法不可避免地要使用In子句,效率很低。

我发现80%以上的程序员钟爱这样的算法,并在很多系统中大量地使用。细心的程序员会发现他们写出了很慢的程序,但苦于找不到原因。他们反复地检查SQL的执行效率,提高机器的档次,但效率的增加很少。

最根本的问题就出在这个算法本身。算法定了,能够再优化的机会就不多了。我们下面来介绍一种算法,效率将是上面算法的10倍以上。

分类编码算法

问题就出在前面我们采用了顺序编码,这是一种最简单的编码方法。大家知道,简单并不意味着效率。实际上,编码科学是程序员必修的课程。下面,我们通过设计一种编码算法,使分类的编号ID中同时包含了其父类的信息。一个五级分类的例子如下:

此例中,用32(4+7+7+7+7)位整数来编码,其中,第一级分类有4位,可以表达16种分类。第二级到第五级分类分别有7位,可以表达128个子分类。

显然,如果我们得到一个编码为 1092787200 的分类,我们就知道:由于其编码为

0100 0001001 0001010 0111000 0000000

所以它是第四级分类。其父类的二进制编码是0100 0001001 0001010 0000000 0000000,十进制编号为1092780032。依次我们还可以知道,其父类的父类编码是0100 0001001 0000000 0000000 0000000,其父类的父类的父类编码是0100 0000000 0000000 0000000 0000000。

现在我们在一般的情况下来讨论类别编码问题。设类别的层次为k,第i层的编码位数为Ni, 那么总的编码位数为N(N1+N2+..+Nk)。我们就得到任何一个类别的编码形式如下:

2^(N-(N1+N2+…+Ni))*j + 父类编码

其中,i表示第i层,j表示当前层的第j个分类。这样我们就把任何分类的编码分成了两个部分,其中一部分是它的层编码,一部分是它的父类编码。由下面公式定一的k个编码我们称为特征码:(因为i可以取k个值,所以有k个)

2^N-2^(N-(N1+N2+…+Ni))

对于任何给定的类别ID,如果我们把ID和k个特征码“相与”,得到的非0编码,就是其所有父类的编码!

位编码算法

对任何顺序编码的Catalog表,我们可以设计一个位编码算法,将所有的类别编码规格化为位编码。在具体实现时,我们先创建一个临时表:


Create TempCatalog(

[OldID] [int] NOT NULL,

[NewID] [int] NOT NULL,

[OldFatherID] [int] NOT NULL,

[NewFatherID] [int] NOT NULL

);

在这个表中,我们保留所有原来的类别编号OldID和其父类编号OldFatherID,以及重新计算的满足位编码要求的相应编号NewID、NewFatherID。

程序如下:


<%

REM oConn---数据库连接,已经打开

REM OldFather---原来的父类编号

REM NewFather---新的父类编号

REM N---编码总位数

REM Ni--每一级的编码位数数组

REM Level--当前的级数


sub FormatAllID(oConn,OldFather,NewFather,N,Nm,Ni byref,Level)

strSQL = "select CatalogID ,
FatherID from Catalog where FatherID=" & OldFather

set rsCatalog=oConn.Execute( strSQL )


j = 1

do while not rsCatalog.EOF

i = 2 ^(N - Nm) * j

if Level then i= i + NewFather



OldCatalog = rsCatalog("CatalogID")

NewCatalog = i

REM 写入临时表:


strSQL = "Insert into TempCatalog (OldCatalogID ,
NewCatalogID , OldFatherID , NewFatherID)"

strSQL = strSQL & " values(" & OldCatalog & " ,
" & NewCatalog & " , " & OldFather & " , " & NewFather & ")"

Conn.Execute strSQL

REM 递归调用FormatAllID:

Nm = Nm + Ni(Level+1)

FormatAllID oConn,OldCatalog , NewCatalog ,N,Nm,Ni,Level + 1


rsCatalog.MoveNext

j = j+1

loop

rsCatalog.Close

end sub

%>

调用这个算法的一个例子如下:


<%

REM 定义编码参数,其中N为总位数,Ni为每一级的位数。

Dim N,Ni(5)

Ni(1) = 4

N = Ni(1)

for i=2 to 5

Ni(i) = 7

N = N + Ni(i)

next

REM 打开数据库,创建临时表:


strSQL = "Create TempCatalog( [OldID]
[int] NOT NULL, [NewID] [int] NOT NULL,
[OldFatherID] [int] NOT NULL, [NewFatherID] [int] NOT NULL);"

Set Conn = Server.CreateObject("ADODB.Connection")

Conn.Open Application("strConn")

Conn.Execute strSQL

REM 调用规格化例程:


FormatAllID Conn,-1,-1,N,Ni(1),Ni,0


REM ---------------------------------------------

REM 在此处更新所有相关表的类别编码为新的编码即可。

REM ----------------------------------------------

REM 关闭数据库:


strSQL= "drop table TempCatalog;"
Conn.Execute strSQL
Conn.Close

%>

第四个问题

现在我们回头看看第四个问题:怎样得到某个分类下的所有产品。由于采用了位编码,现在问题变得很简单。我们很容易推算:某个产品属于某个类别的条件是Product.FatherID&(Catalog.ID的特征码)=Catalog.ID。其中“&”代表位与算法。这在SQL Server中是直接支持的。

举例来说:产品所属的类别为:1092787200,而当前类别为1092780032。当前类别对应的特征值为:4294950912,由于1092787200&4294950912=8537400,所以这个产品属于分类8537400。

我们前面已经给出了计算特征码的公式。特征码并不多,而且很容易计算,可以考虑在Global.asa中Application_OnStart时间触发时计算出来,存放在Application(“Mark”)数组中。

当然,有了特征码,我们还可以得到更加有效率的算法。我们知道,虽然我们采用了位编码,实际上还是一种顺序编码的方法。表现出第I级的分类编码肯定比第I+1级分类的编码要小。根据这个特点,我们还可以由FID得到两个特征码,其中一个是本级位特征码FID0,一个是上级位特征码FID1。而产品属于某个分类FID的充分必要条件是:


Product.FatherID>FID0 and Product.FatherID<FID1

下面的程序显示分类FID下的所有产品。由于数据表Product已经对FatherID进行索引,故查询速度极快:


<%

REM oConn---数据库连接,已经打开

REM FID---当前分类

REM FIDMark---特征值数组,典型的情况下为Application(“Mark”)

REM k---数组元素个数,也是分类的级数

Sub GetAllProduct(oConn,FID,FIDMark byref,k)

' 根据FID计算出特征值FID0,FID1

for i=k to 1

if (FID and FIDMark = FID ) then exit

next

strSQL = "select Name from Product where FatherID>
"FIDMark(i)&" and FatherID<"FIDMark(i-1)

set rsProduct=oConn.Execute(strSQL)%>

<%

Do While Not rsProduct.Eof%>

<%=rsProduct("Name")

Loop%>

<%

rsProduct.Close

End Sub

%>

关于第5个问题、第6个问题,就留作习题吧。有了上面的位编码,一切都应该迎刃而解。

站长微信号

微信扫一扫加好友

返回
顶部