Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
3_kurs_kursovoy_proekt_poyasnitelnaya_zapiska.docx
Скачиваний:
4
Добавлен:
01.05.2025
Размер:
236.91 Кб
Скачать
    1. Входные и выходные данные

Входными данными для приложения «Энциклопедия киномана» являются данные о фильме. Эта информация может быть получена из сети интернет, приложение к фильму или личных ассоциаций.

Выходные данные представлены на экранной форме и содержат сведения о фильме, а именно:

  • Название фильма;

  • Режиссёр фильма;

  • Актеры, играющие главные роли в фильме;

  • Год выпуска;

  • Жанр фильма.

Выходные данные могут быть представлены в виде полного перечня фильмов или отфильтрованного списка, характеристики которого задаются самим пользователем.

  1. Структурное проектирование приложений

    1. Проектирование интерфейса пользователя

Интерфейс пользователя должен быть интуитивно понятным и ориентированным на пользователя не имеющего опыта работы с компьютером. Из этого следует, что приложение должно содержать:

  • Удобное расположение элементов окна;

  • Интуитувно понятные кнопки и пункты меню;

  • Баланс в использовании цветовой палитры при проектировании дизайна приложения.

Согласно поставленной задачи, в состав пользовательского интерфейса должны войти такие элементы, как:

  • Кнопки управления приложением;

  • Таблица отображения данных;

  • Меню выбора;

  • Поля ввода данных.

Приложение имеет однопользовательский режим доступа. Пользователь, при входе в приложение может иметь несколько вариантов к действию. Эти действия представлены на рисунке 1 в виде диаграммы вариантов диалога.

Рис. 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;