Версия для печати темы
Форум «Всё о Паскале» _ Задачи _ Телефонный справочник
Автор: annna 4.10.2004 13:56
Была написана програмка, простейший тел.справочник(поиск владельца по номеру и наоборот).Она правильная:
Код
program lab12_1;
uses crt;
type
sprav=record
name:string;
num:integer;
end;
var
y:array [1..5] of sprav;
z,x,i:integer;
n:string;
procedure nam;
begin
writeln('enter the name');
readln(n);
for i:=1 to 6 do begin
if i=6 then begin
writeln('Error!');
readln;
break;
end;
if n=y[i].name then begin {n-name}
writeln(y[i].num);
break;
end else continue;
end;end;
procedure nom;
begin
writeln('enter the number');
readln(x);
for i:=1 to 6 do begin
if i=6 then begin
writeln('Error!');
readln;
break;
end;
if x=y[i].num then begin {x-number}
writeln(y[i].name);
break;
end else continue;
end;end;
begin
clrscr;
with y[1] do begin
name:='man1';
num:=1;
end;
with y[2] do begin
name:='man2';
num:=2;
end;
with y[3] do begin
name:='man3';
num:=3;
end;
writeln('Enter the way of the search:');
writeln('1.by the name');
writeln('2.by the number');
readln(z);
if z=1 then nam;
if z=2 then nom;
readln;
end.
Теперь надо её передалать, используя в качестве баз данных,два текстовых файла(имена и телефоны).Но что-то не получается
Код
program lab12_2;
uses crt;
type
sprav=record
name:string;
num:integer;
end;
var
y:array [1..5] of integer;
z,x,i:integer;
n,l:string;
a,b:text;
procedure nam;
begin
assign(a,'c:\dos\files\spr.dat'); {file name}
writeln('enter the name');
reset(a);
for i:=1 to 6 do begin
if i=6 then begin
close(a);
writeln('Error!');
readln;
break;
end;
if n=l[i] then begin
close(a);
writeln(y[i]);
break;
end else continue;
end;end;
procedure nom;
begin
writeln('enter the number');
readln(x);
for i:=1 to 6 do begin
if i=6 then begin
close(a);
writeln('Error!');
readln;
break;
end;
if x=y[i] then begin
close(a);
writeln(y[i]);
break;
end else continue;
end;end;
begin
clrscr;
assign(a,'c:\dos\files\f.dat'); {file number}
reset(a);
for i:=1 to 5 do begin
readln(a,l[i]);
readln(a,y[i]);
end;
writeln('Enter the way of the search:');
writeln('1.by the name');
writeln('2.by the number');
readln(z);
if z=1 then nam;
if z=2 then nom;
readln;
end.
Автор: Atos 4.10.2004 17:36
Так надо файлы не текстовые, а типизированные брать!
a,b:file of sprav;
Не важно, какие файлы!!
Автор: annna 4.10.2004 22:59
Atos
Попробую...
не стоит время тратить. Типизированные файлы ничего не дадут!
Автор: Altair 4.10.2004 23:21
Дело не в файлах. Любые можно... надо разобраться... щас я скопирую текст, разберусь в нем, и попробую найти ошибку ...
Автор: Altair 4.10.2004 23:34
УЖАС!!!
Код
procedure nam;
begin
writeln('enter the name');
readln(n);
for i:=1 to 6 do
begin
if i=6 then
begin
writeln('Error!');
Зачем сознательно ошибку делать???
Ведь цикл for i:=1 to 6 повторится до момента, когда i=6, и будет ошибка!
Зачем??
А не проще так найти номер? :
Код
procedure nam;
begin
writeln('enter the name');
readln(n);
for i:=1 to 6 do if n=y[i].name then writeln(y[i].num);
end;
Эта функция найдет номер по заданнумо номеру!
Про вторую фугкцию не говорю, там такой-же бред. Щас исправлю.
И вообще может задание полное дадите?
И еще можно аську...
;)
Автор: Altair 4.10.2004 23:42
Нет, девушка, вам просто необходимо со мной пообщаться по аське...
просто я в шоке...
я уже модератор полгода, но такого не видел, вы уж извините меня, такого ... просто мне как-то не по себе стало ...
Код
for i:=1 to 5 do begin
readln(a,l[i]);
readln(a,y[i]);
end;
Но переменная l описанна как строка!
Что вы этим хотите сделать? Бред, такое вообще компилироваться не должно!
Давайте задание, я вам ВСЮ программу сделаю как надо! А то исправлять это просто нет сил ... еще я вам все объясню, сделаю везде где нужно коментарии, и объяснб работу программы.
И заодно я вам объясню кое-что относительно файлов, вы немного запутались. ОК?
Прикрепленные изображения
Автор: Altair 5.10.2004 17:24
ВОТ:
Код
Program DataBase;
uses crt;
Const
MaxRec=10;
Type
REC=record
Name:string;
Number:string[8];
end;
aRec=array[1..MaxRec] of rec;
Procedure ReadBD(var DBB:aREC);
Var
I:byte;
S:string;
f:text;
Begin
write('Enter path: (введите путь к файлу):'); readln(s);
assign(f,s);
reset(f);
for i:=1 to MaxRec do
begin
with DBB[I] do
begin
readln(f,name);
readln(f,number)
end
end;
close(f)
end;
Procedure SaveBD(DBB:aRec);
var
I:byte;
f:text;
s:string;
begin
write('Enter path: (введите путь к файлу):'); readln(s);
assign(f,s);
rewrite(f);
for i:=1 to MaxRec do
begin
with DBB[I] do
begin
writeln(f,name);
writeln(f,number)
end
end;
close(f);
writeln('Сохраненно! нажмите любую клавишу ...');
readkey
end;
Procedure EnterBD(var DBB:aRec);
var
i:byte;
begin
for i:=1 to MaxRec do
begin
with DBB[i] do
begin
write('Enter name:');
readln(name);
write('Enter numbel:');
readln(number)
end
end
end;
Procedure PrintBD(DBB:aRec);
var i:byte;
begin
for i:=1 to MaxRec do
begin
writeln(i,'. NAME= ',DBB[I].NAME);
writeln('Number = ',DBB[I].NUMBER);
end;
writeln('нажмите любую клавишу ...');
readkey
end;
Procedure NAM(DBB:Arec);
var i:byte;
s:string;
begin
writeln('введите имя для поиска');
readln(s);
for i:=1 to MaxRec do if DBB[i].name=s then writeln(DBB[i].number);
writeln(' нажмите любую клавишу ...');
readkey
end;
Procedure NUM(DBB:Arec);
var i:byte;
s:string[8];
begin
writeln('введите номер для поиска');
readln(s);
for i:=1 to MaxRec do if DBB[i].number=s then writeln(DBB[i].name);
writeln('нажмите любую клавишу ...');
readkey
end;
var
c:byte;
a:ARec;
Begin
repeat
Clrscr;
writeln('Что сделать?'); writeln;
writeln('1. Ввод базы вручную');
writeln('2. ввод базы из файла');
writeln('3. сохранение базы в файле');
writeln('4. Вывод базы на экран');
writeln('5. поиск по имени');
writeln('6. Поиск по номеру'); writeln;
writeln( 'ВЫХОД - нажмите Esc!');
c:=ORD(readkey);
case c of
49: EnterBD(A);
50: ReadBD(a);
51: SaveBD(a);
52: PrintBD(A);
53: NAM(A);
54: NUM(A);
end;
Until c=27;
end.
Заначит так ... вот я тут кое-что наклепал ...
Procedure ReadBD(var DBB:aREC);Эта процедура загружает базу из файла. Структура файла:
Код
name1
number1
name2
number2
...
nameMAXREC
numberMAXREC
Procedure SaveBD(DBB:aRec);Сохранение в файл. Получается файл вышеуказанной схемы
Procedure EnterBD(var DBB:aRec);ввод бызы вручную.Программа предлагает ввести имя, пользователь вводит имя,
программа предлагает ввести номер пользователь вводит номер и так делее.
Procedure PrintBD(DBB:aRec);Вывод на экран базы.
Procedure NAM(DBB:Arec);Поиск по имени, телефона
Procedure NUM(DBB:Arec);Поиск по номеру имени.
Так ... что-от еще хотел ... а да, могу вообще для ВАС, такую базу сделать!
С динамическими структурами, анимационным меню, под win32!!
;)
Автор: Catty 6.10.2004 2:46
Oleg_Z
[offtop]
Олежка тебе цены нет!!
[/offtop]
Автор: Guest 8.10.2004 4:12
Чего ради девушек не сделаешь! :p2:
А кто под гуестом??
Автор: Flash 11.06.2005 0:40
А если туда добавить
1 вожможность удаления записей из базы
2 не ограничивать базу до 10ти записей
3 возможность добавления новых записей в базу не удаляя старой!!!!
4 сортировку по имени и телефону
так можно? =)