
- •Пояснительная записка к курсовой работе
- •Введение
- •Постановка задачи
- •Описание математической модели
- •Структура таблицы базы данных kinoman
- •Технология разработки приложения
- •Выбор и обоснование среды программирования
- •Входные и выходные данные
- •Структурное проектирование приложений
- •Проектирование интерфейса пользователя
- •Методы программирования
- •Реализация защитного программирования
- •Аномалии
- •Перечень ситуаций и реакция приложения
- •Оптимизация программы
- •Тестирование программы
- •Действия пользователя и реакция приложения
- •Инструкция пользователя
- •Заключение
- •Литература
Входные и выходные данные
Входными данными для приложения «Энциклопедия киномана» являются данные о фильме. Эта информация может быть получена из сети интернет, приложение к фильму или личных ассоциаций.
Выходные данные представлены на экранной форме и содержат сведения о фильме, а именно:
Название фильма;
Режиссёр фильма;
Актеры, играющие главные роли в фильме;
Год выпуска;
Жанр фильма.
Выходные данные могут быть представлены в виде полного перечня фильмов или отфильтрованного списка, характеристики которого задаются самим пользователем.
Структурное проектирование приложений
Проектирование интерфейса пользователя
Интерфейс пользователя должен быть интуитивно понятным и ориентированным на пользователя не имеющего опыта работы с компьютером. Из этого следует, что приложение должно содержать:
Удобное расположение элементов окна;
Интуитувно понятные кнопки и пункты меню;
Баланс в использовании цветовой палитры при проектировании дизайна приложения.
Согласно поставленной задачи, в состав пользовательского интерфейса должны войти такие элементы, как:
Кнопки управления приложением;
Таблица отображения данных;
Меню выбора;
Поля ввода данных.
Приложение имеет однопользовательский режим доступа. Пользователь, при входе в приложение может иметь несколько вариантов к действию. Эти действия представлены на рисунке 1 в виде диаграммы вариантов диалога.
Рис. 1. Диаграмма варинатов диалога
Методы программирования
При проектировании приложения были использованы различные подходы к созданию. Опишем эти методы:
Подключение базы данных
Связь базы данных Access и приложения Delphi осуществляется с использованием технологии ADO. Необходимо, чтобы на главной форме приложения были размещены компоненты:
TDBGrid - Компонент предназначен для отображения данных БД в приложении, расположен на вкладке DataControls;
TDataSource - Компонент предназначен для связи сетки отображения данных, с самой БД, расположен на вкладке Data Assecc;
TADOConnection - Компонент предназначен для подключения БД по определенному провайдеру, расположен на вкладке ADO;
TADOQuery - Компонент предназначен для извлечения нужных результатов из БД, расположен на вкладке ADO.
TADOQuery в свойстве Connection связывается с TADOConnection. TDataSource в свойстве DataSet связывается с TADOQuery. TDBGrid в свойстве DataSource связывается с TDatasource. Для осуществления связи все указанные свойства выбираются из выпадающего списка.
Для компонента TADOConnection в свойстве LoginPromt было установлено значение False, чтобы при подключении к БД не запрашивался пароль. Для соединения с базой данных в свойстве ConnectionString было вызвано окно следующего вида (см. рис. 2):
Рис. 2. Настройка подключения к базе данных
Далее, был выбран провайдер Microsoft Jet 4.0 OLE DB Provaider.
В следующем окне был указан путь к БД и имя пользователя по умолчанию (Admin). Если БД находится в корневом каталоге с программой, то в данном поле достаточно указать ее имя с расширением, база данных находится в подкаталоге BD, поэтому указываем имя BD\kinoman.mdb
В свойстве компонента TDBGrid было выбрано Options и в подствойстве dgEditing установлено значение False (запрет редактирования в таблице), а в подсвойстве dgRowSelect установлено значение True (выделяется вся строка в таблице)
Для компонента TADOConnection — в свойстве Mode выбрано значение cmShareDenyNone (из выпадающего списка)
Перемещение по БД
Для возможности перехода по записям в таблице были созданы четыре кнопки «Следующая запись», «Предыдущая запись», «В начало», «В конец»
Их работоспособность обеспечивается благодаря следующему коду:
ADOQuery1.Next;
ADOQuery1.Prior;
ADOQuery1.First;
ADOQuery1.Last.
Добавление, удаление данных
Для возможности добавления и удаления данных была проведена дополнительная настройка объекта TDBGrid. После этого, для кнопки «Добавить» был написан следующий код:
try
if (Trim(Edit1.Text)='') or (Trim(Edit2.Text)='') or (Trim(Edit3.Text)='') or (Trim(Edit4.Text)='') or (Trim(Edit5.Text)='') or (Trim(Edit6.Text)='')
then
begin
exit;
end;
ADOQuery1.Insert;
ADOQuery1.FieldByName('kod').AsInteger:=StrToInt(Edit1.Text);
ADOQuery1.FieldByName('name').AsString:=Edit2.Text;
ADOQuery1.FieldByName('director').AsString:=Edit3.Text;
ADOQuery1.FieldByName('actor').AsString:=Edit4.Text;
ADOQuery1.FieldByName('god').AsInteger:=StrToInt(Edit5.Text);
ADOQuery1.FieldByName('janr').AsString:=Edit6.Text;
Edit1.Clear;
Edit2.Clear;
Edit3.Clear;
Edit4.Clear;
Edit5.Clear;
Edit6.Clear;
except
on e:Exception do
end;
После добавления информации она должны быть дополнительно сохранена, для этого на кнопке «Сохранить» был написан следующий код:
try
ADOQuery1.Active:=True;
ADOQuery1.Post;
except
on e:Exception do
end;
Для удаления текущей записи был использован следующий код:
try
if Application.MessageBox ('Подтвердите удаления записи' , 'ADO' , MB_YESNO) = IDYES then
begin
ADOQuery1.Delete;
end;
except
on e:Exception do
end;
Редактирование данных
Кнопка «Редактировать» содержит код:
try
Edit1.Text:=IntToStr(ADOQuery1.FieldByName('kod').AsInteger);
Edit2.Text:=ADOQuery1.FieldByName('name').AsString;
Edit3.Text:=ADOQuery1.FieldByName('director').AsString;
Edit4.Text:=ADOQuery1.FieldByName('actor').AsString;
Edit5.Text:=IntToStr(ADOQuery1.FieldByName('god').AsInteger);
Edit6.Text:=ADOQuery1.FieldByName('janr').AsString;
except
on e:Exception do
end;
ADOQuery1.Delete;
Сортировка данных
В зависимости от выбранного пункта элемента RadioGroup1 сортировка проводится по разным полям
Программный код, реализующий сортировку:
case
radiogroup1.itemindex of
0:ADOQuery1.Sort:='kod';
1:ADOQuery1.Sort:='name';
2:ADOQuery1.Sort:='director';
3:ADOQuery1.Sort:='god';
4:ADOQuery1.Sort:='janr';
Фильтрация данных
Поле, по которому будет производиться фильтрация, определяется с помощью объекта RadioGroup2.
Программный код, реализующий фильтрацию:
if length(edit7.text)>0 then
begin
ADOQuery1.SQL.Clear;
if radiogroup2.itemindex=0 then ADOQuery1.SQL.Add('SELECT * FROM Kinoman where name like ' + #39 + '%' + edit7.Text + '%' + #39 );
if radiogroup2.itemindex=1 then ADOQuery1.SQL.Add('SELECT * FROM Kinoman where director like ' + #39 + '%' + edit7.Text + '%' + #39 );
if radiogroup2.itemindex=2 then ADOQuery1.SQL.Add('SELECT * FROM Kinoman where actor like ' + #39 + '%' + edit7.Text + '%' + #39 );
ADOQuery1.Active:=True;
end;
edit7.text:='';
Для восстановления всех записей используем программный код:
ADOQuery1.SQL.Clear;
ADOQuery1.SQL.Add('SELECT * FROM Kinoman');
ADOQuery1.Active:=True;
Поиск данных
Поиск данных выполняется с помощью двух кнопок «Искать» и «Искать дальше». По умолчанию кнопка «Искать дальше» сделана неактивной (свойству Enable установлено значение false), она становится доступной в том случае, если найдено первое значение. Если искомое значение не найдено, выводится искомый текст и сообщение о том, что он не найден.
FoundRec:=False;
case radiogroup3.ItemIndex of
0: s:='kod';
1: s:='name';
2: s:='director';
3: s:='god';
4: s:='janr';
end;
ADOQuery1.First;
while not ADOQuery1.Eof do begin
if AnsiLowerCase(ADOQuery1.FieldValues[s]) = AnsiLowerCase(Edit7.Text) then
begin
FoundRec:=True;
Button13.Enabled:=True;
break;
end;
ADOQuery1.Next;
end;
if not FoundRec then begin
ADOQuery1.First;
ShowMessage(edit7.Text+' не найдено');
end;
В случае, если первое значение будет найдено, кнопка «Искать дальше» становится активной и нажатие на нее переводит курсор на следующее найденное значение.
Программный код:
ADOQuery1.Next;
while not ADOQuery1.Eof do begin
if AnsiLowerCase(ADOQuery1.FieldValues[s]) = AnsiLowerCase(Edit7.Text) then
break;
ADOQuery1.Next;
end;
if ADOQuery1.Eof then ADOQuery1.First;
end;