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

  • Вид работы:
    Курсовая работа (т)
  • Предмет:
    Информационное обеспечение, программирование
  • Язык:
    Русский
    ,
    Формат файла:
    MS Word
    2,37 Мб
  • Опубликовано:
    2012-06-21
Вы можете узнать стоимость помощи в написании студенческой работы.
Помощь в написании работы, которую точно примут!

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














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

СОДЕРЖАНИЕ

Введение

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

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 вариант), необходимо выполнить реализацию следующих запросов:

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

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

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

8 название (string);

9 размер по диагонали (integer);

10   средняя стоимость (real);

11   тип: цветной, черно-белый, переносной (перечислимый тип).

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

12   Главную процедуру программы с реализацией простейшего меню следует определить в отдельном модуле.

13   Процедуры, реализующие запросы, должны быть размещены в одном или более модулях.

14   Глобальные данные: Спецификация файла. Никаких других глобальных переменных использовать нельзя.

15   Вместе с меню на экране должно быть отображено:

· номер текущего элемента;

· содержимое текущего элемента.

16   На экран выводить элементы в виде таблицы (один элемент - одна строка таблицы).

17   Если после выполнения запроса изменяется хотя бы один элемент, то заканчивать запрос выводом всего множества элементов.

18   Тестами к заданиям служат 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      
Сохранение всех элементов в другом НД


Рисунок 17 - Запрос на имя нового файла

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

Рисунок 18 - Первый набор данных

Рисунок 19 - Второй набор данных

Рисунок 20 - Результат выполнения запроса «Сохранение всех элементов в другом НД»

Заключение

программа данное множество

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

Все условия и ограничения, описанные в задачах и целях данной курсовой работы, были соблюдены. Как было установлено во второй главе, вся работа с НД выполняется корректно.

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

1.Зуев Е.А. Программирование на языке Turbo Pascal 6.0,7.0,/ Е.А. Зуев// М.:Веста,Радио и связь, 1993. - 376с.

.Введение в программирование [Текст] : учеб. пособие для вузов по направлению и специальности “Асои” [Текст] / Л.В. Шапоров [и др.]; под ред. И.В. Фленов. - М. : Высшая школа, 2005. - 601 с.

.Свободная энциклопедия ВикипедиЯ [Электронный ресурс]. - 2011. - Режим доступа: http://ru.wikipedia.org. - Дата доступа: 15.05.2011.

Приложение А

ПОЛНЫЙ КОД ПРОГРАММНОГО КОМПЛЕКСА

Листинг основной программы:

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;;.

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

 

Не нашли материал для своей работы?
Поможем написать уникальную работу
Без плагиата!