Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Отчёт_по КР.docx
Скачиваний:
7
Добавлен:
20.06.2023
Размер:
1.52 Mб
Скачать

Приложение "модель"

Перечень событий, изменяющих состояние модели ПрО.

Приведём список событий, изменяющих состояние модели рассматриваемой предметной области.

  1. Открытие/закрытие кассы;

  2. Появление нового клиента (изменяет количество человек в очереди);

  3. Обслуживание клиента (изменяет количество человек в очереди и счётчик обслуженных клиентов);

  4. Событие, когда клиент не попадает ни в одну из очередей (все очереди заполнены) – увеличивает счётчик количества потерь;

  5. Событие, когда клиент попадает в одну из очередей – увеличивает счётчик у очереди;

  6. Открытие/закрытие того или иного окна кассы (увеличивает количество человек в очередях к другим окнам и также увеличивает счётчик потерь, если очереди заполняются, а необслуженные клиенты ещё остаются).

Диаграммы состояний классов модели ПрО.

Рисунок 9 – Диаграмма состояний для Кассы

Заголовочные файлы (h-файлы) классов модели ПрО.

Ниже представлено содержание h-файлов интерфейсных классов. Для начала рассмотрим файл box.h.

  1. Класс Key имеет следующую структуру:

- bool state – атрибут состояния ключа;

- Key() – конструктор класса;

- Key(const Key&) – второй конструктор класса;

- Key& operator=(const Key&) – перегрузка оператора присваивания;

- inline bool getState() – встроенный метод получения состояния ключа;

- bool control() – метод изменения состояния ключа.

  1. Класс Box имеет следующий ряд свойств:

- Key boxKey – атрибут, хранящий в себе информацию о ключе;

- int counter – атрибут-счётчик обслуженных клиентов;

- Box() – конструктор класса;

- Box(const Box&) – второй конструктор класса;

- Box& operator=(const Box&) – перегрузка оператора присваивания;

- BoxState getState() – метод выявления состояния окна;

- bool control() – метод изменения состояния окна;

- void controlCount() – метод обнуления счётчика;

- void tact() – метод-слот, который, согласно таймеру, увеличивает счётчик на единицу;

- void service() - метод-слот, который, согласно таймеру, уменьшает счётчик на единицу.

Теперь рассмотрим файл cash.h и его класс cash, который имеет следующую структуру:

- static CashParam defaultParam – атрибут, хранящий в себе данные параметров кассы по умолчанию;

- CashParam currentParam – атрибут, хранящий в себе текущие данные параметров кассы;

- QTimer *timer – атрибут-таймер прихода новых клиентов;

- QTimer* serviceTimer – атрибут-таймер ухода обслуженных клиентов;

- int countOfLost – атрибут-счётчик потерь;

- int countOfServ – атрибут-счётчик обслуженных клиентов;

- Key cashKey – атрибут-ключ кассы;

- QVector<Box> boxes – атрибут-вектор окон;

- void configure(int) – метод задания окон в кассе;

- void reconfigure(int) – метод удаления окон из кассы;

- void sendState() – метод, формирующий текущее состояние кассы;

- int indexOfMinQ(int*) – метод поиска номера окна, где меньше всего людей в очереди;

- bool isThereFree() – метод поиска ответа на вопрос "Есть ли свободные места в очередях к какому-либо окну кассы?";

- void tact() – метод-слот, который случайным образом "перебрасывает" людей из одной очереди в другую;

- void service() – метод-слот, который увеличивает количество обслуженных клиентов;

- void cashState(CashState) – сигнал о формировании нового состояния кассы;

- Cash() – конструктор класса;

- ~Cash() – деструктор класса;

- inline CashParam getParam() – встроенный метод получения значений параметров кассы;

- void control(int) – метод-слот, производящий перерасчёт очередей;

- void updateTimer(int) – метод-слот, обновляющий значения интервала счёта для таймера, отвечающего за частоту появления нового клиента;

- void countBoxChanged(int) – метод-слот, который вызывается при изменении количества окон кассы;

- void countPeopleChanged(int) – метод-слот, который вызывается при изменении количества человек в очереди.