Разработка информационной системы «Аптека»
Она осуществляет поиск записи, удовлетворяющей определенным условиям, но, в отличие от метода Locate, не перемещает указатель текущей записи на найденную запись, а считывает информацию из полей записи. Еще одно различие между двумя методами заключается в том, что метод Lookup осуществляет поиск на точное соответствие значений для поиска и значений в полях записей с учетом регистра букв. С целью… Читать ещё >
Разработка информационной системы «Аптека» (реферат, курсовая, диплом, контрольная)
Введение
На сегодняшний день применение баз данных приобрело весьма важное значение для многих организаций, которые для упрощения своей работы применяют компьютерные технологии.
В данном курсовом проекте разработана база данных для информационной поддержки деятельности аптеки с целью автоматизированого ведения данных о лекарствах аптеки.
После проведения анализа, были выявлены следующие задачи:
· Список лекарств;
· Колличество лекарств;
· Описание лекарств Информация о лекарствах и поставщиках заносится в базу данных. При получении нового лекарства, ему присваивается свой индивидуальный код, в базе данных регистрируется следующая информация: лекарство, поствищики, цена заказа, производитель.
Целью данного курсового проекта является приобретение практических навыков обследования предметной области, концептуального, логического и физического проектирования базы данных, освоение средств поддержания целостности базы данных, запросов, отчётов.
В свою очередь база данных написана на языке программирования Delphi7 и позволяет взаимодействовать с большим количеством других программных продуктов Специальная часть
— Постановка задачи Поставленная задача курсовой работы: работа аптеки.
Целью курсовой работы является реализация автоматизированной системы управления работой аптеки.
Требуется создать в среде Delphi 7 приложение. База данных состоит из нескольких таблиц. Отношение между таблицами «один ко многим».
Перечень задач для реализации:
· спроектировать базу данных;
· создать формы для работы с базой;
· организовать пользовательское меню;
· создать поисковые системы ;
· организовать отчеты.
Необходимо разработать базу данных, которая отвечает следующим показателям:
· полнота;
· достоверность;
· актуальность;
· эффективность;
· оперативность;
· удобный интерфейс.
Решение задачи Разработка информационной системы «Аптека» была разделена на два этапа: на разработку информационной базы данных, и на разработку самого приложения.
Первым шагом в проектировании информационной системы является формальное описание предметной области. Самый важный момент при разработке приложения — определить цели и требования. Начинать обследование предметной области нужно с определения главных требований. На этом же этапе нужно выяснить потребности пользователей информационной системы. Следующим шагом на первом этапе будет определение архитектуры информационной системы, т. е. концепцию, определяющую модель, функции и взаимосвязь компонентов в информационной системе.
Аптека нуждается в хранении и оперативной обработке информации, и основная часть такой информации обычно организованна в виде информационной базы данных.
Проектирование схемы базы данных было произведено с помощью средства разработки структуры базы данных Microsoft SQL Server 2008. Microsoft SQL Server 2008 сочетает графический интерфейс Windows, инструменты для построения. Основываясь на спроектированной схеме базы данных, производится дальнейшая разработка базы данных и заполнение ее информацией.
Далее должны быть выбраны инструментальные средства реализации программного продукта.
С помощью выбранных инструментальных средств должен быть разработан графический интерфейс пользователя прикладной программы и алгоритм ее выполнения, а также приложение, предназначенное для обслуживания разработанной базы данных.
Моя информационная система «Аптека» была создана с помощью среды разработки Delphi. С помощью Delphi разработчику удобно проектировать интерфейсную часть приложения, а также писать программный код и связывать его с элементами управления. В интегрированной среде разработки проходят все этапы создания приложения, включая отладку.
Чтобы выявить ошибки приложений в завершении надо разработать тестовые данные. Выявление ошибок необходимый этап, т.к. чем больше ошибок выявит приложение, тем надежнее оно будет.
Для того, чтобы достигнуть цель приложения в соответствии с поставленной задачей были использованы литературные источники и лекции, которые посвящены СУБД Microsoft SQL Server 2008, SQL запросам, средствам проектирования баз данных. Так же были освоена среда разработки Delphi для разработки моего приложения.
Разработка базы данных БД (объект самого высокого уровня, большая часть остальных объектов является дочерними по отношению к БД) представляет собой, как правило, группу объектов которая, включает в себя набор объектов таблиц, а также чаще всего хранимые процедуры и представления, относящиеся к определенной совокупности данных, которые хранятся в таблицах БД. Таблицы могут находиться в одной БД или распределяться по нескольким базам данных.
Разработка базы данных является одним из самых важным этапом разработки информационной системы, в рамках которого с учетом предметной области необходимо спроектировать схему базы данных. Основываясь на спроектированной схеме базы данных, производится дальнейшая разработка базы данных и заполнение ее информацией.
Удачная разработка базы данных обеспечивает простоту ее поддержки. Данные следует сохранять в таблицах, причем каждая таблица должна содержать информацию одного типа, например сведения об авторах или читателях. Тогда достаточно будет обновить конкретные данные, такие как адрес, только в одном месте, чтобы обновленная информация отображалась во всей базе данных.
С проектированием базы данных непосредственно связано понятие нормализации. Отношение называется нормализованным, если значение каждого атрибута в каждом кортеже является атомарным (неделимым).
В реляционной модели данных поддерживаются только нормализованные отношения:
· такой подход не налагает ограничений на то, что можно описывать с помощью нормализованных отношений;
· полученное упрощение в структуре данных ведет к соответствующим упрощениям в операторах манипулирования данными.
Е. Кодд первоначально определил три уровня нормализации, которые он назвал первой, второй и третьей нормальными формами. Все нормализованные отношения находятся в первой нормальной форме (1НФ).
Некоторые отношения 1НФ находятся также во второй нормальной форме (2НФ), некоторые отношения 2НФ находятся в третьей нормальной форме (ЗНФ). Имеется механизм, позволяющий любое отношение преобразовать к третьей нормальной форме. В процессе таких преобразований могут выделяться новые отношения.
Отношение R находится в 1НФ тогда и только тогда, когда все входящие в него значения (домены) содержат только атомарные (неделимые) значения.
Отношение находится во 2НФ, если оно находится в 1НФ и каждый неключевой атрибут функционально полно зависит от составного ключа.
Отношение R находится в ЗНФ, если оно находится в 2НФ и каждый не ключевой атрибут нетранзитивно зависит от первичного ключа.
Процесс построения информационной модели состоит из следующих шагов:
· определение сущностей;
· определение связей;
· задание первичных и альтернативных ключей;
· определение атрибутов сущностей;
· приведение модели к требуемому уровню нормальной формы;
· переход к физическому описанию модели: назначение соответствий имя сущности — имя таблицы, атрибут сущности — атрибут таблицы; задание триггеров, процедур и ограничений;
Построение базы данных в СУБД Microsoft SQL Server 2008 означает прямое отображение фактов из реальной жизни. Например, люди, столы, отделы, собаки и компьютеры являются реальными объектами. Они именуются на естественном языке, с любыми разделителями слов (пробелы, запятые и т. д.).В результате разработки спроектированная схема базы данных (рис. 1a, b).
Рис. 1а (SQL Server 2008)
Разработка прикладной программы
Данное программное обеспечение разработано на языке программирования Delphi7 с использованием СУБД Microsoft SQL Server 2008. Данное СУБД позволяет быстро и качественно проектировать и создавать реляционную модель Базы Данных. Основной используемый язык запросов — Transact-SQL. Transact-SQL является реализацией стандарта ANSI/ISO по структурированному языку запросов (SQL) с расширениями. Используется для работы с базами данных размером от персональных до крупных баз данных масштаба предприятия. Интерфейс СУБД SQL SEVER представляет собой более удобный интерфейс, нежели другие СУБД, что предоставляет более широкие возможности для быстрого и качественного проектирования базы данных.
В данной работе для соединения с базой данных используется технология ADO, которая позволяет соединиться с базой данных без задания псевдонимов. ADO компоненты могут связываться с провайдером напрямую или с помощью компонента ADO Conection.
Для установки связи с ADO у этого компонента необходимо задать свойство Connection String, которое определяет провайдер и расположение базы данных.
Далее для установки связи необходимо выбрать:
File-New-Data Module на вкладке ADO выбрать ADO Connection. После чего, необходимо настроить подключение приложения к БД в свойстве ConnectionString (рис. 2).
Рис. 2
Нажав на кнопку Build, выбираем провайдера «Microsoft OLE DB Provider for SQL Server», и указываем сведения для подключения к БД. Вводим имя сервера, базу данных, и выполняем подключение (Рис. 3,4).
Рис. 3 Рис. 4
Для формирования запросов и наборов данных из базы данных был использован компонент ADOQuery с вкладки ADO. Для промежуточных звений между наборами данных Query и визуальными таблицами на форме был использован компонент DataSource с вкладки Data Access, как бы являются источниками данных для этих таблиц.
Добавив все размещенные на модуле данных объекты, получили следующий состав объектов (Рис. 5)
Рис. 5
Для формирования набора данных в свойствах SQL, для каждого набора данных написан запрос на языке Transact-SQL (T-SQL) (Рис. 6)
Рис. 6
С целью ускорения работы разрабатываемого приложения и освобождения оперативной памяти при подключение к базе данных была написана процедура OnShow, активация происходит не всех наборов данных одновременно — при запуске приложения, а каждого в отдельности набора данных — при выполнении какого-либо события, например, при отображении формы или активации родительского набора данных.
Для того Чтобы объекты Модуля данных (модуля Unit2) стали доступны в модуле Unit1, в подразделе Uses раздела Implementation модуля Unit1 было прописано подключения модуля Unit2 (uses Unit2)
Источники данных (ТDataSource) связаны с соответствующими наборами данных (TADOQuery) через свойство DataSet у источников данных.
Рис. 7
Для отображения содержимого наборов данных на форме были размещены такие компоненты как таблица cxGrid (с вкладки Dev Express), стандартные компоненты DBEdit, DBNavigator
Связанные через свойство DataSource с соответствующими источниками данных. А также, для компонентов DBEdit через свойство DataField — с соответствующими полями таблиц БД.
Для отражения полей данных, которые будут отражаться при выполнении приложения, в свойствае таблицы (cxGrid) были добавлены нужные поля, нажав на кнопку «Retrieve Fields» (Рис. 8)
базы данный аптека
Рис.8
В базе данных присутствует фильтр, компонент RadioGroup с двумя (Рис. 9) переключателями (все, по содержанию)
Рис. 9
Этот фильтр-переключатель будет давать возможность отображать (запрашивать из БД), или:
§ все записи из таблицы заказ, цена базы данных,
§ только те, которые будут соответствовать выбранной пользователем строке в таблице заказчик на экранной форме.
Используемый код фильтра.
Рис. 10
В таблице услуги было создано поле Фото
Для его создания в таблице «услуги» в SQL Server было добавлено поле с типом Varbinary (MAX)
При добавлении в программу этого поля, в его свойствах был указан тип Properties-Imag (Рис. 11).
Рис.11
Чтобы иметь возможность добавлять изображения в формате BMP в Базу данных было форме компонент OpenPictureDialog (Рис. 12).
Рис. 12
Для удобства в последствии выбора BMP-файлов в свойстве Filter этого компонента устанановили фильтр на выбор файлов (Рис. 13).
Рис. 13
Далее, был создан обработчик на событие OnClick у кнопки Button и вписан следующий программный код:
procedure TForm1. Button1Click (Sender: TObject);
begin
with DM do begin
if dlgOpenPic1. Execute then begin
if not (T1.State in [dsInsert, dsEdit]) then
T1.Edit;
//cxgrdbclmnGrid1DBTableView1photo.LoadFromFile (dlgOpenPic1.FileName);
end;
end;
end;
Стандартным компонентом для управления записями БД через Delphi-приложение служит компонент DBNavigator с закладки Data Controls (Рис. 14)
Рис 14
Связав его с источником данных (DataSource) через свойство DataSource становится возможным добавлять, отменять добавление и изменение, удалять, сохранять записи в БД
Но чтобы разобраться в логике работы компонента был рассмотрен другой способ управления записями БД при помощи создания отдельных обработчиков событий OnClick, выполняемых, например, при нажатии на соответствующие кнопки на форме
Обработчик события OnClick, выполняемый при нажатии на кнопку «Добавить» (это еще не сохранение записи в базу данных)
with DM do begin
if zakazchik. State=dsBrowse then begin
zakazchik.Append;
DBEdit1.SetFocus;
end;
end;
Обработчик события OnClick, выполняемый при нажатии на кнопку «Сохранить»
with DM do begin
if zakazchik. State in [dsInsert, dsEdit] then
zakazchik.Post;
end;
Бывает, что при сохранении информации в БД возникают ошибки, например, обязательное поле не заполнено, или БД доступна только для чтения. Действия по исправлению ошибок, выдаче окон-комментариев и пр. можно предусмотреть в обработчике события OnPostError у набора данных, предварительно подключив модули Controls и Dialogs.
MessageDlg ('Ошибка. Проверьте поля кодзаказчика и кодцены', mtError,[mbOK], 0);
if MessageDlg ('Отменить изменения?',
mtConfirmation,[mbYes, mbNo], 0)=mrYes
then zakazchik. Cancel
else Form1. DBEdit1.SetFocus;
Обработчик события OnClick, выполняемый при нажатии на кнопку «Отменить».
with DM do begin
if zakazchik. State in [dsInsert, dsEdit] then
zakazchik.Cancel;
end;
Метод Cancel набора данных отменяет внесенные изменения, не сохраненные пока в БД
Обработчик события OnClick, выполняемый при нажатии на кнопку «Удалить».
with DM do begin
if zakazchik. State=dsBrowse then
if MessageDlg ('Удалить запись?'+#10#13+
'При этом соответствующие записи в '+
'подчиненных таблицах средствами СУБД будут удалены! ',
mtConfirmation,[mbYes, mbNo], 0)=mrYes then
zakazchik.Delete;
end;
Метод Delete набора данных удаляет выбранную запись из БД. Удаление в данном обработчике произойдет только при ответе «Yes» в появившемся окне диалога. При этом средствами СУБД возможно каскадное удаление записей в подчиненных таблицах. (Рис. 15)
Рис. 15
Для удобства использования базы данных был использован механизм транзакций
Транзакция представляет собой отдельную последовательность операций, обычно выполняемую для нескольких таблиц БД (нескольких наборов данных). Транзакция после своего завершения переводит БД из одного целостного непротиворечивого состояния в другое.
С целью выполнения в разрабатываемом приложении инструкций (операторов) языка T-SQL для обработки транзакций был размещен компонент ADOQuery (с вкладки ADO) на модуле данных и переименован в TRAN.
Создан обработчик события BeforePost для набора данных Цена, который будет срабатывать непосредственно перед сохранением записи в Заказ (как новой записи, так и уже существующей исправленной записи)
Ккод обработчика :
procedure TDM. beforpost (DataSet: TDataSet);
begin
if DM.zakaz.State=dsInsert then
Dobavit_v_cenu:=true;
TRAN.SQL.Clear;
TRAN.SQL.Add ('BEGIN TRAN');
TRAN.ExecSQL;
end;
Приведенный программный код в случае добавления в ЗАКАЗ именно новой записи установит для глобальной переменной Dobavit_v_cenu значение True, чтобы при срабатывании следом события AfterPost автоматически бы добавилась и сохранилась запись в Цена. В противном случае, если Dovabit_v_cenu=false, что говорит о том, что была исправлена уже существующая запись в ЗАКАЗ, то автоматически добавляться новая запись в Цена не будет.
Создан обработчик события AfterPost для набора данных ЗАКАЗ, который сработает сразу после сохранения текущей записи набора данных ЗАКАЗ.
Код обработчика
procedure TDM. aftepost (DataSet: TDataSet);
begin
with DM do begin
TRY
if Dobavit_v_cenu=true then begin
Cena.Append;
Cena.FieldByName ('kodzakaz').AsVariant:=zakaz.FieldByName ('kodzakaz').AsVariant;
Cena.FieldByName ('koducluga').AsVariant:=uclugi.FieldByName ('koducluga').AsVariant;
Cena.Post;
showmessage ('Aiaaaeee caienu a Oaio');
Dobavit_v_cenu:=false;
end;
TRAN.SQL.Clear;
TRAN.SQL.Add ('COMMIT TRAN');
TRAN.ExecSQL;
EXCEPT
TRAN.SQL.Clear;
TRAN.SQL.Add ('ROLLBACK TRAN');
TRAN.ExecSQL;
zakaz.Close;
zakaz.Open;
END;
end;
end;
Приведенный программный код содержит конструкцию TRY. EXCEPT, которую удобно использовать в приложении для обработки исключений при использовании механизма транзакций. Конструкция TRY. EXCEPT работает так:
§ если при выполнении операторов блока TRY возникает исключение, то управление передается первому оператору блока EXCEPT;
§ если исключения не возникло, то операторы блока EXCEPT не выполняются.
Если в блоке TRY возникает исключение, выполняется инструкция «ROLLBACK TRAN» языка T-SQL, производящая откат всех изменений в БД, которые были выполнены с начала транзакции.
Создан обработчик события OnPostError для набора данных ЗАКАЗ
Код обработчика:
procedure TDM. error (DataSet: TDataSet; E: EDatabaseError;
var Action: TDataAction);
begin
TRAN.SQL.Clear;
TRAN.SQL.Add ('ROLLBACK TRAN');
TRAN.ExecSQL;
zakaz.Close;
zakaz.Open;
end;
Приведенный программный код срабатывает при возникновении ошибки сохранения текущей записи в ЗАКАЗ, выполняет инструкцию «ROLLBACK TRAN» языка T-SQL, производящую откат всех изменений в БД, которые были выполнены с начала транзакции.
Необходимо реализовать связь «много-ко-многим» в обратном направлении со стороны таблицы Услуги.
Для этого был размещен на Модуле данных (DM) новый набор данных (компонент класса TADOQuery) с именем, VHOD (от слов «входимость», «применимость») и в его свойство SQL написан приблизительный статический запрос на языке T-SQL (рис. 16).
Рис. 16
Назначение набора данных VHOD заключается в формировании из таблицы Цена базы данных только тех записей, поле связи КОДЦЕНА которых равно полю КОДЦЕНА выбранной записи в наборе данных УСЛУГИ (посредством работы динамического запроса).
Поскольку в дальнейшем необходимо отобразить содержимое набора данных VHOD в визуальной таблице на экранной форме, был размещен на Модуле данных (DM) соответствующий источник данных DSVHOD (компонент класса TDataSource) и связан с набором данных VHOD через свойство DataSet. (Рис. 17)
Рис. 17
Далее:
§ Была создана новая экранную форма Form3 (меню File -> New -> Form);
§ Размещена на ней визуальная таблица cxGrid (с вкладки Dev Express) и стандартный компонент DBNavigator (с вкладки Data Controls);
§ Была установлена связь их с соответствующим источником данных через свойство DataSource,
§ активирован набор данных VHOD, присвоив свойству Active значение True;
§ добавлены в визуальную таблицу поля, которые отображаются при выполнении приложения (Рис. 18).
.
Рис. 18
Разместив на главной экранной форме кнопку «Посмотреть применимость» (компонент класса TBitBtn), и создан для нее обработчик события OnClick, в который записан следующий программный код по формированию записей в наборе данных VHOD из таблицы ЦЕНА базы данных, связанных с выбранной пользователем записью в наборе данных УСЛУГИ:
procedure TForm1. clickVHOD (Sender: TObject);
begin
with DM do begin
if NOT uclugi. IsEmpty then begin
VHOD.Close;
VHOD.SQL.Clear;
VHOD.SQL.Add ('select * from cena');
VHOD.SQL.Add ('where koducluga='+uclugi.FieldByName ('koducluga').AsString);
VHOD.SQL.Add ('order by kodcena');
VHOD.Open;
Form3.Show;
end;
end;
end;
Динамический запрос формируется при условии, что набор данных УСЛУГИ не пуст, и поле КОДЦЕНА определено. (Рис. 19).
Рис.19
Было Добавлено в разрабатываемом приложении в набор данных VHOD такое поле выбора, появится возможность в наборе данных VHOD работать непосредственно с датой выдачи заказа из ЗАКАЗ
С этой целью добавьте в набор данных VHOD все используемые поля и создайте новое поле — поле выбора — с именем, ДатаВыдачи. Для этого в контекстном меню для набора данных VHOD были выполнены команды «Add all fields» и «New Field».
Добавлено в визуальную таблицу новое поле ДатаВыдачи, которое, будет отображаться при выполнении приложения.
Теперь, работая с набором данных VHOD на экранной форме «Применимость», пользователь сможет видеть не только КодЦены, к которым применимо выбранное описание, но и дата выдачи заказа. (Рис. 20).
Рис. 20
Для реализации поиска по наборам данных была использована отдельная форма.
Для вызова (отображения) формы поиска и ряда других возможностей используется выпадающее меню на главной форме, т. е. компонент MainMenu (класс TMainMenu). Разместив его на форме, в контекстном меню выбрав команду «Menu Designer» и в редакторе создано расположение пунктов и подпунктов главного меню (Рис. 21).
Рис. 21
На новой форме были размещены необходимые компоненты (Рис. 22).
Рис. 22
На модуле данных были размещены невизуальные компоненты:
§ набор данных FIND (класс TADOQuery);
§ источник данных DSFIND (класс TDataSource).
Далее:
§ Был связан набор данных с БД через свойство Connection;
§ в свойство SQL занесен многотабличный запрос;
§ временно активирован набор данных. Эти два пункта были необходимы для запроса полей в визуальную таблицу;
§ Был связан источник данных DSFIND с соответствующим набором данных FIND;
§ Была связана визуальная таблица на форме с источником данных;
§ Был деактивирован набор данных
Для организации поиска записей была создана процедура-обработчик события OnClick у кнопки Button1 «Начать поиск», которая сработает после нажатия на кнопку, и в нее записан следующий программный код для создания и отправки динамического запроса к БД с целью формирования набора данных FIND.
Текст данного динамического запроса на языке T-SQL строится с учетом данных, введенных на экранной форме.
procedure TForm4. Hachatbnouck (Sender: TObject);
begin
Label1.Visible:=false;
with DM do begin
if CheckBox1. Checked or CheckBox2. Checked then begin
FIND.SQL.Clear;
FIND.SQL.Add ('select * from zakaz, cena, Yclyga');
FIND.SQL.Add ('where (zakaz.kodzakaz=cena.kodzakaz) and (cena.koducluga=Yclyga.koducluga)');
end
else FIND. Close;
if CheckBox1. Checked then
if CheckBox3. Checked then
FIND.SQL.Add ('and nazvanueUclugi like '+#39+'%'+Edit1.Text+'%'+#39)
else
DM.FIND.SQL.Add ('and nazvanueUclugi='+#39+Edit1.Text+#39);
if CheckBox2. Checked then
if CheckBox3. Checked then
FIND.SQL.Add ('and datavudachu like '+#39+'%'+Edit2.Text+'%'+#39)
else
FIND.SQL.Add ('and datavudachu='+#39+Edit2.Text+#39);
if CheckBox1. Checked or CheckBox2. Checked then begin
FIND.SQL.Add ('order by zakaz. datavudachu, Yclyga. nazvanueUclugi');
FIND.Open;
if FIND. IsEmpty then Label1. Visible:=true;
end;
end;
end;
Результат работы приведенного запроса выглядеть следующим образом (Рис. 23)
Рис. 23
В соответствии с найденной записью в таблице поиска необходимо реализовать переход на соответствующую запись в другой таблице другого набора данных.
Для такого поиска записи по полям служат методы набора данных Locate и Lookup.
Функция
Locate (const KeyFields: String;
const KeyValues: Variant;
Options: TLocateOptions): Boolean;
Она ищет запись с заданными значениями полей. Если удовлетворяющие условиям поиска записи существуют в наборе данных, то указатель текущей записи устанавливается на первую из них. Если запись найдена, то функция Locate возвращает значение True, в противном случае — значение False.
Для поиска в наборе данных также используется метод Lookup, который работает аналогично методу Locate.
Функция
Lookup (const KeyFields: String;
const KeyValues: Variant;
сonst ResultFields: String): Variant;
Она осуществляет поиск записи, удовлетворяющей определенным условиям, но, в отличие от метода Locate, не перемещает указатель текущей записи на найденную запись, а считывает информацию из полей записи. Еще одно различие между двумя методами заключается в том, что метод Lookup осуществляет поиск на точное соответствие значений для поиска и значений в полях записей с учетом регистра букв.
В курсовом проекте в соответствии с найденной записью в таблице поиска необходимо реализовать переход на соответствующую запись в другой таблице другого набора данных методом Locate.
Для этого была создана процедуру-обработчик события OnClick у кнопки BitBtn2 «Переход на запись в таблице Заказ» (Рис. 24) (класс TBitBtn) и в нее записан следующий программный код:
DM.zakaz.Locate ('kodzakaz', DM.FIND.FieldByName ('kodzakaz').AsVariant,[]);
Form1.SetFocus;
Рис. 24
Необходимо осуществить несколько обращений к данному методу, поскольку не всегда одновременно отображаются именно все записи набора данных Услуги, его записи формируются согласно динамическому запросу, и, следовательно, будет невозможно осуществить поиск сразу.
Надо переместить указатель текущей записи сначала в наборе данных Заказ, а уже потом осуществить поиск записи в наборе данных Услуги (Рис. 25)
Для этого в процедуру-обработчик события OnClick у кнопки BitBtn3 «Переход на запись в таблице Услуги» записан следующий программный код:
DM.zakaz.Locate ('kodzakaz', DM.FIND.FieldByName ('kodzakaz').AsVariant,[]);
DM.Uclugi.Locate (`koducluga', DM.FIND.FieldByName (`koducluga').AsVariant,[]);
Form1.SetFocus;
Рис. 25
Для изучения вопроса, связанного с вычисляемыми полями были добавлены в таблицу Услуги базы данных обязательные поля Цена (цена услуги) и Kolvo (количество услуг в заказе) в таблицу Цена.
Далее, в приложение было добавлено вычисляемое поле Summa, которое не будет храниться в БД, а будет вычислять общую стоимость цветков на основе имеющихся данных, перемножая значения полей Cena и Kolvo.
Создана процедура-обработчик события OnCalcFields у набора данных Цена, которое срабатывает при формировании каждой записи набора данных и позволяет сформировать значение вычисляемого поля. В созданную процедуру-обработчик записан следующий программный код:
Cena.FieldByName ('SUMMA').AsFloat :=
Cena.FieldByName ('Cenaaa').AsFloat *
cena.FieldByName ('Kolichectvo').AsInteger;
Результат работы процедуры-обработчика выглядит следующим образом (Рис. 26).
Рис. 26
Далее, в КП в Delphi-приложении необходимо реализовать запрос, содержащий один из операторов манипулирования данными языка SQL (Insert, Delete, Update). В данном курсовом проекте в запросе был использован оператор UPDATE для иденсикации стоимости услуги
Был создан пункт главного меню «Индексация» и подпункт «Повышение стоимости на 10%», который и будет выполнять запрос, содержащий оператор Update. Для реализации был размещен на Модуле данных (DM) компонент IND (класс TADOQuery), связываем его с БД через свойство Connection и в свойство SQL вписываем следующий запрос изменения данных в БД
Update YCLYGA
Set cena=cena+cena*0.1
В данном случае запрос формируется статически
Для выполнения запроса создана процедуру-обработчик события OnСlick у подпункта меню N101 «Повышение стоимости на 10%», в которую записан программный код, а именно — обращение к методу ExecSQL компонента IND
Для того, чтобы данные в визуальной таблице обновились, необходимо обновить набор данных Цена и Услуги, а попросту — закрыть и открыть набор данных.
Для этого было использовано два способа :
§ применение закладок (маркеров) в наборах данных для таблицы Услуги. Логика их работы следующая: Устанавливаем закладку, закрываем НД, открываем набор данных, переходим на закладку
§ обновлять набор данных методом Refresh для таблицы Цена procedure TForm1. N101Click (Sender: TObject);
begin
with DM do begin
IND.ExecSQL;
Zakladka:=uclugi.GetBookmark;
uclugi.Close;
uclugi.Open;
cena.refresh;
if uclugi. BookmarkValid (Zakladka) then begin
uclugi.GotoBookmark (Zakladka);
uclugi.FreeBookmark (Zakladka);
end;
end;
end;
В курсовом проекте была поставлена задача создание простого отчета при помощи матера и создание группирующего отчета
Для простого отчета с закладки Rave был размещен на Модуле данных универсальный компонент ConnectTozakaz (класс TRvDataSetConnection), являющийся посредником для взаимодействия отчета с набором данных Заказ. Каждый публикуемый в отчете НД должен снабжаться соответствующим посредником
Связываем компонент ConnectToT1 с набором данных Т1, заполнив его свойство DataSet
Дальнейшая работа осуществляется под управлением утилиты Rave Reports Designer (Рис. 27)
Рис. 27
Был создан новый проект отчетов. (Рис. 28)
Рис. 28
С помощью команды меню File -> New Data Object создан в проекте отчетов объект данных Direct Data View
Вызываем мастер создания отчета (командой Tools -> Simple Table), с его помощью были выбраны нужные отображаемые поля
В результате работы мастера был создан отчет, содержащий единственную страницу (компонент MainPage), содержащую область просмотра данных DataView1Region с тремя полосами:
§ DataView1TitleBand;
§ DataView1Band;
§ DataView1DataBand.
Был размещен в Delphi-приложении на модуле данных компонент MyProject (класс TrvProject) с закладки Rave и указываем ссылку на созданный проект отчетов Reports. rav в свойстве ProjectFile (Рис. 29)
Рис. 29
В результате был создан простой отчет содержащий только данные с таблицы Заказ (КодЗаказчика, Кодзаказ) (Рис.30).
Рис. 30
Группирующими называются отчеты, в которых вся информация разделяется на группы данных, объединенных каким-то общим признаком. Например, описания (характеристики), относящиеся к определенному цветку, или на другом примере — список товаров, поставленных конкретным поставщиком.
Для создания группирующего отчета был размещен в приложении на Модуле данных компонент GROUP (класса TADOQuery), подключенный к БД, со следующим текстом запроса:
select * from cena, zakaz, yclyga
where zakaz. kodzakaz=cena.kodzakaz and
cena.koducluga=YCLYGA.koducluga
order by kodcena
С закладки Rave был размещен на Модуле данных компонент ConnectToGroup (класс TRvDataSetConnection), являющийся посредником для взаимодействия отчета с набором данных GROUP, и, заполнив свойство DataSet, связываем его с набором данных
В утилите Rave Reports Designer в уже разработанном проекте отчетов Reports. rav создан новый отчет (главное меню File -> New Report)
С помощью команды меню File -> New Data Object был создан в проекте отчетов объект отображения данных типа Direct Data View, ссылающийся на связной компонент ConnectToGroup (класс TRvDataSetConnection) в Delphi-приложении
Каждый компонент, используемый для отображения данных из отдельных полей НД, через свойство DataView связываем с объектом отображения данных, а в его свойстве DataField указываем отображаемое компонентом поле данных или выражение с участием полей и системных переменных
Создав отчет, был создан для предусмотренного ранее подпункта главного меню N7 «Группирующий отчет» процедуру-обработчик события OnClick, в которую записываем программный код по открытию группирующего НД, запуску проекта отчетов и формированию разработанного отчета MyGroupReport, и закрытию НД:
DM.GROUP.Open;
DM.MyProject.ExecuteReport ('MyGroupReport');
DM.GROUP.Close;
В результате получили группирующий отчет показывающий информацию о заказчике (Рис. 31).
Рис. 31
Заключение
В ходе выполнения курсового проекта была разработана информационная система библиотеки, в которой хранятся данные о книгах, авторах, читателях и формулярах. Эта информационная система обеспечивает автоматизированную технологию решения задач, учета книг в библиотеке. Разработанный курсовой проект дает пользователю возможность получения информации по всем таблицам базы данных. Проект обладает свойствами надежности и обеспечивает простое и понятное пользование программой.
Цели, которые были достигнуты при разработке информационной системы библиотеки:
· Разработана и усовершенствована модель базы данных
· Доступное и простое использование программы, разработанной в среде программирования Delphi
· Приложение разработано так, что позволяет нам выполнять действия над таблицами: добавлять, изменять или удалять записи.
· С помощью кнопки «лекарства» или «поставщики» можно посмотреть, какой поставщик, какое леарство, какого производителя, и на какда было завезенно
· С помощью приложения можно просматривать отчеты Список литературы
1. Юрий Сергеевич Избачков, Владимир Николаевич Петров «Информационные системы. 2-е издание» изд. «Питер», 2006 г.
2. Шауцукова Лейла Залим-Гериевна «Информатика» изд. «Просвещение», 2000 г.
3. С. В. Горин, А. Ю. Тандоев «Применение CASE-средства ERwin 2.5 для информационного моделирования в системах обработки данных».
4. А. Н. Вальвачев, К. А. Сурков, Д. А. Сурков, Ю. М. Четырько «Программирование на языке Delphi».