代码范文10篇

时间:2023-03-19 17:34:49

代码

代码范文篇1

关键词逆向工程;代码混淆;软件保护;类分裂

1引言

计算机软件的安全一直是软件企业和相关研究领域的关注重点,当前存在的软件保护技术分别有硬件辅助保护、序列号保护、加密保护、服务器认证、防篡改以及代码混淆等。随着JAVA语言、逆向工程的迅速发展和普遍运用以及恶意主机对软件的逆向分析等突出安全问题的不断涌现,使得代码混淆,这一新的保护软件安全的技术正越来越受到人们的重视。

2代码混淆的定义和分类

2.1代码混淆定义

给定一个程序P、策略T,经过混淆变换后得到程序P''''(见图1)。此过程称之为混淆变换,如果对程序进行一种功能保持的变换,变换后的程序拥有和原始程序相同的功能。更确切的说法应该包含以下两个条件:①如果P出错终止或终止失败,P''''不一定终止。②P和P''''在正常终止情况下,P''''必须产生与P相同的输出。

所不同的是经过转换的P''''相较P更难于被静态分析等逆向工程方法攻击,即使被反编译,生成的程序也难以被人阅读和理解。

图1代码混淆

2.2代码混淆分类

根据混淆对象和对其进行操作的差别,可将代码混淆技术分为布局(layout)混淆、控制(control)混淆、数据(data)混淆、预防(preventive)混淆等几种。

(1)外形混淆。该类混淆主要包括对程序中的变量名、常量名、类名、方法名称等标识符作词法上的变换改名和删除程序中与执行无关的调试信息、注释、源码格式等。

(2)控制混淆。该类混淆的目的是使得攻击者对程序的控制流难以理解。主要包括打乱某段代码本身逻辑关系的聚集混淆(AggregationTransformation)、把相关语句分散到程序不同位置并实现某项功能的次序混淆(OrderingTransformation)和隐藏真实执行路径的执行混淆(ComputationTransformation)­­等。

(3)数据混淆。数据混淆的对象是程序中的数据域。它可细分为相关数据的储存(Storage)与编码(Encoding)方式的混淆、组合和拆分数据的聚集(Aggregation)混淆、位序重计的次序(Ordering)混淆等。

(4)预防混淆。与前述混淆类型针对恶意用户不同,预防混淆主要利用一些专用反编译器的设计缺陷,以使这些反编译器难以反向还原混淆之后的代码。例如,反编译器mocha对于Return后面的指令不进行反编译,Hosemocha就是专门针对此缺陷,故意将代码放在Return语句后面,从而使反编译失效。

2.3类分裂

介绍完代码混淆的分类后,接下来我将就面向对象语言中的一种混淆技术:类分裂(classsplitting)进行说明。首先对类分裂进行定义:类分裂是将一个初始(原)类用两个或两个以上的类来替换的混淆方法。对类分裂进行叙述前,我们规定以下相关使用术语的意义:

P:JAVA程序

Classes(P):P中一般类的集合

Interfaces(P):P中接口类的集合

ct:Class或Interface中的任意类

Methods(ct):ct中的成员函数的集合

Field(ct):ct中的成员变量的集合

注:Methods(ct),Field(ct)不包括从父类继承的成员函数和成员变量,而只包括:①当前定义类中新定义的成员函数和成员变量。②当前定义类所覆盖的其父类的成员函数。

依赖(depends)关系的定义:

m,nMethods(ct),如果存在m调用n,则(m,n)∈depends

andm∈Methods(ct),f∈Field(ct),如果存在m使用了f,则

(m,f)∈depends

为了便于用例的书写,特做说明,图2左列和右列的符号实际上表示同一类。

分裂函数usplit代表了这么一个分裂过程:原来的类的成员(成员函数或成员变量)被拆分到某个或是两个新类中。

分裂函数的选择必须考虑到成员函数之间或成员函数和成员变量之间的依赖关系,这是决定分裂函数是否有效的重要标准。下面的程序中,初始程序中的类Ct不能被分为混淆后的程序中两个毫无继承关系的新类,而应分裂为具有继承关系的类ct,1和ct,2。可以使用另一种表达方式描述:初始程序中类Ct的m2成员函数调用了m3成员函数,因此我们不能将m2作为ct,1的成员函数,m3作为ct,2的成员函数,而ct,1和ct,2两者间无继承关系。而应将m2作为子类ct,2的成员函数,m3作为父类ct,1的成员函数。且成员函数m3不需要修改,m3依旧调用m2。

如果出现这种情况:由于初始程序中的类设计本身存在缺陷,导致该类实际等同于多个类的组合。在此前提下,可以将初始类分裂为毫无继承关系的两个或两个以上新类。

将类分裂为具有继承关系的新类的方法产生了大量有效的分裂函数,这是因为这种分裂方法的约束条件非常简单且只具有惟一的限制:成员函数和成员函数所使用到的成员变量必须在同一类中定义,而这个类必须是定义成员函数的类。用公式表述如下:

m∈Methods(ct):

ifct,1∈usplit(m),then

n∈Methods(ct)):depends(m,n)→ct,1∈usplit(n)and

f∈Fields(ct)):depends(m,f)→ct,1∈usplit(f)

原则的体现如同下面所示类分裂混淆例子所示:成员函数m3调用了成员函数m4,因此将m3和m4定义为类ct,1的成员函数。由于分裂函数usplit将m4函数分配给了类ct,2,类ct,1的成员函数m4其实只是一个虚假的程序段(函数),它使恶意逆向工程人员以为调用的是ct,1的成员函数m4。但实际情况是:程序运行期间ct,1的成员函数m4将不会被调用,它将被ct,2的m4成员函数所覆盖。同时,类ct,1中构造函数用到的成员变量i,d都在类ct,1定义,类ct,2中构造函数用到的成员变量o则在类ct,2定义。

接着,当新类产生后,必须要对原有的类型声明进行替换,主要包括:

3代码混淆的评判指标

程序混淆效果通常从强度(potency)、耐受性(resilience)、开销(cost)、隐蔽性(stealth)等4个方面来评估:

(1)强度。指混淆变换后的程序相对原始的程序对恶意用户理解程序造成的困难程度或复杂度。

(2)耐受性。指混淆变换后的程序对使用自动去混淆工具进行攻击的抵抗度。其抵抗度大小与前述标准之一的强度的大小无直接联系,甚至可能出现某些强度很高的混淆变换对自动去混淆工具的抵抗能力却很差的情况。

(3)开销。指经过混淆变换后的程序在执行时由变换所带来的额外的执行时间和所需存储空间的开销。

(4)隐蔽性。耐受性好的混淆变换不容易被自动去混淆工具所去除,但却可能很容易被攻击者的人工分析识破。特别是,如果一种变换所引入的代码和原始程序有较大的差异性,就会轻易地被攻击者识破,因此应尽力使用与原代码相近的语法结构等来加强隐蔽性。

4结语

代码混淆的目的是防止对软件的逆向分析,从而有效保护软件知识产权。它通过改变程序本身,使其转换为极难理解和分析的新程序,最终让恶意攻击者在必须耗费其所不能承受的代价(时间或其它方面)面前,放弃对软件的分析来实现。但代码混淆技术作为一种新的软件保护方法,在理论基础、技术成熟度等方面依旧存在许多不足,这也将是代码混淆技术下一步要解决的问题。

参考文献

[1]C.Collberg,C.Thomborson,andD.Low.ATaxonomyofObfuscatingTransformations.TechnicalReport148,July1997

[2]C.S.CollbergandC.Thomborson.Watermarking,Tamper-Proofing,andObfuscation-ToolsforSoftwareProtection.IEEETransactiononSoftwareEngineering,28(8):735-746,Aug,2002

[3]H.ChangandM.Atallah.Protectingsoftwarecodebyguards.InProceedingoftheACMWorkshoponSecurityandPrivacyinDigitalRightsManagements,pages160-175,Nov.2001

[4]C.Wang.ASecurityArchitectureforSurvivabilityMechanisms.PhDthesis,UniversityofVirginia,SchoolofEngineeringandAppliedScience,October2000

[5]MikhailSosonkin,GlebNaumovichandNasirMemon.Obfuscationofdesignintentinobject-orientedapplications.DepartmentofComputerandInformationSciencePolytechnicUniversity2003

代码范文篇2

第二条本办法所称组织机构代码(以下简称代码),是指根据国家的代码编制规则编制,赋予机关、企业、事业单位、社会团体及其他组织(以下统称组织机构)在全国范围内唯一的、始终不变的法定标识。

第三条本市行政区域内的下列组织机构,应当依照本办法办理代码登记:

(一)依法设立的本市的机关、企业、事业单位和社会团体;

(二)经市人民政府有关主管部门批准成立或者核准登记的外地的驻京机构;

(三)经市人民政府外事部门或者其他有关主管部门批准成立或者核准登记的国外或者境外非政府组织的驻京机构;

(四)国家质量技术监督行政主管部门委托或者指定在本市办理代码登记的组织机构;

(五)其他依法成立的本市的组织机构。

第四条市技术监督行政主管部门主管本市代码管理工作,其主要职责是:

(一)组织实施代码制度;

(二)指导、协调代码应用工作;

(三)监督检查本办法的实施;

(四)管理与代码制度有关的工作。

区、县技术监督行政主管部门根据市技术监督行政主管部门的规定,负责本行政区域内的代码管理工作。

市和区、县人民政府有关部门应当在各自的职责范围内,协助技术监督行政主管部门做好代码的登记、应用和管理工作。

第五条市组织机构代码管理中心(以下简称市代码管理中心)在市技术监督行政主管部门的领导下,具体负责代码登记工作,其主要职责是:

(一)划分代码区段;

(二)核准代码登记申请,赋予代码,核发代码证书;

(三)建立本市的代码数据库和代码信息管理系统;

(四)定期审查、核对代码及代码信息;

(五)提供代码信息咨询服务。

第六条组织机构应当自批准成立或者核准登记之日起15日内,向市代码管理中心申请代码登记,根据情况出示下列有关文件、证件,并提交其复印件:

(一)营业执照;

(二)法定的登记证、注册证或者许可证;

(三)其他法定批准文件、证件。

第七条市代码管理中心应当自组织机构申请代码登记之日起10日内,对所提交的文件、证件进行审核。对符合条件的组织机构,具有法人资格的,赋予其法人代码并核发法人代码证书;不具有法人资格的,赋予其非法人代码并核发非法人代码证书。对不符合条件的组织机构,不予赋码,并应当说明理由。

市代码管理中心应当及时将代码登记的有关情况通知有关部门。

第八条代码证书由国家统一印制,包括正本、副本和电子副本。正本、副本和电子副本具有同等法律效力。

任何组织机构或者个人不得伪造、涂改、出售、转让、出租、出借代码证书,不得使用失效的代码证书。

第九条组织机构变更主要登记项目的,应当自有关管理部门批准或者核准变更之日起15日内,持有关文件向市代码管理中心申请变更代码登记项目。

变更项目涉及代码证书内容的,应当更换代码证书,但原代码不变。

第十条组织机构依法终止的,应当自有关管理部门批准或者核准注销、撤销之日起15日内,持有关文件到市代码管理中心办理代码注销登记。经审查核实的,应当注销其代码并收回代码证书。

被注销的代码,不得再赋予其他组织机构。

市和区、县人民政府有关部门应当定期将组织机构注销、撤销等有关情况通知市代码管理中心。

第十一条代码证书正本毁损或者灭失的,应当自发现代码证书毁损或者灭失之日起10日内,向市代码管理中心申请补领代码证书;代码证书副本和电子副本毁损或者灭失的,可以根据实际需要申请补领。

补领的代码证书,原代码不变。

第十二条市代码管理中心应当保证代码质量,做到不重码,不错码。

代码证书实行年度审核制度,组织机构应当在规定的期限内提供有关审核资料。对年审合格的,应当在代码证书上加盖戳记;对年审不合格的,依照本办法的有关规定予以处理。

第十三条代码的有关收费,依照国家和本市有关规定执行。

第十四条市计划、财政、税务、金融、劳动、人事、统计、公安交通、社会保险、国有资产管理等部门应当在有关报表上设置“代码”一栏,并在办理有关业务时查验组织机构的代码证书。

第十五条各类组织和个人可以查询代码或者代码信息。市代码管理中心应当按照国家有关保密的规定,区分情况对查询提供信息服务。

第十六条违反本办法规定,未办理代码登记、变更、年审、注销或者代码证书更换、补领手续的,由市或者区、县技术监督行政主管部门责令其限期改正;逾期未改正的,处以100元以上1000元以下的罚款。

第十七条违反本办法规定的,伪造、涂改、出售、转让、出租、出借代码证书以及使用失效的代码证书的,由市或者区、县技术监督行政主管部门予以警告,并可处以100元以上1000元以下的罚款;对伪造、涂改代码证书以及使用失效的代码证书的,没收其代码证书,需要办理代码证书的,应当按照本办法的有关规定重新办理。

代码范文篇3

关键词:自动代码生成;电池管理系统;电动汽车

在国家政策的大力扶持下,电动汽车的发展速度迅猛,作为电动汽车的核心部件动力电池系统,属于新兴行业,技术相对不完善。但在行业状态的驱使下,要求动力电池系统的开发周期越来越短,而对其功能要求越来越复杂。许多厂家开始意识到传统的开发模式难以满足目前的需要,逐渐引入新的开发流程。

1电池管理系统简介

电池管理系统主要通过对电池电压、温度、电流等信息的采集,实现高压安全管理、电池状态估计、电池能量管理、故障诊断报警、电池状态管理等功能,并通过CAN总线将动力电池系统关键参数与整车控制器通讯,进行信息交互,从而实现对电池系统安全有效的管理,避免电池过充、过放,延长电池使用寿命。

2V模式开发流程

汽车行业普遍使用的V开发流程,开发效率高,得到一致好评。V模式开发流程的一个特点就是需求和验证同步进行,开发过程的每一步都可以得到及时验证,大大降低纠错成本。基于模型的设计方法首先对电池管理控制系统进行了需求分析、设计开发、仿真和验证,然后为其生成了产品代码。具体来看,在BMS开发中V流程的测试环节的关键步骤涵盖了MIL(modelinloop),即通过计算机对BMS的控制对象进行建模,而在建模的同时依靠工具链完成模型的验证,这也是V流程开发的第一步;接着是SIL(softwareinloop),指的是当模型开发完成后,利用simulink上的工具可以直接将模型生成成代码,模型转化成代码之后,由于编译器可能出现错误,因此在生成代码后还需要进行一轮功能测试和验证;接着是PIL(processinloop)即处理器在环,当软件完成后,将软件下载到的MCU测试芯片中去,验证代码在芯片中的运行;然后才是将程序下载到BMU中完成我们熟知的HIL测试(Hardwareinloop),而将BMS系统装入真实的电池系统进行实际的验证测试往往已是最后一步。

3电池管理系统开发流程

电池管理系统的开发过程,配置了相关软件工具的支持,开发工具链如下图2所示。图2开发工具链在确定了项目需求之后,首先建立电池基本的浮点控制器模型,见图3。使用测试数据开发出电池的Simulink模型。该模型在控制器模型验证时,可以提供电池动态信息,从而使测试结果更准确。电池管理系统的模型,首先把电池管理系统根据功能进行细分。其次,确定每个子系统的接口,即输入输出量。第三,根据控制策略及逻辑关系。第四,建立模型,仿真验证,测试。第五,生成代码。

4结论

MATLAB建模及自动代码生成的工具,应用在电池管理系统的开发中,是行之有效的,大大缩短了开发周期,同时提高了软件开发的可靠性。

参考文献

[1]魏学哲,孙泽昌,邹广楠.模块化的HEV锂离子电池管理系统[J].汽车工程,2004,26(6):629-631.

代码范文篇4

一、工作中存在的主要问题及原因

全县内设机构测评活动开展以来,我办积极参与,并采取了一些措施改进干部作风,完善办事流程,尽可能为广大服务对象提供更优质的服务。测评活动结束后,根据贵办通报的全县2013年内设机构测评结果,代码办位于行政执法类后三名。测评结果表明,我们的工作没有得到社会的充分认可,还存在不少有待于改进的问题。

经过认真查摆和深刻分析,我办工作还存在以下问题和薄弱环节。一是宣传没到位,没有争取到广大服务对象的充分理解和支持。组织机构代码证就是各类机构的身份证,涉及到各行业各部门,但各类机构中了解相关政策规定的非常少。我办每年都会在年初通过《井冈山报》、电视台和短信平台进行宣传,提醒、督促各单位按要求办理,但从目前来看,仅这些还远远不够。二是服务没到位,没有得到广大服务对象的充分认可。目前一些工作措施主要是针对面上的服务对象,对个体没有采取“1+1”式的服务举措。此外,在便民服务方面做得还不够,验证时间集中,一些单位来办证时排队等候时间长。对此,我办将在以后的工作中认真加以完善。

二、整改措施

1、加大宣传力度。多渠道、多形式开展宣传服务活动。一是继续在每年年初通过《井冈山报》、电视台、短信等方式,及时告知办证程序、办理要求、服务电话,提醒带齐办证相关材料。二是充分利用政府信息网和部门网站,宣传代码证书办理政策。三是利用“3.15”等各类活动做好服务宣讲。

代码范文篇5

为了加强对本市组织机构代码登记工作的管理,准确反映组织机构的信息,完善社会管理、监督体系,根据国家有关规定,结合本市实际,制定本办法。

第二条(定义)

本办法所称的组织机构代码,是指根据国家有关代码编制原则编制,赋予本市国家机关、企业、事业单位、社会团体及其他组织机构在全国范围内的唯一、始终不变的法定标识。

第三条(登记范围)

本市范围内的下列组织机构,应当按照本办法的规定,办理代码登记手续:

(一)经机构编制管理部门批准成立的国家机关、事业单位;

(二)经企业登记管理部门核准登记的企业;

(三)经社会团体登记管理部门核准登记的社会团体;

(四)经协作管理部门核准登记的中央和外省市驻沪机构;

(五)经外事部门或者其他有关主管部门核准登记的国外或者境外非政府组织的驻沪机构。

第四条(主管部门和相关部门的职责)

上海市技术监督局是本市代码登记工作的主管部门,其管理代码工作的职责是:

(一)组织实施代码制度;

(二)划分各类代码的区段;

(三)核准代码登记申请,赋予代码,颁发代码证书;

(四)建立本市代码管理数据库,提供有关代码信息服务;

(五)管理、监督、实施与代码制度有关的工作。

市技术监督局可以委托区、县技术监督部门办理有关代码登记、管理工作。

本市其他有关部门应当依照本办法的规定,在各自职责范围内协助技术监督部门做好代码登记工作。

第五条(代码登记申请)

本市各类组织机构应当自批准成立或者核准登记之日起30日内,持有关批准文件或者登记证书,向技术监督部门申请代码登记。

本办法实施以前已经设立的组织机构尚未申领代码证书的,应当在本办法实施之日起30日内向技术监督部门申请代码登记。

组织机构申请代码登记应当提交的有关文件,由市技术监督局另行规定。

第六条(对申请代码登记的核准)

技术监督部门应当自组织机构申请代码登记之日起10日内,对所提交的批准文件或者登记证书的真实性、合法性、有效性进行审核;经审查核准的,赋予代码并颁发代码证书。

第七条(代码的分类)

代码分为法人代码和非法人代码。具有法人资格的组织机构,其代码为法人代码;不具有法人资格的组织机构,其代码为非法人代码。

第八条(代码证书的颁发)

代码证书是由国家统一印制的、证明组织机构具有法定代码标识的凭证。

技术监督部门对经核准赋予法人代码的组织机构,应当分别颁发《中华人民共和国机关法人代码证书》、《中华人民共和国企业法人代码证书》、《中华人民共和国事业单位法人代码证书》、《中华人民共和国社会团体法人代码证书》;对经核准赋予非法人代码的组织机构,应当分别颁发《中华人民共和国机关代码证书》、《中华人民共和国企业代码证书》、《中华人民共和国事业单位代码证书》、《中华人民共和国社会团体代码证书》。

第九条(代码证书的正本和副本)

技术监督部门颁发的代码证书分为正本和副本。正本和副本具有同样的效力。

组织机构可以申领代码证书正本一份、副本若干份。

任何组织机构或者个人不得伪造、涂改、出借或者转让代码证书的正本和副本。

第十条(代码证书的换领)

组织机构的名称、住所等发生变更时,应当自有关主管部门批准或者核准变更之日起30日内,持有关文件或者证书,向技术监督部门申请换领代码证书。

技术监督部门应当自组织机构申请换领代码证书之日起10日内,对所提交的有关文件或者证书的真实性、合法性、有效性进行审核;经审查核准的,收回原代码证书,颁发新的代码证书。

第十一条(代码的注销)

组织机构依法终止的,应当向技术监督部门办理代码注销手续;技术监督部门应当注销其代码,收回代码证书。

被注销的代码,不得再赋予其他组织机构。

第十二条(代码证书的补发)

代码证书毁损或者灭失的,组织机构应当及时向技术监督部门申请补发代码证书。

第十三条(代码证书的有效期)

代码证书自颁发之日起4年内有效。组织机构应当在有效期届满之日起30日内,持代码证书的正本和副本向颁发证书的技术监督部门办理换证手续。

市技术监督局可以根据本市重大社会、经济活动的需要,经市人民政府批准,对有效期内的代码证书组织开展验证工作。

第十四条(代码的应用)

本市计划、财政、税务、金融、劳动、人事、统计、公安、社会保险、国有资产管理等部门在其有关业务活动中,应当使用代码。

代码的具体使用范围和办法,由市技术监督局会同各有关部门确定。

政府鼓励社会各行业积极推广应用代码。

第十五条(对不办理有关手续的处罚)

组织机构违反本办法第五、十、十一、十二、十三条的规定,未办理代码登记、注销或者代码证书换领、补发手续的,技术监督部门应当责令其限期补办手续,并可处以500元以上5000元以下的罚款。

违反本办法第十一条第一款规定的,可以对有关责任人员处以50元以上500元以下的罚款。

第十六条(对伪造、涂改代码证书等行为的处罚)

组织机构或者个人违反本办法第九条第三款的规定,伪造、涂改、出借、转让代码证书,或者使用失效代码证书的,技术监督部门应当没收其代码证书和非法所得,并可处以2000元以上20000元以下的罚款。

第十七条(复议和诉讼)

当事人对行政处罚决定不服的,可以依照《行政复议条例》和《中华人民共和国行政诉讼法》的规定申请复议或者向人民法院起诉。

当事人逾期不申请复议、不向人民法院起诉又不履行行政处罚决定的,作出处罚决定的部门可以申请人民法院强制执行。

代码范文篇6

第二条本办法所称组织机构代码(以下简称代码),是指根据国家有关代码编制原则编制,赋予本省区域内的组织机构在全国范围内唯一的、始终不变的法定代码标识。

第三条本省区域内下列组织机构,应当按照本办法规定办理代码登记手续:

(一)经县级以上机构编制行政管理部门批准成立的国家机关、事业单位;

(二)经县级以上企业登记行政管理部门核准登记的企业;

(三)经县级以上社会团体登记行政管理部门核准登记的社会团体;

(四)其他依法设立的组织机构。

第四条省技术监督行政管理部门是本省代码工作的主管部门,其主要职责是:

(一)负责向国家代码主管部门申请码段,组织制作代码标识和分配各类代码区段;

(二)统一管理本省的赋码、颁证工作;

(三)负责代码的推广应用和技术开发工作;

(四)建立本省代码管理数据库,提供有关代码信息服务;

(五)管理、监督与代码制度有关的工作。

地、市、县(市、区)技术监督行政管理部门是本地区代码工作的主管部门,负责本地区代码的赋码、颁证、应用和管理工作。

第五条各级人民政府应积极推广应用代码。

各级人民政府有关部门应按照职责,协助技术监督行政管理部门做好代码的推广应用和管理工作。

第六条组织机构应在批准成立或者核准登记之日起15日内,持有关批准文件或者登记证书,向批准其成立或者核准其登记的管理部门同级的技术监督行政管理部门申请代码登记。技术监督行政管理部门应当自接到申请之日起10日内,对所提交的批准文件或者登记证书进行审核;经审查核实的,赋予代码并颁发代码证书。

本办法实施前已经设立的组织机构尚未申领代码证书的,应当在本办法实施之日起30日内向批准其成立或者核准其登记的管理部门同级的技术监督行政管理部门申请代码登记。

第七条技术监督行政管理部门对经核准赋予代码的组织机构,应当根据其性质分别颁发不同的代码证书。

代码证书分为法人代码证书和非法人代码证书。具有法人资格的组织机构,领取法人代码证书;不具有法人资格的组织机构,领取非法人代码证书。

第八条代码证书是由国家代码主管部门统一印制的、证明组织机构具有法定代码标识的凭证。

代码证书分为正本和副本,正本和副本具有同等效力;组织机构可以申领代码证书正本1份,副本若干份。

任何组织机构或者个人不得伪造、涂改、出借或者转让代码证书的正本或者副本。

第九条组织机构的名称、住所等发生变更时,应当自变更之日起30日内,持变更证明到技术监督行政管理部门申请换领代码证书。技术监督行政管理部门应当自收到换领代码证书申请之日起10日内,对所提交的有关文件进行审核;经审核核实的,收回原代码证书,颁发新的代码证书。

第十条组织机构依法终止的,应在终止前30日内持有关证明和代码证书到原发证技术监督行政管理部门办理注销手续;技术监督行政管理部门审查、核实后,应当注销其代码,收缴代码证书。

被注销的代码,不得再赋予其他组织机构。

第十一条代码证书遗失或者毁损的,应当自遗失或者毁损之日起15日内向原发证技术监督行政管理部门提交有关证明,申请补办代码证书;技术监督行政管理部门审查核实后,补发代码证书。

第十二条代码证书自颁发之日起4年内有效。组织机构应当在有效期届满前30日内,持代码证书的正本和副本向原发证技术监督行政管理部门办理换证手续。

技术监督行政管理部门根据社会、经济生活的需要,每2年可对代码证书的有效性审查一次。

第十三条各级人民政府有关部门在其业务活动中,应当使用组织机构代码。

代码的具体使用办法,由省技术监督行政管理部门会同有关部门制定。

第十四条技术监督行政管理部门可根据有关国家机关的需要,无偿向其提供代码信息的检索服务。

技术监督行政管理部门提供代码信息服务,有关组织机构使用代码信息,均须遵守国家信息管理的有关规定。

第十五条违反本办法规定,未办理代码登记或者代码证书换领、补发手续以及未按期接受技术监督行政管理部门审查的,技术监督行政管理部门应当责令其限期改正,并可处500元以上、1000元以下的罚款。

违反本办法第十条第一款规定的,技术监督行政管理部门可对有关责任人员处50元以上、500元以下的罚款。

第十六条违反本办法规定,伪造、涂改、出借、转让代码证书的,技术监督行政管理部门应没收代码证书,并按下列规定给予处罚:

(一)对非经营性的违法行为,处1000元以下的罚款;

(二)对经营性的违法行为,处10000元以下的罚款。

第十七条技术监督行政管理部门及其工作人员,应秉公办事、依法行政。徇私舞弊、玩忽职守的,所在单位或者上级主管部门应给予主要负责人和直接责任人行政处分。

代码范文篇7

1基础信息的全面性组织机构代码信息中主要包含机构代码、机构名称、机构类型、法定代表人(负责人)、经营(业务范围)、经济行业、职工人数、行政区划、机构地址、经营地址及邮政编码等28项基本数据内容。且信息涉及的较为全面,基本将组织机构的全部公用信息都包含在内,同时与一些特殊机构的保密性进行考虑,还设置对组织机构信息进行公开的自主选项,若单位选择不公开的方式,则在数据共享的传递过程中,该单位的信息则不会显示。基础信息还包括对批准机构的名称进行登记,不仅促使单位的合法有效身份得到保障,而且还能对同一批准机构的组织机构信息进行详细的统计分析,作为相关部分的参考依据。此外,还应采集主管单位的信息,从而实现在同一主管单位以下对分支机构的树状统计分布图进行设置。

2经济行业的分类国民经济行业分类主要是对全社会经济活动的标准进行分类,作为统计分类的基础,作为政府对经济社会管理的关键依据。目前,组织机构代码在全国范围内的覆盖范围较为全面,在对基本信息进行录入时,对代码工作人员进行要求,严格按照机构的经营或业务范围(职责或宗旨)来进行经济行业划分,并对经济行业划分进行分析及选择。随着经济行业划分标准的出台,在最新标准GB/4754-2002中对经济行业进行了划分,主要分为20个门类,95个大类,395个中类,912个小类。作为组织机构代码中无意义的码,通过对经济行业的划分,可以将原本无意义的组织机构代码信息进行分类管理,并按照行业来进行分析统计。

3对行业区划的采集在组织机构代码管理系统中,具有对机构地址进行录入的功能,结合证照,组织机构可以通过对行政划分再与机构类型相结合的方式,对某地域范围内,各类机构的分布状况进行了解。例如:若有灾害产生时,通过对数据信息的读取,就能对受灾地点的实际情况进行了解,便于政府对救灾工作进行合理的判断。

4对登记机构的批准我国具有等级资格批准的部门主要包括以下几种:县级以上的政府、党委、编委、工商、民政、工会及经贸委等政府部门。所以在对机构进行信息登记时,不仅应确保该组织机构的合法性,而且还应严格遵守组织机构代码办理的管理原则进行工作。在对组织机构进行办理时,应在批准机构归属地的技术监督部门进行办理,使组织机构的归属地得到明确,以便有利于政府部门在辖区范围内规定组织机构管理。

5主管部门登记工作在分支机构进行信息采集时,应向机构提交上级单位颁发的组织机构代码证书复印件,若主管单位的组织机构代码证书的时间不在有效期范围之内,分支机构则无权对组织机构代码证书进行办理。主管部门经过对信息的采集,组织机构代码管理系统有权对各主管单位下属的分支机构的树状统计分析图进行调用。

6组织机构代码证书的时效性组织机构代码证主要包括正副两个纸质证书及一个电子副本IC卡。根据国家相关规定,组织机构代码证的时效性最长不得超过4年。随着我国国民经济的发展速度逐渐加快,各组织机构的更名、迁址、变更及注销等现象经常出现,特别是具有发展不稳定的经营性企业及单位机构改革的事业单位中各类因素的产生,都会促使一个单位的相关信息出现变更甚至死亡。若机构不能在有效期之内前往发证机关对上述变动手续进行办理,那么证书在超过时间限制以后则会被变更为无效证书。进一步减少单位所造成的不必要的损失。

二、结语

代码范文篇8

为了加强对本市组织机构代码登记工作的管理,准确反映组织机构的信息,完善社会管理、监督体系,根据国家有关规定,结合本市实际,制定本办法。

第二条(定义)

本办法所称的组织机构代码(以下简称代码),是指根据国家有关代码编制原则编制,赋予本市国家机关、企业、事业单位、社会团体及其他组织机构在全国范围内的唯一、始终不变的法定标识。

第三条(登记范围)

本市范围内的下列组织机构,应当按照本办法的规定,办理代码登记手续:

(一)经机构编制管理部门批准成立的国家机关、事业单位;

(二)经企业登记管理部门核准登记的企业;

(三)经社会团体登记管理部门核准登记的社会团体;

(四)经协作管理部门核准登记的中央和外省市驻沪机构;

(五)经外事部门或者其他有关主管部门核准登记的国外或者境外非政府组织的驻沪机构。

第四条(主管部门和相关部门的职责)

*市技术监督局(以下简称“市技术监督局”)是本市代码登记工作的主管部门,其管理代码工作的职责是:

(一)组织实施代码制度;

(二)划分各类代码的区段;

(三)核准代码登记申请,赋予代码,颁发代码证书;

(四)建立本市代码管理数据库,提供有关代码信息服务;

(五)管理、监督、实施与代码制度有关的工作。

市技术监督局可以委托区、县技术监督部门办理有关代码登记、管理工作。

本市其他有关部门应当依照本办法的规定,在各自职责范围内协助技术监督部门做好代码登记工作。

第五条(代码登记申请)

本市各类组织机构应当自批准成立或者核准登记之日起30日内,持有关批准文件或者登记证书,向技术监督部门申请代码登记。

本办法实施以前已经设立的组织机构尚未申领代码证书的,应当在本办法实施之日起30日内向技术监督部门申请代码登记。

组织机构申请代码登记应当提交的有关文件,由市技术监督局另行规定。

第六条(对申请代码登记的核准)

技术监督部门应当自组织机构申请代码登记之日起10日内,对所提交的批准文件或者登记证书的真实性、合法性、有效性进行审核;经审查核准的,赋予代码并颁发代码证书。

第七条(代码的分类)

代码分为法人代码和非法人代码。具有法人资格的组织机构,其代码为法人代码;不具有法人资格的组织机构,其代码为非法人代码。

第八条(代码证书的颁发)

代码证书是由国家统一印制的、证明组织机构具有法定代码标识的凭证。

技术监督部门对经核准赋予法人代码的组织机构,应当分别颁发《中华人民共和国机关法人代码证书》、《中华人民共和国企业法人代码证书》、《中华人民共和国事业单位法人代码证书》、《中华人民共和国社会团体法人代码证书》;对经核准赋予非法人代码的组织机

构,应当分别颁发《中华人民共和国机关代码证书》、《中华人民共和国企业代码证书》、《中华人民共和国事业单位代码证书》、《中华人民共和国社会团体代码证书》。

第九条(代码证书的正本和副本)

技术监督部门颁发的代码证书分为正本和副本。正本和副本具有同样的效力。

组织机构可以申领代码证书正本一份、副本若干份。

任何组织机构或者个人不得伪造、涂改、出借或者转让代码证书的正本和副本。

第十条(代码证书的换领)

组织机构的名称、住所等发生变更时,应当自有关主管部门批准或者核准变更之日起30日内,持有关文件或者证书,向技术监督部门申请换领代码证书。

技术监督部门应当自组织机构申请换领代码证书之日起10日内,对所提交的有关文件或者证书的真实性、合法性、有效性进行审核;经审查核准的,收回原代码证书,颁发新的代码证书。

第十一条(代码的注销)

组织机构依法终止的,应当向技术监督部门办理代码注销手续;技术监督部门应当注销其代码,收回代码证书。

被注销的代码,不得再赋予其他组织机构。

第十二条(代码证书的补发)

代码证书毁损或者灭失的,组织机构应当及时向技术监督部门申请补发代码证书。

第十三条(代码证书的有效期)

代码证书自颁发之日起4年内有效。组织机构应当在有效期届满之日起30日内,持代码证书的正本和副本向颁发证书的技术监督部门办理换证手续。

市技术监督局可以根据本市重大社会、经济活动的需要,经市人民政府批准,对有效期内的代码证书组织开展验证工作。

第十四条(代码的应用)

本市计划、财政、税务、金融、劳动、人事、统计、公安、社会保险、国有资产管理等部门在其有关业务活动中,应当使用代码。

代码的具体使用范围和办法,由市技术监督局会同各有关部门确定。

政府鼓励社会各行业积极推广应用代码。

第十五条(对不办理有关手续的处罚)

组织机构违反本办法第五、十、十一、十二、十三条的规定,未办理代码登记、注销或者代码证书换领、补发手续的,技术监督部门应当责令其限期补办手续,并可处以50元以上1000元以下的罚款。

违反本办法第十一条第一款规定的,可以对有关责任人员处以50元以上500元以下的罚款。

第十六条(对伪造、涂改代码证书等行为的处罚)

组织机构或者个人违反本办法第九条第三款的规定,伪造、涂改、出借、转让代码证书,或者使用失效代码证书的,技术监督部门应当收缴其代码证书,并可处以50元以上1000元以下的罚款。

第十七条(复议和诉讼)

当事人对行政处罚决定不服的,可以依照《行政复议条例》和《中华人民共和国行政诉讼法》的规定申请复议或者向人民法院起诉。

当事人逾期不申请复议、不向人民法院起诉又不履行行政处罚决定的,作出处罚决定的部门可以申请人民法院强制执行。

第十八条(应用解释部门)

代码范文篇9

为建立全国人口计生系统统一、规范的行政区划代码,按照国家人口计生委《国家人口计生委办公厅关于做好20**年上半年区划代码规范化工作的通知》(人口厅函〔20**〕69号)要求,我市需对现有行政区划代码进行清理。现将有关事宜通知如下:

一、行政区划代码编码规则

按照国家要求,对于正式行政建制单位,县级及以上地区一律采取国家标准规定的行政区划全称和代码;乡级及以下地区需与民政区划代码进行比对,不一致的一律按照民政区划代码要求重新编码。

对确因实际工作需要而设置的非正式行政建制单位,要使用规范全称并参考民政、统计等部门行政区划代码赋码;若民政和统计部门均没有该建制单位的,可以按照《人口和计划生育系统区划代码应用管理规范(试行)》规定的人口计生专用代码码段赋码。若民政部门行政区划代码有误或变更滞后,可按照《人口和计划生育系统区划代码应用管理规范(试行)》规定的编码规则并参照统计部门的编码赋码。此试行规范请登录区县政务专网“最新文件”栏目下载。

二、区划代码清理要求

本次调整后的PADIS行政区划名称、代码原则上必须和民政部门的行政区划名称、代码一致,不得随意添加、减少行政区划单位。凡是在原区划代码中,因各种原因而新增的非正式区划名称、代码(例如大企业、区县级开发区等),都在本次清理范围内。但在实际工作中,确实需要保留或者新增、减少行政区划代码的特殊情况,需经市人口计生委规统处批准后,再按照国家相关编码规定进行编码;同时形成文字材料,报送市人口计生委规统处备案。

三、工作进度安排

4月底前,各区县人口计生委按照国家的区划编码规则,以民政部门行政区划代码为标准,对本辖区区划代码进行清理。原PADIS行政区划代码及最新民政行政区划代码,请登录区县政务专网“最新文件”栏目下载使用。

各区县对本辖区内乡级及村级行政区划代码进行清理后,需填写《PADIS现用区划代码与本次集中清理后的区划代码变更对照表》(详见附件)。清理后确定的区划代码表及其与PADIS现用区划代码变更对照表均须经本级人口计生委主要负责人审定签字,在4月30日前连同电子版文件一并上报规统处。

代码范文篇10

时间:2003-5-27作者:秩名

一年前,当本人拿到一个名叫TWIG的PHP程序时,立即被作者OOP编程思想所折服,很难想像TWIG中所有的功能(行事历、邮件、个性化)均在一个PHP文件(index.php3)中执行完成,这就得益于作者采用了程序代码与页面构架分离的思想,但是我也看到尽管作者做了很大的努力,但由于PHP的局限性,程序并没有真正做到代码与构架的分离,index.php3这个主文件由于要执行的功能太多,所以其require的模块文件相当之多,至使整个文件依然显得十分零乱,本人愚昧,当时花了半个月的时间,才真正明白程序的构架,分析代码之苦,无人能知啊(黯然泪下......)。

TWIG程序对我此后的编程有着很大的影响,但是即使这样的作品,依然没有摆脱程序代码与HTML代码混杂的局面。

程序代码与页面构架的分离是WEB程序员多年的梦想。在出现之前,无论是ASP、PHP还是JSP,程序代码与HTML代码都是混杂在一起的,这种做法,虽然在WEB技术初期受到赞扬,但是随着时间的的推移,它的弊端是越来越明显,当程序代码很长时,HTML代码与其混杂,程序的可读性变得很差,让人无法分清程序真正要表示的页面构架。

而新技术则通过Codebehind、用户控件(UserControl)以及自定义控件(CustomControl)等方法真正做到了代码的分离。这是一个了不起的进步,大家可以在本文中看到分离代码后的程序的结构是多么的清晰。

为了便于理解,这里设计的页面比较简单,页面分为三个主要的部分,头部包含一个AdRotator控件(用于显示广告)与一个Label控件(用于显示当前广告链接地址);中部是一个登陆页面,包括两个TextBox控件(分别用于输入用户名与密码)、一个Label控件(显示登陆是否成功)与一个Button控件(作为提交按钮);底部包含两个Label控件(分别显示当前用户名与用户权限)。

熟悉的朋友,马上就会意识到头部由于使用了AdRotator控件,所以必定存在OnAdCreated事件以便在Label控件显示相应链接;而中部由于使用Button控件做为提交按钮,所以必定有一个OnClick事件处理。

1CodeBehind

首先我们就看看如何使用CodeBehind方法来实现代码与页面构架的分离,下面给出的源程序是主程序--Example1.aspx:

<%@PageSrc="cs\EventHandle.cs"Inherits="Aspcn"%>

<html>

<head>

<title></title>

</head>

<body>

<formrunat="server">

<asp:Panelid="Header"runat="server">

<asp:AdRotatorid="ad"AdvertisementFile="AdBanners\ad.xml"BorderWidth="0"OnAdCreated="AdCreated"runat="server"/><br>

当前广告链接:<asp:Labelid="lblAdText"ForeColor="red"runat="server"/>

</asp:Panel>

<asp:Panelid="Logon"runat="server">

<table>

<tr><tdcolspan="2"align="center"><b>登陆窗口</b></td></tr>

<tr><tdcolspan="2"align="center"><asp:Labelid="lblMsgShow"ForeColor="red"runat="server"/></td></tr>

<tr><td>用户名:</td><td><asp:TextBoxid="tbUserName"runat="server"/></td></tr>

<tr><td>密码:</td><td><asp:TextBoxid="tbPasswd"TextMode="Password"runat="server"/></td></tr>

<tr><td><asp:Buttonid="btnSubmit"Text="登陆"OnClick="Submit_Click"runat="server"/></td></tr>

</table>

</asp:Panel>

<asp:Panelid="Footer"runat="server">

用户名:<asp:Labelid="lblUserName"Font-Name="Arial"ForeColor="red"Text="游客"runat="server"/>

权限:<asp:Labelid="lblPurview"Font-Name="Arial"Text="无"ForeColor="red"runat="server"/>

</asp:Panel>

</form>

</body>

</html>

例程中,大家可以清楚地看到程序中不包含任何C#、VB、javascript来处理OnAdCreated与OnClick事件,但是执行本程序,程序能够正常使用(如图2-1与图2-2)。这便是使用CodeBehinde的结果,事件处理已经被转移到其它程序中定义执行。请大家注意本例中第一行的信息:

<%@PageSrc="cs\EventHandle.cs"Inherits="Aspcn"%>

一般在程序中,Page指令都在设定本程序应当使用什么语言(使用Language属性),而本例中没有出现Language属性,而是出现了两个新的Page属性:Src与Inherits。Src属性设定事件处理真正的代码位置,Inherits属性则设定需要引入的类名。可以看到本例中定义事件处理的文件是EventHandle.cs,我们来看看它的具体内容:usingSystem;

usingSystem.Data;

usingSystem.Data.SqlClient;

usingSystem.Web;

usingSystem.Web.UI;

usingSystem.Web.UI.WebControls;

usingSystem.Web.UI.HtmlControls;

publicclassAspcn:Page

{

//声明WebForm中出现的控件

publicLabellblAdText,lblUserName,lblPurview,lblMsgShow;

publicTextBoxtbUserName,tbPasswd;

publicButtonbtnSubmit;

publicAdRotatorad;

privatestringstrConnString="server=(local)\\Feidao;database=aspcn;Trusted_Connection=yes";

//处理Adrotator控件建立事件

publicvoidAdCreated(Objectsrc,AdCreatedEventArgse)

{

lblAdText.Text=e.AlternateText;

}

publicvoidSubmit_Click(Objectsender,EventArgse)

{

SqlConnectionMyConn=newSqlConnection(strConnString);

MyConn.Open();

stringstrUserName,strPassword,strSelect;

strUserName=tbUserName.Text;

strPassword=tbPasswd.Text;

strSelect="select*frombbs_userwhereid=''''"+strUserName+"''''andpassword=''''"+strPassword+"''''";

SqlCommandMyComm=newSqlCommand(strSelect,MyConn);

SqlDataReaderdr=MyComm.ExecuteReader();

if(dr.Read())

{

//登陆成功

lblMsgShow.Text="登陆成功";

lblUserName.Text=dr["id"].ToString();

lblPurview.Text=dr["purview"].ToString();

}

else

{

//登陆不成功

lblMsgShow.Text="登陆不成功";

}

dr.Close();

MyConn.Close();

}

}

进行事件处理是定义在一个类中的(本例中是Aspcn,注意大小写),由于需要与WebForms相关联,所以此类还必须继承Page类。

分析程序,大家可以看到程序中对事件的处理操作是与普通的未进行代码分离的程序是一样的,并没有什么特别的地方。(本人在程序中已经给出的相关注释,相信对大家理解程序有所帮助)

使用CodeBehind技术后,大家需要多写一些代码,比如声明控件等,也许大家很不喜欢多写这样的代码,但是大家也必须看到使用了CodeBehind技术后,主程序的可读性大大增加了。在Example1.aspx中相信大家很快就可以区分页面构架的各个部分,大家想想这些构架如果在其它技术是否能看得如此清楚?

(这里的程序只做演示用,呵呵,大家可不要抓我什么引号漏洞这些小辫子哟)

2用户控件(UserControl)

CodeBehind技术真正实现了代码与构架的分离,比以前的技术前进了一大步,但是它的缺陷也是显而易见的,比如主页面中部那个登陆区,如果内容很多,HTML显示代码的依然会占用很大的区域,程序的可读性依然会降低。

也提供了解决办法,这就是用户控件。

用户控件我们可以将其视为不用编译的Server控件。即然是控件,那么就肯定会遵从控件的使用方法。我们将Example1.aspx中的每个Panel整体看成为一个控件,因此Example1.aspx的主体部分通过使用用户控件便可以减少为只有三行:

<%@RegisterTagPrefix="aspcn"TagName="Header"Src="UserControls/Header.ascx"%>

<%@RegisterTagPrefix="aspcn"TagName="Logon"Src="UserControls/Logon.ascx"%>

<%@RegisterTagPrefix="aspcn"TagName="Footer"Src="UserControls/Footer.ascx"%>

<html>

<head>

<title></title>

</head>

<body>

<formrunat="server">

<aspcn:Headerid="MyHeader"runat="server"/>

<aspcn:Logonid="MyLogon"runat="server"/>

<aspcn:Footerid="MyFooter"runat="server"/>

</form>

</body>

</html>

执行这个程序,其运行结果与使用CodeBehind技术的结果是一样的,但是现在的程序更加容易区分页面构架了。

<aspcn:Headerid="MyHeader"runat="server"/>

<aspcn:Logonid="MyLogon"runat="server"/>

<aspcn:Footerid="MyFooter"runat="server"/>

这三行代码,使用了三个用户控件,这么少的代码大家一眼就可以清楚的看到页面被分为三个部分。

要使用用户控件就必须使用Register指令,TagPrefix属性定义是的一个Namespace的名字,以保证它在这个页面的唯一性;TagName属性是在定义一个类(class)的别名,由于用户控件执行时是被CLR编译成为类来执行的,所以就必须给本程序中每个用户控件一个唯一的名字,以便于大家区分;Src属性则是具体指出了使用的用户控件的文件名(用户控件均以.ascx结尾)。

用户控件的使用与普通Server控件一样:

<namespace:class...runat="server"/>

namespace表示定义的命名空间,class则是相应的类名,具体的使用例子有:

<aspcn:Logonid="MyLogon"runat="server"/>

下面是用户控件显示程序中所使用的用户控件的具体内容:

Header.ascx(Header用户控件)

<ScriptLanguage="C#"Runat="Server">

privatevoidAdCreated(Objectsrc,AdCreatedEventArgse)

{

lblAdText.Text=e.AlternateText;

}

</script>

<asp:AdRotatorid="ad"AdvertisementFile="..\AdBanners\ad.xml"BorderWidth="0"OnAdCreated="AdCreated"runat="server"/><br>

当前广告链接:<asp:Labelid="lblAdText"ForeColor="red"runat="server"/>

Logon.ascx(Logon用户控件)

<%@ImportNamespace="System.Data"%>

<%@ImportNamespace="System.Data.SqlClient"%>

<ScriptLanguage="C#"Runat="Server">

protectedstringstrConnString="server=(local)\\Feidao;database=aspcn;Trusted_Connection=yes";

//定义UserControl的属性

publicstringUserName

{

get

{

returntbUserName.Text;

}

set

{

tbUserName.Text=value;

}

}

publicstringPassword

{

get

{

returntbPasswd.Text;

}

set

{

tbPasswd.Text=value;

}

}

//事件处理

privatevoidSubmit_Click(Objectsender,EventArgse)

{

SqlConnectionMyConn=newSqlConnection(strConnString);

MyConn.Open();

stringstrUserName,strPassword,strSelect;

strUserName=tbUserName.Text;

strPassword=tbPasswd.Text;

strSelect="select*frombbs_userwhereid=''''"+strUserName+"''''andpassword=''''"+strPassword+"''''";

SqlCommandMyComm=newSqlCommand(strSelect,MyConn);

SqlDataReaderdr=MyComm.ExecuteReader();

if(dr.Read())

{

//登陆成功

lblMsgShow.Text="登陆成功";

Session["UserName"]=dr["id"].ToString();

Session["Purview"]=dr["purview"].ToString();

}

else

{

//登陆不成功

lblMsgShow.Text="登陆不成功";

}

dr.Close();

MyConn.Close();

}

</script>

<table>

<tr><tdcolspan="2"align="center"><b>登陆窗口</b></td></tr>

<tr><tdcolspan="2"align="center"><asp:Labelid="lblMsgShow"ForeColor="red"runat="server"/></td></tr>

<tr><td>用户名:</td><td><asp:TextBoxid="tbUserName"runat="server"/></td></tr>

<tr><td>密码:</td><td><asp:TextBoxid="tbPasswd"TextMode="Password"runat="server"/></td></tr>

<tr><td><asp:Buttonid="btnSubmit"Text="登陆"OnClick="Submit_Click"runat="server"/></td></tr>

</table>

Footer.ascx(Footer用户控件)

<ScriptLanguage="C#"Runat="Server">

privatevoidPage_Load(Objectsrc,EventArgse)

{

if(Session["UserName"]!=null)

{

lblUserName.Text=(string)Session["UserName"];

lblPurview.Text=(string)Session["Purview"];

}

}

</script>

用户名:<asp:Labelid="lblUserName"Font-Name="Arial"ForeColor="red"Text="游客"runat="server"/>

权限:<asp:Labelid="lblPurview"Font-Name="Arial"Text="无"ForeColor="red"runat="server"/>

每个控件包含有自已的显示代码以及相应的程序代码。

我们可以将一些常用的功能制作成为固定的用户控件,当需要时,我们就可直接拿来使用,而不需要使用烦人的Crtl+C,Ctrl+V来"复制"、"粘贴"长长的一大堆代码。

用户控件不仅做到了程序代码与页面构架的分离,而且还增加了代码重用性。

3自定义控件(CustomControl)

用户控件是很不错的选择,但是由于每个用户控件都是一个ascx文件,当这些控件很多时,它们的使用就显得比较零乱。此时我们便想可不可以将一些比较相似的控件整合起来,在程序中只需要引用一次,便全部搞定。这是个很不错的想法,我们把这个想法说得更加专业一些:"将多个类(class)导入同一个命名空间(namespace)"。呵呵,怎么样,这句话是不是有点有耳熟?大家快去查一查Server控件的定义,是不是发现这句话是...

我们下面就要接触如何写Server控件。编写Server控件并不是一件轻松容易的事情,需要对.Net平台有比较深的了解,适合于高级用户,因此这里本人也不会具体描述Server控件的编写步骤(要细细讲这个,非得写书不可)。请大家比较一下自定义控件源代码与用户控件的区别,作一些大致的了解:

usingSystem;

usingSystem.Data;

usingSystem.Data.SqlClient;

usingSystem.Drawing;

usingSystem.Web;

usingSystem.Web.UI;

usingSystem.Web.UI.WebControls;

namespaceaspcn

{

//首先是Header

publicclassHeader:Control,INamingContainer

{

privateAdRotatorad;

privateLabellblAdText;

protectedoverridevoidCreateChildControls()

{

//加入AdRotator广告控件

ad=newAdRotator();

ad.AdvertisementFile="AdBanners/ad.xml";

ad.BorderWidth=0;

ad.AdCreated+=newAdCreatedEventHandler(this.OnAdCreated);

this.Controls.Add(ad);

this.Controls.Add(newLiteralControl("<br>"+"当前广告链接为:"));

//加入Label控件

lblAdText=newLabel();

lblAdText.ForeColor=Color.Red;

this.Controls.Add(lblAdText);

}

privatevoidOnAdCreated(Objectsender,AdCreatedEventArgse)

{

this.lblAdText.Text=e.AlternateText;

}

}

//接着是Logon

publicclassLogon:Control,INamingContainer

{

privatestringstrConnString="server=(local)\\Feidao;database=aspcn;Trusted_Connection=yes";

privateLabellblMsgShow;

privateTextBoxtbUserName,tbPasswd;

publicStringUserName

{

get

{

returntbUserName.Text;

}

set

{

tbUserName.Text=value;

}

}

protectedoverridevoidCreateChildControls()

{

//添加HTML标签

this.Controls.Add(newLiteralControl("<table><tr><tdcolspan=\"2\"align=\"center\"><b>登陆窗口</b></td></tr><tr><tdcolspan=\"2\"align=\"center\">"));

//添加MsgShowLabel控件公务员之家版权所有

lblMsgShow=newLabel();

lblMsgShow.ForeColor=Color.Red;

this.Controls.Add(lblMsgShow);

this.Controls.Add(newLiteralControl("</td></tr><tr><td>用户名:</td><td>"));

//添加UserName与PasswdTextBox控件

tbUserName=newTextBox();

this.Controls.Add(tbUserName);

this.Controls.Add(newLiteralControl("</td></tr><tr><td>密码:</td><td>"));

tbPasswd=newTextBox();

tbPasswd.TextMode=TextBoxMode.Password;

this.Controls.Add(tbPasswd);

this.Controls.Add(newLiteralControl("</td></tr><tr><td>"));

//添加BtnSubmitButton控件

ButtonbtnSubmit=newButton();

btnSubmit.Text="登陆";

btnSubmit.Click+=newEventHandler(this.Submit_Click);

this.Controls.Add(btnSubmit);

this.Controls.Add(newLiteralControl("</td></tr></table>"));

}

//显示完毕

privatevoidSubmit_Click(Objectsender,EventArgse)

{

SqlConnectionMyConn=newSqlConnection(strConnString);

MyConn.Open();

stringstrUserName,strPassword,strSelect;

strUserName=tbUserName.Text;

strPassword=tbPasswd.Text;

strSelect="select*frombbs_userwhereid=''''"+strUserName+"''''andpassword=''''"+strPassword+"''''";

SqlCommandMyComm=newSqlCommand(strSelect,MyConn);

SqlDataReaderdr=MyComm.ExecuteReader();

if(dr.Read())

{

//登陆成功

this.lblMsgShow.Text="登陆成功";

}

else

{

//登陆不成功

this.lblMsgShow.Text="登陆不成功";

}

dr.Close();

MyConn.Close();

}

}

//最后是Footer

publicclassFooter:Control,INamingContainer

{

privatestring_UserName,_Purview;

publicstringUserName

{

get

{

return_UserName;

}

set

{

_UserName=value;

}

}

publicstringPurview

{

get

{

return_Purview;

}

set

{

_Purview=value;

}

}

publicFooter()

{

_UserName="游客";

_Purview="无";

}

protectedoverridevoidCreateChildControls()

{

this.Controls.Add(newLiteralControl("用户名:"));

LabellblUserName=newLabel();

lblUserName.ForeColor=Color.Red;

lblUserName.Font.Name="Arial";

lblUserName.Text=this.UserName;

this.Controls.Add(lblUserName);

//this.Controls.Add(newLiteralControl("nbsp;"));

this.Controls.Add(newLiteralControl("权限:"));

LabellblPurview=newLabel();

lblPurview.ForeColor=Color.Red;

lblPurview.Font.Name="Arial";

lblPurview.Text=this.Purview;

this.Controls.Add(lblPurview);

}

}

}

上面和程序是将需要实现的功能,全部导入了自定义控件。程序中可以看到,在aspcn命名空间中包含三个类(Header,Logon,Footer),这三个类正是构架三个主体部分。

要使用自定义控件,还必须将原代码进行编译。

csc/t:library/out:aspcn.dll/r:System.Data.dll,System.Web.dll,System.Drawing.dllCustomControls.cs

C#程序编译指令的用法,本人在此也不再重复。需要注意的是编译的文件名,必须与控件中namespace的名字一致。

编译后的dll,仍然不能使用,我们必须将其放到.Net平台中最著名的目录--/bin中,bin目录(如果不存在,可以自行建立)存放的是当前虚拟目录中所有使用自定义控件以及组件,CLR在执行程序时会自动搜索此目录中的文件,以找到与程序相匹配的Namespace、Class以及Assembly。

当我们将程序编译好的aspcn.dll放入/bin目录后,这个自己编写的Server控件便可以使用了。

(需要声明一下,由于编写Server控件时不能使用Session等变量,以至无法做到两个class之间的通信,因此在缺省状态下Footer控件并不能像前面的程序一样随Session内容发生改变,不过可以通过普通操作Server控件的方法来操作相应的属性达到相同的效果,此处为节约版面,未采用)

下面再来看看主体WebForm的程序内容:

<%@RegisterTagPrefix="aspcn"Namespace="aspcn"Assembly="aspcn"%>

<html>

<head>

<title></title>

</head>

<body>

<formrunat="server">

<aspcn:Headerid="MyHeader"runat="server"/>

<aspcn:Logonid="MyLogon"runat="server"/>

<aspcn:Footerid="MyFooter"runat="server"/>

</form>

</body>

</html>

怎么样,相当简单明了吧。

引用我们自定义的控件,也相当简洁,只需将Register指令的TagPrefix、Namespace、Assembly属性全部设定为aspcn。