JAVASCRIPT.doc_第1页
JAVASCRIPT.doc_第2页
JAVASCRIPT.doc_第3页
JAVASCRIPT.doc_第4页
JAVASCRIPT.doc_第5页
已阅读5页,还剩23页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

DotNet项目组开发规范修改记录日期版本作者备注2009-5-5V1.0Fisher拟稿第一章 C# 、ASP.NET命名、编码规范1、基本原则序号说明举例1尽量让人一看名称就知道变量类型用途等信息。格式: 类型 + 名称说明2命名空间格式: 公司 + 项目名 + 模块名Sofmit.DVR.DVRLibary3所有能加 this 关键字的成员都加上 this 关键字this.flag4所有能加 this 关键字的成员都加上 this 关键字5单词选用时,不要使用缩写或者缩略词作为标示符号名称的一部分不使用未被广泛接受的缩写GetWindow不用 GetWin6要给类型名使用语意上有意义的名字、不不使用特有的关键字7不要使用未被广泛接受的首字母缩写词8按照 Pascal、Camel 相结合的 大小写 方式进行命名9公有变量都使用属性访问器,不使用任何公有变量10类型名全部使用 CLR 支持的类型名而不使用特定语言支持的类型名如 c# 中的int 应该使用CLR 中的 Int3211代码简单、易读,先写注释再写代码12单个函数不允许超过50行代码(特殊算法除外)13对于全局成员或者全局方法统一放到 以及各模块通用方法Command中、需要随时调用的集合,如当前登陆用于名,部门信息均使用缓存进行管理.14定义变量时候都加上他的作用域标示符,public private 等15所以的Html代码 C# 代码 JAVACRIPT 代码 CSS代码都分别放于不同的文件,要要在 aspx 页面中放入 c#代码、JAVASCRIPT、以及CSS代码16为所有必填项目加入标识,为文本框加入特殊字符验证、以及输入长度限制验证。17采用统一的系统 提示,将系统提示分类写入资源文件中 调用时候从资源文件中读取,避免直接在C#代码中直接写入文本信息,从而使系统提示不一致。2详细约定2.1大小写约定标识符大小写方式示例类PascalAppDomain枚举类型PascalErrorLevel枚举值PascalFatalError事件PascalValueChanged异常类PascalWebException只读的静态字段PascalRedValue接口PascalIDisposable方法PascalToString命名空间PascalSystem.Drawing参数CameltypeName属性PascalBackColor私有成员类型简写 + Pascal 方式iCount(int 类型的计数器)2.1常用类型简写类型简写命名举例Int32iiCountInt64llCountStringssNameUInt32uiuiCountUInt64ululCountBytebbFlagBooleancan 、isisOver、 canWork 、isBegin等能标示真假的单词作为前缀2.2常用控件、类前缀简写类型简写命名举例标准控件ButtonbtnbtnCloseCheckBoxchkchkSelectCheckedListBoxcklcklSelectComboBoxcmbcmbSelectDateTimePickerdtpdtpDateLabellbllblTitleLinkLabelllbllbLabelListBoxlstlstSelectListViewlvwlvwListMaskedTextBoxmtxmtxTextMonthCalendarcdrcdrSelectNotifyIconicnicnNotifyNumeircUpDownnudnudNumberPictureBoxpicpicCarProgressBarprgprgProgressRadioButtonrdordoSelectRichTextBoxrtxrtxTestTextBoxtxttxtNameToolTiptiptipNameTreeViewtvwtvwCarWebBrowserwbswbsSina容器控件FlowLayoutPanelflpflpLayoutGroupBoxgrpgrpBasicPanelpnlpnlSettingSplitContainersplsplSplitTabControltabtabTempTableLayoutPaneltlptlpPlanel菜单和工具栏ContextMenuStripcmscmsMenuMenuStripmnsmnsMenuStatusStripssrssrStatusToolStriptsrtsrToolsToolStripContainertsctscTools数据DataSetdtsdtsStudentDataGridViewdgvdgvStudentBindingSourcebdsbdsStudentBindingNavigatorbdnbdnStudentReportViewerrpvrpvStudent对话框ColorDialogcldclbColorFolderBrowserDialogfbdfbdFolderFontDialogfndfndFontOpenFileDialogofdofdDialogSaveFileDialogsfdsfdDialog组件BackgroundWorkerbgwbgwWorkerDirectoryEntrydredreEntryDirectorySearcherdrsdrsDirectoryErrorProvidererrerrProviderEventLogevlevlLogFileSystemWatcherfswfswWatcherHelpProviderhlphlpProviderImageListimgimgListMessageQueuemsqmsqMessagePerformanceCounterpfcpfcCounterProcessprcprcProcessSerialPortsptsptPortServiceControllersclsclControllerTimertmrtmrTimer打印PageSetupDialogpsdpsdDialogPrintDialogprdprdDialogPrintDocumentpdcpdcDocumentPrintPreviewControlprvprvControlPrintPreviewDialogppdppdDialog水晶报表CrystalReportViewercrvcrvViewerReportDocumentrpdrpdDocument其他DomainUpDownduddudDomainHScrollBarhschscScrollPropertyGridprgprgGridSplittersplsplSplitterTrackBartrbtrbTrackVScrollBarvscvscScroll注:自定义类型命名对象的命名规则参见上面示例、以上为常用类型,的命名规则。未列出的命名将在项目中遇到以后补充。参见: /en-us/library/ms229042.aspx3编码规范3.1引言 按照此规范来开发C#程序可带来以下益处:1) 代码的编写保持一致性。2)提高代码的可读性和可维护性。3)在团队开发一个项目的情况下,程序员之间可代码共享易于代码的回顾。本规范是初版,将在以后项目开发中逐步完善。3.2 文件组织 类名或文件名要简短,不要超过2000LOC,将代码分割开,使结构清晰。将每个类放在一个单独的文件中,使用类名来命名文件名(当然扩展名是.cs)。这种约定会使大家工作更简单。ASPX页面让ASPX页面与C#代码分开。ASPX页面中不允许有警告信息出现。ASPX各种标签以及语法符合W3C标准。3.3 目录设计为每一个命名空间创建一个目录。(用MyProject/TestSuite/TestTier作为MyProject.TestSuite.TestTier的路径,而不用带点的命名空间名做路径)这样可以更容易地将命名空间映射到目录层次划分。按照模块划分ASPX页面存放位置。3.4 换行当一个表达式超过一行时,根据这些通用原则进行处理: 在逗号后换行。 在操作符后换行。 在高层换行而不要在低层处换行。 折行后对齐上一行语句同一层的表达式起始位置。方法调用换行示例: longMethodCall(expr1, expr2, expr3, expr4, expr5);算术表达式换行示例:推荐:var = a * b / (c - g + f) + 4 * z;不好的格式应避免:var = a * b / (c - g + f) + 4 * z;推荐使用第一种方法,因为是在括号表达式之外折行(高层次折行原则)。注意要用制表符到缩进的位置,然后用用空格到折行的位置。在我们的例子中是: var = a * b / (c - g + f) + .4 * z;表示是制表符,.表示是空格符。(制表符后是空白是用制表符缩进)。一个好的编码习惯就是在所用的编辑器中显示制表符和空格符。3.2 空白利用空格进行缩进从未有过统一的标准。一些人喜欢用两个空格,一些人喜欢用四个空格而还有一些人喜欢用八个空格,甚至有的人喜欢用更多的空格。好的做法是用制表符。制表符有一些优点: 每个人都可以设置他们自己喜欢的缩进层级。 它仅仅是1个字符而不是2,4,8等等,因此它将减少输入(甚至因为自动缩进,有时你不得不手工设置缩进或取消设置,等等诸如此类的操作)。 如果你想增加或减少缩进,可以标记一块,使用Tab增加缩进层级而用Shift-Tab减少缩进层级。这几乎对于任何文本编辑器都是适用的。这里,我们定义制表符为标准缩进符。不要用空格缩进用制表符!3.5. 声明1)每行的声明数推荐每行只有一个声明,因为它可以方便注释。int level; / indentation levelint size; / size of table当声明变量时,不要把多个变量或不同类型的变量放在同一行,例如:int a, b; /What is a? What does b stand for?上面的例子也显示了变量名不明显的缺陷。当命名变量时要清晰。2) 初始化局部变量一旦被声明就要初始化。例如:string name = myObject.Name;或int val = time.Hours;注意:如果你初始化一个dialog,设计使用using语句:using (OpenFileDialog openFileDialog = new OpenFileDialog() .3) 类和接口声明当编写C#类和接口时,应遵循以下格式化规则: 在方法名和圆括号“(”开始它的参数列表之间不要使用空格。 在声明语句的下一行以大括号标志开始。 以结束,通过它自身的缩进与相应的开始标志匹配。例如:Class MySample : MyClass, IMyInterface int myInt; public MySample(int myInt) this.myInt = myInt ; void Inc() +myInt; void EmptyMethod() 对于一个大括号的位置参考10.1部分。6. 语句6.1 简单语句每行都应该只包含一条语句。6.2 返回语句一个返回语句不要用最外围圆括号。不用:return (n * (n + 1) / 2);用: return n * (n + 1) / 2;6.3 If, if-else, if else-if else 语句if, if-else and if else-if else 语句看起来应该像这样:if (condition) DoSomething(); .if (condition) DoSomething(); . else DoSomethingOther(); .if (condition) DoSomething(); . else if (condition) DoSomethingOther(); . else DoSomethingOtherAgain(); .6.4 for / foreach 语句一个for语句应该如下形式:for (int i = 0; i 5; +i) .或者放置一行(考虑用一个while语句代替)for (initialization; condition; update) ;foreach语句应该像下面所示 : foreach (int i in IntList) .注意:在一个循环中,即使只有一个语句通常也用括弧括起来。6.5 While/do-while 语句一个while语句应该写成如下形式:while (condition) .一个空while语句应该是以下格式:while (condition) ;一个do-while语句应该是如下格式:do . while (condition);6.6 Switch 语句一个switch语句应该如下格式:switch (condition) case A: . break;case B: . break;default: . break;6.7 Try-catch 语句一个try-catch statement语句应该遵循以下格式:try . catch (Exception) ortry . catch (Exception e) .ortry . catch (Exception e) . finally .7. 空白7.1 空行空行提高可读性。它们分开那些逻辑上自身相关联的代码块。两行空格行应该用于以下之间: 一个源文件的逻辑段。 类和接口定义(每个文件只定义一个类或接口以避免这种情况)。一个空格行应该总是被用于以下之间: 方法 属性 一个方法中的局部变量和它的第一条语句 一个方法中的逻辑段为了提高可读性。注意空白行必须被缩进因为它们包括一条语句这使得插入这些行更容易。7.2 内部空格在一个逗号或一个分号之后应该由一个空格,例如:TestMethod(a, b, c); 不要用: TestMethod(a,b,c)或TestMethod( a, b, c );单个空格包围操作符(除了像加的一元操作符和逻辑非),例: a = b; / dont use a=b;for (int i = 0; i 10; +i) / dont use for (int i=0; i10; +i)/ or/ for(int i=0;i10;+i)7.3 表格格式化行的一个逻辑块应该作为一个表格被格式化:string name = Mr. Ed;int myValue = 5;Test aTest = Test.TestYou;对于表格的格式化用空格而不用制表符因为在某些制表符缩进设置会使表格格式化看起来是很奇怪。8. 命名习惯8.1 大写格式8.1.1 Pascal Casing习惯大写每个单词的第一个字母(就像在TestCounter)。8.1.2 Camel Casing习惯除了第一个单词外大写每个单词的第一个字母例如testCounter。8.1.3 全大写情况对于只有一两个字符缩写组成的标识符才用全大写的情况。有三个或更多个字符组成的标识符应该用Pascal情况代替。例如:public class Math public const PI = . public const E = . public const feigenBaumNumber = .8.2. 命名指导方针通常根据指导方针在名字和命名内用低线字符对Hungarian 符号来说被认为是坏习惯。Hungarian 符号是一组应用于命名来映射变量类型的前缀和后缀。这种命名风格在早期的Windows程序中被广泛应用,但现在被取消了至少不提倡了。如果你遵循这个指南用Hungarian 符号是不允许的。但要记住一个好的变量名描述了语义而不失类型。对于这个规则有个例外就是GUI编码。包括像按钮(buttton)的GUI元素,所有领域和变量名都应该带有它们类型名的后缀不是缩写。例如:System.Windows.Forms.Button cancelButton;System.Windows.Forms.TextBox nameTextBox;8.2.1 类命名指导方针 类命名必须是名词或名词短语。 UsePascal 情况参考8.1.1 不要用任何类前缀8.2.2 接口命名指导方针Guidelines 用可以描述行为的名词或名词短语或形容词命名接口。(例如IComponent 或 IEnumberable) 用Pascal情况(参考8.1.1) 用I作为名字的前缀,它应该紧跟一个大写字母(接口名的第一个字母)8.2.3 枚举命名指导方针 用Pascal情况命名枚举值名字和类型名字 枚举类型和枚举值不要前缀 对于枚举用单一名字 对于位领域用复数名字8.2.4 只读和常量命名 用名词,名词短语或名词的缩写命名静态领域 使用Pascal 情况(参考8.1.1)8.2.5 参数/非常量领域命名 一定要用描述性名字,应该能够足够表现变量的意义和它的类型。但一个好的名字应该基于参数的意义。 使用Camel情况(参考8.1.2)8.2.6 变量命名 计数变量当用在琐碎的计数循环式更适宜叫i, j, k, l, m, n。(参考10.2例如对全局计数的更智能命名等等) 使用Camel情况(参考8.1.2)8.2.7 方法命名 用动词或动词短语命名方法。 使用Pascal(参考8.1.2)8.2.8 属性命名 用名词或名词短语命名属性 使用Pascal 情况(参考8.1.2) 考虑用与其类型相同的名字命名一个属性8.2.9 事件命名 用事件处理器后缀命名事件处理器 用sender 和 e命名两个参数 使用Pascal情况(参考8.1.1) 用EventArgs 后缀命名事件参数 用现在和过去时态命名有前缀和复制概念的事件名字。 考虑用一个动词命名事件。8.2.10 大写总结Type Case NotesClass / Struct Pascal Casing Interface Pascal Casing Starts with IEnum values Pascal Casing Enum type Pascal Casing Events Pascal Casing Exception class Pascal Casing End with Exceptionpublic Fields Pascal Casing Methods Pascal Casing Namespace Pascal Casing Property Pascal Casing Protected/private Fields Camel Casing Parameters Camel Casing 9. 编程习惯9.1 可见性不要任何公共实例或类变量,让它们为私有的。对于私有成员最好不用“private”作修饰语什么都不写。私有是默认情况,每个C#程序员都应该知道这一点。用属性代替。你可以用公共静态(或常量)对于这个规则是以例外,带它不应该是规则。9.2 没有“幻”数不要用幻数,也就是在源代码中直接用常数值。替代这些后者以防变化(比方说,你的应用程序可以处理3540用户代替427你的代码在50行中通过分散25000LOC)是错误和没有收益的。声明一个带有数的常量来代替:public class MyMath public const double PI = 3.14159.10. 编码举例10.1 Brace placement examplenamespace ShowMeTheBracket public enum Test TestMe, TestYoupublic class TestMeClass Test test; public Test Test get return test; set test = value; void DoSomething() if (test = Test.TestMe) /.stuff gets done else /.other stuff gets done 括弧应该在以下情况之后以新行开始: 命名空间声明(注意这在0.3版本中是新添的与0.2版本不同) 类/接口/结构声明 方法声明10.2 变量命名举例代替:for (int i = 1; i num; +i) meetsCriteriai = true;for (int i = 2; i num / 2; +i) int j = i + i;while (j = num) meetsCriteriaj = false;j += i;for (int i = 0; i num; +i) if (meetsCriteriai) Console.WriteLine(i + meets criteria);try intelligent naming :for (int primeCandidate = 1; primeCandidate num; +primeCandidate)isPrimeprimeCandidate = true;for (int factor = 2; factor num / 2; +factor) int factorableNumber = factor + factor;while (factorableNumber = num) isPrimefactorableNumber = false;factorableNumber += factor;for (int primeCandidate = 0; primeCandidate num; +primeCandidate)if (isPrimeprimeCandidate) Console.WriteLine(primeCandidate + is prime.);注意:索引变量通常叫i, j, k 等等。但Note: Indexer variables generally should be called i, j, k etc. But 万一像这样,使得重新考虑这个原则更有意义。一般来说,当同一个计数器或索引器被重用,给它们有意义的名字。第二章 数据库设计、编码、命名规范从数据库的设计原则 设计文档几方面论述数据库设计的规范思想及命名规则。 2.1数据库应用结构 根据对一般业务系统的分析,将数据库和程序系统统一进行整体描述,展示数据库的 表之间以及与程序模块间的关系。 2.2 数据表和程序模块的分类 根据“处理特点”,将数据表和程序模块进行分类如下: 数据表分类:业务数据表、基本编码表、辅助编码表、系统信息表、累计数据表、结 算数据表、决策数据表。 程序模块分类:初始化、业务处理、完整性检测与修正、结算处理、统计处理。 2.2.1 数据表分类说明 业务数据表:记录业务发生的过程和结果。如,合同、出仓单、申请单、凭证。 基本编码表:描述业务实体的基本信息和编码。如,产品、客户、供应商、雇员。 辅助编码表:描述属性的列表值。如,合同类型、职称、民族、付款方式。 系统信息表:存放与系统操作、业务控制有关的参数。如,用户信息、权限、用户配 置信息、成本核算方式。 累计数据表:存放业务的当前值和累计值。如,当前库存、当前存款、累计销售、累 计支出、应收账款。 结算数据表:存放各个时期末的结存数。如,月末库存、月末银行存款、应收账款月 结。决策数据表:存放各个时期内发生的统计值。如,月销售统计、月回款统计、出入库 统计。 2.2.2 程序模块分类说明 初始化:系统运行前对系统进行数据的初始化。如,库存初始化。 业务处理:业务过程的控制和结果记录。如,合同录入、费用审批、出入库。 完整性检测与修正:对累计数据表进行检查并自动修正。如对当前库存、当前存款、 累计销售的检查和重新计算。 结算处理:计算并记录各个时期末的结存数。库存月结、应收账款月结。 统计处理:计算并记录各个时期内发生的统计数。如,统计月销售、统计月回款、统 计出入库。 2.3 数据表间的关系 业务数据表基本编码表 主-外键关系。如,合同表客户编码表; 业务数据表辅助编码表 主-外键关系。如,合同表付款方式; 业务数据表、累计数据表、结算数据表:累计数据表=结算数据表(上期末) + 业务数 据表(本期内发生)。如当前库存=上月末库存数+(本月入库数-本月出库数); 决策数据表业务数据表 决策数据表的数据是由业务数据表中数据导出(统计)的; 2.4 数据表与程序模块间的关系 由一个例子(仓库管理)来说明数据表与程序模块之间的关系: . 系统使用前,由初始化模块对库存数(累计数据表)和上月末库存数(结存数据表)进 行初始化; . 当有入库业务发生时,由入库模块(业务处理)将入库单录入并保存到入库单明细帐( 业务数据表)中,同时将入库数累加到库存数(累计数据表)中; . 定期或不定期,库存数核算模块(检查完整性检测与修正)根据上月末的库存数(结存 数据表)、本月已发生数(业务数据表)检查当前的库存数(累计数据表)是否符合,不符合 则给出提示,可手工或自动进行更正(当前库存数=上月末库存数+本月入库数-本月出库数 ); . 每月初,进行上月的月结处理。月结模块(结算处理)根据上月初的库存数(结存数据 表)、上月发生数(业务数据表)计算出上月末的库存数(累计数据表)。公式为:上月末库 存数=上月初库存数+上月入库数-上月出库数; . 每个月月结后,库存业务月统计模块(统计处理)统计上月的各种库存商品的入库和 出库数,便于查询和生成报表,也作为决策支持的数据基础。 2.5 数据表命名时对数据表分类的考虑 . 业务数据表:t_d_。如销售系统的合同表 t_d_SH_Contract 或 t_d_SH_合同; . 基本编码表:t_b_。如客户编码表t_b_Customer 或 t_b_客 户; . 辅助编码表:t_a_。如合同类别t_a_ContType 或 t_a_合同 类别; . 系统信息表:t_s_。如用户表t_s_User 或 t_s_用户; . 累计数据表:t_t_。如当前库存表t_t_SO_Stock 或 t_t_SO_ 库存; . 结算数据表:t_c_。如库存月结表t_c_SO_StockMonth 或 t_c_SO_库存月结; . 决策数据表:t_w_。如月销售统计表t_w_SH_SellMonth 或 t_w_SH_月销售统计; 注:内的内容表示可选。如“t_s_”表示t_s_SH_User 和 t_s_User 都是符合规则的。 2.6 数据库结构原则 规定除数据库设计所遵循的范式外的一些适用原则,在遵循数据库设计范式的基础上 ,合理地划分表,添加状态和控制字段等。 2.6.1 辅助编码表 为了使辅助编码表能起到预期的效能,又不因过多的辅助编码表难以管理,故对辅助 编码表的使用作如下规定: 1. 当某辅助编码表的编码允许用户添加时,应设计成“独立”的数据表;否则,将不 允许用户添加编码的各辅助编码表合并成一个“通用”的辅助编码表。 2. “独立”的辅助编码表与主表的列采用主-外约束保证列数据完整性。 3. “通用”的辅助编码表与各主表间没有约束关系,主表列的数据完整性由列说明的 “域”来保证。 4. “通用”的辅助编码表除编码和名称列外,还有一个标识列,用来标识合并前的各 码表,该标识列+编码列作为该表的主键。 5. 对于“独立”的辅助编码表,用户只可添加新的编码和改变名称,并且不能改变一 个编码所代表的意义;对于“通用”的辅助编码表,原则上不允许用户修改,或只有限地 允许修改名称。 2.6.2 基本编码表 1. 基本编码表可以有如下的标识列:内编码、外编码、助记码、简称、全称。内编码 (唯一编码)作为主键有程序自动生成,用户不可见;外编码(唯一编码)由用户按某种 规则自行定义,用户可见;助记码为拼音缩,方便录入,不唯一,重码时由列表选择;简 称用于列表显示和报表,以便缩短行宽。以上的列在实现时可视情况和习惯加以删减。 2. 当码表的列较多且也行较多时,可将上述的标识列和常用的信息存于一个表,将其 它的信息另表存储。 2.6.3 业务数据表 1. 设有录入人和录入日期列,由系统自动记录。 2. 记录单据的表中设置“自动单据号”,由两个字符开始以区分单据类型,后跟一数 字序列表示序号。自动单据号由系统自动生成,作为主表的主键,不允许用户修改。 当有对应的纸质单据时,设置“单据号”用于记录纸质单据的单据号。 3. 明细表中设有行序号,自动记录行的录入顺序。 4. 设置“存档标记”列,用于抽取数据到决策数据库时的更新标记。插入新行或修改 已有行时设置该标记;数据抽取后清除该标记。 5. 对于用于查询过滤条件的列,不可为空,以免行“丢失”。 6. 对于数值列,不可为空,“0”作为默认值。 7. 对于必要的“冗余”列,如客户名称,应有相应的程序保持各“冗余”列的同一性 ,以免出现异议。 8. 设置“过程状态”列和“记录状态”列。过程状态列用于记录如创建、审核、记账 、冲红等状态;记录状态用于记录如有效、删除等状态。 2.7 数据库命名原则 2.7.1 表名 . 业务数据表:t_d_。 . 基本编码表:t_b_。 . 辅助编码表:t_a_。 . 系统信息表:t_s_。 . 累计数据表:t_t_。 . 结算数据表:t_c_。 . 决策数据表:t_w_。 5.2 视图 v_。视图类型参见表的分类。 5.3 存储过程 p_ 2.7.2函数 f_ 5.5 触发器 tr_ (after) ti_ (instead) 5.6 自定义数据类型 ud_ 5.7 Default df_ 5.8 Rule ru_ 5.9 主键 pk_ 5.10 外键 fk_第三章 JavaScript命名规范3.1示例var ClassName = function()/类名 var _FieldName = Test Field; /私有变量 this.PropertyName = Test Property Name; /属性 var functionName = function()/私有方法 return ; this.PublicFunctionName = function(pTestName) /公有方法pTestName:参数 var condition = condition;/局部变量 if(condition)/判断 return functionName(); else var name

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论