Сделал индивидуалку - Записная книжка! Пришёл сдавать, препод сказал что необходим ещё поиск!
Как создать поиск "по телефону"? (Ввожу номер телефона который уже есть в базе данных, и программа выводит на экран, все данные которые находяться в записити с введенным телефоном.)
Сама программа без поиска:
Код
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.
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;
Верно ли?Если нет, обьясните пожалуйсто, где и почему не правильно.