Руководство программиста

advertisement
Software Design Description
Книжный магазин
Дата:
06/04/2008
Книжный магазин, Bookstore, BS
Методические указания
Version 1.0
Software Design Description
Книжный магазин
Дата:
12/24/2007
Содержание
1.
Пример «Книжный магазин. BookStore. BS» ................................................................................. 3
1.1.
Общее описание ................................................................................................................................... 3
2.
Установка и конфигурация ............................................................................................................... 4
2.1.
2.2.
2.3.
2.4.
2.5.
JacORB .................................................................................................................................................. 4
ACE ORB (TAO) .................................................................................................................................... 4
MSXML ................................................................................................................................................... 4
Oracle9i .................................................................................................................................................. 4
IDE.......................................................................................................................................................... 5
3.
Создание таблиц в базе данных ..................................................................................................... 6
3.1.
3.2.
3.3.
3.4.
3.5.
Интерфейс системы ........................................................................................................................... 10
Обработка IDL-файла ........................................................................................................................ 12
Получение доступа к CORBA-интерфейсу ....................................................................................... 13
Связь с базой данных ........................................................................................................................ 13
Класс соединения с Oracle ................................................................................................................ 15
4.
Работа клиент приложения ............................................................................................................ 16
4.1.
4.2.
4.3.
4.4.
4.5.
4.6.
4.7.
4.8.
4.9.
About .................................................................................................................................................... 16
Login ..................................................................................................................................................... 16
Signup .................................................................................................................................................. 17
Manage Account .................................................................................................................................. 18
Book List ............................................................................................................................................... 18
Cart ....................................................................................................................................................... 20
Add Book .............................................................................................................................................. 22
User List ............................................................................................................................................... 23
Application ............................................................................................................................................ 24
5.
Работа сервер-приложения ............................................................................................................ 26
2
Software Design Description
Книжный магазин
Дата:
12/24/2007
1. Пример «Книжный магазин. BookStore. BS»
1.1.
Общее описание
Данная система является клиент-серверным приложением для персонального компьютера.
Интерфейс состоит из Win32 окон.
В качестве технологий для реализации системы будут использоваться AceTAO и JacORB.
Разработаем систему заказов для книжного магазина, позволяющую:

обновлять и корректировать информацию о книгах, хранящуюся в базе данных
(добавление новых книг, изменение цен и т.д.);

выполнять заказы клиентов

обновлять информацию о книгах при ее изменении в базе данных.
3
Software Design Description
Книжный магазин
Дата:
12/24/2007
2. Установка и конфигурация
2.1.
JacORB
JacORB это JAVA реализация Object Management Group CORBA стандарта с открытым исходным
кодом.
Сайт: http://www.jacorb.org/
Требования к программному обеспечению:
2.2.

JDK 1.3 или выше;

ANT версии 1.5 или выше (http://jakarta.apache.org/ant)
ACE ORB (TAO)
ACE TAO это C++ реализация Object Management Group CORBA стандарта с открытым исходным
кодом.
Сайт: http://www.theaceorb.com/
2.3.
MSXML
Необходим для работы с конфигурационным файл который удовлетворяет стандарту XML.
Сайт: http://www.microsoft.com/downloads/details.aspx?FamilyID=993c0bcf-3bcf-4009-be2127e85e1857b1&displaylang=en
2.4.
Oracle9i
Конфигурация ODBC драйвера:
1. Start->Control Panel -> Administrative Tools -> Data Source (ODBC)
2. Выбрать вкладку «System DSN tab»
3. Нажать «Add» кнопку
4. Выбрать «Microsoft ODBC for ORACLE»
5. Задать следующие параметры:
4
Software Design Description
Книжный магазин
Дата:
12/24/2007
a. Data Source Name: <SID>.<HOSTNAME>
b. Description: Oracle Bookstore db
c. User name: SYSTEM
d. Server: <SID>.
2.5.
IDE
1. Microsoft Visual Studio 2005.
2. NetBeans 6.1
5
Software Design Description
Книжный магазин
Дата:
12/24/2007
3. Создание таблиц в базе данных
Следующий код создает необходимые таблицы для данной системы:
CREATE TABLE Books
(
id
int primary key,
title
varchar(255),
author
varchar(255),
publisher
varchar(255),
price
float,
count
int,
is_changed number(1) default 0
);
CREATE TABLE Users
(
id
int primary key,
first_name
varchar(255),
last_name
varchar(255),
email
varchar(255),
password
varchar(255),
role
int default 0
);
CREATE TABLE Carts
(
id
user_id
book_id
books_count
int primary key,
int,
int,
int default 0,
);
CREATE sequence Books_seq
start with 1
increment by 1
nomaxvalue;
CREATE sequence Users_seq
start with 1
increment by 1
nomaxvalue;
CREATE sequence Carts_seq
start with 1
increment by 1
nomaxvalue;
COMMIT WORK
/
Структура базы данных показана на диаграмме 2.
6
Software Design Description
Книжный магазин
Дата:
12/24/2007
Диаграмма 1
Users
PK
id
first_name
last_name
email
password
role
Carts
PK
id
FK1
FK2
user_id
book_id
books_count
Books
PK
id
title
author
publisher
price
count
is_changed
Дополнительно создадим следующие процедуры для того, чтобы была возможность гибко
управлять состоянием книг и пользователей:
1. создание нового пользователя:
CREATE OR REPLACE FUNCTION "CREATE_NEW_USER" (first_name_val IN VARCHAR2, last_name_val IN
VARCHAR2, email_val IN VARCHAR2, password_val IN VARCHAR2, role_val IN INT)
RETURN INT
IS
PRAGMA AUTONOMOUS_TRANSACTION;
RT INT;
BEGIN
INSERT INTO
Users(id, first_name, last_name, email, password, role)
VALUES (Users_seq.NEXTVAL, first_name_val, last_name_val, email_val, password_val,
0);
SELECT Users_seq.CURRVAL
INTO RT
FROM DUAL;
commit;
RETURN (RT);
END;
2. создание новой книги:
7
Software Design Description
Книжный магазин
Дата:
12/24/2007
CREATE OR REPLACE FUNCTION "CREATE_NEW_BOOK" (author_val IN VARCHAR2, title_val IN VARCHAR2,
publisher_val IN VARCHAR2, price_val IN FLOAT, count_val IN INT)
RETURN INT
IS
PRAGMA AUTONOMOUS_TRANSACTION;
RT INT;
BEGIN
INSERT INTO
Books(id, author, title, publisher, price, count)
VALUES (Books_seq.NEXTVAL, author_val, title_val, publisher_val, price_val,
count_val);
SELECT Books_seq.CURRVAL
INTO RT
FROM DUAL;
commit;
RETURN (RT);
END;
3. добавление книги в корзину:
CREATE OR REPLACE PROCEDURE ADD_TO_CART (user_id_val IN INT, book_id_val IN INT, books_count_val
IN INT)
IS
CNT INT;
BEGIN
SELECT
COUNT(*)
INTO
CNT
FROM
Carts
WHERE
user_id = user_id_val AND book_id = book_id_val;
IF (CNT = 0)
THEN
INSERT INTO Carts(id, user_id, book_id, books_count)
VALUES(Carts_seq.NEXTVAL, user_id_val, book_id_val, books_count_val);
ELSE
UPDATE
Carts
SET
books_count = books_count + books_count_val
WHERE
user_id = user_id_val AND book_id = book_id_val;
END IF;
COMMIT;
END;
4. удаление книги из корзины:
CREATE OR REPLACE PROCEDURE REMOVE_FROM_CART (user_id_val IN INT, book_id_val IN INT,
books_count_val IN INT)
IS
CNT INT;
BEGIN
8
Software Design Description
Книжный магазин
Дата:
12/24/2007
SELECT
COUNT(*)
INTO
CNT
FROM
Carts
WHERE
user_id = user_id_val AND book_id = book_id_val;
IF (CNT = 0)
THEN
NULL;
ELSE
UPDATE
Carts
SET
books_count = books_count - books_count_val
WHERE
user_id = user_id_val AND book_id = book_id_val AND books_count books_count_val >= 0;
DELETE FROM
CARTS
WHERE
books_count = 0;
END IF;
COMMIT;
END;
5. заказ книг из корзины пользователя. Так как корзины пользователя хранятся на сервере, то и
обработка заказ происходит тоже на сервере.
CREATE OR REPLACE FUNCTION ORDER_BOOKS_FROM_CARTS (user_id_val IN INT)
RETURN INT
IS
PRAGMA AUTONOMOUS_TRANSACTION;
BOOK_ID INT;
CART_BOOKS_COUNT INT;
BOOK_BOOKS_COUNT INT;
CURSOR get_carts IS
SELECT
book_id, books_count
FROM
Carts
WHERE
user_id = user_id_val
FOR UPDATE;
RT INT;
BEGIN
RT := 1;
OPEN get_carts;
LOOP
FETCH get_carts INTO BOOK_ID, CART_BOOKS_COUNT;
EXIT WHEN get_carts%NOTFOUND;
SELECT
count INTO BOOK_BOOKS_COUNT
FROM
BOOKS
9
Software Design Description
Книжный магазин
Дата:
12/24/2007
WHERE
id = BOOK_ID;
IF (CART_BOOKS_COUNT < BOOK_BOOKS_COUNT) THEN
BEGIN
UPDATE
Books
SET
count = count - CART_BOOKS_COUNT,
is_changed = 1
WHERE
(id = BOOK_ID) AND (CART_BOOKS_COUNT <= Books.count);
DELETE FROM
Carts
WHERE
book_id = BOOK_ID AND user_id = user_id_val;
END;
ELSE
RT := 0;
END IF;
END LOOP;
CLOSE get_carts;
commit;
RETURN (RT);
END ORDER_BOOKS_FROM_CARTS;
3.1.
Интерфейс системы
Для связи CORBA-объектов необходимо задать IDL-интерфейс, позволяющий выполнять запросы
клиента и обеспечивать доступ к книгам и их модификацию.
struct Book
{
long
string
string
string
float
long
};
id;
title;
author;
publisher;
price;
count;
struct User
{
long
id;
string first_name;
string last_name;
string email;
string password;
// Admin : 1, User: 0
long
role;
};
10
Software Design Description
Книжный магазин
Дата:
12/24/2007
typedef sequence <Book> BookList;
struct BookListResult
{
long size;
BookList book_list;
};
typedef sequence <User> UserList;
struct UserListResult
{
long size;
UserList user_list;
};
Структура Book позволяет описывать и хранить информацию о книге. Кроме этого необходимо
определить следующие методы для взаимодействия со структурами:
/// Interface that determines collaboration between BookStoreClient and BookStoreServer
interface IBSProtocol
{
/// Return a simple string
string echo (in string test);
///<summary>
/// A method to shutdown the ORB.This method is used to simplify the test shutdown process
///</summary>
oneway void shutdown ();
exception OperationFailedException
{
string description;
};
//---------------------Users----------------------------------------///<summary>Gets User's ID</summary>
///<returns>User's ID if user is registered, or -1 if user is not registered</returns>
long get_user_id (in string email, in string password) raises (OperationFailedException);
///<summmary>Register user</summary>
///<returns>ID of registered user</summary>
long register_user (in string first_name, in string last_name, in string email, in string
password) raises (OperationFailedException);
void delete_user (in long user_id, in long current_user_id, in string
current_user_password)
raises (OperationFailedException);
void edit_user (in long user_id, in long current_user_id, in string current_user_password,
in string new_first_name, in string new_last_name, in string new_email, in string
new_password, in long new_role)
raises (OperationFailedException);
11
Software Design Description
Книжный магазин
Дата:
12/24/2007
void get_user (in long user_id, in long current_user_id, in string current_user_password,
out User outUser) raises (OperationFailedException);
void get_user_list(out UserListResult user_list_result,
in long current_user_id, in string current_user_password) raises
(OperationFailedException);
//---------------------Books----------------------------------------///<summary></summary>
///<returns>new Book ID</returns>
long create_book(in long user_id, in string user_password,
in string author, in string title, in string publisher, in
float price, in long count) raises (OperationFailedException);
void edit_book(in long user_id, in string user_password,
in long book_id,
in string new_author, in string new_title, in string new_publisher,
in float new_price, in long new_count)
raises (OperationFailedException);
void add_book(in long user_id, in string user_password, in long book_id) raises
(OperationFailedException);
void delete_book(in long book_id) raises (OperationFailedException);
void get_book_list(out BookListResult book_list_result) raises (OperationFailedException);
void get_book (in long book_id, out Book result) raises (OperationFailedException);
///<summary>Order books from carst for specified user</summary>
///<param name="userID">ID of the user</param>
///<returns>True if all books were ordered, otherwise false</returns>
boolean order_books(in long user_id) raises (OperationFailedException);
//---------------------Carts----------------------------------------void add_to_cart(in long user_id, in long book_id, in long books_count) raises
(OperationFailedException);
void remove_from_cart(in long user_id, in long book_id, in long books_count) raises
(OperationFailedException);
void get_books_from_cart(in long user_id, out BookListResult book_list_result) raises
(OperationFailedException);
};
3.2.
Обработка IDL-файла
После описания IDL-интерфейс, необходимо сгенерировать вспомогательные классы для целевого
языка, позволяющие реализовать методы интерфейса и предоставить их во внешнее пользование.
Для клиента, написанного на Java, используется ANT.
12
Software Design Description
Книжный магазин
Дата:
12/24/2007
Для сервера, написанного на C++, используется Build проекта BSServer_idl из Microsoft Visual
Studio.
Полный список сгенерированных файлов при запуске указанной команды:

BSProtocolC.h/.cpp – файлы, предоставляющие доступ к IDL-интерфейсам (аналогичные файлы
используются в клиенте, реализованном на Java);

BSProtocolS.h/.cpp – файлы, описывающие абстрактные классы необходимые для реализации
сервера;

BSProtocolI.h/.cpp – каркас реализации сервера.
3.3.
Получение доступа к CORBA-интерфейсу
Клиенты, посылающие запросы к серверу реализованы на языке Java. В качестве ORB взят
стандартный ORB, входящий в Java SDK.
Для получения доступа к интерфейсу сервера, клиенту необходимо выполнить следующие
действия.
1. Инициализация ORB и активизация POA-менеджера
// create and initialize the ORB
ORB orb = ORB.init(args, null);
POA rootpoa = (POA)orb.resolve_initial_references("RootPOA");
rootpoa.the_POAManager().activate();
2. Доступ к IOR файлу осуществляется следующим образом:
CBSProtocol* bsProtocolImpl;
ACE_NEW_RETURN (bsProtocolImpl, CBSProtocol (orb.in()), 1);
PortableServer::ServantBase_var owner_transfer(bsProtocolImpl);
BSProtocol::IBSProtocol_var bsProtocol = bsProtocolImpl->_this();
CORBA::String_var ior = orb->object_to_string (bsProtocol.in());
3.4.
Связь с базой данных
Для работы с базой данных сервер BookStore использует ODBC (Open Database Connectivity)
драйвер. Дизайн разработанной системы включает классы облегчающие доступ к базе данных
Oracle, такие как COracleCommand, COracleConnection, COracleParamater. Покажем работу сервера
с базой данных на примере запроса получения списка книг.
1. Чтение конфигурационного файла, хранящего настройки доступа к Oracle:
CConfig* config = CConfig::Instance();
13
Software Design Description
Книжный магазин
Дата:
12/24/2007
COracleConnection connection(
config->GetDBUserName(),
config->GetDBServiceName(),
config->GetDBPassword());
2. Соединение с базой данных
connection.Open(errorMessage)
3. Отправка запроса
errorMessage = command.ExecuteReader(query, parameters, hStmt);
4. Обработка результатов запроса
if (COracleBase::IsSqlSuccess(rc))
{
rc = SQLGetData(hStmt, 1, SQL_C_LONG, &id, sizeof(long), NULL);
if (COracleBase::IsSqlSuccess(rc))
{
rc = SQLGetData(hStmt, 2, SQL_C_CHAR, buffer, sizeof(buffer), NULL);
if (COracleBase::IsSqlSuccess(rc))
{
title = string(buffer);
rc = SQLGetData(hStmt, 3, SQL_C_CHAR, buffer, sizeof(buffer), NULL);
if (COracleBase::IsSqlSuccess(rc))
{
author = string(buffer);
rc = SQLGetData(hStmt, 4, SQL_C_CHAR, buffer, sizeof(buffer),
NULL);
if (COracleBase::IsSqlSuccess(rc))
{
publisher = string(buffer);
if (COracleBase::IsSqlSuccess(rc))
{
rc = SQLGetData(hStmt, 5, SQL_C_FLOAT, &price,
sizeof(float), NULL);
if (COracleBase::IsSqlSuccess(rc))
{
rc = SQLGetData(hStmt, 6, SQL_C_LONG, &count,
sizeof(long), NULL);
CBook book(id, title, author, publisher,
price, count);
outBook = book;
}
}
}
}
}
}
}
5. Завершение обработки запроса
connection.Close();
14
Software Design Description
Книжный магазин
Дата:
12/24/2007
3.5.
Класс соединения с Oracle
bool COracleConnection::Open(string& errorMessage)
{
bool result = false;
SQLAllocHandle(SQL_HANDLE_ENV, NULL, &m_hEnv);
SQLSetEnvAttr(m_hEnv, SQL_ATTR_ODBC_VERSION, (void*) SQL_OV_ODBC3, SQL_IS_INTEGER);
SQLAllocHandle(SQL_HANDLE_DBC, m_hEnv, &m_hDbc);
RETCODE rc = SQLConnectW(
m_hDbc,
(SQLWCHAR*)m_service.c_str(),
SQL_NTS,
(SQLWCHAR*)m_user.c_str(),
SQL_NTS,
(SQLWCHAR*)m_password.c_str(),
SQL_NTS
);
if (!COracleBase::IsSqlSuccess(rc))
{
errorMessage = COracleBase::GetErrorMessage(m_hEnv, m_hDbc);
}
else
{
result = true;
}
return result;
}
void COracleConnection::Close() const
{
SQLDisconnect(m_hDbc);
SQLFreeConnect(m_hDbc);
SQLFreeEnv(m_hEnv);
}
15
Software Design Description
Книжный магазин
Дата:
12/24/2007
4. Работа клиент приложения
Для доступа к базе данных книжного магазина необходимо запустить клиентское приложение.
4.1.
About
Рисунок 1
Данная форма предназначена для отображения данных о программе, о её назначении и о
разработчиках системы. К данной форме все пользователи системы имеют доступ без каких-либо
ограничений.
Отображаются такие поля, как название системы, краткое описание системы, версия продукта,
разработчики и адрес сайта проекта.
При нажатии на кнопку Close данная форма закрывается.
4.2.
Login
Рисунок 2
Данная форма предназначена для авторизации пользователей в системе. Авторизация происходит
по паре почтовый ящик и пароль. Данные подход может помочь в случаях восстановления
паролей по требования пользователей.
16
Software Design Description
Книжный магазин
Дата:
12/24/2007
Так как только зарегистрированные пользователи могут оформлять заказ на книги, то необходимо
иметь на этой форме кнопку, которая бы позволила незарегистрированным пользователем перейти
непосредственно к регистрации в системе.
Содержит два текстовых поля:
1.
имя пользователя;
2.
пароль
И две кнопки кнопку: одна из которых отправляет введённые данные на сервер для авторизации
пользователя, вторая же возвращает пользователя в основное приложение.
4.3.
Signup
Рисунок 3
Данная форма предназначена для регистрации пользователей в системе. При этом пользователям
необходимо ввести свои данные, как например, имя и фамилия.
Для дополнительной защиты требуется предусмотреть поле «подтверждение пароля» в случае
если пользователь случайно ошибётся в его наборе. Ошибиться можно из-за того, что все символы
в данном поле отображаются звёздочками.
Содержит пять текстовых полей:
1.
почтовый адрес;
2.
имя пользователя;
3.
фамилия пользователя;
4.
пароль;
5.
подтверждения пароля.
17
Software Design Description
Книжный магазин
Дата:
12/24/2007
И две кнопки кнопку: одна из которых отправляет введённые данные на сервер для регистрации
пользователя, вторая же возвращает пользователя в основное приложение.
4.4.
Manage Account
Рисунок 4
Форма управления аккаунтом позволяет зарегистрированному пользователю изменить свои
данные. Это может потребоваться в связи с тем, что при регистрации пользователь может неверно
ввести такие поля, как фамилия или имя.
Содержит пять текстовых полей:
1. почтовый адрес;
2. имя пользователя;
3. фамилия пользователя;
4. пароль;
5. подтверждения пароля.
И две кнопки кнопку: одна из которых отправляет введённые данные на сервер для изменения
данных пользователя, вторая же возвращает пользователя в основное приложение.
Лишь зарегистрированные пользователи имеют доступ к этой форме.
4.5.
Book List
Рисунок 5
18
Software Design Description
Книжный магазин
Дата:
12/24/2007
Форма просмотра списка книг отображет список всех доступных в магазине книг. Дополнительно,
при выборе какой-либо книги пользователь может посмотреть её подробную информацию:
«автор», «издатель», «цена», «количество доступных книг в магазине». Это происходит
обновлением значением полей, которые расположены в нижней части формы.
Форма имеет кнопки добавления книг в корзину пользователя и просмотра пользовательской
корзины при нажатии на которые книга добавляется в корзину пользователя с уведомлением о
том, что книга была добавлена успешно или же возникла ошибки и переход на форму просмотра
корзины соответственно.
Лишь зарегистрированные пользователи имеют доступ к этой форме.
При работе администратора с этой формой доступными становятся следующие элементы:
«изменить книгу», «добавить книгу», «удалить книгу».
При нажатии на кнопку «изменить книгу» следующие поля становятся доступными для
редактирования:
1.
название книги;
2.
автор книги;
3.
издатель книги;
4.
цена книги;
5.
количество книг в магазине.
Данная форма состоит из:
1.
Список названий книг, при выборе которого выводится подробная информация
19
Software Design Description
Книжный магазин
Дата:
12/24/2007
2.
Подробная информация о книге состоит из следующих полей:
a. Название;
b. Автор;
c. Издатель;
d. Цена;
e. Количество.
3.
Кнопка добавления книги в корзину;
4.
Кнопка просмотра корзины;
5.
Кнопки, которые доступны лишь для администратора:
a. Начать изменение книг;
b. Сохранить изменённую книгу;
c. Добавить новую книгу;
d. Удалить книгу.
6.
4.6.
Кнопка закрытия формы.
Cart
Рисунок 6
20
Software Design Description
Книжный магазин
Дата:
12/24/2007
Корзина позволяет посмотреть пользователю список книг, которые он предварительно отобрал
для заказа. Однако добавление в корзину ещё не означает заказ, для этого пользователю надо его
подтвердить, для чего на форме должна быть соответствующая кнопка.
Пользователь должен иметь возможность удалять книги из корзины, получать по ним подробную
информацию. Дополнительно пользователю должна быть предоставлена информация об общей
стоимости заказа и количестве заказанных книг.
При нажатии на кнопку «заказать» системе передаёт соответствующий запрос на сервер и выдаёт
сообщение об ошибке если какую-нибудь книгу невозможно заказать.
Только зарегистрированные пользователи имеют доступ к этой системе.
Данная форма состоит из следующих компонентов:
1.
Список выбранных пользователем книг при выборе которой отображается подробная
информация;
2.
Подробная информация о книге состоит из следующих полей:
a. Название;
b. Автор;
c. Издатель;
d. Цена;
21
Software Design Description
Книжный магазин
Дата:
12/24/2007
e. Количество.
3.
Статистика текущего заказа:
a. Количество заказанных книг;
b. Общая цена заказа.
4.
Кнопки удалить книгу из корзины;
5.
Кнопки подтвердить заказ;
6.
Кнопки закрывающей данную форму.
4.7.
Add Book
Рисунок 7
Форма добавления новой книги в базу данных магазина. Позволяет ввести о книге следующую
информацию: «название», «автор», «издатель», «цена», «количество книг в магазине».
Только администратор имеет доступ к этой форме.
Данная форма состоит из следующих текстовых полей:
1.
Название книги;
2.
Автор книги;
3.
Издатель книги;
4.
Цена книги;
5.
Количество книг в магазине.
6.
Кнопки сохранения введённой книги;
22
Software Design Description
Книжный магазин
Дата:
12/24/2007
7.
4.8.
Кнопки закрывающей данную форму.
User List
Рисунок 8
Форма администрирования пользователей, зарегистрированных в системе. Позволяет посмотреть
список зарегистрированных пользователей в системе, получить по них подробную информацию.
Кроме этого данная форма позволяет изменять данные пользователей, создавать новых
пользователей и изменять роль: «администратор» или «покупатель».
Данная форма содержит:
1.
Список зарегистрированных пользователей данной системы, выбор какого-либо
пользователя позволяет увидеть подробную информацию о пользователе.
2.
Подробная информация о пользователе состоит из следующих полей:
3.
a.
Адрес электронной почты пользователя;
b.
Имя пользователя;
c.
Фамилия пользователя;
d.
Пароль пользователя;
e.
Полем выбора: является ли данный пользователей администратором.
Кнопки создать нового пользователя;
23
Software Design Description
Книжный магазин
Дата:
12/24/2007
4.
Кнопки удалить выбранного пользователя;
5.
Кнопки начать/закончить редактирование пользователей;
6.
Кнопки сохранить изменённого пользователя.
7.
Кнопки закрывающей данную форму.
4.9.
Application
Рисунок 9
Форма, которая объединяет все выше описанные формы и служит для них контейнером.
Состоит из следующего навигационного меню:
1.
2.
System
a.
Login: открывает окно авторизации
b.
Signup: открывает окно новой регистрации
c.
Exit: выходит из программы
Settings
a.
Manage Account: открывает окно изменения аккаунта
24
Software Design Description
Книжный магазин
Дата:
12/24/2007
b.
3.
4.
User List: открывает окно со списком пользователей
Shop
a.
Book List: открывает окно со списком книг
b.
Your Cart: открывает окно с корзиной
c.
Order Books: подтверждает заказ
Help
a.
About: открывает окно «О программе»
25
Software Design Description
Книжный магазин
Дата:
12/24/2007
5. Работа сервер-приложения
Aрхитектура серверного приложения BSServer представлена на Рисунке 9
Рисунок 9. Архитектура серверного приложения
COracleBase
+GetErrorMessage() : string
+IsSqlSuccess() : bool
COracleConnection
COracleCommand
CConfig
-m_instance
+Open()
+Close()
+SetDatabase()
+SetServer()
+GetErrorMessage()
+ExecuteNonQuery()
+ExecuteReader()
+SetConnection()
+GetDBUserName()
+GetDBPassword()
+GetDBServiceName()
+GetIORFile()
COracleParameter
-m_value : void
-m_direction : int
-m_type : int
CBookManager
CUserManager
+CreateBook()
+EditBook()
+AddBook()
+DeleteBook()
+GetBookList()
+GetCartBookList()
+GetBook()
+OrderBooks()
+SetConsumer()
+GetUserID()
+RegisterUser()
+IsUserAdmin()
+DeleteUser()
+EditUser()
+GetUser()
+GetUserList()
CCartManager
+AddToCart()
+RemoveFromCart()
CBook
CUser
-m_id : int
-m_title : string
-m_author : string
-m_publisher : string
-m_price : float
-m_count : long
-m_id : int
-m_firstName : string
-m_lastName : string
-m_email : string
-m_password : string
-m_role : long
26
Software Design Description
Книжный магазин
Дата:
12/24/2007
Для взаимодействия с базой данных Oracle были реализованы классы COracleBase,
COracleCommand и СOracleConnection, инкапсулирующие работу с ODBC драйвером.
Бизнес логика приложений сосредоточена в классах CUserManager, CBookManager и
ССartManager, отвечающих за управление пользователями, книгами и корзинами соответсвенно.
Рисунок 10. Консоль запущенного сервера
27
Скачать