Промежуточная информация




 

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

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

 

Название переменной Тип переменной Назначение
Work RecBook для доступа к полям записи
VID byte для выбора вызова различных процедур
End_Menu boolean для выхода из меню
Name string [12] хранение имени файла
Rez_Find boolean результат поиска
NumRec longint локальная переменная принимает значение номера изменяемой записи
Count integer количество записей

 


Формализация задачи

 

Формализация задачи - это описание задачи формальными средствами (математическими, логическими). В данной работе математические средства не использовались.

Задача может выполнять следующие действия:

создания файла записей

просмотр списка справочника

изменение записи справочника

дополнение записи в справочник

поиск физического лица по названию улицы


Алгоритм решения задачи

 

Словесный алгоритм

 

Алгоритм - последовательность действий, необходимых для решения задачи.

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

На первой стадии разработки программы были описаны все переменные и их типы.

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

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

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

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

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

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

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

Для того, чтобы создать файл, нужно ввести имя файла. С этой целью используется процедура (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) процедура будет выполняться до тех пор, пока введенное название не будет найдено (т.е. до конца записей файла). Если название улицы не найдено, на экране появится: " нет данной записи". Если улица будет найдена, на экран выведется таблица с полями записей и их значениями, внизу этой таблицы в строке будет записано количество записей для заданного пользователем улицы. Закрываем файл.


Блок-схема

 

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

 
 


 
 

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

 

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

 

 
 

 
 

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

 


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

 

Нет Да

 

 


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

 

 

Нет Да

 

 


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

 

Нет Да

 


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

 

Нет Да

 

Нет Да

 

 


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

 

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


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

 

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');

AddRec;

Close (BookFile);

end

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

end;

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

begin

Name_File;

Assign (BookFile, Name);

{$I-}

Reset (BookFile);

{$I+}

If IOresult=0 then

begin

Seek (BookFile, FileSize (BookFile)); {установка текущей позиции в конец файла}

AddRec;

Writeln ('Izmenennyi fail dannyh imeet ', FileSize (BookFile),' zapisei');

Close (BookFile);

end

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

end;

Procedure FindFIO; {процедура поиска названия улицы физического лица}

Var

Maska: StUlica; {хранит название улицы искомого лица}

Rez_Find: boolean; {результат поиска}

CountRec: integer; {переменная, значение которой равно числу записей с такой улицей}

begin

Name_File;

Assign (BookFile, Name);

{$I-}

Reset (BookFile);

{$I+}

If IOresult=0 then

begin

Write ('Vvedite ulicu dla poiska: ');

Readln (Maska);

Rez_Find: =False; {улица не найдена}

CountRec: =0;

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

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

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

While (not Eof (BookFile)) do {просмотреть все записи до конца файлов}

begin

Read (BookFile,work);

with work do

If Pos (Maska,Ulica) <>0 then {найдена запись физического лица}

Begin

Rez_Find: =True;

Inc (CountRec);

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

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

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

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

end;

end;

If Rez_Find then

Writeln ('Chislo zapisei dlya ulic ',Maska,' = ',CountRec)

Else Writeln ('V spravochnike net takoi ulici ',Maska);

Close (BookFile);

end

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

end;

begin

clrscr;

End_Menu: =False;

Repeat

Writeln ('***Spravochnic dannih fizicheskih lic***');

Writeln ('Vyberite vid raboty');

Writeln ('1 - sozdanie novogo faila');

Writeln ('2 - prosmotr spiska spravochnika');

Writeln ('3 - izmenenie zapisi');

Writeln ('4 - dopolnenie spravochnika');

Writeln ('5 - poisk po familii');

Writeln ('0 - zavershenie raboty');

Write ('Vash bybor: ');

Readln (VID);

case VID of {вызов разных процедур в зависимости от видов работы}

1: Create_Book;

2: OutputAllRec;

3: UpdateRec;

4: AddRecToEnd;

5: FindFIO;

0: End_menu: =True;

end;

Writeln ('Dlya prodolzheniya nazhmite Enter');

Readln;

clrscr;

Until End_Menu;

end.

 


Контрольный пример

 

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

 

 

При выборе "1" создадим новый файл под именем "***Spravochnik dannih fizicheskih lic***":

 

 

 

При выборе "2" можно просмотреть весь созданный список:

 

При выборе "3" изменим одну из записей файла:

 


При выборе "4" дополним справочник еще одной записью:

 

При выборе "5" пользователю будет предложено ввести название улицы, введем название (Ленина) и получим данные о физических лиц с такой улицей:

 

В случае, если заданной улицы нет нет, то на экране появится:

 

При выборе "0" программа закончит свою работу:

 


Заключение

 

Задача, которая поставлена в курсовой работе была выполнена. Мы показали, что задача может выполнять несколько действий:

Создание файла

Заполнение файла данными, содержащие поля:

Фамилия, имя, отчество

Дата рождения

Город

Улица

Дом

Квартира

Номер паспорта

Просмотр всех записей файла или текущей записи

Изменение записи, созданной в файле

Дополнение записи в файл

Поиск записи по названию улицы.

Все эти действия были выполнены с помощью процедур.

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

Внутренние процедуры описываются в разделе описания процедур основной программы. Внешние процедуры оформляются в виде автономно компилируемых модулей.

Формат описания процедур:

PROCEDURE <имя проц> (список форм. Парам);

Разделы описания

BEGIN

Раздел операторов

END.

Имя проц. - имя процедуры, любое имя задаваемой программистом, обычно соответствующим назначению процедуры, состоящее из латинских букв и цифр 0-9.


Список литературы

 

1. Грачева Л.Н. - Программирование в среде Turbo-Pascal 7.0: Лабораторный практикум по дисциплине: "Программирование и основы алгоритмизации". - Уфа: РИО РУНМЦ МО РБ, 2008.

2. Молодцов В.А. - Репетитор по информатике для подготовки к экзаменам. - Ростов н/Д: Феникс, 2007.

3. Острейковский В.А. - Информатика: Учеб. для вузов. - М.: Высш. шк., 1999.

4. Попов В.Б. - Паскаль и Дельфи. Учебный курс. - СПб.: Питер, 2005.



Поделиться:




Поиск по сайту

©2015-2024 poisk-ru.ru
Все права принадлежать их авторам. Данный сайт не претендует на авторства, а предоставляет бесплатное использование.
Дата создания страницы: 2019-12-28 Нарушение авторских прав и Нарушение персональных данных


Поиск по сайту: