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

МИНОБРНАУКИ РОССИИ

Санкт-Петербургский государственный

электротехнический университет

«ЛЭТИ» им. В.И. Ульянова (Ленина)

Кафедра информационных систем

отчет

по курсовой работе

по дисциплине «Объектно-ориентированное программирование»

Студент гр. 9373

Заболотников М.Е.

Студентка гр. 9373

Петрова С.В.

Преподаватель

Егоров С.С.

Санкт-Петербург

2022

ПОСТАНОВКА ЗАДАЧИ

Постановка задачи.

Требуется реализовать в объектно-ориентированной методологии программную систему (ПС), имитирующую жизненный цикл объектов предметной области "Билетная касса", на основе разработанной объектной модели (ОМ).

Исследуемая предметная область.

Билетная касса.

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

На вокзале билетная касса с N окошками (кассирами) и очередью длины не более M к каждому. Пассажиры, желающие купить билет, выбирают свободную кассу, где меньше очередь, или равновероятно при неоднозначном выборе. Пассажиры могут переходить из очереди в очередь. Обслуженные пассажиры уходят.

Обоснование выбора языка программирования.

Для выполнения данной курсовой работы был выбран язык программирования С++. Выбранная объектная библиотека для выбора конструкторских классов в курсовой работе – Qt. Среда реализации – Qt Creator. Такой набор средств обладает достаточным набором классов и функций, с помощью которого возможно реализовать решение поставленной задачи.

Диаграммы объектной модели

Диаграмма прецедентов.

На рис. 1 представлена диаграмма прецедентов объектной модели:

Рисунок 1 – Диаграмма прецедентов

Модель "сущность-связь".

На рис. 2 представлена диаграмма "Сущность-связь" объектной модели:

Рисунок 2 – Диаграмма "Сущность-связь"

Диаграмма классов.

На рис. 3 представлена диаграмма классов исследуемой объектной модели:

Рисунок 3 – Диаграмма классов

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

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

  1. QTimer;

  2. QPushButton;

  3. QLabel;

  4. QObject;

  5. QWidget;

  6. QVector;

  7. QHBoxLayout;

  8. QVBoxLayout;

  9. QSpinBox.

Схемы соединений «сигнал-слот», реализованная в проекте.

Рисунок 4 – Механизм "сигнал-слот" через класс Cash

Рисунок 5 – Механизм "сигнал-слот" через класс ParamWindow

Рисунок 6 – Механизм "сигнал-слот" через класс EventWindow

Рисунок 7 – Механизм "сигнал-слот" через класс TMainWindow

Приложение "интерфейс"

Графическое представление интерфейсных окон.

  1. Основное окно.

При запуске программы нас встречает главное окно, оно изображено на рис. 8:

Рисунок 8 – Основное окно

Данное окно состоит из трёх вспомогательных (на рис. 4 слева направо): окна "Параметры кассы", окна "Управление кассой" и окна отображения состояния кассы.

  1. Окно параметров ПрО.

Рассмотрим окно параметров кассы (см. рис. 8). Оно находится в левой части основного окна и содержит интерфейсные элементы, такие, как управление количеством окон кассы и управление максимальным числом человек в очереди. По умолчанию установлены значения 3 и 5 соответственно.

  1. Окно управления событиями ПрО.

Окно управления событиями рассматриваемой предметной области расположено по середине основного окна (см. рис. 8). Оно предоставляет пользователю возможность управлять такими событиями как открытие и закрытие кассы в целом и окон кассы в частности. Также есть кнопка управлением события "частота появления нового клиента", которое можно в любой момент времени поменять.

  1. Окно отображения состояния объектов ПрО.

Окно отображения состояния объектов располагается в правой части основного окна (см. рис. 8), и оно отображает текущее состояние объектов предметной области, таких, как сама касса и её окна. Состояния объектов рассматриваемой ПрО отображаются в виде счётчиков, надписей и цветов. Так красный цвет в прямоугольнике с надписью "Касса закрыта" говорит нам о том, что касса на данный момент закрыта. А счётчики в вертикальном ряду прямоугольников около правой границы основного окна показывают, сколько человек на данный момент времени находится в очереди к тому или иному окну.

  1. Заголовочные файлы (h-файлы) интерфейсных классов.

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

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

- KeyView(QWidget *parent = 0) – конструктор класса;

- void view(bool, bool) – метод, контролирующий вывод на экран либо ключа кассы, либо ключа окна кассы.

  1. Класс CounterView имеет структуру:

- CounterView(QWidget *parent = 0) – конструктор класса;

- void view(int) – метод отображения счётчика окна кассы (по-простому количество людей в очереди на данный момент времени).

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

- QHBoxLayout *hl – указатель на макет горизонтального расположения виджетов;

- KeyView *kv – указатель на ключ определённого окна кассы;

- CounterView *cv – уазатель на счётчик определённого окна кассы;

- BoxView(QWidget *parent = 0) – конструктор класса;

- void view(BoxState) – метод визуализации состояния окна кассы.

  1. Класс LostView – класс, у которого есть ряд свойств, таких как:

- LostView(QWidget *parent = 0) – конструктор класса;

- void view(int) – метод отображения счётчика клиентов, которым не удалось попасть ни в одну из очередей в виду того, что все очереди заполнены (своего рода счётчик потерь).

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

- ServView(QWidget *parent = 0) – конструктор класса;

- void view(int) – метод визуализации счётчика обслуженных клиентов.

Теперь рассмотрим файл interface.h. В нём содержатся описания следующих классов:

  1. Класс ParamWindow отвечает за отображение параметров кассы. Имеет следующую структуру:

- QLabel *h – атрибут-заголовок "Параметры кассы";

- QLabel *boxeslbl – атрибут-заголовок "Число окон";

- QLabel *peoplelbl – атрибут-заголовок "Число человек в очереди";

- QSpinBox *n1 – атрибут-переключатель количества окон;

- QPushButton *b1 – атрибут-кнопка "Применить" для числа окон;

- QPushButton *b2 – атрибут-кнопка "Отменить" для числа окон;

- QSpinBox *n2 – атрибут-переключатель максимального числа человек в очереди;

- QPushButton *b3 – атрибут-кнопка "Применить" для максимального числа человек в очереди;

- QPushButton *b4 – атрибут-кнопка "Отменить" для максимального числа человек в очереди;

- int n1value – атрибут, хранящий в себе значение количества окон;

- int n2value – атрибут, хранящий в себе значение максимального количества человек в очереди;

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

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

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

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

- void restoreBoxCount() – метод-слот, который вызывается, когда необходимо отменить изменения количества окон;

- void restorePeopleCount() – метод-слот, который вызывается, когда необходимо отменить изменения максимального количества человек в очереди;

- void changeBoxCount(int) – сигнал о том, что необходимо изменить значение количества окон;

- void changePeopleCount(int) – сигнал о том, что необходимо изменить значение максимального количества человек в очереди;

- ParamWindow(CashParam,QWidget *parent = 0) – конструктор класса;

- ~ParamWindow() – деструктор класса.

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

- QLabel *h – атрибут-заголовок "Управление кассой";

- QLabel *l – атрибут-подпись "Выбор окна";

- QLabel *fr – атрибут-подпись "Частота появления нового клиента (мсек между появлением)";

- QSpinBox *n – атрибут-переключатель номера выбранного окна;

- QSpinBox *fv – атрибут-переключатель значения частоты появления нового клиента;

- QPushButton *b1 – атрибут-кнопка "Открыть окно";

- QPushButton *b2 – атрибут-кнопка "Открыть кассу";

- QPushButton *b3 – атрибут-кнопка "Применить" для частоты появления нового клиента;

- QVector<bool> keystates – вектор состояний окон (активны/не активны);

- void boxChanged(int) – метод-слот, который меняет надпись кнопки "Открыть окно" на "Закрыть окно" и наоборот;

- void cashControl() – метод-слот, который контролирует подпись кнопки "Открыть/Закрыть кассу" или "…окно";

- void freqControl() – метод-слот, который вызывается, когда нужно изменить значение частоты появления нового клиента;

- void control(int) – сигнал о том, что поменялась команда закрытия/открытия кассы;

- void setFreq(int) – сигнал о смене значения частоты появления нового клиента;

- EventWindow(CashParam,QWidget *parent = 0) – конструктор касса;

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

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

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

- QHBoxLayout *hl – атрибут-макет горизонтального расположения виджетов;

- QVBoxLayout *vl – атрибут-макет вертикального расположения виджетов;

- QVBoxLayout *v1l – атрибут-макет вертикального расположения виджетов-элементов первого столбца;

- KeyView *kv – атрибут отображения ключа кассы/окна;

- LostView *lost – атрибут отображения значения потерь;

- ServView *serv – атрибут отображения значения обслуженных клиентов;

- QList<BoxView*> bvl – вектор отображения окон;

- CashWindow(CashParam,QWidget *parent = 0) – конструктор класса;

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

- void view(CashState) – метод отображения состояния кассы:

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

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

- QHBoxLayout *hl – макет горизонтального расположения всех окон в главном окне;

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

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

- CashWindow *cw – атрибут, хранящий в себе данные о состоянии кассы;

- Cash *cash – атрибут "касса";

- TMainWindow(Cash*,QWidget *parent = 0) – конструктор класса;

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

- void cashState(CashState) – метод-слот, который вызывается, когда меняются данные о кассе.