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

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

Рубрика Программирование, компьютеры и кибернетика
Вид курсовая работа
Язык русский
Дата добавления 22.06.2012
Размер файла 3,5 M

Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже

Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.

Размещено на http://www.allbest.ru/

Размещено на http://www.allbest.ru/

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

СОДЕРЖАНИЕ

  • Введение
  • 1.Описание программы
    • 1.1 Описание главной программы и перечень модулей
    • 1.2 Модуль menumod.tpu
    • 1.3 Модуль RabotaND.tpu
    • 1.4 Модуль RabotaDR.tpu
  • 2.Проверка работы программы
    • 2.1 Создание нового набора данных
    • 2.2 Добавление новых элементов в конец НД
    • 2.3 Просмотр всех элементов НД
    • 2.4 Поиск элемента по номеру
    • 2.5 Переход к работе с другим НД
    • 2.6 Создание нового НД из всех элементов с заданным значением ключевого поля.
    • 2.7 Сохранение всех элементов в другом НД
  • Заключение
  • Список использованных источников
  • Приложение А
  • Введение
  • Целью данной курсовой работы является практическая обработка множества данных, представляющих собой массив указателей на записи.
  • В программе необходимо реализовать следующие запросы к заданному множеству данных:

Создание НД.

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

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

Поиск элемента по номеру (позиционирование текущего элемента).

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Тестами к заданиям служат 2 НД с правдоподобной информацией.

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

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

Программа состоит из трех модулей и главной программы. Все подпрограммы, которые выполняют необходимые запросы по работе с НД, находятся в трех модулях (MenuMod, RabotaND, RabotaDR).

В начале работы программы мы указываем набор данных, с которым будем работать. Затем на экране отображается вертикальное меню. В этом меню будут указаны все запросы, которые пользователь может выполнить с набором данных. При выборе пункта меню «Выход» работа программы будет закончена. Вместе с меню на экране отображается номер текущего элемента и его содержимое.

В главной программе также происходит заполнение массива пунктов меню значениями.

Код главной программы:

Uses Crt, MenuMod, RabotaND, RabotaDR;

begin

clrscr;

{Ввод имени файла}

{Инициализация переменной для обозначения текущего элемента}

{Заполнение массива пунктов меню значениями}

repeat

{Вывод на экран текущих НД и элемента}

Vivod_Tek(FileName, tek);

{Вывод меню}

My_Meny(mas,2,2,punkt);

{Выполнение процедур в зависимости от выбраного пункта}

case punkt of

1: {Создание нового НД и его просмотр}

2: {Добавление новых элементов в конец НД и его просмотр}

3: {Просмотр всех элементов НД}

4: {Поиск элемента}

5: {Переход к работе с другим НД и просмотр его содержимого}

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

7: {Cохранение всех элементов в другом НД}

Sohr_v_nov(FileName);

end;

{Цикл выполняется до того, как будет нажат ESC}

until answ=#27;

end.

1.2 Модуль menumod.tpu

Данный модуль содержит подпрограмму, которая прорисовывает на экран вертикальное меню для выполнения запросов пользователя. Для навигации в данном меню используются клавиши «вверх», «вниз», «enter» и «esc» на клавиатуре.

Описательная часть данного модуля:

Unit menumod;

interface

uses crt;

type Massiv=array [1..25] of string;

var mas:massiv;

В данном модуле тип Massiv это массив пунктов меню, а переменная, принадлежащая этому типу, является пунктом меню.

В модуле есть одна процедура:

procedure 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 и У1 - Переменные для позиционирования правого нижнего угла окна, в котором будет выводиться меню.

К - Количество пунктов меню.

Otv - переменная в которой находиться код нажатой клавиши.

Pred - Предыдущий для выбранного пункта меню

Max_dlin - Длина самой большой строки.

Процедура передает в главную программу переменную punkt.

procedure My_Meny;

const x=1;

y=1;

k=7;

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

{Прорисовка поля меню в исход-ный цвет}

{Подсветка следующего выбранного поля меню}

until False

{end Repeat}

end;

end.

1.3 Модуль RabotaND.tpu

Этот модуль содержит пять процедур для работы с набором данных.

Заголовок и описательная часть данного модуля представлены ниже:

unit RabotaND;

interface

uses menumod;

type

{Спецификация файла}

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;

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

File1, Filekl, Filenov - Переменные файлового типа

FileName, Filenamekluch, filenamenov, FilenamenovND - Переменные, содержащие имена файлов.

TVzap - Переменная типа запись

N - Переменная, которая используется для обозначения текущего элемента из НД.

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

{Процедура для вывода текущего элемента}

procedure Vivod_Tek (var Filename:string; n:integer);

{Процедура создания нового набора данных}

procedure Sozdat_ND (var Filename:string; var n:integer);

{Процедура добавление элемента в конец набора данных}

procedure Dobavit_ND (var Filename:string; var n:integer);

{Процедура для просмотра содержимого набора данных}

procedure Prosmotr_ND (var Filename:string; var n:integer);

{Процедура для поиска элемента по введеному номеру}

procedure Poisk_Elem_ND (var Filename:string; var n:integer);

Процедура, которая создает новый набор данных:

procedure Sozdat_ND;

var i,kol:integer;

begin

{Ввод имени нового набора данных}

{Связывание файловой переменной с НД на диске}

{Открытие файла для записи}

{Ввод количества записей(kol)}

for i:=1 to kol do

begin

{Ввод данных}

{Запись одной записи в НД}

write(File1,TVzap);

end;

{Закрытие файла}

{Изменение имени файла}

end;

{end procedure Sozdat_ND}

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

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

Процедура добавление элемента в конец набора данных:

procedure Dobavit_ND;

begin

numb:=n+1;

{Связывание файловой переменной с НД на диске}

{Открытие файла для чтения}

{Поиск конца файла}

{Цикл для записи данных, который будет выполнятся пока пользователь не введет «No»}

while Otv2 <> 'No' do

begin

{Ввод данных}

{Запись одной записи в НД}

write(File1,TVzap);

{Запрос на окончание заполнения}

writeln('Продолжить заполнение?(Yes\No)');

readln(Otv2);

end;

{Присвоение номера текущего элемента}

n:=numb;

{Закрытие файла}

end;

{end procedure Dobavit_ND}

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

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

Процедура для просмотра содержимого набора данных:

procedure Prosmotr_ND;

begin

{Связывание файловой переменной с НД на диске}

assign(File1, Filename);

{Открытие файла для чтения}

reset(File1);

{Вывод имени текущего набора данных}

{Вывод шапки таблицы}

{Пока не закончится файл -- вывод элементов в таблицу}

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

{Вывод нижней границы таблицы}

{Присвоениею текущему номер последнего показанного элемента}

end;

{Закрытие файла}

close(file1);

end;

В процедуру из главной программы передается имя набора данных. В главную программу из процедуры передается номер текущего элемента. После открытия набора данных процедура выводит его имя, затем шапку таблицы. Следуюющие действия выполняются в цикле, котороый будет выполнятся пока не закончится данный набор данных. В зависимости от значения переменной перечислимого типа в поле tipTelevizor оператором case просиходит присвоение переменной К определнного значения (цветной, черно-белый или переносной). После чего просиходит вывод элементов на экран. В конце переменной, содержащей номер текущего элемента, присваивается значение последнего элемента и набор данных закрывается.

Процедура для поиска элемента по введеному номеру

procedure Poisk_Elem_ND;

begin

{Связывание файловой переменной с НД на диске}

{Открытие файла для чтения}

{Запрос на ввод номера нужной записи}

writeln('Введите номер нужной записи');

readln(n);

{Поиск нужной записи}

seek(File1,n-1);

{Чтение записи из файла}

read(File1,TVzap);

{Присвоение переменной К значения в зависимости от значениея переменной перечислимого типа}

{Вывод шапки таблицы}

{Вывод элемента}

{Вывод нижней границы таблицы}

{Закрытие файла}

{Присовение нужного номера текущему элементу}

N:=n+1;

end;

{end procedure Poisk_Elem_ND}

Эта процедура обрабатывает запрос пользователя на поиск элемента в НД по его порядковому номеру и выводит информацию о данном элементе. В процедуру из главной программы передается имя набора данных. В главную программу из процедуры передается номер текущего элемента. После открытия набора данных процедура запращивает номер элемента, который следует найти. Затем процедурой seek(File1,n-1) в файле находится нужная запись. Эта запись выводится как единственный элемент таблицы и текущему значению присваивается номер элемента, который искали, плюс один. После вывода файл закрывается.

Процедура для вывода текущего элемента:

procedure Vivod_Tek;

begin

{Присвоение выводимому номеру номер текущего элемента}

numb:=n;

{Связывание файловой переменной с НД на диске}

{Открытие файла для чтения}

{Поиск нужной записи}

seek(File1,numb-1);

{Чтение записи из файла}

{Присвоение переменной К значения в зависимости от значениея переменной перечислимого типа}

{Вывод шапки таблицы}

{Вывод элемента}

{Вывод нижней границы таблицы}

{Закрытие файла}

close(file1);

end;

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

1.4 Модуль RabotaDR.tpu

Этот модуль содержит три процедуры, в которых происходи обращение или переход к работе с другим набором данных

Заголовок и описательная часть данного модуля представлены ниже:

unit RabotaDR;

interface

uses RabotaND;

Этот модуль требует подключения описанного ранее модуля RabotaND, так как в нем описано большенство переменных, которые используются в модуле RabotaDR. Никаких собственных переменных в модуле RabotaDR не описано.

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

{Процедура для перехода к друому НД}

procedure Perehod_Drug_ND (var Filename:string;);

{Процедура создания нового НД из всех элементов с заданным значением ключе-вого поля}

procedure Sozdat_ND_kl (var Filename:string; var n:integer);

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

procedure Sohr_v_nov (var Filename:string; var n:integer);

Процедура для перехода к друому НД:

procedure Perehod_Drug_ND;

var DifFilename:string;

begin

{Вывод имени текущего набора данных}

writeln('Ваш текущий набор данных - ', Filename);

{Запрос на вывод нового адреса НД}

writeln('Введите путь к необходимому набору данных');

readln(DifFilename);

{Замена имени старого набора данных на имя нового набора}

Filename:=DifFilename;

{Вывод имени текущего набора данных}

writeln('Ваш новый набор данных - ', filename);

end;

{end procedure Perehod_Drug_ND;}

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

Процедура создания нового НД из всех элементов с заданным значением ключевого поля:

procedure Sozdat_ND_kl;

{Запрос ключевого поля}

var z: Tip;

vibor_tipa: byte;

begin

{Связывание файловой переменной с НД на диске}

{Открытие файла для чтения}

{Запрос на ввод имени файла, который будут сохранены элементы с заданым ключевым полем }

{Связывание второй файловой переменной со вторым НД на диске}

{Открытие второго файла для записи}

{Запрос на значение ключевого поля}

{Выбор значения перечислимого типа в зависимости от выбранного пользователем типа}

case vibor_tipa of

1: z:=cvet;

2: z:=gherno_bel;

3: z:=perenosn;

end;

{Пока не достигнут конец файла, поиск}

while not eof(file1) do

begin

{Чтение одной записи}

read(File1,TVzap);

{Если содержимое ключевого поля совпадает с нужным}

if TVzap.TipTelevizor = z then

{Запись записи в новый файл}

Write(Filekl, TVzap);

end;

{Закрытие файлов}

{Изменение имени файла, с которым будет продолжаться работа}

Filename:=filenamekluch;

end;

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

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

vibor_tipa - для выполнения запроса о значении ключевого поля.

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

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

procedure Sohr_v_nov;

{Запрос ключевого поля}

begin

{Связывание файловой переменной с НД на диске}

{Открытие файла для чтения}

{Запрос имени второго НД}

{Связывание файловой переменной со вторым НД на диске}

{Открытие второго файла}

{Переход в конец второго файла}

seek(Filenov,filesize(Filenov));

{Пока недостигнут конец файла}

while not eof(file1) do

begin

{Чтение из первого файла}

{Запись во второй файл}

end;

{Закрытие двух файлов}

N:=1;

end;

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

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

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

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

Приложение А

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

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

Uses Crt, MenuMod, RabotaND, RabotaDR;

begin

clrscr;

{Ввод имени файла}

write('Введите путь к файлу: ');

readln(Filename);

{Инициализация переменной для обозначения текущего элемента}

N:=2;

{Заполнение массива пунктов меню значениями}

Mas[1]:='1:Создать новый НД';

Mas[2]:='2:Добавить новые элементы в конец НД';

Mas[3]:='3:Просмотреть все элементы НД';

Mas[4]:='4:Поиск элемента по номеру ';

Mas[5]:='5:Перейти к работе с другим НД';

Mas[6]:='6:Создание нового НД из всех элементов с заданным значением ключе-вого поля.';

Mas[7]:='7:Cохранение всех элементов в другом НД';

repeat

clrscr;

{Вывод на экран текущих НД и элемента}

textcolor(14);

gotoxy(1, 9);

writeln('Текущий НД - ',Filename);

gotoxy(1,12);

writeln('Номер текущего элемента - ',n-1);

gotoxy(1,13);

writeln('Содержание текущего элемента:');

gotoxy(1,14);

tek:=n-1;

Vivod_Tek(FileName, tek);

gotoxy(2,2);

{Вывод меню}

My_Meny(mas,punkt);

textcolor (LightCyan);

{Выполнение процедур в зависимости от выбраного пункта}

case punkt of

1: {Создание нового НД и его просмотр}

begin

Sozdat_ND (FileName, n);

Prosmotr_ND (FileName, n);

end;

2: {Добавление новых элементов в конец НД и его просмотр}

begin

Dobavit_ND (FileName, n);

Prosmotr_ND (FileName, n);

end;

3: {Просмотр всех элементов НД}

Prosmotr_ND (FileName, n);

4: {Поиск элемента}

Poisk_Elem_ND (FileName, n);

5: {Переход к работе с другим НД и просмотр его содержимого}

begin

Perehod_Drug_ND (FileName);

Prosmotr_ND (FileName, n);

end;

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

begin

Sozdat_ND_kl (FileName, n);

Prosmotr_ND (FileName, n);

end;

7: {Cохранение всех элементов в другом НД}

Sohr_v_nov(FileName, n);

end;

writeln('Для возврата нажмите Enter, для выхода нажмите Esc');

answ:=Readkey;

{Цикл выполняется до того, как будет нажат ESC}

until answ=#27;

end.

Листинг модуля menumod:

unit menumod;

interface

uses crt;

type Massiv=array [1..7] of string;

var mas:massiv;

procedure My_Meny(Mas:Massiv; var punkt:byte);

implementation

procedure My_Meny;

const x=1;

y=1;

k=7;

var i,pred,Max_dlin:integer;

otv:char;

x1,y1:byte;

begin

{Инициализация переменных}

; pred:=0; max_dlin:=0;

{Определенние максимальной длины строки}

for i:=1 to k do

if length(Mas[i])>max_dlin then max_dlin:=length(Mas[i]);

{end if}

{end for}

{Дополнение всех строк до максимальной}

for i:=1 to k do

while length(Mas[i])<>max_dlin do Mas[i]:=Mas[i]+' ';

{end while}

{end for}

{Расчет координат X1 и Y1}

x1:=max_dlin+x+3;

y1:=k+y+3;

{Прорисовка меню}

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

Textbackground(DarkGray);

textcolor(0);

{Подсветка первого поля меню}

Textbackground(Blue);

Textcolor(15);

Write(Mas[1]);

Repeat

pred:=punkt;

Otv:=Readkey;

If Otv=#0 then Otv:=Readkey;

{end If}

{Реакция на нажатие клавиш}

Case Otv of

{Нажатие клавиши esc}

#27:begin

punkt:=0;

Halt(0)

end;

{Нажатие клавиши enter}

#13: begin

window (1, 1, 80, 25);

Textbackground(black);

Textcolor(10);

clrscr;

Exit;

end;

{Нажатие клавиши вниз}

#80: If punkt<k then punkt:=punkt+1

else punkt:=1;

{end If}

{Нажатие клавиши ввверх}

#72: If punkt>1 then punkt:=punkt-1

else punkt:=k;

{end If}

end;

{Прорисовка поля меню в исход-ный цвет}

GotoXY(x,pred);

Textbackground(DarkGray);

Textcolor(yellow);

Write(Mas[pred]);

{Подсветка следующего выбранного поля меню}

GotoXY(x,punkt);

Textbackground(Blue);

Textcolor(15);

Write(Mas[punkt]);

until False

{end Repeat}

end;

end.

Листинг модуля RabotaND:

unit RabotaND;

interface

uses menumod;

type

{Спецификация файла}

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;

{Процедура для вывода текущего элемента}

procedure Vivod_Tek (var Filename:string; n:integer);

{Процедура создания нового набора данных}

procedure Sozdat_ND (var Filename:string; var n:integer);

{Процедура добавление элемента в конец набора данных}

procedure Dobavit_ND (var Filename:string; var n:integer);

{Процедура для просмотра содержимого набора данных}

procedure Prosmotr_ND (var Filename:string; var n:integer);

{Процедура для поиска элемента по введеному номеру}

procedure Poisk_Elem_ND (var Filename:string; var n:integer);

implementation

procedure Sozdat_ND;

var i,kol:integer;

begin

{Ввод имени нового набора данных}

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;

{end procedure Sozdat_ND}

procedure Dobavit_ND;

begin

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;

{end procedure Dobavit_ND}

procedure Prosmotr_ND;

begin

{Связывание файловой переменной с НД на диске}

assign(File1, Filename);

{Открытие файла для чтения}

reset(File1);

{Вывод имени текущего набора данных}

writeln('Ваш набор данных: ', Filename);

numb:=1;

{Вывод шапки таблицы}

writeln('г=====T==================T========T================T======================¬');

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('L=====¦==================¦========¦================¦======================-');

{Присвоениею текущему номер последнего показанного элемента}

numb:=numb+1;

n:=numb;

end;

{Закрытие файла}

close(file1);

end;

procedure Poisk_Elem_ND;

begin

{Связывание файловой переменной с НД на диске}

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('г=====T==================T========T================T======================¬');

writeln('¦ # ¦ Название ¦ Размер ¦ Ср.стоимость ¦ Тип ¦');

writeln('¦=====+==================+========+================+======================¦');

{Вывод элемента}

write('¦', n:5,'¦');

write (TVzap.nazvanie:18,'¦');

write (TVzap.razmer:8,'¦');

write (TVzap.sr_stoimist:16:1,'¦');

writeln (k,'¦');

{Вывод нижней границы таблицы}

writeln('L=====¦==================¦========¦================¦======================-');

{Закрытие файла}

close(file1);

{Присовение нужного номера текущему элементу}

N:=n+1;

end;

{end procedure Poisk_Elem_ND}

procedure Vivod_Tek;

begin

{Присвоение выводимому номеру номер текущего элемента}

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('г=====T==================T========T================T======================¬');

writeln('¦ # ¦ Название ¦ Размер ¦ Ср.стоимость ¦ Тип ¦');

writeln('¦=====+==================+========+================+======================¦');

{Вывод элемента}

write('¦', numb:5,'¦');

write (TVzap.nazvanie:18,'¦');

write (TVzap.razmer:8,'¦');

write (TVzap.sr_stoimist:16:1,'¦');

writeln (k,'¦');

{Вывод нижней границы таблицы}

writeln('L=====¦==================¦========¦================¦======================-');

{Закрытие файла}

close(file1);

end;

end.

Листинг модуля RabotaDR:

unit RabotaDR;

interface

uses RabotaND;

{Процедура для перехода к друому НД}

procedure Perehod_Drug_ND (var Filename:string);

{Процедура создания нового НД из всех элементов с заданным значением ключе-вого поля}

procedure Sozdat_ND_kl (var Filename:string; var n:integer);

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

procedure Sohr_v_nov (var Filename:string; var n:integer);

implementation

procedure Perehod_Drug_ND;

var DifFilename:string;

begin

{Вывод имени текущего набора данных}

writeln('Ваш старый набор данных: ', Filename);

{Запрос на вывод нового адреса НД}

writeln('Введите название нового НД ');

readln(DifFilename);

{Замена имени старого набора данных на имя нового набора}

Filename:=DifFilename;

{Вывод имени текущего набора данных}

writeln('Ваш новый набор данных: ', filename);

N:=1;

end;

{end procedure Perehod_Drug_ND;}

procedure Sozdat_ND_kl;

{Запрос ключевого поля}

var z: Tip;

vibor_tipa: byte;

begin

{Связывание файловой переменной с НД на диске}

assign(File1, Filename);

{Открытие файла для чтения}

reset(File1);

{Запрос на ввод имени файла, который будут сохранены элементы с заданым ключевым полем }

writeln('Введите имя файла, в которой будут сохранены элементы с заданым ключевым полем : ');

readln(filenamekluch);

{Связывание файловой переменной с НД на диске}

assign(Filekl, filenamekluch);

{Открытие файла для записи}

rewrite(Filekl);

{Запрос на значение ключевого поля}

writeln('Выбирите тип телевизора (1: Цветной; 2: Черно-белый; 3: Переносной;)');

readln(vibor_tipa);

{Выбор значения перечислимого типа в зависимости от выбранного пользователем типа}

case vibor_tipa of

1: z:=cvet;

2: z:=gherno_bel;

3: z:=perenosn;

end;

{Пока не достигнут конец файла, поиск}

while not eof(file1) do

begin

{Чтение одной записи}

read(File1,TVzap);

{Если содержимое ключевого поля совпадает с нужным}

if TVzap.TipTelevizor = z then

{Запись записи в новый файл}

Write(Filekl, TVzap);

end;

{Закрытие файлов}

close(file1);

close(filekl);

Filename:=filenamekluch;

N:=1;

end;

procedure Sohr_v_nov;

{Запрос ключевого поля}

begin

{Связывание файловой переменной с НД на диске}

assign(File1, Filename);

{Открытие файла для чтения}

reset(File1);

writeln('Ваш текущий НД -- ', Filename);

{Запрос имени второго НД}

writeln('Введите имя НД, в который нужно произвести копирование : ');

readln(filenamenov);

{Связывание файловой переменной со вторым НД на диске}

assign(File2, filenamenov);

{Открытие второго файла}

reset(File2);

{Переход в конец второго файла}

seek(File2,filesize(File2));

{Пока недостигнут конец файла}

while not eof(file1) do

begin

{Чтение из первого файла}

read(File1,TVzap);

{Запись во второй файл}

Write(File2,TVzap);

end;

{Закрытие двух файлов}

close(file1);

close(File2);

N:=2;

Filename:=filenamenov;

end;

end.

Размещено на Allbest


Подобные документы

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

    курсовая работа [265,6 K], добавлен 28.08.2017

  • Запуск программы из среды Turbo C 2.0. Число строк в файле. Формирование алфавитного порядка. Метод линейного поиска. Функциональная структура программы. Структура записи файла. Последовательный просмотр элементов таблицы. Информация о входном файле.

    курсовая работа [688,6 K], добавлен 13.03.2013

  • Создание программы, которая создает набор данных в динамической памяти компьютера и позволяет корректировать его. Описание программного комплекса. Обзор особенностей реализации программы с использованием модулей. Добавление данных в конец текущего набора.

    курсовая работа [455,2 K], добавлен 28.08.2017

  • Разработка программы "База данных спортивного инвентаря". Описание алгоритма работы модулей и блоков. Структурная схема представления проекта. Процесс поиска нужной информации. Автоматическая сортировка данных. Добавление и редактирование записей.

    курсовая работа [3,0 M], добавлен 15.08.2013

  • Структура программного комплекса. Ввод информации из заданного файла. Создание набора данных. Добавление элементов в конец набора данных. Просмотр всех элементов набора данных. Копирование информации из НД в заданный файл. Сортировка массива по номерам.

    курсовая работа [630,5 K], добавлен 01.06.2014

  • Разработка программного обеспечения для работы с информацией и ее обработкой на языке программирования Delphi. Описание алгоритмов процедуры работы со стеком - добавление, удаление элементов, редактирование записи. Инструкция по использованию программы.

    курсовая работа [2,9 M], добавлен 06.02.2013

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

    контрольная работа [52,9 K], добавлен 03.10.2010

  • Программный комплекс по обработке заданного множества данных в динамической памяти компьютера. Запросы к массиву записей множества данных – групп в детском саду. Функция сортировки массива по числовому полю. Использование главной программы MAINPRO.

    курсовая работа [419,3 K], добавлен 23.07.2014

  • Требования к функциональным характеристикам программы, составу и параметрам технических средств, программной совместимости. Особенности программирования в среде Access. Описание интерфейса программы, ввод и редактирование данных, добавление новых книг.

    курсовая работа [1,5 M], добавлен 17.11.2010

  • Разработка блок-схемы и программы обработки одномерного массива с доступом к элементам с помощью индексов и с помощью указателей. Словесное описание алгоритма и пользовательского интерфейса, листинг программы обработки матрицы и результат её выполнения.

    курсовая работа [391,1 K], добавлен 30.09.2013

Работы в архивах красиво оформлены согласно требованиям ВУЗов и содержат рисунки, диаграммы, формулы и т.д.
PPT, PPTX и PDF-файлы представлены только в архивах.
Рекомендуем скачать работу.