Практическая обработка множества данных, представляющих собой массив указателей на записи

 














практическая обработка множества данных, представляющих собой массив указателей на записи

СОДЕРЖАНИЕ


Введение

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

1.1Описание главной программы и перечень модулей

.2Модуль menumod.tpu

.3Модуль RabotaND.tpu

.4Модуль RabotaDR.tpu

2.Проверка работы программы

2.1Создание нового набора данных

.2Добавление новых элементов в конец НД

.3Просмотр всех элементов НД

.4Поиск элемента по номеру

.5Переход к работе с другим НД

.6Создание нового НД из всех элементов с заданным значением ключевого поля.

2.7 Сохранение всех элементов в другом НД

Заключение

Список использованных источников

Приложение А


Введение


Целью данной курсовой работы является практическая обработка множества данных, представляющих собой массив указателей на записи.

В программе необходимо реализовать следующие запросы к заданному множеству данных:

  1. Создание НД.
  2. Добавление новых элементов в конец НД.
  3. Просмотр всех элементов НД.
  4. Поиск элемента по номеру (позиционирование текущего элемента).
  5. Переход к работе с другим НД.

Дополнительно, в соответствии с моим вариантом (18 вариант), необходимо выполнить реализацию следующих запросов:

  1. Создание нового НД из всех элементов с заданным значением ключевого поля.
  2. Сохранение всех элементов в другом НД.

Множество данных должно представлять собой информацию о марках телевизорах:

  1. название (string);
  2. размер по диагонали (integer);
  3. средняя стоимость (real);
  4. тип: цветной, черно-белый, переносной (перечислимый тип).

В работе должны быть соблюдены следующие условия и ограничения:

  1. Главную процедуру программы с реализацией простейшего меню следует определить в отдельном модуле.
  2. Процедуры, реализующие запросы, должны быть размещены в одном или более модулях.
  3. Глобальные данные: Спецификация файла. Никаких других глобальных переменных использовать нельзя.
  4. Вместе с меню на экране должно быть отображено:
  5. номер текущего элемента;
  6. содержимое текущего элемента.
  7. На экран выводить элементы в виде таблицы (один элемент - одна строка таблицы).
  8. Если после выполнения запроса изменяется хотя бы один элемент, то заканчивать запрос выводом всего множества элементов.
  9. Тестами к заданиям служат 2 НД с правдоподобной информацией.

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


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 и соответственно происходит выполнение определенных процедур в главной программе.

В процедуре описаны следующие переменные и константы:

  1. Х и у - Переменные для позиционирования левого верхнего угла окна, в котором будет выводиться меню.
  2. Х1 и У1 - Переменные для позиционирования правого нижнего угла окна, в котором будет выводиться меню.
  3. К - Количество пунктов меню.
  4. Otv - переменная в которой находиться код нажатой клавиши.
  5. Pred - Предыдущий для выбранного пункта меню
  6. Max_dlin - Длина самой большой строки.

Процедура передает в главную программу переменную 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;


В модуле описана спецификация файла и следующие переменные:

  1. File1, Filekl, Filenov - Переменные файлового типа
  2. FileName, Filenamekluch, filenamenov, FilenamenovND - Переменные, содержащие имена файлов.
  3. TVzap - Переменная типа запись
  4. N - Переменная, которая используется для обозначения текущего элемента из НД.

Процедуры, которые содержатся в модуле:


{Процедура для вывода текущего элемента}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;;


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

  1. Z - переменная перечислимого типа для выбора ключевого поля.
  2. vibor_tipa - для выполнения запроса о значении ключевого поля.

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

Процедура сохраниения всех элементов в другом НД:

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 | Пользовательское соглашение

Скачать      Реферат

ПРОФЕССИОНАЛЬНАЯ ПОМОЩЬ СТУДЕНТАМ