
Готовое_КР_Заметки
.pdf
Рисунок 3.7 – Главный экран при 13 сохраненных заметках
Также пользователь может удалить ненужную заметку с возможностью отмены удаления (Рисунок 3.8)
24

Рисунок 3.8– Работа удаления заметки
Также приложение ориентировано под смену темы на устройстве. (Рисунок 3.9)
25

Рисунок 3.9– Смена темы на устройстве
3.3 Входные данные (организация и предварительная подготовка входных данных)
Приложение "Заметки" принимает и обрабатывает следующие виды входных данных: любые символы.
26
ЗАКЛЮЧЕНИЕ
Впроцессе выполнения данной курсовой работы был успешно реализован мобильное приложение “Заметки” для операционной системы Aurora, использующее язык программирования C++ и среду разработки AuroraIDE. Поставленная цель, заключающаяся в приобретении практических навыков разработки мобильных приложений, была достигнута в полной мере.
Входе работы над проектом были изучены основы разработки под Aurora, включая особенности работы с UI-элементами, жизненным циклом приложения и механизмом взаимодействия с пользователем. Был освоен язык C++ и принципы объектно-ориентированного программирования, необходимые для структурирования кода и разработки функциональных модулей. С помощью AuroraIDE были созданы элементы пользовательского интерфейса, обеспечивающие интуитивно понятный и удобный способ взаимодействия с приложением.
Врамках реализации функциональности приложения были разработаны механизмы создания, редактирования, удаления и просмотра заметок, а также реализована функция сохранения и загрузки данных, обеспечивающая постоянное хранение пользовательской информации. Были также освоены навыки работы с локальной базой данных, что позволило обеспечить надежное хранение заметок даже после перезагрузки устройства.
Результатом работы является полноценное мобильное приложение “Заметки”, готовое к использованию на устройствах под управлением Aurora. Приложение демонстрирует практическое применение полученных знаний и навыков, а также служит основой для дальнейшего развития и улучшения.
Впроцессе работы над курсовой были выявлены и преодолены ряд трудностей, что способствовало более глубокому пониманию процесса разработки мобильных приложений. Были получены ценные навыки в области отладки и тестирования, что является неотъемлемой частью процесса разработки качественного программного продукта. [5]
27
СПИСОК ИСПОЛЬЗОВАННЫХ ИСТОЧНИКОВ
1.Лучшие приложения-конвертеры [Электронный ресурс]. – URL: https://www.makeuseof.com (дата обращения 15.05.2025).
2.Best Base Converter Apps for Android [Электронный ресурс] // XDA Developers. – 2023. – URL: https://www.xda-developers.com/best-base- converterapps-android (дата обращения: 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://onlineedu.mirea.ru (дата обращения: 20.05.2025).
28
ПРИЛОЖЕНИЯ
Приложение А – Код программы MainPage.qml Приложение Б – Код программы EmptyPage.qml Приложение В – Код программы DatabaseHandler.js
29

Приложение А
Листинг 1 – MainPage.qml
import QtQuick 2.0
import Sailfish.Silica 1.0
import "DatabaseHandler.js" as DatabaseHandler
Page {
id: mainPage
property var db: DatabaseHandler.initializeDatabase() property var noteList: DatabaseHandler.getAllTitles(db) || []
function refreshNotes() {
noteList = DatabaseHandler.getAllTitles(db);
}
Rectangle{
width: parent.width height: parent.height
color:Theme.rgba(Theme.highlightBackgroundColor,Theme.highlightBackgroundOpacit
y)
Column {
width: parent.width spacing: Theme.paddingLarge anchors.fill: parent
anchors.margins: Theme.horizontalPageMargin Rectangle{
width:parent.width
color: Theme.backgroundGlowColor height:80
Text{ text:"Заметки"
color:Theme.primaryColor anchors.centerIn: parent font.pixelSize: Theme.fontSizeLarge
}
}
// Кнопка создания новой заметки
Button { color:Theme.highlightColor Text{
anchors.centerIn: parent font.pixelSize: 30
color: Theme.primaryColor text: "Создать новую заметку"
}
width: parent.width
onClicked: pageStack.push(Qt.resolvedUrl("EmptyPage.qml"), {db: db}) anchors.horizontalCenter: parent.horizontalCenter
30

Продолжение листинга 1
}
// Заголовок списка заметок
Item {
width: parent.width
height: Theme.itemSizeSmall
Label { id:mylabel
text: "Мои заметки" font.pixelSize:50
color: Theme.primaryColor anchors {
left: parent.left leftMargin: 10
verticalCenter: parent.verticalCenter
}
}
Label {
text: "(" + noteList.length + ")" font.pixelSize: 40
color: Theme.primaryColor anchors {
left: mylabel.right leftMargin: 10
verticalCenter: parent.verticalCenter
}
}
}
// Список существующих заметок
SilicaListView {
id: notesListView width: parent.width
height: parent.height - y - Theme.paddingLarge model: noteList
delegate: ListItem { id: listItem
width: parent.width
contentHeight: Theme.itemSizeMedium
//Фон элемента списка
Rectangle { anchors.fill: parent
opacity: listItem.highlighted ? 0.5 : 0.1
}
//Текст заметки
Label {
anchors.verticalCenter: parent.verticalCenter
31

Продолжение листинга 1
text: modelData anchors.left:parent.left anchors.leftMargin: 40 color: Theme.primaryColor
truncationMode: TruncationMode.Fade font.pixelSize: 45
}
// Разделитель между элементами
Separator { anchors {
left: parent.left right: parent.right bottom: parent.bottom
}
color: Theme.primaryColor horizontalAlignment: Qt.AlignHCenter
}
onClicked: { pageStack.push(Qt.resolvedUrl("EmptyPage.qml"), {
noteTitle: modelData, db: db
});
}
}
VerticalScrollDecorator {}
ViewPlaceholder {
enabled: noteList.length === 0 text: "Нет сохраненных заметок"
hintText: "Нажмите 'Создать новую заметку'"
}
}
}
}
Component.onCompleted: refreshNotes()
onStatusChanged: {
if (status === PageStatus.Active) { refreshNotes();
}
}
}
32

Приложение Б
Листинг 2 – EmptyPage.qml
import QtQuick 2.0
import Sailfish.Silica 1.0
import "DatabaseHandler.js" as DatabaseHandler
Page {
id: notePage
property string noteTitle: "" property var db
property bool isNewNote: noteTitle === ""
function saveNote() {
DatabaseHandler.saveNote(db, noteTitle, contentArea.text); pageStack.pop();
}
Rectangle{
width: parent.width height:parent.height color:"#FFE4C4"
Column {
width: parent.width spacing: Theme.paddingLarge anchors.fill: parent
anchors.margins: Theme.paddingLarge
TextField {
id: titleField width: parent.width color:"black"
placeholderText: "Введите название заметки" placeholderColor: "black"
text: noteTitle
visible: isNewNote || editMode
}
// Текст заметки
TextArea {
id: contentArea width: parent.width
height: parent.height - buttonRow.height - (titleField.visible ? titleField.height : 0) - Theme.paddingLarge*3
placeholderText: "Введите текст заметки..." placeholderColor: "black"
text: isNewNote ? "" : DatabaseHandler.getNote(db, noteTitle) || "" color:"black"
}
// Ряд кнопок
Row {
id: buttonRow width: parent.width
spacing: Theme.paddingMedium
33