МИНИСТЕРСТВО ЦИФРОВОГО РАЗВИТИЯ, СВЯЗИ И МАССОВЫХ КОММУНИКАЦИЙ РОССИЙСКОЙ ФЕДЕРАЦИИ Ордена Трудового Красного Знамени федеральное государственное образовательное бюджетное учреждение высшего образования МОСКОВСКИЙ ТЕХНИЧЕСКИЙ УНИВЕРСИТЕТ СВЯЗИ И ИНФОРМАТИКИ Кафедра Математической кибернетики и информационных технологий Проект по дисциплине «Технологии разработки программного обеспечения» на тему: «Проектирование и разработка автоматизированной системы управления продажами автомобилей в компании «Автоальянс» Студент: А.В. Грязнов Преподаватель: к.т.н. доцент И.И. Ковтун Москва 2022 Оглавление Введение ..................................................................................................................................... 3 1.1. Исследование процесса реализации автомобилей .................................................... 5 1.3. Формирование цели и задач проекта, определение стратегиидостижения поставленной цели ..................................................................................................... 15 2. Разработка концепции автоматизации ..................................................................... 17 2.1. Определение методов решения выявленных проблем ........................................... 17 2.2. Определение автоматизированных рабочих мест................................................... 18 2.3. Описание функций выделенных АРМ ..................................................................... 18 3. Разработка структуры информации ......................................................................... 20 3.1. Разработка логической структуры данных .............................................................. 20 3.2. Разработка физической структуры данных ............................................................. 21 3.3. Структура таблиц ....................................................................................................... 21 3.4. Разработка контрольного примера ........................................................................... 27 4. Разработка программного обеспечения ................................................................... 29 4.1. Анализ и выбор систем программирования ............................................................ 29 4.2. Разработка алгоритмов и текстов программ............................................................ 32 4.4. Разработка запросов к базе данных ............................................................................ 42 5. Выводы и результаты ................................................................................................ 46 Источники информации .......................................................................................................... 47 ПРИЛОЖЕНИЯ ....................................................................................................................... 49 Договор купли-продажи между клиентом и автосалоном ................................................... 49 Введение В настоящее автосалонами время компании количество «Автоальянс» информации, предоставляемой увеличивается. Работники рассматриваемой компании сталкиваются с проблемой учета множества данных, связанных с продажей автомобиля. Программы для работы с электронными таблицами, такие как Microsoft Excel, LibreOffice Calc и им подобные, уже давно начали терять свою актуальность. Сейчас компаниям требуются более эффективное, гибкое и комплексное решение, направленное на упрощение ручной работы по хранении и обработки больших массивов данных. Также одной из причин автоматизации является минимизация так называемого человеческого фактора, который может стать причиной появления проблем различного масштаба и характера. Поэтому целью данной проектной работы является автоматизация управления продажами автомобилей в компании «Автоальянс». Работа состоит из нескольких глав, описанных ниже, и заканчивается выводами и результатами о проделанной работе. В первой главе выделяется и, в последствии, рассматривается общая проблема процесса продажи автомобилей. Также описывается основная деятельность сотрудников автосалонов и на основании этих процессов становятся очевидны основные проблемы, которые предстоит решить в ходе проектной работы. Во второй главе разрабатывается схема движения материальных, финансовых и информационных потоков. Строится ещё одна модель, позволяющая решить проблемы, относящиеся к первой главе. Разрабатываются автоматизированные рабочие места (АРМ) сотрудников. Назначаются основные задачи для каждого сотрудника. 3 В третьей главе проектируется логическая и физическая структуры данных. На их основании строится непосредственно база данных. В четвертой главе проводится анализ и принимается решение о выборе программного обеспечения. Разрабатываются алгоритмы и код запросов. Предоставляется код для построения таблиц, запросов и отчетов к базе данных. В заключении описаны выводы и результаты, основными из которых являются: проанализирован основной бизнес-процесс компании. Были выявлен слабые места. Предложен вариант наиболее рационального решения по автоматизации процесса продажи; проанализировано и выбрано соответствующее программное обеспечение, СУБД. Построена логическая и физическая структура данных по автоматизации процесса продажи автомобилей компанией «Автоальянс»; на основании спроектированной системы производства рекомендованы к внедрению автоматизированные рабочие места и их задачи; В итоге разработанная автоматизированная система управления продажами автомобилей позволяет существенно снизить вероятность ошибок при заполнении документов, а также сокращает трудозатраты персонала, что способствует увеличению производительности компании. 4 1. Анализ проблемы процесса продажи автомобилей компании «Автоальянс» 1.1. Исследование процесса реализации автомобилей Коммерческая деятельность автосалона «Автоальянс» регулируется гражданским кодексом РФ (ГК РФ) от 30 ноября 1994 года N 51-ФЗ, постановлением правительства РФ от 11 апреля 2001 года “Об утверждении правил оказания услуг (выполнения работ) по техническому обслуживанию и ремонту автомототранспортных средств”, а также законом РФ от 7 февраля 1992 г. N 2300-1 “О защите прав потребителей”. Гражданский кодекс описывает содержимое договора купли-продажи, требования к качеству товара, исчисление гарантийного срока на товар, ответственность продавца в случае изъятия товара у покупателя и последствия товара ненадлежащего качества. Ранее продажу автомобилей также регулировало постановление от 19 января 1998 года N 55 “Об утверждении Правил продажи отдельных видов товаров, перечня товаров длительного пользования, на которые не распространяется требование покупателя о безвозмездном предоставлении ему на период ремонта или замены аналогичного товара, и перечня непродовольственных товаров надлежащего качества, не подлежащих возврату или обмену на аналогичный товар других размера, формы, габарита, фасона, расцветки или комплектации”, но оно утратило силу 1 января 2021 года на основании постановления Правительства Российской Федерации от 11 июля 2020 года N 1036. Главным бизнес-процессом автосалона является непосредственно продажа автомобилей. В первую очередь, для реализации автомобилей необходимы поставщики. Соответственно необходимо составить план закупок и заключить 5 договоры с поставщиками авто. Затем на основании заключенных договоров происходит формирование каталога автомобилей и затем происходит процесс сбыта автомобилей покупателям. Генеральный директор компании вместе с начальником отдела продаж, финансовым директором и главным бухгалтером составляют план закупок автомобилей. При составлении плана закупок, критически важным фактором является исследование спроса среди покупателей на конкретные модели автомобилей. Ответственность, связанная с аналитикой данных, лежит на начальнике отдела продаж. От этого шага напрямую зависит итоговое содержание каталога автомобилей. Затем генеральный директор заключает договоры с контрагентами на поставку автомобилей, которые способны предоставить необходимые автомобили в количестве, указанном в плане закупок. Далее начальник отдела продаж формирует список автомобилей, доступных к продаже, на основании заключенных договоров. Результатом данного процесса является каталог автомобилей. В итоге клиенты автосервиса используют сформированный каталог автомобилей для выбора подходящего им средства передвижения. В процессе сбыта автомобилей участвуют менеджер по продажам, кассир и водитель перегонщик в случае, если выбранный клиентом автомобиль находится за пределами автосалона, например – на складе. Визуализация вышеописанного представлена в виде диаграммы в нотации IDEF0 на рисунке 1. 6 Рисунок 1 – Основной бизнес-процесс компании «Автоальянс» - реализация автомобилей Заказ клиента на покупку автомобиля и поставщик автомобилей являются входными данными процесса. Процесс управляется: законом РФ «О защите прав потребителей» от 7 февраля 1992 года N 2300-1, гражданским кодексом РФ (ГК РФ) от 30 ноября 1994 года N 51-ФЗ, Постановлением правительства РФ от 11 апреля 2001 года «Об утверждении правил оказания услуг (выполнения работ) по техническому обслуживанию и ремонту автомототранспортных средств», а также федеральным законом №196-ФЗ «О безопасности дорожного движения» от 15 ноября 1995 года. 7 Необходимыми ресурсами для выполнения процесса являются: генеральный директор, начальник отдела продаж, финансовый директор, главный бухгалтер, менеджер по продажам, кассир и водитель перегонщик. Результатом процесса является выполненный заказ (совершенная клиентом покупка автомобиля) и отчет о продаже. В результате декомпозиции основного бизнес-процесса были выделены четыре процесса: составление плана закупок автомобилей, заключение договоров с поставщиками, формирование каталога автомобилей, сбыт автомобилей. Рассмотрим подробнее каждый из них. Составление плана закупок автомобилей: Начальник отдела продаж анализирует данные о продажах автомобилей различных моделей. Исходя из полученных аналитических результатов, он при помощи финансового директора составляет план закупок автомобилей. Сформированный план направляется на рассмотрение генеральному директору. В случае, если его все устраивает, план отсылается главному бухгалтеру для фиксации в бухгалтерской информационной системе. Заключение договоров с поставщиками: Генеральный директор заключает договоры поставки с поставщиками в соответствии с сформированным планом закупок. Договор поставки является одним из видов договора купли-продажи и регулируется ГК РФ. Формирование каталога автомобилей: Начальник отдела продаж формирует каталог автомобилей, доступных для продажи, исходя из заключенных договоров с поставщиками. Созданный каталог направляется на рассмотрение генеральному директору для одобрения. 8 Сбыт автомобилей: Менеджер по продажам рассматривает заказ клиента на покупку автомобиля из каталога. Менеджер может получить заявку, как от клиента, который физически пришел в автосервис, так и от клиента, который решил оставить заявку на веб-сайте компании. На основе заявки формируется договор купли-продажи с клиентом. Договор регулируется непосредственно ГК РФ. Затем осуществляется непосредственно продажа автомобиля, которая регулируется следующими нормативно-правовыми актами: постановление правительства РФ от 11 апреля 2001 года «Об утверждении правил оказания услуг (выполнения работ) по техническому обслуживанию и ремонту автомототранспортных средств»; гражданский кодекс РФ (ГК РФ) от 30 ноября 1994 года N 51-ФЗ; закон РФ «О защите прав потребителей» от 7 февраля 1992 года N 2300-1; федеральный закон №196-ФЗ «О безопасности дорожного движения» от 15 ноября 1995 года. За проведение оплаты отвечает кассир автосалона. Если желаемый клиентом автомобиль находится за пределами автосалона, то водитель перегонщик должен доставить автомобиль к автосалону, в котором была совершена покупка. В результате продажи формируется отчет о продаже. Важно отметить, что, естественно, не каждая продажа автомобиля требует составления плана закупок, заключения договоров и формирование каталога с автомобилями. Обычно это происходит с определенным промежутком, например, раз в квартал. Но эти процессы напрямую связанны с реализацией автомобилей. На рисунке 2 представлен результат декомпозиции основного бизнеспроцесса «Реализация автомобилей» в нотации IDEF0. 9 Рисунок 2 – Декомпозиция процесса «Реализация автомобилей» На рассматриваемой диаграмме показан подробный процесс реализации автомобилей. Изначально составляется план закупок автомобилей. Входными данными является заказ клиента на покупку автомобиля и поставщик автомобилей. Ресурсами необходимыми для выполнения являются: начальник отдела продаж, финансовый директор, генеральный директор, главный бухгалтер. Результатом процесса является план закупок. После составления плана закупок наступает следующий процесс «Заключение договоров с поставщиками». Входными данными является полученный из предыдущего процесса план закупок. 10 Процесс управляется договором поставки (регулируется ГК РФ) и гражданским кодексом РФ (ГК РФ) от 30 ноября 1994 года N 51-ФЗ. Необходимым для выполнения ресурсом является генеральный директор. Результатом процесса являются договор(-ы) с поставщиками(-ом). Следующим процессом является формирование каталога автомобилей. Входными данными являются заключенные договоры поставки, полученные из прошлого процесса. Ресурсами необходимыми для выполнения являются: начальник отдела продаж и генеральный директор. Результатом процессам является каталог автомобилей. Затем следует процесс сбыта автомобилей. Входными данными заказ клиента на покупку автомобиля и каталог автомобилей. Процесс управляется: договором купли-продажи (регламентируется в п. 1. ст. 454 ГК РФ), постановлением правительства РФ от 11 апреля 2001 года «Об утверждении правил оказания услуг (выполнения работ) по техническому обслуживанию и ремонту автомототранспортных средств», гражданским кодексом РФ (ГК РФ) от 30 ноября 1994 года N 51-ФЗ, законом РФ «О защите прав потребителей» от 7 февраля 1992 года N 2300-1, федеральным законом №196-ФЗ «О безопасности дорожного движения» от 15 ноября 1995 года. Необходимым для выполнения ресурсами являются: менеджер по продажам, кассир. Опциональным ресурсом является водитель перегонщик. Результатом является выполненный заказ и отчет о продаже. Рассмотрим результаты декомпозиции процесса сбыта автомобилей. Данный процесс состоит из трех процессов. 11 Первый процесс – принятие заявки на покупку автомобиля. Менеджер принимает заявку клиента при личном контакте или через интернет. В зависимости от способа, который использовал клиент. В заявке фигурируют личные данные о клиенте, выбранный им автомобиль из каталога и его конфигурация. Второй процесс – оформление договора купли-продажи. Используя заполненную заявку, менеджер по продажам оформляет договор между клиентом и автосервисом. Процесс составления договора регламентируется п. 1. ст. 454 ГК РФ. Третий процесс – продажа автомобиля. Клиент оплачивает кассиру сумму, указанную в договоре, и получает ключи от купленного автомобиля. Если желаемый клиентом автомобиль находится за пределами автосалона, то водитель перегонщик должен доставить автомобиль к автосалону, в котором была совершена покупка. Процесс регулируется федеральным законом №196-ФЗ «О безопасности дорожного движения» от 15 ноября 1995 года, постановлением правительства РФ от 11 апреля 2001 года «Об утверждении правил оказания услуг (выполнения работ) по техническому обслуживанию и ремонту автомототранспортных средств», гражданским кодексом РФ (ГК РФ) от 30 ноября 1994 года N 51-ФЗ. На рисунке 3 представлен результат декомпозиции процесса «Сбыт автомобилей» в нотации IDEF0. 12 Рисунок 3 – Декомпозиция процесса «Сбыт автомобилей» Первым процессом является принятие заявки клиента. На вход поступают каталог автомобилей и заказ клиента на покупку автомобиля. Ресурсом, необходимым для выполнения является менеджер по продажам. Результатом процесса является заполненная заявка. Далее происходит оформление договора. На вход поступает заполненная заявка. Процесс управляется договором купли-продажи (регулируется п. 1. ст. 454 ГК РФ). Ресурсом, необходимым для выполнения является менеджер по продажам. 13 Результатом процесса является договор на покупку. Затем в силу вступает процесс непосредственно продажи автомобиля. На вход поступает договор купли-продажи. Процесс управляется: федеральным законом №196-ФЗ «О безопасности дорожного движения» от 15 ноября 1995 года, постановлением правительства РФ от 11 апреля 2001 года «Об утверждении правил оказания услуг (выполнения работ) по техническому обслуживанию и ремонту автомототранспортных средств», гражданским кодексом РФ (ГК РФ) от 30 ноября 1994 года N 51-ФЗ. Ресурсами, необходимыми для выполнения являются менеджер по продажам, кассир, водитель перегонщик. Результатом процесса являются: выполненный заказ и отчет о продаже. 1.2. Проблемы реализации автомобилей в автосалонах компании «Автоальянс» Анализ процесса реализации автомобилей в автосалонах компании «Автоальянс» выявил следующие проблемы: 1. Отсутствие единой системы отчетности и хранения данных. Так как нет единой информационной системы, в которой могут работать несколько пользователей одновременно в процессе работы тратится много времени на структурирование и дублирование данных. Следовательно, при составлении плана закупок, начальник отдела продаж должен вручную находить и сортировать аналитические данные. Также следует отметить, что отсутствуют прямые связи между документами. 2. Человеческий фактор при ручном заполнении документов. 14 Из-за того, что при заполнении договоров или отчетов в отдельных файлах нет никакой проверки и сопоставления данных, возникает вероятность совершить ошибку при заполнении документов. Например, менеджер по продажам может случайно совершить ошибку при заполнении договора и указать другую конфигурацию покупаемого клиентом автомобиля. 3. Рутинная и ручная работа Большое количество трудозатрат на подготовку договоров и отчетов по продажам. 4. Сложность контроля за ходом выполнения работ. У директоров нет возможности отслеживать прогресс работы процессов в режиме реального времени, что приводит к лишним трудозатратам со стороны нижестоящего по иерархии персонала. 1.3. Формирование цели и задач проекта, определение стратегии достижения поставленной цели Целью проекта является разработка автоматической системы управления (в дальнейшем – АСУ) продажами автомобилей компанией «Автоальянс», что позволит организации уменьшить количество времени, затрачиваемое на ведение отчетности, а также значительно уменьшить вероятность ошибок при составлении сопроводительных документов. Для достижения поставленной цели определим следующие задачи: проведение анализа предметной области компании «Автоальянс», изучение процесса работы данной компании соответствующей концепции будущей АСУ; 15 и разработка проведение анализа проблем процесса продажи автомобилей компанией «Автоальянс», выявление проблем, возникающих в результате неэффективного управления и их решение с помощью разрабатываемой АСУ; разработка схемы движения информационных, материальных и финансовых потоков, отображающей в наглядной форме представление процесса продаж автомобилей; определение автоматизированных рабочих мест компании «Автоальянс» и регламента взаимодействия с АСУ; разработка логической и физической модели БД; реализация БД на выбранной СУБД, а также представление кода необходимых объектов на языке SQL. 16 2. Разработка концепции автоматизации 2.1. Определение методов решения выявленных проблем Проблемы будем решать изменениями в организации процесса. На первом этапе кратко определим шаги решения проблем: 1. Отсутствие единой системы отчетности и хранения данных. Создать приложение, в котором персонал, ответственный за фиксирование информации, касательно процесса продажи автомобилей, может независимо друг от друга вводить имеющиеся у них данные. 2. Человеческий фактор при ручном заполнении документов. Для уменьшения ошибок за счет человеческого фактора необходимо вносимые данные сопоставлять с уже имеющимися и при возникновении коллизии оповещать об этом пользователя программы. 3. Рутинная и ручная работа Автоматизировать ручные операции, через СУБД подключаемую к базе данных. Это позволит значительно сократить время выполнения различных процессов. 4. Сложность контроля за ходом выполнения работ. В приложении необходимо предусмотреть возможность для директоров иметь доступ ко всей информации, которую внесли в систему их подчиненные. А также к просмотру отчетов, а также возможность удаленно подтверждать или заверять документы. 17 2.2. Определение автоматизированных рабочих мест Для управления процессом продажи автомобилей, в системе будут выделены следующие автоматизированные рабочие места (АРМ): АРМ генерального директора; АРМ финансового директора; АРМ начальника отдела продаж; АРМ менеджера по продажам; АРМ кассира. 2.3. Описание функций выделенных АРМ АРМ генерального директора обеспечивает: контроль правильности заполнения документов; одобрение или отклонение документов; заверение документов; доступ ко всей базе данных (на чтение). АРМ финансового директора обеспечивает: доступ к отчетам по продажам; доступ к планам закупок автомобилей; доступ к заключенным договорам с поставщиками автомобилей. АРМ начальника отдела продаж обеспечивает: формирование статистических данных на основе отчетов по продажам; доступ к планам закупок автомобилей; доступ к базе клиентов компании; доступ к каталогу автомобилей; АРМ менеджера по продажам обеспечивает: 18 доступ к базе клиентов компании; доступ к отчетам по продажам; доступ к договорам купли-продажи с клиентами АРМ кассира обеспечивает: формирование отчетов по продажам автомобилей; 19 3. Разработка структуры информации 3.1. Разработка логической структуры данных Разработаем структуру хранения информации. На основании предложенной структуры будет проектироваться база данных. С этой целью выделим объекты и связи между ними. Анализ показывает, что в нашей системе выделяются такие объекты как: банк, поставщик, договор поставки, марка авто, автомобиль, тип коробки передач, тип привода, вид топлива, формфактор, конфигурация авто, поставленный автомобиль, автомобиль на продажу, услуга, дополнительная услуга, заявка на покупку авто, договор купли-продажи. На рисунке 4 изображена спроектированная логическая структура данных. Рисунок 4 – Логическая структура данных На данной схеме можно увидеть список объектов, необходимых для реализации физической модели данных. 20 3.2. Разработка физической структуры данных Разработанные объекты в логической модели преобразуем в физическую модель. Физическая структура данных представлена на рисунке 5. Рисунок 5 – Физическая структура данных На данной модели отображаются таблицы, содержащие в себе первичные и внешние ключи, которые необходимы для построения взаимосвязи между объектами, и остальные, существенные поля таблиц. 3.3. Структура таблиц Структура таблицы включает что каждый объект должен содержать определенный тип данных. Опишем структуру таблиц: Bank Сущность содержит информацию о банках, которые обслуживают поставщиков. Название поля Тип данных Пояснение Ключ bank_id integer Первичный ключ PK 21 Название поля Тип данных Пояснение name text Название банка bik integer БИК inn integer ИНН kpp integer КПП Ключ Dealer Сущность содержит информацию о поставщиках автомобилей. Название поля Тип данных Пояснение Ключ dealer_id integer Первичный ключ PK name text address text phone_number text Номер телефона bank_number text Банковский счет bank_id integer Обслуживающий банк Название компании поставщика Юридический адрес поставщика FK Supply contract Сущность содержит договоры на поставку автомобилей. Название поля Тип данных Пояснение Ключ supply_contract_id integer Первичный ключ PK contract_number text Номер договора total money Сумма dealer_id integer Поставщик delivery_date date Дата поставки 22 FK Car Configuration Сущность содержит данные о поставляемых автомобилях. Название поля Тип данных Пояснение Ключ car_configuration_id integer Первичный ключ PK car_id integer Автомобиль FK engine numeric Двигатель horsepower integer gearbox_name text year integer Год выпуска price money Закупочная цена fuel_usage numeric Расход топлива body_color text Закупочная цена interior_material text Расход топлива engine_displacement integer Объем двигателя gearbox_type text Тип коробки передач FK drive_type text Тип привода FK body_type text Формфактор FK fuel_type text Вид топлива FK Количество лошадиных сил Название коробки передач Gearbox Type Содержит названия типов коробок передач. Название поля Тип данных Пояснение Ключ name text Первичный ключ PK Drive Type Содержит названия типов привода. 23 Название поля Тип данных Пояснение Ключ name text Первичный ключ PK Fuel Type Содержит названия видов топлива. Название поля Тип данных Пояснение Ключ name text Первичный ключ PK Body Type Содержит названия формфакторов автомобилей. Название поля Тип данных Пояснение Ключ name text Первичный ключ PK Car Содержит данные о моделях автомобилей. Название поля Тип данных Пояснение Ключ car_id integer Первичный ключ PK model text Модель generation text Поколение brand text Марка авто FK Brand Содержит данные о марках авто. Название поля Тип данных Пояснение Ключ name text Первичный ключ PK 24 Supply Car Содержит данные о поставленных автомобилях. Название поля Тип данных Пояснение Ключ supply_car_id integer Первичный ключ PK supply_contract_id integer Контракт на поставку FK car_configuration_id integer Конфигурация авто FK Car to sell Содержит данные об автомобилях на продажу Название поля Тип данных Пояснение Ключ car_to_sell_id integer Первичный ключ PK supply_car_id integer price money Поставленный автомобиль FK Цена Client Содержит данные о клиентах. Название поля Тип данных Пояснение Ключ client_id integer Первичный ключ PK first_name text Имя last_name text Фамилия patronymic text Отчество phone_number text Номер телефона Manager Содержит данные о менеджерах по продажам. 25 Название поля Тип данных Пояснение Ключ manager_id integer Первичный ключ PK first_name text Имя last_name text Фамилия patronymic text Отчество Purchase Request Содержит данные о запросах на покупку. Название поля Тип данных Пояснение Ключ purchase_request_id integer Первичный ключ PK car_to_sell_id integer client_id integer manager_id integer Выбранная клиентом машина Клиент Менеджер по продажам FK FK FK Additional Service Содержит данные о дополнительных услугах, которые могут быть оказаны клиенту при продаже машины. Название поля Тип данных Пояснение Ключ additional_service_id integer Первичный ключ PK service_id integer Услуга FK purchase_request_id integer Запрос на покупку FK 26 Service Содержит данные о конкретных услугах. Название поля Тип данных Пояснение Ключ service_id integer Первичный ключ PK name text Название услуги cost money Стоимость Sale Contract Содержит данные о договорах купли-продажи автомобилей клиентам. Название поля Тип данных Пояснение Ключ sale_contract_id integer Первичный ключ PK contract_number text Номер договора total money Стоимость purchase_request_id integer Запрос на покупку FK 3.4. Разработка контрольного примера Для проверки возможности представлять информацию о проведенной рыболовецкой деятельности в спроектированной структуре данных, разработаем контрольный пример. Данный пример содержит: список конфигураций автомобилей, список договоров купли-продажи, список поставщиков, клиентов компании. Примеры представлены на рисунках 6, 7 и 8. 27 Рисунок 6 – Список конфигураций автомобилей Рисунок 7 – Список договоров купли-продажи Рисунок 8 – Список поставщиков Рисунок 9 – Список клиентов 28 4. Разработка программного обеспечения 4.1. Анализ и выбор систем программирования Выбор системы управления баз данных (СУБД) представляет собой сложную много параметрическую задачу и является одним из важных этапов при разработке в том числе и Автоматизированных информационных систем, содержащих в себе базы данных. Наиболее правильный подход при выборе СУБД основан на оценке того, в какой мере существующие системы удовлетворяют как текущим, так и будущим потребностям создаваемого проекта информационной системы. Существует несколько основных критериев выбора СУБД: тип СУБД (реляционные, документные, графовые и т. д.) особенности архитектуры; производительность (количество транзакций в секунду); надежность; системные требования к рабочей среде. Вопрос об использовании того или иного типа СУБД должен решаться на начальном этапе проектирования информационной системы. Важным критерием является средства поиска, поддерживаемые типы данных, заложенные в систему, а также наличие и возможность расширение типов. Рассмотрим популярные решения СУБД на рынке. Название Oracle Database Достоинства Недостатки надежность; отличная очень техническая поддержка (за пределами РФ); 29 стоимость высокая высокая продукта относительно конкурентов; Название Достоинства Недостатки включает в себя функционал большое потребление системных по работе с большими БД ресурсов; с недавнего времени отсутствует возможность стать клиентом компании, если твоя компания юридически находится на территории РФ, что аннулирует преимущество технической поддержки. MySQL распространяется для бесплатной версии доступна бесплатно; только платная поддержка; поддерживает набор отсутствие некоторых полезных пользовательских функций, интерфейсов; конкурентов, которые есть вроде у создание инкрементных резервных копий; отсутствует встроенная поддержка XML или OLAP. Microsoft Server SQL продукт в большая прост использовании; возможность регулировать и использование системных ресурсов; уровни с недавнего времени отсутствует отслеживать производительности. PostgreSQL для юридических лиц; предоставляет нерациональное СУБД отличная стоимость поддержка возможность со стать клиентом компании, если твоя компания стороны других продуктов юридически находится на компании Microsoft территории РФ. является масштабируемым Скорость работы может падать во решением и позволяет время проведения пакетных обрабатывать терабайты операций или выполнения данных; запросов чтения 30 Название Достоинства Недостатки полностью бесплатная; поддерживает формат json; существует множество предопределенных функций; архитектура СУБД, состоящая из элементов – отдельных схем. Это открывает дополнительные возможности для проектирования БД Исходя из приведенных достоинств и недостатков подведем итоги: Oracle Database. Идеально подходит для крупных организаций, которые работают с огромными базами данных. Но в данный момент продукт невозможно приобрести легальными способами на территории РФ. MySQL. Подходит для организаций, которым требуется надежный, бесплатный инструмент, но они готовы пожертвовать технической поддержкой и смириться с недостающим функционалом; Microsoft SQL Server. Идеально подходит для: крупных организаций, которые уже используют ряд продуктов Microsoft. Но в данный момент продукт невозможно приобрести легальными способами на территории РФ; PostgreSQL. Идеально подходит для организаций с ограниченным бюджетом в случае, если им требуется бесплатное и многофункциональное решение. 31 В процессе проведения сравнительного анализ существующих СУБД, был сделан следующий вывод, что СУБД PostgreSQL обладает рядом преимуществ по сравнению с другим СУБД по критериям, выдвинутым заказчиком проекта. В качестве графической оболочки для работы с PosgreSQL используется PgAdmin 4, которая идет в комплекте с продуктом. 4.2. Разработка алгоритмов и текстов программ Ниже приведен код для создания таблиц БД на языке SQL: Таблица additional service (дополнительные услуги): CREATE TABLE IF NOT EXISTS public.additional_service ( additional_service_id integer NOT NULL, service_id integer NOT NULL, purchase_request_id integer NOT NULL, CONSTRAINT additional_service_pkey PRIMARY KEY (additional_service_id), CONSTRAINT purchase_request_id FOREIGN KEY (purchase_request_id) REFERENCES public.purchase_request (purchase_request_id) MATCH SIMPLE, CONSTRAINT service_id FOREIGN KEY (service_id) REFERENCES public.service (service_id) MATCH SIMPLE ); Таблица bank (банк): CREATE TABLE IF NOT EXISTS public.bank ( bank_id integer NOT NULL, name text COLLATE pg_catalog."default" NOT NULL, bik integer NOT NULL, inn integer NOT NULL, 32 kpp integer NOT NULL, CONSTRAINT bank_pkey PRIMARY KEY (bank_id) ); Таблица body type (формфактор автомобиля): CREATE TABLE IF NOT EXISTS public.body_type ( name text COLLATE pg_catalog."default" NOT NULL, CONSTRAINT body_type_pkey PRIMARY KEY (name) ); Таблица brand (марка автомобиля): CREATE TABLE IF NOT EXISTS public.brand ( name text COLLATE pg_catalog."default" NOT NULL, CONSTRAINT brand_pkey PRIMARY KEY (name) ); Таблица car (автомобиль): CREATE TABLE IF NOT EXISTS public.car ( car_id integer NOT NULL DEFAULT nextval('car_car_id_seq'::regclass), model text COLLATE pg_catalog."default" NOT NULL, generation text COLLATE pg_catalog."default" NOT NULL, brand text COLLATE pg_catalog."default" NOT NULL, CONSTRAINT car_pkey PRIMARY KEY (car_id), CONSTRAINT fk_brand FOREIGN KEY (brand) REFERENCES public.brand (name) MATCH SIMPLE ); Таблица car_configuration (конфигурация автомобиля): 33 CREATE TABLE IF NOT EXISTS public.car_configuration ( car_configuration_id integer NOT NULL DEFAULT nextval('car_to_sale_car_to_sale_id_seq'::regclass), car_id integer NOT NULL DEFAULT nextval('car_to_sale_car_id_seq'::regclass), engine numeric NOT NULL, horsepower integer NOT NULL, gearbox_name text COLLATE pg_catalog."default", year integer NOT NULL, price money NOT NULL, fuel_usage numeric NOT NULL, body_color text COLLATE pg_catalog."default" NOT NULL, interior_material text COLLATE pg_catalog."default" NOT NULL, engine_displacement integer NOT NULL, gearbox_type text COLLATE pg_catalog."default" NOT NULL, drive_type text COLLATE pg_catalog."default" NOT NULL, body_type text COLLATE pg_catalog."default" NOT NULL, fuel_type text COLLATE pg_catalog."default" NOT NULL, CONSTRAINT car_to_sale_pkey PRIMARY KEY (car_configuration_id), CONSTRAINT car_id FOREIGN KEY (car_configuration_id) REFERENCES public.car (car_id) MATCH SIMPLE, CONSTRAINT fk_body_type FOREIGN KEY (body_type) REFERENCES public.body_type (name) MATCH SIMPLE, CONSTRAINT fk_drive_type FOREIGN KEY (drive_type) REFERENCES public.drive_type (name) MATCH SIMPLE, CONSTRAINT fk_fuel_type FOREIGN KEY (fuel_type) REFERENCES public.fuel_type (name) MATCH SIMPLE, CONSTRAINT fk_gearbox_type FOREIGN KEY (gearbox_type) REFERENCES public.gearbox_type (name) MATCH SIMPLE ); 34 Таблица car_to_sell (автомобиль на продажу): CREATE TABLE IF NOT EXISTS public.car_to_sell ( car_to_sell_id integer NOT NULL, supply_car_id integer NOT NULL, price money NOT NULL, CONSTRAINT car_to_sell_pkey PRIMARY KEY (car_to_sell_id), CONSTRAINT fk_supply_car_id FOREIGN KEY (supply_car_id) REFERENCES public.supply_car (supply_car_id) MATCH SIMPLE ); Таблица client (клиент): CREATE TABLE IF NOT EXISTS public.client ( client_id integer NOT NULL DEFAULT nextval('client_client_id_seq'::regclass), first_name text COLLATE pg_catalog."default" NOT NULL, last_name text COLLATE pg_catalog."default" NOT NULL, patronymic text COLLATE pg_catalog."default", phone_number text COLLATE pg_catalog."default", CONSTRAINT client_pkey PRIMARY KEY (client_id) ); Таблица dealer (поставщик): CREATE TABLE IF NOT EXISTS public.dealer ( dealer_id integer NOT NULL DEFAULT nextval('dealership_dealership_id_seq'::regclass), name text COLLATE pg_catalog."default" NOT NULL, address text COLLATE pg_catalog."default" NOT NULL, phone_number text COLLATE pg_catalog."default" NOT NULL, bank_number text COLLATE pg_catalog."default" NOT NULL, 35 bank_id integer NOT NULL, CONSTRAINT dealership_pkey PRIMARY KEY (dealer_id), CONSTRAINT fk_bank_id FOREIGN KEY (bank_id) REFERENCES public.bank (bank_id) MATCH SIMPLE ON UPDATE NO ACTION ON DELETE NO ACTION NOT VALID ); Таблица drive_type (тип привода): CREATE TABLE IF NOT EXISTS public.drive_type ( name text COLLATE pg_catalog."default" NOT NULL, CONSTRAINT drive_type_pkey PRIMARY KEY (name) ) Таблица fuel_type (вид топлива): CREATE TABLE IF NOT EXISTS public.fuel_type ( name text COLLATE pg_catalog."default" NOT NULL, CONSTRAINT fuel_type_pkey PRIMARY KEY (name) ) Таблица gearbox_type (тип трансмиссии): CREATE TABLE IF NOT EXISTS public.gearbox_type ( name text COLLATE pg_catalog."default" NOT NULL, CONSTRAINT gearbox_type_pkey PRIMARY KEY (name) ) 36 Таблица manager (менеджер): CREATE TABLE IF NOT EXISTS public.manager ( manager_id integer NOT NULL DEFAULT nextval('managers_managers_id_seq'::regclass), first_name text COLLATE pg_catalog."default" NOT NULL, last_name text COLLATE pg_catalog."default" NOT NULL, patronymic text COLLATE pg_catalog."default", CONSTRAINT managers_pkey PRIMARY KEY (manager_id) ); Таблица purchase request (запрос на покупку): CREATE TABLE IF NOT EXISTS public.purchase_request ( purchase_request_id integer NOT NULL, car_to_sell_id integer NOT NULL, client_id integer NOT NULL, manager_id integer NOT NULL, CONSTRAINT purchase_request_pkey PRIMARY KEY (purchase_request_id), CONSTRAINT car_to_sell_id FOREIGN KEY (car_to_sell_id) REFERENCES public.car_to_sell (car_to_sell_id) MATCH SIMPLE, CONSTRAINT client_id FOREIGN KEY (client_id) REFERENCES public.client (client_id) MATCH SIMPLE, CONSTRAINT manager_id FOREIGN KEY (manager_id) REFERENCES public.manager (manager_id) MATCH SIMPLE ); Таблица sale contract (договор купли-продажи): CREATE TABLE IF NOT EXISTS public.sale_contract ( sale_contract_id integer NOT NULL, 37 contract_number text COLLATE pg_catalog."default" NOT NULL, total money NOT NULL, purchase_request_id integer NOT NULL, CONSTRAINT sale_contract_pkey PRIMARY KEY (sale_contract_id), CONSTRAINT purchase_request_id FOREIGN KEY (purchase_request_id) REFERENCES public.purchase_request (purchase_request_id) MATCH SIMPLE ); Таблица service (услуга): CREATE TABLE IF NOT EXISTS public.service ( service_id integer NOT NULL, name text COLLATE pg_catalog."default" NOT NULL, cost money NOT NULL, CONSTRAINT service_pkey PRIMARY KEY (service_id) ); Таблица supply_car (поставленный автомобиль): CREATE TABLE IF NOT EXISTS public.supply_car ( supply_car_id integer NOT NULL, supply_contract_id integer NOT NULL, car_configuration_id integer NOT NULL, CONSTRAINT supply_car_pkey PRIMARY KEY (supply_car_id), CONSTRAINT fk_car_configuration_id FOREIGN KEY (car_configuration_id) REFERENCES public.car_configuration (car_configuration_id) MATCH SIMPLE, CONSTRAINT fk_supply_contract_id FOREIGN KEY (supply_contract_id) REFERENCES public.supply_contract (supply_contract_id) MATCH SIMPLE ); 38 Таблица supply_contract (договор на поставку): CREATE TABLE IF NOT EXISTS public.supply_contract ( supply_contract_id integer NOT NULL, contact_number text COLLATE pg_catalog."default" NOT NULL, total money NOT NULL, dealer_id integer NOT NULL, delivery_date date, CONSTRAINT supply_contract_pkey PRIMARY KEY (supply_contract_id), CONSTRAINT fk_dealer FOREIGN KEY (dealer_id) REFERENCES public.dealer (dealer_id) MATCH SIMPLE ); Код для создания контрольного примера: insert into public.additional_service (additional_service_id, service_id, purchase_request_id) values (2, 1, 2), (1, 3, 1); insert into public.bank (bank_id, name, bik, inn, kpp) values (1, 'Сбербанк', 44525225, 773601001, 773601001), (2, 'ВТБ', 44525745, 770207013, 44525745); insert into public.body_type (name) values ('седан'), ('хэтчбэк'); insert into public.brand (name) values ('Honda'), ('Ford'), ('LADA'); 39 insert into public.car (car_id, model, generation, brand) values (3, 'Vesta', 'Classic', 'LADA'), (4, 'Focus', 'III', 'Ford'), (5, 'CR-V', '5', 'Honda'); insert into public.car_configuration (car_configuration_id, car_id, engine, horsepower, gearbox_name, year, price, fuel_usage, body_color, interior_material, engine_displacement, gearbox_type, drive_type, body_type, fuel_type) values (2, 3, 1.4, 100, null, 2021, '1 200 000,00 ₽', 7.3, 'серый', 'серый', 1439, 'механическая', 'передний', 'седан', 'бензин'), (3, 4, 1.6, 130, null, 2020, '2 500 000,00 ₽', 11.5, 'красный', 'синий', 1698, 'автомат', 'задний', 'седан', 'бензин'), (1, 5, 2, 150, null, 2020, '1 519 000,00 ₽', 10.2, 'белый', 'серый', 1596, 'автомат', ' полный', 'хэтчбэк', 'бензин'); insert into public.car_to_sell (car_to_sell_id, supply_car_id, price) values (3, 3, '2 800 000,00 ₽'), (2, 2, '1 800 000,00 ₽'), (1, 1, '1 400 000,00 ₽'); insert into public.client (client_id, first_name, last_name, patronymic, phone_number) values (1, 'Лера', 'Титова', 'Максимовна', '89852935967'), (2, 'Елизавета', 'Голубева', 'Игоревна', '89225491133'), (3, 'Антон', 'Горшков', 'Тарасович', '89169293150'), (4, 'Марк', 'Иванов', 'Сергеевич', '89573910055'), (5, 'Анастасия', 'Гордунова', 'Георгиевна', '89138592355'), (6, 'Степан', 'Щуков', 'Дмитриевич', '89157823822'); insert into public.dealer (dealer_id, name, address, phone_number, bank_number, bank_id) values (1, 'ООО "Автодиллер"', 'г. Москва ул. Ленина стр. 32-1', '89259373022', '589018309890', 1), (3, 'ООО "СпецАвто"', 'г. Москва ул. Энгельса стр. 14-2', '89259285731', '641249879531', 1), (2, 'ОАО "АРОЛЬФ"', 'г. Москва ул. Тихонова д. 42 8 этаж', '89178492069', '346432398903', 1); 40 insert into public.drive_type (name) values ('передний'), ('задний'), ('полный'); insert into public.fuel_type (name) values ('газ'), ('дизель'), ('бензин'), ('электричество'); insert into public.gearbox_type (name) values ('робот'), ('автомат'), ('механическая'); insert into public.manager (manager_id, first_name, last_name, patronymic) values (1, 'Дмитрий', 'Калистров', 'Николаевич'), (2, 'Илья', 'Пинаев', 'Тигранович'), (3, 'Максим', 'Титов', 'Ильясович'), (4, 'Анна', 'Сазикова', 'Игоревна'); insert into public.purchase_request (purchase_request_id, car_to_sell_id, client_id, manager_id) values (3, 2, 1, 4), (2, 1, 4, 1), (1, 3, 3, 3); insert into public.sale_contract (sale_contract_id, contract_number, total, purchase_request_id) values (3, '14892', '3 000 000,00 ₽', 3), (2, '14328', '1 900 000,00 ₽', 2), (1, '13952', '2 400 000,00 ₽', 1); insert into public.service (service_id, name, cost) values (1, 'зимний комплект шин', '25 000,00 ₽'), (2, 'летний комплект шин', '20 000,00 ₽'), 41 (3, 'доп сервисное обслуживание 1 год', '40 000,00 ₽'); insert into public.supply_car (supply_car_id, supply_contract_id, car_configuration_id) values (3, 3, 3), (2, 2, 2), (1, 1, 1); insert into public.supply_contract (supply_contract_id, contact_number, total, dealer_id, delivery_date) values (3, '12312', '25 000 000,00 ₽', 3, '2022-12-30'), (2, '16831', '12 000 000,00 ₽', 2, '2022-12-24'), (1, '58913', '10 000 000,00 ₽', 1, '2022-12-15'); 4.4. Разработка запросов к базе данных К базе данных PostgreSQL можно обращаться с помощью SQL-запросов. С помощью запросов, описанных в этом разделе, разработчики смогут взаимодействовать с разработанной БД. Возможные взаимодействия с таблицами можно разделить на 4 группы: - добавить записи (INSERT); - изменить записи (UPDATE); - удалить записи (DELETE); - прочитать записи (SELECT). Разработаем запросы, которые будут необходимы разработчикам для реализации бизнес-задач: 1. Получение списка всех машин: Запрос на русском языке: получить список всех автомобилей. SQL-запрос: SELECT * FROM car 42 2. Получение списка всех конфигураций авто: Запрос на русском языке: получить весь список конфигураций авто SQL запрос: SELECT * FROM car_configuration 3. Получение конфигураций авто по конкретной модели авто Запрос на русском языке: получить список конфигураций по конкретной модели авто SQL запрос: SELECT * FROM car_configuration WHERE car_id = @car_id, где @car_id – это передаваемый в запрос, аргумент ID автомобиля. 4. Получение всех поставок от дилера по названию дилера с сортировкой по дате доставки Запрос на русском языке: получить отсортированный по дате список поставок по названию дилера SQL запрос: SELECT supply_contract_id, dealer.name, delivery_date, total FROM supply_contract JOIN dealer ON supply_contract.dealer_id = dealer.dealer_id WHERE dealer.name = @name, где @name – это передаваемый в запрос, аргумент название дилера ORDER BY supply_contract.delivery_date DESC 5. Получение всех продаж, которые включают в себя дополнительные услуги (сервис). 43 Запрос на русском языке: получить все продажи, в которых были проданы доп. услуги. SQL запрос: SELECT sale_contract_id, contract_number, total, additional_service.additional_service_id FROM sale_contract JOIN purchase_request ON sale_contract.purchase_request_id = purchase_request.purchase_request.id JOIN additional_service ON purchase_request.purchase_request.id = additional_service.additional_service.id 6. Получение суммы всех продаж Запрос на русском языке: получить сумму всех продаж SQL запрос: SELECT SUM(total) FROM sale_contract 7. Регистрация нового клиента Запрос на русском языке: добавить нового клиента в таблицу клиентов SQL запрос: INSERT INTO client VALUES (@first_name, @last_name, @patronymic, @phone_number), где значения, начинающиеся с символа ‘@’ являются передаваемыми в запрос аргументами 8. Добавление новой машины в каталог Запрос на русском языке: добавить машину в каталог автомобилей SQL запрос: INSERT INTO car 44 VALUES (@model, @generation, @brand), где значения, начинающиеся с символа ‘@’ являются передаваемыми в запрос аргументами 9. Обновить цену у определенного контракта Запрос на русском языке: Установить новую цену у определенного контракта SQL запрос: UPDATE sale_contract SET total = @new_total_price WHERE sale_contract_id = @contract_id, где @new_total_price – новая цена, а @contract_id – id контракта, у которого изменяем цену 45 5. Выводы и результаты При выполнении проектной работы по проектированию и разработке автоматизированной системы управления процессом продажи автомобилей компании «Автоальянс» были получены следующие результаты: проанализирован основной бизнес-процесс компании. Были выявлен слабые места. Предложен вариант наиболее рационального решения по автоматизации процесса продажи; разработаны автоматизированные рабочие места и выделены их основные задачи; проанализировано и выбрано соответствующее программное обеспечение, СУБД. Построена логическая и физическая структура данных по автоматизации процесса продажи автомобилей компанией «Автоальянс»; на основании спроектированной системы производства рекомендованы к внедрению автоматизированные рабочие места и их задачи; представлен программный код построения таблиц и запросов. Сделанные выводы: в результате проведенного предпроектного исследования установлено, что целесообразно создать распределенные автоматизированные системы с рядом автоматизированных рабочих мест; в ходе создания системы выявлена необходимость создания АРМ генерального директора, финансового директора, начальника отдела по продажам, менеджера по продажам и кассира; целесообразно было выбрать многофункциональности, использования, так как СУБД PostgreSQL отказоустойчивости данное решение и является из-за бесплатного свободно распространяемой и полностью соответствует требованиям заказчика. 46 её Источники информации 1. Гражданский кодекс РФ (ГК РФ) от 30 ноября 1994 года N 51-ФЗ 2. Закон РФ «О защите прав потребителей» от 7 февраля 1992 года N 2300-1 3. Федеральный закон №196-ФЗ «О безопасности дорожного движения» от 15 ноября 1995 года 4. Постановление правительства РФ от 11 апреля 2001 года «Об утверждении правил оказания услуг (выполнения работ) по техническому обслуживанию и ремонту автомототранспортных средств» 5. ГОСТ 34.003-90. Автоматизированные системы. Термины и определения. 6. ГОСТ 34.201-89. Виды, комплектность и обозначение документов при создании автоматизированных систем. 7. ГОСТ 34.601-90. Автоматизированные системы. Стадии создания. 8. ГОСТ 34.602-89. Техническое задание на создание автоматизированной системы. 9. ГОСТ 34.603-92. Виды испытаний автоматизированных систем. 10. РД 50 - 34.698-90. Автоматизированные системы. Требования к содержанию документов 11. РД 50-680-88. Автоматизированные системы. Основные положения 12. ГОСТ 19.002-80. Схемы алгоритмов и программ. Правила выполнения 13. ГОСТ 19.003-80. Схемы алгоритмов и программ. Обозначения условные графические 14. ГОСТ 19.004-80. Термины и определения 15. ГОСТ 19.101-77. Виды программ и программных документов 16. ГОСТ 19.102-77. Стадии разработки 17. ГОСТ 19.103-77. Обозначение программ и программных документов 18. ГОСТ 19.104-78. Основные надписи 19. ГОСТ 19 105-78. Общие требования к программным документам 47 20. ГОСТ 34.003-90 Основные понятия. 21. ГОСТ 34.201-89. Виды, комплектность и обозначение документов при создании автоматизированных систем. 22. ГОСТ 34.601-90. Автоматизированные системы. Стадии создания 23. ГОСТ 34.602-89. Техническое задание на создание автоматизированной системы. 24. ГОСТ 34.603-92. Виды испытаний автоматизированных систем. 25. ГОСТ 24.103-84. Основные положения 26. ГОСТ 24.104-85. Общие требования к разработке АСУ 27. ГОСТ 24.602-86. Состав и содержание работ по стадиям создания 28. ГОСТ 19.101-77. Виды программ и программных документов 29. ГОСТ 24.202-80. Требования к содержанию документа «Техникоэкономическое обоснование создания АСУ». 30. ГОСТ 24.203-80. Требования к содержанию общесистемных документов. 31. Шениг Г.-Ю. PostgreSQL 11. Мастерство разработки / пер. с анг. А. А. Слинкина. – М.: ДМК Пресс, 2019. – 352 с.: ил 32. Документация к PostgreSQL 13.2The PostgreSQL Global Development GroupПеревод на русский язык, 2015-2021 гг.:Компания «Постгрес Профессиональный» 33. Функциональное моделирование на базе стандарта IDEF0: метод. указания/сост. Д.Ю. Киселев, Ю.В.Киселев, А.В.Вавилин. –Самара: Издво СГАУ ,2014.–20с 48 ПРИЛОЖЕНИЯ Договор купли-продажи между клиентом и автосалоном 49