Введение
Дорогой Александр Григорьевич если вы читаете это введение, значит я наконец – то закончил свой курсовой проект. Он называется «База данных 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);
pr
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<stringgrid1.rowcount do
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<el[i].name then
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<el[i].stoim then
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<el[i].year then
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<el[i].reg then
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<el[i].cincom then
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<el[i].name then
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<el[i].stoim then
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.