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

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

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

2 страниц V < 1 2  
 Ответить  Открыть новую тему 
> Телефонная книга. Исправить ошибки, Ввод,поиск,сохранение записей.
Natalia
сообщение 22.12.2006 7:06
Сообщение #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 - 22.12.2006 20:46
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
volvo
сообщение 23.12.2006 1:00
Сообщение #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;
, но этого не видишь из-за форматирования... Теперь понятно, почему всегда просят упорядочить исходники, перед выкладыванием на форум?
 К началу страницы 
+ Ответить 
Natalia
сообщение 23.12.2006 2:49
Сообщение #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

 



- Текстовая версия 21.07.2025 2:22
Хостинг предоставлен компанией "Веб Сервис Центр" при поддержке компании "ДокЛаб"