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

Готовое_КР_Калькулятор_индекса_массы_тела

.pdf
Скачиваний:
0
Добавлен:
07.06.2025
Размер:
1.59 Mб
Скачать

В ходе выполнения курсовой работы были выполнены следующие задачи:

1.Проведен анализ существующих инструментов для разработки ПО под ОС «Аврора» и определен среди них наиболее подходящий;

2.Спроектирован пользовательский интерфейс приложения в соответствии с принятыми стандартами целевой операционной системы;

3.Реализована логика расчета массы тела по модифицированной формуле Кетле с учетом пола и индекса Соловьева;

4.Проведено ручное тестирование разработанного приложение для

обеспечения ее корректной работы.

С использованием среды разработки «Аврора SDK» было разработано мобильное приложение, которое полностью соответствует техническому заданию и реализующее следующий функционал:

ввод данных должен производиться с использованием экранной клавиатуры;

вывод на экран результатов должен происходить после заполнение всех полей;

после вывода на экран информация, должна содержать в себе сведение о типе телосложение, коэффициент индекса массы тела, цветовые категории индекса массы тела, диапазон верхнего и нижнего предела нормального веса;

приложение должно краткую информацию о себе и лицензию.

Курсовой проект был разработан и защищен в срок, согласно датам,

указанным этапах разработки находящихся техническом задание. Разработанное приложение функционально и позволяет в полной мере выполнять поставленные задачи по расчету индекса массы тела человека.

44

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

1.Указ Президента Российской Федерации "О мерах по обеспечению технологической независимости и безопасности критической информационной инфраструктуры Российской Федерации." от 30.03.2022. № 166 // Официальный интернет-портал правовой информации. – 2022

2.Sailfish OS - MeeGo revived to give best alternative to Tizen OS : // techtracker.in URL: https://www.techtracker.in/2022/04/sailfish-os-jolla-revives- meego-and.html (дата обращения: 29.05.2025).

3.Операционная система Аврора 5.1.3 // Портал разработчиков ОС Аврора URL: https://developer.auroraos.ru/release_notes/os_5.1.3.85 (дата обращения:

29.05.2025).

4. Аврора сертификат ФСБ // Документация ОС Аврора URL: https://docs.auroraos.ru/files/%D0%90%D0%B2%D1%80%D0%BE%D1%80%D0

%B0%20%D0%A4%D0%A1%D0%91.pdf (дата обращения: 29.05.2025).

5. Муравейко А.Ю. Альтернативные операционные системы / А.Ю. Муравейко // Материалы научно-технической конференции. «Перспективное развитие науки и технологий – 2020». – Курск : ЮЗГУ 30 октября 2020. – С. 169–

173.

6.Балабаев С.А. Оценка вычислительных возможностей мобильных устройств на платформе ОС Аврора / С.А. Балабаев, С.А. Лупин // Материалы научно-технической конференции. «Микроэлектроника и информатика – 2023».

Зеленоград : НИУ МИЭТ 20–21 апреля 2023. – С. 51–56.

7.Мобильные устройства на ОС Аврора // auroraos.ru URL: https://auroraos.ru/devices (дата обращения: 29.05.2025).

8.Неретин В.М. Исследование возможности подключения к устройствам умного дома с помощью Aurora OS // В.М. Неретин, П.С. Новиков // Вестник науки : журнал. – 2024. № 1. – С. 490–497.

9.About Qt // Qt wiki URL: https://wiki.qt.io/About_Qt (дата обращения:

29.05.2025).

45

ПРИЛОЖЕНИЕ А

Листинг A.1 — Mainpage.qml

import QtQuick 2.0

import Sailfish.Silica 1.0

Page {

objectName: "mainPage"

SilicaListView {

anchors.fill: parent

header: Column {

width: parent.width

height: header.height + mainColumn.height + Theme.paddingLarge

PageHeader { id: header

title: "ИМТ" extraContent.children: [

IconButton {

objectName: "aboutButton"

icon.source: "image://theme/icon-m-about" anchors.verticalCenter: parent.verticalCenter onClicked:

pageStack.push(Qt.resolvedUrl("AboutPage.qml"))

}

]

}

Column {

id: mainColumn width: parent.width

spacing: Theme.paddingLarge

TextField { id: weight

focus: true

inputMethodHints: Qt.ImhFormattedNumbersOnly label: qsTrId("введите вес в кг")

EnterKey.iconSource: "image://theme/icon-m-enter-next" EnterKey.onClicked: height.focus = true

}

TextField { id: height

focus: true

inputMethodHints: Qt.ImhFormattedNumbersOnly label: qsTrId("введите рост в см")

EnterKey.iconSource: "image://theme/icon-m-enter-next" EnterKey.onClicked: circle.focus = true

}

TextField { id: circle

focus: true

inputMethodHints: Qt.ImhFormattedNumbersOnly label: qsTrId("окружность запястья в см")

}

ComboBox {

id: combo

46

Продолжение листинга A.1

label: qsTrId("Выберите пол:") currentIndex: 0

menu: ContextMenu {

MenuItem {

//% "automatic"

text: qsTrId("мужской")

}

MenuItem {

//% "manual"

text: qsTrId("женский")

}

}

}

Button {

id: calculateButton

anchors.horizontalCenter: parent.horizontalCenter text: "ВЫЧИСЛИТЬ"

onClicked: onCalculateClicked()

}

Label {

id: result1

anchors.horizontalCenter: parent.horizontalCenter

}

Label {

id: result2

anchors.horizontalCenter: parent.horizontalCenter

}

Label {

id: result3

anchors.horizontalCenter: parent.horizontalCenter

}

}

function onCalculateClicked(){ var h=Number(height.text); var w=Number(weight.text); var c=Number(circle.text); if

(isNullInField(height.text)||isNullInField(weight.text)||isNullInField(circle.

text)){

result1.text = "Заполните все поля!"; result2.text = "";

result3.text = ""; return;

}

var gen,index,s;

if (combo.currentIndex===0){ gen=19;

}else{

gen=16;

}

h=h/100;

index=w/(h*h);

index=index*(gen/c); if(index<16)s="дефицит веса";

else if(index>=16&&index<20)s="Недостаточный вес"; else if(index>=20&&index<25)s="Норма";

47

Продолжение листинга A.1

else if(index>=25&&index<30)s="Предожирение";

else if(index>=30&&index<35)s="Первая степень ожирения"; else if(index>=35&&index<40)s="Вторая степень ожирения"; else s="Морбидное ожирение";

result1.text = somatoType(gen,c) + "\nИМТ="+index.toFixed(2);

result2.text = s if(s==="Норма"){

result2.color = "green" }else{

result2.color = "red"

}

result3.text = normalMassMin(c,h,gen) + "\n" + normalMassMax(c,h,gen);

}

function isNullInField(p){ return p.length === 0;

}

function normalMassMin(x,y,z){ var im=x*(y*y)/z;

return "Нижний предел нормального веса:\n"+20*im.toFixed(2)+" кг";

}

function normalMassMax(x,y,z){ var im=x*(y*y)/z;

return "Верхний предел нормального веса:\n"+25*im.toFixed(2)+"

кг";

}

function somatoType(a,b){ var s="";

var asthenic = "Тип телосложения: астенический.";

var normosthenic = "Тип телосложения: нормостенический"; var hypersthenic = "Тип телосложения: гиперстенический"; switch(a){

case 19: if(b<18)s=asthenic;

else if(b>=18&&b<=20)s=normosthenic; else s=hypersthenic;

break; case 16:

if(b<15)s=asthenic;

else if(b>=15&&b<=17)s=normosthenic; else s=hypersthenic;

break;

default:

break;

}

return s;

}

}

VerticalScrollDecorator {}

}

}

Листинг A.2 — AboutPage.qml

import QtQuick 2.0

import Sailfish.Silica 1.0 Page {

objectName: "aboutPage" allowedOrientations: Orientation.All SilicaFlickable {

objectName: "flickable" anchors.fill: parent

48

Продолжение листинга A.2

contentHeight: layout.height + Theme.paddingLarge Column {

id: layout objectName: "layout" width: parent.width PageHeader {

objectName: "pageHeader"

title: qsTr("About Application")

}

Label {

objectName: "descriptionText"

anchors { left: parent.left; right: parent.right; margins: Theme.horizontalPageMargin }

color: palette.highlightColor font.pixelSize: Theme.fontSizeSmall textFormat: Text.RichText

wrapMode: Text.WordWrap

text: qsTr("#descriptionText")

}

SectionHeader {

objectName: "licenseHeader"

text: qsTr("3-Clause BSD License")

}

Label {

objectName: "licenseText"

anchors { left: parent.left; right: parent.right; margins: Theme.horizontalPageMargin }

color: palette.highlightColor font.pixelSize: Theme.fontSizeSmall textFormat: Text.RichText

wrapMode: Text.WordWrap text: qsTr("#licenseText")

}

}

}

}

Листинг A.3 — bmi.qml

import QtQuick 2.0

import Sailfish.Silica 1.0 ApplicationWindow {

objectName: "applicationWindow"

initialPage: Qt.resolvedUrl("pages/MainPage.qml") cover: Qt.resolvedUrl("cover/DefaultCoverPage.qml") allowedOrientations: defaultAllowedOrientations

}

Листинг A.4 — main.cpp

#include <auroraapp.h> #include <QtQuick>

int main(int argc, char *argv[])

{

QScopedPointer<QGuiApplication> application(Aurora::Application::application(argc, argv));

application->setOrganizationName(QStringLiteral("ru.alexkdeveloper")); application->setApplicationName(QStringLiteral("bmi")); QScopedPointer<QQuickView> view(Aurora::Application::createView()); view-

>setSource(Aurora::Application::pathTo(QStringLiteral("qml/bmi.qml"))); view->show();

return application->exec();

}

49