Смекни!
smekni.com

Составление программ для решения задач на языке программирования Turbo Pascal (стр. 3 из 4)

Создание нового файла: пользователю предлагается ввести имя файла, при повторном введении старого имени - предыдущий файл заменяется новым или просто создается новый файл. Появляется приглашение к созданию нового файла, предлагается ввести число записей по всем полям записи. По завершению программа сообщает об успешном выполнении необходимого числа записей и возвращается в главное меню.

Просмотр списка ведомости: при выборе данного режима программа просит ввести имя файла, после чего на экран выводятся все записи данного файла.

Изменение записи ведомости: этот режим предназначен для редактирования некоторой записи. Сначала пользователь должен ввести имя файла и указать номер изменяемой записи. В результате на экран выводится значение полей старой записи и предлагается заполнить поля новой.

Дополнение ведомости: пользователь выбирает имя файла, в который необходимо внести новую запись, а затем добавляет новую запись.

Поиск физического лица по названию улицы: пользователь выбирает имя файла, вводит название улицы для поиска, затем на экран выводится список данных для выбранной улицы, в конце списка указывается число физических лиц с такой улицей.

Таки образом, пользователь каждый раз имеет возможность ввести необходимое имя файла. Эта особенность позволяет использовать программу при работе с множествами файлов.

Для того, чтобы создать файл, нужно ввести имя файла. С этой целью используется процедура (Name_File).

Для добавления записей в файл используется процедура AddRec. Для обращения к полям записи используется переменная work. Пользователю предлагается ввести данные из условия задачи. Значения переменной work записываются в файл.

Для создания нового файла данных применяется процедура (Create_Book) для работы этой процедуры переменные Ind, Count. Переменная Count содержит число записей в ведомости, а переменная Ind изменяется от 1 до значения Count. Для создания нового файла данных сначала нужно ввести имя создаваемого файла. Затем открываем новый файл для записи, используя операцию Assign, которая связывает BookFile (переменную для файла с записями) и Name (имя создаваемого файла). После этого пользователю нужно ввести количество записей в справочник. Как только создание файла данных завершится на экране появится сообщение об окончании создания файла данных. Созданный файл можно закрыть, используя операцию Close.

В программе можно вывести текущую запись на экран. Для этого применяется процедура OutputRec. При использовании этой процедуры на экране появляется таблица заполненных значений текущей записи.

Все записи можно вывести для просмотра на экран с помощью процедуры OutputAllRec. Для этого нужно открыть файл, используя операцию Reset, так как открываемый файл уже существует. Чтобы файловые операции выполнялись без ошибок применим функцию IOresult. Эта функция не имеет параметров и возвращает результат целого типа. Она работает при отключении стандартной обработки ошибок. Чтобы установить указатель на начало нужной компоненты, применим операцию Seek. Эта операция служит для того, чтобы обеспечить прямой доступ к компонентам файла. Вывод данных будет продолжаться до тех пор, пока указатель не дойдет до конца файла и не выведет все данные. Если указанного имени файла нет на диске, на экране появится надпись: "Файла с именем … на диске нет".

В созданный файл данных можно не только вносить новые записи, но и изменять их и дополнять.

Данные в файле можно изменить с помощью процедуры UpdateRec. Номер изменяемой строки обозначим через переменную NumRec. Введем значение этой переменной и установим указатель на позицию по указанному номеру записи. Введем старое значение записи (NumRec). Затем выведем запись и перейдем на следующую позицию, потом вернемся на прежнюю позицию. Зададим новое значение записи. Используя процедуру AddRec изменим запись и закроем файл.

Добавление записи осуществляется с помощью процедуры AddRecToEnd. Для этого установим текущую позицию в конец файла (Seek), введем данные в файл. На экране появится надпись: "Изменяемый файл данных имеет … записей" (FileSize). Закрываем измененный файл.

С помощью разработанной программы можно произвести поиск по названию улицы. В этой процедуре (FindFIO) используются переменные: Maska - переменная, принимающая значения заданное название улицы, Rez_Find - переменная результата, принимает значения "False" и "True" в тех случаях, когда заданное название улицы не найдено (False) процедура будет выполняться до тех пор, пока введенное название не будет найдено (т.е. до конца записей файла). Если название улицы не найдено, на экране появится: " нет данной записи". Если улица будет найдена, на экран выведется таблица с полями записей и их значениями, внизу этой таблицы в строке будет записано количество записей для заданного пользователем улицы. Закрываем файл.

3.2 Блок-схема

Блок-схема основной программы:




Блок-схема задания имени создаваемому файлу (Name_File):

Блок-схема добавления записей в файл (Addrec):




Блок-схема процедуры создания файла (Create_Book):

Блок-схема просмотра списка справочника (OutputAllRec):

Нет Да


Блок-схема изменения записи (UpdateRec):

Нет Да


Блок-схема дополнения справочника (AddRecToEnd):

Нет Да


Блок-схема поиска физического лица по названию улицы (FindFIO):

Нет Да

Нет Да

3.3 Описание блок-схемы

Блок - схемы показали нам, что для решения задачи необходимы знания циклов с различными условиями (цикл с постусловием, цикл с предусловием, цикл со счетчиком). Для построения блок-схем использовались разветвляющие алгоритмы (т.е. алгоритмы, при выполнении которых порядок следования команд определяется в зависимости от результатов проверки некоторых условий).

4. Составление программы

Program kursach; uses crt;

Type

StFIO=string [20] ;

StData=string [8] ;

StGorod=string [15] ;

StUlica=string [16] ;

StDom=string [8] ;

StKvartira=string [10] ;

StNomer_Pasporta=string [15] ;

RecBook=record {запись данных о физическом лице}

FIO: StFIO; {фамилия, имя, отчество}

Data: StData; {дата рождения}

Gorod: StGorod; {город}

Ulica: StUlica; {улица}

Dom: StDom; {дом}

Kvartira: StKvartira; {квартира}

Nomer_Pasporta: StNomer_Pasporta; {номер паспорта}

end;

Var

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

Work: RecBook; {переменная для доступа к полям записи}

VID: byte; {переменная для выбора вызова различных процедур}

End_Menu: boolean; {переменная для выхода из меню}

Name: string [12] ;

Procedure Name_File; {процедура для задания имени файла}

begin

Write ('Vvedite imya faila dannyh fizicheskogo lica: ');

Readln (Name);

end;

Procedure Addrec; {процедура для добавления записи в файл}

begin

Writeln ('Nomer fizicheskoi zapisi: ', FilePos (BookFile) +1);

with work do {переменная для обращения к полям записи}

begin

Write ('Vvedite familiu, imia, otchestvo: ');

Readln (FIO);

Write ('Vvedite Datu rogdenia: ');

Readln (Data);

Write ('Vvedite Gorod: ');

Readln (Gorod);

Write ('Vvedite Ulicu: ');

Readln (Ulica);

Write ('Vvedite Dom: ');

Readln (Dom);

Write ('Vvedite Kvartiru: ');

Readln (Kvartira);

Write ('Vvedite nomer pasporta: ');

Readln (Nomer_Pasporta);

Write (BookFile, work); {записать в файл значение переменной work}

end;

end;

Procedure Create_Book; {процедура для создания нового файла данных}

Var

Ind, Count: integer;

begin

Name_File;

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

Rewrite (BookFile);

Writeln ('Sozdanie zapisei faila: ‘Name);

Write ('Vvedite chislo zapisei v spravochnike: ');

Readln (Count);

For Ind: =1 to count do

AddRec;

Writeln ('Sozdanie faila dannyh fizicheskogo lica zaversheno');

Writeln ('Fail dannyh imeet ', FileSize (BookFile),' zapisei');

Close (BookFile);

end;

Procedure OutputRec; {процедура вывода текущей записи на экран}

begin

Read (BookFile, work);

with work do

begin

Writeln ('------------------------------------------------------------------------------');

Write ('| ', FilePos (BookFile),' | ', FIO,' | ', Data,' | ‘, Gorod,' | ', Ulica,' | ', Dom,' | ');

Writeln (Kvartira,' | ', Nomer_Pasporta,' |');

Writeln ('------------------------------------------------------------------------------');

end;

end;

Procedure OutputAllRec; {процедура вывода всех записей файла на экран}

begin

Name_File;

Assign (BookFile, Name);

{$I-} {отключение стандартной обработки ошибок}

Reset (BookFile); {поиск открытого файла}

{$I+} { включение стандартной обработки ошибок}

If IOresult=0 then

begin

Seek (BookFile, 0); {установка на первую запись}

Writeln ('***Vyvod dannih fizicheskogo lica iz faila ', Name,' ***');

Writeln ('------------------------------------------------------------------------------');

Writeln ('| N | FIO | Data rogdenia | Gorod | Ulica | Dom | Kvartira | Nomer Pasporta |');

Writeln ('------------------------------------------------------------------------------');

While (not Eof (BookFile)) do OutputRec; {условие окончания цикла}

End

Else Writeln ('Faila s imenem ', Name,' na diske net');

end;

Procedure UpdateRec; {изменение записи файла}

Var

NumRec: longint; { локальная переменная принимает значение номера изменяемой записи}

begin

Name_File;

Assign (BookFile, Name);

{$I-}

Reset (BookFile);

{$I+}

If IOresult=0 then

begin

Write ('Ukazat nomer izmenayemoi zapisi: ');

Readln (NumRec);

Seek (BookFile, NumRec-1); {установка файловой позиции по указанному номеру записи}

Writeln ('staroe znachenie zapisi: ‘ NumRec);

OutputRec;

Seek (BookFile, NumRec-1); {возврат на прежнюю позицию}

Writeln ('Zadaem novoe znachenie ', NumRec,' zapisi');