книги / Проектирование автоматизированных информационных систем на основе объектно-ориентированного подхода
..pdfДанная форма не должна содержать никаких элементов управле ния, таких как кнопки, выпадающие списки и т.п. Подобные элемен ты должны находиться в дочерних окнах. Главное окно, как правило, содержит меню, панели инструментов и строку состояния, а остав шееся пространство служит для размещения дочерних окон.
Создадим меню для главной формы. Для этого расположим ком понент «MainMenu» с панели инструментов «Standard» на главной форме. Переименуем его в «MainMDIMenu». Затем двойным щелч ком на компоненте откроем редактор структуры меню. В данном ре дакторе мы можем создать все необходимые пункты главного меню. Создадим их согласно структуре, представленной на рис. П3.61.
Файл |
Модуль |
Отчеты |
Выход |
Бухгалтерский учет |
Товарный баланс |
|
Оприходование товара |
Поступления за период |
|
Работа с накладными |
Реализация за период |
|
АРМ менеджера |
Остатки по складам |
|
Работа с заказами |
Анализ продаж за период |
|
План закупок |
|
|
АРМ кладовщика |
|
|
Работа с накладными |
|
|
Акт приема-передачи |
|
|
товара от контрагента |
|
Справочники |
Служебное |
Окно |
Реквизиты |
Администрирование |
Каскад |
Подразделения |
Настройки |
Мозаика |
Товары |
Передача данных |
Следующее окно |
Контрагенты |
|
Предыдущее окно |
|
|
Закрыть окно |
Справка |
|
|
Инструкция пользователя
О программе
Рис. П3.61. Структура меню для главной формы
Установим свойство «Menu» нашей формы в «MainMDIMenu». Теперь главная форма будет выглядеть так же, как на рис. П3.62.
Для завершения работы над главной формой поместим на нее па нель инструментов (компонент «ТооШаг») и строку состояния (ком понент «StatusBar»). Установим свойство «Flat» панели инструментов в «True» и создадим пока всего две кнопки. Одну проассоциируем (свойство кнопки «Menultem») с пунктом меню «Выход», а вторую
/ / Product
# i n c l u d e " P r o d u c t . h "
c l a s s O r d e r P o s i t i o n
{
O r d e r P o s i t i o n ( ) ; |
|
|
|
|
|
O r d e r P o s i t i o n ( c o n s t O r d e r P o s i t i o n & r i g h t ) ; |
|
||||
- O r d e r P o s i t i o n ( ) ; |
|
|
|
|
|
O r d e r P o s i t i o n |
& |
o p e r a t o r = ( c o n s t |
O r d e r P o s i t i o n |
||
i n t o p e r a t o r = = ( c o n s t O r d e r P o s i t i o n b r i g h t ) |
c o n s t ; |
||||
i n t o p e r a t o r ! = ( c o n s t O r d e r P o s i t i o n b r i g h t ) |
c o n s t ; |
||||
/ / П о л у ч и т ь д е й с т в у ю щ и й ) ц е н у п о п р а й с - л и с т у |
|
||||
d o u b l e g e t A c t u a l P r i c e |
( ) ; |
|
|
||
/ / П о л у ч е н и е ц е н ы с у ч е т о м н а л о г о в |
|
|
|||
d o u b l e g e t A c t u a l T a x P r i c e ( ) ; |
|
|
|||
/ / Р а с ч е т с у м м ы |
|
|
|
|
|
d o u b l e c a l c A m o u n t |
( ) ; |
|
|
|
|
/ / Р а с ч е т с у м м ы с н а л о г а м и |
|
|
|||
d o u b l e c a l c A m o u n t T a x |
( ) ; |
|
|
||
c o n s t P r o d u c t * g e t _ t h e _ P r o d u c t () c o n s t ; |
|
||||
v o i d s e t _ t h e _ P r o d u c t |
( P r o d u c t * v a l u e ) ; |
|
|||
p u b l i c : |
|
|
|
|
|
b r i g h t ) ; |
|
|
|
|
|
p |
r o t e c t e d : |
p |
u b l i c : |
|
c o n s t d o u b l e g e t _ q u a n t i t y |
|
v o i d s e t _ q u a n t i t y ( d o u b l e |
() c o n s t ; v a l u e ) ;
c o n s t c h a r * g e t _ m e a s u r e U n i t v o i d s e t _ m e a s u r e U n i t ( c h a r *
() c o n s t ; v a l u e ) ;
c o n s t d o u b l e g e t _ p r i c e v o i d s e t _ p r i c e ( d o u b l e
() c o n s t ; v a l u e ) ;
c o n s t d o u b l e g e t _ t a x P r i c e v o i d s e t _ t a x P r i c e ( d o u b l e
() c o n s t ; v a l u e ) ;
c o n s t d o u b l e g e t _ a m o u n t v o i d s e t _ a m o u n t ( d o u b l e
() c o n s t ; v a l u e ) ;
c o n s t d o u b l e g e t _ _ t a x A m o u n t v o i d s e t t a x A m o u n t ( d o u b l e
() c o n s t ; v a l u e ) ;
d o u b l e q u a n t i t y ;
c h a r * m e a s u r e U n i t ; d o u b l e p r i c e d -
d o u b l e t a x P r ic e d - d o u b l e a m o u n t ;
d o u b l e t a x A m o u n t ;
P r o d u c t * t h e P r o d u c t ;
Ниже представлен фрагмент кода соответствующего файла «Order,срр».
/ / O r d e r
# i n c l u d e " O r d e r . h "
/ / C l a s s O r d e r
O r d e r : : O r d e r ()
{
}
O r d e r : : O r d e r ( c o n s t O r d e r b r i g h t )
{
}
O r d e r : : - O r d e r ()
{
}
O r d e r & O r d e r : : o p e r a t o r = ( c o n s t O r d e r b r i g h t )
{
i n t O r d e r : : o p e r a t o r = = ( c o n s t O r d e r b r i g h t ) c o n s t
{
}
i n t O r d e r : : o p e r a t o r ! = ( c o n s t O r d e r b r i g h t ) c o n s t
{
}
d o u b l e O r d e r : : c a l c A m o u n t ()
{
}
d o u b l e O r d e r : : c a l c T a x ()
{
}
d o u b l e O r d e r : : c a l c T a x A m o u n t ()
{
}
d o u b l e O r d e r : : c a l c P o s Q u a n t i t y ()
{
}
O r d e r P o s i t i o n : : O r d e r P o s i t i o n ()
{
}
O r d e r P o s i t i o n : : O r d e r P o s i t i o n ( c o n s t O r d e r P o s i t i o n & r i g h t )
O r d e r P o s i t i o n : : ~ O r d e r P o s i t i o n ()
{
O r d e r P o s i t i o n & O r d e r P o s i t i o n : : o p e r a t o r = ( c o n s t O r d e r P o
s i t i o n S r i g h t )
{
}
i n t |
O r d e r P o s i t i o n : : o p e r a t o r = = ( c o n s t |
O r d e r P o s i t i o n |
b r i g h t ) |
c o n s t |
|
{ |
|
|
} |
|
|
i n t |
O r d e r P o s i t i o n : : o p e r a t o r ! = ( c o n s t |
O r d e r P o s i t i o n |
b r i g h t ) |
c o n s t |
|
{ |
|
|
} |
|
|
d o u b l e O r d e r P o s i t i o n : : g e t A c t u a l P r i c e () |
|
|
{ |
|
|
} |
|
|
d o u b l e O r d e r P o s i t i o n : : g e t A c t u a l T a x P r i c e |
() |
|
{ |
|
|
} |
|
|
Мы видим, что в файле «Order.cpp» содержатся лишь «заглуш ки» для соответствующих операций, конструкторов и деструкторов. Прописать функциональную часть той или иной операции придется нам самим.
За поддержку всех действий с заказами отвечает класс «OrderForm», с него и начнем нашу работами с классами от Rational Rose.
Реализаций операций класса «OrderForm» может быть множест во. Мы приведем лишь один вариант, не претендуя на его совершен ство, ведь наша цель - научиться использовать на практике классы, полученные с помощью Rational Rose.
Так как вся информация о заказах будет храниться в таблицах БД Oracle, то необходимо организовать обмен данных между экзем плярами классов и соответствующими таблицами. В связи с этим необходимо воспользоваться одним из компонентов C++ Builder, предназначенных для работы с базами данных. Остановим свой вы бор на компоненте «TADOQuery». Данный компонент обладает ши рокими возможностями работы с табличными данными при просто те использования.
Объявим экземпляр «TADOQuery» в файле-заголовке «Order.h»:
/ / P a y m e n t
# include " P a y m e n t . h" / / C u s t o m e r
# include " C u s t o m e r . h "
// P r o d u c t
♦include " P r o d u c t . h"
♦ include |
< A D O D B .h p p > |
/ * м о д у л ь A c t i v e X D a t a O b j e c t s |
(A D O )* / |
|
|
T A D O Q uery |
* C u r r e n t Q u e r y ; |
|
Прежде чем начать работу с данными посредством «CurrentQuery», необходимо задать строку соединения - «СоппесtionString». Данную строку можно получить, если выложить компо нент «TADOQuery» (панель инструментов «ADO») на форму и вос пользоваться стандартным мастером генерации строки соединения. Мастер вызывается по двойному щелчку на кнопке «...» напротив свойства «ConnectionString».
Для хранения этой строки и других настроек базы данных созда дим отдельный модуль «DBParams». В файле заголовка «DBParams.h» этого модуля пропишем макроопределение строки соедине ния, содержание которой возьмем из ранее созданного компонента:
♦ifndef D B P a r a m sH
♦define D B P a ra m sH
♦ |
define |
CONNECT_STRING |
" P r o v i d e r = M S D A O R A . |
w o r d = t i g e r ; |
U s e r I D = s c o t t ; |
D a t a S o u r c e = M A T R I X ; |
|
c u r i t y I n f o = T r u e " |
|
||
♦ |
endif |
|
|
1 ; |
P |
a s s - |
P e r s i s t |
S e |