2011-08-19 85 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