程序员编码规范_第1页
程序员编码规范_第2页
程序员编码规范_第3页
程序员编码规范_第4页
程序员编码规范_第5页
已阅读5页,还剩20页未读 继续免费阅读

下载本文档

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

文档简介

1、文档编号版 本 号密 级程 序 员 编 码 规 范编写校对审核批准目录一概述1二界面设计及控制12.1易用性12.2 规范性22.3帮助设施32.4合理性32.5美观与协调性52.6菜单位置62.7 独特性62.8 快捷方式的组合7三通用编码规范83.1基本要求83.2可读性要求83.3结构化要求83.4正确性与容错性要求83.5可重用性要求93.6变量命名93.7函数命名93.8控件的命名:93.9注释103.10程序113.11性能11四C+编码规范124.1常量命名和宏定义124.2其他命名规范124.3 C+ Builder编程规范13五Java编码规范175.1 命名规范175.2

2、Java文件样式185.3 注意事项21六Web应用程序编码规范216.1 网页设计216.2 JSP编码规范22 一概述本标准的制订主要是为了规范程序员的编码,提高程序员的编码质量,从而从根本上提高应用系统的质量和性能。本标准分别从应用程序的界面设计及控制、代码编制规范(通用编码规范、C+编码规范、Java编码规范)、Web应用程序编码规范三大方面阐述了程序员在程序编制过程中应该注意的问题。从而使程序员养成良好的编程习惯,编制出逻辑实现正确、处理流程清晰、可读性强、性能优良的优秀代码。二界面设计及控制界面是软件与用户交互的最直接的层,界面的好坏决定用户对软件的第一印象。而且设计良好的界面能够

3、引导用户自己完成相应的操作,起到向导的作用。同时界面如同人的面孔,具有吸引用户的直接优势。设计合理的界面能给用户带来轻松愉悦的感受和成功的感觉,相反由于界面设计的失败,让用户有挫败感,再强大的功能都可能在用户的畏惧与放弃中付诸东流。因此程序员应该提高对界面的重视程度,设计出简洁、统一、实用、方便、美观的用户界面。以下所有规则都是界面设计过程中应该注意的:2.1易用性按钮名称应该易懂,用词准确,摒弃模棱两可的字眼,要与同一界面上的其他按钮易于区分,能望文知意最好。理想的情况是用户不用查阅帮助就能知道该界面的功能并进行相关的正确操作。易用性细则:1) 完成相同或相近功能的按钮用Frame框起来,常

4、用按钮要支持快捷方式。2) 完成同一功能或任务的元素放在集中位置,减少鼠标移动的距离。3) 按功能将界面划分成局域块,用Frame框括起来,并要有功能说明或标题。4) 界面要支持键盘自动浏览功能,即按Tab键的自动切换功能。5) 界面上首先应输入的、重要信息的控件在Tab顺序中应当靠前,位置也应放在窗口上较醒目的位置。6) 同一界面上的控件数最好不要超过10个,多于10个时可以考虑使用分页界面显示。7) 同一界面上的功能数量也最好不要多于10个,过多导致使用不便。8) 分页界面要支持在页面间的快捷切换,常用组合快捷键Ctrl+Tab9) 默认按钮要支持Enter及选操作,即按Enter后自动执

5、行默认按钮对应操作。10) 可写控件检测到非法输入后应给出说明并能自动获得焦点。11) Tab键的顺序与控件排列顺序要一致,目前流行:总体从上到下,同时行间从左到右的方式。12) 复选框(CheckBox)和选项框(RadioButton)中的内容尽量按选择几率的高低而先后排列。13) 复选框(CheckBox)和选项框(RadioButton)通常要有默认选项。14) 界面空间较小时使用下拉框(ComboBox)而不用选项框。15) 选项数较少时使用选项框,相反使用下拉列表框。16) 专业性强的软件要使用相关的专业术语,通用性界面则提倡使用通用性词眼。2.2 规范性通常界面设计都按Windo

6、ws界面的规范来设计,即包含“菜单条、工具栏、工具箱、状态栏、滚动条、右键快捷菜单”的标准格式,可以说:界面遵循规范化的程度越高,则易用性相应的就越好。小型软件一般不提供工具箱。规范性细则:1) 常用菜单要有命令快捷方式。2) 完成相同或相近功能的菜单用横线隔开放在同一位置。3) 菜单前的图标能直观的代表要完成的操作。4) 菜单深度一般要求最多控制在三层以内。5) 大型软件一般工具栏要求可以根据用户的要求自己选择定制。6) 相同或相近功能的工具按钮放在一起。7) 工具栏中的每一个按钮要有及时提示信息。8) 一条工具栏的长度最长不能超出屏幕宽度。9) 工具栏太多时可以考虑使用工具箱。10) 工具

7、箱要具有可增减性,由用户自己根据需求定制。11) 工具箱的默认总宽度不要超过屏幕宽度的1/5。12) 状态条要能显示用户切实需要的信息,常用的有:目前的操作、系统状态、用户位置、用户信息、提示信息、错误信息等,如果某一操作需要的时间较长,还应该显示进度条和进程提示。13) 状态条的高度以放置五号字为宜,滚动条的宽度比状态条的略窄。14) 右键快捷菜单采用与菜单相同的准则,且右键快捷菜单在对话框中不应出现。2.3帮助设施系统应该提供详尽而可靠的帮助文档,在用户使用产生迷惑时可以自己寻求解决方法。帮助设施细则:1) 操作时要提供及时调用系统帮助的功能。常用F1。2) 在界面上调用帮助时应该能够及时

8、定位到与该操作相对应的帮助位置。也就是说帮助要有即时针对性。3) 最好提供目前流行的联机帮助格式或HTML帮助格式。4) 用户可以用关键词在帮助索引中搜索所要的帮助,当然也应该提供帮助主题词。5) 打包新系统时,对作了修改的地方在帮助文档中要做相应的修改。6) 在帮助中应该提供我们的技术支持方式,一旦用户难以自己解决可以方便的寻求专业系统维护人员的帮助。2.4合理性屏幕对角线相交的位置是用户直视的地方,正上方四分之一处为易吸引用户注意力的位置,在放置窗体时要注意利用这两个位置。合理性细则:1) 父窗体或主窗体的中心位置应该在对角线焦点附近。即采取屏幕居中。2) 子窗体位置应该在主窗体的左上角或

9、正中。3) 多个子窗体弹出时应该依次向右下方偏移,以显示出窗体标题为宜。4) 重要的命令按钮与使用较频繁的按钮要放在界面上较注目的位置。5) 与正在进行的操作无关的按钮应该加以屏蔽(Windows中用灰色显示,没法使用该按钮)。6) 对可能造成数据无法恢复的操作必须提供确认信息,给用户放弃选择的机会。并且将按钮的缺省焦点置在“取消”按钮上。7) 非法的输入或操作应有足够的提示说明。8) 对运行过程中出现问题而引起错误的地方要有提示,让用户明白错误出处,避免形成无限期的等待。9) 提示、警告、或错误说明应该清楚、明了、恰当。10) 对于需要执行长时间的操作,必须使用进度条,让用户了解进展情况,避

10、免使用户误解为死机。11) 对于下拉框(ComboBox),如果不允许用户输入,则应将该控件的Style属性设为csDropDownList,使用户只能选择。12) 当下拉框(ComboBox)允许用户不选择任何选项时,不应显示一个空的选项,应使用文字描述,如“请选择”等。13) 对于文本框(TextBox)一般需要根据其对应的数据库字段的类型以及长度来限制用户允许输入的字符和长度。14) 对于ListView以Report形式(ViewStyle属性=vsReport)显示数据,一般要求实现列排序,如果由于特殊原因不实现列排序,需要将ListView的ColumnClick属性设为false

11、,屏蔽列点击的效果。15) 对于数据录入界面,重点考虑如何提高用户的录入速度。例如界面中有“身份证号”和“出生日期”,当用户输入了一个合法的身份证号后,系统应该自动根据身份证号将出生日期提取出来并填入“出生日期”控件中。16) 系统的提示框样式应统一,即使用标准的Windows提示框,其中包括标题、图标、提示语和功能按钮。图标使用要规范,要根据提示信息的性质选择不同的图标,而且除非严重的错误,一般不使用“X”图标,以免使用户产生畏惧心理。 17) 如果系统中需要经常录入一些重复数据,应考虑将其提取出来,让用户进行一次配置,然后系统自动根据配置完成该信息的录入。例如:系统有登记企业信息的功能,其

12、中企业信息包括该企业所在的省、市、区,由于该系统安装到某个市级单位后,所登记企业的所在省、市都是确定的,让用户每次登记时都重复选择省、市将给用户带来很大的不便。应该由用户在系统初始化时设置好缺省的省、市,在企业登记时只要选择该企业所在的区即可,这样就提高了用户的登记效率。18) 对于输入型控件禁止为其指定输入法,因为用户机器很有可能没有安装指定的输入法。由于安装Office XP等软件后,C+ Builder会自动为输入型控件指定输入法,所以一定要注意并确定输入型控件没有指定输入法。19) 窗体显示后,缺省的焦点应该设在最合理的控件上,方便用户操作。20) 在判断输入框的值是否为空或存储输入值

13、时,应利用Trim()方法去掉输入值两端的空格,然后再判断。这样可以避免产生数据存储值(SQL Server会自动将结尾的空格删除)和用户输入值不相同的情况。21) 界面在设计上要体现易用性和引导性,尽量让用户可以独立、顺利的完成指定的操作,必要时要提供文字信息说明该界面的操作方式以及注意事项。2.5美观与协调性界面大小应该适合美学观点,感觉协调舒适,能在有效的范围内吸引用户的注意力。美观与协调性细则:1) 长宽接近黄金点比例(宽高比为4:3),切忌长宽比例失调。2) 布局要合理,不宜过于密集,也不能过于空旷,合理的利用空间。3) 按钮大小基本相近,忌用太长的名称,免得占用过多的界面位置,要与

14、界面的大小和空间协调。4) 避免空旷的界面上放置很大的按钮。5) 放置完控件后界面不应有很大的空缺位置。6) 字体的大小要与界面的大小比例协调, 通常使用的字体中,宋体9-12较为美观,很少使用超过12号的字体。建议使用宋体9号字。7) 前景与背景色搭配合理协调,反差不宜太大,最好少用深色,如大红、大绿等。常用色考虑使用Windows界面色调。8) 如果使用其他颜色,主色要柔和,具有亲和力与磁力,坚决杜绝刺目的颜色。9) 大型系统常用的主色有#E1E1E1、#EFEFEF、#C0C0C0等。10) 界面风格要保持一致,字的大小、颜色、字体要相同,除非是需要艺术处理或有特殊要求的地方。11) 如

15、果窗体支持最小化和最大化或放大时,窗体上的控件也要随着窗体而缩放;切忌只放大窗体而忽略控件的缩放。对于窗体中包含ListView、TreeView、DBGrid、StringGrid等控件,必须支持最大化,使用户能够尽量多的获得信息。12) 如果能给用户提供自定义界面风格则更好,由用户自己选择颜色、字体等。2.6菜单位置菜单是界面上最重要的元素,菜单位置按照按功能来组织。菜单设测试细则:1) 菜单通常采用“常用-主要-次要-工具-帮助”的位置排列,符合流行的Windows风格。2) 常用的有“文件”、“编辑”,“查看”等,几乎每个系统都有这些选项,当然要根据不同的系统有所取舍。3) 下拉菜单要

16、根据菜单选项的含义进行分组,并且按照一定的规则进行排列,用横线隔开。4) 一组菜单的使用有先后要求或有向导作用时,应该按先后次序排列。5) 没有顺序要求的菜单项按使用频率和重要性排列,常用的放在开头, 不常用的靠后放置;重要的放在开头,次要的放在后边。6) 如果菜单选项较多,应该采用加长菜单的长度而减少深度的原则排列。7) 对常用的菜单要有快捷命令方式,组合原则见2.8。8) 对与进行的操作无关的菜单要用屏蔽的方式(Enabledfalse)加以处理,如果采用动态加载方式(即只有需要的菜单才显示)最好。9) 菜单前的图标不宜太大,与字高保持一致最好。10) 主菜单的宽度要接近,字数不应多于四个

17、,每个菜单的字数能相同最好。11) 主菜单数目不应太多,最好为单排布置。2.7 独特性如果一味的遵循业界的界面标准,则会丧失自己的个性.在框架符合以上规范的情况下,设计具有自己独特风格的界面尤为重要。尤其在商业软件流通中有着很好的潜移默化的广告效用。1) 安装界面上应有单位介绍或产品介绍,并有自己的图标。2) 主界面(最好是大多数界面)上要有公司图标,但要根据产品性质和要求而定。3) 登录界面(程序启动前的Logo)上要有本产品的标志,同时包含公司图标。4) 帮助菜单的“关于”中应有版权和产品信息。5) 公司的系列产品要保持一致的界面风格,如背景色、字体、菜单排列方式、图标、安装过程、按钮用语

18、等应该大体一致。2.8 快捷方式的组合在菜单及按钮中使用快捷键可以让喜欢使用键盘的用户操作得更快一些,在西文Windows及其应用软件中快捷键的使用大多是一致的。菜单中:1) 面向事务的组合有:组合键Ctrl-DCtrl-FCtrl HCtrl-ICtrl-NCtrl-SCtrl-O功能删除寻找替换插入新记录保存打开2) 编辑:组合键Ctrl-ACtrl-CCtrl-VCtrl-XCtrl-ZCtrl-Y功能全选拷贝粘贴剪切撤消操作恢复操作3) 文件操作:组合键Ctrl-PCtrl-W功能打印关闭4) 系统菜单组合键Alt-FAlt-EAlt-TAltWAltH功能文件编辑工具窗口帮助5) M

19、S Windows保留键:组合键Ctrl-EscCtrl-F4Alt-F4Alt-TabEnterEscShift-F1功能任务列表关闭窗口结束应用下一应用缺省按钮/确认操作取消按钮/取消操作上下文相关帮助6) 按钮中:(可以根据系统需要而调节,以下只是常用的组合。)组合键Alt-YAlt-CAlt-NAlt-DAlt-QAlt-AAlt-EAlt-BAlt-RAlt-W功能确定(是)取消否删除退出添加编辑浏览读写这些快捷键也可以作为开发中文应用软件的标准,但亦可使用汉语拼音的开头字母。三通用编码规范无论用何种编程语言,都应该养成良好的编码习惯,好的编码习惯可以大大提高程序代码的可读性、帮助程

20、序员理清编程思路、提高程序的执行效率。从而从根本上提高系统质量。3.1基本要求l 程序结构清晰,简单易懂,单个函数的行数尽量不超过100行。l 尽量使用标准库函数和公共函数,从而使代码精简,避免垃圾程序。l 禁止随意定义全局变量,尽量使用局部变量。l 使用括号以避免二义性。3.2可读性要求l 尽量作到可读性第一,书写效率第二。l 代码要有整齐的缩进,可以用Tab或空格,一般为2个或4个空格。l 每个源程序文件及函数,都有相应的说明,说明规范见3.9中的说明。l 主要变量(结构、类或对象)定义应有注释说明,注释能反映其含义。l 常量定义(DEFINE)有相应说明。l 处理过程的每个阶段都有相关注

21、释说明。l 在典型算法前都有注释。l 循环、分支层次不能超过五层。3.3结构化要求l 禁止出现两条等价的支路。l 少用或不用GOTO语句。l 用 CASE 实现多路分支。l 避免不必要的分支。3.4正确性与容错性要求l 所有变量在调用前必须被初始化。l 修改一个错误时可能产生新的错误,因此在修改前首先考虑对其它程序的影响。l 对所有的用户输入,必须进行合法性检查。l 为避免不可靠,不要比较浮点数的相等,如: 10.0 * 0.1 = = 1.0 l 程序与环境或硬件发生联系时,必须主动去处理发生的意外事件,如文件能否逻辑锁定、打印机是否联机等。l 用Insert语句向数据库中增加记录时,要遵循

22、如下格式:insert into 表名 (字段名列表) values (字段对应值列表),不要省略“字段名列表”,这样如果日后该表增加了可以为空的字段,程序不用修改就可以适应该变化。l 单元测试也是编程的一部分,提交联调测试的程序必须首先通过单元测试。3.5可重用性要求l 重复使用的完成相对独立功能的算法或代码应抽象为公共控件、函数或类。l 公共控件或类应考虑OO(面向对象)思想,减少外界联系,考虑独立性或封装性。l 公共控件或类应建立使用模板。3.6变量命名命名必须具有一定的实际意义,形式为xAbcFgh。其中,x由变量类型确定(常用的x取值参见下表),Abc、Fgh表示连续意义字符串,如果

23、连续意义字符串仅两个,可都大写,如OK。变量类型x值bytebshortshwordwintIlonglfloatfdoubledstringscharcboolbl指针p局部变量中可采用如下几个通用变量:xTemp,xResult,i、j(一般用于循环变量),x、y(一般表示坐标)。3.7函数命名第一个字母必须使用大写字母,要求用大小写字母组合的方式来规范函数命名,必要时可用下划线间隔,示例如下:void ImportantPoint (void); /Module Name :r01/sdw.cvoid ShowChar (int , int , chtype); /Local Modul

24、evoid ScrollUp_V (int , int); /Local Module3.8控件的命名:可以用小写前缀表示类别,如下所示。但由于有些开发工具提供的控件较多(如C+Builder、Delphi等),要定义和识别前缀比较困难,因此也可以使用其缺省的名称。frm 窗口cmd 按钮cmb combo,下拉式列表框txt 文本输入框lab labal,标签img image,图象pic picturegrd Grid,网格scr 滚动条lst 列表框3.9注释l 原则上注释要求使用中文;有困难时可以使用英文。l 文件开始的注释内容包括:公司名称、版权、作者名称、时间、模块用途、背景介绍等

25、,复杂的算法需要加上流程说明;l 函数注释包括:输入、输出、函数描述、流程处理、全局变量、调用样例等,复杂的函数需要加上变量用途说明;l 程序中的注释包括:修改时间和作者、方便理解的注释等; 引用一: 文件开头的注释模板/* 文件名:* Copyright (c) 1998-1999 *公司技术开发部* 创建人:* 日 期:* 修改人:* 日 期:* 描 述:* 版 本:*-*/ 引用二: 函数开头的注释模板/* 函数名:* 输 入: a,b,c* a-* b-* c-* 输 出: x-* x 为 1, 表示.* x 为 0, 表示.* 功能描述:* 全局变量:* 调用模块:* 作 者:* 日

26、 期:* 修 改:* 日 期:* 版本*/ 引用三: 程序中的注释模板/*-*/* 注释内容 */*-*/3.10程序l 程序编码力求简洁,结构清晰,避免太多的分支结构及太过于技巧性的程序,尽量不采用递归模式。l 编写程序时,亦必须想好测试的方法,换句话说,”单元测试” 的测试方案应在程序编写时一并拟好。注释一定要与程序一致。l 版本封存以后的修改一定要将旧语句用/* */ 封闭,不允许自行删除或修改,并要在文件及函数的修改记录中加以记录。l 程序中每个block 的 ” 必须对齐,嵌套的block 每进一层,缩进一个TAB,TAB 为2或4个空格,对于比较大的函数,每个block 和特殊的函

27、数调用,都必须注明其功能。l 在SQL语句中对字段的赋值采用“参数”的方式,这样可以避免产生一些意外的错误。l 保证程序申请的内存空间在程序结束时可以被明确的释放。并且尽量少的动态创建和释放内存,对于经常要创建的内存可以用全局变量定义和创建。l 保证程序中对任何可能产生的异常进行捕获和处理,对重要的错误信息最好生成错误日志,以备日后维护。3.11性能在写代码的时候,从头至尾都应该考虑性能问题。这不是说时间都应该浪费在优化代码上,而是我们时刻应该提醒自己要注意代码的效率。如果没有时间来实现一个高效的算法,那么我们应该在文档中记录下来,以便在以后有空的时候再来实现她。经常要考虑的性能问题包括:l

28、尽量减少数据库操作的次数。l 对从数据库查询并显示大量数据时,一定用分页的方式实现。l 查询数据时不要用“select *”,需要哪些字段就列出哪些字段。l 对于复杂的、在一个事务中进行多步数据库操作的,应该使用存储过程。l 对于要判断数据表中是否存在符合条件的数据时,不要用“select 字段名 from 表名 where 条件”,而是要用“select top 1字段名 from 表名 where 条件”。l 从数据库中查询数据时,SQL语句中尽量包含主键或索引字段,这样会提高查询速度。l 线程中一定要在每次循环结束后休眠一定的时间,避免CPU负荷过重。l 如果用C+ Builder或De

29、lphi编程,对于ComboBox、ListView、TreeView等控件,在填充数据时,如果在后面的程序中需要取出每个数据项对应的唯一标识(通常为数据表中的主键字段的值),则要用AddObject方法填充数据或用Data属性存储唯一标识。这样就避免了再次查询数据库来得到唯一标识,由于“描述”有可能重复,所以通过“描述”查“标识”完全不可取。l 窗体的初始化工作在Create事件中进行,界面的调整在Show事件中进行。若Create事件耗时很长,建议显示动画等待窗口,变量的初始化工作在窗体的构造函数或Create事件中进行。四C+编码规范在编写C+程序时,除了要遵守“通用编码规范”中的所有条

30、目外,还需要注意下述几个方面。4.1常量命名和宏定义常量和宏定义必须具有一定的实际意义;常量和宏定义在#include和函数定义之间。常量和宏定义必须全部以大写字母来撰写,中间可根据意义的连续性用下划线连接,每一条定义的右侧必须有一简单的注释,说明其作用。4.2其他命名规范l 类的命名规则:T类的名称(类名称的第一个字母大写),如:class TOper;l 结构的命名规则:S结构的名称(结构名称的第一个字母大写),如:struct SOper;l 指针的命名规则:p指针名称(指针名称第一个字母大写),如:TMemoryStream * pStream;4.3 C+ Builder编程规范由于

31、C+ Builder集成开发环境中提供了许多控件,因此对控件的使用应该有一定的规范,下面简单说明常用控件的使用规范。l TDatabase控件控制与数据库的连接使用时需要配置的几个参数DATABASE NAME:数据库名称SERVER NAME:服务器名称USER NAME:用户名PASSWORD:密码Login prompt:当程序连接数据库时需不需要进行登陆通常不选中Keep inactive Connection:没有数据集打开是否保持与数据库的连接通常选中l TQuery控件 执行SQL语句当SQL语句执行Insert,Update,Delete操作时,使用ExecSQL函数执行;当S

32、QL语句执行Select操作时,使用Open函数执行例如:返回结果集合Query-Close();Query-SQL-Clear();Query-SQL-Add(select opernum from operinfo ); try Query-Open(); while ( !Query-Eof ) 读取结果集中的数据Query-Next(); Query-Close(); catch() 数据读取出错处理 返回结果集合Query-Close();Query-SQL-Clear();Query-SQL-Add(delete operinfo where opernum=:opernum );

33、 try Query-ParamByName(“opernum”)-AsInteger = 1;Query-ExecSQL(); catch() 数据读取出错处理 强烈建议:在SQL语句中对字段的赋值采用“参数”的方式,这样可以避免产生一些意外的错误。例如某个字段类型为字符型,SQL语句中有”where fieldname=”+sFieldValue+”的语句,如果sFieldValue的值中包含“ ”,如aabb,则最终提交给SQL服务器的SQL语句为:where fieldname=aabb,执行SQL语句时将会产生异常。l TStoredProc控件a) 指定存储过程名:StoredPr

34、oc-StoredProcName = systemlogin;b) 创建参数: /输入参数是整型 StoredProc-Params-CreateParam( ftInteger, cscno, ptInput ); /输入参数是字符型 StoredProc-Params-CreateParam( ftString, cscname1, ptInput ); /输入参数是浮点型 StoredProc-Params-CreateParam( ftFloat, money, ptInput ); /输出参数是整型 StoredProc-Params-CreateParam( ftInteger,

35、 csnum, ptOutput ); /存储过程固定的结果参数 StoredProc-Params-CreateParam( ftInteger, Result, ptResult );c) 执行: 当存储过程返回结果集合时,用Open执行 当存储过程返回输出参数时,用ExecProc执行d) 注意: 创建参数时参数顺序必须与存储过程中的参数顺序一致 当输入参数有默认值时,可以不给此参数赋值,否则必须赋值例如:StoredProc-Close();StoredProc-Params-Clear();StoredProc-StoredProcName = systemlogin;StoredP

36、roc-Params-CreateParam( ftInteger, cscno, ptInput );StoredProc-Params-CreateParam( ftInteger, csnum, ptInput );StoredProc-Params-CreateParam( ftInteger, faxno, ptOutput );StoredProc-Params-CreateParam( ftInteger, Result, ptResult );StoredProc-ParamByName( cscno )-AsInteger = iCscNo;StoredProc-ParamB

37、yName( csnum )-AsInteger = iCsnum;tryStoredProc-ExecProc();int result = StoredProc-ParamByName( Result )-AsInteger; 根据result参数的不同,作不同处理catch(.)出错处理l 服务端控件TServerSocket 常用的参数Port:侦听端口号Active:确定套接字是否打开,其它计算机是否可与之连接 常用的事件 OnAccept事件:当一个客户端的连接被接受时产生该事件void _fastcall TCPS:ServerAccept(TObject *Sender, TC

38、ustomWinSocket *Socket) intSocketHandle = Socket-SocketHandle;/得到Socket句柄 /进行一些相关处理 OnClientDisconnect事件:当用户连接关闭时产生该事件void _fastcall TCPS:ServerClientDisconnect(TObject *Sender, TCustomWinSocket *Socket) int SocketHandle = Socket-SocketHandle;/得到Socket句柄 /进行一些相关处理 OnClientError事件:当建立,使用或断开与客户端的连接失败时

39、产生该事件void _fastcall TCPS:ServerClientError(TObject *Sender, TCustomWinSocket *Socket, TErrorEvent ErrorEvent, int &ErrorCode) ErrorCode = 0;/不产生系统的错误提示 /进行一些相关处理 OnClientRead事件:当服务端从客户端读取信息时产生该事件void _fastcall TCPS:ServerClientRead(TObject *Sender, TCustomWinSocket *Socket)unsigned char buf8200; int

40、 len; len = Socket-ReceiveLength(); if ( len 8192 ) len = 8192; Socket-ReceiveBuf( buf, len );l 客户端控件TClientSocket常用的参数Active:确定套接字是否打开,是否可以进行信息传送Address:服务端的IP地址Host:服务端IP地址的别名Port:侦听端口号 常用的事件 OnConnect事件:连接成功产生该事件void _fastcall TCPS:ClientConnect(TObject *Sender, TCustomWinSocket *Socket) /进行一些相关处

41、理 OnDisconnect事件:在关闭一个连接前产生该事件void _fastcall TCPS:ClientDisconnect(TObject *Sender, TCustomWinSocket *Socket) /进行一些相关处理 OnError事件:套接字在建立,使用或关闭时出错产生该事件void _fastcall TCPS:ClientError(TObject *Sender, TCustomWinSocket *Socket, TErrorEvent ErrorEvent, int &ErrorCode) ErrorCode = 0; /不产生系统的错误提示 /进行一些相关处

42、理 OnRead事件:当服务端有数据到达时产生该事件void _fastcall TCPS:ClientRead(TObject *Sender, TCustomWinSocket *Socket) /进行一些相关处理l 线程使用规范() 建立新的线程在File菜单中单击New选项,出现New Items对话框选择Thread Object图标,单击OK按钮在提示框输入新线程的类名,就建立了一个新的线程() 主要属性 FreeOnTerminate:是否在线程结束时自动删除通常设为true Terminated:确定线程是否结束() 方法 Execute:线程的执行体,将要执行的代码写在此函数

43、中 Resume:恢复线程的执行 Suspend:挂起线程的执行 Synchronize:与主窗体同步,在线程内访问VCL() 解决多线程间的资源冲突 临界:当一个线程访问一个数据时,阻止其它线程访问这个数据使用方法: 定义变量:TRTLCriticalSection Sect1; /应用程序级全局变量初始化临界量:InitializeCriticalSection(&Sect1); /在主窗体的OnCreate事件中临界部分:EnterCriticalSection(&Sect1); /临界部分进入活动状态 /处理过程 LeaveCriticalSection(&Sect1); /临界部分进

44、入休眠状态 互斥量:不仅可以同步一个进程中的多个线程,还同步多个进程使用方法:/在主窗体的OnCreate事件中定义变量:HANDLE mutex1; /应用程序级全局变量创建互斥量:mutex1=CreateMutex(NULL, false, NULL); 互斥部分:if(WaitForSingleObject( mutex1,100 )= =WAIT_TIMEOUT) /等待100毫秒,没有得到互斥量 return; /处理过程 ReleaseMutex( mutex1); /释放互斥量五Java编码规范在编写Java程序时,除了要遵守“通用编码规范”中的所有条目外,还需要注意下述几个方

45、面。5.1 命名规范 Package 的命名Package 的名字应该都是由一个小写单词组成。 Class 的命名Class 的名字必须由大写字母开头的单词组成 Static Final 变量的命名Static Final 变量的名字应该都大写,并且指出完整含义。 参数的命名参数的名字必须和变量的命名规范一致。 数组的命名数组应该统一用下面的方式来命名: byte buffer; 而不是:byte buffer; 方法的参数使用有意义的参数命名,如果可能的话,使用和要赋值的字段一样的名字: SetCounter(int size) this.size = size;5.2 Java文件样式所有

46、的 Java(*.java) 文件都必须遵守如下的样式规则 版权信息版权信息必须在 java 文件的开头,比如: /* * Copyright ?2000 Shanghai XXX Co. Ltd. * All right reserved. */ Package/Importspackage 行要在 import 行之前,import 中标准的包名要在本地的包名之前。如果 import 行中包含了同一个包中的不同子目录,则应该用 * 来处理。 package .stats;import java.io.*;import java.util.Observable;impo

47、rt hotlava.util.Application; 这里 java.io.* 使用来代替InputStream and OutputStream 的。 Class接下来的是类的注释,一般是用来解释类的。 /* * A class representing a set of packet and byte counters * It is observable to allow it to be watched, but only * reports changes when the current set is complete */ 接下来是类定义,包含了在不同的行的 extends

48、和 implements public class CounterSet extends Observable implements Cloneable Class Fields接下来是类的成员变量: /* * Packet counters */protected int packets;public 的成员变量必须生成文档(JavaDoc)。proceted、private和 package 定义的成员变量如果名字含义明确的话,可以没有注释。 存取方法接下来是类变量的存取的方法。它只是简单的用来将类的变量赋值获取值的话,可以简单的写在一行上。 /* * Get the counters *

49、 return an array containing the statistical data. This array has been * freshly allocated and can be modified by the caller. */public int getPackets() return copyArray(packets, offset); public int getBytes() return copyArray(bytes, offset); public int getPackets() return packets; public void setPackets(int packets) this.packets = packets; 其它的方法不要写在一行上 构造函数接下来是构造函数,它应该用递增的方式写(比如:参数多的写在后面)。 public CounterSet(int size) this.size = size; 克隆方法如果这个类是可以被克隆的,那么下一步就是 clone 方法: public Object clone() try CounterSet obj = (CounterSet)super.clone(); obj.packe

温馨提示

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

评论

0/150

提交评论