Перейти к основному содержанию
EDU-MMCS
Вы используете гостевой доступ (Вход)

4.4 ООП в С++ (с/к)

  1. В начало
  2. Курсы
  3. Осенний семестр
  4. Прикладная математика и информатика
  5. ООП в С++
  6. Модуль 1. Полиморфизм. Наследование
  7. Лаб.№3 Задание на проектирование и реализацию объе...

Лаб.№3 Задание на проектирование и реализацию объектов.

Требуемые условия завершения
Открыто с: вторник, 28 октября 2014, 08:00
Срок сдачи: среда, 19 ноября 2014, 22:45

Проект «Система оплаты и скидочных карт в компьютерном магазине»

Описание предметной области

В компьютерном магазине используется следующая система скидочных карт:

  • Ламповая скидочная карта (tube discount card) выдаётся покупателю при накоплении 5000 суммарной стоимости покупок. Эта карта даёт скидку 5%.
  • Транзисторная скидочная карта (transistor) выдаётся при накоплении 12500 (может выдаваться после ламповой карты или сразу). Эта карта даёт скидку 10%.
  • Интегральная скидочная карта (integrated) выдаётся при накоплении 25000 (может выдаваться после ламповой карты, транзисторной карты или сразу). Эта карта даёт скидку 15%.
  • Квантовая скидочная карта (quantum) выдаётся покупателям в специальные «праздничные» дни случайным образом. Она даёт скидку 20%. Если покупатель уже владел какой-то скидочной картой, она (предыдущая карта) аннулируется, если только это уже не была квантовая карта (вторая не выдаётся).
    Квантовая карта имеет ограниченный срок действия (например, полгода). После истечения срока действия клиент получает взамен циклическую карту.
  • Циклическая скидочная карта (cyclic) является накопительной. В момент выдачи она даёт скидку 5% (как ламповая) и содержит 5000 «накопительной» стоимости. При накоплении 12500 она работает как транзисторная и даёт скидку в 10%. При накоплении 25000 — 15% (как интегральная). При накоплении 50000 сумма накопления сбрасывается в 5000, и карта снова даёт скидку 5%. Покупатель при желании может аннулировать эту карту и начать накопление заново.
  • Весёлая скидочная карта (cheerful) — это единственная карта, которую можно приобрести в магазине бесплатно. Она даёт скидку 10%, но работает только 10 дней в месяц, причём покупатель не знает, какие это дни (магазин определяет эти дни в начале каждого календарного месяца).

При каждой покупке в накопительную часть идёт полная стоимость покупки. Например, если покупатель с 10%-ной картой совершает покупку на сумму 1000, он платит 900, но накопительная часть увеличивается на 1000.
Транзакция накопления — это покупка. Если накопительная часть составляет 12000 (ламповая карта, например), а покупатель делает покупку на 2000, он оплачивает покупку со скидкой 5%. И после покупки получает транзисторную карту (её накопительная часть — 14000).

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

Задание

Необходимо реализовать программный проект для моделирования работы «кассы» компьютерного магазина.

  • Разработайте архитектуру и коротко опишите её (в текстовом файл, например).
  • Разработайте проект на языке C++
  • Опишите UML-диаграмму основных классов и интерфейсов системы (разрешается ограничиться публичными членами классов). Редакторы: UMLet, Dia.
  • Разработайте пользовательскую документацию (по использованию системы).

Описание системы

Магазин инициализируется «с нуля». Система не знает ни одного покупателя со скидочной картой.

После запуска системы она начинает принимать команды.

  • Команды категории «A».
    1. Команда авторизации. Покупатель совершает не первую покупку в магазине. Он подходит к кассиру и называет себя, кассир находит его запись в системе.
    2. Команда регистрации. Покупатель в магазине в первый раз. Он называет своё имя, кассир добавляет его в систему. Покупателя тут же авторизуют.
      Замечание. Может быть несколько человек с одним именем, придумайте способ их различения. Не забудьте об этом и при авторизации покупателя! Нужно выбрать правильную запись в системе.
  • Команды категории «B». Доступны только для авторизованных покупателей! Авторизованный покупатель может выполнить несколько команд данной категории.
    1. Команда совершения покупки. Здесь нужно указать сумму покупки (очевидно, она не может быть отрицательной или нулевой!).
    2. Команда приобретения весёлой карты.
    3. Команда аннулирования циклической карты. Подумайте, что делать, если у покупателя нет такой карты.
    4. Команда завершения сеанса работы. Пользователь разавторизуется и уходит из кассы.
  • Команда выключения системы.

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

Пользовательский интерфейс

Необходимо реализовать два интерфейса:

  1. Интерактивный. Достаточно реализовать однопользовательский консольный интерфейс, который позволяет вводить рассмотренные выше команды в текстовой форме.
  2. Демонстрационный. Для удобства демонстрации организуйте загрузку команд из текстового файла (одна команда в одной строке). Имя файла можно передавать приложению как параметр командной строки.
    Лог работы системы (для каждой команды файла: текст команды + реакция системы на неё) можно сохранить в другом файле (второй параметр командной строки) или выводить на консоль, если файл не задан или не существует.

Требования и указания

  • Обратите внимание, что пользовательский интерфейс должен быть отделён от системы, моделирующей работу кассы магазина. Саму систему можно реализовать в виде dll-библиотеки, например. Но даже если вы не сделаете отдельную dll, позаботьтесь о независимости этой части проекта от интерфейсов.

  • Интерактивный и демонстрационный интерфейсы — два разных пользовательских интерфейса одной и той же системы.

  • Позаботьтесь об обработке исключений. Система не должна «вылетать» от неправильно набранной текстовой команды.

  • Не забывайте о правильном форматировании кода и документирующих комментариях (о комментариях — хотя бы на минимальном уровне, позже они нам ещё пригодятся).

Подсказки

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

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

◄ Индивидуальное задание 1.
UML ►
Пропустить Навигация
Навигация
  • В начало

    • Страницы сайта

      • Мои курсы

      • Теги

    • Мои курсы

    • Курсы

      • Осенний семестр

        • Прикладная математика и информатика

          • P2K

          • GraphAlgo(BI)

          • ИИ (4 курс)

          • ЧМ-2022 (ПМИ-3 4 и 5)

          • GrAlg

          • МО (бак)

          • ANSYS

          • Численные методы -1,3

          • МСС 2022

          • УМФ III (1-2)

          • VPD

          • ООП в С++

            • Общее

            • Модуль 1. Полиморфизм. Наследование

              • ЗаданиеЛаб.№1. Класс Динамический массив

              • ФайлИтераторы

              • ЗаданиеЛаб.№2 Класс Список и Итератор для Списка

              • ЗаданиеИндивидуальное задание 1.

              • ЗаданиеЛаб.№3 Задание на проектирование и реализацию объе...

              • ФайлUML

              • ГиперссылкаDia Diagram Editor

              • ГиперссылкаUMLet 13.1 Free UML Tool for Fast UML Diagrams

            • Модуль 2. Обобщенное программирование

            • Модуль 3. Многопоточность

            • Модуль 4. Паттерны проектирования

        • Фундаментальная информатика и ИТ

        • Математика, механика

        • Педагогическое образование

        • Магистратура

          • Разработка мобильных приложений и компьютерных игр

        • Аспирантура

        • Вечернее отделение

        • Другое

      • Весенний семестр

        • Прикладная математика и информатика

        • Фундаментальная информатика и ИТ

        • Математика, механика

        • Педагогическое образование

        • Магистратура

          • Разработка мобильных приложений и компьютерных игр

        • Аспирантура

        • Вечернее отделение

        • Другое

      • Воскресная компьютерная школа

        • Пользователь компьютера плюс

        • Пользователь прикладных программ

        • Программирование I ступень

        • Программирование II ступень

        • Программирование III ступень

        • Архив

      • Воскресная математическая школа

        • Открытое тестирование РНОМЦ и мехмата ЮФУ - 2025

        • Олимпиадная математическая школа

        • Повышение квалификации

        • Доступная математика

        • Лаборатория математического онлайн-образования мех...

        • Осенняя универсиада

        • Научно-практическая конференция

        • ВМШ

          • ВМШ - 24

        • Летняя олимпиадная математическая школа РНОМЦ и ме...

      • Государственная итоговая аттестация

      • Дополнительное образование

      • Олимпиады

      • Видеолекции

      • Разное

      • Архив курсов

      • Заочная школа мехмата ЮФУ

Служба поддержки сайта
Вы используете гостевой доступ (Вход)
ООП в С++
Сводка хранения данных
Скачать мобильное приложение Яндекс.Метрика