Версия для печати темы

Нажмите сюда для просмотра этой темы в обычном формате

Форум «Всё о Паскале» _ Задачи _ Создание поиска

Автор: Slim 2.06.2007 16:44

Сделал индивидуалку - Записная книжка!
Пришёл сдавать, препод сказал что необходим ещё поиск!

Как создать поиск "по телефону"?
(Ввожу номер телефона который уже есть в базе данных, и программа выводит на экран, все данные которые находяться в записити с введенным телефоном.)

Сама программа без поиска:

Код
Program Adress_Book;  
uses
Crt;  
type  
AdressItem = record  
Fio: String;  
Adress: String;  
Phone: LongInt;  
Email: String;  
end;  

var  
Book: Array [1..10] of Adressitem;  
Nums, I: Byte;  
Code: Integer;  
C: Char;  
Quit: Boolean;  

{ процедура добавления новой записи }  
Procedure New_Item;  
var  
F, A, Em: String;  
Ph: LongInt;  
begin  
ClrScr;  
Inc(Nums);  
if Nums > 10 then  
begin  
Write('MAx kol-vj zapisey!');  
exit;
end;  

Writeln('Запись N', Nums); Writeln;  
Write('Введите FIO: ');  
Readln(F);  
Write('Введите адресс: ');  
Readln(A);  
Write('Введите телефон: ');  
Readln(Ph);  
Write('Введите E-mail: ');  
Readln(Em);  
Writeln;  
with Book[Nums] do  
begin  
Fio := F;  
Adress := A;  
Phone := Ph;  
Email := Em;  
end;  
Write('NEW запись успешно добавлена!');  
end;  

{ процедура отображения данных отдельной записи }  
Procedure List_Item(N: Byte);  
begin  
if N > Nums then  
begin  
Write('Nevernui nomer');  
exit;  
end;  

With Book[N] do  
begin  
Writeln('Запись N', N); Writeln;  
Writeln('ФИО: ', Fio);  
Writeln('Aдрес: ', Adress);  
Writeln('Tелефон: ', Phone);  
Writeln('E-mail: ', Email);  
Writeln;  
end;  
Readln;  
end;  

begin  
Quit := False;  
Nums := 0;  
repeat  
ClrScr;  
Writeln('Книга"');  
Writeln('==========================='); Writeln;  
Writeln('Записи: ');  
Writeln('--------------------');  
if Nums = 0 then Writeln('Записей НЕТ. Книжка пуста.')  
else  
For I := 1 to Nums do  
Writeln(I, ' - ФИО: ', Book[I].Fio);  
Writeln('--------------------'); Writeln; Writeln;  
Writeln('''a'' - добавить запись');
[B]WriteLn ('''b'' - найти запись по телефону');  [/B]
Writeln('Номер - показать запись');  
Writeln('Esc - выход');  
Writeln;  
Write('Ваш выбор: ');  
C := ReadKey;  
case C of  
'1'..'9': begin  
Val(C, I, Code);  
List_Item(I);  
end;  
'a': New_Item;  
#27: Quit := true;  
end;  
until Quit;  
end.

Автор: Ozzя 2.06.2007 16:56

http://forum.pascal.net.ru/index.php?s=&showtopic=2361&view=findpost&p=97499

Автор: Slim 7.06.2007 14:48

Верно ли ?

Код
WriteLn ('''b'' - найти запись по телефону');


Код
function Search(TelNum : LongInt):integer;
var
i : integer;
begin
Result := -1;
for i:=1 to 10 do
   if Book[i].Phone = TelNum then
   begin
      Result:= i;
      break;
   end;
end;


и

Код
case C of  

'b': begin
Write('Введите телефон: ');  
Readln(Ph);  
  
//ind : integer;
  ind := Search(Ph);
  if ind <> -1 then
WriteLn(Rezult);

'1'..'9': begin  
Val(C, I, Code);  
List_Item(I);


else
   Writeln('Телефон не найден');
end;

Автор: volvo 7.06.2007 14:59

Лучше, наверное, так:

ind := Search(Ph);
if ind <> -1 then
WriteLn(Book[ind].FIO); { <--- Ну, или что там ты хочешь выводить... }

Автор: Slim 10.06.2007 22:36

Код
function Search(TelNum : LongInt):integer;
var
i : integer;
begin
Result := -1;
for i:=1 to 10 do
   if Book[i].Phone = TelNum then
   begin
      Result:= i;
      break;
   end;
end;


Rezult - это Дельфа!
А как написать поиск без Rezult?
Прочитал про строки - не помогло!
И ещё желательно, сделать умный поиск!Чтоб вводишь первые две цифры телефона, он мне выводит ту запись где совпадают первые две цифры!

Автор: volvo 10.06.2007 22:40

function Search(TelNum : LongInt):integer;
var i : integer;
begin
Search := -1; { <--- Вместо Result }
for i:=1 to 10 do
if Book[i].Phone = TelNum then
begin
Search:= i; { <---}
break;
end;
end;



Цитата
И ещё желательно, сделать умный поиск!
Сделай... Все, что надо для этого - точно знать, сколько цифр содержится в каждом номере телефона. Или перейти к представлению телефона в виде строк...

Автор: Slim 10.06.2007 22:56

Цитата

Сделай... Все, что надо для этого - точно знать, сколько цифр содержится в каждом номере телефона. Или перейти к представлению телефона в виде строк...



Уже читаю "Строки"

Автор: Slim 13.06.2007 21:15

Код
Function Search(TelNum:LongInt):Integet;
Var
i:Integer;
StrNum:String;
Begin
Search:=-1;
StrNum:=IntToStr(TelNum);
for i:=1 to 10 do
If Pos(StrNum,IntToStr(Book[i].Phone))=1 - думаю здесь ошибка
Then
Begin
Search:=i;
Breake
end;
end;

Case C of
"b": begin
Write ('Введите телефон:  ');
ReadLn(Ph);
//ind:Integer
ind:=Search(Ph);
If ind <> -1 then
WriteLn(Search);

'1'..'9': Begin
Val (C,I,Code);
List_Item(i);
Else
WriteLn('Телефон не найден: ');
end;


Верно ли?Если нет, обьясните пожалуйсто, где и почему не правильно.