Практическая обработка множества данных, представляющих собой массив указателей на записи
Разработка программы для работы с множеством данных, перечень и работа ее модулей. Проверка работы программы. Реализация поиска элемента в файле по его номеру и добавление элементов в конец уже созданного НД. Возможности и особенности применения программы
Рубрика | Программирование, компьютеры и кибернетика |
Вид | курсовая работа |
Язык | русский |
Дата добавления | 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