Добавил:
Только когда поступишь в технический вуз поймешь на сколько ты гуманитарий Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Готовое_КР_Календарь

.pdf
Скачиваний:
4
Добавлен:
07.06.2025
Размер:
859.07 Кб
Скачать

Рисунок 3.7 –Тестирование работы приложения

На рисунке 3.8 показана работа программы после добавления события.

24

ам

Рисунок 3.8 – Работа программы после добавления события

Можно отредактировать событие и поменять ему название, описание или

время наступления (Рисунок 3.9)

25

Рисунок 3.9 – Работа программы после редактирования события

При нажатии кнопки «удалить» выбранное событие удаляется (Рисунки

3.10 и 3.11)

26

Рисунок 3.10 – Работа приложения при попытке удаления события

27

Рисунок 3.11 –Работа приложения при попытке удаления события

28

3.4 Входные данные (организация и предварительная

подготовка входных данных)

Входными данными для календарного приложения являются сведения о событиях, вводимые пользователем через графический интерфейс. Основные типы входных данных включают: название события (текстовая строка длиной до 100 символов), описание события (необязательное текстовое поле произвольной длины), дата события (выбирается из календарной сетки или устанавливается автоматически для текущей даты), время события (в формате

HH:MM, с валидацией корректности ввода). Перед обработкой все входные данные проходят предварительную подготовку: текстовая информация обрезается до максимально допустимой длины, дата и время форматируются в стандартный строковый вид (YYYY-MM-DD для даты и HH:MM для времени).

Особое внимание уделяется валидации времени - проверяется соответствие формату и допустимость значений (часы от 0 до 23, минуты от 0 до 59).

3.5Выходные данные

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

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

.

29

ЗАКЛЮЧЕНИЕ

В ходе выполнения курсовой работы было разработано календарное приложение для мобильной платформы Sailfish OS с использованием технологий QML и JavaScript. Приложение предоставляет пользователю удобный инструмент для планирования событий с возможностью их создания,

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

Особенностью реализации стало использование локальной базы данных

SQLite через QtQuick.LocalStorage API для надежного хранения данных событий, что позволяет работать с приложением без необходимости подключения к интернету. Интерфейс построен на основе компонентов Sailfish

Silica, что обеспечивает нативный внешний вид и поведение приложения в соответствии с рекомендациями по разработке для Sailfish OS.

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

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

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

30

СПИСОК ИСПОЛЬЗОВАННЫХ ИСТОЧНИКОВ

1.6 Best Calendar Apps for Organizing Your Week [Электронный ресурс].

URL: https://toolfinder.co/lists/best-calendar-apps.

2.How to create a Custom Calendar [Электронный ресурс] // XDA Developers. – 2023. – URL: https://www.xda-developers.com/how-to-create- appscalendar (дата обращения: 15.05.2025).

3.Документация Aurora OS [Электронный ресурс]. – ООО «Открытая мобильная платформа», 2024. – URL: https://auroraos.ru/doc (дата обращения:

20.05.2025).

4.Qt Documentation [Электронный ресурс]. – The Qt Company, 2024. –

URL: https://doc.qt.io/ (дата обращения: 20.05.2025).

5.Курс лекций по дисциплине «Разработка приложений на С++» [Электронный ресурс]. – Доступ через LMS MIREA. – URL: https://online-

edu.mirea.ru (дата обращения: 20.05.2025).

31

ПРИЛОЖЕНИЯ

Приложение А – Код программы MainPage.qml

32

Приложение А

Листинг 1 – MainPage.qml import QtQuick 2.6

import Sailfish.Silica 1.0

import QtQuick.LocalStorage 2.0 as Sql

Page {

id: calendarPage PageHeader {

id: header

title: qsTr("Календарь")

}

property date selectedDate: new Date()

property string selectedDateString: Qt.formatDate(selectedDate, "yyyy-MM-dd") property var db: Sql.LocalStorage.openDatabaseSync("CalendarDB", "1.0",

"Хранение событий календаря", 100000)

ListModel {

id: eventsModel

}

function padNumber(num, size) { var s = num.toString();

while (s.length < size) s = "0" + s; return s;

}

Component.onCompleted: { initDatabase(); loadEventsForSelectedDate();

}

function initDatabase() { db.transaction(function(tx) {

tx.executeSql('CREATE TABLE IF NOT EXISTS events( id INTEGER PRIMARY KEY AUTOINCREMENT,

title TEXT NOT NULL, description TEXT, date TEXT NOT NULL, time TEXT)');

});

}

function loadEventsForSelectedDate() { eventsModel.clear(); db.transaction(function(tx) {

var rs = tx.executeSql('SELECT * FROM events WHERE date=? ORDER BY time', [selectedDateString]);

for (var i = 0; i < rs.rows.length; i++) { eventsModel.append(rs.rows.item(i));

}

});

}

33