Разработка программы создания набора данных с соблюдением всех ограничений и требований
Описание возможностей языка программирования Turbo Pascal. Написание программы создания файлов с прямым доступом, которая также будет обрабатывать наборы данных с определенными полями и ограничениями. Контрольный пример работы поисковой программы.
Рубрика | Программирование, компьютеры и кибернетика |
Вид | курсовая работа |
Язык | русский |
Дата добавления | 22.01.2016 |
Размер файла | 563,6 K |
Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже
Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.
Размещено на http://www.allbest.ru/
Содержание
- программа pascal поисковый файл
- Введение
1. Описание решения поставленной задачи
- 1.1 Способ реализации задачи
- 1.2 Описание типов и переменных
- 1.3 Проверка на ввод ошибочных данных
- 1.4 Основная программа
- 1.5 Некоторые другие особенности реализации
2. Контрольный пример работы программы
- 2.1 Запуск программы
- 2.2 Работа с данными
- 2.3 Поиск элемента, вставка перед текущим и сохранение всего НД в другом файле
- Заключение
- Список использованных источников
- Приложения
Введение
В курсовой работе была поставлена задача написания программы создания файлов с прямым доступом, которая также будет обрабатывать наборы данных с определенными полями и ограничениями. В наше время очень важно быстро и качественно получать нужную информацию, в этом заключается актуальность этой задачи.
В программу должны входить пять основных пунктов и два дополнительных пункта из общего списка. Программа должна иметь вертикальное меню с курсором. При разработке программы учитывалось и качество получаемого продукта, поэтому для решения этой задачи был использован язык программирования Паскаль.
Перечень общих запросов и запросов по моему варианту:
Создание набора данных.
Добавление новых элементов в конец набора данных.
Просмотр всех элементов набора данных.
Поиск элемента по номеру.
Переход к работе с другим набором данных.
Вставка нового элемента перед текущим элементом.
Сохранение всех элементов в другом НД.
1. Описание решения поставленной задачи
1.1 Способ реализации задачи
При решении поставленной задачи была определена структура программы, состоящая из модуля с описанием всех типов и переменных, модуля с главным меню, модуля с основными процедурами и самой программы, к которой подключаются все перечисленные модули.
Первый модуль tipi включает в себя только описание типов и переменных, который подключается к основной программе и двумя модулями, о них будет описано позже.
Во втором модуле menu описана работа вертикального меню. В третьем модуле proc описаны все используемые процедуры, которые определены в зависимости от варианта. В четвертом модуле tipi описаны все используемые переменные и типы.
Далее описаны значения процедур из модуля с процедурами proc:
procedure prosmotr {процедура просмотра набора дынных с использованием скролинга}
procedure sozdanie {процедура создания новых наборов данных}
procedure dobavlenie {процедура добавления новых элементов в конец набора данных}
procedure poisk {поиск элемента по номеру}
procedure perexod {процедура перехода к работе с другим набором данных}
procedure vstavka {вставка перед текущим}
procedure dobavleniedr {процедура сохранения всех элементов в другом наборе данных}
Во второй процедуре (создание набора данных) программа запрашивает у пользователя название создаваемого набора данных. Программа с помощью процедуры seek(f,n) перемещается в нужное место в файле и записывает данные.
Процедура ввода элементов набора данных организована циклически до того момента, пока пользователь не ответит на вопрос о продолжений отрицательно. Изначально данные вводятся в динамическую память, а потом записывается в файл. Это делалось для того, чтобы при вводе неправильных данных в файл данные не вносились.
while rep<>'н' do
begin
new(arr1^[i]);
{Ввод данных}
per.nazv:=arr1^[i]^.nazv;
per.rost:=arr1^[i]^.rost;
per.sr_prod:=arr1^[i]^.sr_prod;
per.tip:=arr1^[i]^.tip;
seek(f,filesize(f));{****постоянно в конец файла****}
write(f,per);
write('Ещё д/н? ');
readln(rep);
clrscr;
end;
В процедуре dobavlenie добавления данных в конец набора данных использовалась процедура позиционирования seek это необходимо для того, чтобы не испортить уже введенные данные в файле.
Процедура отработает один раз, для добавление нескольких элементов необходимо несколько раз выбрать пункт меню добавления.
В конце работы процедуры происходит просмотр всего набора данных.
procedure dobavlenie;{***добавление данных в конец НД***}
begin
{организация окна и проверка на открытость файла}
{ввод данных}
seek(f,filesize(f));
write(f,per); {запись в файл}
{вызов процедуры просмотра}
clrscr;
end;
Для просмотра элементов набора данных была написана процедура prosmotr. С помощью функции открытия reset(f) открывается файл для прочтения, далее, начиная с первого элемента, считываются поля и выводятся на экран в виде таблицы. Незаполненные поля не выводятся. Если просматривается файл, содержащий больше элементов, чем отображается на одном экране, то можно осуществлять перемещение по таблице с помощью клавиш вверх-вниз (скроллинг).
procedure prosmotr; {***Просмотр НД***}
begin
{организация окна и проверка на сущесвование файла}
reset(f);
vsego:=filesize(f);
{вывод шапки таблицы}
if vsego<21 then
begin
for z:=1 to filesize(f) do
begin
{вывод данных}
end;
{endfor}
{вывод нижней части таблицы}
readln;
end
else
begin
vs:=0;
for z:=4 to 24 do
begin
{вывод данных при условии, что их более 21}
end;
{endfor}
{вывод нижней части таблицы}
while c<>#27 do
begin
{обработка скролинга}
end;
{enwhile}
end;
vspom:=per;
k:=filesize(f);
qwe:=filesize(f);
close(f);
clrscr;
end;
Процедура perexod выполняет переход к работе с другим НД. После начала работы процедуры выдается запрос по переходу к другому набору данных, пользователь вводит имя набора данных.
После ввода имени НД будет произведен просмотр всего файла. Если введено неверное имя файла, работа программы будет завершена.
Для решения этой задачи было использована процедура assign:
procedure perexod;{****переход к работе с другим набором данных****}
begin
{организация окна}
write('Введите имя нужного файла: ');
readln(name);
textcolor(white);
clrscr;
assign(f,name);
reset(f);
ima(name); {передача имени открытого файла в модуль}
clrscr;
prosmotr(k,vspom);
clrscr;
end;
Поиск по номеру нужного элемента осуществляется с помощью процедуры poisk, при этом происходит обработка введенного значения (не превышает ли оно количество всех элементов в списке и является ли числовым). Если выбранное поле найдено, то выдается соответствующее сообщение о запросе на изменении, если не найдено, то - выводиться сообщение об ошибке:
clrscr;
write('Введите номер искомой собаки: ');
readln(k);
reset(f);
if k>filesize(f) then
begin
writeln('Такого номера не существует!');
exit;
end;
{endif}
clrscr;
seek(f,k-1);
read(f,per);
vspom:=per;
clrscr;
{вывод искомой собаки}
Для вставки нового элемента перед текущим элементом была реализована процедура vstavka. В процедуре есть цикл, который начиная с текущего элемента, записывает все следующие за ним элементы в динамическую память и далее производится ввод нового элемента, и после него производится запись элементов, размещённых в динамической памяти, в файл.
procedure vstavka;
var z:integer;
begin
{организация окна и проверка на проверка на сущесвование файла}
reset(f);
seek(f,qwe-1);
while not eof(f) do
begin
{запись элементов в динамическую память}
end;
{endwhile}
{ввод нового элемента}
begin
{запись элементов из дин. памяти в файл}
end;
{endwhile}
{запись последнего элемента списка в файл}
writeln('Для дальнейшей работы нажмите ENTER');
readln;
clrscr;
end;
Для добавления другого набора данных в текущий мы каждый раз позиционируемся в конец нашего набора данных и дописываем по одному элементу, в конце работы процедуры происходит просмотр всего файла, если файл не найден, то произойдет прекращение работы программы:
procedure dobavleniedr;
{описание переменных}
begin
{формирование окна}
name2:='';
writeln('Введите имя добавляемого НД: ');
readln(name2);
{просмотр искомого файла}
for z:=1 to i do
begin
{чтение нового файла и запись в конец открытого файла}
end;
{endfor}
{просмотр файла}
end;
end.
Сохранение набора данных в другом реализовано в процедуре dobavleniedr. В процедуре сначала формируется динамический список из элементов данного набора данных, далее идёт ввод имени нового набора данных и запись элементов списка в нём.
procedure dobavleniedr;{Сохранение в другом НД}
var
n, name:string[20];
z,i,q:integer;
begin
{организация окна и проверка на проверка на сущесвование файла}
assign(f,name);
reset(f);
seek(f,0);
while not eof(f) do
begin
{формирование динамического списка}
end;
{endwhile}
{ввод имени файла и его открытие }
z:=0;
for z:=1 to i do
while not eof(f) do
begin
{запись элементов динамического списка в новый файл}
end;
{endwhile}
{запись последнего элемента}
end;
Модуль menu содержит описание процедур первой прорисовки меню, обработки клавиш вверх-вниз меню и строка состояния, которая находится под меню. Далее идет список и значение основных функций этого модуля:
unit menu;
interface
uses crt,tipi;
procedure ima(var name:string); {процедура передающая имя из программы в модуль}
procedure massiv(a:ar; var z:integer); {первая прорисовка меню}
procedure menuu(a:ar; var i:integer; var vspom:poroda); {обработка клавиш}
procedure niz(a:ar; k:integer; name:string); {строка состояния}
procedure element(z:integer); {вывод последнего использованного элемента}
Процедура ima использовалась для передачи имени из основной программы, в модуль для отображения в строке состояния. Процедура massiv использовалась для первой прорисовки меню. Далее описана процедура главного меню menu, которое обеспечивает движение курсора и выбор пункта меню:
{организовываем окно нужного размера}
{ассемблерные вставки}
while c<>#27 do
begin
element(k);
niz(a,k,name);
c:=readkey;
if c=#0 then c:=readkey;
case c of
{обработка клавиш для работы в меню}
end;
end;
{endwhile}
{ассмблерные вставки для возврата курсора}
Процедура niz использовалась для вывода имени пункта меню, номера пункта меню, имени файла. Процедура element использовалась для вывода содержимого последнего использованного элемента.
1.2 Описание типов и переменных
Для описания типов и переменных был использовал отдельный модуль c именем tipi, в котором помещены все переменные и типы. Это было использовано для удобства обращения ко всем процедурам и функциям из основной программы:
type
ar=array[1..8] of string;
v=^poroda;
array_zapis = array [1..100] of v;
arr = ^array_zapis;
tipr=(sluz,dekor,ohota,dr);
poroda = record
nazv : string[30];
rost : integer;
sr_prod : longint;
tip : tipr;
end;
var
{описание прерменных}
Для описания поля, содержащего переменную перечислимого типа, нужно перед началом описания комбинированного типа определить перечислимый тип tipr. Все возможные значения для этого типа задаются списком констант, перечисленных через запятую в круглых скобках. Т.к. перечислимый тип нельзя использовать в процедурах ввода-вывода, то для вывода необходимых строковых значений удобно использовать следующий алгоритм:
Создаем строковую переменную per, которая будет служить для вывода на экран необходимого слова.
При вводе данных делаем запрос пользователю, какой тип данной собаки.
В зависимости от результата, переменной tip присваиваем соответствующее значение.
При выводе информации на экран будем совершать с помощью условного оператора if проверку её значения и в зависимости от результата выводить соответствующее значение оператором writeln.
if per.tip=sluz then writeln('служебная','¦':3)
else if per.tip=dekor then writeln('декоративная','¦':6)
else if per.tip=ohota then writeln('охотничья','¦':6)
else if per.tip=dr then writeln('другая','¦':6);
1.3 Проверка на ввод ошибочных данных
При использовании программы может возникнуть ситуация, когда из-за невнимательности пользователя при прочтении запроса или опечатки при наборе ответа будут введены неверные данные или выбран не тот пункт меню. Ниже описан пример того, если мы вошли не в тот пункт меню, при нажатии на клавишу Esc мы вернемся в первоначальное меню.
write('Введите имя создаваемого файла: ');
while (c<>#27) or (c<>#13) do
begin
c:=#0;
if c=#0 then c:=readkey;
if c=#13 then break;
if c=#27 then break;
name:=name+c;
gotoxy(33,1);
write(name);
end;
{endwhile}
Если пользователь пытается ввести данные в не созданный файл, ниже была описана проверка на наличие файла:
begin
if length(name)=0 then
begin
writeln('Файл не создан!');
write('Для продолжения нажмите ENTER');
readln;
exit;
end;
{endif}
Ниже описан пример проверки на наличие файла и ввод данных в процедурах в созданный файл:
while (c<>#27) or (c<>#13) do
begin
c:=#0;
if c=#0 then c:=readkey;
if c=#13 then break;
if c=#27 then
begin
clrscr;
exit;
end;
{endif}
per.nazv:=per.nazv+c;
gotoxy(24,1);
writeln(per.nazv);
end;
{endwhile}
В этом примере описывается проверка введенного номера элемента на значение, не превышающее размер файла (количество записей), если же такое введенное значение больше числа записей в файле, то будет выдано сообщение об ошибке:
readln(k);
reset(f);
if k>filesize(f) then
begin
writeln('Такого номера не существует!');
exit;
end;
{endif}
clrscr;
1.4 Основная программа
В основной программе осуществляется ввод массива меню, далее происходит обработка клавиш вверх-вниз и клавиш ENTER и ESC, в зависимости от выбранного пункта меню происходит выбор процедуры из модуля с процедурами.
Задача основной программы состоит в выборе процедур, в зависимости от пункта меню, а основные процедуры описаны в подключаемых модулях:
{основная программа};
{подключение модулей};
begin
{создание окна}
a[1]:='Создать новый НД ';
a[2]:='Добавить новые элементы НД ';
a[3]:='Просмотр всех элементов НД ';
a[4]:='Поиск собаки по номеру ';
a[5]:='Переход к другому НД ';
a[6]:='Вставка нового элемента перед тек. ';
a[7]:='Сохранение всех элементов в другом НД';
a[8]:='Выход ';
{первая прорисовка меню}
while i<>9 do
begin
menuu(a,i,vspom);
case i of
{выбор процедур в зависимости от значения преременной i}
end;
end;
{endwhile}
clrscr;
end.
1.5 Некоторые другие особенности реализации
При описании структуры разработанного программного комплекса хотелось бы обратить внимание на некоторые другие аспекты реализации.
Во-первых, интерфейс данной программы создавался с помощью процедур стандартного модуля crt, которые позволяют управлять работой клавиатуры, текстовым выводом на экран и звуком.
В программе были использованы следующие процедуры:
textbackground(color) - задаёт цвет фона экрана;
window(x,y,x1,y1) - определяет на экране текстовое окно;
clrscr - очищает текущее окно и помещает курсор в верхний правый угол окна;
textcolor (color) - устанавливает цвет символов;
gotoXY(x,y) - устанавливает курсор в точку текущего окна с заданными координатами;
readkey - считывает символы с клавиатуры, не отображая их на экране.
Во-вторых, т.к. набор данных представляет собой файл с прямым методом доступа, то для работы с ним необходимо использовать следующие процедуры и функции стандартного модуля System, определенные для типизированных файлов:
assign (f; filename) - связывает логический файл f с физическим файлом, имя которого задано в строке filename. Если путь к файлу не задан, то считается, что он находится в текущем каталоге.
close (f) - закрывает логический файл. Вызов данной процедуры используется только при завершении работы с файлом, который был открыт для записи, поскольку при её выполнении происходит выгрузка содержимого буфера. Для входных файлов зарывать файл не обязательно.
rewrite (f) - открывает логический файл f для записи данных (открывает выходной файл).
После успешного завершения этой процедуры файл готов записи в него первого элемента. Если физический файл, с которым связана переменная f, существовал ранее, он очищается, т.е. вся информация с него теряется. Если файл не существовал, он создается. Данная процедура используется только в одном запросе - создание набора данных. В остальных используется процедура reset;
reset (f) - открывает логический файл f для последующего чтения данных.
filepos (f):longint - функция возвращает текущую позицию в файле f.
filesize (f):longint - функция возвращает количество блоков в отрытом файле f.
seek (f; n) - процедура выполняет установку текущей позиции в файле (позиционирование). В параметре n задается номер блока, к которому выполняется обращение. Блоки нумеруются с нуля, т.е. первый блок файла имеет номер 0. Например, чтобы работать с четвертым блоком, необходимо задать значение n, равное 3.
Процедура работает с открытыми файлами.
Для выполнения предусмотренных ограничений необходимо было обеспечить вывод на экран вместе с меню имя рабочего НД или сообщение, что файл ещё не открыт, номер текущего элемента, содержимое текущего элемента.
2. Контрольный пример работы программы
2.1 Запуск программы
При запуске программы мы первоначальное окно с меню программы (Рисунок 1):
Рисунок 1 - Открытие программы.
При нажатии на клавиши вверх-вниз можно переместиться по меню. При нажатии клавиши Ввод будет выполнять выбранный пункт меню. Создадим новый набор данных с именем Собака. Для этого выберем первый пункт в меню "Создать новый НД" и нажмем ввод, появится следующее окно с запросом имени (Рисунок 2):
Рисунок 2 - Создание набора данных.
2.2 Работа с данными
Заполняем набор данных, ввод происходит до тех пор, пока не введем отрицательный ответ на запрос о продолжении операции ввода данных (Рисунок 3):
Рисунок 3 - Ввод данных в файл.
По завершению ввода каждого элемента пользователю предлагается выбрать дальнейшее действие: продолжить или выйти из процедуры создания. Предположим, что введены все известные элементы и выбран просмотр таблицы. Просмотр всех элементов выполняется после каждой процедуры (кроме поиска по номеру элемента) и выглядит следующим образом (рисунок 4):
Рисунок 4 - Просмотр всех элементов набора данных
Для выхода из процедуры просмотра нажимаем кнопку Esc. Т.к. файл создан, то теперь вместе с меню на экране будет отображено название набора данных, номер текущего элемента и название собаки и т.д. (Рисунок 5).
Рисунок 5 - Меню программы.
Далее создаем ещё один набор данных, но с большим числом элементов, но можем для перехода к другому набору данных использовать заранее заготовленный файл (Рисунок 6).
Рисунок 6 - Просмотр файла Dog.
2.3 Поиск элемента, вставка перед текущим и сохранение всего НД в другом файле
Для поиска элемента в открытом наборе данных достаточно выбрать соответствующий пункт меню, ввести номер элемента и нажать клавишу ввод, нам так же будет предложено изменить текущий элемент (Рисунок 7).
Рисунок 7 - Поиск элемента.
Для сохранение всех элементов текущего набора данных в другом наборе данных выбираем соответственный пункт меню и жмем Ввод, после ввода мы можем просмотреть файл с помощью скроллинга, но скроллинг будет работать только в том случае, если число записей в наборе данных превышает размер экрана (Рисунок 8).
Рисунок 8 - Сохранение элементов в другом наборе данных.
Для вставки элемента перед текущим(текущим является последний элемент, если набор данных содержит менее 21 записей, иначе текущим будет последний видимый на экране элемент), необходимо выбрать пункт меню, ввести данные(Рисунок 9).
Рисунок 9 - Вставка нового элемента перед текущим.
Для выхода из программы выбираем пункт меню Выход и для подтверждения выхода нажимаем клавишу ввод, так же для выхода из программы можно использовать клавишу Esc (Рисунок 10).
Рисунок 10 - Выход из программы
Таким образом, в данной программе можно реализовывать такие операции с наборами данных, как: создание, добавление элементов в конец набора данных, поиск по номеру, просмотр всех элементов, переход к работе с другим набором данных, вставка нового элемента перед текущим, сохранение элементов в другом наборе данных. Так же в меню имеется строка состояния, в которой отображается имя файла, если он создан или открыт, пункт меню, содержимое пункта меню, номер последнего использованного элемента, и содержимое последнего использованного элемента.
Заключение
В нашей курсовой работе описан способ создания набора данных с соблюдением всех ограничений и требований.
создание НД;
добавление новых элементов в конец НД;
просмотр всех элементов НД;
поиск элемента по номеру;
переход к работе с другим НД;
вставка нового элемента перед текущим элементом;
сохранение всех элементов в другом НД.
Были соблюдены заданные параметры и ограничения задачи:
средняя продолжительность жизни (longint);
рост (integer);
название (string);
тип: служебная, декоративная, охотничья, другая (перечислимый тип).
Список использованных источников
1. Павловская Т.А. Паскаль. Программирование на языке высокого уровня: Учебник для ВУЗов / Т.А. Павловская. - СПб.: Питер, 2006. - 393 с.: ил.
2. Алексеев Е.Р. Турбо Паскаль 7.0: Учебное пособие / Е.Р. Алексеев, О.В. Чеснакова - М.: НТ Пресс, 2009. - 320 с.
3. Зуев Е.А. Язык программирования Turbo Pascal: Учебное пособие/ Е.А. Зуев. - М.: Веста, Радио и связь, 1993. - 384 с.: ил.
Приложения
Приложение А
Код основной программы
program kyrsa4;
uses crt,tipi,menu,proc;
begin
window(1,1,80,25);
textbackground(black);
clrscr;
a[1]:='Создать новый НД ';
a[2]:='Добавить новые элементы НД ';
a[3]:='Просмотр всех элементов НД ';
a[4]:='Поиск собаки по номеру ';
a[5]:='Переход к другому НД ';
a[6]:='Вставка нового элемента перед тек. ';
a[7]:='Сохранение всех элементов в другом НД';
a[8]:='Выход ';
gotoxy(1,12);
textcolor(white);
i:=1;
massiv(a,i);
x:=1;
y:=1;
while i<>9 do
begin
menuu(a,i,vspom);
case i of
1 : begin
sozdanie(k,vspom);
prosmotr(k,vspom);
massiv(a,i);
end;
2 : begin
dobavlenie(vspom);
massiv(a,i);
end;
3 : begin
prosmotr(k,vspom);
massiv(a,i);
end;
4 : begin
poisk(k,vspom);
massiv(a,i);
end;
5 : begin
perexod;
massiv(a,i);
end;
6 : begin
vstavka(k);
prosmotr(k,vspom);
massiv(a,i);
end;
7 : begin
dobavleniedr(k);
prosmotr(k,vspom);
massiv(a,i);
end;
8 : exit;
end;
end;
{endwhile}
clrscr;
end.
Приложение Б
Модуль главного меню
unit menu;
interface
uses crt,tipi;
procedure ima(var name:string);
procedure massiv(a:ar; var z:integer);
procedure menuu(a:ar; var i:integer; var vspom:poroda);
procedure niz(a:ar; k:integer; name:string);
procedure element(z:integer);
{***Пошло выполнение программы***}
implementation
procedure ima; {***передача имени открытого файла в модуль***}
begin
name:=name;
end;
procedure niz; {****состояния всего меню****}
begin
textcolor(white);
gotoxy(1,10);
if length(name)=0 then
begin
write('_____________________________________');
gotoxy(1,11);
textcolor(white);
writeln('Фаил не создан!');
writeln('Пункт: ',k);
write('Название: ',a[k]);
end
else
begin
write('_____________________________________');
gotoxy(1,11);
textcolor(white);
writeln('Файл :',name);
writeln('Пункт: ',k);
write('Название: ',a[k]);
end;
{endif}
end;
procedure element; {***вывод последнего просмотреного элемента***}
begin
gotoxy(1,14);
if k=0 then
writeln(' ')
else
begin
writeln('Последний доступный элемент: ',k);
writeln('Название : ',vspom.nazv);
writeln('Рост собаки : ',vspom.rost);
writeln('Ср. прод. жизни : ',vspom.sr_prod);
if per.tip=sluz then writeln('Тип : служебная')
else if per.tip=dekor then writeln('Тип : декоративная')
else if per.tip=ohota then writeln('Тип : охотничья.')
else if per.tip=dr then writeln('Тип : другая');
{endif}
{endif}
{endif}
{endif}
end;
{endif}
end;
procedure massiv; {****первая прорисовка меню****}
var k,d:integer;
begin
window(20,5,70,24);
textcolor(red);
textbackground(black);
clrscr;
for d:=1 to 8 do
writeln(a[d]);
{endfor}
gotoxy(1,i);
textcolor(white);
textbackground(green);
writeln(a[z]);
textbackground(black);
end;
procedure menuu;
{***работа меню***}
var k,y:integer;
begin
textbackground(black);
window(20,5,70,24);
asm
mov ah, $01;
mov ch, $20;
mov cl, $00;
int $10;
end;
nomstr:=1;
y:=1;
k:=i;
i:=0;
while c<>#27 do
begin
element(k);
niz(a,k,name);
c:=readkey;
if c=#0 then c:=readkey;
case c of
#72 : begin
nomstr:=k;
k:=k-1;
if k=0 then k:=8;
gotoxy(1,y+k-1);
textcolor(white);
textbackground(green);
writeln(a[k]);
textcolor(red);
textbackground(black);
gotoxy(1,y+nomstr-1);
write(a[nomstr]);
textbackground(black);
niz(a,k,name);
end;
#80 : begin
nomstr:=k;
k:=k+1;
if k>8 then k:=1;
gotoxy(1,y+k-1);
textcolor(white);
textbackground(green);
writeln(a[k]);
textcolor(red);
textbackground(black);
gotoxy(1,y+nomstr-1);
writeln(a[nomstr]);
textbackground(black);
niz(a,k,name);
end;
#27 : begin
i:=9;
exit;
end;
#13 : begin
i:=k;
break;
end;
end;
end;
{endwhile}
asm
mov ah, $01;
mov cl, $06;
mov ch, $07;
int $10;
end;
end;
end.
Приложение В
Модуль обработки данных
unit proc;
interface
uses crt,tipi,menu;
var qwe:integer;
procedure prosmotr(var k:integer; var vspom:poroda); {***Просмотр***}
procedure sozdanie(var k:integer; var vspom:poroda); {***Создание НД***}
procedure dobavlenie(vspom:poroda); {***Добавление новых элементов в конец***}
procedure poisk(var k:integer; var vspom:poroda); {***Поиск элементов***}
procedure perexod; {***Переход к другому файлу***}
procedure vstavka(q:integer);{***Вставка перед текущим***}
procedure dobavleniedr(var k:integer);{***Сохранение в другом НД ***}
{****исполняемая часть программы*****}
implementation
procedure prosmotr; {***Просмотр НД***}
var z,vsego,q,w,vs:integer;
c,x:char;
begin
window(1,1,80,25);
textbackground(black);
clrscr;
z:=0;
if name=''then exit;
reset(f);
vsego:=filesize(f);
writeln('-===T============T======T================T=============¬');
writeln('¦№ ¦ порода ¦рост ¦сред.прод. жизни¦ тип ¦');
writeln('+---+------------+------+----------------+-------------+');
if vsego<21 then
begin
for z:=1 to filesize(f) do
begin
read(f,per);
write('¦',z:3,'¦',per.nazv,' ':12-length(per.nazv),'¦',per.rost:6,'¦',per.sr_prod:16,'¦');
if per.tip=sluz then writeln('служебная ¦')
else if per.tip=dekor then writeln('декоративная ¦')
else if per.tip=ohota then writeln('охотнич ¦')
else if per.tip=dr then writeln('другая ¦');
{endif}
{endif}
{endif}
{endif}
end;
{endfor}
write('L===¦============¦======¦================¦=============-');
readln;
end
else
begin
vs:=0;
for z:=4 to 24 do
begin
gotoxy(1,z);
read(f,per);
write('¦',z:3,'¦',per.nazv,' ':12-length(per.nazv),'¦',per.rost:6,'¦',per.sr_prod:16,'¦');
if per.tip=sluz then writeln('служебная ¦')
else if per.tip=dekor then writeln('декоративная ¦')
else if per.tip=ohota then writeln('охотнич ¦')
else if per.tip=dr then writeln('другая ¦');
{endif}
{endif}
{endif}
{endif}
end;
{endfor}
gotoxy(1,25);
write('L===¦============¦======¦================¦=============-');
while c<>#27 do
begin
c:=#0;
if c=#0 then c:=readkey;
case c of
#72 : begin {вверх}
vs:=vs-1;
if vs=-1 then vs:=0;
end;
#80 : begin {вниз}
vs:=vs+1;
if vs>filesize(f)-21 then vs:=filesize(f)-21;
end;
#27 : break;
end;
seek(f,vs);
for z:=4 to 24 do
begin
gotoxy(1,z);
read(f,per);
write('¦',z:3,'¦',per.nazv,' ':12length(per.nazv),'¦',per.rost:6,'¦',per.sr_prod:16,'¦');
if per.tip=sluz then writeln('служебная ¦')
else if per.tip=dekor then writeln('декоративная ¦')
else if per.tip=ohota then writeln('охотничья ¦')
else if per.tip=dr then writeln('другая ¦');
{endif}
{endif}
{endif}
{endif}
end;
{endfor}
gotoxy(1,25);
write('L===¦============¦======¦================¦=============-');
end;
{enwhile}
end;
{endwhile}
vspom:=per;
k:=filesize(f);
qwe:=filesize(f);
close(f);
clrscr;
end;
procedure sozdanie;{****Создание нового НД****}
var c,name1:string;
begin
name1:='';
name1:=name;
window(1,1,80,25);
textbackground(black);
clrscr;
c:='';
name:='';
write('Введите имя создаваемого файла: ');
while (c<>#27) or (c<>#13) do
begin
c:=#0;
if c=#0 then c:=readkey;
if c=#13 then break;
if c=#27 then break;
name:=name+c;
gotoxy(33,1);
write(name);
end;
{endwhile}
if c=#13 then
begin
assign(f,name);
rewrite(f);
clrscr;
max1:=0;
min1:=32767;
max2:=0;
min2:=maxint;
textcolor(white);
reset(f);
while rep<>'н' do
begin
new(arr1^[i]);
write('Введите породу собак: ');
readln(arr1^[i]^.nazv);
write('Введите рост собаки : ');
readln(arr1^[i]^.rost);
write('Введите среднюю продолжительность жизни: ');
readln(arr1^[i]^.sr_prod);
write('Введите тип(служебная,декоративная,охотничья,другая): ');
readln(tipok);
if tipok='служебная' then arr1^[i]^.tip:=sluz
else if tipok='декоративная' then arr1^[i]^.tip:=dekor
else if tipok='охотничья' then arr1^[i]^.tip:=ohota
else if tipok='другая' then arr1^[i]^.tip:=dr;
{endif}
{endif}
{endif}
{endif}
per.nazv:=arr1^[i]^.nazv;
per.rost:=arr1^[i]^.rost;
per.sr_prod:=arr1^[i]^.sr_prod;
per.tip:=arr1^[i]^.tip;
seek(f,filesize(f));{****постоянно в конец файла****}
write(f,per);
write('Ещё д/н? ');
readln(rep);
clrscr;
end;
{endwhile}
end
else
begin
writeln;
writeln('Вы ничего не создали!');
name:=name1;
readkey;
exit;
end;
{endif}
close(f);
k:=n;
vspom:=per;
clrscr;
ima(name);
clrscr;
end;
procedure dobavlenie;{***добавлени данных в конец НД***}
begin
window(1,1,80,25);
textbackground(black);
clrscr;
if length(name)=0 then
begin
writeln('Файл не создан!');
write('Для продолжения нажмите ENTER');
readln;
exit;
end;
{endif}
reset(f);
textcolor(white);
clrscr;
write('Введите породу собаки: ');
readln(per.nazv);
write('Введите рост собаки: ');
readln(per.rost);
write('Введите ср. прод. жизни: ');
readln(per.sr_prod);
write('Введите тип собаки(служебная,декоративная,охотничья,другая): ');
readln(tipok);
if tipok='служебная' then arr1^[i]^.tip:=sluz
else if tipok='декоративная' then arr1^[i]^.tip:=dekor
else if tipok='охотничья' then arr1^[i]^.tip:=ohota
else if tipok='другая' then arr1^[i]^.tip:=dr;
{endif}
{endif}
{endif}
{endif}
seek(f,filesize(f));
write(f,per);
prosmotr(k,vspom);
clrscr;
end;
procedure poisk;{****поиск элемента по номеру****}
var vo:char;
begin
window(1,1,80,25);
textbackground(black);
clrscr;
write('Введите номер искомой собаки: ');
readln(k);
reset(f);
if k>filesize(f) then
begin
writeln('Такого номера не существует!');
exit;
end;
{endif}
clrscr;
seek(f,k-1);
read(f,per);
vspom:=per;
clrscr;
writeln(' Искомая собака ');
writeln('-===T============T======T================T=============¬');
writeln('¦№ ¦ порода ¦рост ¦сред.прод. жизни¦ тип ¦');
writeln('+---+------------+------+----------------+-------------+');
write('¦',k:3,'¦',per.nazv,' ':12-length(per.nazv),'¦',per.rost:6,'¦',per.sr_prod:16,'¦');
if per.tip=sluz then
writeln('служебная ¦')
else
if per.tip=dekor then
writeln('декоративная ¦')
else
if per.tip=ohota then
writeln('охотничья ¦')
else
if per.tip=dr then
writeln('другая ¦');
{endif}
{endif}
{endif}
{endif}
writeln('L===¦============¦======¦================¦=============-');
writeln;
writeln('Хотите изменить? д/н');
readln(vo);
if vo='д' then
begin
write('Введите название: ');
readln(per.nazv);
write('Введите рост: ');
readln(per.rost);
write('Введите среднюю продолжительность жизни: ');
readln(per.sr_prod);
writeln('Введите тип(служебная,декоротивная,охотничья,другая): ');
readln(tipok);
if tipok='служебная' then per.tip:=sluz
else if tipok='декоративная' then per.tip:=dekor
else if tipok='охотничья' then per.tip:=ohota
else if tipok='другая' then per.tip:=dr;
{endif}
{endif}
{endif}
{endif}
end;
{endif}
seek(f,k-1);
write(f,per);
vspom:=per;
clrscr;
end;
procedure perexod;{****переход к работе с другим набором данных****}
begin
k:=0;
window(1,1,80,25);
textbackground(black);
clrscr;
write('Введите имя нужного файла: ');
readln(name);
textcolor(white);
clrscr;
assign(f,name);
reset(f);
ima(name);
clrscr;
prosmotr(k,vspom);
clrscr;
end;
procedure vstavka;{****Вставка перед текущим****}
var z:integer;
begin
window(1,1,80,25);
textbackground(black);
textcolor(white);
clrscr;
if length(name)=0 then
begin
writeln('Файл не создан!');
write('Для продолжения нажмите ENTER');
readln;
exit;
end;
{endif}
reset(f);
rep:='0';
textcolor(white);
per.nazv:='';
assign(f,name);
reset(f);
seek(f,qwe-1);
while not eof(f) do
begin
i:=i+1;
new(arr1^[i]);
read(f,per);
arr1^[i]^.nazv:=per.nazv;
arr1^[i]^.rost:=per.rost;
arr1^[i]^.sr_prod:=per.sr_prod;
arr1^[i]^.tip:=per.tip;
end;
{endwhile}
write('Введите породу собаки: ');
readln(per.nazv);
write('Введите рост собаки: ');
readln(per.rost);
write('Введите сред. прод. жизни: ');
readln(per.sr_prod);
write('Введите тип собаки(служебная,декоративная,охотничья,другая): ');
readln(tipok);
if tipok='служебная' then per.tip:=sluz
else if tipok='декоративная' then per.tip:=dekor
else if tipok='охотничья' then per.tip:=ohota
else if tipok='другая' then per.tip:=dr;
{endif}
{endif}
{endif}
{endif}
write(f,per); {записываем последний элемент списка в файл}
writeln('Для дальнейшей работы нажмите ENTER');
readln;
clrscr;
end;
procedure dobavleniedr;{Сохранение в другом НД}
var
n, name:string[20];
z,i,q:integer;
f: file of poroda;
begin
window(1,1,80,25);
textbackground(black);
textcolor(white);
clrscr;
if length(name)=0 then
begin
writeln('Файл не создан!');
write('Для продолжения нажмите ENTER');
readln;
exit;
end;
{endif}
textcolor(white);
assign(f,name);
reset(f);
seek(f,0);
i:=0;
while not eof(f) do
begin
i:=i+1;
new(arr1^[i]);
read(f,per);
arr1^[i]^.nazv:=per.nazv;
arr1^[i]^.rost:=per.rost;
arr1^[i]^.sr_prod:=per.sr_prod;
arr1^[i]^.tip:=per.tip;
end;
{endwhile}
write('Введите имя нового файла: ');
readln(n);
assign(f,n);
rewrite(f);
z:=0;
for z:=1 to i do
while not eof(f) do
begin
per.nazv:=arr1^[q]^.nazv;
per.rost:=arr1^[q]^.rost;
per.sr_prod:=arr1^[q]^.sr_prod;
per.tip:=arr1^[q]^.tip;
write(f,per);
end;
end;
end.
Приложение Г
Модуль описания типов и переменных
unit tipi;
interface
uses crt;
type
ar=array[1..8] of string;
v=^poroda;
array_zapis = array [1..100] of v;
arr = ^array_zapis;
tip=(sluz,dekor,ohota,dr);
poroda = record
nazv : string[30];
rost : integer;
sr_prod : longint;
tip : tip;
end;
var
f : file of poroda;
per,vspom : poroda;
rep,c : char;
tipok,name2 : string[20];
n,nomstr : integer;
a : ar;
max1,min1 : real;
max2,min2 : integer;
i,j,x,y,max,k : integer;
name : string;
implementation
end.
Размещено на Allbest.ru
Подобные документы
Изучение текстового режима языка программирования Turbo Pascal. Написание игры "Змейка" с помощью средств, процедур и функций языка программирование Turbo Pascal. Структурное и функциональное описание разработки. Листинг и общие примеры работы программы.
контрольная работа [286,3 K], добавлен 10.04.2011Разработка эскизного и технического проектов программы "Helpopr" (ввод, хранение и вывод данных на дисплей по запросу пользователя). Язык программирования Turbo Pascal. Описание алгоритма программы. Требования к компьютеру и программному обеспечению.
курсовая работа [198,1 K], добавлен 03.02.2010Разработка программы обработки типизированных файлов с кодом на языке Object Pascal, с использованием компонентов Delphi для ввода и вывода данных. Разработка экранных форм и алгоритма программы. Описание программных модулей и инструкция оператору.
курсовая работа [1,5 M], добавлен 08.02.2011Создание программы, работающей с набором данных на внешнем устройстве. Описание программного комплекса. Обзор структуры главной программы. Процедура добавления новых элементов, поиска и создания на экране вертикального меню. Проверка работы программы.
курсовая работа [265,6 K], добавлен 28.08.2017Характеристика используемой операционной системы, языка программирования. Структура программы на языке Turbo Pascal 7.1. Операторы языка Turbo Pascal. Проведение сортировки записей. Алгоритмы программы и подпрограмм. Причины возникновения ошибок.
курсовая работа [454,1 K], добавлен 13.06.2014При помощи Turbo Pascal достаточно не просто создать программу, которая бы демонстрировала работу с базами данных. Для этого существует огромное количество специализированных программ. Основа и сущность формирования базы данных при помощи Turbo Pascal.
курсовая работа [479,7 K], добавлен 04.07.2008Анализ эффективности методов сортировки данных в языке Turbo Pascal. Разработка эскизного и технического проекта программы. Сортировка без и с использованием дополнительной памяти, за исключением небольшого стека (массива). Сортировка связанных списков.
курсовая работа [359,0 K], добавлен 23.05.2012Разработка программы средствами Turbo Pascal для автоматизации процесса работы с небольшими базами данных. Состав используемого аппаратного обеспечения. Общая схема структуры языка программирования Паскаля и приемы процедурного программирования.
курсовая работа [61,6 K], добавлен 09.03.2011Разработка программы на языке Turbo Pascal, обеспечивающей работу пользователя в диалоговом режиме с возможностью выбора функций с помощью одноуровневого меню вертикального типа. Блок-схема и листинг программы, описание руководства пользователя.
курсовая работа [1,5 M], добавлен 17.03.2014Особенности разработки программ на языке Turbo Pascal на примере программы обработки массива данных с построением диаграммы. Функции программы и основные требования к ней. Состав входных и выходных данных. Использование предметной области "Садовод".
курсовая работа [789,1 K], добавлен 13.03.2013