首頁 考試吧論壇 Exam8視線 考試商城 網絡課程 模擬考試 考友錄 實用文檔 求職招聘 論文下載
2011中考 | 2011高考 | 2012考研 | 考研培訓 | 在職研 | 自學考試 | 成人高考 | 法律碩士 | MBA考試
MPA考試 | 中科院
四六級 | 職稱英語 | 商務英語 | 公共英語 | 托福 | 雅思 | 專四專八 | 口譯筆譯 | 博思 | GRE GMAT
新概念英語 | 成人英語三級 | 申碩英語 | 攻碩英語 | 職稱日語 | 日語學習 | 法語 | 德語 | 韓語
計算機等級考試 | 軟件水平考試 | 職稱計算機 | 微軟認證 | 思科認證 | Oracle認證 | Linux認證
華為認證 | Java認證
公務員 | 報關員 | 銀行從業(yè)資格 | 證券從業(yè)資格 | 期貨從業(yè)資格 | 司法考試 | 法律顧問 | 導游資格
報檢員 | 教師資格 | 社會工作者 | 外銷員 | 國際商務師 | 跟單員 | 單證員 | 物流師 | 價格鑒證師
人力資源 | 管理咨詢師考試 | 秘書資格 | 心理咨詢師考試 | 出版專業(yè)資格 | 廣告師職業(yè)水平
駕駛員 | 網絡編輯
衛(wèi)生資格 | 執(zhí)業(yè)醫(yī)師 | 執(zhí)業(yè)藥師 | 執(zhí)業(yè)護士
會計從業(yè)資格考試會計證) | 經濟師 | 會計職稱 | 注冊會計師 | 審計師 | 注冊稅務師
注冊資產評估師 | 高級會計師 | ACCA | 統(tǒng)計師 | 精算師 | 理財規(guī)劃師 | 國際內審師
一級建造師 | 二級建造師 | 造價工程師 | 造價員 | 咨詢工程師 | 監(jiān)理工程師 | 安全工程師
質量工程師 | 物業(yè)管理師 | 招標師 | 結構工程師 | 建筑師 | 房地產估價師 | 土地估價師 | 巖土師
設備監(jiān)理師 | 房地產經紀人 | 投資項目管理師 | 土地登記代理人 | 環(huán)境影響評價師 | 環(huán)保工程師
城市規(guī)劃師 | 公路監(jiān)理師 | 公路造價師 | 安全評價師 | 電氣工程師 | 注冊測繪師 | 注冊計量師
繽紛校園 | 實用文檔 | 英語學習 | 作文大全 | 求職招聘 | 論文下載 | 訪談 | 游戲
您現(xiàn)在的位置: 考試吧(Exam8.com) > 計算機等級考試 > 計算機二級 > Delphi > 復習資料 > 正文

2011年計算機等級考試Delphi講義:文件管理

來源:考試吧Exam8.com) 2010-10-27 14:27:37 考試吧:中國教育培訓第一門戶 模擬考場
本章首先介紹Delphi文件管理的基本概念和標準過程/函數,并提供了一個記錄文件的應用實例,這是從我們實際課題開發(fā)中提取出來的。而后介紹Delphi提供的文件控件的使用方法。最后提供的一個綜合例程MDI文件管理器則是對Delphi文件管理功能的綜合應用。

  當文件打開或創(chuàng)建后,所要做的工作有:

  ● 若文件非空,則計算文件長度,并用文件內容填充StringGrid1

  ● “創(chuàng)建”、“打開”按鈕變灰,“關閉”按鈕使能

  ● 把文件名附到窗口標題后

  6.2.4 記錄文件的讀入和顯示

  定義一個全局變量Count用來保存文件中的記錄個數。當文件裝入時:

  Count := FileSize(MethodFile);

  如果Count > 0,則首先確定StringGrid1的高度、行數。為保證StringGrid1不會覆蓋窗口下面的編輯框,定義一個常量MaxShow。當Count < MaxShow時,記錄可全部顯示;當Count >= MaxShow時,StringGrid1自動添加一個滾動棒。為保證滾動棒不覆蓋掉顯示內容,StringGrid1的寬度應留有余地。

  確定StringGrid1高度、行數的代碼如下:

  With StringGrid do

  if count < MaxShow then

  Height := DefaultRowHeight * (Count+1)+10

  else

  Height := DefaultRowHeight * MaxShow+10;

  RowCount := Count+1;

  end;

  而后從文件中逐個讀入記錄并顯示在StringGrid1的相應位置:

  for i := 1 to Count do

  begin

  Read(MethodFile,MethodRec);

  ShowMethod(MethodRec,i);

  end;

  ShowMehtod是一個過程,用來把一條記錄填入StringGrid1的一行中。對于Name、Condition域而言,只須直接賦值即可;而對Nature 域需要把枚舉類型值轉化為對應意義的字符串(0:“微觀”,1:“宏觀”);而對Result域則需要把數值轉化為一定格式的字符串:

  Str (MethodRec.Result:6:4,ResultStr);

  StringGrid1.Cells[3,Pos] := ResultStr;

  即Result顯示域寬為6,其中小數點后位數為4。

  6.2.5 增加一條記錄

  當用戶單擊“增加”按鈕時屏幕將會彈出一個記錄編輯模式對話框EditForm。在編輯框中填入合適的內容并按OK鍵關閉后,相應值寫入一個TMethod類型的變量MethodRec中。其中Nature和Result 域需要進行轉換。之后增加的記錄添加到StringGrid1的顯示中。

  最后文件定位于尾部,寫入當前記錄,總記錄數加1。

  Seek(MethodFile,Count);

  Write(MethodFile,MethodRec);

  Count := Count+1;

  完整的程序清單如下:

  procedure TRecFileForm.AddButtonClick(Sender: TObject);

  var

  MethodRec: TMethod;

  Rl: Real;

  k: Integer;

  EditForm: TEditForm;

  begin

  if FileOpenEd = False then Exit;

  EditForm := TEditForm.Create(self);

  if EditForm.ShowModal <> idCancel then

  begin

  HazAttr.text := '';

  MethodRec.Name := EditForm.MethodName.text;

  MethodRec.Condition := EditForm.Condition.text;

  case EditForm.NatureCombo.ItemIndex of

  0:

  MethodRec.Nature := Micro;

  1:

  MethodRec.Nature := Macro ;

  end;

  Val(EditForm.Result.text,Rl,k);

  MethodRec.Result := Rl;

  with StringGrid1 do

  begin

  if Count < MaxShow then

  Height := Height+DefaultRowHeight;

  RowCount := RowCount+1;

  end;

  ShowMethod(MethodRec,Count+1);

  seek(MethodFile,Count);

  write(MethodFile,MethodRec);

  Count := Count+1;

  end;

  end;

  6.2.6 修改記錄

  首先獲取當前記錄位置:

  CurrentRec := StringGrid1.Row - 1;

  而后打開編輯對話框并顯示當前值。修改完畢后,修改結果保存在一個記錄中并在StringGrid1中重新顯示。

  最后修改結果寫入文件:

  Seek(MethodFile,CurrentRec);

  Write(MethodFile,MethodRec);

  完整程序如下:

  procedure TRecFileForm.ModifyButtonClick(Sender: TObject);

  var

  MethodRec: TMethod;

  Rl: Real;

  k: Integer;

  EditForm: TEditForm;

  begin

  if FileOpened = False then Exit;

  EditForm := TEditForm.Create(self);

  CurrentRec := StringGrid1.Row-1;

  with EditForm do

  begin

  MethodName.text := StringGrid1.Cells[0,CurrentRec+1];

  Condition.text := StringGrid1.Cells[1,CurrentRec+1];

  if StringGrid1.Cells[2,CurrentRec+1] = '微 觀' then

  NatureCombo.ItemIndex := 0

  else

  NatureCombo.ItemIndex := 1;

  Result.text := StringGrid1.Cells[3,CurrentRec+1];

  if ShowModal <> idCancel then

  begin

  HazAttr.text := '';

  MethodRec.Name := MethodName.text;

  MethodRec.Condition := Condition.text;

  case NatureCombo.ItemIndex of

  0:

  MethodRec.Nature := Micro;

  1:

  MethodRec.Nature := Macro ;

  end;

  Val(Result.text,Rl,k);

  MethodRec.Result := Rl;

  ShowMethod(MethodRec,CurrentRec+1);

  seek(MethodFile,CurrentRec);

  write(MethodFile,MethodRec);

  end;

  end;

  end;

  6.2.7 記錄的刪除、插入、排序

  刪除一條記錄的基本思路是:獲取當前記錄的位置并把該位置后的記錄逐個向前移動。 文件在最后一條記錄前截斷。

  for i:=CurrentRec+1 to Count-1 do

  begin

  seek(MethodFile,i);

  read(MethodFile,MethodRec);

  seek(MethodFile,i-1);

  Write(MethodFile,MethodRec);

  end;

  Truncate(MethodFile);

  為避免誤刪除,在進行刪除操作前彈出一個消息框進行確認。刪除后要更新全局變量的值和顯示內容:

  Count := Count - 1;

  ChangeGrid;

  完整的程序如下:

  procedure TRecFileForm.DeleteButtonClick(Sender: TObject);

  var

  NewFile: MethodFileType;

  MethodRec: TMethod;

  NewFileName: String;

  i: Integer;

  begin

  if FileOpened = False then Exit;

  CurrentRec := StringGrid1.Row-1;

  if CurrentRec < 0 then Exit;

  if MessageDlg('Delete Current Record ?', mtConfirmation,

  [mbYes, mbNo], 0) = idYes then

  begin

  HazAttr.text := '';

  for I := CurrentRec+1 to Count-1 do

  begin

  seek(MethodFile,i);

  read(MethodFile,MethodRec);

  seek(MethodFile,i-1);

  Write(MethodFile,MethodRec);

  end;

  Truncate(MethodFile);

  Count := Count-1;

  ChangeGrid;

  end;

  end;

上一頁  1 2 3 4 5 6 7 8 9 下一頁
  相關推薦:2010年9月計算機等級考試試題及答案解析專題
       預告:名師解析2010年9月計算機等級考試試題答案
       2010年9月計算機等級考試成績查詢時間及入口
       2010年9月計算機等考成績查詢短信免費提醒開通
文章搜索
版權聲明:如果計算機等級考試網所轉載內容不慎侵犯了您的權益,請與我們聯(lián)系800@exam8.com,我們將會及時處理。如轉載本計算機等級考試網內容,請注明出處。