Практическая обработка множества данных, представляющих собой массив указателей на записи
практическая обработка множества данных, представляющих собой массив указателей на записи
СОДЕРЖАНИЕ
Введение
.Описание программы
1.1Описание главной программы и перечень модулей
.2Модуль menumod.tpu
.3Модуль RabotaND.tpu
.4Модуль RabotaDR.tpu
2.Проверка работы программы
2.1Создание нового набора данных
.2Добавление новых элементов в конец НД
.3Просмотр всех элементов НД
.4Поиск элемента по номеру
.5Переход к работе с другим НД
.6Создание нового НД из всех элементов с заданным значением ключевого поля.
2.7 Сохранение всех элементов в другом НД
Заключение
Список использованных источников
Приложение А
Введение
Целью данной курсовой работы является практическая обработка множества данных, представляющих собой массив указателей на записи.
В программе необходимо реализовать следующие запросы к заданному множеству данных:
Дополнительно, в соответствии с моим вариантом (18 вариант), необходимо выполнить реализацию следующих запросов:
Множество данных должно представлять собой информацию о марках телевизорах:
В работе должны быть соблюдены следующие условия и ограничения:
Описание программы
1.1Описание главной программы и перечень модулей
Программа состоит из трех модулей и главной программы. Все подпрограммы, которые выполняют необходимые запросы по работе с НД, находятся в трех модулях (MenuMod, RabotaND, RabotaDR).
В начале работы программы мы указываем набор данных, с которым будем работать. Затем на экране отображается вертикальное меню. В этом меню будут указаны все запросы, которые пользователь может выполнить с набором данных. При выборе пункта меню «Выход» работа программы будет закончена. Вместе с меню на экране отображается номер текущего элемента и его содержимое.
В главной программе также происходит заполнение массива пунктов меню значениями.
Код главной программы:
Uses Crt, MenuMod, RabotaND, RabotaDR;
;
{Ввод имени файла}
{Инициализация переменной для обозначения текущего элемента}
{Заполнение массива пунктов меню значениями}
{Вывод на экран текущих НД и элемента}_Tek(FileName, tek);
{Вывод меню}_Meny(mas,2,2,punkt);
{Выполнение процедур в зависимости от выбраного пункта}punkt of
: {Создание нового НД и его просмотр}
2: {Добавление новых элементов в конец НД и его просмотр}
3: {Просмотр всех элементов НД}
4: {Поиск элемента}
5: {Переход к работе с другим НД и просмотр его содержимого}
: {Создание нового НД из всех элементов с заданным значением ключе-вого поля.}
7: {Cохранение всех элементов в другом НД}
Sohr_v_nov(FileName);;
{Цикл выполняется до того, как будет нажат ESC}answ=#27;.
1.2Модуль menumod.tpu
Данный модуль содержит подпрограмму, которая прорисовывает на экран вертикальное меню для выполнения запросов пользователя. Для навигации в данном меню используются клавиши «вверх», «вниз», «enter» и «esc» на клавиатуре.
Описательная часть данного модуля:
Unit menumod;crt;Massiv=array [1..25] of string;
var mas:massiv;
В данном модуле тип Massiv это массив пунктов меню, а переменная, принадлежащая этому типу, является пунктом меню.
В модуле есть одна процедура:
My_Meny(Mas:Massiv; var punkt:byte);
В процедуру из главной программы передаются массив пунктов меню, состоящий из следующих значений:
Mas[1]:='1:Создать новый НД';
Mas[2]:='2:Добавить новые элементы в конец НД';
Mas[3]:='3:Просмотреть все элементы НД';
Mas[4]:='4:Поиск элемента по номеру ';
Mas[5]:='5:Перейти к работе с другим НД';
Mas[6]:='6:Создание нового НД из всех элементов с заданным значением ключе-вого поля.';
Mas[7]:='7:Cохранение всех элементов в другом НД';
Из процедуры в главную программу передается значение переменной punkt, в соответсвии с которой выбирается один из пунктов оператора CASE и соответственно происходит выполнение определенных процедур в главной программе.
В процедуре описаны следующие переменные и константы:
Процедура передает в главную программу переменную punkt.
procedure My_Meny;x=1;
y=1;
k=7;i, pred,Max_dlin:integer;
otv:char;
x1,y1:byte;
Сначала все строки сравниваются и находится самая длинная строка. После этого строки дополняются до этой длины путем добавления пробелов. Затем вычисляются координаты правого нижнего угла окна, которое затем и прорисовывается процедурой window из стандартного модуля Crt. После в созданное окно выводится массив пунктов меню и подсвечивается первая позиция. Далее в цикле происходит считывание кода нажатой клавиши и в соответствии с кодом происходит присвоение переменной punkt определенного значения, а затем подсветка выбранного пункта.
begin
{Инициализация переменных}
{Определенние максимальной длины строки}
{Дополнение всех строк до максимальной}
{Расчет координат X1 и Y1}
{Прорисовка меню}
window (x,y,x1,y1);
For I:=1 to k do
begin
GotoXY(x,i);
Write(Mas[i]);
end;
{end for}
punkt:=1;
GotoXY(x,1);
{Подсветка первого поля меню}
Write(Mas[1]);
Repeat
Otv:=Readkey;
If Otv=#0 then Otv:=Readkey;
{end If}
{Реакция на нажатие клавиш}
Case Otv of
#27: {Нажатие клавиши esc}
{Выход}
#13: {Нажатие клавиши enter}
{Прорисовка нормального окна и выход из процедуры}
#80: {Нажатие клавиши вниз}
{Если был выбран последний пункт меню, то происходит переход на первый пункт, иначе перемещается вниз}
#72: {Нажатие клавиши ввверх}
{Если был выбран не первый пункт, то поднимаемся вверх, иначе перемещаемся на последний пункт}
end;
{Прорисовка поля меню в исход-ный цвет}
{Подсветка следующего выбранного поля меню} False
{end Repeat}
end;.
1.3Модуль RabotaND.tpu
Этот модуль содержит пять процедур для работы с набором данных.
Заголовок и описательная часть данного модуля представлены ниже:
unit RabotaND;menumod;
{Спецификация файла}
Tip=(cvet, gherno_bel, perenosn);
Televizor=record
nazvanie:string;
razmer:integer;
sr_stoimist:real;
TipTelevizor:Tip;
end;
var
File1, Filekl, Filenov: File of Televizor;
FileName, Filenamekluch, filenamenov, FilenamenovND: string;
TVzap:Televizor;
n:integer;
otv1, punkt, Otv, tek, numb:byte;
otv2, k:string;
answ:char;
В модуле описана спецификация файла и следующие переменные:
Процедуры, которые содержатся в модуле:
{Процедура для вывода текущего элемента}Vivod_Tek (var Filename:string; n:integer);
{Процедура создания нового набора данных}Sozdat_ND (var Filename:string; var n:integer);
{Процедура добавление элемента в конец набора данных}Dobavit_ND (var Filename:string; var n:integer);
{Процедура для просмотра содержимого набора данных}Prosmotr_ND (var Filename:string; var n:integer);
{Процедура для поиска элемента по введеному номеру}Poisk_Elem_ND (var Filename:string; var n:integer);
Процедура, которая создает новый набор данных:
Sozdat_ND;i,kol:integer;
{Ввод имени нового набора данных}
{Связывание файловой переменной с НД на диске}
{Открытие файла для записи}
{Ввод количества записей(kol)}i:=1 to kol do
{Ввод данных}
{Запись одной записи в НД}(File1,TVzap);;
{Закрытие файла}
{Изменение имени файла};
{end procedure Sozdat_ND}
В процедуру из главной программы передается только имя старого набора данных. В главную программу из процедуры передается имя нового набора данных и номер текущего элемента.
В процедуре создается и открывается для записи новый набор данных, затем в него вводится заданое количество записей. После создания НД он закрывается, а текущим элементом становится последний введенный элемент.
Процедура добавление элемента в конец набора данных:
Dobavit_ND;:=n+1;
{Связывание файловой переменной с НД на диске}
{Открытие файла для чтения}
{Поиск конца файла}
{Цикл для записи данных, который будет выполнятся пока пользователь не введет «No»}Otv2 <> 'No' do
{Ввод данных}
{Запись одной записи в НД}(File1,TVzap);
{Запрос на окончание заполнения} ('Продолжить заполнение?(Yes\No)');(Otv2);;
{Присвоение номера текущего элемента}:=numb;
{Закрытие файла} ;
{end procedure Dobavit_ND}
В процедуру из главной программы передается имя набора данных. В главную программу из процедуры передается номер текущего элемента.
В процедуре происходит открытие набора данных, затем нахождение его конца стандартной процедурой seek, после чего происходит запись элементов в конец НД. После каждого записанного элемента выводится запрос на окончание записи.
Процедура для просмотра содержимого набора данных:
Prosmotr_ND;
{Связывание файловой переменной с НД на диске}(File1, Filename);
{Открытие файла для чтения}(File1);
{Вывод имени текущего набора данных}
{Вывод шапки таблицы}
{Пока не закончится файл -- вывод элементов в таблицу}not eof(File1) do
{чтение одной записи из файла} (File1,TVzap);
{Выбор строки в зависимости от значения перечислимого типа}TVzap.tipTelevizor of:k:=' Цветной';_bel:k:=' Черно-белый';:k:=' Переносной';;
{Вывод содержимого записи}('?', numb:5,'?');(TVzap.nazvanie:18,'?');(TVzap.razmer:8,'?');(TVzap.sr_stoimist:16:1,'?');(k,'?');
{Вывод нижней границы таблицы}
{Присвоениею текущему номер последнего показанного элемента};
{Закрытие файла}(file1);;
В процедуру из главной программы передается имя набора данных. В главную программу из процедуры передается номер текущего элемента. После открытия набора данных процедура выводит его имя, затем шапку таблицы. Следуюющие действия выполняются в цикле, котороый будет выполнятся пока не закончится данный набор данных. В зависимости от значения переменной перечислимого типа в поле tipTelevizor оператором case просиходит присвоение переменной К определнного значения (цветной, черно-белый или переносной). После чего просиходит вывод элементов на экран. В конце переменной, содержащей номер текущего элемента, присваивается значение последнего элемента и набор данных закрывается.
Процедура для поиска элемента по введеному номеру
Poisk_Elem_ND;
{Связывание файловой переменной с НД на диске}
{Открытие файла для чтения}
{Запрос на ввод номера нужной записи}('Введите номер нужной записи');(n);
{Поиск нужной записи}(File1,n-1);
{Чтение записи из файла}(File1,TVzap);
{Присвоение переменной К значения в зависимости от значениея переменной перечислимого типа}
{Вывод шапки таблицы}
{Вывод элемента}
{Вывод нижней границы таблицы}
{Закрытие файла}
{Присовение нужного номера текущему элементу}:=n+1;;
{end procedure Poisk_Elem_ND}
Эта процедура обрабатывает запрос пользователя на поиск элемента в НД по его порядковому номеру и выводит информацию о данном элементе. В процедуру из главной программы передается имя набора данных. В главную программу из процедуры передается номер текущего элемента. После открытия набора данных процедура запращивает номер элемента, который следует найти. Затем процедурой seek(File1,n-1) в файле находится нужная запись. Эта запись выводится как единственный элемент таблицы и текущему значению присваивается номер элемента, который искали, плюс один. После вывода файл закрывается.
Процедура для вывода текущего элемента:
procedure Vivod_Tek;
{Присвоение выводимому номеру номер текущего элемента}
numb:=n;
{Связывание файловой переменной с НД на диске}
{Открытие файла для чтения}
{Поиск нужной записи}
seek(File1,numb-1);
{Чтение записи из файла}
{Присвоение переменной К значения в зависимости от значениея переменной перечислимого типа}
{Вывод шапки таблицы}
{Вывод элемента}
{Вывод нижней границы таблицы}
{Закрытие файла}(file1);;
В процедуру из главной программы передается имя набора данных и номер текущего элемента. Поиск и вывод элемента происходит так же, как в процедуре для поиска элемента по введеному номеру procedure Poisk_Elem_ND.
1.4Модуль RabotaDR.tpu
Этот модуль содержит три процедуры, в которых происходи обращение или переход к работе с другим набором данных
Заголовок и описательная часть данного модуля представлены ниже:
RabotaDR;RabotaND;
Этот модуль требует подключения описанного ранее модуля RabotaND, так как в нем описано большенство переменных, которые используются в модуле RabotaDR. Никаких собственных переменных в модуле RabotaDR не описано.
В данному модуле находятся следующие процедуры:
{Процедура для перехода к друому НД}Perehod_Drug_ND (var Filename:string;);
{Процедура создания нового НД из всех элементов с заданным значением ключе-вого поля}Sozdat_ND_kl (var Filename:string; var n:integer);
{Процедура сохраниения всех элементов в другом НД}Sohr_v_nov (var Filename:string; var n:integer);
Процедура для перехода к друому НД:
Perehod_Drug_ND;DifFilename:string;
{Вывод имени текущего набора данных} ('Ваш текущий набор данных - ', Filename);
{Запрос на вывод нового адреса НД}('Введите путь к необходимому набору данных');(DifFilename);
{Замена имени старого набора данных на имя нового набора}:=DifFilename;
{Вывод имени текущего набора данных}('Ваш новый набор данных - ', filename);;
{end procedure Perehod_Drug_ND;}
Эта процедура позволяет переходить от одного набора данных ко второму. В процедуру из главной программы передается имя набора данных. В процедуре описана переменная, содержащие имя файла, к которому будет производиться переход. Сперва выводится имя текущего набора данных. Затем появляется запрос на ввод нового имени. После чего переменой со старым именем присваивается значение нового имени. Эта переменная, уже с новым именем, передается обратно в основную программу.
Процедура создания нового НД из всех элементов с заданным значением ключевого поля:
Sozdat_ND_kl;
{Запрос ключевого поля}z: Tip;_tipa: byte;
{Связывание файловой переменной с НД на диске}
{Открытие файла для чтения}
{Запрос на ввод имени файла, который будут сохранены элементы с заданым ключевым полем }
{Связывание второй файловой переменной со вторым НД на диске}
{Открытие второго файла для записи}
{Запрос на значение ключевого поля}
{Выбор значения перечислимого типа в зависимости от выбранного пользователем типа}vibor_tipa of
: z:=cvet;
: z:=gherno_bel;
: z:=perenosn;;
{Пока не достигнут конец файла, поиск} not eof(file1) do
{Чтение одной записи}(File1,TVzap);
{Если содержимое ключевого поля совпадает с нужным}TVzap.TipTelevizor = z then
{Запись записи в новый файл}(Filekl, TVzap);;
{Закрытие файлов}
{Изменение имени файла, с которым будет продолжаться работа}:=filenamekluch;;
В процедуру из главной программы передается имя набора данных, из которого мы будем записывать элементы. В процедуре описаны следующие переменные:
Процедура запрашивает имя нового набора данных, в который будут записаны элементы с выбранным значением ключевого поля. Потом просходит выбор нужного значения ключевого поля. Затем в цикле выполняется считываение одной записи из первого файла, и, если значение ее ключевого поля соответсвует нужному, этот элемент записывается в новый файл. После достижения конца файла, оба файла закрываются.
Процедура сохраниения всех элементов в другом НД:
Sohr_v_nov;
{Запрос ключевого поля}
{Связывание файловой переменной с НД на диске}
{Открытие файла для чтения}
{Запрос имени второго НД}
{Связывание файловой переменной со вторым НД на диске}
{Открытие второго файла}
{Переход в конец второго файла}(Filenov,filesize(Filenov));
{Пока недостигнут конец файла}not eof(file1) do
{Чтение из первого файла}
{Запись во второй файл};
{Закрытие двух файлов}:=1;;
Данная процедура обеспечивает сохранение всех элементов текущего набора данных в другом. В процедуру из главной программы передается имя набора данных, из которого будет производиться сохранение. Процедура запрашивает имя файла, в который будет производиться запись, устанавливает указатель в его конце. Далее одна запись читается из первого файла и записывается во второй. Когда достигается конец первого файла, цикл заканчивается, и оба файла закрываются.
2Проверка работы программы
2.1Создание нового набора данных
После запуска программы следует ввести имя файла, с которым будет производиться работа. Это представлено на рисунке 1.
Рисунок 1 - Ввод пути к файлу
После того, как мы ввели имя файла на экране появиться вертикальное меню с запросами. Также там выводится имя текущего НД, а так же информацию о номере текущего элемента и его содержимом. Это всё изображено на рисунке 2.
Рисунок 2 - Первоначальный запуск
Выберем пункт меню «Создать новый НД» и нажмем клавишу «Enter». Теперь нам следует ввести имя нового файла и количество записей, которое мы планируем в него занести. Это изображено на рисунке 3.
Рисунок 3 - Ввод имени нового файла и количества записей
Затем мы по очереди вводим все записи. Процесс представлен на рисунке 4
Рисунок 4 - Исходное состояние НД
После того, как мы ввели последний элемент, программа автоматически выводит содержимое только что созданного файла в виде таблицы, которую мы можем видеть на рисунке 5.
Рисунок 5 - Вывод содержимого файла
Для того, чтобы вернуться к основному меню, следует нажать клавишу Enter.
2.2Добавление новых элементов в конец НД
В меню выберем пункт «Добавить новый элемент в конец НД» и нажмем клавишу «Enter». Для примера, введем название телевизора «Philips 32», размер телевизора «32», среднюю стоимость «560», а тип телевизора выберем «цветной», введя для этого цифру 2 и нажав «Enter». Результат ввода предоставлен на рисунке 6.
Рисунок 6 - Процесс добавления элемента в конец НД
Элемент будет внесен в список на последнее место и на экран будет выведен уже обновленный НД. Результат изображён на рисунке 7.
Рисунок 7 - Результат выполнения запроса «Добавление нового элемента в конец НД»
После того, как мы вернемся обратно в меню, мы можем увидеть, что теперь на экране в качестве текущего выводится тот элемент, который мы только что ввели. Это изображено на рисунке 8
Рисунок 8 - Меню после запроса
Для возврата к основному меню, следует нажать клавишу Enter.
2.3Просмотр всех элементов НД
Для того, чтобы просмотреть все элементы НД, следует выбрать в меню пункт «Просмотреть все элементы НД» и нажать клавишу «Enter». После этого на экран будет выведено имя текущего НД и его содержимое виде таблицы. Вывод всех элементов набора данных «D:\2ND.dat» представлен на рисунке 9.
Рисунок 9 - Просмотр всех элементов НД
2.4Поиск элемента по номеру
Выберем пункт меню «Поиск элемента по номеру» и нажмем клавишу <Enter>. Введём номер элемента для поиска. Допустим, мы ввели номер «3». В результате на экран будет выведена информация о 3-ем элементе. Результат изображён на рисунке 10.
Рисунок 10 - Ввод номера элемента для поиска
На рисунке 11 изображено состояние главного меню после запроса. Мы можем видеть, что текущим элементом стал тот, который мы искали.
Рисунок 11 - Меню после запроса
2.5Переход к работе с другим НД
Изначально мы работали с НД «D:\2ND.dat». Допустим, мы хотим перейти к работе с НД «D:\1ND.dat». Для этого выберем пункт меню «Перейти к работе с другим НД» и нажмем клавишу «Enter». Программа вывела имя текущего набора данных и нам надо ввести имя нового набора данных, Результат изображён на рисунке 12.
Рисунок 12 - Ввод имени нового НД
После этого происходит переход к новому НД и сразу автоматически выводится его содержимое. Это изображено на рисунке 13
Рисунок 13 - Содержимое НД, к которому был произведен переход
2.6Создание нового НД из всех элементов с заданным значением ключевого поля
Выберем пункт меню «Создание нового НД из всех элементов с заданным значением ключевого поля» и нажмем клавишу «Enter». На экране будет предложено выбрать значение ключевого поля. Можно выбрать один из трех типов телевизоров: Цветной, Черно-белый и Переносной. Например, нам нужно создать новый файл, в котором будут храниться записи только о цветных телевизорах. Поэтому мы сначала введем имя нового файла, а затем выберем «1».
Рисунок 14 - Создание файла, в котором будут сохранены элементы с заданным значеним ключевого поля
Для сравнения, на рисунке 15 изображено содержание начального набора данных.
После того, как мы выберем значение ключевого поля и нажмем «Enter», мы можем увидеть содержимое нового файла, в который скопированы записи с заданным значением ключевого поля. Это изображено на рисунке 16
Рисунок 15 - Исходный НД
Рисунок 16 - Созданный НД
2.7Сохранение всех элементов в другом НД
Выберем пункт меню «Сохранение всех элементов в другом НД» и нажмем клавишу «Enter». Программа запросит имя НД, в который следует скопировать текущий. Это изображено на рисунке 17
Рисунок 17 - Запрос на имя нового файла
На рисунках 18 и 19 изображены два исходных файла, а на рисунке 20 мы можем видеть файл после копирования в него другого.
Рисунок 18 - Первый набор данных
Рисунок 19 - Второй набор данных
Рисунок 20 - Результат выполнения запроса «Сохранение всех элементов в другом НД»
Заключение
программа данное множество
В результате разработки курсовой работы, была создана программа для работы с набором данных. Эта программа может создать НД в виде записей и напрямую записать их в файл. Также с помощью программы можно просматривать уже созданные наборы данных. Реализован поиск элемента в файле по его номеру и добавление элементов в конец уже созданного НД. Возможен переход от работы с одним НД к другому и копирование содержимого одного файла в другой. Также, в соответствии с индивидуальным заданием, возможно создание нового НД из всех элементов с заданным значением ключевого поля.
Все условия и ограничения, описанные в задачах и целях данной курсовой работы, были соблюдены. Как было установлено во второй главе, вся работа с НД выполняется корректно.
Список использованных источников
1.Зуев Е.А. Программирование на языке Turbo Pascal 6.0,7.0,/ Е.А. Зуев// М.:Веста,Радио и связь, 1993. - 376с.
.Введение в программирование [Текст] : учеб. пособие для вузов по направлению и специальности Асои [Текст] / Л.В. Шапоров [и др.]; под ред. И.В. Фленов. - М. : Высшая школа, 2005. - 601 с.
.Свободная энциклопедия ВикипедиЯ [Электронный ресурс]. - 2011. - Режим доступа: #"justify">Приложение А
ПОЛНЫЙ КОД ПРОГРАММНОГО КОМПЛЕКСА
Листинг основной программы:
Uses Crt, MenuMod, RabotaND, RabotaDR;
;
{Ввод имени файла}('Введите путь к файлу: ');(Filename);
{Инициализация переменной для обозначения текущего элемента}:=2;
{Заполнение массива пунктов меню значениями}[1]:='1:Создать новый НД';[2]:='2:Добавить новые элементы в конец НД';[3]:='3:Просмотреть все элементы НД';[4]:='4:Поиск элемента по номеру ';[5]:='5:Перейти к работе с другим НД';[6]:='6:Создание нового НД из всех элементов с заданным значением ключе-вого поля.';[7]:='7:Cохранение всех элементов в другом НД';;
{Вывод на экран текущих НД и элемента}(14);(1, 9);('Текущий НД - ',Filename);(1,12);('Номер текущего элемента - ',n-1);(1,13);('Содержание текущего элемента:');(1,14);
tek:=n-1;
Vivod_Tek(FileName, tek);(2,2);
{Вывод меню}_Meny(mas,punkt);
textcolor (LightCyan);
{Выполнение процедур в зависимости от выбраного пункта}punkt of
: {Создание нового НД и его просмотр}
begin
Sozdat_ND (FileName, n);
Prosmotr_ND (FileName, n);
end;
: {Добавление новых элементов в конец НД и его просмотр}
begin
Dobavit_ND (FileName, n);
Prosmotr_ND (FileName, n);
end;
: {Просмотр всех элементов НД}
Prosmotr_ND (FileName, n);
: {Поиск элемента}
Poisk_Elem_ND (FileName, n);
: {Переход к работе с другим НД и просмотр его содержимого}
begin
Perehod_Drug_ND (FileName);
Prosmotr_ND (FileName, n);
end;
: {Создание нового НД из всех элементов с заданным значением ключе-вого поля.}
begin
Sozdat_ND_kl (FileName, n);
Prosmotr_ND (FileName, n);
end;
: {Cохранение всех элементов в другом НД}
Sohr_v_nov(FileName, n);;('Для возврата нажмите Enter, для выхода нажмите Esc');
answ:=Readkey;
{Цикл выполняется до того, как будет нажат ESC}answ=#27;.
Листинг модуля menumod:
menumod;
crt;
Massiv=array [1..7] of string;mas:massiv;
My_Meny(Mas:Massiv; var punkt:byte);
My_Meny;x=1;=1;
k=7;i,pred,Max_dlin:integer;:char;,y1:byte;
{Инициализация переменных}
; pred:=0; max_dlin:=0;
{Определенние максимальной длины строки}i:=1 to k dolength(Mas[i])>max_dlin then max_dlin:=length(Mas[i]);
{end if}
{end for}
{Дополнение всех строк до максимальной}i:=1 to k dolength(Mas[i])<>max_dlin do Mas[i]:=Mas[i]+' ';
{end while}
{end for}
{Расчет координат X1 и Y1}:=max_dlin+x+3;:=k+y+3;
{Прорисовка меню}(x,y,x1,y1);I:=1 to k do(x,i);(Mas[i]);;
{end for}:=1;(x,1);(DarkGray);(0);
{Подсветка первого поля меню}(Blue);(15);(Mas[1]);:=punkt;:=Readkey;Otv=#0 then Otv:=Readkey;
{end If}
{Реакция на нажатие клавиш}Otv of
{Нажатие клавиши esc}
#27:begin
punkt:=0;(0);
{Нажатие клавиши enter}
#13: begin(1, 1, 80, 25);(black);(10);;;;
{Нажатие клавиши вниз}
#80: If punkt<k then punkt:=punkt+1punkt:=1;
{end If}
{Нажатие клавиши ввверх}
#72: If punkt>1 then punkt:=punkt-1punkt:=k;
{end If};
{Прорисовка поля меню в исход-ный цвет}(x,pred);(DarkGray);(yellow);(Mas[pred]);
{Подсветка следующего выбранного поля меню} (x,punkt);(Blue);(15);(Mas[punkt]);False
{end Repeat};.
Листинг модуля RabotaND:
unit RabotaND;
menumod;
{Спецификация файла}
Tip=(cvet, gherno_bel, perenosn);
Televizor=record
nazvanie:string;
razmer:integer;
sr_stoimist:real;
TipTelevizor:Tip;
end;
var
File1, Filekl, File2: File of Televizor;
FileName, Filenamekluch, filenamenov, FilenamenovND: string;
TVzap:Televizor;
n:integer;
otv1, punkt, Otv, tek, numb:byte;
otv2, k:string;
answ:char;
{Процедура для вывода текущего элемента}Vivod_Tek (var Filename:string; n:integer);
{Процедура создания нового набора данных}Sozdat_ND (var Filename:string; var n:integer);
{Процедура добавление элемента в конец набора данных}Dobavit_ND (var Filename:string; var n:integer);
{Процедура для просмотра содержимого набора данных}Prosmotr_ND (var Filename:string; var n:integer);
{Процедура для поиска элемента по введеному номеру}Poisk_Elem_ND (var Filename:string; var n:integer);
Sozdat_ND;i,kol:integer;
{Ввод имени нового набора данных}
writeln('Введите имя нового набора данных: ');
readln(FilenamenovND);
{Связывание файловой переменной с НД на диске}
assign(File1, FilenamenovND);
{Открытие файла для записи}
rewrite(File1);
{Ввод количества записей}
write('Количество записей: ');
readln(kol);
numb:=1;
for i:=1 to kol do
begin
{Ввод данных}
write('Название телевизора: ');
readln(TVzap.nazvanie);
write('Размер телевизора: ');
readln(TVzap.razmer);
write('Средняя стоимость: ');
readln(TVzap.sr_stoimist);
write('Тип телевизора (1: Цветной; 2: Черно-белый; 3:Переносной): ');
readln(otv1);
case otv1 of
1:TVzap.TipTelevizor:=cvet;
2:TVzap.TipTelevizor:=gherno_bel;
3:TVzap.TipTelevizor:=perenosn;
end;
numb:=numb+1;
n:=numb;
{Запись одной записи в НД}
write(File1,TVzap);
end;
{Закрытие файла}
close(File1);
{Изменение имени файла}
Filename:=FilenamenovND;;
{end procedure Sozdat_ND}
Dobavit_ND;
numb:=n+1;
{Связывание файловой переменной с НД на диске}
assign(File1, Filename);
{Открытие файла для чтения}
reset(File1);
{Поиск конца файла}
seek(File1,filesize(File1));
while Otv2 <> 'No' do
begin
{Ввод данных}
write('Название телевизора: ');
readln(TVzap.nazvanie);
write('Размер телевизора: ');
readln(TVzap.razmer);
write('Средняя стоимость: ');
readln(TVzap.sr_stoimist);
write('Тип телевизора (1: Цветной; 2: Черно-белый; 3:Переносной);');
readln(otv1);
case otv1 of
1:TVzap.TipTelevizor:=cvet;
2:TVzap.TipTelevizor:=gherno_bel;
3:TVzap.TipTelevizor:=perenosn;
end;
numb:=numb+1;
{Запись одной записи в НД}
write(File1,TVzap);
writeln('Продолжить заполнение?(Yes\No)');
readln(Otv2);
end;
n:=numb;
{Закрытие файла}
close(File1);;
{end procedure Dobavit_ND}
Prosmotr_ND;
{Связывание файловой переменной с НД на диске}
assign(File1, Filename);
{Открытие файла для чтения}
reset(File1);
{Вывод имени текущего набора данных}
writeln('Ваш набор данных: ', Filename);
numb:=1;
{Вывод шапки таблицы}
writeln('???????????????????????????????????????????????????????????????????????????');
writeln('? # ? Название ? Размер ? Ср.стоимость ? Тип ?');
writeln('???????????????????????????????????????????????????????????????????????????');
{Пока не закончится файл -- вывод элементов в таблицу}
while not eof(File1) do
begin
{чтение одной записи из файла}
Read(File1,TVzap);
{Выбор строки в зависимости от значения перечислимого типа}
case TVzap.tipTelevizor of
cvet:k:=' Цветной';
gherno_bel:k:=' Черно-белый';
perenosn:k:=' Переносной';
end;
{Вывод содержимого записи}
write('?', numb:5,'?');
write (TVzap.nazvanie:18,'?');
write (TVzap.razmer:8,'?');
write (TVzap.sr_stoimist:16:1,'?');
writeln (k,'?');
writeln('???????????????????????????????????????????????????????????????????????????');
{Присвоениею текущему номер последнего показанного элемента}
numb:=numb+1;
n:=numb;
end;
{Закрытие файла}
close(file1);;
Poisk_Elem_ND;
{Связывание файловой переменной с НД на диске}
assign(File1, Filename);
{Открытие файла для чтения}
reset(File1);
{Запрос на ввод номера нужной записи}
writeln('Введите номер нужной записи');
readln(n);
{Поиск нужной записи}
seek(File1,n-1);
{Чтение записи из файла}
read(File1,TVzap);
{Присвоение переменной К значения в зависимости от значениея переменной перечислимого типа}
case TVzap.tipTelevizor of
cvet:k:=' Цветной';
gherno_bel:k:=' Черно-белый';
perenosn:k:=' Переносной';
end;
{Вывод шапки таблицы}
writeln('???????????????????????????????????????????????????????????????????????????');
writeln('? # ? Название ? Размер ? Ср.стоимость ? Тип ?');
writeln('???????????????????????????????????????????????????????????????????????????');
{Вывод элемента}
write('?', n:5,'?');
write (TVzap.nazvanie:18,'?');
write (TVzap.razmer:8,'?');
write (TVzap.sr_stoimist:16:1,'?');
writeln (k,'?');
{Вывод нижней границы таблицы}
writeln('???????????????????????????????????????????????????????????????????????????');
{Закрытие файла}
close(file1);
{Присовение нужного номера текущему элементу}
N:=n+1;;
{end procedure Poisk_Elem_ND}
Vivod_Tek;
{Присвоение выводимому номеру номер текущего элемента}
numb:=n;
{Связывание файловой переменной с НД на диске}
assign(File1, Filename);
{Открытие файла для чтения}
reset(File1);
{Поиск нужной записи}
seek(File1,numb-1);
{Чтение записи из файла}
read(File1,TVzap);
{Присвоение переменной К значения в зависимости от значениея переменной перечислимого типа}
case TVzap.tipTelevizor of
cvet:k:=' Цветной';
gherno_bel:k:=' Черно-белый';
perenosn:k:=' Переносной';
end;
{Вывод шапки таблицы}
writeln('???????????????????????????????????????????????????????????????????????????');
writeln('? # ? Название ? Размер ? Ср.стоимость ? Тип ?');
writeln('???????????????????????????????????????????????????????????????????????????');
{Вывод элемента}
write('?', numb:5,'?');
write (TVzap.nazvanie:18,'?');
write (TVzap.razmer:8,'?');
write (TVzap.sr_stoimist:16:1,'?');
writeln (k,'?');
{Вывод нижней границы таблицы} ('???????????????????????????????????????????????????????????????????????????');
{Закрытие файла}(file1);;
.
Листинг модуля RabotaDR:
unit RabotaDR;
RabotaND;
{Процедура для перехода к друому НД}Perehod_Drug_ND (var Filename:string);
{Процедура создания нового НД из всех элементов с заданным значением ключе-вого поля}Sozdat_ND_kl (var Filename:string; var n:integer);
{Процедура сохраниения всех элементов в другом НД}Sohr_v_nov (var Filename:string; var n:integer);
Perehod_Drug_ND;DifFilename:string;
{Вывод имени текущего набора данных}('Ваш старый набор данных: ', Filename);
{Запрос на вывод нового адреса НД}('Введите название нового НД ');(DifFilename);
{Замена имени старого набора данных на имя нового набора}:=DifFilename;
{Вывод имени текущего набора данных}('Ваш новый набор данных: ', filename);:=1;;
{end procedure Perehod_Drug_ND;}
Sozdat_ND_kl;
{Запрос ключевого поля}z: Tip;_tipa: byte;
{Связывание файловой переменной с НД на диске}(File1, Filename);
{Открытие файла для чтения}(File1);
{Запрос на ввод имени файла, который будут сохранены элементы с заданым ключевым полем }('Введите имя файла, в которой будут сохранены элементы с заданым ключевым полем : ');(filenamekluch);
{Связывание файловой переменной с НД на диске}(Filekl, filenamekluch);
{Открытие файла для записи}(Filekl);
{Запрос на значение ключевого поля}('Выбирите тип телевизора (1: Цветной; 2: Черно-белый; 3: Переносной;)');(vibor_tipa);
{Выбор значения перечислимого типа в зависимости от выбранного пользователем типа}vibor_tipa of
: z:=cvet;
: z:=gherno_bel;
3: z:=perenosn;;
{Пока не достигнут конец файла, поиск} not eof(file1) do
{Чтение одной записи}(File1,TVzap);
{Если содержимое ключевого поля совпадает с нужным}TVzap.TipTelevizor = z then
{Запись записи в новый файл}(Filekl, TVzap);;
{Закрытие файлов} (file1);(filekl);:=filenamekluch;:=1;;
Sohr_v_nov;
{Запрос ключевого поля}
{Связывание файловой переменной с НД на диске}(File1, Filename);
{Открытие файла для чтения}(File1);('Ваш текущий НД -- ', Filename);
{Запрос имени второго НД}('Введите имя НД, в который нужно произвести копирование : ');(filenamenov);
{Связывание файловой переменной со вторым НД на диске}(File2, filenamenov);
{Открытие второго файла}(File2);
{Переход в конец второго файла}(File2,filesize(File2));
{Пока недостигнут конец файла}not eof(file1) do
{Чтение из первого файла}(File1,TVzap);
{Запись во второй файл}(File2,TVzap);;
{Закрытие двух файлов}(file1);(File2);:=2;:=filenamenov;;.
Больше работ по теме:
Предмет: Информационное обеспечение, программирование
Тип работы: Курсовая работа (т)
Новости образования
КОНТАКТНЫЙ EMAIL: [email protected]
Скачать реферат © 2017 | Пользовательское соглашение
ПРОФЕССИОНАЛЬНАЯ ПОМОЩЬ СТУДЕНТАМ