版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、广广东东省省电电信信 综综合合业业务务支支撑撑系系统统 ( (ibss) ) 开开发规发规范范说说明明书书 编制: 部门职位: 日期:_ 审核: 部门职位: 日期:_ 批准: 部门职位: 日期:_ 广州南方电信系统软件有限公司广州南方电信系统软件有限公司 版权所有版权所有 不得复制不得复制 目目 录录 第一章第一章 引言引言 .4 4 1.1 编写目的 .4 1.2 背景 .4 1.3 文档地图 .4 1.4 术语定义 .4 1.5 参考资料 .4 第二章第二章 通用编码规范通用编码规范 .5 5 2.1 排版 .5 2.2 注释 .5 2.3 命名 .6 2.4 可读性 .6 2.5 变量
2、.6 2.6 函数、过程 .6 2.7 可测性 .7 2.8 程序效率 .7 2.9 质量保证 .7 2.10 代码编译 .8 第三章第三章 delphidelphi 前端开发设计规范前端开发设计规范 .9 9 3.1 软件模块设计 .9 3.1.1 开发工具 .9 3.1.2 文档的建立和管理 .9 3.1.3 版本控制 .9 3.1.4 注释和功能描述 .10 3.1.5 菜单打开窗体的引出函数声明 .10 3.1.6 修改 .10 3.1.7 发布的公用资源,多使用类 .10 3.2 编码设计 .11 3.2.1 命名规则 .11 第四章第四章 cicscics 开发规范开发规范 .19
3、19 4.1 命名规则 .19 4.1.1 通用规则 .19 4.1.2 program 命名 .20 4.1.3 函数/过程命名 .20 4.1.4 变量命名 .20 4.1.5 宏定义 .21 4.2 程序的书写规范 .21 4.2.1 嵌入式 sql 的书写规范 .21 4.2.2 空行 .21 4.2.3 代码行 .21 4.2.4 对齐 .22 4.2.5 修饰符的位置 .22 4.2.6 注释 .22 4.3 开发注意事项 .23 4.3.1 平台支持 .23 4.3.2 cics program 中禁止使用的函数 .23 4.3.3 cics program 中不推荐使用的函数
4、.23 4.3.4 宿主变量(host variable)可用数据类型 .23 4.3.5 数据类型兼容 .24 4.3.6 char 数据类型的使用 .24 4.3.7 varchar 数据类型的使用 .24 4.3.8 统一编译选项 .24 4.3.9 统一日期格式 .24 4.3.10 字符集 .25 4.3.11 防止头文件的多重包含 .25 4.4 开发建议 .25 第五章第五章 数据库设计规范数据库设计规范 .2626 5.1 数据库中对象命名原则 .26 5.2 数据库中对象前缀的定义 .26 5.3 库表命名原则 .26 5.4 库表类别划分 .27 5.5 字段命名规则 .2
5、8 5.6 字段类型规范 .30 5.7 存储过程和触发器命名规则 .30 5.8 主键和索引命名规则 .30 5.9 设计规则 .30 第一章第一章 引言引言 1.11.1 编写目的编写目的 为了规范设计和代码风格,提高代码质量,增强程序的可读性和可维护性,特编 写本文档。 预期读者:项目提出方以及用户方相关技术人员、项目开发组成员、质量控制人 员。 1.21.2 背景背景 系统名称:综合业务支撑系统 项目提出人:广东省电信公司 项目开发者:广州南方电信系统软件有限公司 用户:广东省电信公司、广东省电信公司地市级分公司 1.31.3 文档地图文档地图 本文档定义了开发的规范,包括以下几个方面
6、: 通用编码规范 delphi 前端开发设计规范 cics 中间件开发规范 数据库设计规范 1.41.4 术语定义术语定义 无。 1.51.5 参考资料参考资料 广东省电信综合业务支撑系统业务需求分析书 v2.0 广东省电信公司 广东省电信综合业务支撑系统技术规范广东省电信公司 计算机软件产品开发文件编制指南gb 8567-88 计算机软件质量保证计划规范gb/t 12504-90 计算机软件配置管理计划规范gb/t 12505-90 第二章第二章 通用编码规范通用编码规范 2.12.1 排版排版 关键词和操作符之间加适当的空格。 相对独立的程序块与块之间加空行。 较长的语句、表达式等要分成多
7、行书写。 划分出的新行要进行适应的缩进,使排版整齐,语句可读。 长表达式要在低优先级操作符处划分新行,操作符放在新行之首。 循环、判断等语句中若有较长的表达式或语句,则要进行适应的划分。 若函数或过程中的参数较长,则要进行适当的划分。 不允许把多个短语句写在一行中,即一行只写一条语句。 函数或过程的开始、结构的定义及循环、判断等语句中的代码都要采用缩进风格。 c/c+语言是用大括号和界定一段程序块的,编写程序块时和 应各独占一行并且位于同一列,同时与引用它们的语句左对齐。在函数体的开始、类 的定义、结构的定义、枚举的定义以及 if、for、do、while、switch、case 语句中 的程
8、序都要采用如上的缩进方式。 2.22.2 注释注释 注释要简单明了。 边写代码边注释,修改代码同时修改相应的注释,以保证注释与代码的一致性。 在必要的地方注释,注释量要适中。注释的内容要清楚、明了,含义准确,防止 注释二义性。保持注释与其描述的代码相邻,即注释的就近原则。 对代码的注释应放在其上方相邻位置,不可放在下面。 对数据结构的注释应放在其上方相邻位置,不可放在下面;对结构中的每个域的 注释应放在此域的右方;同一结构中不同域的注释要对齐。 变量、常量的注释应放在其上方相邻位置或右方。 全局变量要有较详细的注释,包括对其功能、取值范围、哪些函数或过程存取它 以及存取时注意事项等的说明。 在
9、每个源文件的头部要有必要的注释信息,包括:文件名;版本号;作者;生成 日期;模块功能描述(如功能、主要算法、内部各部分之间的关系、该文件与其它文 件关系等) ;主要函数或过程清单及本文件历史修改记录等。 在每个函数或过程的前面要有必要的注释信息,包括:函数或过程名称;功能描 述;输入、输出及返回值说明;调用关系及被调用关系说明等。 2.32.3 命名命名 较短的单词可通过去掉“元音”形成缩写; 较长的单词可按单词的头几个发音符的优先级。 使用匈牙利表示法。 2.42.4 可读性可读性 避免使用不易理解的数字,用有意义的标识来替代。 不要使用难懂的技巧性很高的语句。 源程序中关系较为紧密的代码应
10、尽可能相邻。 2.52.5 变量变量 去掉没必要的公共变量。 构造仅有一个模块或函数可以修改、创建,而其余有关模块或函数只访问的公共 变量,防止多个不同模块或函数都可以修改、创建同一公共变量的现象。 仔细定义并明确公共变量的含义、作用、取值范围及公共变量间的关系。 明确公共变量与操作此公共变量的函数或过程的关系,如访问、修改及创建等。 当向公共变量传递数据时,要十分小心,防止赋与不合理的值或越界等现象发生。 防止局部变量与公共变量同名。 仔细设计结构中元素的布局与排列顺序,使结构容易理解、节省占用空间,并减 少引起误用现象。 结构的设计要尽量考虑向前兼容和以后的版本升级,并为某些未来可能的应用
11、保 留余地(如预留一些空间等) 。 留心具体语言及编译器处理不同数据类型的原则及有关细节。 严禁使用未经初始化的变量。声明变量的同时对变量进行初始化。 编程时,要注意数据类型的强制转换。 2.62.6 函数、过程函数、过程 函数的规模尽量限制在 200 行以内。 一个函数最好仅完成一件功能。 为简单功能编写函数。 函数的功能应该是可以预测的,也就是只要输入数据相同就应产生同样的输出。 尽量不要编写依赖于其他函数内部实现的函数。 避免设计多参数函数,不使用的参数从接口中去掉。 用注释详细说明每个参数的作用、取值范围及参数间的关系。 检查函数所有参数输入的有效性。 检查函数所有非参数输入的有效性,
12、如数据文件、公共变量等。 函数名应准确描述函数的功能。 避免使用无意义或含义不清的动词为函数命名。 函数的返回值要清楚、明了,让使用者不容易忽视错误情况。 明确函数功能,精确(而不是近似)地实现函数设计。 减少函数本身或函数间的递归调用。 编写可重入函数时,若使用全局变量,则应通过关中断、信号量(即 p、v 操作) 等手段对其加以保护。 2.72.7 可测性可测性 在编写代码之前,应预先设计好程序调试与测试的方法和手段,并设计好各种调 测开关及相应测试代码如打印函数等。 在进行集成测试/系统联调之前,要构造好测试环境、测试项目及测试用例,同 时仔细分析并优化测试用例,以提高测试效率。 2.82
13、.8 程序效率程序效率 编程时要经常注意代码的效率。 在保证软件系统的正确性、稳定性、可读性及可测性的前提下,提高代码效率。 不能一味地追求代码效率,而对软件的正确性、稳定性、可读性及可测性造成影 响。 编程时,要随时留心代码效率;优化代码时,要考虑周全。 要仔细地构造或直接用汇编编写调用频繁或性能要求极高的函数。 通过对系统数据结构划分与组织的改进,以及对程序算法的优化来提高空间效率。 在多重循环中,应将最忙的循环放在最内层。 尽量减少循环嵌套层次。 避免循环体内含判断语句,应将循环语句置于判断语句的代码块之中。 尽量用乘法或其它方法代替除法,特别是浮点运算中的除法。 2.92.9 质量保证
14、质量保证 在软件设计过程中构筑软件质量。代码质量保证优先原则 正确性,指程序要实现设计要求的功能。 稳定性、安全性,指程序稳定、可靠、安全。 可测试性,指程序要具有良好的可测试性。 规范/可读性,指程序书写风格、命名规则等要符合规范。 全局效率,指软件系统的整体效率。 局部效率,指某个模块/子模块/函数的本身效率。 个人表达方式/个人方便性,指个人编程习惯。 只引用属于自己的存贮空间。 防止引用已经释放的内存空间。 过程/函数中分配的内存,在过程/函数退出之前要释放。 过程/函数中申请的(为打开文件而使用的)文件句柄,在过程/函数退出前要关 闭。 防止内存操作越界。 时刻注意表达式是否会上溢、
15、下溢。 认真处理程序所能遇到的各种出错情况。 系统运行之初,要初始化有关变量及运行环境,防止未经初始化的变量被引用。 系统运行之初,要对加载到系统中的数据进行一致性检查。 严禁随意更改其它模块或系统的有关设置和配置。 不能随意改变与其它模块的接口。 充分了解系统的接口之后,再使用系统提供的功能。 要时刻注意易混淆的操作符。当编完程序后,应从头至尾检查一遍这些操作符。 不使用与硬件或操作系统关系很大的语句,而使用建议的标准语句。 建议:使用第三方提供的软件开发工具包或控件时,要注意以下几点: 充分了解应用接口、使用环境及使用时注意事项,不能过分相信其正确性。 除非必要,不要使用不熟悉的第三方工具
16、包与控件。 2.102.10 代码编译代码编译 编写代码时要注意随时保存,并定期备份,防止由于断电、硬盘损坏等原因造成 代码丢失。 同一项目组内,最好使用相同的编辑器,并使用相同的设置选项。 合理地设计软件系统目录,方便开发人员使用。 打开编译器的所有告警开关对程序进行编译。 在同一项目组或产品组中,要统一编译开关选项。 使用工具软件(如 visual sourcesafe)对代码版本进行维护。 第三章第三章 delphidelphi 前端开发设计规范前端开发设计规范 3.13.1 软件模块设计软件模块设计 .1 开发工具开发工具 统一采用 delphi 6 开发,每个模块有自
17、己的编号,在程序设计中应严格按编号 设计编码。 .2 文档的建立和管理文档的建立和管理 每个模块的所有文档的建立由设计者完成,所有设计说明,更改文档要向 (3d:tossdoc)提交,当模块发生更改后文档的更新必须即时完成, 生成的运行文件向3d:toss bin)提交。 对设计文档的修改应加上修改人的名字及时间,如: procedure showconfig(odb:tdatabase); /张三 1999.08.26 procedure showconfig(odb:tdatabase);stdcall; 各子系统的模块组相对独立,每
18、个子系统的模块的调用由主控程序完成; 各子系统的模块组都是一个包方式的 dll 文件,确实有困难的采用 exe 文件, 通过选中 project-options-packages 下 build with runtime packages 进行设置。 .3 版本控制版本控制 版本的构成,如:v01。2001。11。23 后面几位一般来说是提交日期,版本号 的修改由程序员自己完成,版本修改后必须进行版本发布,使程序的版本号与库表发 布时的版本号一致。 每个 dll 的工程文件必须包括版本信息的全局变量,包含取版本信息函数,以便 主控程序做版本检测; 每个 dll 必须包含版本控制
19、函数 getversioninfo,并且在 exports 中申明。 取版本信息 var versioninfo :tversion = (product:xxx 模块; version:v1.0.1999.08.11; author:abc; updatedate:19990815); function getversioninfo:tversion;stdcall; begin result := versioninfo; end; .4 注释和功能描述注释和功能描述 每个模块前要 有模块的功能描述,输入输出参数,时间,创建人员等; 注释在函数或命令行语句的上方; 3.1.
20、53.1.5 菜单打开窗体的引出函数声明菜单打开窗体的引出函数声明 菜单动态调用 dll 文件打开窗体的必须要有一个引出函数或过程 在接口部分声明引出函数或过程; dll 项目文件中在 exports 子句引出了 dll 中应用程序要调用的函数或过程; .6 修改修改 对模块的修改必须注意对文档的更新,特别是对初始化程序的修改。 注明修改原因,修改人,修改时间,以便以后维护人员的代码了解; .7 发布的公用资源,多使用类发布的公用资源,多使用类 建议建立一个公用资源库(ndpublic.dll) ,这个资源库包含一些常用的功能函 数,功用控件等 ,开发时使用方法
21、是将 ndpublic.pas 文件加入你的工程中去。使用 静态调用的方式使用; 建立几个基本窗口(如,父窗口,编辑,查找等) ,大家的其他窗口可以从这几 个窗口中继承下来用。鼓励大家将自己设计的其他窗口提炼出来让大家一起使用。 请多使用类的方法解决问题,如果可能可以将相对独立的对象建成 vcl 控件或 ocx 控 件,便于资源重复利用。 公用资源库,公共父窗体的修改更新最好由专人管理,发布更新; 3.23.2 编码设计编码设计 .1 命名规则命名规则 指在软件设计中涉及到的各种对象(应用、窗口、菜单等)以及变量的命名的一 套方法。命名的基本规则是简单明了,尽量使用长命名方式,
22、功能命名可以是汉语简 拼和英文。 a、 文件命名: 项目文件:项目文件的名称应当具有描述意义,如综合管理的项目工程文件: zhgl.dpr 窗体文件: 窗体文件的名称应当表达出窗体的用途,且具有 f r m 前缀 如主窗口;frmmain, 对应的模块编号:0500000001 数据模块文件: 数据模块文件的名称应当表达出数据模块的作用,且具有 d m 前 缀,如部门的数据模块文件:dmdepartment.dfm 单元文件: 1. 普通单元的结构 (1) 单元名 单元的名称应当有描述性。例如,应用程序的主窗体单元叫 main.pas 。 (2) uses 句子 interface 部分的 u
23、ses 子句应当只包含该部分需要的单元。不要包含可能由 delp hi 自动添加的单元 implementation 部分的 uses 子句应当只包含该部分需要的单元,不要有多余的 单元。 (3) interface 部分 interface 部分应当只包含需要被外部单元访问的类型、变量、过程与函数的声 明。而且,这些声明应当在 implementation 部分之前。 (4) implementation 部分 implementation 部分包括本单元私有的类型、变量、过程与函数的实现。 (5) initialization 部分 不要在 initialization 部分放置花费时间很
24、多的代码。否则,将导致应用程序 启动时显得很慢。 (6) finalization 部分 确保释放所有在 initialization 部分中分配的资源。 2. 窗体单元 窗体单元文件的名称与相应的窗体名称相同。例如,about 窗体的名称叫 frmabout 。单元文件名称叫 about.pas 。 3. 数据模块单元 数据模块单元文件的名称与相应的数据模块名称相同。例如,数据模块单元的名 称叫 dmdepartment.pas。 4. 通用的单元 通用单元的名称应当表达出它的用途。例如,一个实用工具单元的名称 叫 ugutilities.pas ,包含全局变量的单元名称叫 customer
25、globals.pas 。 注意,一个项目中单元名称必须是唯一的。通用单元名不能重名。 5. 组件单元 组件单元应放在单独的路径中,以表明它们是定义组件的单元。它们一般与项目 不放在同一路径下。单元文件名称应表达出其内容。 文件头: 所有源文件和项目文件都应具有文件头。一个正确的文件头应包含以下信息: copyright year by authors b、 变量的命名 范围前缀举例 参数(argument)aaname 全局(global)ggname 实例(instance)iiname 局部(local)llname 共享(shared)ssname 系统全局变量(一般只有如下几个) 待
26、定 c、过程和函数(子程序) 子程序名应该以大写字母开头,而且应该易于阅读.下面是一个正确格式的子程序 名: procedurethisisapoorlyformattedroutinename; 下面是一个首字母适当大写的子程序名: procedurethisismuchmorereadableroutinename; 子程序名应该具有与其用途相关的含义.导致发生某动作的子程序应该以动词为 前缀命名,例如: procedureformatharddrive; 为输入参数赋值的子程序应该以set为前缀命名,例如: proceduresetusername; 取回数值的子程序应该以get为前缀命
27、名,例如: functiongetusername:string; 形参(formalparameters) 格式 在可能的情况下,同类型的形参应该在一条语句中说明: procedurefoo(param1,param2,param3:integer;param4:string); 命名 所有的形参名称应该具有与其用途相关的含义,而且不应该基于传递到子程序 的标识符名称.适当情况下,参数名应该以字符a为前缀,例如, proceduresomeproc(ausername:string;auserage:integer); 使用前缀a是一种约定,以便参数名与类的属性名、域名重复时消除歧义. 参数
28、顺序 下面的形参顺序主要是为在寄存器模式下得到更高的性能,寄存器模式是惯用的 调用模式. 调用者最常使用的参数应该在参数的最前位置,使用越少的参数,其位置应该越在 右面. d、组件实例的命名规则: 组件的名称应当具有描述性。delp h i 没有为组件指定默认的名称。单元命名 要使用一个变更了的匈牙利命名规范。在这个标准中,组件名包括两个部分:前缀和 性质标识名 例如:tlabel 前缀为 lbl, tedit 为 edt 等,具体的见附表 2-2 e、编程公用约定 1、use 字句 implementation 部分的uses子句应该只包括implementation部分中代码 需要的单元.
29、无关的单元名应该删除; 该部分应该包括类型本单元私有的类型声明, 变量声明,过程/函数 2、不要将耗费大量时间的代码放在单元的initialization部分.这将导致应 用程序启动缓慢 3、匹配的 beginend 要对齐,新的关键字相对于上一行向右移两格, begin,end 语句应该单独作为一行,例如: if . then begin end; with 的层次最好不超过三层。 4、确保你释放了在initialization部分分配的全部项目 5、任何可能的地方,所有的资源分配代码都必须以try.finally 结构保护起来 6、try.except应该只在你需要在产生意外时执行任务的情
30、况下使用.一般来 说,你不需要使用try.except来简单地显示错误信息,因为应用程序将通过 appl ication对象自动实现这一点.在except子句中,如果你希望在执行过自己 的 任务后再调用缺省的意外处理程序,应该使用raise来再次产生这个意外. f、注释和功能描述 建议在所有的源文件,工程文件,单元文件等中使用包含信息的文件头,有模 块的功能描述,参数,时间,创建人员等; 注释在函数或命令行语句的上方; 六、数据模块窗口(dm) 1、 所有数据字典下载的数据集控件都放在该数据模块窗口中,供系统统一使用。 2、 所有子窗体用到的字典数据都通过引用该窗口得到,该数据模块窗口统一由
31、专人维护。 附表: standard页面 前缀组件 mmtmainmenu pmtpopupmenu mmitmainmenuitem pmitpopupmenuitem lbltlabel edttedit memtmemo btntbutton cbtcheckbox rbtradiobutton lbtlistbox cbtcombobox scbtscrollbar gbtgroupbox rgtradiogroup pnltpanel cltcommandlist additional页面 前缀组件 bbtntbitbtn sbtspeedbutton metmaskedit sgt
32、stringgrid dgtdrawgrid imgtimage shptshape bvltbevel sbxtscrollbox clbtchecklistbox spltsplitter stxtstatictext chttchart win32页面 前缀组件 tbcttabcontrol pgctpagecontrol iltimagelist retrichedit tbrttrackbar prbtprogressbar udtupdown hkthotkey anitanimate dtptdatetimepicker tvttreeview lvtlistview hdrth
33、eadercontrol stbtstatusbar tlbttoolbar clbtcoolbar system页面 前缀组件 tmttimer pbtpaintbox mptmediaplayer olectolecontainer ddcctddeclientconv ddcitddeclientitem ddsctddeserverconv ddsitddeserveritem internet页面 前缀组件 csktclientsocket ssktserversocket wbdtwebdispatcher pptpageproducer tptquerytableproducer
34、 dstptdatasettableproducer nmdttnmdaytime nectnmecho nftnmfinger nftptnmftp nhttptnmhttp nmsgtnmmsg nmsgtnmmsgserv nntptnmnntp npoptnmpop3 nuuptnmuuprocessor smtptnmsmtp nsttnmstrm nststnmstrmserv ntmtnmtime nudptnmudp psktpowersock ngstnmgeneralserver htmlthtml urltnmurl smltsimplemail dataaccess页面
35、 前缀组件 dstdatasource tblttable qrytquery sptstoredproc dbtdatabase ssntsession bmtbatchmove usqltupdatesql datacontrols页面 前缀组件 dbgtdbgrid dbntdbnavigator dbttdbtext dbetdbedit dbmtdbmemo dbitdbimage dblbtdblistbox dbcbtdbcombobox dbchtdbcheckbox dbrgtdbradiogroup dblltdblookuplistbox dblctdblookupcom
36、bobox dbretdbrichedit dbcgtdbctrlgrid dbchtdbchart decisioncube页面 前缀组件 dcbtdecisioncube dcqtdecisionquery dcstdecisionsource dcptdecisionpivot dcgtdecisiongrid dcgrtdecisiongraph qreport页面 前缀组件 qrtquickreport qrsdtqrsubdetail qrbtqrband qrcbtqrchildband qrgtqrgroup qrltqrlabel qrttqrtext qretqrexpr
37、qrstqrsysdata qrmtqrmemo qrrttqrrichtext qrdrtqrdbrichtext qrshtqrshape qritqrimage qrditqrdbmimage qrcrtqrcompositereport qrptqrpreview qrchtqrchart dialogs页面 dialog组件是封装在组件内部的实际窗体.因此应该遵循窗体的命名约定. 类型 实例名称应该与不带数字后缀的类型实例名称相同,如下: 类型实例名称 topendialogopendialog tsavedialogsavedialog topenpicturedialogopen
38、picturedialog tsavepicturedialogsavepicturedialog tfontdialogfontdialog tcolordialogcolordialog tprintdialogprintdialog tprintsetupdialogprintersetupdialog tfinddialogfinddialog treplacedialogreplacedialog win31页面 前缀组件 dblltdblookuplist dblctdblookupcombo tsttabset oltoutline tnbttabbednotebook nbtn
39、otebook hdrtheader flbtfilelistbox dlbtdirectorylistbox dcbtdrivecombobox fcbtfiltercombobox samples页面 前缀组件 ggtgauge cgtcolorgrid spbtspinbutton spetspinedit doltdirectoryoutline caltcalendar ibeatibeventalerter activex页面 前缀组件 cfxtchartfx vsptvsspell f1btf1book vtctvtchart grptgraph midas页面 前缀组件 prv
40、tprovider cdstclientdataset qcdstqueryclientdataset dcomtdcomconnection oleetoleenterpriseconnection scktsocketconnection rmstremoteserver midtmidasconnection 第四章第四章 cicscics 开发规范开发规范 4.14.1 命名规则命名规则 .1 通用规则通用规则 本节论述的通用规则是被大多数程序员所采纳和接受的,我们应当在遵循这些共 性规则的前提下,再扩充特定的规则。 禁用系统保留字 不用使用系统的保留字来命名标识符,例
41、如不要使用 cics、exec 、begin、end 等来做标识符。 标识符应当直观且可以拼读,可望文知意,不必进行“解码” 。 标识符最好采用英文单词或其组合,便于记忆和阅读。不建议使用汉语拼音来命 名。程序中的英文单词一般不会太复杂,用词应当准确。例如不要把 currentvalue 写成 nowvalue。 标识符的长度应当符合“min-length / 变量 x 与 x 容易混淆 void foo(int x);/ 函数 foo 与 foo 容易混淆 void foo(float x); 尽量避免名字中出现数字编号,导致产生无意义的标识符,如 value1,value2 等, 除非逻辑
42、上的确需要编号。 .2 programprogram 命名命名 本节论述的 cics 中 pd 中 program 的命名规则。 program 的名称不能超过八个字符; 在 program 命名中,可用的字符为 a-z,a-z,0-9,$ and .,但是 cics 会自 动将小写字母转换成大写字母; 不要使用 cics 中的保留字,如 cics 、exec,也不要使用 cics、dfh 、erz 、faa 等作为前缀; program 的命名应应清晰准确的表达 program 的功能或用途。program 可以使用 一个或多个单词描述命名,当长度超过八个字符时,应采用宿写。
43、 例如: loaddict getrtype program 对应的文件名(包括.pc 文件、可执行文件) ,与 program 命名保持一致。 .3 函数函数/ /过程命名过程命名 函数/过程的命名应能清晰准确的描述函数/过程的功能或用途,并具可读性。函 数/过程可以使用一个或多个单词描述命名,采用“大小写”混排的方式,第一个字 母小写,其后每个单词的第一个字母要大写,其它字母小写。 例如: normalexit()、checkerror()。 函数参数的命名,除了没有 prefix 之外,其余同变量的命名方式。 .4 变量命名变量命名 变量采用匈牙利命名法,
44、同时结合 c 的原则;一般情况下,变量的取名方式为: 其中 prefix 和 basetype 都采用小写,description 由一个或多个单词组成,采 用“大小写”混排的方式,每个单词的第一个字母大写,其它字母小写。 例如: gcmodulename 定义一个 char 类型的全局变量 prefix 描述变量的使用方式,有关项目的全局变量必须用 g_开始,静态变量 s_,局部变 量可以不加前缀,也可以采用 l_用以显示说明该变量是局部变量。 前缀类型备注 g 全局变量 s 静态变量 l 局部变量 basetype 指定变量的数据类型。以下表中列出了 c 语言各种数据类型的前缀。 前缀类型
45、例子 ccharcname bboolbenable iintilength ffloatfwidth sshortsheight llonglsalary ddoubledage p*pdoc uunsigned .5 宏定义宏定义 以一个或多个有意义的单词组成; 单词全部大写; 单词之间以“_“分隔; 例如: #define max(a,b) blah #define link_success 4.24.2 程序的书写规范程序的书写规范 程序的书写规范虽然不会影响程序的功能,但会影响可读性。程序的书写应追求 清晰、美观。 .1 嵌入式嵌入式 sqlsql 的
46、书写规范的书写规范 exec sql 大写; oracle 中的关键字大写(如:select、delete 、from 等) ; sql 语句中的表名、字段名小写。 .2 空行空行 空行起着分隔程序段落的作用。空行得体(不过多也不过少)将使程序的布局更 加清晰。空行不会浪费内存,所以在程序中要适当得用空行。 在每个类声明之后、每个函数定义结束之后都要加空行。 在一个函数体内,逻揖上密切相关的语句之间不加空行,其它地方应加空行分隔。 .3 代码行代码行 一行代码只做一件事情,如只定义一个变量,或只写一条语句。这样的代码容易 阅读,并且方便于写注释。 if、for、
47、while、do 等语句自占一行,执行语句不得紧跟其后。不论执行语句 有多少都要加。这样可以防止书写失误。 尽可能在定义变量的同时初始化该变量(就近原则) 如果变量的引用处和其定义处相隔比较远,变量的初始化很容易被忘记。如果引 用了未被初始化的变量,可能会导致程序错误。例如: int width = 10; / 定义并初绐化 width int height = 10; / 定义并初绐化 height int depth = 10; / 定义并初绐化 depth .4 对齐对齐 程序的分界符和应独占一行并且位于同一列,同时与引用它们的语句 左对齐。 之内的代码块在右边数格处左对
48、齐。 每一个嵌套的函数块,使用一个 tab 缩进(可以设定为 2 个空格) 。 .5 修饰符的位置修饰符的位置 应当将修饰符 * 和 紧靠变量名,以避免引起误解。 例如: char *name; int *x, y;/ 此处 y 不会被误解为指针 .6 注释注释 c 语言的注释符为“/*/” 。注释通常用于版本版权声明、函数接口说明、重要 的代码行或段落提示。 虽然注释有助于理解代码,但注意不可过多地使用注释。 注释是对代码的“提示” ,而不是文档。程序中的注释不可喧宾夺主,注释 太多了会让人眼花缭乱。注释的花样要少。 如果代码本来就是清楚的,则不必加注释。否则
49、多此一举,令人厌烦。例如 i+; / i 加 1,多余的注释 边写代码边注释,修改代码同时修改相应的注释,以保证注释与代码的一致 性。不再有用的注释要删除。 注释应当准确、易懂,防止注释有二义性。错误的注释不但无益反而有害。 尽量避免在注释中使用缩写,特别是不常用缩写。 注释的位置应与被描述的代码相邻,可以放在代码的上方或右方,不可放在 下方。 当代码比较长,特别是有多重嵌套时,应当在一些段落的结束处加注释,便 于阅读。 4.34.3 开发注意事项开发注意事项 .1 平台支持平台支持 应该同时支持 unix 和 windows 平台。尽量不要使用与具体硬件或软件环境关系 密切的
50、函数或变量。 .2 cicscics programprogram 中禁止使用的函数中禁止使用的函数 在 cics program 中,有些函数是禁止使用的,禁用函数以及相应的替代函数如 下: 序号禁用函数替代函数 1fork()callprogram() 2excel()exec cics xctl 3system()start 4exit() normalexit()、exceptexit() .3 cicscics programprogram 中不推荐使用的函数中不推荐使用的函数 在 cics program 中,有些函数是不推荐使用的,不推荐使用函数以
51、及相应的替 代函数如下: 序号不推荐使用函数替代函数 1mallocexec cics getmain 2kill()exec cics set task purge .4 宿主变量(宿主变量(hosthost variablevariable)可用数据类型)可用数据类型 宿主变量 (host variable)可用的数据类型有: char:字符 charn:字符数组(字符串) int:整型 short: 短整型 long:长整型 float: 单精度浮点数 double:双精度浮点数 varcharn :变长字符串(n 取值为 165533) .5 数据类型兼
52、容数据类型兼容 在使用宿主变量时,应保证宿主变量与其对应的列数据类型兼容。oracle 列数 据类型与 c 数据类型的兼容情况如下: 序号oracle 列数据类型兼容的 c 数据类型 1 char、varchar char、charn、varcharn、 int、short、long、float、double 2number int、short、long、float、double、char、char n、varcharn 3date charn、varcharn 4long charn、varcharn 5raw unsigned charn、varcharn 6longraw unsigne
53、d charn、varcharn 7rowid unsigned charn、varcharn .6 charchar 数据类型的使用数据类型的使用 在 c 程序中,在计算字符串长度时,将结尾符0也包含在内。 所以, charn类型变量的定义,n 应在数据库表中的相应列长度的基础上加 1。 .7 varcharvarchar 数据类型的使用数据类型的使用 varchar 数据类型在经过 proc 预编译之后,会转换成一个结构。结构定义如下: struct unsigned short len; unsigned char arrn; 当 varchar 类型的宿
54、主变量作为输出时,oracle 会自动将返回字符串长度写入 结构中的 len 元素。 当 varchar 类型的宿主变量作为输入时,在程序中应人工设置 len 元素。 .8 统一编译选项统一编译选项 在项目组中,使用相同的 makefile 文件,统一编译开关选项。 .9 统一日期格式统一日期格式 在日期类型数据的传递与显示中,使用统一的日期格式,格式定义如下: yyyy-mm-dd yyyy-mm-dd hh24:mi:ss .10 字符集字符集 现在 oracle 数据库使用的是 zhs16gbk 字符集,双字节编码,在定义字段长度, 特别
55、是可能包含中文内容的字段时,应采用偶数位长度。 .11 防止头文件的多重包含防止头文件的多重包含 在每个头文件中进行如下定义,以防止文件的重复包含: #ifndef _filename_h_ #define _filename_h_ #endif / _filename_h_ 4.44.4 开发建议开发建议 当心那些视觉上不易分辨的操作符发生书写错误。 我们经常会把“”误写成“” ,象“|” 、 “&” 、 “=”这类符号也 很容易发生“丢 1”失误。然而编译器却不一定能自动指出这类错误。 变量(指针、数组)被创建之后应当及时把它们初始化,以防止把未被初始化的 变量当成右值使
56、用。 当心变量的初值、缺省值错误,或者精度不够。 当心数据类型转换发生错误。尽量使用显式的数据类型转换,避免让编译器进行 隐式的数据类型转换。 当心变量发生上溢或下溢,数组的下标越界。 尽量使用标准库函数,不要试图自己编写已经存在的库函数。 把编译器的选择项设置为最严格状态。 第五章第五章 数据库设计规范数据库设计规范 5.15.1 数据库中对象命名原则数据库中对象命名原则 1、数据库中各对象命名统一采用小写。 2、数据库中各对象命名中的功能描述统一采用英文或英文缩写。 3、对象名称总长度不超过 20 位。 5.25.2 数据库中对象前缀的定义数据库中对象前缀的定义 数据库中的各类对象,在命名
57、中通过附加前缀来进行,通过功能描述对对象的功 能进行比较贴切的描述。 具体的命名格式为: 前缀_功能描述 类 别前 缀备 注 表 (table) *_ 不设统一前缀,根据库表分类,给每 类库表指定一个前缀。(具体参见表 的命名规则) 视图 (view) v_ 触发器 (trigger) tr_ 存储过程 (procedure) p_ 主键 (primary key) pk_ 外键 (foreign key) fk_ 索引 (index) idx_ 序列 (sequence) seq_ 5.35.3 库表命名原则库表命名原则 库表根据功能划分为几个大类。对于每个大类,再根据实际情况,划分为几个小
58、 类。对每类库表定义一个前缀来加以标识。 对于库表分类的前缀标识,由英文缩写的前一个或几个字母组合形成。 库表命名具体格式:类别标识_功能描述_后缀 (后缀仅对于日志表而言)。 库表名称的总长度不超过 20 个字符。 在库表命名中,功能描述如果只涉及单个单词,则采用整个单词; 例如:pd_phone 电话信息表 rc_relation资源联系表 如果功能要描述两个单词,如果两个单词都比较简短,则采用整个单词,单词之 间用“_”分隔: 例如:rc_switch_board 机板表 dc_error_type错误类型表 如果涉及到的两个单词比较长,则取单词的前四个字母(或缩写)进行组合,单词 之间
59、仍用“_”分隔:。 例如:dc_prod_type 产品类别表 d_info_type信息类型对照表 原则上,应尽量避免使用三个或以上的单词作为库表的功能描述。如果遇到这样 的情况,功能描述的组成参照两个单词时的组成规则: 例如:df_bene_item_type优惠项目类型表 df_prod_pack_cont产品套餐内容表 如果该表是另一张表的日志表,则在原表名后加“_log”后缀。 例如: ws_outer_log 装机公司施工工单日志表 库表命名中,常用的英文缩写见附录。 5.45.4 库表类别划分库表类别划分 大类小类现表名前缀 原表名前缀 字典类 (dictionary) d_a
60、代码对照类(code) dc_ 收费设置类(fee) df_ 调度规则类(rule) dr_ 客户类(customer)客户资料 c_user 客户业务受理信息 (customer new) cn_b 客户业务受理旧信息 (customer old) co_tmp 客户业务受理信息备 份 cn_*_logf 客户业务受理旧信息 备份 co_*_logftmp 产品类(product)产品资料 pd_user 产品业务受理信息 (product new) pdn_b 产品业务受理旧信息 (product old) pdo_tmp 产品业务受理信息备 份 pdn_*_logf 产品业务受理旧信息
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 二零二五年度农业资源环境监测合同4篇
- 中英外债借款合同范本(2024版)
- 2025年度钢材市场调研与风险评估合同
- 2025版智慧城市交通管理系统建设合同范本4篇
- 2024河南罐头制造市场前景及投资研究报告
- 2024项目部安全管理人员安全培训考试题附答案【综合卷】
- 2024年项目部安全培训考试题【培优A卷】
- 23年-24年项目部安全管理人员安全培训考试题及答案历年考题
- 2025年大轴纸项目可行性研究报告
- 23年-24年项目部治理人员安全培训考试题含完整答案【各地真题】
- 幼儿园学习使用人民币教案教案
- 2023年浙江省绍兴市中考科学真题(解析版)
- 语言学概论全套教学课件
- 大数据与人工智能概论
- 《史记》上册注音版
- 2018年湖北省武汉市中考数学试卷含解析
- 测绘工程产品价格表汇编
- 《肾脏的结构和功能》课件
- 装饰图案设计-装饰图案的形式课件
- 护理学基础教案导尿术catheterization
- ICU护理工作流程
评论
0/150
提交评论