Файл: 1. 1 Техникоэкономическая характеристика предметной области и предприятия 5.doc
Добавлен: 03.12.2023
Просмотров: 127
Скачиваний: 2
ВНИМАНИЕ! Если данный файл нарушает Ваши авторские права, то обязательно сообщите нам.
Рисунок 23 - Структурная схема системы
Благодаря президенту Microsoft Б.Гейтсу, Basic стал первым языком программирования для персональных компьютеров. Язык приобрел огромную популярность во всем мире в силу своей простоты и ориентации на диалоговый режим. Разработан стандарт минимального подмножества языка Basic, утвержденный в 1976 г. Сегодня наибольшее распространение получил Visual Basic, и в первую очередь Visual Basic for Applications (VBA), обслуживающий все приложения Microsoft Office.
Как и все языки высокого уровня, Basic строится в соответствии с концепцией процедурного программирования. Процедурный подход основан на алгоритмической декомпозиции решаемой проблемы и реализуется посредством решения очевидных формализуемых задач. Правило «разделяй и властвуй» ориентирует на представление проблемы набором самостоятельных блоков данных. процедур таким образом, чтобы, выполнив каждую из них, можно было прийти к решению всей проблемы. «Благодаря процедурам, лучше прослеживается структура больших и сложных программ; они обеспечивают логическую сегментацию всей задачи и облегчают отладку», утверждает автор «Искусства программирования» Д.Кнут.
Текст программного кода на языке VBA приведен в Приложении.
ER-модель описывает совокупность семантически важных объектов предметной области сущности, их свойств и отношений между объектами (связей). Разработка ER-модели является важным этапом в создании информационной системы и проходит несколько этапов:
-
идентификация сущностей и их атрибутов; -
идентификация отношений между сущностями и указания типов отношений; -
разрешения не специфических видов отношений.
ER-модель принято отображать с помощью графического образа – ER-диаграммы.
Выбрав и исследовав в первом разделе курсового проекта предметную область разработки информационной системы можно определить сущности.
Основными сущностями являются: «Договоры клиентов по товарам», «Товар», «Цены», «Договоры клиентов по ценам», «Товары по ценам», «Оплаты по договорам», «Договоры клиентов», «Клиенты». Для связывания сущностей Цены и Клиенты используется сущность «Договоры клиентов по ценам»; «Договоры клиентов» и «Товар» – сущность «Товары по ценам» и «Оплаты по договорам». Для связывания сущностей используется связь «многие-к-одному», которая является основным видом связи при построении ER-диаграммы. На рисунке отражены сущности и связи между ними.
Рисунок - Сущности и их связи ИС товарах и клиентах
Для построения ER-диаграммы также необходимо выделить атрибуты сущностей и подтипы сущностей.
С помощью пакета AllFusion Erwin DataModeler by CA сделана модель базы данных, которая приведена на рис. Модель отражает таблицы, формы и запросы, созданные в БД.
.
Рисунок ER-диаграмма ИС
Для того чтобы определить правильность и корректность разработанной ER-модели необходимо провести проверку качества сущностей, атрибутов и связей.
Проверка качества сущностей:
-
Имена сущностей – существительное в единственном числе или записаны компактным словосочетанием. -
Смысл каждой сущности отражен в ее имени. -
Описание сущности является достаточно кратким и смысловым. -
Сущности не являются разновидностью другой сущности с упущенной рекурсивной связью. -
Каждая сущность согласуется с принципами нормализации отношений. -
Ключ сущности действительно уникально идентифицирует каждый ее экземпляр. -
Ключ сущности действительно минимален.
Проверка атрибутов:
-
Имя атрибутов – существительное в единственном числе. -
Смысл атрибута отражен в его имени. -
Описание атрибута является достаточно краткими смысловым. -
Атрибуты не представляют упущенную связь. -
Атрибуты не являются агрегатами других данных. -
Значение обязательного атрибута всегда известно.
Проверка связей:
Связи действительно необходимы.
Если связь обязательная, то всегда определена сущность с другого конца.
После проверки качества ER –модели можно перейти к разработке структуры базы данных.
2.3.4 Описание программных модулей
Созданная система состоит из файла БД с названием technolayt.mdb и файла формата Microsoft Word с названием договор.doc.
Программные модули определяются следующими формами: Form_Выходная информация, Form_Кнопочная форма, Form_Нормативно-справочная информация, Form_Оперативная информация, Form_Форма Договоры клиентов по ценам, Form_ Форма Договоры клиентов по товарам.
Большая часть программного кода не требовала написания непосредственно текста. Но для того, чтобы вызвать файл шаблона договора с названием договор.doc потребовалось написания процедуры обработки события нажатия на кнопку с изображением буквы W. Ниже приведенный код был написан, для того, чтобы в соответствующем поле появился шаблон текста договора с заказчиками, который заключает предприятие для оказания услуг и продаже программных продуктов.
With Me.[Текст договора]
.Class = "Word.Document"
.SourceDoc = Application.CurrentProject.Path & "\договор.doc"
.Action = acOLECreateEmbed
End With
Данный программный код встречается и в другом модуле и также используется для вызова текста шаблона договора с клиентами.
2.4 Контрольный пример реализации проекта и его описание
После создания таблиц и связей между ними для реализации целей системы были созданы SQL-запросы. Дадим описание запросов и их текст.
1. Запрос для определения количества договоров, заключенных каждым клиентом
SELECT Клиенты.[Название клиента], Count(*) AS [Количество договоров]
FROM Клиенты INNER JOIN [Договоры клиентов] ON Клиенты.[Код клиента] = [Договоры клиентов].[Код клиента]
GROUP BY Клиенты.[Название клиента];
В данном запросе используется агрегирующая функция Count(*) и соответственно конструкция GROUP BY.
2. Запрос для определения количества товаров, по которым были заключены договоры как по ценам, так и по дополнительным условиям
SELECT Товар, count(*)
FROM [SELECT Товары.Товар
FROM (Товары INNER JOIN [Товары по ценам] ON Товары.[Код товара] = [Товары по ценам].[Код товара]) INNER JOIN [Договоры клиентов по ценам] ON [Товары по ценам].[Код цены] = [Договоры клиентов по ценам].[Код цены]
UNION ALL SELECT Товары.Товар
FROM Товары INNER JOIN [Договоры клиентов по товарам] ON Товары.[Код товара]=[Договоры клиентов по товарам].[Код товара]]. AS [%$##@_Alias]
GROUP BY Товар;
Запрос содержит вложенную конструкцию (SELECT …FROM [SELECT …]), в которой имеется конструкция UNION ALL для объединения двух подзапросов. Запрос также содержит агрегирующую функцию count(*) и соответственно конструкцию GROUP BY по виду услуги.
3.Запрос для определения суммы денежных средств, внесенных каждым клиентом (заказчиком)
SELECT Клиенты.[Название клиента], [Оплаты по договорам].[Код договора], Sum([Оплаты по договорам].[Сумма оплаты]) AS [Сумма оплаты]
FROM Клиенты INNER JOIN ([Договоры клиентов] INNER JOIN [Оплаты по договорам] ON [Договоры клиентов].[Код договора]=[Оплаты по договорам].[Код договора]) ON Клиенты.[Код клиента]=[Договоры клиентов].[Код клиента]
WHERE [Оплаты по договорам].[дата оплаты] Between Forms![Выходная информация]![дата начала] And Forms![Выходная информация]![дата окончания]
GROUP BY Клиенты.[Название клиента], [Оплаты по договорам].[Код договора];
В данном запросе используются два параметра: дата начала и окончания запрашиваемого периода. Кроме того, запрос содержит агрегирующую функцию Sum и соответственно конструкцию GROUP BY.
4. Запрос для определения сумм денежных средств по ценам
SELECT [Цены].[Код цены], [Цена].[Цена], sum(Товар.[Стоимость товара]) AS [Стоимость товара]
FROM Товары INNER JOIN ([Цена] INNER JOIN [Товары по ценам] ON [Цены].[Код цены]=[Товары по ценам].[Код цены]) ON Товары.[Код товара]=[Товары по ценам].[Код товара]
GROUP BY [Цены].[Код цены], [Цены].[Цены];
Запрос содержит агрегирующую функцию sum.
5. Запрос для определения сумм оплаты клиентами по договорам, заключенным с учетом цен и дополнительных условий
SELECT Клиенты.[Название клиента], 'Сумма по ценам' AS [Сумма по ценам], sum(Товары.[Стоимость товара]) AS Сумма
FROM (Клиенты INNER JOIN ([Договоры клиентов] INNER JOIN [Договоры клиентов по ценам] ON [Договоры клиентов].[Код договора] = [Договоры клиентов по ценам].[Код договора]) ON Клиенты.[Код клиента] = [Договоры клиентов].[Код клиента]) INNER JOIN (Товары INNER JOIN [Товары по услугам] ON Товары.[Код товара] = [Товары по ценам].[Код товара]) ON [Договоры клиентов по ценам].[Код цены] = [Товары по ценам].[Код цены]
GROUP BY Клиенты.[Название клиента], 'Сумма по ценам'
UNION ALL SELECT Клиенты.[Название клиента], 'Сумма по товарам' AS [Сумма по товарам], sum (Товары.[Стоимость товара]) AS Сумма
FROM Клиенты INNER JOIN (Товары INNER JOIN ([Договоры клиентов] INNER JOIN [Договоры клиентов по товарам] ON [Договоры клиентов].[Код договора] = [Договоры клиентов по товарам].[Код договора]) ON Товары.[Код товара] = [Договоры клиентов по товарам].[Код товара]) ON Клиенты.[Код клиента] = [Договоры клиентов].[Код клиента]
GROUP BY Клиенты.[Название клиента], 'Сумма по товарам';
Запрос содержит конструкцию UNION ALL и является перекрестным. Каждый из подзапросов содержит агрегирующую функцию Sum и соответственно конструкцию GROUP BY по названию клиента и виду договора.
6. Запрос для определения тех товаров, которые не пользуются спросом у клиентов, т.е. не встречаются ни в договорах по ценам, ни в договорах по дополнительным условиям
SELECT Товары.Товары
FROM Товары
WHERE (((Товары.[Код товара]) not In (select [Договоры клиентов по товарам].[Код товара] from [Договоры клиентов по товарам])
and (Товары.[Код товара]) not In (select [Товары по ценам].[Код товара]
FROM [Товары по ценам] INNER JOIN [Договоры клиентов по ценам] ON [Товары по ценам].[Код цены] = [Договоры клиентов по ценам].[Код цены])));
Запрос содержит две конструкции not In (select …) для определения тех товаров, которых нет ни в одном из типе договоров.
7. Запрос для определения сумм оплаты клиентами по договорам, за каждый день
SELECT day([Оплаты по договорам].[дата оплаты]) AS день, month([Оплаты по договорам].[дата оплаты]) AS месяц, year([Оплаты по договорам].[дата оплаты]) AS год, Sum([Оплаты по договорам].[Сумма оплаты]) AS [Сумма оплаты]
FROM [Оплаты по договорам]
WHERE [Оплаты по договорам].[дата оплаты] Between Forms![Выходная информация]![дата начала] And Forms![Выходная информация]![дата окончания]
GROUP BY day([Оплаты по договорам].[дата оплаты]), month([Оплаты по договорам].[дата оплаты]), year([Оплаты по договорам].[дата оплаты]);
Запрос содержит агрегирующую функцию sum. В данном запросе применены функции day, month, year для получения соответствующих частей поля таблицы, содержащего дату и время.
При загрузке БД пользователь должен ввести пароль. Если пароль введен верно, то на экране появится форма, показанная на рис. 25. Для созданной БД паролем является 123.
Рисунок 25 - Главная кнопочная форма
Для ввода и изменения нормативно-справочной информации нужно выбрать кнопку «Нормативно-справочная информация», при этом появится форма, на рис. 26.
Рисунок 26 - Форма «Нормативно-справочная информация»
Для работы с товарами, предоставляемыми пользователям, необходимо нажать кнопку «Товары», при этом пользователь увидит форму, которая показана на рис. 27. Внизу находятся кнопки для перехода по записям.
Рисунок 27 - Форма «Товары»
Для работы с тарифными планами, предоставляемыми пользователям, необходимо нажать кнопку «Цены», при этом пользователь увидит форму, которая показана на рис. 28. Внизу находятся кнопки для перехода по записям.
Рисунок 28 - Форма «Цены»
Для того, чтобы составить тарифный план необходимо, определить список входящих в него услуг. Для этого предназначена кнопка «Товары по ценам», при нажатии на которую будет показа форма, изображенная на рис. 29. Внизу находятся кнопки для перехода по записям.
Рисунок 29 - Форма «Товары по ценам»
Для работы с перечнем клиентов предприятия необходимо использовать кнопку «Клиенты», при этом пользователь увидит форму, которая показана на рис. 30. Внизу находятся кнопки для перехода по записям.