2011-08-19 121 views
1

我使用Delphi 7中的Pascal爲朋友創建了一個控制檯應用程序。我已經排序添加記錄並查看它們,但是Im在搜索時遇到問題。記錄存儲在.dat文件中。任何幫助將是偉大的!在pascal中搜索未記錄的文件記錄(Delphi 7)

謝謝!

到目前爲止我的代碼...

Type 
    BookRecord = Record 
    Number : Integer; 
    Title : String[50]; 
    Author : String[50]; 
    ISBN : String[13]; 
    end; 

Var 
    Book : BookRecord; 
    f : file of BookRecord ; 

Procedure Add_Book; 
Var 
    Title, Author, ISBN : String; 
    i : integer; 
Begin 
    Assign (f, 'Books.dat'); 
    reset (f); 
    Seek (f, filesize(f)); 
    Book.Number := (filepos(f)+1); 
    Write ('Title: '); 
    Readln (Title); 
    For i := 1 to Length(Title) do 
    Title[i] := UpCase(Title[i]); 
    Book.Title := Title; 
    Write ('Author: '); 
    Readln (Author); 
    For i := 1 to Length(Author) do 
    Author[i] := UpCase(Author[i]); 
    Book.Author := Author; 
    Write ('ISBN: '); 
    readln (ISBN); 
    For i := 1 to Length(ISBN) do 
    ISBN[i] := UpCase(ISBN[i]); 
    Book.ISBN := ISBN; 
    write (f, Book); 
    Close (f); 
End; 

Procedure Show_All; 
Begin 
    Assign (f, 'Books.dat'); 
    Reset (f); 
    while FilePos(f) <> FileSize(f) do 
    Begin 
    Read (f,book); 
    Writeln ('File: ' , Book.Number); 
    Writeln ('Title: ' , Book.Title); 
    Writeln ('Author: ' , Book.Author); 
    Writeln ('ISBN: ' , Book.ISBN); 
    Writeln; 
    end; 
    Writeln; Writeln; 
    Center ('END OF FILE!'); 
    readln; 
    Close (f); 
end; 

Procedure Delete_All; 
Begin 
    Assign (f, 'Books.Dat'); 
    Reset (f); 
    Seek (f,0); 
    Truncate (f); 
    Close (f); 
end; 

那基本上是到目前爲止我的代碼...的Add_Book,SHOW_ALL和DELETE_ALL特效工作的偉大,但一旦伊夫添加一些記錄我怎麼會去尋找一位作家?

+2

你需要更具體。你有什麼樣的問題?你如何閱讀記錄? –

+0

由於您對記錄進行了排序,因此您最快的搜索將使用二分查找。除此之外,我會猜測。 –

+0

編輯:固定標題。 –

回答

2

由於您的記錄似乎沒有按作者排序,所以您需要使用線性搜索。調整你的Show_All例程來達到這個目的,迭代每個查找作者的記錄。

如果你有一個大的數據庫,那麼性能將是一個問題,你應該考慮使用一個真正的數據庫。

+0

謝謝,但不會線性搜索只顯示一個結果?我會研究它,看看我能弄清楚什麼!我對「真實」的數據庫沒有好處,只有150本左右的書。謝謝! – Chunky1318

+1

沒有那麼幾本書的真正的數據庫的需要。如果您選擇終止搜索,則線性搜索將僅顯示一個匹配項。對於多場比賽只是繼續到最後,並收集所有比賽。 –

+1

感謝您的幫助!我把它全部整理出來,現在一切都運行良好!乾杯! – Chunky1318