Главная страница « Информация « ООАП «

Варианты второго задания по ООАП/МАППО для групп 528, 620, 623, 627. 2021-22 учебный год


«Нет проблем! Мы можем покончить с этой ерундой за выходные!»
Э. Йордон «Путь камикадзе»

Требования


В каждом из предложенных вариантов требуется при помощи CASE-средства Visual Paradigm построить UML-модель программного обеспечения. Выполнять задание следует самостоятельно, не используя решения, выполненные другими студентами. При выявлении заимствований из других студенческих моделей задание не может быть зачтено.
Процесс создания модели состоит из нескольких этапов, по окончании каждого из которых производится сдача полученных результатов:

  1. Создание модели требований (обязательный для выполнения этап, контрольный срок см. в гугльтаблице).

  2. Создание модели анализа (обязательный для выполнения этап, контрольный срок см. в гугльтаблице).

  3. Создание проектной модели системы (этап может быть выполнен по желанию, для зарабатывания дополнительных баллов, контрольный срок см. в гугльтаблице).

  4. Составление отчёта по модели (этап может быть выполнен по желанию, для зарабатывания дополнительных баллов, контрольный срок -- за сутки до дня экзамена/пересдачи).

Процесс моделирования должен проходить так, как это описано в методическом пособии (см. [html]). Структура модели должна соответствовать структуре, предусмотренной технологией Unified Process.

При работе над моделью требований (1й этап) рекомендуется сначала создать эскиз и отправить на проверку. Эскизом является скриншот диаграммы вариантов использования, на которую помещены все действующие лица и все варианты использования. При создании эскиза не следует выделять включённые и/или расширяющие варианты использования. Следует по эскизу выбрать один ключевой вариант использования и отметить его на диаграмме цветом или примечанием. Выбирать ключевой вариант использования следует так, чтобы он относился к основному функционалу системы. Вход в систему, как и выход из неё не могут быть выбраны ключевыми вариантами использования. Скриншот рекомендуется отправить лектору через Moodle-форму. После согласования с лектором эскиза и выбора ключевого варианта использования можно продолжить работу по первому этапу. Согласование выбора ключевого ВИ проводится с тем, чтобы у разных студентов не совпадали ключевые ВИ, если им достался один и тот же вариант или схожие варианты.

По итогам выполнения первого этапа через Moodle-форму сдаётся модель (один VPP-файл проекта) и сопровождающий текстовый файл (DOC или PDF). В модели должна присутствовать диаграмма вариантов использования системы и диаграмма деятельности ключевого варианта использования. Модель следует начинать делать с заготовки проекта, а не с пустого проекта (см. методичку). Для одного ключевого варианта использования должна быть составлена диаграмма деятельности. Эта диаграмма моделирует основной поток и альтернативные потоки своего варианта использования. Диаграмма деятельности должна соответствовать описанию варианта использования и его связям с действующими лицами на диаграмме вариантов использования. В сопровождающем текстовом файле должны быть объединены глоссарий проекта, составленный в виде таблицы, а также тексты описаний всех действующих лиц и всех вариантов использования с диаграммы ВИ из модели. Описания должны быть составлены на русском языке. Полное описание одного ключевого варианта использования, выбор которого был согласован с лектором, должно предшествовать кратким описаниям остальных вариантов использования. Описание действующего лица должно коротко (в одну-две строки) сообщать о роли данного лица. Примеры кратких описаний вариантов использования приведены в методичке. В кратком описании варианта использования указываются основные действия (шаги) системы и действующих лиц в рамках основного потока (давать описание основного потока как полную последовательность шагов не следует). Краткое описание не подробно, так в нём нет шагов альтернативных потоков. Полное описание (ключевого) варианта использования должно включать в себя краткое описание, предусловие, гарантии успеха и минимальные гарантии, потоки событий (основной и альтернативные – один или более, без альтернативного потока описание не будет зачтено). Гарантии успеха (что истинно по окончании основного потока) и минимальные гарантии (что истинно всегда, в том числе при неуспехе) не могут быть пусты и/или бессмысленны.

До конца 2021 г. можно заработать дополнительные баллы, добавив в модель требований помимо одного ключевого варианта использования 1 или 2 дополнительных ключевых ВИ. Каждый дополнительный ключевой ВИ в модели требований (полное описание + диаграмма деятельности) даёт 2 балла. Сделанное сверх указанной границы не оценивается, не рассматривается. Присланное в 2022 г. не приносит баллов. Штрафы за дополнительное моделирование не начисляются. Вход в систему, как и выход из неё не могут быть выбраны в качестве дополнительных ключевых ВИ.

По итогам выполнения второго этапа через Moodle-форму сдаётся модель анализа (один VPP-файл проекта). Модель анализа должна удовлетворять перечисленным ниже требованиям. В Analysis Model должна быть создана диаграмма KeyAbstractions, на которой отображены все классы – ключевые абстракции, а также перечислимые типы и/или структурированные типы и связи между ними. Следует создать внутри Analysis Model пакет, названный Usecase realizations. В этом пакете следует для одного ключевого варианта использования, выбранного и описанного на первом этапе, создать отдельную кооперацию, содержащую относящиеся к реализации этого варианта использования элементы модели:

  • диаграммы последовательности, реализующие потоки варианта использования;

  • диаграмму классов View of Participating Classes, на которой представлены все классы анализа, участвующие в реализации этого варианта использования.

Все классы анализа следует разместить непосредственно в пакете Analysis Model (на верхнем уровне), а не внутри коопераций. Созданные диаграммы могут содержать необходимые пояснения в виде примечаний. В сложных потоках событий ветвления и циклы должны быть промоделированы с помощью комбинированных фрагментов на диаграммах последовательности. Не следует увлекаться усложнением потоков -- зацикливанием, дублированием и проч.. Если диаграмма не помещается на экране FullHD (или помещается, но не читается из-за мелкого размера текста), то следует разделить её на части и вторую часть сделать отдельной диаграммой, на которую сделать ссылку на диаграмме с первой частью.

До конца 2021 г. можно заработать дополнительные баллы, добавив в модель анализа помимо реализации одного ключевого варианта использования реализации 1 или 2 дополнительных, при условии, что это те же дополнительные ВИ, которыми уже была ранее пополнена модель требований. Каждая добавленная реализация (диаграмма VOPC + диаграммы последовательности для потоков событий) даёт 4 балла. Сделанное сверх указанной границы не оценивается, не рассматривается. Присланное в 2022 г. не приносит баллов. Штрафы за дополнительное моделирование не начисляются.

По итогам выполнения третьего этапа через Moodle-форму сдаётся проектная модель (один VPP-файл проекта) и сопровождающий текстовый файл (DOC или PDF) с описаниями классов и интерфейсов. Как сопроводительный файл может быть сдан PDF-файл отчёта по заданию, если Вы его составите по своему желанию. Можно в первую попытку загрузить модель, в которой выполнены не все шаги из следующего списка, а 1-4 или больше. В таком случае стоит в сопровождающем файле дать пояснение, что проектная модель не полна и сдаётся частично.

При работе над проектной моделью (третий этап) требуется:

  1. Разбить систему на 3 уровня (Application, Business Services, Middleware).

  2. Создать структуру пакетов внутри Design model, как это описано в методичке.

  3. Создать диаграмму размещения внутри Deployment View. Для встроенных систем (варианты со словом «терминал» в названии т. п.) диаграмма размещения должна изображать связи между процессором и устройствами, а также узлами внешних систем. В остальных вариантах диаграмма размещения показывает узлы вычислительной среды системы, узлы внешних систем, связи между ними и размещение процессов разрабатываемой системы по узлам. Для упрощения допускается и рекомендуется рисовать среды выполнения без объемлющих их аппаратных узлов.

  4. Разместить классы по пакетам в Design model, как это описано в методичке и рассказано в лекциях.

  5. Выделить не менее чем одну подсистему. В каких-то вариантах предусмотрена работа с устойчивыми объектами. Её следует поручить подсистеме обеспечения устойчивости (т. е., взаимодействия с БД на основе JDBC). В каких-то вариантах предусмотрен обмен данными / запросами с внешней программной системой. Его реализацию следует поручить подсистеме взаимодействия с внешним ПО на основе XML-RPC. Одну из подсистем следует спроектировать, как это описано в методичке и рассказано на лекциях.

  6. Следует создать интерфейс подсистемы, дать полные сигнатуры его операциям. Описание интерфейса поместить в текстовый файл, где указать краткое описание (ответственность подсистемы) и таблицу с описанием операций (полная сигнатура, назначение операции).

  7. Для подсистемы создать класс-фасад («subsystem proxy») и при необходимости другие классы подсистемы. На отдельной диаграмме классов показать связи между классами подсистемы, а также связи между классами подсистемы и элементами модели, лежащими вне подсистемы. Создать диаграммы последовательности для описания реализации операций интерфейса подсистемы. При наличии в интерфейсе нескольких однотипных операций следует промоделировать по одной операции каждого типа (например, один «read», один «update», один «delete», один «create»).

  8. Изменить созданную ранее реализацию ключевого варианта использования, указав на ней линии жизни экземпляров классов, реализующих интерфейс подсистемы (типом таких объектов должен быть указан интерфейс подсистемы).

  9. Уточнить связи между классами системы, заменяя необязательные ассоциации на зависимости, указывая направления у всех оставшихся ассоциаций, выбирая при необходимости тип для ассоциаций «часть -- целое»: агрегация или композиция, уместно добавляя квалификаторы и/или свойства полюсов ассоциаций (ordered, nonunique).

  10. Уточнить типы атрибутов классов, их мощности, начальные значения, области действия и дать полные сигнатуры операциям классов.

  11. Каждый класс (ключевую абстракцию, участника реализаций вариантов использования, класс подсистемы) снабдить описанием, помещённым в общий текстовый файл, где ранее описан интерфейс подсистемы. Описание класса должно включать в себя краткое указание ответственности класса, описания атрибутов и операций (с указанием для каждого атрибута и каждой операции полной сигнатуры и его/её назначения). Не описывайте тривиальные операции с очевидной сигнатурой: геттеры, сеттеры, конструкторы без параметров.

  12. Для описания поведения экземпляров одного выбранного класса со сложным поведением построить диаграмму состояний. В проектной модели должна быть хотя бы одна нетривиальная диаграмма состояний с действиями. Не следует выбирать для составления диаграммы состояний граничный класс. Подходящим кандидатом, как правило, является класс-ключевая абстракция или «subsystem proxy»-класс подсистемы.

  13. Построить диаграмму деятельности для моделирования сложного метода с альтернативами и/или циклами. В проектной модели должна быть хотя бы одна нетривиальная диаграмма деятельности, моделирующая метод какой-либо операции некоторого класса.

  14. Разработать схему базы данных и отобразить её в виде диаграммы классов со стереотипами из специализированного профиля UML (во всех вариантах).

До окончания 2021 года можно заработать дополнительные баллы, добавив в проектную модель реализации 1 или 2 дополнительных ВИ, при условии, что это те же дополнительные ВИ, которыми уже были ранее пополнены модель требований и модель анализа. Каждая добавленная реализация (VOPC, диаграммы последовательности для потоков событий) даёт 4 балла. Либо можно смоделировать вторую подсистему в дополнение к первой, при условии, что подсистемы базируются на разных архитектурных механизмах. Реализация второй подсистемы даёт 4 балла. Сделанное сверх указанной границы не оценивается, не рассматривается. Присланное в 2022 г. не приносит баллов. Штрафы за дополнительное моделирование не начисляются.

Требования по составлению отчёта опубликованы отдельно [html]. Составление отчёта не обязательно, его можно выполнить по желанию для зарабатывания баллов. Отчёт может быть составлен и сдан по тем этапам, которые Вы успели выполнить. Отчёты принимаются и рассматриваются до контрольного срока, наступающего за сутки до дня экзамена/пересдачи.

Список вариантов


1. Ломбард

2. Расписание занятий

3. Магазин электронных книг

4. Онлайновая киномания

5. Кассовый терминал городского транспорта

6. Сервер городского транспорта

7. Валидатор городского транспорта

8. Продажа электронной периодики

9. Терминал пополнения

10. Турникет станции МЦД

11. Цифровая меломания

12. Дистанционное обучение

13. Магазин программ и игр

14. Терминал выдачи заказов

15. Терминал курьерской службы

Вариант 1. Ломбард


Программная система автоматизирует работу ломбарда, позволяет частично осуществлять её онлайн. Пользователи-заёмщики и пользователи-покупатели регистрируются в системе через Веб, указывая в форме регистрации логин-email, пароль, ф., и., о., адрес, паспортные данные. Если форма заполнена верно, e-mail не совпадает с e-mail'ом другого пользователя, то регистрационная запись о новом пользователе создаётся, и пользователь получает в свой электронный почтовый ящик сообщение для подтверждения e-mail со сгенерированным системой кодом. Чтобы подтвердить e-mail, пользователь должен воспользоваться ссылкой из полученного по e-mail сообщения. По ссылке открывается форма, в которой заполняется логин, пароль и присланный код. Если все данные сообщены верно, то пользователь получает полноценный доступ к системе. Теперь он может «входить» и использовать все возможности, предоставляемые зарегистрированным пользователям.

Заёмщик, войдя в систему может оставить заявку на заём под залог. В заявке он указывает сведения о ценном предмете, предлагаемом в качестве залога, и сумму займа, необходимую ему. Сведения о предмете для залога включают в себя: название, категорию (электроника, букинистика, коллекционирование, ювелирные изделия, часы и т. п.), описание, фотографию. Заявки заёмщиков доступны в системе для работников ломбарда. Работник изучает заявку и либо отклоняет её, либо принимает, устанавливая сумму займа, ежедневный процент, длительность контрольного периода времени, в течение которого залог может быть выкуплен заёмщиком. Сведения о новом статусе заявки доводятся до заёмщика по электронной почте. Оформление документов и передача предмета в ломбард осуществляется офлайн. Если заём был выдан, то работник ломбарда меняет статус заявки на заём, вводит № договора займа, дату начала контрольного периода времени. Пока длится контрольный период времени заёмщик может отслеживать в системе, как меняется сумма выкупа залога. Она является результатом сложения суммы займа и дополнительной суммы, определяемой как произведение ежедневного процента, на количество дней, прошедших с начала контрольного периода до текущей даты, и на сумму займа. Например, при сумме займа 100 000 рублей, проценте в 0,05% по прошествии 20 дней сумма выкупа составит 100 000 + 0,0005 * 20 * 100 000 = 101 000. Выкуп залога осуществляется либо наличными через кассу ломбарда, либо онлайн по банковской карте. Заёмщик сообщает сведения о банковской карте: номер, срок действия, сведения о владельце, трёхзначный код защиты. Если сведения сообщены должным образом, система передаёт их в составе запроса на оплату через шлюз к внешней платёжной системе. Ответ на этот запрос может быть положительным или нет. Если попытка была неуспешной, то статус займа не меняется. Если получено подтверждение успешной оплаты, то заём помечается в системе как погашенный. Залог за погашенный заём заёмщик получает офлайн. Работник ломбарда делает в системе пометку о том, что залог возвращён. Возвращаются залоги только по погашенным займам.

Не выкупленные залоги после истечения контрольных сроков займов выставляются на аукционы. Работник ломбарда по каждому залогу, выставляемому на аукцион, определяет начальную ставку, начало и длительность аукциона, шаг (минимальная разница между двумя подряд идущими ставками). Пользователи-покупатели могут делать ставки по лотам, по которым аукционы начались и ещё не закончились. Первая ставка принимается, если она не ниже начальной ставки. При наличии предыдущих ставок, ставка принимается если разница между ней и последней по времени принятой ставкой не ниже шага, установленного продавцом, иначе ставка считается не принятой. Принятая ставка пользователя может быть «перебита» более крупной ставкой. Один и тот же пользователь может сделать несколько ставок на одном и том же аукционе. Ставки заёмщиков к собственным залогам принимаются, также заёмщики могут делать ставки к чужим залогам.

После успешного завершения аукциона, которое наступает, если аукцион завершился с хотя бы одной принятой ставкой, система определяет победителя. Им становится тот, кто сделал последнюю принятую системой ставку. Система информирует победителя о выигрыше аукциона через электронную почту. Обмен залогов на деньги осуществляется вне системы, но по работник ломбарда отмечает в системе тот факт, что залог был выкуплен на аукционе и выдан покупателю. Если аукцион закончился неудачно, работник может повторно выставить залог на аукционе с новыми или прежними условиями.

Пользователям-покупателям система предоставляет возможности для поиска залогов, выставленных на аукцион по категории и названию. Результаты могут быть отсортированы по дате завершения аукциона, блиц-цене, текущей ставке. Залоги, по которым аукционы завершены, в выдачу не попадают. Пользователи имеют доступ к списку всех аукционов, на которых от них были приняты ставки. О каждом таком аукционе пользователь может получить полную историю -- перечень упорядоченных по времени ставок, принятых системой. В этом списке система маскирует имена всех пользователей, делающих ставки, за исключением имени пользователя, просматривающего историю.

Действия с залогом журналируются и хранятся в системе. По прошествии 365 суток после последнего обновления сведений о залоге (заявке/займе) данные автоматически удаляются из системы.

Следует разработать схему реляционной базы данных системы.

Все необходимые для работы сведения хранятся в самой системе, а не в каком-либо внешнем хранилище. Внешними по отношению к системе являются платёжная система, SMTP-сервер.

Вариант 2. Расписание занятий


Чтобы обеспечить проведение курсов лекций, в университете внедрена система «Расписание занятий», доступ к которой осуществляется через Web. Каждый преподаватель должен иметь в системе заведённый им аккаунт -- учётную запись. Регистрируясь в системе, преподаватель указывает в форме регистрации логин-email (только с университетского сервера электронной почты), пароль, ф., и., о., адрес, сведения о факультете и кафедре, на которых он работает. Если форма заполнена верно, e-mail не совпадает с e-mail'ом другого преподавателя, то регистрационная запись о новом преподавателе создаётся, и он получает в свой электронный почтовый ящик сообщение для подтверждения e-mail со сгенерированным системой кодом. Чтобы подтвердить e-mail, преподаватель должен воспользоваться ссылкой из полученного по e-mail сообщения. По ссылке открывается форма, в которой заполняется логин, пароль и присланный код. Если все данные сообщены верно, то преподаватель получает полноценный доступ к системе. Теперь он может «входить» и использовать все возможности, предоставляемые зарегистрированному преподавателю.

В первую неделю каждого учебного семестра зарегистрированный преподаватель вводит сведения о курсах по выбору -- спецкурсах, которые он хотел бы прочесть в текущем семестре. Им указывается название спецкурса, его аннотация, перечень учебных групп, студенты которых могут записаться на спецкурс, необходимое оборудование: стационарный экран и мультимедийный проектор, «умная доска», маркерная доска; вид отчёта по спецкурсу: зачёт без оценки / зачёт с оценкой / экзамен. Система, используя сведения о расписании занятий по обязательным дисциплинам, автоматически рассчитывает и по запросу предоставляет преподавателю возможные варианты -- <день недели, номер пары, аудитория> -- для проведения лекций по спецкурсу. В предложенных вариантах учитывается что аудитория должна быть свободна, и в ней должно быть оборудование, необходимое для проведения курса. Также учитывается, что у учебной группы не должно быть занятий по обязательным дисциплинам во время лекций по спецкурсу. Ещё учитывается, что один и тот же преподаватель не может одновременно проводить два занятия (по спецкурсам и/или по обязательным дисциплинам).

Во вторую неделю семестра преподаватель вводит список студентов, выбравших его спецкурс для сдачи в текущем семестре. С учётом введённого списка студентов, система корректирует результаты запросов о возможных парах и аудиториях для проведения спецкурса. Разрешается указывать студентов, учащихся только в учебных группах, для которых был предложен курс. Допускается вносить изменения в список студентов в течение недели (добавлять / удалять / исправлять). Идентификатором студента является номер его студенческого билета. Один и тот же студент не может быть указан дважды в списке. Не допускается повторное прохождение курса (т. е. ситуация, когда студент сдал курс ранее, ушёл в академический отпуск, восстановился и снова записался на уже сданный им курс).

В начале третьей недели преподаватель должен утвердить окончательную версию списка студентов -- слушателей его спецкурса в текущем семестре. После утверждения список не может быть изменен. Затем преподаватель должен выбрать один из предлагаемых ему системой вариантов <день недели, номер пары, аудитория>. После его выбора система фиксирует занятие в общем расписании занятий. Система учитывает, что преподаватели могут делать свой выбор не одновременно. Так, если один и тот же студент записан на разные спецкурсы, то занятия по этим курсам не могут совпадать по дню недели и номеру пары. Система не допускает коллизии, при которых на один и тот же день недели, номер пары и аудиторию назначаются разные занятия. Не допускаются и другие коллизии, при которых на один и тот же день недели, номер пары одному и тому же преподавателю назначаются разные занятия.

Системой «Расписание занятий» пользуются также работники учебного отдела. Они ведут работу с данными о студентах (поступивших в текущем учебном году / выпустившихся в предыдущем учебном году / ушедших в академический отпуск / восстановившихся из отпуска / перешедших на новый курс в начале текущего учебного года). Работники учебного отдела поддерживают с помощью системы в актуальном состоянии данные об учебных аудиториях и оборудовании, установленном в них. До начала будущего семестра работники учебного отдела с помощью системы составляют расписание занятий по обязательным дисциплинам на будущий семестр. По согласованию с кафедрами, по каждой обязательной дисциплине закрепляются лектора, которые будут вести занятия. При составлении расписания занятий по обязательным дисциплинам коллизии не допускаются в том же ключе, что и при составлении расписания спецкурсов.

Система автоматически удаляет данные, имеющие отношение ко времени более чем 10-тилетней давности.

Незарегистрированные в системе пользователи могут в ходе семестра получить текущее расписание занятий по обязательным дисциплинам и по спецкурсам, если укажут номер курса или номер учебной группы.

Вариант задания предусматривает разработку схемы реляционной базы данных системы.

Все необходимые для работы сведения хранятся в самой системе, а не в каком-либо внешнем хранилище. Внешним по отношению к системе является SMTP-сервер.

Вариант 3. Магазин электронных книг


Программная система автоматизирует продажу электронных книг, позволяя осуществлять её онлайн. Покупатели электронных книг -- книголюбы -- регистрируются в системе онлайн, указывая в форме регистрации логин-email, пароль, ф., и., о., день рождения. Если форма заполнена верно, e-mail не совпадает с e-mail'ом другого книголюба, то регистрационная запись о новом книголюбе создаётся, и он получает в свой электронный почтовый ящик сообщение для подтверждения e-mail со сгенерированным системой кодом. Чтобы подтвердить e-mail, книголюб должен воспользоваться ссылкой из полученного по e-mail сообщения. По ссылке открывается форма, в которой заполняется логин, пароль и присланный код. Если все данные сообщены верно, то книголюб получает полноценный доступ к системе. Теперь он может «входить» и использовать все возможности, предоставляемые зарегистрированному книголюбу.

О каждой книге магазин хранит и предоставляет книголюбам набор сведений: номер ISBN, название книги, год издания, название издательства, жанр книги, авторы книги (один или более чем один). Электронная книга может предлагаться в разных форматах: PDF, EPUB, DjVu и др. Цена одной и той же электронной книги, приобретаемой в разных форматах, может быть разной. Для каждой книги есть набор файлов-«пробников» в каждом формате, в котором она доступна. «Пробник» представляет собой отрывок из книги в 10-20 страниц, используемый, чтобы книголюбы могли оценить оформление, вёрстку и решиться на покупку.

Книголюб, войдя в систему, может искать книги в каталоге магазина по одному или нескольким поисковым полям: номеру ISBN, названию книги, году издания, названию издательства, жанру книги, автору(ам). Результаты поиска система выдаёт порциями (по 20 записей о книгах). Их можно сортировать в желаемом книголюбу порядке (по возрастанию / убыванию): цены , даты поступления в продажу, рейтинга, вычисленного по оценкам книголюбов, купивших книгу ранее. Книголюб может воспользоваться «пробниками» книг из результатов поиска. Понравившиеся книги он может поместить в «корзину», либо в список будущих покупок. Книга, помещённая в список будущих покупок, может быть либо удалена из него книголюбом, либо перемещена им в «корзину». При просмотре книголюбом своей непустой «корзины», система сообщает ему весь перечень книг, помещённых туда, их цены и общую сумму «корзины». Позиции «корзины», помещённые по ошибке, книголюб может удалить. Одна и та же книга может находиться в «корзине» дважды (трижды и т. п.), если книголюб хочет её приобрести в разных форматах. По своей непустой корзине книголюб может сделать заказ, который должен быть им оплачен в течение 3-х суток. По оформлении заказа система помечает его, как пока не оплаченный, и опустошает «корзину». Не оплаченные вовремя заказы книголюбов система отменяет.

Оплата заказа производится с помощью платёжной системы, с которой магазин взаимодействует через шлюз. При оплате система запрашивает сведения о банковской карте: номер, срок действия, сведения о владельце, трёхзначный код защиты. Если сведения сообщены должным образом, магазин передаёт полученные сведения и стоимость заказа в составе запроса на оплату через шлюз платёжной системы. Ответ на этот запрос может быть положительным или нет. Если попытка была неуспешной, статус заказа не меняется, а книголюб должен попытаться оплатить заказ снова, в течение отведённого на оплату времени. После удачной оплаты заказ помечается как оплаченный. Далее система направляет на электронную почту ряд сообщений, к каждому из которых присоединён файл заказанной электронной книги. Книголюб имеет доступ к списку всех своих заказов. С помощью него он может запросить повторную отправку сообщения с файлом той или иной позиции оплаченного им заказа.

Система не допускает повторного заказа электронной книги, если та уже была приобретена книголюбом ранее в том же формате (т. е. указана как позиция оплаченного книголюбом заказа). Приобретённой книге книголюб может указать оценку по шкале 0..5 в зависимости от того, насколько она ему понравилась.

Работники магазина поддерживают в актуальном состоянии сведения об электронных книгах, предлагаемых к покупке, и их файлы-пробники. Они также размещают в магазине сведения о книгах, которые пока не продаются, но вскоре могут поступить в продажу, чтобы заинтересованные книголюбы могли «подписываться» на них и получать от магазина электронные письма о поступлении книги в продажу. Работники магазина могут по своему выбору приостанавливать действие регистрационных записей книголюбов с большим количеством неоплаченных заказов. На время приостановки действия регистрационной записи книголюб не может «входить» в систему.

Книголюб может оставить в системе сообщение об обнаруженной им неточности в сведениях о книге или о затруднении, возникшем у него в ходе использования магазина. Система предоставляет работникам магазина возможность ответить на эти сообщения книголюбам. Доставка этих ответов осуществляется по электронной почте.

Следует разработать схему реляционной базы данных системы.

Все необходимые для работы сведения хранятся в самой системе, а не в каком-либо внешнем хранилище. Внешними по отношению к системе являются платёжная система, SMTP-сервер.

Вариант 4. Онлайновая киномания


Программная система автоматизирует продажу кинофильмов в цифровых форматах, позволяя осуществлять её онлайн. Покупатели фильмов -- киноманы -- регистрируются в системе онлайн, указывая в форме регистрации логин-email, пароль, ф., и., о., день рождения. Если форма заполнена верно, e-mail не совпадает с e-mail'ом другого киномана, то регистрационная запись о новом киномане создаётся, и он получает в свой электронный почтовый ящик сообщение для подтверждения e-mail со сгенерированным системой кодом. Чтобы подтвердить e-mail, киноман должен воспользоваться ссылкой из полученного по e-mail сообщения. По ссылке открывается форма, в которой заполняется логин, пароль и присланный код. Если все данные сообщены верно, то киноман получает полноценный доступ к системе. Теперь он может «входить» и использовать все возможности, предоставляемые зарегистрированному киноману.

О каждом продаваемом фильме система хранит и предоставляет киноманам набор сведений: номер в каталоге IMDB, название фильма, год создания, название кинокомпании, жанр, создатели (один или более чем один с указанием осуществлённой работы: режиссёр, оператор, художник и т. п.), исполнители ролей (один или более чем один с указанием сыгранной роли). Один и тот же фильм может предлагаться в разных форматах: MP4, MPEG-2, H.265 и др. и в разных разрешениях: 720p, 1080p, 2K, 4K. Цена одного и того же фильма, приобретаемого в разных форматах и разных разрешениях, может быть разной. Для каждого фильма есть набор файлов-«превью» в каждом формате и в каждом разрешении, в котором он доступен . «Превью» представляет собой рекламный ролик, используемый, чтобы киноманы могли решиться на покупку.

Киноман, войдя в систему, может искать фильмы в каталоге системы по одному или нескольким поисковым полям: IMDB-номеру, названию, году создания, названию кинокомпании, жанру, создателю(ям), исполнителю роли (одному или нескольким). Результаты поиска система выдаёт порциями (по 25 записей). Их можно сортировать в желаемом киноману порядке (по возрастанию / убыванию): цены , даты поступления в продажу, рейтинга, вычисленного по оценкам киноманов, купивших фильм ранее. Киноман может воспользоваться «превью» из результатов поиска, т. е. скачать их и проиграть на своём оборудовании. Понравившиеся фильмы он может поместить в «корзину», либо в список будущих покупок. Фильмы, помещённые в список будущих покупок, могут быть либо удалены из него киноманом, либо перемещены им в «корзину». При просмотре киноманом своей непустой «корзины», система сообщает ему весь перечень позиций, помещённых туда, их цены и общую сумму «корзины». Позиции «корзины», помещённые по ошибке, киноман может удалить. Один и тот же фильм может находиться в «корзине» дважды (трижды и т. п.), если киноман хочет его приобрести в разных форматах и/или в разных разрешениях. По своей непустой корзине киноман может сделать заказ, который должен быть им оплачен в течение 120-ти часов. По оформлении заказа система помечает его, как пока не оплаченный, и опустошает «корзину». Не оплаченные вовремя заказы киноманов система отменяет.

Оплата заказа производится с помощью платёжной системы, с которой система взаимодействует через шлюз. При оплате система запрашивает сведения о банковской карте: номер, срок действия, сведения о владельце, трёхзначный код защиты. Если сведения сообщены должным образом, то система передаёт полученные сведения и стоимость заказа в составе запроса на оплату через шлюз платёжной системы. Ответ на этот запрос может быть положительным или нет. Если попытка была неуспешной, статус заказа не меняется, а киноман должен попытаться оплатить заказ снова, в течение отведённого на оплату времени. После удачной оплаты заказ помечается как оплаченный. Далее система направляет на электронную почту сообщение, со ссылками для скачивания файлов заказанных фильмов. Киноман имеет доступ к списку всех своих заказов. С помощью него он может запросить повторную отправку сообщения со ссылкой на файл той или иной позиции оплаченного им заказа.

Система не допускает повторного заказа фильма, если тот уже был приобретен киноманом ранее в том же формате (т. е. указан как позиция оплаченного киноманом заказа). Приобретённому фильму киноман может указать оценку по шкале -5..+5 в зависимости от того, насколько он ему понравился.

Персонал системы поддерживает в актуальном состоянии сведения о фильмах, предлагаемых к покупке, и их файлы-превью. Персонал также размещает в системе сведения о фильмах, которые пока не продаются, но вскоре могут поступить в продажу, чтобы заинтересованные киноманы могли «подписываться» и получать от системы электронные письма о поступлении фильмов в продажу. Персонал системы может по своему выбору приостанавливать действие регистрационных записей киноманов с большим количеством неоплаченных заказов. На время приостановки действия регистрационной записи киноман не может «входить» в систему.

Киноман может оставить в системе сообщение об обнаруженной им неточности в сведениях о фильме или о затруднении, возникшем у него в ходе использования системы. Система предоставляет персоналу возможность ответить на эти сообщения. Доставка ответов осуществляется системой по электронной почте.

Следует разработать схему реляционной базы данных системы.

Все необходимые для работы сведения хранятся в самой системе, а не в каком-либо внешнем хранилище. Внешними по отношению к системе являются платёжная система, SMTP-сервер.

Вариант 5. Кассовый терминал городского транспорта


Терминал установлен на кассе городского транспорта. С это помощью осуществляются операции с транспортными картами, используемыми для оплаты проезда. В состав терминала входят следующие устройства: информационный дисплей, клавиатура, принтер для печати чеков о совершённых операциях, устройство чтения и записи данных на транспортные карты, устройство чтения данных с банковских карт, линии связи с сервером городского транспорта и с банковской системой.

При выпуске в оборот новой транспортной карты кассир выбирает эту операцию в меню терминала, вставляет транспортную карту в устройство чтения. Если карту удалось прочесть, то терминал запрашивает сервер городского транспорта о том, не была ли карта выпущена в оборот ранее. Если карта уже выпущена, то терминал возвращает карту, информирует кассира о причине отказа, и выполнение операции завершается неуспехом. Иначе терминал высвечивает запрос подтверждения от кассира. При получении подтверждения на сервер городского транспорта посылается сообщение о том, что карта выпущена в оборот.

На карты, выпущенные в оборот и не находящиеся в стоп-листе (стоп-лист хранится на сервере городского транспорта), может быть записан билет. Кассир узнаёт вид билета, который пассажир хочет приобрести и записать на пластиковую карту (1 поездка, 2 поездки, 5 поездок, 10 поездок, 20 поездок, 60 поездок, 1 день, 5 дней, 30 дней, 90 дней, 365 дней, пополнение на сумму от 50 до 5000 рублей на баланс карты-"кошелька", при этом сумма пополнения не может быть такой, чтобы в «кошельке» оказалось более 5000 рублей; если «кошелёк» полон до отказа, то внесение в него средств невозможно). Если пассажир передумал, то покупка билета может не состояться. После того как кассир указал билет или сумму пополнения, терминал высвечивает на дисплее сумму к оплате. Цены на билеты терминал получает автоматически в начале каждых суток своей работы, направляя запрос серверу городского транспорта. Пассажир должен оплатить указанную сумму либо банковской картой, либо банкнотами. Кассир принимает от клиентов к оплате бумажные купюры (номиналом 10, 50, 100, 200, 500, 1000, 2000, 5000 рублей). Пассажир может передумать и попросить вернуть купюры, переданные кассиру. Кассир должен выполнить возврат купюр по требованию пассажира. После возврата купюр оплата завершается неуспехом. При оплате банковской картой клиент вставляет карту в устройство чтения данных с банковских карт. Кассир инициирует оплату кнопкой на клавиатуре. Если карту удалось прочесть, то терминал запрашивает PIN у пассажира. По введённому PIN терминал вычисляет некоторое другое число (PVV) и вместе со стоимостью покупки и данными карты, считанными с её магнитной полосы (тип карты, номер карты, срок действия карты, имя и фамилия владельца), отправляет в банковскую систему. В ответ может придти либо подтверждение успешной оплаты, либо отказ и причины отказа. При отказе пассажиру предоставляются ещё не более чем 2 попытки оплаты той же или другой банковской картой. Если и они не успешны, то оплата завершается неуспехом.

В терминале имеется информационный дисплей, на котором высвечивается текущая сумма денег, принятых к оплате, и сообщения для кассира, такие как: «выберите вид билета для покупки», «выберите сумму для пополнения электронного кошелька», «карта в стоп-листе», «заберите транспортную карту», «заберите банковскую карту».

После удачной покупки терминал печатает чек о покупке, указывая в нём дату и время, № терминала, № транспортной карты, тип проданного билета и его цену (или сумму пополнения «кошелька»). Принятые в уплату банкноты кассир помещает в кассовое хранилище банкнот. Вместе с чеком кассир выдаёт пассажиру транспортную карту, на которую записан приобретённый билет (записана пополненная сумма «кошелька»). Пассажир забирает её и банковскую карту, если та использовалась для оплаты. Если пассажир передал кассиру банкноты на сумму, превышающую цену билета, терминал по окончании покупки высвечивает сумму сдачи, и кассир выдаёт пассажиру сдачу банкнотами из кассового хранилища денег. Сведения о проведённой операции передаются на сервер городского транспорта и хранятся там для фискального отчёта. После успешной передачи на сервер сведения об операции удаляются из памяти терминала.

Пассажир может обратиться к кассиру с просьбой разблокировать карту, находящуюся в стоп-листе. Выслушав рассказ об обстоятельствах, приведших к блокировке, кассир может либо разблокировать карту без взимания штрафа, либо разблокировать карту с взиманием штрафа, либо оставить карту в стоп листе. В первом случае кассир выбирает в меню терминала соответствующий пункт, вставляет карту в устройство чтения. Если карту удалось прочесть, то терминал запрашивает сервер городского транспорта о том, действительно ли она находится в стоп-листе, и если это так, то посылает запрос серверу на удаление карты из стоп-листа. Ответ сервера сигнализирует о завершении операции (успешном или нет). Кассир возвращает карту пассажиру. Во втором случае происходит то же самое, только дополнительно взимается штраф наличными или безналичными средствами в размере 1000 рублей. Терминал печатает чек, который передаётся кассиром пассажиру.

Пассажир может обратиться к кассиру с просьбой заменить транспортную карту, пришедшую в негодность. Убедившись, что карта не исправна (с неё не читаются данные), кассир может вывести её из обращения. Он выбирает в меню терминала соответствующий пункт и сообщает номер карты, напечатанный на ней. Терминал запрашивает с сервера городского транспорта о том, находится ли карта в стоп-листе, и если это не так, то каково не используемое количество поездок / оставшийся срок годности карты / сумма на балансе карты-"кошелька". Если карта не в стоп-листе, то кассир возвращает карту пассажиру, выдаёт денежную компенсацию, передаёт напечатанный терминалом чек. Терминал передаёт на сервер сообщение о том, что карта выведена из обращения. Карту кассир утилизирует -- разрезает ножницами пополам.

В ходе выполнения задания должна быть разработана схема реляционной базы данных сервера городского транспорта о типах билетов, ценах на них, транспортных картах, стоп-листе транспортных карт, терминалах, операциях с транспортными картами.

Данные, которые нужны терминалу для работы и которые не хранятся на сервере, следует считать постоянно находящимися в памяти терминала (доступ к ним посредством JDBC и т. п. не требуется). Внешними по отношению к терминалу являются сервер городского транспорта, банковская система.

Вариант 6. Сервер городского транспорта


Программная система обеспечивает использование транспортных карт для оплаты проезда на городском транспорте. Она связана с турникетами, установленными на станциях, вроде тех, что описаны в варианте 10 «Турникет на станции МЦД». Также сервер связан с терминалами касс, осуществляющих выпуск в оборот новых транспортных карт и продажу поездок / пополнение баланса / продление срока действия транспортных карт.

В конце рабочего дня (в 02:00) сервер опрашивает каждый подключённый к нему турникет. Он получает по запросу сведения обо всех входах на станции МЦД и выходах со станций МЦД, осуществлённых за сутки. Получив все сведения, сервер выявляет все транспортные карты, которые следует занести в стоп-лист. В стоп-лист заносятся карты, по которым в течение суток либо сделаны два входа подряд, между которыми не зафиксирован выход, либо по которым сделан вход, за которым не зафиксирован ни выход, ни следующий вход (что означает осуществление выхода без "гашения" выполненной поездки по МЦД). Другими словами, за каждым входом на станцию МЦД должен обязательно следовать выход, и транспортная карта в обоих случаях должна использоваться одна и та же.

До начала рабочего дня (до 04:59) сервер городского транспорта может разослать всем турникетам обновлённую цену поездки, которую турникеты будут списывать. Команду об этом даёт (и сообщает новую цену) администратор сервера. Также администратор сервера может обновить время и дату на часах сервера, после чего сервер рассылает всем турникетам команду синхронизировать их часы с серверными.

Если на кассе МЦД запускается в оборот новая транспортная карта, то сведения об этом приходят на сервер от терминала кассы (см. вариант 5 «Кассовый терминал городского транспорта»). Сервер должен принять эти сведения и сохранить их в своей базе данных. У карты есть уникальный номер и тип. Транспортные карты бывают трёх типов: с фиксированным количеством поездок; с неограниченным количеством поездок; карта-"кошелёк". О карте-"кошельке" известен её баланс, который должен быть неотрицательным. Каждая транспортная карта имеет срок годности, по истечении которого она не может быть использована для прохода.

Пассажир может пополнить количество поездок на карте и/или продлить срок её годности и/или пополнить баланс карты-"кошелька". В таком случае терминал кассы присылает на сервер городского транспорта сведения об операции по карте, и сервер должен сохранить эти данные для фискального отчёта, а также произвести обновления сведений о карте у себя. Если карта находится в стоп-листе, то она не может быть пополнена. Карта может быть удалена из стоп-листа, если её разблокировка произведена на кассе. Карта может быть окончательно выведена из обращения либо на кассе городского транспорта, либо по решению администратора сервера городского транспорта.

Администратор поддерживает на сервере актуальные данные о транспортной сети. Он ведёт работу со сведениями о станциях МЦД (могут открываться новые станции, закрываться временно или постоянно прежние). Он поддерживает сведения о сети турникетов и кассовых терминалов (добавляя / удаляя / обновляя их). Каждый узел этой сети имеет уникальный IP-адрес, тип (турникет / терминал), привязку к одной из станций МЦД.

Следует смоделировать схему реляционной базы данных сервера городского транспорта, где хранятся такие данные: сведения о станциях МЦД; сведения об установленных на станциях турникетах и кассовых терминалах; история цены поездки, актуальной в разные периоды времени; сведения о входах и выходах через турникеты и картах, по которым эти проходы совершены, текущий стоп-лист, в который занесены транспортные карты, сведения об операциях, осуществлённых в кассах с транспортными картами.

Все необходимые для работы сведения хранятся в самой системе, а не в каком-либо внешнем хранилище. Внешними по отношению к системе являются терминалы касс, турникеты.

Вариант 7. Валидатор городского транспорта


Валидатор контролирует оплату проезда пассажирами на маршрутах городских автобусов, троллейбусов, трамваев. Валидатор имеет устройство, осуществляющее чтение из запись данных с бесконтактных транспортных карт и/или банковских карт, часы, устройство подачи звуковых сигналов, дисплей для вывода сведений пассажиру, линию связи с сервером городского транспорта, линию связи с банковской системой, устройство беспроводного обмена данными с мобильным терминалом контролёра.
Рассмотрим работу валидатора при валидации поездки пассажиром. В начале на дисплее высвечивается "Приложите карту для валидации". Пассажир должен приложить бесконтактную транспортную карту (либо банковскую карту) к считывающему устройству. Каждая транспортная карта имеет срок годности, по истечении которого она не может быть использована для прохода. Транспортные карты бывают трёх типов: с фиксированным количеством поездок; с неограниченным количеством поездок; карта-"кошелёк". Валидатор считывает с транспортной карты данные: срок годности карты, номер карты, тип карты и количество поездок. Если данные не удаётся считать, или карта просрочена, или количество поездок нулевое, то валидатор подаёт предупредительный звуковой сигнал и валидация заканчивается неуспешно. Если данные считаны и подходят для валидации поездки, то валидатор проверяет, не находится ли карта в стоп-листе. Для этого он отправляет запрос на сервер городского транспорта (см. вариант №6). Карты из стоп-листа непригодны для валидации поездок. Валидатор сообщает о таких картах, высвечивая на дисплее "Карта в стоп-листе". Если карта не в стоп листе, то валидация поездки продолжается. С карты с фиксированным количеством поездок списывается одна поездка, на дисплее высвечивается количество оставшихся поездок. Валидация успешна. Если карта имеет неограниченное количество поездок, то при валидации поездки картой такого типа поездки не списываются, а на дисплее высвечивается срок, до которого действует карта. Во избежание злоупотреблений с картами без лимита поездок в течение трёх минут после их валидации должны блокироваться другие попытки валидировать поездку той же картой (этим валидатором или любым другим). Работа с картами-"кошельками" отличается тем, что на них записывается не количество поездок, а некоторая денежная сумма. Карта-"кошелёк" пригодна для валидации проезда, если сумма на ней не меньше, чем цена поездки. При валидации с использованием такой карты сумма на карте уменьшается на цену поездки и высвечивается оставшаяся остаток. После списывании цены поездки остаток средств на карте не может стать ниже нуля. Цену поездки валидатор ежедневно запрашивает у сервера городского транспорта в начале рабочего дня. В течение дня цена поездки не меняется, так что достаточно одного запроса к серверу.

При валидации поездки банковской картой валидатор считывает данные с приложенной карты (номер, срок действия, сведения о владельце) и посылает запрос банковской системе на списание цены поездки. В запросе используются реквизиты, считанные с карты. Банковская система может либо подтвердить, либо отвергнуть запрос на списание. В первом случае валидация завершается успешно, и на дисплее высвечивается списанная сумма и сообщение "Оплата произведена успешно". Во втором случае валидация не успешна. В остальном банковская карта с точки зрения валидатора похожа на карту-"кошелёк".

Валидатор заносит в свою память сведения о попытках валидации (как успешных, так и безуспешных) и картах (транспортных или банковских), использованных при попытках валидации. В конце рабочего дня он передаёт всю информацию, накопленную за день, на сервер городского транспорта. После успешной передачи на сервер данные о попытках валидации удаляются из памяти валидатора.

Контроллёры используют валидатор для проверки оплаты проезда. Мобильный терминал контролёра подносится к валидатору, и на него передаются данные обо всех валидациях за последние 60 минут. По окончании передачи на дисплее высвечивается "Передача данных завершена успешно". Данные после передачи остаются в памяти валидатора, чтобы быть переданными на сервер в конце рабочего дня.

Пассажир может использовать валидатор в справочных целях, чтобы получить сведения о количестве поездок / сроке годности / остатке средств на своей транспортной карте. Для этого пассажир перед тем как приложить карту нажимает кнопку на корпусе валидатора. Затем, после прикладывания карты, валидатор считывает с неё данные и высвечивает их на дисплее.

Сервер городского транспорта может синхронизировать время и дату на часах валидатора с серверными.

Валидатор не имеет собственной базы данных, тем не менее, следует смоделировать схему базы данных сервера городского транспорта, где хранятся сведения о маршрутах автобусного, троллейбусного и трамвайного городского транспорта, об установленных валидаторах, о попытках валидации и картах, по которым эти попытки совершены.

Данные, которые нужны валидатору для работы и которые не хранятся на сервере, следует считать постоянно находящимися в памяти валидатора (доступ к ним посредством JDBC и т. п. не требуется). Внешними по отношению к валидатору являются сервер городского транспорта, банковская система, мобильный терминал контролёра.

Вариант 8. Продажа электронной периодики


Программная система автоматизирует подписку и доставку электронных периодических изданий -- журналов, альманахов, газет и т. п., позволяя осуществлять её онлайн. Получатели электронной периодики -- подписчики -- регистрируются в системе онлайн, указывая в форме регистрации логин-email, пароль, ф., и., о., день рождения. Если форма заполнена верно, e-mail не совпадает с e-mail'ом другого подписчика, то регистрационная запись о новом подписчике создаётся, и он получает в свой электронный почтовый ящик сообщение для подтверждения e-mail со сгенерированным системой кодом. Чтобы подтвердить e-mail, подписчик должен воспользоваться ссылкой из полученного по e-mail сообщения. По ссылке открывается форма, в которой заполняется логин, пароль и присланный код. Если все данные сообщены верно, то подписчик получает полноценный доступ к системе. Теперь он может «входить» и использовать все возможности, предоставляемые зарегистрированному подписчику.

О каждом периодическом электронном издании система хранит и предоставляет подписчикам набор сведений: уникальный каталожный номер, название, год начала выхода, название издателя, частота выпуска (количество дней между двумя подряд идущими выпусками). Издание может предлагаться в разных форматах: PDF, EPUB, DjVu и др. На издание может предлагаться подписка разной длительности, задаваемой либо количеством полученных в течение подписки выпусков, либо периодом подписки -- количеством дней. Цена подписки на одно и то же издание зависит от формата и от длительности. Для каждого издания есть набор файлов-«пробников» в каждом формате, в котором оно доступна. «Пробник» представляет собой отрывок из старого выпуска издания в 1-3 страницы, используемый, чтобы подписчики могли оценить оформление, вёрстку и решиться на подписку.

Подписчик, войдя в систему, может искать издания в каталоге системы по одному или нескольким поисковым полям: каталожному номеру, названию издания, названию издателя, формату, длительности подписки. Результаты поиска система выдаёт порциями (по 30 записей об изданиях). Их можно сортировать в желаемом подписчику порядке (по возрастанию / убыванию): цены, названия, рейтинга, вычисленного по оценкам подписчиков, оформивших подписку на издание ранее. Подписчик может воспользоваться «пробниками» изданий из результатов поиска. Понравившиеся издания он может поместить в «корзину», либо в список будущих подписок. Издание, помещённое в список будущих подписок, может быть либо удалено из него подписчиком, либо перемещено им в «корзину». При просмотре подписчиком своей непустой «корзины», система сообщает ему весь перечень изданий, помещённых туда, их цены и общую сумму «корзины». Позиции «корзины», помещённые по ошибке, подписчик может удалить. Одно и то же издание может находиться в «корзине» дважды (трижды и т. п.), если подписчик хочет подписаться на получение издания в разных форматах. По своей непустой корзине подписчик может сделать заказ, который должен быть им оплачен в течение 5-х суток. По оформлении заказа система помечает его, как пока не оплаченный, и опустошает «корзину». Не оплаченные вовремя заказы подписчиков система отменяет.

Оплата заказа производится с помощью платёжной системы, с которой система взаимодействует через шлюз. При оплате система запрашивает сведения о банковской карте: номер, срок действия, сведения о владельце, трёхзначный код защиты. Если сведения сообщены должным образом, то система передаёт полученные сведения и стоимость заказа в составе запроса на оплату через шлюз платёжной системы. Ответ на этот запрос может быть положительным или нет. Если попытка была неуспешной, статус заказа не меняется, а подписчик должен попытаться оплатить заказ снова, в течение отведённого на оплату времени. После удачной оплаты заказ помечается как оплаченный. Подписчик имеет доступ к списку всех своих заказов. С помощью него он может запросить отмену подписки по той или иной позиции оплаченного им заказа, если длительность подписки не истекла (т. е. остался хотя бы один день или остался хотя бы один не полученный пока выпуск издания).

Система не допускает повторной подписки на издание, если действует подписка, оформленная ранее в том же формате тем же подписчиком. В ходе действующей подписки подписчик может дать оценку по изданию шкале «лайк/дизлайк» в зависимости от того, понравилось ли ему издание.

Служащие поддерживают в актуальном состоянии сведения о подписках, предлагаемых к оформлению, и их файлы-пробники. Они загружают в систему файлы свежих выпусков изданий. Загрузки происходят заблаговременно, до срока доставки выпуска подписчикам. По наступлении срока доставки система автоматически рассылает всем, у кого есть действующая подписка на издание, электронные письма с присоединённым файлом выпуска. Служащие также размещают в системе сведения о подписках, которые пока не оформляются, но вскоре могут стать доступными для оформления, чтобы заинтересованные подписчики могли «отслеживать» их и получать от системы электронные письма о доступе к оформлению подписки. Служащие могут по своему выбору приостанавливать действие регистрационных записей подписчиков с большим количеством неоплаченных заказов. На время приостановки действия регистрационной записи подписчик не может «входить» в систему.

Подписчик может оставить в системе сообщение об обнаруженной им неточности в сведениях об издании или о затруднении, возникшем у него в ходе использования системы. Система предоставляет служащим возможность ответить на эти сообщения. Доставка этих ответов осуществляется по электронной почте. Если подписчик сообщает о том, что ему не был доставлен выпуск издания, то служащий может в своём ответе переслать файл с этим выпуском.

Следует разработать схему реляционной базы данных системы.

Все необходимые для работы сведения хранятся в самой системе, а не в каком-либо внешнем хранилище. Внешними по отношению к системе являются платёжная система, SMTP-сервер.

Вариант 9. Терминал пополнения


Терминал осуществляет пополнение транспортных карт пассажирам городского транспорта. Используются многоразовые пластиковые карты, которые могут быть получены пассажирами в пунктах выдачи. В состав терминала входят следующие устройства: информационный дисплей с экранной клавиатурой, приёмник банкнот, хранилище банкнот и лоток для их выдачи, принтер для печати чеков о совершённых операциях, устройство чтения и записи данных на пластиковые транспортные карты, устройство чтения данных с банковских карт, линии связи со сервером городского транспорта и с банковской системой.

Пассажир начинает пополнение карты с того, что он вставляет карту в приёмник транспортных карт. Если карту удалось прочесть, то терминал запрашивает сервер городского транспорта о том, не находится ли карта в стоп-листе. Если карта включена в стоп-лист, то терминал возвращает карту, информирует клиента о причине отказа, и сеанс завершается неуспехом. Иначе терминал высвечивает сведения о карте: список ранее записанных на неё билетов, упорядоченных по убыванию даты их записи на карту.

Далее пассажир может выбрать вид билета, который он хочет приобрести и записать на транспортную карту (1 поездка, 2 поездки, 5 поездок, 10 поездок, 20 поездок, 60 поездок, 1 день, 5 дней, 30 дней, 90 дней, 365 дней). Пассажир может оказаться от покупки. Также вместо покупки билета пассажир может выбрать пополнение «электронного кошелька» на транспортной карте на выбранную им сумму (от 50 до 5000 рублей с шагом 50 рублей; при этом сумма пополнения не может быть такой, чтобы в итоге в «кошельке» оказалось более 5000 рублей; если «кошелёк» полон до отказа, то внесение в него средств невозможно). После того как пассажир выбрал покупку или пополнение, терминал высвечивает на дисплее сумму к оплате. Цены на билеты терминал получает в начале каждых суток от сервера городского транспорта. Пассажир должен оплатить указанную сумму либо банковской картой, либо банкнотами. Терминал принимает к оплате бумажные купюры (номиналом 10, 50, 100, 200, 500, 1000, 2000, 5000 рублей). Пассажир может передумать и попросить вернуть введённые им купюры. Терминал должен выполнить возврат купюр по требованию пассажира. Возврат введённых денег производится через лоток выдачи банкнот. Возврат всех введённых денег не должен производиться после выдачи транспортной карты с записанным билетом. Терминал должен корректно работать, не допуская получения пассажирами неоплаченных покупок и пополнений.

При оплате банковской картой пассажир вставляет банковскую карту в приёмник банковских карт. Если карту удалось прочесть, то терминал запрашивает PIN. По введённому PIN терминал вычисляет некоторое другое число (PVV) и вместе со стоимостью покупки и данными карты, считанными с её магнитной полосы, (номер, срок действия, сведения о владельце) отправляет в банковскую систему. В ответ может придти либо подтверждение успешной оплаты, либо отказ и причины отказа. При отказе пассажиру предоставляются ещё не более чем одна попытка оплаты той же или другой банковской картой. Если и она не успешна, то оплата завершается неуспехом.

В терминале имеется информационный дисплей, на котором высвечивается текущая сумма денег, принятых к оплате, и сообщения для клиентов, такие как: «введите банкноты или банковскую карту», «выберите вид билета для покупки», «выберите сумму для пополнения электронного кошелька», «введённой суммы недостаточно», «карта в стоп-листе», «заберите транспортную карту», «заберите банковскую карту», «заберите сдачу», «заберите деньги».

После удачной покупки терминал печатает чек о покупке, указывая в нём дату и время, № терминала, № транспортной карты, тип проданного билета и его цену (или сумму пополнения «кошелька»). Принятые в уплату банкноты терминал помещает в хранилище банкнот. Вместе с чеком терминал выдаёт пассажиру транспортную карту, на которую записан приобретённый билет (записана пополненная сумма «кошелька»), и банковскую карту, если та была введена пассажиром. Если пассажир ввёл банкноты на сумму, превышающую цену билета, терминал по окончании покупки выдаёт сдачу. Выдача сдачи производится через лоток выдачи банкнот. За один сеанс пассажир может сделать не более одной покупки или не более одного пополнения.

В течение рабочего дня терминал накапливает данные о сеансах обслуживания пассажиров (удачных и неудачных). В конце суток эти сведения передаются серверу городского транспорта, после чего удаляются из памяти терминала.

В ходе выполнения задания должна быть разработана схема реляционной базы данных сервера городского транспорта о типах билетов, ценах на них, транспортных картах, стоп-листе транспортных карт, терминалах пополнения, клиентских сеансах пользования терминалами.

Данные, которые нужны терминалу для работы и которые не хранятся на сервере, следует считать постоянно находящимися в памяти терминала (доступ к ним посредством JDBC и т. п. не требуется). Внешними по отношению к терминалу являются сервер городского транспорта, банковская система.

Вариант 10. Турникет станции МЦД


Турникет контролирует вход пассажиров внутрь станции Московских центральных диаметров (МЦД), выход пассажиров со станции и взимает плату за проезд. Турникет имеет устройство, осуществляющее чтение из запись данных с бесконтактных транспортных карт, два набора створок из ударопрочного стекла для перекрывания прохода, часы, три оптических датчика для контроля прохода пассажира, устройство подачи звуковых сигналов, индикаторы "Проход" и "Стоп", индикатор количества оставшихся поездок, линию связи с сервером городского транспорта. Датчики прохода расположены следующим образом: один датчик находится до передних створок, ещё один находится между передними и задними створками, и третий датчик находится после задних створок. Для контроля соблюдения мер по профилактике COVID в турникет встроен термометр.

Турникет работает в одном из трёх режимов: "Вход", "Выход", "Блокировка".

Рассмотрим работу турникета в режиме "Вход". В начальном состоянии турникета зажжён индикатор "Стоп", индикатор "Проход" потушен, передние и задние створки закрыты. Если датчик, расположенный до передних створок, или датчик, расположенный после задних створок, посылает сигнал, то турникет подаёт предупредительный звуковой сигнал и остаётся в исходном состоянии. Для прохода пассажир должен поднести бесконтактную транспортную карту к считывающему устройству, при этом его кисть оказывается в рабочей зоне термометра, который узнаёт температуру. Если температура находится в допустимом диапазоне, то сценарий входа продолжается. Иначе турникет подаёт предупредительный звуковой сигнал и остаётся в исходном состоянии. Каждая транспортная карта имеет срок годности, по истечении которого она не может быть использована для прохода. Транспортная карта может быть занесена в стоп-лист. Сведения об этом турникет запрашивает у сервера городского транспорта. Транспортные карты бывают трёх типов: с фиксированным количеством поездок; с неограниченным количеством поездок; карта-"кошелёк". Турникет считывает с транспортной карты данные: срок годности карты, номер карты, тип карты и количество поездок. Турникет запрашивает сервер городского транспорта о том, находится ли карта в стоп-листе. Если данные не удаётся считать, или если карта просрочена, или если количество поездок нулевое, или если карта занесена в стоп-лист, то турникет подаёт предупредительный звуковой сигнал и остаётся в исходном состоянии. Иначе с карты с фиксированным количеством поездок списывается одна поездка, индикатор "Стоп" гаснет, зажигается индикатор "Проход", индикатор количества оставшихся поездок высвечивает текущее значение, открываются передние створки и пассажир может дойти до задних створок турникета, которые пока закрыты. Получив от датчика между передними и задними створками сигнал, что пассажир прошёл внутрь, турникет закрывает передние створки и открывает задние створки. Когда датчик после задних створок сообщает, что пассажир вышел из турникета, задние створки закрываются, и турникет возвращается в начальное состояние для режима "Вход". Он готов осуществить вход следующего пассажира. Если карта имеет неограниченное количество поездок, то при проходе с картой такого типа индикатор количества оставшихся поездок высвечивает символ ∞ (бесконечность), а поездки не списываются. Во избежание злоупотреблений с картами без лимита поездок в течение пяти минут после входа пассажира через любой турникет станции МЦД должны блокироваться остальные попытки входа с той же картой через все турникеты той же станции. Работа с картами-"кошельками" отличается тем, что на них записывается не количество поездок, а некоторая денежная сумма. Карта-"кошелёк" пригодна для оплаты проезда, если сумма на ней больше чем цена поездки. При входе по такой карте с неё списывается цена поездки.

Работа турникета в режиме "Выход" такова: В начальном состоянии турникета зажжён индикатор "Проход", индикатор "Стоп" потушен, передние и задние створки закрыты. Если датчик, расположенный после задних створок, посылает сигнал, то турникет то турникет подаёт предупредительный звуковой сигнал и остаётся в исходном состоянии. Для прохода пассажир должен поднести бесконтактную транспортную карту к считывающему устройству, при этом его кисть оказывается в рабочей зоне термометра, который узнаёт температуру. Показания температуры не влияют на то будет ли успешным выход или нет, но они сохраняются вместе с другими сведениями о проходе для статистики. Турникет считывает с транспортной карты данные: срок годности карты, номер карты, тип карты. Турникет запрашивает сервер городского транспорта о том, находится ли карта в стоп-листе. Если данные не удаётся считать, или если карта просрочена, или если карта занесена в стоп-лист, то турникет подаёт предупредительный звуковой сигнал и остаётся в исходном состоянии. Иначе турникет открывает задние створки и пассажир может пройти дальше до передних створок, которые пока закрыты. Получив от датчика между передними и задними створками сигнал, что пассажир прошёл внутрь, турникет закрывает задние створки и открывает передние створки. Когда датчик до передних створок сообщает, что пассажир вышел из турникета, передние створки закрываются, и турникет возвращается в начальное состояние для режима "Выход". Он готов осуществить выход следующего пассажира. Если в начальном состоянии срабатывает датчик до передних створок, турникет подаёт предупредительный звуковой сигнал и остаётся в исходном состоянии. Таким образом он препятствует входу пассажиров через него.

Работа турникета в режиме "Блокировка": В начальном состоянии турникета зажжён индикатор "Стоп", индикатор "Проход" потушен, передние и задние створки закрыты. Если один из датчиков, расположенных до передних створок, или после задних створок, посылает сигнал, то турникет подаёт предупредительный звуковой сигнал и остаётся в исходном состоянии для режима "Блокировка". На использование пассажирских и/или банковских карт турникет в этом режиме не реагирует. Температуру блокированный турникет также не измеряет.

В режимах работы "Вход" и "Выход" турникет заносит в свою память сведения обо всех попытках входа и выхода (как удачных, так и безуспешных), картах, использованных при проходах, и температуре пассажиров. В конце рабочего дня он передаёт всю информацию, накопленную за день, на сервер городского транспорта.

Переключение между режимами "Вход", "Выход", "Блокировка" осуществляется обслуживающим персоналом при помощи специальных сервисных бесконтактных карт. Считав с такой карты данные: номер сервисной карты и номер режима работы, в который следует переключиться, турникет из любого режима переходит в требуемый режим. Переключение режима турникета не может происходить во время незавершённого прохода пассажира (входа или выхода).

Сервер городского транспорта может обновить цену поездки, может синхронизировать время и дату на часах турникета с серверными.

Турникет не имеет собственной базы данных, тем не менее, следует смоделировать схему внешней реляционной базы данных сервера городского транспорта, где хранятся сведения о станциях МЦД, об установленных на станциях турникетах, о ценах поездки, актуальных на разные даты, о входах и выходах через турникеты и картах, по которым эти проходы совершены, а также о текущем стоп-листе, в который занесены транспортные карты.

Данные, которые нужны турникету для работы и которые не хранятся на сервере, следует считать постоянно находящимися в памяти турникета (доступ к ним посредством JDBC и т. п. не требуется). Внешним по отношению к турникету является сервер городского транспорта.

Вариант 11. Цифровая меломания


Программная система автоматизирует продажу музыки в цифровых форматах, позволяя осуществлять её онлайн. Покупатели музыкальных сборников или отдельных композиций -- меломаны -- регистрируются в системе онлайн, указывая в форме регистрации логин-email, пароль, ф., и., о., день рождения. Если форма заполнена верно, e-mail не совпадает с e-mail'ом другого меломана, то регистрационная запись о новом меломане создаётся, и он получает в свой электронный почтовый ящик сообщение для подтверждения e-mail со сгенерированным системой кодом. Чтобы подтвердить e-mail, меломан должен воспользоваться ссылкой из полученного по e-mail сообщения. По ссылке открывается форма, в которой заполняется логин, пароль и присланный код. Если все данные сообщены верно, то меломан получает полноценный доступ к системе. Теперь он может «входить» и использовать все возможности, предоставляемые зарегистрированному меломану.

О каждой продаваемой музыкальной композиции или сборнике композиций система хранит и предоставляет меломанам набор сведений: каталожный номер, название, год издания, название издателя, музыкальный жанр, сочинители (один или более чем один), исполнители (один или более чем один). У сборника дополнительно известно содержание -- перечень входящих в него композиций. Одна и та же музыка может предлагаться в разных форматах: MP3, APE, FLAC, WAV и др. Цена одной и той же музыки, приобретаемой в разных форматах, может быть разной. Для каждой музыкальной композиции есть набор файлов-«пробников» в каждом формате, в котором она доступна (для сборника композиций таких наборов может быть несколько). «Пробник» представляет собой отрывок из композиции длительностью 30-60 секунд, используемый, чтобы меломаны могли оценить звучание и решиться на покупку.

Меломан, войдя в систему, может искать композиции и сборники в каталоге системы по одному или нескольким поисковым полям: каталожному номеру, названию, году издания, названию издателя, жанру, автору(ам), исполнителю(ам). Результаты поиска система выдаёт порциями (по 15 записей). Их можно сортировать в желаемом меломану порядке (по возрастанию / убыванию): цены , даты поступления в продажу, рейтинга, вычисленного по оценкам меломанов, купивших музыку ранее. Меломан может воспользоваться музыкальными «пробниками» из результатов поиска, т. е. скачать их и проиграть на своём оборудовании. Понравившуюся музыку (композиции, сборники) он может поместить в «корзину», либо в список будущих покупок. Музыка, помещённая в список будущих покупок, может быть либо удалена из него меломаном, либо перемещена им в «корзину». При просмотре меломаном своей непустой «корзины», система сообщает ему весь перечень позиций, помещённых туда, их цены и общую сумму «корзины». Позиции «корзины», помещённые по ошибке, меломан может удалить. Одна и та же музыка может находиться в «корзине» дважды (трижды и т. п.), если меломан хочет её приобрести в разных форматах. По своей непустой корзине меломан может сделать заказ, который должен быть им оплачен в течение 96-ти часов. По оформлении заказа система помечает его, как пока не оплаченный, и опустошает «корзину». Не оплаченные вовремя заказы меломанов система отменяет.

Оплата заказа производится с помощью платёжной системы, с которой система взаимодействует через шлюз. При оплате система запрашивает сведения о банковской карте: номер, срок действия, сведения о владельце, трёхзначный код защиты. Если сведения сообщены должным образом, то система передаёт полученные сведения и стоимость заказа в составе запроса на оплату через шлюз платёжной системы. Ответ на этот запрос может быть положительным или нет. Если попытка была неуспешной, статус заказа не меняется, а меломан должен попытаться оплатить заказ снова, в течение отведённого на оплату времени. После удачной оплаты заказ помечается как оплаченный. Далее система направляет на электронную почту сообщение, со ссылками для скачивания файлов заказанной музыки. Меломан имеет доступ к списку всех своих заказов. С помощью него он может запросить повторную отправку сообщения со ссылкой на файл той или иной позиции оплаченного им заказа.

Система не допускает повторного заказа музыки, если та уже была приобретена меломаном ранее в том же формате (т. е. указана как позиция оплаченного меломаном заказа). Приобретённой музыке меломан может указать оценку по шкале -2..+2 в зависимости от того, насколько она ему понравилась.

Персонал системы поддерживают в актуальном состоянии сведения о музыке, предлагаемымой к покупке, и их файлы-пробники. Они также размещают в системе сведения о музыке, которая пока не продаётся, но вскоре может поступить в продажу, чтобы заинтересованные меломаны могли «подписываться» и получать от системы электронные письма о поступлении музыки в продажу. Персонал системы может по своему выбору приостанавливать действие регистрационных записей меломанов с большим количеством неоплаченных заказов. На время приостановки действия регистрационной записи меломан не может «входить» в систему.

Меломан может оставить в системе сообщение об обнаруженной им неточности в сведениях о композиции или сборнике или о затруднении, возникшем у него в ходе использования системы. Система предоставляет персоналу возможность ответить на эти сообщения. Доставка ответов осуществляется системой по электронной почте.

Следует разработать схему реляционной базы данных системы.

Все необходимые для работы сведения хранятся в самой системе, а не в каком-либо внешнем хранилище. Внешними по отношению к системе являются платёжная система, SMTP-сервер.

Вариант 12. Дистанционное обучение


Обстоятельства потребовали внедрения в некоем университете системы дистанционного обучения. Эта система даёт студентам доступ к учебным материалам, опубликованным в ней преподавателями, а также применяется для проверки уровня знаний, усвоенных учащимися.

Обычные пользователи системы -- студенты, преподаватели -- регистрируются в системе онлайн, указывая в форме регистрации логин-email (обязательно из домена университета, другие запрещены), пароль, ф., и., о., тип пользователя ("студент" или "преподаватель"), номер студенческого билета / служебного удостоверения. Если форма заполнена верно, e-mail не совпадает с e-mail'ом другого пользователя, то регистрационная запись о пользователе создаётся, и он получает в свой электронный почтовый ящик сообщение для подтверждения e-mail со сгенерированным системой кодом. Чтобы подтвердить e-mail, пользователь должен воспользоваться ссылкой из полученного по e-mail сообщения. По ссылке открывается форма, в которой заполняется логин, пароль и присланный код. Если все данные сообщены верно, то пользователь получает полноценный доступ к системе. Теперь он может «входить» и использовать все возможности, предоставляемые зарегистрированному пользователю в зависимости от его типа.

Система позволяет преподавателям готовить и публиковать учебные материалы по своим учебным дисциплинам. Преподаватель в системе может завести сведения о дисциплине, приложить HTML-тексты страниц с учебными материалами и файлы для размещения в системе. После размещения материалов преподаватель может установить период времени, когда он принимает заявки студентов на изучение свой дисциплины, а также период времени, когда студенты, чьи заявки будут приняты, смогут иметь доступ к учебным материалам дисциплины и проходить тесты. Преподаватель может редактировать собственные учебные материалы, загруженные файлы, а также удалять их или заводить новые.

Система позволяет преподавателям учебных дисциплин заводить тесты по разным темам. Каждый тест содержит набор вопросов. Каждый вопрос имеет одну или несколько разных текстовых формулировок, имеющих одинаковый смысл. К вопросу приписаны несколько вариантов ответов, которые могут быть либо верными, либо неверными, либо не учитываемыми в результатах теста. К любому вопросу приписан хотя бы один верный ответ и хотя бы один неверный. Преподаватель может редактировать собственные тесты, а также удалять их или заводить новые.

Студент может оставить заявку на изучение дисциплины, которую он раньше не изучал. Система высветит принятую заявку преподавателю и он может решить, принять её или отвергнуть. Принятые на обучение студенты получают доступ к учебным материалам, опубликованным преподавателем. Они могут просматривать гипертексты страниц с учебными материалами, скачивать файлы, выложенные преподавателем.

Студент выполняет тесты по порядку следования тем в дисциплине. Время прохождения теста задаётся преподавателем при его создании. Когда студент желает пройти тест, система создаёт для него индивидуальный вариант теста. Варианты разных студентов различаются, поскольку система, во-первых, случайным образом выбирает вопросы и их формулировки, включённые в вариант (считается, что вопросов теста, введённых преподавателем, как минимум в двое больше, чем количество вопросов в варианте); во-вторых, случайным образом упорядочивает выбранные вопросы; в-третьих, случайно выбирает варианты ответов к вопросам теста; в-четвёртых, случайно упорядочивает варианты ответов. Создавая вариант теста система обеспечивает наличие для каждого вопроса хотя бы одного верного варианта ответа и хотя бы одного неверного. После того, как вариант создан, система предлагает студенту ответить на первый вопрос. Студент выбирает варианты ответов и переходит к следующему вопросу или отказывается отвечать на вопрос и также проходит дальше. Тестирование завершается, когда студент дал ответ (либо отказался отвечать) на последний вопрос, либо когда истекло отведённое время, определённое преподавателем. По завершении система подсчитывает баллы за тест. Система подсчёта такова: если на вопрос дан хоть один неверный ответ, за вопрос ставится 0 баллов; если на вопрос не дан ни один неверный ответ и указаны не менее 50% верных ответов, но не все, ставится 1 балл; если даны все верные ответы и ни одного неверного, ставится 2 балла; иначе ставится 0 баллов. Баллы по всем вопросам суммируются и составляют оценку за тест.

Система ведёт журнал тестирований. Студент может узнать оценку за каждое своё тестирование и получить детализацию баллов по каждому вопросу теста. Сами вопросы при этом не выводятся, и правильные/неправильные ответы не раскрываются. Преподаватель может видеть полные сведения о тестировании студентов. Ему выводится полностью вариант, предложенный студенту, с указанием правильных и неправильных вариантов ответов и выбранных учащимся ответов.

Учётными записями студентов и преподавателей управляет администратор. Он может временно блокировать пользователей, напоминать им пароли. Если администратор удаляет пользователя, то все данные, относящиеся к этому пользователю, стираются.

Следует разработать схему реляционной базы данных системы, хранящей сведения о пользователях (преподавателях и студентах), учебных дисциплинах, учебных материалах, тестах, вариантах тестов и проведённых тестированиях.

Все необходимые для работы сведения хранятся в самой системе, а не в каком-либо внешнем хранилище. Внешним по отношению к системе является SMTP-сервер, используемый для отправки электронной почты, и FTP-сервер, используемый при передаче файлов.

Вариант 13. Магазин программ и игр


Программная система автоматизирует продажу программного обеспечения для персональных компьютеров и игровых консолей, позволяя осуществлять её онлайн. Покупатели программ -- пользователи -- регистрируются в системе онлайн, указывая в форме регистрации логин-email, пароль, ф., и., о., день рождения. Если форма заполнена верно, e-mail не совпадает с e-mail'ом другого пользователя, то регистрационная запись о новом пользователе создаётся, и он получает в свой электронный почтовый ящик сообщение для подтверждения e-mail со сгенерированным системой кодом. Чтобы подтвердить e-mail, пользователь должен нажать на ссылку из полученного по e-mail сообщения. По ссылке открывается форма, в которой заполняется логин, пароль и присланный код. Если все данные сообщены верно, то пользователь получает полноценный доступ к системе. Теперь он может «входить» и получать доступ ко всем возможностям, предоставляемым зарегистрированному пользователю.

О каждой продаваемой программе магазин хранит и предоставляет своим пользователям набор сведений: уникальный каталожный номер, название программы, год издания, название издателя, язык, категория (системное ПО, прикладное ПО, игра), авторы/создатели программы (один или более чем один). Программа может предлагаться для разных операционных систем, разных платформ: PC-Windows, PC-Linux, PS4, XBox One и др. Цена одной и той же программы, приобретаемой для разных платформ в разных языковых версиях, может быть разной. Для каждой программы есть набор изображений-«скриншотов», сопровождаемых описанием. Эти материалы нужны, чтобы пользователи могли получить представление о программе и решиться на покупку. Часто в магазине предлагаются пробные версии программ с усечённой функциональностью и/или коротким сроком использования. Такую версию пользователь может заказать бесплатно.

Пользователь, войдя в систему, может искать программы в каталоге магазина по одному или нескольким поисковым полям: каталожному номеру, названию, году издания, названию издателя, категории, автору(ам). Результаты поиска система выдаёт порциями (по 10 записей о программах). Их можно сортировать в желаемом пользователю порядке (по возрастанию / убыванию): цены, названия, даты поступления в продажу, рейтинга, вычисленного по оценкам пользователей, купивших программу ранее. Понравившиеся программы пользователь может поместить в «корзину», либо в список будущих покупок. Программа, помещённая в список будущих покупок, может быть либо удалена из него пользователем, либо перемещена им в «корзину». При просмотре пользователем своей непустой «корзины», система сообщает ему весь перечень программ, помещённых туда, их цены и общую сумму «корзины». Позиции «корзины», помещённые по ошибке, пользователь может удалить. Одна и та же программа может находиться в «корзине» дважды (трижды и т. п.), если пользователь хочет её приобрести в нескольких версиях для разных платформ и/или языков. По своей непустой корзине пользователь может сделать заказ, который должен быть им оплачен в течение 7-ми суток. По оформлении заказа система помечает его, как пока не оплаченный, и опустошает «корзину». Не оплаченные вовремя заказы пользователей система отменяет.

Оплата заказа производится с помощью платёжной системы, с которой магазин взаимодействует через шлюз. При оплате система запрашивает сведения о банковской карте: номер, срок действия, сведения о владельце, трёхзначный код защиты. Если сведения сообщены должным образом, магазин передаёт полученные сведения и стоимость заказа в составе запроса на оплату через шлюз платёжной системы. Ответ на этот запрос может быть положительным или нет. Если попытка была неуспешной, статус заказа не меняется, а пользователь должен попытаться оплатить заказ снова, в течение отведённого на оплату времени. После удачной оплаты заказ помечается как оплаченный. Далее система направляет на электронную почту сообщение с перечнем ссылок на скачивание дистрибутивов всех заказанных программ. Помимо ссылок для каждой программы сообщается код активации, сгенерированный системой. Код активации используется при запуске используемых программ. Запускаемая программа по Интернет-соединению делает запрос в систему с указанием логина пользователя, кода активации и каталожного номера программы. По результатам ответа системы на запрос программа делает вывод о легальности своего запуска и либо продолжает свою работу, либо завершает.

Пользователь имеет доступ к списку всех своих заказов. С помощью него он может запросить повторную отправку сообщения со ссылкой и кодом активации для той или иной позиции оплаченного им заказа.

Система не допускает повторного заказа программы, если та уже была приобретена пользователем ранее для той же платформы и языка (т. е. указана как позиция оплаченного пользователем заказа). Приобретённой программе пользователь может указать оценку по шкале 0..10 в зависимости от того, насколько она ему понравилась.

Работники магазина поддерживают в актуальном состоянии сведения об программах, предлагаемых к покупке. Они также размещают в магазине сведения о программах, которые пока не продаются, но вскоре могут поступить в продажу, чтобы заинтересованные пользователи могли «подписываться» на них и получать от магазина электронные письма о поступлении программ в продажу. Работники магазина могут по своему выбору приостанавливать действие регистрационных записей пользователей с большим количеством неоплаченных заказов. На время приостановки действия регистрационной записи пользователь не может «входить» в систему.

Пользователь может оставить в системе сообщение об обнаруженной им неточности в сведениях о программе или о затруднении, возникшем у него при работе с системой. Система предоставляет работникам магазина возможность ответить на эти сообщения пользователям. Доставка этих ответов осуществляется по электронной почте.

Следует разработать схему реляционной базы данных системы.

Все необходимые для работы сведения хранятся в самой системе, а не в каком-либо внешнем хранилище. Внешними по отношению к системе являются платёжная система, SMTP-сервер.

Вариант 14. Терминал выдачи заказов


Терминал выдачи заказов -- это автоматизированный пункт обслуживания клиентов интернет-магазина. С его помощью клиенты получают свои заказы. Клиент может отказаться от получения заказа, не подошедшего ему по какой-то причине. Получение заказа осуществляется следующим образом: Терминал ожидает очередного клиента, высвечивая приглашение ввести номер мобильного телефона. Клиент набирает на клавиатуре терминала запрошенный номер. Терминал через шлюз сотовой связи отправляет по введённому номеру SMS c 6тизначным кодом и выводит запрос кода на свой экран. Клиент получает код на мобильный телефон и сообщает код терминалу. Если ввод верен, выдача продолжается, иначе сеанс обслуживания завершается неуспехом. В продолжение обслуживания происходит проверка того, что внутрь терминала курьер уже разместил заказ/заказы клиента с введённым номером телефона. Если проверка неудачна, то терминал запрашивает сервер интернет-магазина, чтобы выяснить, есть ли у клиента заказы, готовые к выдаче и в каких терминалах они находятся. Сведения, сообщённые сервером в ответе, выводятся клиенту, чтобы он мог забрать свои заказы в других терминалах.

Если в терминала есть заказы клиента, то терминал высвечивает их список на своём дисплее и предлагает выбрать один из заказов для выдачи. О каждом заказе сообщается его номер, дата создания заказа, стоимость заказа, перечень названия товаров из позиций заказа, статус заказа: оплачен / не оплачен. Клиент должен выбрать один заказ для получения. Клиент может отказаться от получения, и в этом случае сеанс завершается. После выбора заказа для получения, на экран выводится схема, поясняющая расположение дверцы ячейки терминала, из которой клиент может его забрать. Для предоплаченных заказов оплата не требуется. Если заказ должен быть оплачен при получении, то терминал просит клиента ввести банковскую карту в считыватель. Клиент вводит карту. Если карту удалось прочесть, то терминал запрашивает PIN. По введённому PIN терминал вычисляет некоторое другое число (PVV) и вместе с данными карты, считанными с её магнитной полосы, и другими сведениями об оплате отправляет в банковскую систему. В ответ может придти либо подтверждение успешной оплаты, либо отказ. При отказе клиенту предоставляются ещё не более чем 2 попытки оплаты той же или другой картой. Если и они неуспешны, то оплата завершается неуспехом, заказ не выдаётся. После успешной оплаты (или при предоплаченном заказе) открывается автоматический замок на дверце нужной ячейки. Клиент открывает дверцу ячейки, достаёт заказ. Терминал запрашивает клиента, забирает ли он заказ целиком или отказывается ли он от заказа целиком. После выбора клиента обслуживание продолжается. Если заказ целиком забран, то терминал закрывает дверцу, запирает её замок, сообщает на сервер интернет-магазина об успешно выданном заказе. Если у клиента не осталось других заказов для получения, то терминал завершает обслуживание, высвечивает приглашение и ожидает следующего клиента. Если у одного клиента несколько заказов, то он может забрать продолжая свой сеанс. При возврате заказа целиком клиент помещает его обратно в открытую ячейку и сообщает об этом терминалу. Дверца ячейки автоматически закрывается, её замок запирается. Терминал отправляет сообщение на сервер интернет-магазина об отказе клиента получать заказ. Терминал не должен повторно предлагать к получению заказы, от которых клиент ранее отказался. Вопросы компенсации оплаты возвращённых заказов клиент решает без использования терминала.

Курьер, работающий с терминалом, должен будет забрать все возвращённые заказы и вернуть их на склад интернет-магазина. В его обязанности также входит размещение доставленных им заказов в ячейки терминала. С помощью специальной карты, помещаемой в считыватель, курьер переводит терминал в курьерский режим. Курьер сообщает, что хочет поместить заказ. Терминал выводит перечень свободных ячеек и предлагает выбрать одну из них для помещения заказа и ввести его номер. Получив данные, терминал запрашивает у сервера интернет-магазина сведения о заказе. После успешного их получения терминал отпирает замок выбранной курьером ячейки. Курьер открывает ячейку, размещает в ней заказ и сообщает об этом терминалу. Терминал закрывает дверцу ячейки и запирает её замок. Он информирует сервер интернет-магазина о том, что заказ готов к выдаче клиенту. Если № заказа был сообщён с ошибкой, то помещение заказа в ячейку завершается неуспехом.

Курьер сообщает, что хочет забрать возвращённый заказ. Терминал выводит перечень ячеек, занятых возвращёнными заказами, и предлагает выбрать одну из них. Получив данные, терминал отпирает замок выбранной курьером ячейки. Курьер открывает ячейку и забирает содержимое. Терминал закрывает дверцу ячейку и запирает её замок. Он информирует сервер интернет-магазина о том, что возвращённый заказ направляется на склад с курьером. По окончании работы курьер должен перевести терминал обратно в режим обслуживания клиентов.

Моделированию подлежит терминал. Сервер интернет-магазина, банковская система и шлюз сотовой связи находятся за границами моделируемой системы, т. е. не являются её частями. Несмотря на это, дополнительно следует создать схему базы данных сервера интернет-магазина со сведениями о клиентах, товарах, заказах, терминалах выдачи. Предполагается, что в самом терминале нет собственной БД, а значит, следует смоделировать внешнюю БД.

Вариант 15. Терминал курьерской службы


Терминалы устанавливаются в пунктах курьерской службы для автоматизированного обслуживания клиентов. Обычно, терминал ожидает очередного клиента, высвечивая приглашение ввести номер мобильного телефона. Клиент набирает на клавиатуре терминала запрошенный номер. Терминал делает запрос на сервер курьерской службы о том, зарегистрирован ли клиент с сообщённым номером мобильного телефона. Если номер не зарегистрирован, то сеанс завершается неудачно, и терминал ожидает следующего клиента. Если номер зарегистрирован, то терминал через шлюз сотовой связи отправляет по введённому номеру SMS c 6тизначным кодом и выводит запрос кода на свой экран. Клиент получает код на мобильный телефон и сообщает код терминалу. Если ввод верен, выдача продолжается, иначе сеанс обслуживания завершается неуспехом. С помощью терминала клиенты могут узнать сведения об отправлениях, адресованных им или отправленных ими, получать свои отправления, готовые к выдаче в пункте курьерской службы. Терминалы также используются служащими для ввода сведений об операциях с отправлениями и передачи их на сервер курьерской службы.

В режиме обслуживания клиентов после выше описанной проверки, терминал запрашивает у клиента уникальный идентификатор отправления. Клиент набирает на клавиатуре терминала запрошенный идентификатор. Если на сервере курьерской службы зарегистрировано отправление с таким идентификатором, и если клиент является его отправителем или получателем, то терминал сообщает сведения об отправлении: тип, отправитель, получатель, адрес отправки, адрес получателя, стоимость пересылки, объявленная стоимость (если есть), сумма страховки (если есть), история операций с отправлением. Виды операций: принято на доставку в каком-то пункте службы (с указанием пункта), ожидает отправки в пункте приёма (с указанием пункта), отправлено по городу (с указанием города), отправлено в другой город (с указанием города), прибыло в город (с указанием города), прибыло в пункт вручения (с указанием пункта), ожидает вручения в пункте выдачи (с указанием пункта), вручено получателю, выдано курьеру для доставки на дом, возвращается отправителю, возвращено отправителю. По каждой операции указывается её дата, время, место. Если идентификатор отправления сообщен неверно, то сеанс завершается неуспешно.

Если запрошенное отправление клиента готово к выдаче в пункте курьерской службы, где установлен терминал, и если клиент является получателем, то терминал предлагает подтвердить, что клиент готов оформить выдачу отправления. Отправление может быть без оплаты либо с оплатой наложенным платежом. Если отправление должно быть оплачено, то терминал просит клиента ввести банковскую карту в считыватель. Клиент вводит карту. Если карту удалось прочесть, то терминал запрашивает PIN. По введённому PIN терминал вычисляет некоторое другое число (PVV) и вместе с данными карты, считанными с её магнитной полосы, отправляет в систему оплаты. В ответ может придти либо подтверждение успешной оплаты, либо отказ. При отказе клиенту предоставляются ещё не более чем 2 попытки оплаты той же или другой картой. Если и они неуспешны, то оплата завершается неуспехом. При успешной оплате распечатывается чек об оплате. Распечатывается и выдаётся талон электронной очереди, где указан № талона и № окна, где будет произведена выдача. Талоны имеют сквозную нумерацию в течение суток, стартующую от 1. № окна назначается терминалом в зависимости от количества талонов, связанных с этим окном, выдача по которым пока не произведена. Терминал завершает обслуживание клиента, высвечивает приглашение и ожидает следующего клиента. Если у одного клиента несколько готовых к выдаче отправлений, то он может забрать их в течение нескольких сеансов работы с терминалом.

Работник курьерской службы может использовать терминал на свой лад. С помощью специальной карты, помещаемой в считыватель, он переводит терминал в служебный режим и сообщает свой № окна для обслуживания клиентов. В этом режиме работник вводит сведения об операциях с отправлениями. Работник сканирует штрих-код отправления и выбирает тип операции с ним (см. выше). Сведения о дате, времени и месте терминал заполняет самостоятельно. Дополнительные сведения могут быть добавлены работником. Когда ввод завершён и подтверждён, сведения отправляются на сервер курьерской службы. От сервера может придти подтверждение или отказ. Если вводимая операция некорректна, то сервер должен прислать отказ, так как он отслеживает корректность последовательности операций с отправлением (например, уже выданное отправление не может быть позднее возвращено отправителю). Для исправления подобной ситуации работник может запросить весь список операций с отправлением и внести необходимые изменения. По окончании работы работник должен перевести терминал обратно в режим обслуживания клиентов.

Если работник вводит сведения о том, что отправление выдано, то терминал учитывает этот факт в электронной очереди. Он находит соответствующий талон удаляет его из упорядоченного набора талонов, относящихся к окну служащего. Также терминал выводит список №№ талонов, назначенных в очередь к окну служащего.

Сервис-инженер может провести техническое обслуживание терминала. С помощью специальной карты, помещаемой в считыватель, он инициирует режим т/о. В этом режиме сервис-инженер может переконфигурировать и проверить параметры сетевых соединений с сервером, с платёжной системой. Сервис-инженер может зарядить бумажную ленту в принтер терминала, если она закончилась или на исходе. По окончании работы сервис-инженер должен перевести терминал обратно в режим обслуживания клиентов.

Моделированию подлежит только сам терминал. Сервер курьерской службы, шлюз сотовой связи и платёжная система находятся за границами моделируемой системы, т. е. не являются частями системы. Несмотря на это, дополнительно следует создать схему базы данных сервера курьерской службы, где хранятся сведения о клиентах, отправлениях, пунктах, операциях с отправлениями. Предполагается, что в самом терминале нет собственной БД, а значит, следует смоделировать внешнюю БД.


Предупреждение


Размещение на других ресурсах, а также коммерческое использование материалов, опубликованных в данном разделе, возможно только с разрешения авторов. По всем вопросам пишите:   

  

© Кафедра системного программирования ВМК МГУ.

Обновлено: 14.XI.2021