日韩黑丝制服一区视频播放|日韩欧美人妻丝袜视频在线观看|九九影院一级蜜桃|亚洲中文在线导航|青草草视频在线观看|婷婷五月色伊人网站|日本一区二区在线|国产AV一二三四区毛片|正在播放久草视频|亚洲色图精品一区

分享

delphi&bcb一線程序員開發(fā)經(jīng)驗(yàn)

 frie 2005-08-09
 

Delphi&BCB一線程序員開發(fā)經(jīng)驗(yàn)

本鯊于2003年1月份從事程序開發(fā)工作,至今有19個(gè)月之久。其中斷斷續(xù)續(xù)地工作皆因自己經(jīng)驗(yàn)不足開發(fā)出來的東西粗制濫造,以致于漂泊不定,就業(yè)困難!而今本鯊已達(dá)了合格程序員的能力了。

一般來說 針對剛畢業(yè)的程序員開發(fā)任務(wù)只是一個(gè)項(xiàng)目中子項(xiàng)目中的一個(gè)模塊。 一個(gè)模塊差不多有5-6個(gè)窗體代碼量約有2000行。其實(shí)這種任務(wù)量和畢業(yè)設(shè)計(jì)不上下,應(yīng)該能完成得了,只是開發(fā)的時(shí)間比較少,約6-12天的工作日,而不是學(xué)校里的1-2個(gè)月,另外還有同學(xué)幫助。所以對開發(fā)者對開發(fā)工具,語法,框架和庫熟練。另外對系統(tǒng)平臺(tái)運(yùn)行機(jī)制和算法要求能了解,知道是怎么回事。要求對程序員能積極主動(dòng)地工作,而不是被動(dòng)工作。能主動(dòng)去找資料,詢問同事,以及要求同事給予任務(wù)不明之處的協(xié)助。

  本鯊主要從事數(shù)據(jù)庫系統(tǒng)前臺(tái)的開發(fā)任務(wù),因此主要使用數(shù)據(jù)庫常用組件來說明下,其實(shí)數(shù)據(jù)系統(tǒng)的前臺(tái)的任務(wù)是最繁重而總是遭受到用戶的指責(zé)。

 

  一般本鯊的開發(fā)步驟是:

0 了解任務(wù)需求

1先實(shí)行功能

2 解決功能的異常處理

3 實(shí)現(xiàn)用戶友好性

4 解決用戶友好性

性能問題就交給以后數(shù)據(jù)量大時(shí)用戶實(shí)在忍受不了再去解決!目前趕任務(wù)要緊,做數(shù)據(jù)庫前臺(tái) 無非是新增 刪除 修改 保存 查詢 統(tǒng)計(jì)!常用到以下組件

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

1代碼風(fēng)格 只有在面試的時(shí)候, 你的代碼風(fēng)格才會(huì)對面試官產(chǎn)生影響.風(fēng)格是給人看的,自然要符合美觀條件.雖然有很多公司整了一套風(fēng)格標(biāo)準(zhǔn),我覺得很無聊得事情.風(fēng)格之類沒有必要強(qiáng)求.既然大家用的是Borland工具最好遵循Borland風(fēng)格.

2組件屬性設(shè)置

1 TLabel : AutoSize = Flase;

2 TEdit  設(shè)置 MaxLength值 默認(rèn)輸入法的值

3 TComboBox 如果只容許選擇的話 Style:= csDropDownList; Sorted :=True;

當(dāng)向其的Items添加數(shù)據(jù)時(shí)該

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

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

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

這點(diǎn)無論數(shù)據(jù)多少 TListView TTreeView TDBGird 都有類似的數(shù)據(jù)顯示屏蔽的功能

4 TTreeView 如果不修改節(jié)點(diǎn)的文字 要ReadOnly RowSelect = true;

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

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

7 TDateTimePicker DateFormat := dfLong  如果把時(shí)間復(fù)制到Edit中時(shí)

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

8 TButton 要設(shè)置 Cancel  ModalResult Hint

3 界面布局 相同的組件要放在一起 并且與周圍的對齊,上下左右對齊. 并且跟其他容器的組件對齊 ,這點(diǎn)很多新手忽視了!因?yàn)锽orland對齊工具只能對親本容器下的 ,最后給人一整齊的美觀.

界面布局細(xì)則

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

2):完成同一功能或任務(wù)的元素放在集中位置,減少鼠標(biāo)移動(dòng)的距離。

3):按功能將界面劃分局域塊,用Frame框括起來,并要有功能說明或標(biāo)題。

4):界面要支持鍵盤自動(dòng)瀏覽按鈕功能,即按Tab鍵的自動(dòng)切換功能。

5):界面上首先應(yīng)輸入的和重要信息的控件在Tab順序中應(yīng)當(dāng)靠前,位置也應(yīng)放在窗口上較醒目的位置。

6):同一界面上的控件數(shù)最好不要超過10個(gè),多于10個(gè)時(shí)可以考慮使用分頁界面顯示。

7):分頁界面要支持在頁面間的快捷切換,常用組合快捷鍵Ctrl+Tab

8):默認(rèn)按鈕要支持Enter及選操作,即按Enter后自動(dòng)執(zhí)行默認(rèn)按鈕對應(yīng)操作。

9):可寫控件檢測到非法輸入后應(yīng)給出說明并能自動(dòng)獲得焦點(diǎn)。

10):Tab鍵的順序與控件排列順序要一直,目前流行總體從上到下,同時(shí)行間從左到右的方式。

11):復(fù)選框和選項(xiàng)框按選擇幾率的高底而先后排列。

12):復(fù)選框和選項(xiàng)框要有默認(rèn)選項(xiàng),并支持Tab選擇。

13):選項(xiàng)數(shù)相同時(shí)多用選項(xiàng)框而不用下拉列表框。

14):界面空間較小時(shí)使用下拉框而不用選項(xiàng)框。

15):選項(xiàng)數(shù)叫少時(shí)使用選項(xiàng)框,相反使用下拉列表框。

16):專業(yè)性強(qiáng)的軟件要使用相關(guān)的專業(yè)術(shù)語,通用性界面則提倡使用通用性詞眼。

4 代碼

1功能檢查:檢查需求所要求的功能和限制條件是否全部實(shí)現(xiàn)

2 界限檢查:對功能進(jìn)行界限檢查 比如不同的數(shù)據(jù)類型輸入 或者是不同范圍的數(shù)據(jù)

3非法訪問檢查:測試是否存在非法內(nèi)存訪問錯(cuò)誤。判斷是否屬于此類錯(cuò)誤的參考錯(cuò)誤信息類似:

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

4:提示信息指導(dǎo)性檢查:在任何可輸入的地方,包括編輯框、表格框、選擇框隨意輸入任何字符,包括英文字符和中文字符,測試是否會(huì)引發(fā)非法訪問錯(cuò)誤、對不可接受的字符是否有提示、提示指導(dǎo)性是否強(qiáng)。

5單元化檢查:檢查本單元內(nèi)的 單元頭說明, 各個(gè)函數(shù)說明,注解說明是否正確。引用說明是否有多余之引用

//尤其是C++ 頭文件包含了不必要的Include 會(huì)給其他單元發(fā)生不必要的問題

其實(shí)這些叫做白合測試和單元測試內(nèi)容。 如果是按照測試書而言 你要另外去寫測試的代碼,我想每個(gè)開發(fā)人員都不原意的!可不作又不行,容易出錯(cuò)不好交貨的。因此非常有必要了解測試的方法,這些方法

大學(xué)的軟件工程都有介紹,而且考軟件設(shè)計(jì)師也要考的。每當(dāng)寫程序時(shí)你就會(huì)留心考慮不同的情況下可能會(huì)出什么錯(cuò)誤! 雖然在實(shí)現(xiàn)函數(shù)時(shí)要用到的變量是否會(huì)為空?值是否有效?是否溢出越界?是否清空變量的空間?是否大小寫的要求?是否前后有空格?

這些判斷首先要寫在函數(shù),過程的開始處!

if(TreeView->Selected ==NULL) //變量是否會(huì)為空?

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’;   //其實(shí)你的當(dāng)前函數(shù)要對傳來的變量要對它的空間寫東西的話一定要清空它在寫

             //使用你的函數(shù)的人寫個(gè)循環(huán)來調(diào)用的你的函數(shù) 變量會(huì)帶上一次的值過來,如果你的函數(shù)中間有判斷而沒有對其寫數(shù)據(jù) 那么就把上一次的數(shù)據(jù)返回給調(diào)用者!而調(diào)用者的判斷條件就會(huì)失去作用!

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

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

5 默認(rèn)數(shù)據(jù),提示,定位和友好性

當(dāng)界面顯示完后 該有數(shù)據(jù)默認(rèn)顯示出來 TDBGird TListView TTreeView ComboBox 都該有數(shù)據(jù)顯示

ComboBox1.ItemIndex := 0;

一般來說新增和修改都會(huì)單對用一個(gè)界面來編輯。當(dāng)新增完后回到瀏覽界面時(shí) 所有組件都要定位到剛剛新增的記錄上,修改也如此。當(dāng)刪除時(shí)要定位到下一條記錄。

ListView 和DBGird 要具有排序的功能 單擊標(biāo)題可按數(shù)字 字母 日期 升/降

ListView 和DBGird 當(dāng)被選定數(shù)據(jù) 焦點(diǎn)被移動(dòng)按鈕上作動(dòng)作時(shí) 要顯示當(dāng)前選擇的數(shù)據(jù)是哪行??!

void __fastcall TfrmGather760::lvDataCustomDrawItem(TCustomListView *Sender, TListItem *Item, TCustomDrawState State,bool &DefaultDraw) //這段代碼 會(huì)在選定行下畫黃底

{

  if(Sender->Selected !=NULL)

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

  {

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

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

  }

}

對一般超過2秒的操作要在函數(shù)中

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 按鈕互徹

 當(dāng)每完成一個(gè)操作動(dòng)作時(shí) 有些按鈕要變成無效狀態(tài),在什么情況下又恢復(fù)有效。雖然只有一段話,如果不設(shè)置無效的話會(huì)經(jīng)常帶來各種致命錯(cuò)誤!因?yàn)槟闶菬o法預(yù)測用戶將會(huì)如何去操作你的軟件,可用Rose來畫出狀態(tài)圖或者用Word來表示!

7 性能

  當(dāng)數(shù)據(jù)多時(shí)超過100條,ComboBox Listbox TreeView ListView DBGrid 等數(shù)據(jù)顯示組件邊輸入邊查詢

支持模糊查詢 模糊查詢無非就是 Like ‘%XXX%’可以做個(gè)單獨(dú)的窗口把查到的數(shù)據(jù)顯示在窗口中

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 其他

 在開發(fā)一個(gè)模塊時(shí)會(huì)單獨(dú)使用個(gè)單元和DFM用作公共單元。會(huì)在單元里面 作個(gè)字符傳結(jié)構(gòu)體

Struct  TableName

{

 String Name;

String FiledName;

......

}; //主要的是在更多的單元里保持一致 尤其是當(dāng)表名發(fā)生改變時(shí)

std::vector<String> sErrorArry //統(tǒng)一出錯(cuò)提示

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

新增修改時(shí) 對數(shù)據(jù)的檢查 全部集中在保存按鈕下

void __fastcall TForm3::Btn_SaveClick(Sender)

{

  if(Edt_Name->Text.IsEmpty())

  {

   ShowMessage(“”);

  Edit_Name->SetFocus(); //焦點(diǎn)要定位

  return;

}

ModalResult = mrOk;

}

在校的學(xué)生們大部分的畢業(yè)設(shè)計(jì)都是數(shù)據(jù)庫之類的不是兩層就是三層。要認(rèn)真去做畢業(yè)設(shè)計(jì)的程序,要花錢請同學(xué)幫你做測試,提出更多的操作便利性。只有通過別人的測試,使用你的能力才會(huì)提高,代碼大多數(shù)是異常處理和用戶友好性!你帶著作品去找工作會(huì)非常容易找到好的公司

其實(shí)從事數(shù)據(jù)庫前臺(tái)開發(fā),重要的是寫用戶友好性代碼!作程序員不僅僅是智力勞動(dòng) 更是體力和心力的勞動(dòng)!

    本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點(diǎn)擊一鍵舉報(bào)。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多