Delphi&BCB一线程序员开发经验

Delphi&BCB一线程序员开发经验

本鲨于2003年1月份从事程序开发工作,至今有19个月之久。其中断断续续地工作皆因自己经验不足开发出来的东西粗制滥造,以致于漂泊不定,就业困难!而今本鲨已达了合格程序员的能力了。

一般来说 针对刚毕业的程序员开发任务只是一个项目中子项目中的一个模块。 一个模块差不多有5- 6个窗体代码量约有2000行。其实这种任务量和毕业设计不上下,应该能完成得了,只是开发的时间比较少,约6-12天的工作日,而不是学校里的1-2个 月,另外还有同学帮助。所以对开发者对开发工具,语法,框架和库熟练。另外对系统平台运行机制和算法要求能了解,知道是怎么回事。要求对程序员能积极主动 地工作,而不是被动工作。能主动去找资料,询问同事,以及要求同事给予任务不明之处的协助。

本鲨主要从事数据库系统前台的开发任务,因此主要使用数据库常用组件来说明下,其实数据系统的前台的任务是最繁重而总是遭受到用户的指责。

一般本鲨的开发步骤是:

0 了解任务需求

1先实行功能

2 解决功能的异常处理

3 实现用户友好性

4 解决用户友好性

性能问题就交给以后数据量大时用户实在忍受不了再去解决!目前赶任务要紧,做数据库前台 无非是新增 删除 修改 保存 查询 统计!常用到以下组件

TEdit TComboBox TListView TTreeView TCheckListBox TLabel TDBGrid TImage TMemo TButton TDBChart TPanel TMaskEdit TDateTimePicker TPageControl

1代码风格 只有在面试的时候, 你的代码风格才会对面试官产生影响.风格是给人看的,自然要符合美观条件.虽然有很多公司整了一套风格标准,我觉得很无聊得事情.风格之类没有必要强求.既然大家用的是Borland工具最好遵循Borland风格.

2组件属性设置

1 TLabel : AutoSize = Flase;

2 TEdit  设置 MaxLength值 默认输入法的值

3 TComboBox 如果只容许选择的话 Style:= csDropDownList; Sorted :=True;

当向其的Items添加数据时该

FontCombo->Items->BeginUpdate(); // prevent repaints until done

FontCombo->Items->Add(“XXX”); //

FontCombo->Items->EndUpdate(); //reenable painting

这点无论数据多少 TListView TTreeView TDBGird 都有类似的数据显示屏蔽的功能

4 TTreeView 如果不修改节点的文字 要ReadOnly RowSelect = true;

5 TListView ViewStyle vsReport要ReadOnly RowSelect = true; 如果不修改

6 TPageControl 在FormShow 或者Create事件中 PageControl1.ActivePageIndex := 0;

7 TDateTimePicker DateFormat := dfLong  如果把时间复制到Edit中时

Edit.Text := DateTimeFormate(“YYYY-MM-DD”,DateTimePicker1.Date)

8 TButton 要设置 Cancel  ModalResult Hint

3 界面布局 相同的组件要放在一起 并且与周围的对齐,上下左右对齐. 并且跟其他容器的组件对齐 ,这点很多新手忽视了!因为Borland对齐工具只能对亲本容器下的 ,最后给人一整齐的美观.

界面布局细则

1):完成相同或相近功能的按钮用Frame框起来,常用按钮要支持快捷方式。

2):完成同一功能或任务的元素放在集中位置,减少鼠标移动的距离。

3):按功能将界面划分局域块,用Frame框括起来,并要有功能说明或标题。

4):界面要支持键盘自动浏览按钮功能,即按Tab键的自动切换功能。

5):界面上首先应输入的和重要信息的控件在Tab顺序中应当靠前,位置也应放在窗口上较醒目的位置。

6):同一界面上的控件数最好不要超过10个,多于10个时可以考虑使用分页界面显示。

7):分页界面要支持在页面间的快捷切换,常用组合快捷键Ctrl+Tab

8):默认按钮要支持Enter及选操作,即按Enter后自动执行默认按钮对应操作。

9):可写控件检测到非法输入后应给出说明并能自动获得焦点。

10):Tab键的顺序与控件排列顺序要一直,目前流行总体从上到下,同时行间从左到右的方式。

11):复选框和选项框按选择几率的高底而先后排列。

12):复选框和选项框要有默认选项,并支持Tab选择。

13):选项数相同时多用选项框而不用下拉列表框。

14):界面空间较小时使用下拉框而不用选项框。

15):选项数叫少时使用选项框,相反使用下拉列表框。

16):专业性强的软件要使用相关的专业术语,通用性界面则提倡使用通用性词眼。

4 代码

1功能检查:检查需求所要求的功能和限制条件是否全部实现

2 界限检查:对功能进行界限检查 比如不同的数据类型输入 或者是不同范围的数据

3非法访问检查:测试是否存在非法内存访问错误。判断是否属于此类错误的参考错误信息类似:

”…not found”, ”List index out of bounds…”, “Access violation at address…”

4:提示信息指导性检查:在任何可输入的地方,包括编辑框、表格框、选择框随意输入任何字符,包括英文字符和中文字符,测试是否会引发非法访问错误、对不可接受的字符是否有提示、提示指导性是否强。

5单元化检查:检查本单元内的 单元头说明, 各个函数说明,注解说明是否正确。引用说明是否有多余之引用

//尤其是C++ 头文件包含了不必要的Include 会给其他单元发生不必要的问题

其实这些叫做白合测试和单元测试内容。 如果是按照测试书而言 你要另外去写测试的代码,我想每个开发人员都不原意的!可不作又不行,容易出错不好交货的。因此非常有必要了解测试的方法,这些方法

大学的软件工程都有介绍,而且考软件设计师也要考的。每当写程序时你就会留心考虑不同的情况下可能会出什么错误! 虽然在实现函数时要用到的变量是否会为空?值是否有效?是否溢出越界?是否清空变量的空间?是否大小写的要求?是否前后有空格?

这些判断首先要写在函数,过程的开始处!

if(TreeView->Selected ==NULL) //变量是否会为空?

then return ;

std::vecotr<int> intArray;// 是否溢出越界?

if(intArray <=0)

then return;

if( i< ListView.Items->Count) // 是否溢出越界?

Edit->Text = ListView->Items-Item[i].Caption;

Edit->Text.Trim();//是否前后有空格?

char a[10];

memcpy(a,”\0”,10);// 是否清空变量的空间?

a[9]=’I’;   //其实你的当前函数要对传来的变量要对它的空间写东西的话一定要清空它在写

//使用你的函数的人写个循环来调用的你的函数 变量会带上一次的值过来,如果你的函数中间有判断而没有对其写数据 那么就把上一次的数据返回给调用者!而调用者的判断条件就会失去作用!

if(Name.Trim() ==”DELPHI”) then Name=”BCB”; 值是否有效?

switch() { case 要Break; 要default: ;}

5 默认数据,提示,定位和友好性

当界面显示完后 该有数据默认显示出来 TDBGird TListView TTreeView ComboBox 都该有数据显示

ComboBox1.ItemIndex := 0;

一般来说新增和修改都会单对用一个界面来编辑。当新增完后回到浏览界面时 所有组件都要定位到刚刚新增的记录上,修改也如此。当删除时要定位到下一条记录。

ListView 和DBGird 要具有排序的功能 单击标题可按数字 字母 日期 升/降

ListView 和DBGird 当被选定数据 焦点被移动按钮上作动作时 要显示当前选择的数据是哪行!!

void __fastcall TfrmGather760::lvDataCustomDrawItem(TCustomListView *Sender, TListItem *Item, TCustomDrawState State,bool &DefaultDraw) //这段代码 会在选定行下画黄底

{

if(Sender->Selected !=NULL)

if(Item->Index == Sender->Selected->Index)

{

Sender->Canvas->Brush->Color = clYellow;

Sender->Canvas->Font->Color  = clBlue;

}

}

对一般超过2秒的操作要在函数中

TCursor OldCursor;

OldCursor = Screen->Cursor;

Screen->Cursor = crSQLWait;

try{ 。。。。。。} __finally{Screen->Cursor = OldCursor;}

procedure TForm1.FormKeyDown(Sender: TObject; var Key: Word;Shift: TShiftState);

begin

if (Shift = []) and (Key = VK_RETURN) then  //以回车键代替Tab键

Perform(WM_NEXTDLGCTL, 0, 0);

if Key = VK_NEXT then //按PageUp PageDown使TPageControl切换页面

begin

if PageControl.ActivePageIndex = PageControl.PageCount - 1 then

PageControl.ActivePageIndex := 0

else

PageControl.ActivePageIndex := PageControl.ActivePageIndex + 1;

end

else if Key = VK_PRIOR then

begin

if PageControl.ActivePageIndex = 0 then

PageControl.ActivePageIndex := PageControl.PageCount - 1

else

PageControl.ActivePageIndex := PageControl.ActivePageIndex - 1;

end;

end;

end.

6 按钮互徹

当每完成一个操作动作时 有些按钮要变成无效状态,在什么情况下又恢复有效。虽然只有一段话,如果不设置无效的话会经常带来各种致命错误!因为你是无法预测用户将会如何去操作你的软件,可用Rose来画出状态图或者用Word来表示!

7 性能

当数据多时超过100条,ComboBox Listbox TreeView ListView DBGrid 等数据显示组件边输入边查询

支持模糊查询 模糊查询无非就是 Like ‘%XXX%’可以做个单独的窗口把查到的数据显示在窗口中

void __fastcall TfrmGather760::Edt_NameKeyPress(TObject *Sender,char &Key)

{

if(Key != VK_RETURN)

return;

String sSQL;

sSQL  ="  Select Name as 姓名, Sales as  薪水 , from employee";

sSQL +=" where Name like '%"+ LowerCase(Edt_Name->Text.Trim()) + "%' ";

TfrmPubDlg *pubDlg = new TfrmPubDlg(this);

pubDlg->ExecuteQuery(sSQL);

pubDlg->ShowModal();

.....

}

8 其他

在开发一个模块时会单独使用个单元和DFM用作公共单元。会在单元里面 作个字符传结构体

Struct  TableName

{

String Name;

String FiledName;

......

}; //主要的是在更多的单元里保持一致 尤其是当表名发生改变时

std::vector<String> sErrorArry //统一出错提示

而Delphi ResoucString 段 可以被资源化更容易本地化

新增修改时 对数据的检查 全部集中在保存按钮下

void __fastcall TForm3::Btn_SaveClick(Sender)

{

if(Edt_Name->Text.IsEmpty())

{

ShowMessage(“”);

Edit_Name->SetFocus(); //焦点要定位

return;

}

ModalResult = mrOk;

}

在校的学生们大部分的毕业设计都是数据库之类的不是两层就是三层。要认真去做毕业设计的程序,要花钱请同学帮你做测试,提出更多的操作便利性。只有通过别人的测试,使用你的能力才会提高,代码大多数是异常处理和用户友好性!你带着作品去找工作会非常容易找到好的公司

其实从事数据库前台开发,重要的是写用户友好性代码!作程序员不仅仅是智力劳动 更是体力和心力的劳动!

posted on 2005-07-23 21:07 浙林龙哥 阅读(...) 评论(...) 编辑 收藏

转载于:https://www.cnblogs.com/huqingyu/archive/2005/07/23/198855.html

DelphiBCB一线程序员开发经验相关推荐

  1. Unity游戏设计与实现 南梦宫一线程序员的开发实例pdf

    下载地址:网盘下载 编辑推荐 10个典型的开发实例,覆盖基本游戏类型  怪物--点击动作游戏  迷你拼图--拼图游戏  地牢吞噬者--吃豆游戏  In the Dark Water--3D声音探索游戏 ...

  2. 一位老码农的分享:一线程序员该如何面对「中年危机」?

    如果这是第二次看到我的文章,欢迎文末扫码订阅我个人的公众号(跨界架构师)哟~   本文长度为2728字,建议阅读8分钟. 坚持原创,每一篇都是用心之作- 先来聊一下这个问题的背景吧. 前两天有小伙伴问 ...

  3. 2019,一线程序员该如何面对中年危机?

    中年危机是真实存在的,即便有技术傍身,在一些特定阶段及环境下,还是难免对未来产生质疑与焦虑.一线程序员该如何面对中年危机呢?这是绝大多数程序员的困惑,这也是绝大多数职场人的困惑.希望大家能通过此篇找到 ...

  4. Unity游戏设计与实现 南梦宫一线程序员的开发实例

    图灵程序设计丛书 Unity游戏设计与实现:南梦宫一线程序员的开发实例(修订版) 加藤政树 (作者) 罗水东 (译者)  c# 游戏 unity <内容提要> 本书的作者是日本知名游戏公司 ...

  5. 一线程序员带你实践学习企业实战C/C++程序员课程

    作者吴从周 资源简介: 传统的C/C++的教材和课程都属于学院派,只是单纯的讲一些知识点,却没有讲到实际开发中我们常用的知识点有哪些,本课程将打破传统的弊端,一线程序员将带你实践学习企业实战项目中LI ...

  6. 一线程序员年薪90万,不敢结婚不敢要孩子,被父母怼:堂弟月薪4千二胎都有了,家里最挫的就是我!...

    请点击上面 一键关注! 一线腾讯程序员年薪90万,却依然在一线承受着巨大压力,没结婚不生孩子.父母着急了,对比别人家的孩子,可惜这别人家的孩子居然是月薪只有3-4千的堂哥堂弟,只因为敢生二胎,被拿来当 ...

  7. 一线程序员与二三线城市的困局,他们不能没有性生活

    loonggg 读完需要 4分钟 速读仅需2分钟 难道程序员在一线城市没有困局吗?程序员在一线城市也有困局,但是并不是工作上的困局,而是生活上的困局.前几天不知道在哪看到一篇文章,大意讲的是就是一线城 ...

  8. java程序员_java程序员这个职业赚钱吗,看一线程序员怎么说

    java程序员这个职业赚钱吗?能赚多少钱?相信很多即将进入这个行业的年轻朋友都想问这个问题.之所以拿出一个俗不可耐的"钱"字来和大家大谈,因为这是很多朋友关心的问题. java程序 ...

  9. 女朋友羞辱我一线程序员35岁后没出路?该回二线发展!我没忍住,吼她两句!我错了吗?...

    很多北漂都面临着这些问题:工资买不起房,等能买得起房了,月供高:好不容易等月供还的起了,北京户口没法解决,孩子没法在北京一直读书,得回原籍高考.北京是个承载梦想的地方,可能承载着未来的生活吗?这不,小 ...

最新文章

  1. 5分钟学会Java 9~Java11的七大新特性
  2. docker-compose 命令
  3. 论文笔记——PRUNING FILTERS FOR EFFICIENT CONVNETS
  4. eCos Mbox机制
  5. 关于“minSdkdeviceSdk”解决办法
  6. iOS 事件传递响应链
  7. 画出的点做交互_设计之下交互设计原型设计之概念设计
  8. ClickHouse内核分析-MergeTree的Merge和Mutation机制
  9. redis cluster 分布式锁_关于分布式锁原理的一些学习与思考redis分布式锁,zookeeper分布式锁...
  10. git 获取最新代码_程序员必知:这是一份全面 amp; 详细的 Git与Github 介绍指南
  11. android 4.2 camera gallery2,Android Gallery2 修改双击、手势放大的最大倍数
  12. 新场景 + 新应用,Flink 在机器学习领域的生产落地
  13. 误删微软应用商店怎么装回来
  14. 大数据查询语句SQL
  15. 2019 年度最受欢迎的中国开源软件出炉!!
  16. 一刀工具箱 - 成语查询工具
  17. 清明节网站都变灰了,你知道是怎么做的么?
  18. Okhttp之Https
  19. java编写流星_【原创】java 流星划过天空
  20. 括号配对c语言,括号匹配(c语言实现)

热门文章

  1. redis在php中的应用(string篇)
  2. fun(1),fun(2),fun(3)
  3. Zend Studio 打开时提示 Failed to create the Java Virtual Machine
  4. BZOJ 1076: [SCOI2008]奖励关 [DP 期望 状压]
  5. 精进:如何成为一个很厉害的人---书摘
  6. MSSql Server 自定义导出
  7. ListView缓存机制踩过的坑
  8. asp.net mvc kendo Grid Filter
  9. WP7 初始屏幕设置
  10. Enterprise Library访问Access数据库