




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、Shxt 户籍系统户籍系统 代码编写规范 编写人:滕飞编写人:滕飞 编写日期:编写日期:2010-4-30 审核人:滕飞审核人:滕飞 审核日期:审核日期:2010-5-6 目录目录 1前言.5 1.1编写目的.5 2命名规范.5 2.1Package 的命名.5 2.2Class 的命名.5 2.3Class 变量的命名.6 2.4接口的命名.6 2.5参数的命名.7 2.6数组的命名.7 2.7方法的参数命名.7 3注释规范.7 3.1实现注释的格式(Implementation Comment Formats).8 3.1.1块注释(Block Comments) .8 3.1.2单行注释
2、(Single-Line Comments).8 3.1.3尾端注释(Trailing Comments).9 3.1.4行末注释(End-Of-Line Comments).9 4Java 文件样式.10 4.1版权信息.10 4.2Package/Imports.10 4.3Class.11 4.4Class Fields.11 4.5存取方法.11 4.6构造函数.12 4.7克隆方法.12 4.8类方法.13 4.9main 方法.14 5代码编写格式.14 5.1代码样式.14 5.2文档化.14 5.3缩进.14 5.4页宽.14 5.5对.14 5.6括号.15 6JAVA 编码
3、规范.15 6.1注意.15 6.2异常处理.16 6.3垃圾收集.16 6.4Clone.17 6.5final 类.17 6.6访问类的成员变量.17 6.7编写类的公共问题.18 7JSP 编码规范.19 8代码编译.20 9匈牙利命名规则.20 9.1数据类型缩写.21 9.2SWING 一些控件的缩写.21 9.3SWT 一些控件的缩写.21 9.4方法.22 10部分编程常用单词缩写.22 11编程技巧.24 11.1byte 数组转换到 characters.24 11.2Utility 类.24 11.3初始化.24 11.4枚举类型.24 11.5byte中的值.25 11.
4、6String 和 StringBuffer.25 12调试.25 13性能.25 1前言前言 1.11.1编写目的编写目的 本规范是本项目组开发人员必须遵循的,可供测试等其他人员参考,本规 范只适合本项目组使用。 特别注意 1、所有需要等待的程序加上进度条; 2、所有的方法加上 javadoc 注释,重要变量和属性也加上注释说明; 3、代码必须进行格式化,以使代码可读性强; 2命名规范命名规范 定义命名规范的目的是让项目中所有的文档看起来风格统一,增加可读性, 减少项目组中因换人而带来的问题和损失。 2.12.1PackagePackage 的命名的命名 包(Packages)名称为 com
5、.公司名.项目名.模块名.层次名(类名包含功能) 。 包名的后续部分根据不同机构、不同项目的命名规范而不尽相同,尽量清 晰,易懂,容易理解。 2.22.2ClassClass 的命名的命名 Class 的名字由一组首字母大写的单词和固定缩写组成。使类名简洁而有 含义。使用完整单词,避免缩写词(除非该缩写词被更广泛使用,也可组内商 讨定义,例如:DAO) 。 2.32.3ClassClass 变量的命名变量的命名 实例名采用大小写混合的方式,第一个单词的首字母小写,其后单词的首 字母大写。变量名不应以下划线或美元符号开头,尽管这在语法上是允许的。 实例名应简洁而有含义。变量名的选用应该易于记忆,
6、即能够指出其用途。 尽量避免单个字符的变量名,除非是一次性的临时变量。临时变量通常被取名 为 i,j,k,m 和 n,它们一般用于整型;c,d,e,它们一般用于字符型。如 char c、int i、float myWidth。 。 常量(Constants)类常量和 ANSI 常量的声明,应该全部大写,单词间用 下划线隔开(尽量避免 ANSI 常量,容易引起错误) 。如:static final int MIN_WIDTH = 4、static final int MAX_WIDTH = 999、static final int GET_THE_CPU = 1。 1、尽量使用完整的英文描述符;
7、 2、采用适用于相关领域的术语; 3、采用大小写混合使名字可读; 4、尽量少用缩写,如果使用,必须在整个工程中统一; 5、尽量避免使用较长的名字; 6、尽量避免使用类似的名字; 7、禁止使用仅仅是大小写有区别的名字; 8、除常量外,尽量避免使用下划线及$符。 2.42.4接口的命名接口的命名 接口名应以 Impl 或 I 字母开头 大小写规则与类名相同,如:interface ImplRasterDelegate、interface IStoring。 2. 5 方法的命名方法的命名 方法(Methods) 名采用大小写混合的方式,第一个单词的首字母小写,其 后单词的首字母大写。如:run()
8、、runFast()、getBackground()。 2.52.5参数的命名参数的命名 参数的命名规则和实例的命名规则一致。 2.62.6数组的命名数组的命名 数组应该总是用下面的方式来命名: byte buffer; 而不是: byte buffer; 2.72.7方法的参数命名方法的参数命名 使用有意义的参数命名,尽量使用要赋值的变量名前加 p 或 param 的方式 命名(不包含对象类参数): SetCounter(int paramSize) size = paramSize; 2.8集合对象命名规范集合对象命名规范 所有集合类对象必须指明枚举类型,例如: Map pMap = ne
9、w HashMap(); 3注释规范注释规范 一般情况下程序有两类注释:实现注释(Implementation Comments)和文档注 释(Document Comments)。实现注释是使用/*.*/和/界定的注释。文档注释(被称 为doc comments)是 Java 独有的,并由/*.*/界定。文档注释可以通过 javadoc 工具转换成 HTML 文件。 实现注释用以注释代码或者实现细节。文档注释从实现自由 (implementation-free)的角度描述代码的规范。它可以被那些手头没有源码的开 发人员读懂。注释应被用来给出代码的总括,并提供代码自身没有提供的附加 信息。注释
10、应该仅包含与阅读和理解程序有关的信息。例如,相应的包如何被 建立或位于哪个目录下之类的信息不应包括在注释中。 3.13.1实现注释的格式实现注释的格式(Implementation(Implementation CommentComment Formats)Formats) 程序可以有 4 种实现注释的风格:块(block)、单行(single-line)、尾端 (trailing)和行末(end-of-line)。 .1块注释块注释(Block(Block CommentsComments) ) 块注释通常用于提供对文件、方法、数据结构和算法的描述。块注释被置 于每个文件的开
11、始处以及每个方法之前。它们也可以被用于其他地方,比如方 法内部。在功能和方法内部的块注释应该和它们所描述的代码具有一样的缩进 格式。 块注释之首应该有一个空行,用于把块注释和代码分割开来,比如: /* * Here is a block comment. */ 块注释可以以/*-开头,这样 indent(1)就可以将之识别为一个代码块的开始, 而不会重排它。 /*- * Here is a block comment with some very special * formatting that I want indent(1) to ignore. * * one * two * thre
12、e */ .2单行注释单行注释(Single-Line(Single-Line Comments)Comments) 短注释可以显示在一行内,并与其后的代码具有一样的缩进层级。如果一 个注释不能在一行内写完,就该采用块注释。单行注释之前应该有一个空行。 以下是一个 Java 代码中单行注释的例子: if (condition) /* Handle the condition. */ . .3尾端注释尾端注释(Trailing(Trailing Comments)Comments) 极短的注释可以与它们所要描述的代码位于同一行,但是应该有足够的空 白来分开代码和注
13、释。 以下是一个 Java 代码中尾端注释的例子: if (a = 2) return TRUE; /* special case */ else return isPrime(a); /* works only for odd a */ .4行末注释行末注释(End-Of-Line(End-Of-Line Comments)Comments) 注释界定符/,可以注释掉整行或者一行中的一部分。它一般不用于连续 多行的注释文本;然而,它可以用来注释掉连续多行的代码段。以下是所有三 种风格的例子: if (foo 1) / Do a double-flip. . else retu
14、rn false; / Explain why here. /if (bar 1) / / / Do a triple-flip. / . / /else / return false; / 注:用 / 注释符注释代码是用于区分 /*/ 注释的文档部分。 4Java 文件样式文件样式 所有的 Java(*.java) 文件都必须遵守如下的样式规则。 4.14.1版权信息版权信息 版权信息必须在 java 文件的开头,比如: /* * 版权声明: Copyright (c) 2010-2014, * 四海兴唐职业培训基地 * */ 其他不需要出现在 javadoc 的相关信息也可以包含在这里。
15、4.24.2Package/ImportsPackage/Imports package 行要在 import 行之前,import 中标准的包名要在本地的包名之前, 而且按照字母顺序排列。 package com.thtf.ezone.; import java.util.Observable; import hotlava.util.Application; 4.34.3ClassClass 接下来的是类的注释,一般是用来解释类的。 /* * 描述:用户接口类,调用了 Service 类的实现。 * * author 作者姓名 * version 1.0 */ 接下来是类定义,包含了在不同
16、的行的 extends 和 implements。 public class CounterSet extends Observable implements Cloneable 4.44.4ClassClass FieldsFields 接下来是类的成员变量: /* * Packet counters */ protected int packets; public 的成员变量必须生成文档(JavaDoc) 。proceted、private 和 package 定义的成员变量如果名字含义明确的话,可以没有注释。 4.54.5存取方法存取方法 接下来是类变量的存取的方法。它只是简单的用来将类
17、的变量赋值获取值 的话,可以简单的写在一行上。如类的成员变量已经有注释,类变量的存取方 法可以没有注释。 /* * 功能说明: * param opcData 要设置的 Opc 数据 * return true 成功 false 失败 * throws ServiceUnavailableException 服务不可用异常 */ public static boolean setDataToOpc(OpcData opcData) throws ServiceUnavailableException return true; public int getPackets(String s) re
18、turn copyArray(packets, offset); public int getBytes() return copyArray(bytes, offset); public int getPackets() return packets; public void setPackets(int packets) this.packets = packets; 要求说明的是,对于集合,加入成员函数来插入和删除项;另其它的方法 不要写在一行上。 4.64.6构造函数构造函数 接下来是构造函数,按参数递增的方式排布(即:参数多的写在后面) 。访 问类型 (“public” , “pri
19、vate”等) 和任何“static” , “final”或“synchronized” 应该在一行中,并且方法和参数另写一行,这样可以使方法和参数更易读。 public CounterSet(int size) this.size = size; 4.74.7克隆方法克隆方法 如果这个类是可以被克隆的,那么下一步就是 clone 方法: public Object clone() try CounterSet obj = (CounterSet)super.clone(); obj.packets = (int)packets.clone(); obj.size = size; return
20、 obj; catch(CloneNotSupportedException e) throw new InternalError(Unexpected CloneNotSUpportedException: + e.getMessage(); 4.84.8类方法类方法 下面开始写类的方法: /* * Set the packet counters * (such as when restoring from a database) */ protected final void setArray(int r1, int r2, int r3, int r4) throws IllegalAr
21、gumentException / / Ensure the arrays are of equal size / if (r1.length != r2.length | r1.length != r3.length | r1.length != r4.length) throw new IllegalArgumentException(Arrays must be of the same size); System.arraycopy(r1, 0, r3, 0, r1.length); System.arraycopy(r2, 0, r4, 0, r1.length); 4.94.9mai
22、nmain 方法方法 如果 main(String) 方法已经定义了,那么它应该写在类的底部。 5代码编写格式代码编写格式 5.15.1代码样式代码样式 代码应该用 unix 的格式,而不是 windows 的(比如:回车变成回车+换 行) 。 5.25.2文档化文档化 必须用 javadoc 来为类生成文档。不仅因为它是标准,这也是被各种 java 编译器都认可的方法。 5.35.3缩进缩进 缩进应该是每行 2 个英文空格。不要在源文件中保存 Tab 字符,在使用不 同的源代码管理工具时,Tab 字符将因为用户设置的不同而扩展为不同的宽度, 并且在 unix 下很不适用。 5.45.4页宽页
23、宽 页宽应该设置为 80 字符。源代码一般不会超过这个宽度,并导致无法完整 显示,但这一设置也可以灵活调整。在任何情况下,超长的语句应该在一个逗 号或者一个操作符后折行。一条语句折行后,应该比原来的语句再缩进 2 个英 文空格。 5.55.5对对 中的语句应该单独作为一行。例如,下面的第 1 行是错误的,第 2 行是 正确的: if (i0) i + ; / 错误, 和 在同一行 if (i0) i + ; / 正确, 单独作为一行 语句永远单独作为一行 5.65.6括号括号 左括号和后一个字符之间不应该出现空格,同样,右括号和前一个字符之 间也不应该出现空格。下面的例子说明括号和空格的错误及
24、正确使用: CallProc( AParameter ); / 错误 CallProc(AParameter); / 正确 不要在语句中使用无意义的括号。括号只应该为达到某种目的而出现在源 代码中。下面的例子是错误用法: if (I) = 42) / 错误 - 括号毫无意义 6JAVA 编码规范 6.16.1注意注意 1、每个类(包括注释)不能长于 500 行,一个方法的长度尽量控制在 50 行内; 2、每个类、每个方法都必须都有注释,在一个方法内长于 10 行的逻辑代 码必须要有注释; 3、一个方法只能有一项明确的责任(包括同类别的一组责任) ; 4、让一切东西都尽可能地“私有”privat
25、e,除非有特别好的理由,不 要把任何类变量或实例变量公有化(public) 。规定实例是不需要显式的设置或 获取的,统一设成私有的,必须通过方法来获取或赋值。 5、尽量使用 interfaces,禁止使用 abstract 类。 6、避免代码功能性重复。 7、import 类时不要使用通配符,如 import java.awt.*,要把每一个用到的 类单独列出,没有用到的必须去除(不允许出现引用类未被使用的警告) 。 8、exit 除了在 main 中可以被调用外,其他的地方不应该调用。因为这样 做不给任何代码代码机会来截获退出。一个类似后台服务的程序不应该因为某 一个库模块决定了要退出就退出
26、。 6.26.2异常处理异常处理 申明的错误应该抛出一个 RuntimeException 或者派生的异常。 顶层的 main()函数应该截获所有的异常,并且打印(或者记录在日志中) 在屏幕上。 异常处理要根据类型进行编码,如“shxt-0001” 在错误输出时采用错误编码+提示信息的方式,如: shxt-0001:文件打开失 败,其中提示信息从 resourceBundle 中读出。 错误的输出采用 Log4j 来实现。即输出时不要采用 System.out.println()的 方式,而要用 logger.warn(shxt-0001:打开文件失败)的方式。 6.36.3垃圾收集垃圾收集
27、JAVA 使用成熟的后台垃圾收集技术来代替引用计数。但是这样会导致一 个问题:必须在使用完对象的实例以后进行清场工作。我建议大家能尽可能地 由我们自己手工清除垃圾,收集内存。 除非输出流一出作用域就关闭,非引用计数的程序语言,比如 JAVA,是 不能自动完成变量的清场工作的。必须象下面一样写: FileOutputStream fos = new FileOutputStream(projectFile); project.save(fos, IDE Project File); fos.close(); 6.46.4CloneClone 下面是一种有用的方法: implements Clon
28、eable public Object clone() try ThisClass obj = (ThisClass)super.clone(); obj.field1 = (int)field1.clone(); obj.field2 = field2; return obj; catch(CloneNotSupportedException e) throw new InternalError(Unexpected CloneNotSUpportedException: + e.getMessage(); 6.56.5finalfinal 类类 绝对不要因为性能的原因将类定义为 final
29、 的(除非程序的框架要求) 。 如果一个类还没有准备好被继承,最好在类文档中注明,而不要将她定义 为 final 的。这是因为没有人可以保证会不会由于什么原因需要继承它。 6.66.6访问类的成员变量访问类的成员变量 大部分涉及安全的类成员变量应该定义为 protected 的来防止继承类使用 它们。 注意,要用int packets,而不是int packets,后一种永远也不要用。 public void setPackets(int packets) this.packets = packets; CounterSet(int size) this.size = size; 6.76.7
30、编写类的公共问题编写类的公共问题 1、为了常规用途而创建一个类时,请采取“经典形式” ,并包含对下述元 素的定义: equals() hashCode() toString() clone()(implement Cloneable) implement Serializable 2、对于自己创建的每一个类,都考虑置入一个 main(),其中包含了用于测 试那个类的代码。为使用一个项目中的类,我们没必要删除测试代码。若进行 了任何形式的改动,可方便地返回测试。这些代码也可作为如何使用类的一个 示例使用。 3、让一切东西都尽可能地“私有”private。可使库的某一部分“公共 化” (一个方法、
31、类或者一个字段等等) ,就永远不能把它拿出。若强行拿出, 就可能破坏其他人现有的代码,使他们不得不重新编写和设计。若只公布自己 必须公布的,就可放心大胆地改变其他任何东西。在多线程环境中,隐私是特 别重要的一个因素只有 private 字段才能在非同步使用的情况下受到保护。 4、尽量使用 interfaces,不要使用 abstract 类。若已知某样东西准备成为一 个基础类,那么第一个选择应是将其变成一个 interface(接口) 。只有在不得不 使用方法定义或者成员变量的时候,才需要将其变成一个 abstract(抽象)类。 接口主要描述了客户希望做什么事情,而一个类则致力于(或允许)具
32、体的实 施细节。 7JSP 编码规范 1、整个 jsp/jsp bean 表示层应当尽可能的瘦和简单化。 2、牢记大多数的 JSP 都应当是只读的视图,而由页面 bean 来提供模型。 3、应当一起设计 JSP 和 JSP bean。 4、在尽可能合理的情况下,把业务逻辑从 JSP 中移走。具体于 HTTP 的逻 辑(如,对 Cookie 的处理)属于 bean 或支持类中,而不是 JSP 中。 5、尽量把条件逻辑放在控制器中而不是放在视图中。 6、为 JSP、包含的文件、JSP Bean 和实现扩展标记的类使用遵循标准的命 名惯例。如: jsp 控制器: xxxxController.jsp
33、 被包含的: jsp _descriptiveNameOfFragment.jsp jsp 页面模型 bean: Bean 如 loginBena.java jsp 会话 bena: xxxxSessionBean 标记类 : xxxxTag,xxxxTagExtraInfo 7、应当在 JSP 中避免使用页面引入指令。import 指令会促使类的实列化而 不是 jsp bean 的实例化: 不用: 而用: 8、jsp 不应该直接去访问请求参数。bean 应当执行这样的处理过程并且输 出所处理的模型数据。 9、jsp 不应当访问属性文件,或者使用 JNDI。bean 可以访问属性。 10、如果
34、 jsp bean 具有的所有的属性不能够从页面请求中被映射到,就要 尽力在标记中设置属性。 11、应当避免设计既显示表单又处理结果的页面。 12、在 jsp 中避免代码重复。把要重复的功能放在一个包含的 jsp、bean 或 标记扩展中,使得它能够被重用。 13、jsp bean 应当永远不要去产生 HTML。 14、在 jsp 中应该避免使用 out.pringln()发放来产生页面内容。 15、jsp 层不应该直接访问数据,这包括 JDBC 数据库访问和 EJB 访问。 16、在长度上,scriptlests 的代码最好不要超过 5 行。 17、除了 jsp bean 之外,jsp 不应
35、当去实例化复杂的可读写的对象。如果这 样的话,就有可能在 jsp 中去执行不适当的业务逻辑。 18、jsp bean 中不应当包含大量的数据。 19、如果使用了和,并且必须使用简单类型 的值来与外部页面进行通讯的话,就应当使用一个或多个元素。 20、定制标记应当用在适当把逻辑从 jsp 中移走的地方。 21、应当谨慎地使用标记,在 jsp 中它是一个等价的 goto。 22、应当使用隐藏的注释来阻止输出的 HTML 过大。 23、在 jsp 中避免进行异常处理。 24、每个 jsp 文件中都应当使用一个错误页面来处理不能够从中恢复的异 常。 25、在 jsp 错误页面中,使用 HTML 注释来
36、显示传递到该页面中的异常跟 踪信息。 26、只有在能够获得性能上的好处时,才使用 jspInin()方法和 jspDestroy() 方法。获取和放弃资源是 jsp beans 和标记处理器的事,而不是由 jsp 来负责的。 27、如果没有充分的理由,就不要在 jsp 中定义方法和内部内。 8代码编译 1、编写代码时要注意随时保存,并定期备份(使用 svn) ,防止由于断电、硬 盘损坏等原因造成代码丢失。 2、同一项目组内,使用相同的编辑器,并使用相同的设置选项。 3、合理地设计软件系统目录,方便开发人员使用。 4、打开编译器的所有告警开关对程序进行编译。 5、在同一项目组或产品组中,要统一编
37、译开关选项。 6、使用工具软件(如 SVN)对代码版本进行维护。 9匈牙利命名规则匈牙利命名规则 每个系统应尽量遵循一种命名规则,目的是为了代码风格的统一,匈牙利 命名法是诸多系统均采用的方法。 9.19.1数据类型缩写数据类型缩写 前缀 数据类型 b 或 is/bObject boolean/Boolean by/byObject byte/Byte char 或 c/cObject char/Char int 或 i/iObject integer/Integer str 或/s/sObject String d/dObject double/Double f/fObject float/
38、Float l/lObject long/Long 后缀数据类型 vectorVector mapMap(HashMap/ LinkedListMap) iterIterator listList 9.29.2SWINGSWING 一些控件的缩写一些控件的缩写 前缀 控件名称 jcmb/cmb JComboBox/ComboBox jedt/edt JEdit/Edit jdlg/dlg JDialog/Dialog jlst/lst JListBox/ListBox jbtn/btn JButton/Button jtxt/txt JText/Text jchk/chk JCheckBox/
39、CheckBox 9.39.3SWTSWT 一些控件的缩写一些控件的缩写 Text、Label、Button、Combo、Table、TableItem 可以用名词在前对象名在后的方式,如: newNameText 代表一个 Text saveButton 代表一个 Button 也可以将对象名放在前后面加下划线再加名词的方式,如: text_NewName 代表一个 Text button_Save 代表一个 Button 一般变量的命名规则遵循能够表达出语义就可以,如 length/index 均可以表 示一个 int 类型的变量,总之要使变量在上下文可以清楚明了的表达其实际含义。 9.4
40、9.4方法方法 前缀修饰符 vVoid fnFuntion 10部分编程常用单词缩写部分编程常用单词缩写 规则:较短的单词可通过去掉“元音”形成缩写;较长的单词可取单词的 头几个字母形成缩写;一些单词有大家公认的缩写。 完整单词 缩写 A average avg ; B back bk ; background bg ; break brk ; buffer buf ; C color cr / (clr) control ctrl ; D data dat ; delete del ; document doc ; E edit edt ; error err ; escape esc ; F flag flg ; form frm ; G grid grd ; I increment inc ; information info ; initial init ; insert ins ; image img ; L label lab ; length len ; list lst ; library lib ; M manager mngr/ (mgr) message m
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 高效团队合作策略研讨会策划案
- 9《从军行》教学设计-2023-2024学年五年级下册语文统编版
- 2024-2025学年新教材高中生物 第一章 走近细胞 第1节 细胞是生命活动的基本单位(1)教学实录 新人教版必修1
- 三农信息服务平台实施方案
- 延续性护理干预在肺癌化疗患者中的应用效果观察
- 8 同学相伴 教学设计-2024-2025学年道德与法治三年级上册统编版
- 三农集体经济发展策略研究
- DB3709-T 023-2023 公建民营养老机构绩效评价规范
- 2023七年级数学下册 第一章 整式的乘除6 完全平方公式第1课时 完全平方公式的认识教学实录 (新版)北师大版
- 4《梅花魂》教学设计-2023-2024学年五年级下册语文统编版
- 水利网络与信息安全体系建设基本技术要求
- 大健康马术俱乐部项目运营方案
- 药品2023年江苏职教高考文化综合理论试卷
- 小学数学“小组合作学习”
- 服装立体裁剪课件
- 基于单片机的智能感应监控系统的设计
- 学校劳动教育安全应急预案
- 医院安全风险分级管控清单
- 应急救援协会成立筹备申请书
- 快速康复外科理念eras与围手术期护理课件
- 最全实验室安全专项培训
评论
0/150
提交评论