IPB
ЛогинПароль:

> Прочтите прежде чем задавать вопрос!

1. Заголовок темы должен быть информативным. В противном случае тема удаляется ...
2. Все тексты программ должны помещаться в теги [code=pas] ... [/code], либо быть опубликованы на нашем PasteBin в режиме вечного хранения.
3. Прежде чем задавать вопрос, см. "FAQ", если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно такую задачу уже решали!
4. Не предлагайте свои решения на других языках, кроме Паскаля (исключение - только с согласия модератора).
5. НЕ используйте форум для личного общения, все что не относится к обсуждению темы - на PM!
6. Одна тема - один вопрос (задача)
7. Проверяйте программы перед тем, как разместить их на форуме!!!
8. Спрашивайте и отвечайте четко и по существу!!!

2 страниц V < 1 2  
 Ответить  Открыть новую тему 
> Телефонная книга. Исправить ошибки, Ввод,поиск,сохранение записей.
сообщение
Сообщение #21


Новичок
*

Группа: Пользователи
Сообщений: 24
Пол: Женский

Репутация: -  0  +


Здравствуйте.
Вот новая редакция программы)) Всё, вроде, работает, только одного понять не могу, почему после того, как ввожу данные, в поиске программа их не находит? Подскажите, пожалуйста, что нужно сделать, чтобы программа не вылетала, а корректно просила ещё раз ввести данные, если, к примеру, вместо фамилии ввести телефон и т. п. И ещё: как всё-таки определить количество байт в файле, если тип данных файла неизвестен (Надо делать с модулем crt)? Просто не знаю, что и предположить...
program Telefonnaya_kniga;
uses crt;
type
book=record
first_name:string[20];
inis:string[5];
telrab1:shortInt;
telrab2:shortint;
teldom:shortint;
end;
Ffile=file of book; {файл для хранения базы}
var f:Ffile;
b:book;
t,k,tel:shortint;
n,i:integer;
s:string[20];
proverka:boolean;
label menu;
begin
assign(f,'tel_book.txt');
reset(f);
menu: writeln('Ввод данных-0; поиск-1; выход-2');
readln(t);
if t=2 then
begin
close(f);
halt;
end;
if t=0 then
begin
writeln('Ввод данных в телефонную книгу');
writeln('Сколько вводить фамилий?');
readln(n);
for i:=1 to n do
begin
with b do
begin
write('Фамилия: ');
readln(first_name);
write('Инициалы: ');
readln(inis);
writeln('Домашний телефон: ');
readln(teldom);
writeln('Рабочий телефон 1: ');
readln(telrab1);
writeln('Рабочий телефон 2: ');
readln(telrab2);
writeln;
n:=n-1;
end;
goto menu;
end;
end;
if t=1 then
begin
writeln('Поиск:');
writeln('по фамилии-0; по телефону-1; возврат в главное меню-2; выход-3');
readln(k);
if k=2 then goto menu;
if k=3 then halt;
if k=0 then
begin
writeln('Введите фамилию');
readln(s);
with b do
begin
proverka:=false;
while not(eof(f)) do
begin
if s=first_name then
begin
writeln(first_name,inis,teldom,telrab1,telrab2);
proverka:=true;
end;
end;
if eof(f) and proverka=false then writeln('Такой фамилии нет');
end;
goto menu;
end;
if k=1 then
begin
writeln('Введите телефон');
readln(tel);
proverka:=false;
with b do
begin
while not(eof(f)) do
begin
if tel=teldom then
begin
writeln(first_name,inis,teldom,telrab1,telrab2);
proverka:=true;
end;
if tel=telrab1 then
begin
writeln(first_name,inis,teldom,telrab1,telrab2);
proverka:=true;
end;
if tel=telrab2 then
begin
writeln(first_name,inis,teldom,telrab1,telrab2);
proverka:=true;
end;
end;
end;
if eof(f) and proverka=false then writeln('Такого телефона нет');
goto menu;
end;
end;
close(f);
readln;
end.





Сообщение отредактировано: Natalia -
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #22


Гость






Цитата
почему после того, как ввожу данные, в поиске программа их не находит?
Во-первых, ты ничего в файл не записываешь... Почему?

Во вторых - ты если пользуешься GoTo (я бы это не рекомендовал, конечно) то пользуйся им правильно:

if t=0 then begin
writeln('Ввод данных в телефонную книгу');
writeln('Сколько вводить фамилий?');
readln(n);
for i:=1 to n do begin
with b do begin
write('Фамилия: '); readln(first_name);
write('Инициалы: '); readln(inis);
writeln('Домашний телефон: '); readln(teldom);
writeln('Рабочий телефон 1: '); readln(telrab1);
writeln('Рабочий телефон 2: '); readln(telrab2);
writeln;
n:=n-1;
end;
goto menu; { <--- Ты ДОСРОЧНО выходишь из цикла }
end;
end;
, но этого не видишь из-за форматирования... Теперь понятно, почему всегда просят упорядочить исходники, перед выкладыванием на форум?
 К началу страницы 
+ Ответить 
сообщение
Сообщение #23


Новичок
*

Группа: Пользователи
Сообщений: 24
Пол: Женский

Репутация: -  0  +


Цитата(volvo @ 23.12.2006 1:00) *

Во-первых, ты ничего в файл не записываешь... Почему?

Во вторых - ты если пользуешься GoTo (я бы это не рекомендовал, конечно) то пользуйся им правильно:

if t=0 then begin
writeln('Ввод данных в телефонную книгу');
writeln('Сколько вводить фамилий?');
readln(n);
for i:=1 to n do begin
with b do begin
write('Фамилия: '); readln(first_name);
write('Инициалы: '); readln(inis);
writeln('Домашний телефон: '); readln(teldom);
writeln('Рабочий телефон 1: '); readln(telrab1);
writeln('Рабочий телефон 2: '); readln(telrab2);
writeln;
n:=n-1;
end;
goto menu; { <--- Ты ДОСРОЧНО выходишь из цикла }
end;
end;
, но этого не видишь из-за форматирования... Теперь понятно, почему всегда просят упорядочить исходники, перед выкладыванием на форум?


Да, всё это я уже заметила и поправила, просто забыла внести поправку на форуме). Теперь другая проблема: прога не хочет преобразовывать тип string (first_name) в тип record. Пока не могу понять причину. Ведь вначале стоит with b... Пытаюсь исправить))
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 

2 страниц V < 1 2
 Ответить  Открыть новую тему 
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 





- Текстовая версия 18.04.2021 13:08
500Gb HDD, 6Gb RAM, 2 Cores, 7 EUR в месяц — такие хостинги правда бывают
Связь с администрацией: bu_gen в домене octagram.name