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

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

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

> Телефонная книга. Исправить ошибки, Ввод,поиск,сохранение записей.
сообщение
Сообщение #1


Новичок
*

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

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


Доброго времени суток! Помогите разобраться с задачей. Всё, что поняла, реализовала в программе.
Задача такая: Составьте программу, реализующую телефонную книгу. Каждая запись в книге включает фамилию, инициалы и три телефона (один домашний и два рабочих). Программа должна обеспечивать ввод и сохранение записей, вывод телефонов по введённой фамилии, а также вывод всех фамилий с указанием инициалов по введённому телефонному номеру.
Но у меня не выходит. wacko.gif

Код
program Telefonnaya_kniga;
uses crt;
const n=10;
type
       book=record
             first_name:string[20];
             inis:string[5];
             telrab1:shortInt;
             telrab2:shortint;
             teldom:shortint;
            end;
       Tel_Book=array[1..n] of book;
       Ffile=file of Tel_Book; {файл для хранения базы}
var f:Ffile;
    b:Tel_Book;
    t,k,tel:shortint;
    i:byte;
    s:string;
begin
  assign(f,'tel_book.txt');
  writeln('Ввод данных-0; поиск-1; сохранение-2; возврат в меню-".."');
  readln(t);
  if t=0 then begin
  append(f);
  writeln('Ввод данных в телефонную книгу:');
  while t<>'..' do
   with b[i] do begin
    write('Фамилия: ');
    readln(first_name);
    write('Инициалы: ');
    readln(inis);
    writeln('Домашний телефон: ');
    readln(teldom);
    writeln('Рабочий телефон 1: ');
    readln(telrab1);
    writeln('Рабочий телефон 2: ');
    readln(telrab2);
    writeln;
   end;
   write(f,b);
   close(f);
  end;
  if t=1 then begin
  reset(f);
  while k<>'..' do
   writeln('Поиск:')
   writeln('по фамилии-0');
   writeln('по телефону-1');
   readln(k);
  if k=0 then begin
   writeln('Введите фамилию');
   readln(s);
    for i:=1 to n do
     if s=b.first_name then writeln(b.first_name,b.inis,b.teldom,b.telrab1,b,telrab2);
    end;
  end;
  if k=1 then begin
   writeln('Введите телефон');
   readln(tel);
    for i:=1 to n do
     if tel=b.teldom then writeln(b.first_name,b.inis,b.teldom,b.telrab1,b,telrab2);
     if tel=b.telrab1 then writeln(b.first_name,b.inis,b.teldom,b.telrab1,b,telrab2);
     if tel=b.telrab2 then writeln(b.first_name,b.inis,b.teldom,b.telrab1,b,telrab2);
    end;
  end;
  close(f);
  end;
  readln;
  end.


И ещё вопрос: какой функцией воспользоваться, чтобы определить количество байтов, записанных в файл? FileSize - мне не помог. Нужна ли тут процедура FilePos?
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
 
 Ответить  Открыть новую тему 
Ответов
сообщение
Сообщение #2


Новичок
*

Группа: Пользователи
Сообщений: 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 
 К началу страницы 
+ Ответить 

Сообщений в этой теме
Natalia   Телефонная книга. Исправить ошибки   20.12.2006 6:48
Lapp   Но у меня не выходит. Слишком общо.. Что имен…   20.12.2006 13:20
Natalia   Основную проблему с append я знаю... У меня задани…   20.12.2006 20:57
мисс_граффити   хммм.... так что смело открывай reset   20.12.2006 22:18
Natalia   Поковырялась с файлом. Вот что вышло. По-крайней м…   20.12.2006 23:46
мисс_граффити   размер в байтах=filesize(твоего файла)*sizeof(элем…   20.12.2006 23:58
Natalia   размер в байтах=filesize(твоего файла)*sizeof(эле…   21.12.2006 1:51
Natalia   Подскажите, пожалуйста, в чём дело. Немного переде…   21.12.2006 1:36
мисс_граффити   var f:file; а речь вроде шла про работу с типизиро…   21.12.2006 1:57
Natalia   var f:file; а речь вроде шла про работу с типизир…   21.12.2006 2:24
Bokul   Держи универсальную функцию нахождения размера фай…   21.12.2006 2:46
Гость   Держи универсальную функцию нахождения размера фа…   21.12.2006 3:21
volvo   А что, в этом цикле где-то меняется значение T? …   21.12.2006 2:52
Natalia   А что, в этом цикле где-то меняется значение T? …   21.12.2006 3:31
мисс_граффити   а почему у тебя вложенные циклы по одной переменно…   21.12.2006 4:38
Natalia   а почему у тебя вложенные циклы по одной переменн…   21.12.2006 5:42
мисс_граффити   Я в твоем форматировании запуталась. они, оказывае…   21.12.2006 14:28
volvo   :) Кстати, есть очень хорошая утилита - для переф…   21.12.2006 16:02
Bokul   И как с ней работать?   22.12.2006 4:58
volvo   Запустить из консоли не пробовал? Она показывает Х…   22.12.2006 5:01
Natalia   Здравствуйте. Вот новая редакция программы)) Всё, …   22.12.2006 11:06
volvo   Во-первых, ты ничего в файл не записываешь... Поче…   23.12.2006 5:00
Natalia   Во-первых, ты ничего в файл не записываешь... Поч…   23.12.2006 6:49


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

 





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