`
isiqi
  • 浏览: 16593245 次
  • 性别: Icon_minigender_1
  • 来自: 济南
社区版块
存档分类
最新评论

[C++] 一个真实的 C++ Builder 系统编码规范文档

阅读更多

GT80前端程序设计规范(草)
一.界面规范。

1.原则:
.朴实、简洁、统一、实用、方便。

2.屏幕分辨率:
统一为800*600。

3.窗体:
.不支持最大化和最小化,不支持大小改变
(BorderStyle为bsDialog或bsSingle)
.位置一般居中,或用代码实现居中。
.在用户操作过程中弹出的选择表单的位置应以当前焦点为准,
以避免用户视觉焦点的大幅度转移。

3.颜色:
.除特殊情况外,一屏的颜色尽量不要超过三种,
.多使用clBlack,clNacy,clTeal,clGray等冷色,
.少使用clRed,clGreen,clBlue,clYellow等暖色,
(以减少对使用者视觉的刺激)
.Button等标准控件的颜色使用系统颜色。

4.字体:
.尽量使用宋体12号标准字体(中文及英文),及TimesNew
Roman字体(英文、数字)。
.少使用加粗、倾斜、下划线等字体。

4.帮助:
.尽量不要在屏幕上出现繁杂的操作说明,多使用Help按钮调出详
细的操作说明或使用控件的Hint和ShowHint属性。

5.热键:
F1----帮助
F2----确认、存盘
F4----修改
F8----打印
F9----重录,重输,下一笔
PgUp----多页间的向前翻页
PgDn----多页间的向后翻页
Esc----退出,放弃

其余功能键用于机动,尽量使一屏的功能热键相互之间在键盘上至少
相隔一个键或在不同的区域,如使用:F2、F4、F5、F8、F9键。

6.键盘支持:
.前台所有功能、后台常用功能以及对用户的输入要求实时响应的功
能应全面支持键盘,输入、选择控件间焦点的移动必须至少支持回
车、上下箭头,若需要对输入响应的复杂表单,响应代码应写在
KeyDown、Change等事件中,同时不允许Tab,Shift-Tab的焦点移
动。若各控件横向排列,也可支持左右箭头键的移动(Edit的左右
箭头键亦可实现,具体参见[前台|业务查询|实时委托查询]的源代
码)。
.Page控件的翻页必须支持PgUp和PgDn键。若焦点在ListView、
StringGrid等控件时,必须支持Alt--PgUp、Alt—PgDn的翻页。
.多页查询的结果不能因为翻页而丢失,任一页的重新查询必须用F9
等热键或鼠标进行。
.只支持键盘的表单应进入前应使用InitCursor()函数屏蔽鼠标,退
出后使用RestoreCursor()函数恢复鼠标。或者程序中进行相应的
检查,避免用户使用鼠标造成程序异常或误操作。

7.焦点控制:
.表单在任何情况下均不能出现焦点丢失的现象
.焦点的移动以业务规范、屏幕布局为依据,总的原则是让用户感到
方便、快捷。
.当焦点在ListView,ListBox,CheckListBox等控件中时,至少应
选中控件中一行,并且退出控件时选中的行在重新进入控件时应亦被
选中。

8.查询结果的显示:

.数量固定的查询结果可使用Label、StaticText等显示(注意对齐、
间距)。
.数量动态的查询结果可使用ListView,StringGrid等显示:
ListView->编码简单,但对大数据量结果显示速度慢
StringGrid->编码复杂,但适用于大数据量的查询

-尽量让控件占据较多屏幕空间,不要使其出现横向滚动条。
-查询结果出来后,焦点应移至结果控件中,除非用户使用鼠标或
热键,否则不得使结果控件丢失焦点(譬如当结果控件的第一行选
中时按上箭头键将焦点移至最后一个条件输入控件,当结果控件
的最后第一行选中时按下箭头键将焦点移至打印按钮等做法都是
错误的)。
-多页的查询结果不能因页间的切换而丢失,即当某一页的查询结
果出来后,用户切换至另一页,再切换回本页,此页的查询结果
应依然显示。
-多页的查询结果都出现后,当用户再次切换至本页时,若有查询
果,结果控件应得到焦点,若无查询结果,焦点应保持原地或移
至第一个条件输入控件。
- 对查询结果有逻辑上的上限时,可不限制结果行数,如证券余额、资金余额、股民基本资料浏览等),对逻辑上无上限的查询,
如历史查询等,应规定一个行数上限(如1000条),避免后端负
荷过重或前端速度缓慢死机等。原则上不再象GT7.0那样支持翻
页。

多页查询的实例参见[前台|业务查询|历史对帐查询]。

9.对特定控件的控制
.ComboBox
- 处于非下拉状态时,按下箭头键下拉
- 空格键切换下拉状态
- 回车键选中退出

.EditBox
- 上箭头键焦点移至上一控件
- 下箭头键、回车焦点移至下一控件
-控件横向排列时,可支持左右箭头键的焦点移动
.ListView
-选中某一行按回车或鼠标双击表示选中

二.编码规范。

1.原则:
书写简单、意义明了、查找方便。尽量使用拼音简写(若英文不复
杂也可使用英文)或拼音与英文的混合。
如:
ed_khzl->输入客户资料的Edit
bn_ensure->确认Button
cb_market->选择市场的ComboBox
ZHZJ_AccessFund->客户、资金管理的资金存取模块的单元文件
f_WTGL_BulkWT->委托管理的批量委托表单

2.单元文件命名:
普通规则—所属子模块名_单元名
公用单元–G_单元名

所属子模块名全部大写、单元名大小写混合

如:ZHZJ_AddACC->客户资金管理的客户开户资金存取模块
YYCX_SswtCx->营业查询的实时委托查询模块
G_Comm->Comm单元
G_GetAccount->输入客户资料通用单元

3.表单命名:
普通规则—f_所属子模块名_单元名(f_单元文件名)
公用单元–f_G_单元名

所属子模块名全部大写、单元名大小写混合

如:f_ZHZJ_AddACC->客户资金管理的客户开户资金存取模块表单
f_YYCX_SswtCx->营业查询的实时委托查询模块表单
f_G_GetAccount->输入客户资料通用表单


4.控件命名:
规则:全部小写

控件前缀
Button,BitBtn->bn_
Edit,MaskEdit,MultiMaskEdit->ed_
Label->l_
StaticText->st_
Menu,PopMenu->m_
Memo->mo_
CheckBox,ComboBox,CheckListBox->cb_
RadioBox->rb_
ListBox->lb_
GroupBox->gb_
RadioGroup->rg_
Panel->pn_
StringGrid,TWStringGrid->sg_
ListView,TWListView->lv_
Image->img_
TabControl->tab_
PageControl->pg_
ImageList->imgl_
ProgressBar->pb_
Animate->am_
TreeView->tv_
StatusBar->sb_
Timer->ti_
CGauge->cg_
OpenDialog->od_
PrintDialog->pd_

代码中不涉及的控件,如提示性的Label,可使用系统缺省的名字,
如Label1,Label2…表单中只有一个的控件,如Animate,可只使
用前缀(去掉下划线),如am,其余的控件,必须使用[前缀+有意
义的后缀名字]来命名。
对多页中的控件,每一页中的控件,最好以[前缀+TabControl后缀
名字+有意义的后缀名字]来命名,以避免和其他页面上的控件混淆

5.表单设计:
.所有非主表单均采用New()创建,用ShowModal()显示,用
Cancel属性为True,ModalResutl为非mrNone的退出Buttuon
退出(热键Esc)或写代码Close()退出,建议使用前者。用
Delete()删除。
.表单的初始化工作在Create、Show事件中进行,总的原则是界面
的调整在Show中,SQL调用、其余非可视化控件的创建在Create
中。若SQL调用耗时很长,建议显示动画等待窗口(参见前台的
f_Anmi_Wait和f_JG_SingleJg表单)。变量的初始化工作在表单
的构造函数或Create事件中进行。
.在表单的Create事件中用New()创建的非可视化控件在Destory事
件中用Delete()删除。
.建议在表单给出一Public成员NeedShow(int或Bool),用以判断
表单是否应该显示。例如:若在Create中的SQL调用出错,则显
示信息框,并置NeedShow为0后False,表示表单不应显示。
.表单信息的传入使用重载表单的构造函数或全局变量进行
表单信息的传出使用表单的Public成员或全局变量进行
建议均使用前者。



一个典型的菜单代码(表单创建、显示、删除)如下:


Tf_Example_Form*form=newTf_Example_Form(Application);

if(form->NeedShow)
form->ShowModal();

deleteform;

一个典型的信息传入传出代码如下:

//使用ed_zqdm输入的证券拼音简写让用户选择此简写的证券

#defineSHENZHEN0

intmarket=SHENZHEN;
TstringList*zqdm_list=newTstringList();

AnsiStringpy=ed_zqdm->Text.Trim();
AnsiStringzqdm;

GetZqpy(market,py,zqdm_list);

if(zqdm_list->Count==0){
ShowMessage(“NoSuchZqpy!”);
return;
}
elseif(zqdm_list->Count==1)
zqdm=zqdm_list->Strings[0];
else{

Tf_SeleZqdmByPy*form;
//利用构造函数传入信息
form=newTf_SeleZqpyByPy(Application,market,zqdm_list);
intret=form->ShowModal();
//利用Public成员传出信息
if(ret==mrYes){
zqdm=form->zqdm;
deleteform;
}
else{
deleteform;
return;
}
}
……
……


f_SeleZqdmByPy的头文件如下:

Private:
//用以接受传入信息的变量
intmarket;
TStringList*zqdm_list;
Public:
//用以传出信息的变量
AnsiStringzqdm;
//重载构造函数
__fastcallTf_SeleZqdmByPy(Tcomponent*Owner,
intp_market,TstringList*p_zqdm_List);

f_SeleZqdmByPy的源文件如下:

__fastcallf_SeleZqdmByPy::Tf_SeleZqdmByPy(TComponent*
Owner,intp_market,TStringList*p_zqdm_List)
:TForm(Owner)
{
//接受传入信息
market=p_market;
zqdm_list=newTStringList();
zqdm_list->Assign(p_zqdm_list);
}

在f_SeleZqdmByPy中,使用ListView等控件显示zqdm_list,用户选择后设置表单的zqdm成员(用以传出选择结果),同时设置ModalResult为mrYes关闭表单、


6.合法性检查:

.原则上不在控件的Exit事件中,而在KeyDown等事件中写合法性
检查代码。
.所有的合法性检查必须在按确认、存盘等按钮按下后再进行一遍。
避免用户用鼠标移动焦点造成的输入数据非法。
.按下确认、存盘等按钮后合法性检查应依输入次序进行,若非法,
给出明确的提示信息,同时焦点应移至相应的输入控件。

7.一些注意事项:

.注意设置ComboBox的Style属性
.注意给ComboBox的ItemIndex赋初值
.注意给Edit,Label的Text,Caption赋初值
.注意一些以外情况的处理:
如:取不到分部时应显示“无分部配置”信息框,而不应显示一个空
的ComboBox.
.注意在重新输入查询条件时将查询结果清空,避免信息显示的混乱
及打印的错误
.取ListView的Selected等属性时,注意判断是否为空,避免程序
异常
.注意Button的失效控制
- 若Button的Click事件中有ProcessMessage()等函数,必须在
Click中先使Button失效,处理完后再恢复,避免Click的重入
- 对Click的热键注意判断Button是否有效,避免程序异常
.尽量减少与后端的交互问题
一些不易变动的配置等应一次取到前端保留,避免与后端的多次交
互。
.尽量从使用者的角度考虑来设计界面、焦点控制等
尽量使频繁的业务操作使用小键盘和箭头键盘即可完成
.注意当用户按住回车等按键不放(比如键盘开住卡住)时不会出现误
操作

分享到:
评论

相关推荐

    c++ builder传输代码

    3. **代码迁移**:如果要将代码从一个C++ Builder环境迁移到另一个,你需要确保目标环境安装了相同或兼容的编译器和库。同时,检查所有使用的第三方库和组件是否能在目标环境下工作。 4. **代码兼容性**:C++ ...

    华为编程规范和范例C++ builder

    《华为编程规范和范例C++ Builder》是一个针对C++ Builder开发环境的详细编程指导文档,旨在提升开发者在华为项目中的代码质量和效率。本规范涵盖了从基本编码风格到复杂设计模式的众多方面,旨在帮助开发者遵循一致...

    软件编程规范c++Builder

    本文档参考了C++Builder官方文档及其他相关的编程规范指南,旨在结合实际项目经验制定出适合本团队使用的编码规范。 #### 命名规范 命名规范是编码规范的重要组成部分,良好的命名能够显著提升代码的可读性和可...

    C++ builder代码规范.txt

    本文将深入解析一份关于C++ Builder的代码规范文档,旨在为使用该工具的开发者提供指导,确保遵循最佳实践。 #### 规范概览 C++ Builder作为一款强大的跨平台开发工具,其代码规范覆盖了代码编写、结构组织、注释...

    C++ Builder6英文帮助文件

    虽然C++ Builder 6主要关注VCL,但它也预览了FireMonkey(FMX)框架的早期版本,这是一个跨平台的UI框架,支持Windows、Mac OS X以及移动设备。FMX为开发者提供了创建跨平台应用程序的新途径。 五、数据库支持 C++ ...

    POS前台C++程序

    10. **文档与维护**:良好的代码文档和遵循编码规范是保持代码可读性和易维护性的关键。C++的注释和Doxygen等工具可以帮助生成文档。 总的来说,“POS前台C++程序”涉及到许多编程和系统设计的方面,包括但不限于...

    掌握C++builder的除错艺术

    此外,遵循一定的编码规范和风格也有助于代码的可读性。 3. **使用异常及异常处理能力** 异常处理是C++中处理错误的重要机制。通过自定义异常类,可以创建特定的错误标识,并在发生错误时抛出。例如,可以定义一个...

    segy文件读取C++源码

    1. 打开文件:使用C++的`fstream`库,创建一个文件流对象,然后调用`open()`函数打开Segy文件。 2. 读取文本头:使用文件流对象的`read()`函数,读取前3200个字节。这部分信息可以用于获取文件的基本信息。 3. 处理...

    c++build的代码整理插件

    为了帮助程序员实现这一目标,C++Builder中可以集成各种代码整理插件,本文将重点介绍一个名为“C++Build的代码整理插件”。 这个插件主要目的是自动化代码格式化,确保代码风格的一致性。它通常包含以下功能: 1....

    c++学习的50条黄金定律

    - **解析**:虽然游戏开发是C++应用的一个领域,但不应该将其视为学习C++的唯一目标。C++的应用范围广泛,包括系统软件、高性能服务器、图形图像处理等多个方面。因此,在学习过程中应该拓宽视野,不要局限于某一...

    UpdateClone5.zip_通讯编程文档_C++_Builder_

    【标题】"UpdateClone5.zip_通讯编程文档_C++_Builder_" 暗示这是一个关于C++ Builder平台上的通信编程的资料包。C++ Builder是一款集成开发环境(IDE),它结合了C++语言和RAD(快速应用开发)技术,特别适合创建高...

    给C++初学者的忠告

    - **解释**:虽然游戏开发确实是一个吸引人的领域,但不应该将其作为学习C++的唯一目标。 - **建议**:保持开放的心态,探索C++在其他领域的应用,比如科学计算、系统编程等,这样可以获得更全面的技术积累。 #### ...

    c++编程规范(自学版)

    - 兼容多种主流集成开发环境(IDE),如Visual Studio (VC), Qt Creator, Xcode, Emacs, Vim 和 C++Builder。 - 不会显著影响编码效率或开发人员的习惯。 - 规范重点在于指导“如何做”,而非深入解释背后的原理。 -...

    软件设计流程文档规范

    - **开发工具或技术体系**:为了确保软件的兼容性和现代性,推荐使用较为通用且版本较新的开发工具,例如Microsoft Visual Studio .Net、Borland Delphi、C++Builder 或 J2EE (Java 2 Platform Enterprise Edition)...

    CocosBuilder-2.1.zip 正宗2.1版本

    Cocos2d-x是一个开源的游戏开发框架,基于C++,并且支持多平台,包括iOS、Android、Windows等。CocosBuilder与Cocos2d-x的紧密结合,使得开发者能够更直观地进行场景设计、UI布局以及动画制作,而无需编写过多的代码...

    关于c++的50条建议

    C++引入了许多新特性,如类、模板等,这些都使得C++成为一个完全不同的编程语言。 #### 建议29-31:避免陷入学习误区 - **解析**:这些建议提醒我们不要陷入只学习某一部分或只依赖特定资源的学习陷阱。全面学习C++...

    CnPack IDE 专家包(用于增强Delphi/C++Builder/BDS的IDE) v0.9.9.621中文版

    该专家包的核心组件CnWizards_0.9.9.621.exe是一个安装程序,用于将CnPack集成到开发环境中。通过这个组件,用户可以享受到一系列增强功能,例如: 1. **代码自动完成**:CnPack 提供了智能代码补全功能,能够根据...

    C++调用短信猫接口代码示例

    在IT行业中,短信猫是一种硬件设备,通常用于企业或个人进行短信收发功能。它通过串行接口(如RS232)与计算机连接,并提供一个API或DLL库供...C++Builder作为一个集成开发环境,支持C++编程,可以用于开发这类应用。

    计算机课程设计文档计算机课程设计文档

    该文档旨在指导学生通过理论学习与实践操作相结合的方式,深入理解操作系统的基本原理和技术细节,并能独立完成一个小型的操作系统或其组成部分的设计与实现。 ### 课程目标 - **理论基础**: 学习操作系统的基本...

Global site tag (gtag.js) - Google Analytics