Алгоритмический язык Pascal. Программа "Телефонный справочник"

контрольная работа

Листинг программы

program kurs;

uses Crt;

type

RB=record Запись сведений

A,T,Y: string[10];

end;

var

D,M,i,k,z: integer; Sr,Sr0,max:real;

BookFile: file of RB; Переменная для файла с записями RecBook

Work: RB; Переменная для доступа к записям

Vid: Byte;

End_Menu:boolean;

Name,s: string[50];

procedure AddRec; Добавление записи в файл

begin

writeln(Ввод записи №,FilePos(BookFile)+1);

with Work do

begin

Write(Введите фамилию:);

Readln(A);

Write(Введите имя:);

Readln(Y);

Write(Введите телефон (32-22-12):);

Readln(T);

Write(BookFile, Work); end;

end;

procedure Create_Supplementing_library; Создание нового файла

var

Ind, Count:integer; begin Name:=A:phone.txt;

Assign(BookFile, Name); Открыть новый файл для записи

Rewrite(BookFile);

Writeln(Создание записей файла , Name);

Write(Введите количество телефонов на станции: );

Readln(Count);

for Ind:=1 to count do

AddRec;

Writeln(Создание файла данных библиотеки завершена);

Writeln(Файл данных имеет , FileSize(BookFile), записи); close(BookFile);

end;

procedure OutputRec;

begin

With Work do

writeln(A, ,Y, ,T);

end;

procedure OutputAllRec;

begin

clrscr;

Name:=A:phone.txt;

Assign(BookFile, Name);

Reset(BookFile); clrscr; Seek(BookFile, 0);

Writeln( Фамилия Телефон);

writeln;

while (not Eof(BookFile)) do begin

With Work do begin

Read(BookFile, Work);

Outputrec; end;

end;end;

procedure FindTel;

begin

clrscr;

Name:=A:phone.txt;

Assign(BookFile, Name);

Reset(BookFile);

writeln(Введите фамилию);

readln(s);

clrscr;

Seek(BookFile, 0);

Writeln( Фамилия Телефон);

writeln;

while (not Eof(BookFile)) do begin

With Work do begin

Read(BookFile, Work);

if s=a then begin Outputrec;z:=1;end;

end;

end;

if z=0 then writeln(В справочнике данных о ,s,е нет);

end;

begin

ClrScr;

End_Menu:=False; repeat textcolor(7);

Writeln(Выберите вид работы:);

Writeln( 1- создать новый файл данных);

Writeln( 2- вывод всей картотеки);

Writeln( 3- поиск телефона по фамилии);

Writeln( 0- завершение работы:);

Write(Ваш выбор:);

Readln(Vid);

case Vid of

1:Create_Supplementing_library;

2:OutputAllRec;

3:FindTel;

0:End_Menu:=True;

end;

writeln;

Writeln(Для продолжения нажмите Enter);

Readln;

ClrScr;

until End_Menu;

end.

Описание программы

Программа начинается стандартной строкой:

Program;

Далее следует описательная часть программы. Она состоит из нескольких разделов:

Процедура assign (ФайловаяПеременная, ИмяФайла) предшествует другим процедурам, т. к. ставит в соответствие физическому файлу на внешнем устройстве логический файл -- файловую переменную, к которой впоследствии будут обращаться все другие файловые процедуры (связывает их). ИмяФайла должно представлять собой выражение строкового типа. Дальнейшие операции с переменной ФайловаяПеременная будут выполняться над физическим файлом ИмяФайла. Это полное имя внешнего файла, удовлетворяющее требованиям операционной системы MS-DOS. Процедуру assign недопустимо использовать для открытого файла. Прежде чем использовать файловую переменную повторно, необходимо закрыть файл с помощью процедуры close. После вызова assign связь файловой переменной с внешним файлом существует до тех пор, пока не будет выполнен другой assign для данной файловой переменной. Следовательно, файл можно повторно открыть без дополнительного использования процедуры assign даже после закрытия close.

Процедура reset (ФайловаяПеременная) открывает существующий файл на чтение (открывает входной файл) и ставит указатель на начало первого элемента файла. При отсутствии внешнего файла с указанным именем возникает сообщение об ошибке Error I: File not found (Ошибка 2: Файл не найден). Если при чтении файла возникнет необходимость вернуть указатель в его начало, достаточно будет просто применить процедуру reset к этому файлу еще раз.

Функция ioresult проверяет существование файла на диске. По умолчанию при всех обращениях к стандартным функциям и процедурам ввода/вывода, используемым при работе с файлами, автоматически производится проверка на наличие ошибок. Программист должен предусмотреть возможность ввода неверных исходных данных пользователем программы, например, имени файла, предназначенного для чтения. Это приведет к завершению работы программы, что нежелательно, особенно при вводе больших объемов данных. Использование директивы компилятора и стандартной функции ioresult в цикле repeat позволит программе корректно обработать эту исключительную ситуацию.

Процедура rewrite (ФайловаяПеременная) создает и открывает новый (выходной) файл для последующей записи данных. После ее успешного выполнения файл готов к записи в него первого элемента.

Обратите внимание -- использование rewrite требует особой аккуратности. Если внешний файл с указанным именем уже существует, то он удаляется, и на его месте создается новый пустой файл с тем же именем. Для предотвращения потери информации на практике необходимо создавать резервные копии файлов, над которыми могут производиться опасные действия. Обычно им назначается расширение bak.

Процедура close (ФайловаяПеременная). Используя процедуру close, программист должен закрыть файл, после того как в программе будет завершена его обработка. В противном случае может произойти потеря данных. При закрытии внешний файл обновляется, его автоматически завершает символ конца файла. Впоследствии ФайловаяПеременная может быть связана с другим (или вновь с тем же самым) физическим файлом.

Процедура rename (ФайловаяПеременная, ИмяФайла) используется ДЛЯ ТОГО, чтобы переименовать неоткрытый внешний файл любого типа. Новое имя задается строкой ИмяФайла.

Процедура erase (ФайловаяПеременная) удаляет неоткрытый внешний файл любого типа, задаваемый параметром ФайловаяПеременная.

Обратите внимание -- процедуры rename и erase нельзя использовать для открытых файлов. Их необходимо предварительно закрыть. Если файл не существует, возникает ошибка выполнения программы.

Логическая функция eof (ФайловаяПеременная) выполняет проверку, достигнут ли конец файла (End Of File) при чтении из него данных Функция возвращает true, если конец файла обнаружен, и указатель текущей позиции находится в конце файла за его последним символомю Это значит, что последний элемент в файле уже прочитан, или файл по еле открытия оказался пуст. В противном случае функция возвращает - false.

Функция eof находит широкое применение в задачах обработки файлов поскольку позволяет задать условие выполнения цикла для чтения данных из файла. Особенно она важна для текстовых файлов. Если параметр ФайловаяПеременная отсутствует, подразумевается консоль.

Процедуры:

Getdir Определяет текущий каталог на заданном диске

chdir Меняет текущий каталог

Mkdir Создает подкаталог

Rmdir Удаляет пустой подкаталог

Settextbuf Назначает для текстового файла буфер ввода/вывода

Flush Очищает буфер текстового файла, открытого для вывода (модуль dos)

Fsplit Разделяет имя файла на путь, имя и расширение (модуль dos)

Getfattr Возвращает атрибуты файла (модуль dos)

Getftime Возвращает дату и время последней записи файла (модуль dos)

Setf time Назначает новую дату и время последней записи файла (модуль dos)

Setfattr Устанавливает атрибуты файла (модуль dos)

Функции:

Filesize Возвращает текущий размер файла {не используется с текстовыми

файлами)

Diskfree Возвращает число свободных байтов на заданном диске (модуль dos)

Disksize Возвращает общий объем дисковой памяти на диске (модуль dos) Fexpand Расширяет имя файла до полностью определенного (модуль dos)

Findfirst Ищет в заданном каталоге первый элемент, совпадающий с заданным именем файла и его атрибутами (модуль dos, f indnext -- следующий)

Fsearch Ищет файл в списке каталогов (модуль dos)

Функции проверки конца строки и файла:

* кроме использования функции eof, принимающей значение true, если файл исчерпан, при работе с текстовыми файлами необходимо уметь проверять также и конец строки. Для контроля используется функция еоln (ФайловаяПеременкая), принимающая значение true, если указатель текущей позиции находится на маркере конца строки (CR/LF), иначе - false. Если eof - true, то и eoln - true;

* функция sеекеоln (ФайловаяПеременная) аналогична функции eoln, НО пропускает пробелы и позиции табуляции перед проверкой на конец строки. Функцию можно использовать только для открытых текстовых файлов;

* функция seekeof (Файловгяпеременная) аналогична eof, но пропускает пробелы, позиции табуляции и маркеры конца строки перед проверкой на конец файла. Функцию можно использовать только для открытых текстовых файлов.

if <условие> then <оператор 1> else <оператор 2> условный оператор.

Если после then и else нужно использовать несколько операторов то эти операторы надо заключать в операторные скобки - begin <опер 1>; <опер 2 >… end.

Бывает полный и неполный - не содержит ветви else.

В конструкции While... do условие выхода удовлетворяется, если выражение, определяющее условие выхода, ложно. Пока это условие истинно, будет выполняться оператор стоящий после do. Если после do нужно использовать несколько операторов то эти операторы надо заключать в операторные скобки - begin <опер 1>; <опер 2> … end.

Список используемой литературы

1. Турбо Паскаль 7.0 “BHV” 1996.

2. В.В. Фаронов. Турбо Паскаль 7.0 Начальный курс. Учебное пособие. Издательство “Нолидж” 1997.

3. В.В. Фаронов. Турбо Паскаль 7.0 Практика программирования. Учебное пособие. Издательство “Нолидж” 1997

4. А.И. Марченко, Л.А.Марченко. Программирование в среде Турбо Паскаль 7.0. Киев “ВЕК+” 1999.

5. Иванов А.Ф., Садриева Л.М. Методическое руководство по подготовке и защите курсовых работ по дисциплине “Информатика”. АлНИ, 2002.

Приложение

Делись добром ;)