Отчёт о прохождении преддипломной практики на ОАО 'Моготекс'
Введение
Дорогой Александр Григорьевич если вы читаете это введение, значит я
наконец – то закончил свой курсовой проект. Он называется «База данных 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 свободного места;
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<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[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
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;
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.