版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
c++程序设计规范c++程序设计规范c++程序设计规范c++程序设计规范编制仅供参考审核批准生效日期地址:电话:传真:邮编:ANSIC/C++程序设计规范文件编号:SDSI-QG-28起草部门:审核人:批准人:批准日期:2008年4月版本标识:版目录TOC\o"1-3"\h\z1 目的 32 定义 33 程序设计要求 34 程序风格定义 4 编程风格 4 书写风格 4 程序结构 4 程序注释 5 声明 6 临时变量 6 一些规则及建议: 65 命名规范 6 详细定义 7 函数(Function) 7 变量命名规范 7 常用变量的规定: 8 类定义规范 8 类的命名 8 类的注释 8 类的声明 9目的为使整个系统保持统一和一致的编程风格及技术,提高程序代码的规范化程度,制定该部分的规范。这些规范可以提高编码质量、增强可读性、提高排错的容易程度、加强可维护性、以及提高代码的可重用性和可移植性。定义程序块:是整个C/C++语言程序中完成某一细分功能的具有相对独立性的一段程序,其主要内容包括注释、变量定义及程序正文三部分组成。子程序块:程序块中的某一细分功能的程序块称为子程序块。临时变量:临时变量是每次赋值的作用域较小,一般不应超过五行程序。临时变量的名字本身只是说明了该变量是一个临时的操作数,不具有任何意义,但在某一作用域内代表不同的具体含义。程序设计要求据所确定的标准进行程序设计。二、模块内的耦合度要高,模块间的耦合度要低。在修改一个模块时,尽量不要对其它模块造成影响,若影响较大,有必要重新规划模块。三、每个程序模块的行数不限,但对于程序模块中相对独立性较高的程序块最好作成函数,每个函数的代码行数原则上不超过200行,经常使用的函数最好做成函数库,必须保证在整个系统中同名的函数有相同的定义。四、尽量为程序块加上明确的汉语注释。对于较复杂的程序或算法需要注释文档,并在程序中注明注释文档及在文档中注明程序名。开发规范风格规范缩进风格概述缩进用于提高代码的可阅读性,缩进通常采用TAB键来控制缩进风格,但为了不同TAB值的问题,缩进采用空格缩进。在UE中,通常将TAB设置成为2个空格。要求描述程序采用缩进风格,在需要缩进的地方使用2个空格进行缩进。函数或过程的开始、结构的定义及循环、判断等语句中的代码都要采用缩进风格,case语句下的情况处理语句也要遵从语句缩进要求。示例无代码块分隔概述相对独立的短代码、变量定义需要分隔开,在读代码时可以方便的区分出独立代码。要求描述在代码之间、变量定义之后使用一行空行来分隔代码,用于区分代码。示例if(!valid_ni(ni)){.../*programcode*/}repssn_ind=ssn_data[index].repssn_index;repssn_ni=ssn_data[index].ni;长语句分隔概述通常情况下屏幕长度可以容纳超过80例字符,但为适应多种屏幕(如VI),且一行过长大多数人心理无法承受,所以长语句要分隔。大多数情况下建议单行代码长度不要超过80个字符,通常情况下可以使用各种方法缩减单行代码。要求描述较长的语句(>80字符)要分成多行书写,长表达式要在低优先级操作符处划分新行,操作符放在新行之首,划分出的新行要进行适当的缩进,使排版整齐,语句可读。示例单条语句:=NO7_TO_STAT_PERM_COUNT_LEN+STAT_SIZE_PER_FRAM*sizeof(_UL);act_task_table[frame_id*STAT_TASK_CHECK_NUMBER+index].occupied=stat_poi[index].occupied;act_task_table[taskno].duration_true_or_false=SYS_get_sccp_statistic_state(stat_item);report_or_not_flag=((taskno<MAX_ACT_TASK_NUMBER)&&(n7stat_stat_item_valid(stat_item))&&(act_task_table[taskno].result_data!=0));循环、判断类:if((taskno<max_act_task_number)&&(n7stat_stat_item_valid(stat_item))){.../*programcode*/}for(i=0,j=0;(i<BufferKeyword[word_index].word_length)&&(j<;i++,j++){.../*programcode*/}for(i=0,j=0;(i<first_word_length)&&(j<second_word_length);i++,j++){.../*programcode*/}函数参数:n7stat_str_compare((BYTE*)&stat_object,(BYTE*)&(act_task_table[taskno].stat_object),sizeof(_STAT_OBJECT));n7stat_flash_act_duration(stat_item,frame_id*STAT_TASK_CHECK_NUMBER+index,stat_object);单行单句概述部分代码比较短,有些代码就多条语句写在一行,容易造成阅读困难。要求描述一行代码只允许有一个语句。示例错误风格:=0;=0;正确风格:=0;=0;判断跳转关键字单行概述if、for、do、while、case、switch、default等关键字需要采用单行语句来方便阅读。要求描述if、for、do、while、case、switch、default等语句自占一行,且if、for、do、while等语句的执行语句部分无论多少都要加括号{}。示例if(pUserCR==NULL){return;}代码块分隔符概述代码关键字中有互相对应的分隔符如{},此分隔符用于区分代码,可以有多种显示风格,并且也各有优点,但本规范只支持下列风格。要求描述程序块的分界符(如C/C++语言的大括号‘{’和‘}’)应各独占一行并且位于同一列,同时与引用它们的语句左对齐。在函数体的开始、类的定义、结构的定义、枚举的定义以及if、for、do、while、switch、case语句中的程序都要采用如上的缩进方式。示例for(...){.../*programcode*/}if(...){.../*programcode*/}voidexample_fun(void){.../*programcode*/}空格使用概述在程序中有条件的使用空格可以使代码更易阅读,在已经非常清晰的语句中没有必要再留空格,如果语句已足够清晰则括号内侧(即左括号后面和右括号前面)不需要加空格,多重括号间不必加空格,因为在C/C++语言中括号已经是最清晰的标志了。在长语句中,如果需要加的空格非常多,那么应该保持整体清晰,而在局部不加空格。给操作符留空格时不要连续留两个以上空格。要求描述在两个以上的关键字、变量、常量进行对等操作时,它们之间的操作符之前、之后或者前后要加空格;进行非对等操作时,如果是关系密切的立即操作符(如->),后不应加空格。示例(1)逗号、分号只在后面加空格。inta,b,c;(2)比较操作符,赋值操作符"="、"+=",算术操作符"+"、"%",逻辑操作符"&&"、"&",位域操作符"<<"、"^"等双目操作符的前后加空格。if(current_time>=MAX_TIME_VALUE)a=b+c;a*=2;a=b^2;(3)"!"、"~"、"++"、"--"、"&"(地址运算符)等单目操作符前后不加空格。*p='a';/*内容操作"*"与内容之间*/flag=!isEmpty;/*非操作"!"与内容之间*/p=&mem;/*地址操作"&"与内容之间*/i++;/*"++","--"与内容之间*/(4)"->"、"."前后不加空格。p->id=pid;/*"->"指针前后不加空格*/(5)if、for、while、switch等与后面的括号间应加空格,使if等关键字更为突出、明显。if(a>=b&&c>d)注释规范注释定义概述注释关键字可以有多行注释和单行注释,可以使用/**/、文件、makefile等)头部应进行注释,注释必须列出:版权说明、版本号、生成日期、作者、内容、功能、与其它文件的关系、修改日志等,头文件的注释中还应有函数功能简要说明。源文件头部应进行注释,列出:版权说明、版本号、生成日期、作者、模块目的/功能、主要函数及其功能、修改日志等。示例下面这段头文件的头注释比较标准,当然,并不局限于此格式,但上述信息建议要包含在内。/*************************************************Copyright(C),1988-1999,中国网通集团系统集成有限公司.Filename:History:Date:Author:Modification:2....*************************************************/说明:Description一项描述本文件的内容、功能、内部各部分之间的关系及本文件与其它文件关系等。History是修改历史记录列表,每条修改记录应包括修改日期、修改者及修改内容简述。函数头注释概述函数头的注释帮助阅读者了解函数的功能、算法、相应的性能。要求描述函数头部应进行注释,列出:函数的目的/功能、输入参数、输出参数、返回值、调用关系(函数、表)、性能等。对于性能描述,相对简单的计算函数可以不描述性能指标。示例示例:下面这段函数的注释比较标准,当然,并不局限于此格式,但上述信息建议要包含在内。/*************************************************Function:.),建议除了要有具体含义外,还能表明其变量类型、数据类型等,但i、j、k作局部循环变量是允许的。示例temp可缩写为tmp;flag可缩写为flg;statistic可缩写为stat;increment可缩写为inc;message可缩写为msg;风格概述命名规范必须与所使用的系统风格保持一致,并在同一项目中统一。要求描述采用UNIX的全小写加下划线的风格或大小写混排的方式,不要使用大小写与下划线混排的方式,用作特殊标识如标识成员变量或全局变量的m_和g_,其后加上大小写混排的方式是允许的。除非必要,不要用数字或较奇怪的字符来定义标识符。示例错误风格:#define_EXAMPLE_0_TEST_#define_EXAMPLE_1_TEST_voidset_sls00(BYTEsls);正确风格:#define_EXAMPLE_UNIT_TEST_#define_EXAMPLE_ASSERT_TEST_voidset_udt_msg_sls(BYTEsls);过程规范返回值概述对于函数的返回值要进行全面的判断,由于返回值判断不周可能会导致程序出错但没有正确的报告。要求描述对所调用函数的错误返回码要仔细、全面地处理。示例无过程长度概述一个函数的代码行是没有限制的,但为了容易阅读代码长度应限制在两屏可观的程度,通常情况下代码行不应超过200行。要求描述代码长度不超过200行。示例无一个功能一个函数概述一个函数可以完成很多功能,但大多数情况下,一个函数只完成一个功能。一般通过它做什么的句式来验证函数是否是有效的。如果需要它做什么和什么,通常不是个好函数。在比如MAX算法,通常情况下一个:语句就可以实现,但用函数来实现在后续的维护中可以更好的进行升级。还有一种比较极端的情况是,一个函数实现了过多的功能,此函数通常不易理解。要求描述一个函数仅完成一件功能。示例错误例子:value=(a>b)a:b;正确例子:intmax(inta,intb){return((a>b)a:b);}value=max(a,b);或改为如下。#defineMAX(a,b)(((a)>(b))(a):(b))value=MAX(a,b);可读性规范运算符优先级概述注意运算符的优先级,并用括号明确表达式的操作顺序,避免使用默认优先级。要求描述防止阅读程序时产生误解,防止因默认的优先级与设计思想不符而导致程序出错。示例word=(high<<8)|low(1)if((a|b)&&(a&c))(2)if((a|b)<(c&d))(3)如果书写为high<<8|lowa|b&&a&ca|b<c&d由于high<<8|low=(high<<8)|low,a|b&&a&c=(a|b)&&(a&c),(1)(2)不会出错,但语句不易理解;a|b<c&d=a|(b<c)&d,(3)造成了判断条件出错。使用常量代替数字概述在使用常量时程序中可以使用数字表示,但通常不易阅读,在使用时使用常量来代替。要求描述避免使用不易理解的数字,用有意义的标识来替代。涉及物理状态或者含有物理意义的常量,不应直接使用数字,必须用有意义的枚举或宏来代替。。示例错误的例子:if(Trunk[index].trunk_state==0){Trunk[index].trunk_state=1;...runk_state==TRUNK_IDLE){Trunk[index].trunk_state=TRUNK_BUSY;....(从低到高,以字节为单位)examexam低字节exam高字节内存:0bit1bit2bit...(字节的各“位”)EXAM_BITA1A2A如下是68360CPU生成短整数及位域的方式。内存:012...(从低到高,以字节为单位)examexam高字节exam低字节内存:7bit6bit5bit...(字节的各“位”)EXAM_BITA1A2A说明:在对齐方式下,CPU的运行效率要快得多。示例:如下图,当一个long型数(如图中long1)在内存中的位置正好与内存的字边界对齐时,CPU存取这个数只需访问一次内存,而当一个long型数(如图中的long2)在内存中的位置跨越了字边界时,CPU存取这个数就需要多次访问内存,如i960cx访问这样的数需读内存三次(一个BYTE、一个SHORT、一个BYTE,由CPU的微代码执行,对软件透明),所有对齐方式下CPU的运行效率明显快多了。 18162432 |long1|long1|long1|long1| ||||long2| |long2|long2|long2|| 测试性规范调测概述要求描述在同一项目组或产品组内,要有一套统一的为集成测试与系统联调准备的调测开关及相应打印函数,并且要有详细的说明。调测打印出的信息串的格式要有统一的形式。信息串中至少要有所在模块名(或源文件名)及行号。编程的同时要为单元测试选择恰当的测试点,并仔细构造测试代码、测试用例,同时给出明确的注释说明。测试代码部分应作为(模块中的)一个子模块,以方便测试代码在模块中的安装与拆卸(通过调测开关)。在软件系统中设置与取消有关测试手段,不能对软件实现的功能等产生影响。用调测开关来切换软件的DEBUG版和正式版,而不要同时存在正式版本和DEBUG版本的不同源文件,以减少维护的难度。软件的DEBUG版本和发行版本应该统一维护,不允许分家,并且要时刻注意保证两个版本在实现功能上的一致性。在编写代码之前,应预先设计好程序调试与测试的方法和手段,并设计好各种调测开关及相应测试代码如打印函数等。编写防错程序,然后在处理错误之后可用断言宣布发生错误。示例示例:假如某模块收到通信链路上的消息,则应对消息的合法性进行检查,若消息类别不是通信协议中规定的,则应进行出错处理,之后可用断言报告,如下例。#ifdef_EXAM_ASSERT_TEST_...10G1Grect_width_sum+=rect[ind].width;}}因为判断语句与循环变量无关,故可如下改进,以减少判断次数。if(data_type==RECT_AREA){for(ind=0;ind<MAX_RECT_NUMBER;ind++){area_sum+=rect_area[ind];}}else{for(ind=0;ind<MAX_RECT_NUMBER;ind++){rect_length_sum+=rect[ind].length;rect_width_sum+=rect[ind].width;}}常量预先计算概述要求描述对于长使用的计算常量可以预先定义常量计算出来。示例#definePAIradius=circle_length/(2*PAI);应如下把浮点除法改为浮点乘法。#definePAI_RECIPROCAL(1/)..xt名词术语.txt安装说明.txt运行构架图模块构架图数据库模型需求列表概要设计详细设计公共函数.txt函数测试运行构架图指系统运行时,进程如何分布,如何交互等。单词缩写,指程序中用到的英文单词要有明确的解释,方便他人阅读,明确具体含义。缩写指部分长单词缩写的结果,表明缩写的含义。每个单词只能用一次,不得一个缩写在不同的模块表示不同的含义。概要设计指整个模块如何搭建。详细设计指每个函数如何实现。函数测试文档要求填写每个函数的测试情况,其中包括性能情况。为集成性能测试提供指导依据。安装说明要说明对于多主机情况,应用如何发布。源程序目录$DP/模块名/Makefile每个模块使用一个编译文件,严禁使用多个makfile来编译程序,导致程序最后无法确认那个是最新的编译文件。在编写makefile时采用最简单的方法进行编写,不建议编写脚本式编译方法。在每个程序编译前调用indent进行程序美化。在每个程序编译前调用lint进行程序深度查错。要注意的是部分程序在-O3的条件下无法正常运行。$DP/模块名Src.c相关源文件权限要求DB.pc.sc相关源文件Include.h相关头文件Lib.动态链接库文件Obj.o目标文件Pc->c的目标文件$DP/COMMONarithmetic算法目录(缓冲算法)平衡二叉树,二分法等算法的编写。DB访问数据库用到的文件.(实现层)(实现层)(逻辑层)数据库相关操作由专人负责编写,达到数据库访问效率最优。对于统计部分使用SQL较多的模块,应安排一人来编写。Net网络访问,SOCKET等File文件操作Sys系统访问(实现层)(实现层)(逻辑层)Err错误处理相关公共程序Timer定时器采用自己开发编写定时器,定时器启动后发现任务调度或者发送给adm.Log日志相关程序。(逻辑层)(实现层)(实现层)(实现层)(实现层)(实现层)详见日志Adm总控管理目录.前台监控监听程序。Adm程序管理所有的程序启动与停止,进程的调度等操作。Listen管理前台访问后台的监控程序。所有程序建议采用进程池模式进行调度,不建议采用单任务单进程模式。数据目录$DT/模块名In输入目录Out输出目录Err错单目录Bak备份目录Tmp临时目录可执行程序目录$PD/模块名Bin存放可执行程序参数配置目录$PD/模块名Etc日志目录$PD/模块名Log存放相关日志文件.日志文件名可以配置。所有的日志文件均通过管道传送到日志进程,由日志进程记录,管理。Debug目录$DBG/模块名Bin存放Debug程序将Debug开关打开进行编译.示例日志错误规范日志定义概述要求描述输出要求正常日志需要记录关键程序运行信息,比如程序启动、关闭,处理状态等等错误日志能够捕捉到所有告警和异常输出信息实现逻辑所有日志通过公共日志管理函数输出日志名逻辑文件名采用参数配置,动态生成。日志文件名参数格式[模块名]=[参数配置]模块名每个源码程序(.c,.pc…)都有对应一个模块名,一个模块名可以对应多个源程序。参数解析参数采用宏定义的方法。#defineERR_MED_NOEXEC"20001"#defineERR_MED_LOG_TABLE"T_ERR_MED_LOG"如此根据需要增加,并编写相应的获取函数。日志表日志表名采用宏定义方式,命名规则为正常日志表:T_NORM_模块名_LOG错误日志表:T_ERR_模块名_LOG日志文件生成逻辑日志公用函数根据参数配置生成相应的文件名,并发送给日志输出函数,日志输出函数根据文件名判断文件是否打开,如果没有打开则打开文件。日志消息格式正常日志正常采用如下格式[本地网标识][模块名][日志描述][时间]异常日志异常采用如下格式[本地网标识][模块名][错误级别][错误源文件][错误行数][错误类别][错误编码][错误描述][时间]错误类别BADFILE:适用于文件级错误类别BADSYS:适用于系统级错误类别BADDB:适用于数据库级错误类别BADPARA:适用于参数级错误类别错误级别DEBUG:调试信息。调试信息,供实施人员检查错误,帮助开发人员定位错误位置。INFO:普通日志。正常处理信息,供用户察看进度等。WARN:警告信息.主要指需要用户日常检查的消息。比如发现某个话单超长需要人为处理,此部分不是一定要解决的问题。ERRCONT:发生错误,但可继续运行。主要指应用参数配置有误,但不影响其他部分运行,此部分处理需要重新处理,必须需要用户解决。ERRPROCHALT:发生错误,导致进程无法运行,甚至coreERRAPPHALT:发生错误,导致应用无法运行.ERRSYSHALT:发生错误,导致系统无法运行.消息级别在每个模块编译时可以定义宏消息级别,根据不同的级别有不同的消息日志输出.比如在DEBUG级,所有的消息都打印输出。要求DBG输出时在MAKEFILE文件增加参数“-DDEBUG”,要求DEBUG调试信息占程序总代码量的5%左右;ERRAPPHALT级只输出ERRAPPHALT级别消息.日志动作日志管理进程根据错误级别的配置参数决定作何处理,是否向数据库发送消息,是否向邮件发送消息,是否调用语音模块发送消息。[ERRCONT]=[FILELOG|DBLOG|MAILLOG|SMSLOG]比如:宕机错误发生,需要调用立即通知管理人员。错误编码规范对所有的错误编码进行统一记录,作为知识库进行管理。编码[模块名]_[子模块名]_[错误号(5位)]宏定义[ERR]_[模块名]_[ERRDSC][WARN]_[模块名]_[ERRDSC]错误解释与解决方案MED-ERR-20001ERR_MED_NOEXEC调用进程失败1、检查被调用进程目录是否存在2、进程调用权限是否满足示例可移植规范只使用ANSIC概述要求描述只使用ANSIC语法。如果无法避免,则考虑不同主机的不同实现。示例系统函数概述由于标准的缺失,部分函数的实现在不同的主机上的实现是不同的。要求描述对于系统一些函数包,可能实现方法不同,要注意此部分函数的使用,如可能则自己实现。示例在IBM和HP的string函数包中对于strcmp的返回值是不一样的。变量定义概述要求描述通常不直接使用ANSIC变量,通常使用宏定义进行封装,且只使用INT32_T,INT64_T,CHAR_T三种类型。使用系统函数的变量定义。示例在系统中有time函数,此函数定义变量的格式为time_t,在系统使用时不要使用int、long类型来替换,而是使用time_t来定义。32/64位模式概述目前主机是32/64模式混合的应用环境,32/64位模式不同,通常在内部处理上也有不同,在代码开发时充分注意此问题。要求描述使用INT32_T,INT64_T,CHAR_T三种类型,且根据不同环境定义不同的宏。示例版本控制规范版本控制概述任何代码均需要通过版本控制工具进行控制,所有的代码在任何时刻均要求以版本控制工具中的代码为准。要求描述版本控制有下面几个要求:所有代码均需要放到版本控制服务器中。任意时刻所有代码均以版本控制服务器为准。更新任何代码时均从版本控制服务器中进行更新。代码测试完成后,修改的代码需要放到版本控制服务器中。对于分布式环境,所有应用均不包括源码只有可执行文件和配置文件。示例数据库规范数据库连接概述对于大部分数据库来说,并不支持数据库连接串加密,但按照内控要求,程序连接数据库的用户名和密码必须是密文,这要求系统连接数据库的用户名和密码必须加密,但同时存在的问题是部分人可以通过修改程序把数据库的连接串的用户名和密码解密。 由于数据库的性能,系统不可以频繁的连接数据库、断开数据库等操作,在大多数情况下,系统进程在进程启动时连接一次数据库,其它时间不重连数据库。 在常连接的情况下,由于某种原因(数据库重启、网络异常),进程需要根据连接状态自动进行重连。 在常连接状态下,一个关键业务的数据库操作必须在一个事务内完成,避免由于连接断开导致状态不统一。要求描述数据库连接串采用文本加密方式加密用户名、密码和连接串。加密解密算法必须严格保密,如有可能定期更换加密算法或者密码。系统必须可以在数据库连接断开的情况下自动重连。关键业务的数据库操作必须是一个事务操作,避免数据状态不一致。部分情况下单个进程需要同时连接多个数据库,所以连接数据库时必须增加数据库连接指定的HANDLE。系统可以根据配置,不同的SQL语句可以使用不同的数据库连接。在系统需要数据库连接数较多的情况下,建议使用数据库连接池。示例数据库连接释放概述对于部分数据库来说,当数据库连接断开时,如果不使用断开语句,数据库服务进程则不会主动退出,当此种情况过多时,会导致数据库的进程数异常多,每个数据库进程所占内存都不低(ORACLE进程38M),会导致主机内存占满,导致主机无法工作直接宕机。要求描述在进程退出时,必须主动执行数据库连接断开语句,用于数据库服务器释放进程资源。在数据库连接断开前要注意执行提交或者回滚语句,保证事务的主动完整性,由系统保证业务事务的合理性,而不是数据库连接断开事务回滚的模式。示例异常退出数据库连接释放概述在系统异常退出时,系统必须主动断开数据库连接。所以在系统异常退出时必须考虑使用的资源的释放。对于系统访问内存资源等产生CORE文件的情况下,需要注意测试是否有方法可以在生成CORE文件前释放资源。要求描述系统发现问题主动退出时需要主动释放数据库连接。在产生CORE文件时,暂时无法确认操作系统是否允许执行断开连接语句。示例数据库访问效率概述数据库交互访问时,执行效率非常低,大多数情况下不会超过10000次/秒,这对数据密集型应用是个关键性能瓶颈,所以大多数情况下尽量避免频繁的访问数据库,一般比较频繁的交互需要把数据库数据放到共享内存或者本地内存中。对于不得不直接和数据库交互的进程则可以考虑使用CACHE的方法降低访问。要求描述频繁访问数据库的操作能放到共享内存就放到共享内存中。对于不得不访问数据库的则尽量使用CACHE算法。可以预先编译的SQL语句则预先编译,尽量减少SQL语句编译时间。命名规范本命名规范包括模块名、函数名、变量名、常量名等
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 教学设施更新更换制度
- 2026年市场营销专业实战案例分析题库市场调研与营销策略题
- 2026年注册会计师考试财务成本管理成本控制与决策分析试题集
- 2026年建筑师执业资格考试专业知识题
- 2026年网络工程师职业能力测验题
- 2026年财经专业研究生入学考试经济学题库
- 2026年健康管理专业测试营养学基础题库及答案
- 2026年虚拟电厂运营管理优化题库含电力市场分析
- 2026年建筑吊装作业法规与标准实操知识测试题
- 武汉大学安全制度
- 煤矿炸药管理办法
- 幼儿园食堂工作人员培训计划表
- 文学常识1000题含答案
- (高清版)DB31∕T 1289-2021 户外广告和招牌设施安全检测要求
- 丁华野教授:上卷:幼年性纤维腺瘤与叶状肿瘤
- 输液导轨施工方案
- 货运行业安全责任意识培训计划
- 《肿瘤治疗相关心血管毒性中医防治指南》
- JC╱T 529-2000 平板玻璃用硅质原料
- 肺结节科普知识宣教
- 钢结构安装合同
评论
0/150
提交评论