Введение
Дорогой Александр Григорьевич если вы читаете это введение, значит я наконец – то закончил свой курсовой проект. Он называется «База данных DVD – фильмов». Скорее всего, он ни кому, ни будет, нужен и денег я на нем не заработаю. Это очень печально. Хотя если взглянуть на это с другой стороны, то почти у каждого человека в этом мире есть своя коллекция DVD - фильмов и мысль, что эта программа может им пригодиться, меня очень радует. Как говорится, нет худа, без добра. Программа очень проста в использовании и ест очень мало ресурсов. Работает почти на любой операционной системе и на любом компьютере. Теперь поговорим о самой программе. Она многофункциональна. Занесенную информацию о DVD – фильмах можно изменять, удалять и редактировать. Информация о дисках записывается в базу данных по пяти полям: название диска, цена, год выпуска, фамилия режиссера, кинокомпания, которая создавала фильм. Также можно сортировать диски по этим же полям. В общем, она настолько проста, что даже ребенок может в ней разобраться. А самое главное, что программа написана на русском языке да еще русским студентом третьего курса, АФРГСУ который учится на факультете ИТиР. Как это расшифровывается, я до сих пор не могу запомнить!!!
1. Общая часть
1.1 Краткое описание работы
При запуске программы отображается главное окно, в котором имеются четыре кнопки и область обработки информации, управляемые кнопками.
1. Кнопка вывода информации.
Вся информация, находящаяся в файле и выводится в данную таблицу.
2. Кнопка поиска информации.
При нажатии кнопки поиск отображается окно поиска. Поиск происходит по пяти параметрам. Выбираем один из параметров, вводим данные и начинается поиск, найденные данные выводятся в этом же окне в таблице.
3. Кнопка удаления.
Удаление происходит следующим образам: выбираем курсором, какой DVD – фильм вы хотите удалить и следовательно нажимаем кнопку удаление.
4. Область редактирования.
Для редактирования одного из полей, необходимо ввести в первое поле его название из списка, выбрать из выпадающего списка параметр для изменения и во второе поле ввести новую информацию. Обновленная информация появляется мгновенно в таблице.
5. Кнопка добавления информации.
Отображается окно добавления информации. Информация также добавляется по пяти полям. Добавленная информация мгновенно выводится в главном окне.
1.2 Выбор языка и среды программирования
Данная программа разрабатывалась в среде программирования Delphi. Она содержит богатый набор различных типов данных и компонентов, облегчающих создание программного продукта под MS Windows.
Краткость языка, легкость программирования на нем, мобильность написанных программ, возможность эффективной реализации и пригодность с точки зрения формальных методов отладки программ обеспечили языку Object Pascal и конкретно среде Delphi успех в тех делах, для которых он предназначался.
2. Основная часть
2.1 Структура данных
type disk=record
name:string[50];
reg: string[30];
cincom: string[30];
stoim:integer;
year:integer;
end;
Тип записи disk является представлением информации: stoim - стоимость DVD - фильма, name -название DVD – фильма, reg – фамилия режиссера, cincom – название кинокомпании, year – год выхода фильма на DVD.
tdvd=array[1..300] of disk
Тип tdvd является одномерным массивом, содержащим 300 элементов типа disk , т.е. этот массив содержит информацию о 300ах DVD - фильмах, полученную в результате заполнения файла с информацией.
recordfile=file of disk
Типизированный файл «recordfile» содержит записи типа disk , т.е. содержит исходную информацию о каждом DVD - фильме .
Описание файлов
При работе программа использует постоянный файл с информацией
‘db_ disk.db^ – файл с исходной информацией;
2.2 Структурные элементы программы
Описание глобальных переменных используемых в модуле kursovik.pas приведено в таблице 1.
Таблица 1. Глобальные переменные.
Идентификатор | Тип | Назначение |
n | integer | Переменная – счётчик |
m | integer | Переменная – счётчик |
dvdfile | string | Название файла |
f | recordfile | Файл с записями |
g | recordfile | Файл с записями |
Form1 | Tform1 | Идентификатор формы |
but | integer | Определяет нажатую кнопку при появлении сообщения |
h | HWND | Дескриптор окна |
horizon | integer | Номер строки в таблице |
k | integer | Проверка существования телефона |
Таблица 2. Константа.
Идентификатор | Значение | Назначение |
detect | ‘savedvd^ | Путь к файлам необходимым для работы программы |
Таблица 3. Глобальные переменные модуля Unit2.рas.
Идентификатор | Тип | Назначение |
Form2 | Tform2 | Идентификатор формы |
Таблица 3. Глобальные переменные модуля unit search.pas
Идентификатор | Тип | Назначение |
Form4 | Tform4 | Идентификатор формы |
dvdfile | string | Название файла |
n | integer | Переменная – счётчик |
f | recordfile | Файл с записями |
g | recordfile | Файл с записями |
Таблица 4. Глобальные переменные модуля unit Input.pas
Идентификатор | Тип | Назначение |
Form3 | Tform3 | Идентификатор формы |
dvdfile | string | Название файла |
n | integer | Переменная – счётчик |
k | integer | Переменная – счётчик |
f | recordfile | Файл с записями |
g | recordfile | Файл с записями |
Описание процедур
Модуль kursovik.pas
procedure tform1.clearlist;
Данная процедура очищает таблицу вывода информации.
procedure tform1.vivod (dvdfile:string);
Данная процедура осуществляет вывод данных записанных в файл. Параметр dvdfile – директория файла.
Алгоритм:
1. Привязываем к файловой переменной “f” переменную dvdfile и открываем на чтение.
2. Если файл обнаружен, то в цикле, до тех пор, пока не достигнут конец файла, запускаем счётчик и выводим в ячейки таблицы данные из файла. Если счётчик равен нулю, следовательно, файл пустой, запускается процедура clearlist.
3. В случае не обнаружения файла, он создаётся в необходимой директории.
Таблица 5. Локальные переменные.
Идентификатор | Тип | Назначение |
s | disk | Запись |
f1 | recordfile | Файл с записями |
count | integer | Номер по списку |
procedure tform1.deletef (horizon:integer);
Данная процедура осуществляет удаление записи из фала.
Алгоритм.
1. В параметр d передаётся введённая модель телефона.
2. Открываем на чтение основной файл “db_disk.db” на чтение и создаём временный “new.db”. Перезаписываем его.
3. До тех пор, пока не достигнут конец файла, читаем записи и если поле записи обозначающей имя не равно переменной “d”, пишем во временный файл все наши записи. Удаляем основной файл и переприсваиваем его директорию временному файлу.
Таблица 5. Локальные переменные.
Идентификатор | Тип | Назначение |
el | tdvd | Запись |
f1 | recordfile | Файл с записями |
procedure tform1.sort_1(dvdfile: string);
procedure tform1.sort_2(dvdfile: string);
procedure tform1.sort_3(dvdfile: string);
procedure tform1.sort_4(dvdfile: string);
procedure tform1.sort_5(dvdfile: string);
Процедуры, перечисленные выше почти одинаковы различны только по полям сортировки Во всех процедурах используется алгоритм сортировки методом вставки. Параметр dvdfile – директория файла.
Таблица 6. Локальные переменные.
Идентификатор | Тип | Назначение |
f | file of disk | Типизированный файл с записями |
q | file of disk | Типизированный файл с записями |
c | integer | Счётчик записей |
i | integer | Элемент массива |
n | integer | Элемент массива |
buf | disk | Запись |
el | tdvd | Массив с записями |
procedure Tform1.editzap;
Данная процедура осуществляет редактирование данных записанных в файл.
Алгоритм.
1. Открываем на чтение основной файл с информацией и в переменную name заносим название dvd, один из параметров которого нам необходимо заменить.
2. Пока нет конца файла, запускаем счётчик n. Сравниваем введённое название, с имеющимися в dvd. При совпадении присваиваем переменной m значение счётчика. Переменная m будет отвечать за позицию записи в фале. Далее переменной new присваиваем данные, которые надо записать в вместо исходных.
3. Переходим с помощью функции seek на позицию m-1, то есть над необходимой записью. Читаем из файла запись.
4. Затем в case comboBox3.ItemIndex выбираем поле которое необходимо заменить и присваиваем ему значение переменной new. Если параметр не символьный переводим переменную new в цифровой формат при помощи функции.
5. Перезаписываем запись в файле. Закрываем его и выводим на экран при помощи процедуры vivod.
Таблица 7. Локальные переменные.
Идентификатор | Тип | Назначение |
f1 | recordfile | Временный файл с записями |
q | disk | Запись |
s | disk | Запись |
new | string | Новые введённые данные |
name | string | Введённое название dvd |
procedure TForm1.FormCreate(Sender: TObject);
Данная процедура вызывается при создании окна и запускает процедуру nanol. Процедура содержит входную переменную Sender - тип tobject, этот параметр определяет, какой объект программы вызывает данную процедуру.
procedure TForm1.ComboBox2Change(Sender: TObject);
В данной процедуре осуществляется выбор и запуск необходимой процедуры сортировки, путём нажатия одного из пунктов выпадающего списка ComboBox. Процедура содержит входную переменную Sender - тип tobject, этот параметр определяет, какой объект программы вызывает данную процедуру.
procedure TForm1.N8Click(Sender: TObject);
Данная процедура завершает работу программы из меню в случае положительного ответа на появляющееся сообщение. Процедура содержит входную переменную Sender - тип tobject, этот параметр определяет, какой объект программы вызывает данную процедуру.
procedure TForm1.N7Click(Sender: TObject);
Данная процедура выводит информацию из файла при помощи при помощи процедуры vivod из меню. Процедура содержит входную переменную Sender - тип tobject, этот параметр определяет, какой объект программы вызывает данную процедуру.
procedure TForm1.N14Click(Sender: TObject);
procedure TForm1.N15Click(Sender: TObject);
procedure TForm1.N16Click(Sender: TObject);
procedure TForm1.N17Click(Sender: TObject);
procedure TForm1.N18Click(Sender: TObject);
Процедуры приведённые выше отвечают за запуск процедур сортировки sort_1(derect+"db_disk.db"),sort_2(derect+"db_disk.db"), sort_3(derect+"db_disk.db")sort_4(derect+"db_disk.db"), sort_5(derect+"db_disk.db"), из меню, соответственно. Процедуры содержат входную переменную Sender - тип tobject, этот параметр определяет, какой объект программы вызывает данную процедуру.
procedure TForm1.N5Click(Sender: TObject);
Данная процедура отвечает за запуск процедуры удаления deletef и вывод обновлённой информации с помощью процедуры vivod из меню. Процедура содержит входную переменную Sender - тип tobject, этот параметр определяет, какой объект программы вызывает данную процедуру.
procedure TForm1.N4Click(Sender: TObject);
Данная процедура отвечает за добавление информации в файл с помощью процедуры input из меню. Процедура содержит входную переменную Sender - тип tobject, этот параметр определяет, какой объект программы вызывает данную процедуру.
procedure TForm1.N2Click(Sender: TObject);
Данная процедура запускает процедуру вывода vivod, путём нажатия на необходимый пункт во всплывающем меню над областью таблицы. Процедура содержит входную переменную Sender - тип tobject, этот параметр определяет, какой объект программы вызывает данную процедуру.
procedure TForm1.N10Click(Sender: TObject);
procedure TForm1.N11Click(Sender: TObject);
procedure TForm1.N12Click(Sender: TObject);
procedure TForm1.freg1Click(Sender: TObject);
procedure TForm1.fcincom1Click(Sender: TObject);
Процедуры, приведенные выше, сходны по своему принципу. Каждая из них вызывает конкретную процедуру сортировки (sort_1, sort_2, sort_3, sort_4, sort_5), путём нажатия на пункт, всплывающего меню над областью таблицы. Процедура содержит входную переменную Sender - тип tobject, этот параметр определяет, какой объект программы вызывает данную процедуру.
procedure TForm1.N9Click(Sender: TObject);
Данная процедура запускает процедуру очистки списка clearlist, путём нажатия на необходимый пункт во всплывающем меню. Процедура содержит входную переменную Sender - тип tobject, этот параметр определяет, какой объект программы вызывает данную процедуру.
procedure TForm1.N23Click(Sender: TObject);
Данная процедура запускает процедуру очистки списка clearlist, путём нажатия на необходимый пункт в меню. Процедура содержит входную переменную Sender - тип tobject, этот параметр определяет, какой объект программы вызывает данную процедуру.
procedure TForm1.N6Click(Sender: TObject);
Данная процедура запускает процедуру редактирования redactor из меню. Процедура содержит входную переменную Sender - тип tobject, этот параметр определяет, какой объект программы вызывает данную процедуру.
procedure TForm1.N21Click(Sender: TObject);
Данная процедура отображает окно с информацией о программе.
procedure tform3.input(var f:recordfile; var dvdfile:string);
Данная процедура осуществляет запись данных в файл.
Параметр “f” – типизированный файл типа recordfile. Dvdfile – деректория файла.
Алгоритм:
1. Привязываем к файловой переменной “g” временный файл derect+"buffer.db" и перезаписываем его. Привязываем к файловой переменной “f” переменную dvdfile и открываем на чтение.
2. Если в файле находится что-либо, копируем содержимое “f” в “g” и закрываем “f”, если нет, перезаписываем и закрываем “f”.
3. Присваиваем переменным записей введенные поля.
4. Проверяем наличие введённого dvd в файле, путем сравнения названия введённой диска с уже находящимися в файле в цикле достижения конца файла. Если поля равны, присваиваем переменной k значение 1, если нет, то оставляем по умолчанию равной нулю.
5. Далее проверяем значение переменой k. Если k=1, то выводится сообщение о том что данный диск существует и запись не осуществляется, если иначе, то происходит запись в файл.
6. В конце закрываем “g” и удаляем “f”. Переприсваиваем директорию dvdfile переменной “g”. И выводим обновлённый список с помощью процедуры vivod.
Таблица 8. Локальные переменные.
Идентификатор | Тип | Назначение |
s | disk | Запись |
q | disk | Запись |
procedure tform1.search_1(dvdfile:string; var g:recordfile);
procedure tform1.search_2(dvdfile :string; var g:recordfile);
procedure tform1.search_3(dvdfile:string; var g:recordfile);
procedure tform1.search_4(dvdfile:string; var g:recordfile);
procedure tform1.search_5(dvdfile:string; var g:recordfile);
Процедуры, приведены выше, почти одинаковы и различается лишь поле, по которому происходит поиск. Во всех процедурах, кроме второй, на экран выводится только те записи, поля которых полностью совпадают, с введёнными нами данными. В третьей, четвёртой и пятой процедурах список выводится отсортированным по названию модели. Параметр “g” – типизированный файл типа recordfile. Параметр dvdfile – директория файла.
procedure TForm1.Button4Click(Sender: TObject);
Данная процедура отвечает за функцию изменения информации. При нажатии на кнопку курсором вызывается процедура editzap.
procedure TForm1.Button7Click(Sender: TObject);
Данная процедура закрывает полностью программу. При нажатии на кнопку отображается окно подтверждения
2.3 Расчёт объёма оперативной памяти
Как я уже говорил раньше, эта программа почти ни чего не ест, т. е. занимает очень мало места. Для определения потребляемой памяти, я использовал стандартный диспетчер задач Windows. Исходя из данных показанных в нём, в процессе работы программа максимально потребляет 5000 кб.
2.4 Интерфейс программы
При запуске программы появляется окно, с дружественным интерфейсом рис. 1. Все операции выполняются в данном окне. При вызове информации о программе в пункте меню появляется окно, содержащее необходимую информацию рис. 2. Функция добавления изображена на рис. 3. Функция поиска изображена на рис. 4.
Рисунок 1. Главное окно
Рисунок 2.. Информация о программе.
Рисунок 3. Окно добавления новой информации.
Рисунок 4. Окно поиска информации
3. Проверка работоспособности
3.1 Комплект поставки программы
1. dvdproekt.exe - исполняемый файл программы
2. Savedvd - папка с файлом db_disk.db, содержащим базу данных. Также папка используется для хранения временных файлов, создаваемых во время работы программы.
3.2 Описание результатов проверки программы
Технические средства, используемые для написания работы, приведены в таблице 10. Для проверки работоспособности программы я использовал компьютеры с различной конфигурацией . Их конфигурации приведены в таблице 10
Таблица 10. Описание результатов проверки программы.
Компоненты ЭВМ, программное обеспечение |
|
|||||||||
Конфигурация ЭВМ |
№ | Микропроцессор, тактовая частота | Объем оперативной памяти | Тип видеоадаптера, объем видеопамяти | Объем дискового пространства | Операционная система | ||||
1 |
Intel (R) Celeron, 1.7 GHz | 128 Mb | Intel (R) 828456 Graphics controller, 32 Mb | 10 Gb | MS Windows 2000 | |||||
2 |
AMD Turion 64x2 Mobile Technology TL-60 2.0 GHz | 3 Gb | NVIDIA GeForce 8600 GS, 512 Mb | 320 Gb | MS Windows Vista | |||||
3 |
AMD Sempron (tm) 2200+, 1.5 GHz | 768 Mb | ATI Radeon 9600 series, 128Mb | 80 Gb | MS Windows XP Professional | |||||
Конфигурация ЭВМ
|
4 |
Pentium (R) D, 2x2.8 Mhz | 1.5 Gb | NVIDIA GeForce 8500 GT, 256 Mb | 80 Gb | MS Windows XP Professional |
|
|||
5 |
Pentium 4, 3.01Ghz | 512 Mb | ATI Radeon X1600, 256Mb | 20 Gb | MS Windows XP Professional |
|
||||
3.3 Минимальные системные требования
1.Процессор: 170 MHz;
2. Оперативная память: 5000kb;
3. Физическая память на жестком диске: 1400MB свободного места;
4. Видеокарта с поддержкой VGA;
5. Устройства ввода/вывода данных: клавиатура, монитор, мышь.
Заключение
Вот и все! Мой проект закончен. Есть две причины, для чего я делал это. Первая, что бы сдать его Вам Александр Григорьевич! Вторая, для получения знаний по операционным системам и самому программированию в целом и что бы, не было скучно. Ну а теперь о главном. Я думаю, цель, поставленная передо мной, выполнена. Я немного стал разбираться в Delphi. Научился работать с процедурами, с записями и с циклами. Также создал простую, а главное удобную программу, которая может пригодиться любому коллекционеру фильмов на DVD дисках. Очень простой интерфейс позволяет работать в программе даже ребенку, и старшему поколению, которому очень трудно обращаться с новыми технологиями, в том числе и компьютерами. А в завершении хотелось бы сказать большое спасибо разработчикам Delphi. Ведь без этой среды разработки у меня ни чего бы, не вышло. Всем спасибо за помощь. До свидания!!!
Список литературы
1. Михаил Фленов, «Библия Delphi», Санкт Петербург «БХВ- Петербург» 2004 год, 882 стр.
2. Владимир Гофман, Анатолий Хамоненко, «Delphi быстрый старт», Санкт Петербург «БХВ-Петербург» 2003 год, 280 стр.
3. Евгений Марков, Петр Дарахвелидзе, «Программирование в Delphi 7», Санкт Петербург «БХВ-Петербург» 2003 год, 780 стр.
4. Поган А.М., Царенко Ю.А., “Программирование в Delphi”, Москва «ЭКСМО» 2006 год, 309 стр.
5. Бобровский А. , “Delphi 5. Учебный курс.” , Санкт – Петербург, Москва, Харьков, Минск, «ЗАО Питербук» , 2004 год, 639 стр.
Приложение 1
Листинг программы и её модулей
program Kursovik;
uses
Forms,
kurs in "kurs.pas" {Form1},
Unit2 in "Unit2.pas" {Form2},
Input in "Input.pas" {Form3},
search in "search.pas" {Form4};
{$R *.res}
begin
Application.Initialize;
Application.CreateForm(TForm1, Form1);
Application.CreateForm(TForm2, Form2);
Application.CreateForm(TForm3, Form3);
Application.CreateForm(TForm4, Form4);
Application.Run;
end.
Модуль kurs.pas
unit kursovik;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, Menus, jpeg, ExtCtrls, Grids, DBGrids, ShellAPI, XPMan;
const
derect="savedvd";
type disk=record
name:string[50];
stoim:integer;
year:integer;
reg:string[30];
cincom:string[30];
end;
tdvd=array[1..300] of disk;
recordfile=file of disk;
TForm1 = class(TForm)
MainMenu1: TMainMenu;
N1: TMenuItem;
N3: TMenuItem;
N4: TMenuItem;
N5: TMenuItem;
N6: TMenuItem;
N7: TMenuItem;
N8: TMenuItem;
N14: TMenuItem;
N15: TMenuItem;
N16: TMenuItem;
N17: TMenuItem;
N18: TMenuItem;
N19: TMenuItem;
N21: TMenuItem;
StringGrid1: TStringGrid;
ComboBox3: TComboBox;
Edit9: TEdit;
PopupMenu1: TPopupMenu;
N2: TMenuItem;
N9: TMenuItem;
N10: TMenuItem;
N11: TMenuItem;
N12: TMenuItem;
reg1: TMenuItem;
cincom1: TMenuItem;
N13: TMenuItem;
N22: TMenuItem;
N23: TMenuItem;
N24: TMenuItem;
XPManifest1: TXPManifest;
N26: TMenuItem;
Label8: TLabel;
Button1: TButton;
Button2: TButton;
Button3: TButton;
Button4: TButton;
Button5: TButton;
Button6: TButton;
Button7: TButton;
N25: TMenuItem;
procedure N8Click(Sender: TObject);
procedure FormCreate(Sender: TObject);
Procedure deletef(horizon:integer);
procedure editzap;
procedure clearlist;
procedure vivod (dvdfile:string);
procedure sort_1(dvdfile:string);
procedure sort_2(dvdfile: string);
procedure sort_3(dvdfile: string);
procedure sort_4(dvdfile: string);
procedure sort_5(dvdfile: string);
procedure N7Click(Sender: TObject);
procedure N14Click(Sender: TObject);
procedure N15Click(Sender: TObject);
procedure N16Click(Sender: TObject);
procedure N17Click(Sender: TObject);
procedure N18Click(Sender: TObject);
procedure N5Click(Sender: TObject);
procedure N2Click(Sender: TObject);
procedure N10Click(Sender: TObject);
procedure N11Click(Sender: TObject);
procedure N12Click(Sender: TObject);
procedure reg1Click(Sender: TObject);
procedure cincom1Click(Sender: TObject);
procedure N9Click(Sender: TObject);
procedure N6Click(Sender: TObject);
procedure N21Click(Sender: TObject);
procedure N23Click(Sender: TObject);
procedure N4Click(Sender: TObject);
procedure StringGrid1SelectCell(Sender: TObject; ACol,
ARow: Integer; var CanSelect: Boolean);
procedure N26Click(Sender: TObject);
procedure Edit9Click(Sender: TObject);
procedure Button7Click(Sender: TObject);
procedure Button5Click(Sender: TObject);
procedure Button6Click(Sender: TObject);
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
procedure Button3Click(Sender: TObject);
procedure N25Click(Sender: TObject);
procedure Button4Click(Sender: TObject);
private
public
n,m,k:integer;
f,g:recordfile;
but:integer;
h:HWND;
horizon : integer;
end;
var
Form1: TForm1;
implementation
uses unit2, Input, search;
{$R *.dfm}
procedure tform1.clearlist;
begin
n:=0;
while n begin StringGrid1.Cells[0,n+1]:=""; StringGrid1.Cells[1,n+1]:=""; StringGrid1.Cells[2,n+1]:=""; StringGrid1.Cells[3,n+1]:=""; StringGrid1.Cells[4,n+1]:=""; StringGrid1.Cells[5,n+1]:=""; n:=n+1; end; stringgrid1.RowCount:=2; end; procedure tform1.vivod (dvdfile:string); var s:disk; count:integer; f1:recordfile; begin assignfile(f,dvdfile);{$I-} reset(f); {$I+} N:=0; count:=0; If IOResult=0 then begin while not eof(f) do begin count:=count+1; read(f,s); StringGrid1.cols[0][N+1]:=inttostr(count); StringGrid1.Cells[1,N+1]:=s.name; StringGrid1.Cells[2,N+1]:=inttostr(s.stoim)+" руб."; StringGrid1.Cells[3,N+1]:=intToStr(s.year)+" год"; StringGrid1.Cells[4,N+1]:=s.reg; StringGrid1.Cells[5,N+1]:=s.cincom; N:=N+1; end; seek(f,0); closefile(f); if count=0 then clearlist else stringgrid1.rowcount:=N+1; end else begin createdir("savedvd"); assignfile(f1,derect+"db_ disk.db"); rewrite(f1); closefile(f1); end; end; procedure TForm1.StringGrid1SelectCell(Sender:
TObject; ACol, ARow: Integer; var CanSelect: Boolean); begin horizon:=ARow; end; {Удаление записи} Procedure tform1.deletef(horizon:integer); var f1:recordfile; el:tdvd; begin but:=MessageBox(0,"Удалить
данные?","Внимание!",MB_YESNO or MB_ICONquestion); if but=IDYES then begin assignfile(f1,derect+"new.db"); rewrite(f1); assignfile(f,derect+"db_ disk.db"); reset(f); n:=1; while not eof(f) do begin read(f,el[n]); if n <> horizon then write(f1,el[n]); n:=n+1; end; closefile(f); closefile(f1); erase(f); rename(f1,derect+"db_ disk.db"); vivod(derect+"db_disk.db"); end; end; procedure tform1.sort_1(dvdfile: string); var f,q:file of disk; c,i,n:integer; buf:disk; el:tdvd; begin assignfile(q,derect+"db.db"); rewrite(q); assignfile(f,dvdfile); reset(f); c:=0; while not eof(f)do begin c:=c+1; read(f,el[c]); end; for i:=1 to c do for n:=i+1 to c do if el[n].name begin buf:=el[n]; el[n]:=el[i]; el[i]:=buf; end; for i:=1 to c do begin write(q,el[i]); end; closefile(f); closefile(q); vivod(derect+"db.db"); erase(q); end; procedure tform1.sort_2(dvdfile: string); var f,q:file of disk; c,i,n:integer; buf:disk; el:tdvd; begin assignfile(q,derect+"db.db"); rewrite(q); assignfile(f,dvdfile); reset(f); c:=0; while not eof(f)do begin c:=c+1; read(f,el[c]); end; for i:=1 to c do for n:=i+1 to c do if el[n].stoim begin buf:=el[n]; el[n]:=el[i]; el[i]:=buf; end; for i:=1 to c do begin write(q,el[i]); end; closefile(f); closefile(q); vivod(derect+"db.db"); erase(q); end; procedure tform1.sort_3(dvdfile: string); var f,q:file of disk; c,i,n:integer; buf:disk; el:tdvd; begin assignfile(q,derect+"db.db"); rewrite(q); assignfile(f,dvdfile); reset(f); c:=0; while not eof(f)do begin c:=c+1; read(f,el[c]); end; for i:=1 to c do for n:=i+1 to c do if el[n].year begin buf:=el[n]; el[n]:=el[i]; el[i]:=buf; end; for i:=1 to c do begin write(q,el[i]); end; closefile(f); closefile(q); vivod(derect+"db.db"); erase(q); end; procedure tform1.sort_4(dvdfile: string); var f,q:file of disk; c,i,n:integer; buf:disk; el:tdvd; begin assignfile(q,derect+"db.db"); rewrite(q); assignfile(f,dvdfile); reset(f); c:=0; while not eof(f)do begin c:=c+1; read(f,el[c]); end; for i:=1 to c do for n:=i+1 to c do if el[n].reg begin buf:=el[n]; el[n]:=el[i]; el[i]:=buf; end; for i:=1 to c do begin write(q,el[i]); end; closefile(f); closefile(q); vivod(derect+"db.db"); erase(q); end; procedure tform1.sort_5(dvdfile: string); var f,q:file of disk; c,i,n:integer; buf:disk; el:tdvd; begin assignfile(q,derect+"db.db"); rewrite(q); assignfile(f,dvdfile); reset(f); c:=0; while not eof(f)do begin c:=c+1; read(f,el[c]); end; for i:=1 to c do for n:=i+1 to c do if el[n].cincom begin buf:=el[n]; el[n]:=el[i]; el[i]:=buf; end; for i:=1 to c do begin write(q,el[i]); end; closefile(f); closefile(q); vivod(derect+"db.db"); erase(q); end; {Редактирование} procedure Tform1.editzap; var q:disk; new:string; begin n:=0; assignfile(f,derect+"db_ disk.db"); reset(f); try new:=Edit9.text; seek(f,horizon-1); read(f,q); case comboBox3.ItemIndex of 0:q.name:=new; 1:try q.stoim:=strtoint(new); except MessageBox(0,"Цена указывается в цифрах!","",MB_OK
or MB_ICONWARNING) end; 2:try q.year:=strtoint(new); except MessageBox(0,"Год выпуска указывается в
цифрах!","",MB_OK or MB_ICONWARNING) end; 3:q.reg:=new; 4:q.cincom:=new; end; begin seek(f,horizon-1); write(f,q); closefile(f); end; except MessageBox(0,"Выбирите строку из списка.","",MB_OK
or MB_ICONWARNING) end; edit9.clear; vivod(derect+"db_ disk.db"); end; procedure TForm1.FormCreate(Sender: TObject); begin StringGrid1.Rows[0][0]:="Номер"; StringGrid1.Rows[0][1]:="Название фильма"; StringGrid1.Rows[0][2]:="Цена DVD-диска"; StringGrid1.Rows[0][3]:="Год выпуска"; StringGrid1.Rows[0][4]:="Режиссёр"; StringGrid1.Rows[0][5]:="Кинокомпания"; vivod (derect+"db_sot.db") end; procedure TForm1.N8Click(Sender: TObject); begin but:=MessageBox(0,"Закрыть
программу?","Внимание!",MB_YESNO or MB_ICONINFORMATION); if but=IDYES then Close; end; procedure TForm1.N7Click(Sender: TObject); begin vivod (derect+"db_ disk.db"); end; procedure TForm1.N14Click(Sender: TObject); begin sort_1(derect+"db_ disk.db"); end; procedure TForm1.N15Click(Sender: TObject); begin sort_2(derect+"db_ disk.db"); end; procedure TForm1.N16Click(Sender: TObject); begin sort_3(derect+"db_ disk.db"); end; procedure TForm1.N17Click(Sender: TObject); begin sort_4(derect+"db_ disk.db"); end; procedure TForm1.N18Click(Sender: TObject); begin sort_5(derect+"db_sot.db"); end; {Добавление} procedure TForm1.N4Click(Sender: TObject); begin Form3.ShowModal; vivod(derect+"db_ disk.db"); end; {Вывод
во всплывающем меню} procedure TForm1.N2Click(Sender: TObject); begin vivod(derect+"db_ disk.db"); end; {Сортировка
во всплывающем меню} procedure TForm1.N10Click(Sender: TObject); begin sort_1(derect+"db_ disk.db"); end; procedure TForm1.N11Click(Sender: TObject); begin sort_2(derect+"db_sot.db"); end; procedure TForm1.N12Click(Sender: TObject); begin sort_3(derect+"db_ disk.db"); end; procedure TForm1.reg1Click(Sender: TObject); begin sort_4(derect+"db_ disk.db"); end; procedure TForm1.cincom1Click(Sender: TObject); begin sort_5(derect+"db_ disk.db"); end; {Очистка всплывающее} procedure TForm1.N9Click(Sender: TObject); begin clearlist; end; {Очистка в меню} procedure TForm1.N23Click(Sender: TObject); begin clearlist end; {Редактирование в меню} procedure TForm1.N6Click(Sender: TObject); begin if (edit9.text="") or (edit9.text="Введите новые
данные...") then MessageBox(0,"Введите новые данные.","Внимание!",MB_ok
or MB_ICONINFORMATION) else editzap; end; //на кнопку procedure TForm1.Button2Click(Sender: TObject); begin deletef(horizon); end; //удаление
во всплывающем procedure TForm1.N26Click(Sender: TObject); begin deletef(horizon); end; //Удаление из меню procedure TForm1.N5Click(Sender: TObject); begin deletef(horizon); end; ///--------------------------------------------------- {Окно "О программе"} procedure TForm1.N21Click(Sender: TObject); begin Form2.ShowModal; end; procedure TForm1.Edit9Click(Sender: TObject); begin edit9.clear; end; procedure TForm1.Button7Click(Sender: TObject); begin but:=MessageBox(0,"Закрыть
программу?","Внимание!",MB_YESNO or MB_ICONINFORMATION); if but=IDYES then Close; end; procedure TForm1.Button5Click(Sender: TObject); begin clearlist; end; procedure TForm1.Button6Click(Sender: TObject); begin vivod(derect+"db_sot.db"); end; procedure TForm1.Button1Click(Sender: TObject); begin Form3.ShowModal; vivod(derect+"db_sot.db"); end; procedure TForm1.Button3Click(Sender: TObject); begin Form4.ShowModal; end; procedure TForm1.N25Click(Sender: TObject); begin Form4.ShowModal; end; procedure TForm1.Button4Click(Sender: TObject); begin if (edit9.text="") or (edit9.text="Новые данные...")
then MessageBox(0,"Введите новые
данные для изменения.","Внимание!",MB_ok
or MB_ICONINFORMATION) else editzap; end; end. Модуль
Unit2.pas; unit Unit2; interface uses Windows, Messages, SysUtils, Variants, Classes,
Graphics, Controls, Forms, Dialogs, StdCtrls, ExtCtrls, jpeg; type TForm2 = class(TForm) Label2: TLabel; Label6: TLabel; Bevel1: TBevel; Bevel2: TBevel; Bevel3: TBevel; Label9: TLabel; Label10: TLabel; Label11: TLabel; Label12: TLabel; Button1: TButton; Label1: TLabel; Label3: TLabel; Label4: TLabel; Label5: TLabel; Label7: TLabel; procedure Button1Click(Sender: TObject); private { Private declarations } public { Public declarations } end; var Form2: TForm2; implementation {$R *.dfm} procedure TForm2.Button1Click(Sender: TObject); begin Close; end; end. Модуль
search.pas; unit search; interface uses Windows, Messages, SysUtils, Variants, Classes,
Graphics, Controls, Forms, Dialogs, StdCtrls, jpeg, ExtCtrls, Grids; const derect="savedvd"; type disk=record name:string[50]; stoim:integer; year:integer; reg:string[30]; cincom:string[30]; end; tdvd=array[1..300] of disk; recordfile=file of disk; TForm4 = class(TForm) Label3: TLabel; Label4: TLabel; Edit7: TEdit; ComboBox1: TComboBox; Button1: TButton; StringGrid1: TStringGrid; Button2: TButton; procedure Button1Click(Sender: TObject); procedure search_1(dvdfile:string; var
g:recordfile); procedure search_2(dvdfile:string; var
g:recordfile); procedure search_3(dvdfile:string; var
g:recordfile); procedure search_4(dvdfile:string; var
g:recordfile); procedure search_5(dvdfile:string; var
g:recordfile); procedure sort_1(dvdfile:string); procedure sort_2(dvdfile: string); procedure vivod (dvdfile:string); procedure Edit7Click(Sender: TObject); procedure FormCreate(Sender: TObject); procedure Button2Click(Sender: TObject); private public f,g:recordfile; n:integer; dvdfile:string; end; var Form4: TForm4; implementation {$R *.dfm} //////----------------- {Вывод списка} procedure tform4.vivod (dvdfile:string); var s:disk; count:integer; f1:recordfile; begin assignfile(f,dvdfile);{$I-} reset(f); {$I+} N:=0; count:=0; If IOResult=0 then begin while not eof(f) do begin count:=count+1; read(f,s); StringGrid1.cols[0][N+1]:=inttostr(count); StringGrid1.Cells[1,N+1]:=s.name; StringGrid1.Cells[2,N+1]:=inttostr(s.stoim)+" руб."; StringGrid1.Cells[3,N+1]:=intToStr(s.year)+" год"; StringGrid1.Cells[4,N+1]:=s.reg; StringGrid1.Cells[5,N+1]:=s.cincom; N:=N+1; end; seek(f,0); closefile(f); if count=0 then else stringgrid1.rowcount:=N+1; end else begin createdir("Database"); assignfile(f1,derect+"db_ disk.db"); rewrite(f1); closefile(f1); end; end; //----------------- procedure tform4.sort_1(dvdfile: string); var f,q:file of disk; c,i,n:integer; buf:disk; el:tdvd; begin assignfile(q,derect+"db.db"); rewrite(q); assignfile(f,dvdfile); reset(f); c:=0; while not eof(f)do begin c:=c+1; read(f,el[c]); end; for i:=1 to c do for n:=i+1 to c do if el[n].name begin buf:=el[n]; el[n]:=el[i]; el[i]:=buf; end; for i:=1 to c do begin write(q,el[i]); end; closefile(f); closefile(q); vivod(derect+"db.db"); erase(q); end; procedure tform4.sort_2(dvdfile: string); var f,q:file of disk; c,i,n:integer; buf:disk; el:tdvd; begin assignfile(q,derect+"db.db"); rewrite(q); assignfile(f,dvdfile); reset(f); c:=0; while not eof(f)do begin c:=c+1; read(f,el[c]); end; for i:=1 to c do for n:=i+1 to c do if el[n].stoim begin buf:=el[n]; el[n]:=el[i]; el[i]:=buf; end; for i:=1 to c do begin write(q,el[i]); end; closefile(f); closefile(q); vivod(derect+"db.db"); erase(q); end; //--------------------- procedure tform4.search_1(dvdfile:string; var
g:recordfile); var g1:recordfile; s:disk; nameof:string; begin n:=0; nameof:=Edit7.text; assignfile(g1,derect+"result.db"); rewrite(g1); assignfile(g,derect+"db_ disk.db"); {$I-} reset(g); {$I+} if IOResult = 0 then begin while not eof(g) do begin read(g,s); if s.name=nameof then write(g1,s) end; end else showMessage ("Ошибка"); seek(g1,0); while not eof(g1) do begin read(g1,s); inc(n); end; closefile(g); closefile(g1); Edit7.Clear; if n=0 then begin MessageBox(0,"Нет такого фильма.
Введите другие данные","Внимание!",MB_OK
or MB_ICONINFORMATION); end else vivod(derect+"result.db"); erase(g1) end; procedure tform4.search_2(dvdfile:string; var
g:recordfile); var g1:recordfile; s:disk; stoimof:integer; begin n:=0; try stoimof:=StrToInt(Edit7.text); assignfile(g1,derect+"result.db"); rewrite(g1); assignfile(g,derect+"db_ disk.db"); {$I-} reset(g); {$I+} if IOResult = 0 then begin while not eof(g) do begin read(g,s); if s.stoim <= stoimof then write(g1,s) end; end else showMessage ("Ошибка"); seek(g1,0); while not eof(g1) do begin read(g1,s); inc(n); end; closefile(g); closefile(g1); Edit7.Clear; if n=0 then begin MessageBox(0,"Дисков со
стоимостью, ниже заданной, нет.","Внимание!",MB_OK
or MB_ICONINFORMATION); end else sort_2(derect+"result.db"); erase(g1) except MessageBox(0,"Цена указывается
цифрами.","Внимание!",MB_OK or MB_ICONWARNING); Edit7.Clear; end; end; procedure tform4.search_3(dvdfile:string; var
g:recordfile); var g1:recordfile; s:disk; yearof:real; begin n:=0; try yearof:=StrToFloat(Edit7.text); assignfile(g1,derect+"result.db"); rewrite(g1); assignfile(g,derect+"db_sot.db"); {$I-} reset(g); {$I+} if IOResult = 0 then begin while not eof(g) do begin read(g,s); if s.year = yearof then write(g1,s) end; end else showMessage ("Ошибка"); seek(g1,0); while not eof(g1) do begin read(g1,s); inc(n); end; closefile(g); closefile(g1); Edit7.Clear; if n=0 then begin MessageBox(0,"Фильмов данного года выпуска
нет.","Внимание!",MB_OK or MB_ICONINFORMATION); end else sort_1(derect+"result.db"); erase(g1) except MessageBox(0,"Год выпуска указывается в
цифрах.","Внимание!",MB_OK or MB_ICONWARNING); Edit7.Clear; end; end; procedure tform4.search_4(dvdfile:string; var
g:recordfile); var g1:recordfile; s:disk; regof:string; begin n:=0; regof:=Edit7.text; assignfile(g1,derect+"result.db"); rewrite(g1); assignfile(g,derect+"db_ disk.db"); {$I-} reset(g); {$I+} if IOResult = 0 then begin while not eof(g) do begin read(g,s); if s.reg=regof then write(g1,s) end; end else showMessage ("Ошибка."); seek(g1,0); while not eof(g1) do begin read(g1,s); inc(n); end; closefile(g); closefile(g1); Edit7.Clear; if n=0 then begin MessageBox(0,"Данного режиссёра
нет","Внимание!",MB_OK or MB_ICONINFORMATION); end else sort_1(derect+"result.db"); erase(g1) end; procedure tform4.search_5(dvdfile:string; var
g:recordfile); var g1:recordfile; s:disk; cincomof:string; begin n:=0; cincomof:=Edit7.text; assignfile(g1,derect+"result.db"); rewrite(g1); assignfile(g,derect+"db_ disk.db"); {$I-} reset(g); {$I+} if IOResult = 0 then begin while not eof(g) do begin read(g,s); if s.cincom=cincomof then write(g1,s) end; end else showMessage ("Ошибка"); seek(g1,0); while not eof(g1) do begin read(g1,s); inc(n); end; closefile(g); closefile(g1); Edit7.Clear; if n=0 then begin MessageBox(0,"Данной кинокомпаниии
нет.","Внимание!",MB_OK or MB_ICONINFORMATION); end else sort_1(derect+"result.db"); erase(g1) end; procedure TForm4.Button1Click(Sender: TObject); begin if (edit7.Text="") or (edit7.Text="Введите
данные...") then MessageBox(0,"Введите данные для
поиска.","Внимание!",MB_ok or MB_ICONINFORMATION) else case combobox1.ItemIndex of 0:search_1(dvdfile,f); 1:search_2(dvdfile,f); 2:search_3(dvdfile,f); 3:search_4(dvdfile,f); 4:search_5(dvdfile,f); end; end; procedure TForm4.Edit7Click(Sender: TObject); begin edit7.Clear; end; procedure TForm4.FormCreate(Sender: TObject); begin StringGrid1.Rows[0][0]:="Номер"; StringGrid1.Rows[0][1]:="Название фильма"; StringGrid1.Rows[0][2]:="Цена DVD-диска"; StringGrid1.Rows[0][3]:="Год выпуска"; StringGrid1.Rows[0][4]:="Режиссёр"; StringGrid1.Rows[0][5]:="Кинокомпания"; end; procedure TForm4.Button2Click(Sender: TObject); begin Form4.Close; end; end. Модуль
Input.pas; unit Input; interface uses Windows, Messages, SysUtils, Variants, Classes,
Graphics, Controls, Forms, Dialogs, jpeg, ExtCtrls, StdCtrls; const derect="savedvd"; type disk=record name:string[50]; stoim:integer; year:integer; reg:string[30]; cincom:string[30]; end; recordfile=file of disk; TForm3 = class(TForm) Edit1: TEdit; Edit2: TEdit; Edit3: TEdit; Edit4: TEdit; Edit5: TEdit; Label1: TLabel; Label2: TLabel; Label3: TLabel; Label4: TLabel; Label5: TLabel; Button1: TButton; Button2: TButton; procedure input(var f:recordfile; var
dvdfile:string); procedure Button1Click(Sender: TObject); procedure Button2Click(Sender: TObject); private { Private declarations } public n,k:integer; f,g:recordfile; dvdfile:string; end; var Form3: TForm3; implementation uses kursovik; {$R *.dfm} procedure tform3.input(var f:recordfile; var
dvdfile:string); var s,q:disk; begin n:=1; k:=0; assignfile(g,derect+"buffer.db"); rewrite(g); assignfile(f,derect+"db_ disk.db");{$I-} reset(f); {$I+} If IOResult=0 then begin while not eof(f) do begin inc(n); read(f,s); write(g,s); end; closefile(f); end else begin rewrite(f); closefile(f); end; try q.name:=Edit1.text; q.stoim:=StrtoInt(Edit2.Text); q.year:=Strtoint(Edit3.Text); q.reg:=Edit4.Text; q.cincom:=Edit5.Text; seek(g,0); while not eof(g) do begin read(g,s); if s.name=q.name then k:=1; end; if k=1 then MessageBox(0,"Данный
фильм
существует.","",MB_ok
or MB_ICONINFORMATION) else begin write(g,q); MessageBox(0,"Данные
добавлены
в
файл.","",MB_ok
or MB_ICONINFORMATION); end; Edit1.Clear; Edit2.Clear; Edit3.Clear; Edit4.Clear; Edit5.Clear; except MessageBox(0,"Цена
и год выпуска указывается в цифрах!","",MB_OK or MB_ICONWARNING); Edit2.Clear; Edit3.Clear; end; closefile(g); erase(f); rename(g,derect+"db_ disk.db"); end; procedure TForm3.Button1Click(Sender: TObject); begin close; end; procedure TForm3.Button2Click(Sender: TObject); begin if (edit1.Text="") or (edit2.text="") or
(edit3.Text="") or (edit4.Text="") or (edit5.Text="") then MessageBox(0,"Одно
или несколько полей пусты, проверьте правильность
заполнения.","Внимание!",MB_ok or MB_ICONINFORMATION) else input(f,dvdfile); end; end.