Разработка приложения для описания класса для объектов-векторов, задаваемых координатами концов в трехмерном пространстве в среде QT Creator

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

Рубрика Программирование, компьютеры и кибернетика
Вид отчет по практике
Язык русский
Дата добавления 11.12.2020
Размер файла 858,3 K

Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже

Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.

Размещено на http://www.allbest.ru

Размещено на http://www.allbest.ru

Разработка приложения для описания класса для объектов-векторов, задаваемых координатами концов в трехмерном пространстве в среде QT Creator

Рахманова Г.А.

Введение

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

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

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

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

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

В соответствии с поставленной целью, решаются следующие задачи:

1. Составить описание класса для объектов-векторов, задаваемых координатами концов в трехмерном пространстве. Обеспечить операции сложения и вычитания векторов с получением нового вектора (суммы или разности), вычисления скалярного произведения двух векторов, длины вектора, косинуса угла между векторами.

2. Написать программу, демонстрирующую работу с этим классом. Программа должна содержать меню, позволяющее осуществить проверку всех методов класса.

3. Разработать графический интерфейс пользователя (на ЯП С++)), предусмотреть возможность сохранения полученных результатов в файл.

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

5. Место проведения практики: НЧИ КФУ, 423800 г.Набережные Челны, пр. Мира, 16а.

6. Время проведения практики: с 6 июля 2020 г. по 18 июля 2020г.

1. Теоретические сведения

Qt Creator -- кроссплатформенная свободная IDE для разработки на С, С++ и QML. Разработана Trolltech (Digia) для работы с фреймворком Qt. Включает в себя графический интерфейс отладчика и визуальные средства разработки интерфейса как с использованием QtWidgets, так и QML. Поддерживаемые компиляторы: GCC, Clang, MinGW, MSVC.

Основная задача Qt Creator -- упростить разработку приложения с помощью фреймворка Qt на разных платформах. Поэтому среди возможностей, присущих любой среде разработки, есть и специфичные, такие как отладка приложений на QML и отображение в отладчике данных из контейнеров Qt, встроенный дизайнер интерфейсов: как на QML, так и на QtWidgets.

QtCreator поддерживает системы сборки qmake, cmake, autotools, с версии 2.7 qbs. Для проектов, созданных под другими системами, может использоваться в качестве редактора исходных кодов. Есть возможность редактирования этапов сборки проекта.

Также IDE нативно поддерживает системы контроля версии, такие как Subversion, Mercurial, Git, CVS, Bazaar, Perforce. Начиная с версии 2.5, в поле комментария к правке поддерживается автодополнение.

В QtСreator реализовано автодополнение, в том числе ключевых слов, введённых в стандарте C++11 (начиная с версии 2.5), подсветка кода (её определение аналогично таковому в Kate, что позволяет создавать свои виды подсветок или использовать уже готовые). Также, начиная с версии 2.4, есть возможность задания стиля выравнивания, отступов и постановки скобок.

Реализован ряд возможностей при работе с сигнатурами методов, а именно:

· автогенерация пустого тела метода после его обновления;

· возможность автоматически изменить сигнатуру метода в определении, если она была изменена в объявлении и наоборот;

· возможность автоматически поменять порядок следования аргументов.

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

2. Создание проекта

В качестве среды разработки я выбрал QTCreator версия 5.14.2.

Создадим проект:

Рисунок 1. Создание проекта

Таким образом, мы создали проект с поддержкой виджетов.

Рисунок 2. Добавление заголовочных файлов

3. Разработка класса

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

Dialog.h

#ifndef DIALOG_H

#define DIALOG_H

#include <QDialog>

namespace Ui {

class Dialog;

}

class Dialog: public QDialog

{

Q_OBJECT

public:

explicit Dialog(QWidget *parent = nullptr);

~Dialog();

double v1[3],v2[3];

private slots:

void on_buttonBox_accepted();

void on_buttonBox_rejected();

private:

Ui::Dialog *ui;

};

#endif // DIALOG_H

dialog2.h

#ifndef DIALOG2_H

#define DIALOG2_H

#include <QDialog>

namespace Ui {

class Dialog2;

}

class Dialog2: public QDialog

{

Q_OBJECT

public:

explicit Dialog2(QWidget *parent = nullptr);

~Dialog2();

double v[3];

private slots:

void on_buttonBox_accepted();

void on_buttonBox_rejected();

private:

Ui::Dialog2 *ui;

};

#endif // DIALOG2_H

#ifndef MAINWINDOW_H

#define MAINWINDOW_H

#include <QMainWindow>

namespace Ui {

class MainWindow;

}

class MainWindow: public QMainWindow

{

Q_OBJECT

public:

explicit MainWindow(QWidget *parent = nullptr);

~MainWindow();

QStringtext[1000],alltext;

int n=0;

int index;

private slots:

void on_comboBox_activated(int index);

void on_SaveButton_clicked();

private:

Ui::MainWindow *ui;

};

#endif // MAINWINDOW_H

#ifndef VEKTOR_H

#define VEKTOR_H

#include<iostream>

#include <QString>

using namespace std;

//Класс вектор, реализующий создание вектора, математические действия над вектором

classVektor

{

public:

double X,Y,Z;

Vektor();

Vektor(double x,doubley,double z);

Vektor operator+(Vektor a);

Vektor operator-(Vektor a);

double operator*(Vektor a);

double Lenght();

double Cosine(Vektor a);

QStringPrint();

};

#endif // VEKTOR_H

#include "dialog.h"

#include "ui_dialog.h"

#include "vektor.h"

Dialog::Dialog(QWidget *parent):

QDialog(parent),

ui(new Ui::Dialog)

{

ui->setupUi(this);

}

Dialog::~Dialog()

{

delete ui;

}

//Методзадачиэлементовввектор

void Dialog::on_buttonBox_accepted()

{

v1[0]=ui->lineEdit->text().toDouble();

v1[1]=ui->lineEdit_2->text().toDouble();

v1[2]=ui->lineEdit_3->text().toDouble();

v2[0]=ui->lineEdit_4->text().toDouble();

v2[1]=ui->lineEdit_5->text().toDouble();

v2[2]=ui->lineEdit_6->text().toDouble();

accept();

}

void Dialog::on_buttonBox_rejected()

{

reject();

}

#include "dialog2.h"

#include "ui_dialog2.h"

Dialog2::Dialog2(QWidget *parent):

QDialog(parent),

ui(new Ui::Dialog2)

{

ui->setupUi(this);

}

Dialog2::~Dialog2()

{

delete ui;

}

//Методзадачиэлементовввектор

void Dialog2::on_buttonBox_accepted()

{

v[0]=ui->lineEdit->text().toDouble();

v[1]=ui->lineEdit_2->text().toDouble();

v[2]=ui->lineEdit_3->text().toDouble();

accept();

}

void Dialog2::on_buttonBox_rejected()

{

reject();

}

#include "mainwindow.h"

#include <QApplication>

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

{

QApplicationa(argc, argv);

MainWindow w;

w.show();

return a.exec();

}

#include "mainwindow.h"

#include "ui_mainwindow.h"

#include "dialog.h"

#include "dialog2.h"

#include "vektor.h"

#include <QFileDialog>

#include <QtGui>

MainWindow::MainWindow(QWidget *parent):

QMainWindow(parent),

ui(new Ui::MainWindow)

{

ui->setupUi(this);

ui->comboBox->addItem("Сложениевекторов.",0);

ui->comboBox->addItem("Вычитание векторов.",1);

ui->comboBox->addItem("Скалярное произведение двух векторов.",2);

ui->comboBox->addItem("Длина вектора.",3);

ui->comboBox->addItem("Косинус угла между векторами.",4);

}

MainWindow::~MainWindow()

{

delete ui;

}

//Методреализующийвыбордействий над вектором

void MainWindow::on_comboBox_activated(int index)

{

Dialog d;

Dialog2 d2;

switch (index)

{

case 0:

if(d.exec()==QDialog::Accepted)

{

Vektor v1(d.v1[0], d.v1[1], d.v1[2]);

Vektor v2(d.v2[0], d.v2[1], d.v2[2]);

Vektor v3;

v3=v1+v2;

text[n]="a="+v1.Print()+", b="+v2.Print();

n++;

text[n]="a+b="+v3.Print();

n++;

alltext+=text[n-2]+"\n"+text[n-1]+"\n";

ui->label->setText(alltext);

}

break;

case 1:

if(d.exec()==QDialog::Accepted)

{

Vektor v1(d.v1[0], d.v1[1], d.v1[2]);

Vektor v2(d.v2[0], d.v2[1], d.v2[2]);

Vektor v3;

v3=v1-v2;

text[n]="a="+v1.Print()+", b="+v2.Print();

n++;

text[n]="a-b="+v3.Print();

n++;

alltext+=text[n-2]+"\n"+text[n-1]+"\n";

ui->label->setText(alltext);

}

break;

case 2:

if(d.exec()==QDialog::Accepted)

{

Vektor v1(d.v1[0], d.v1[1], d.v1[2]);

Vektor v2(d.v2[0], d.v2[1], d.v2[2]);

double skalyar;

skalyar=v1*v2;

text[n]="a="+v1.Print()+", b="+v2.Print();

n++;

text[n]="a*b="+QString::number(skalyar);

n++;

alltext+=text[n-2]+"\n"+text[n-1]+"\n";

ui->label->setText(alltext);

}

break;

case 3:

if(d2.exec()==QDialog::Accepted)

{

Vektorv(d2.v[0], d2.v[1], d2.v[2]);

double lenght;

lenght=v.Lenght();

text[n]="a="+v.Print();

n++;

text[n]="|a|="+QString::number(lenght);

n++;

alltext+=text[n-2]+"\n"+text[n-1]+"\n";

ui->label->setText(alltext);

}

break;

case 4:

if(d.exec()==QDialog::Accepted)

{

Vektor v1(d.v1[0], d.v1[1], d.v1[2]);

Vektor v2(d.v2[0], d.v2[1], d.v2[2]);

double cosine;

cosine=v1.Cosine(v2);

text[n]="a="+v1.Print()+", b="+v2.Print();

n++;

text[n]="cos(a,b)="+QString::number(cosine);

n++;

alltext+=text[n-2]+"\n"+text[n-1]+"\n";

ui->label->setText(alltext);

}

break;

}

n++;

}

//Метод сохранения данных в файл

void MainWindow::on_SaveButton_clicked()

{

QStringfileName = QFileDialog::getSaveFileName(this, tr("Save File"),"",tr("Text Files (*.txt);;C++ Files (*.cpp *.h)"));

if (fileName != "")

{

QFile file(fileName);

if (!file.open(QIODevice::WriteOnly))

{

// error message

}

else

{

QTextStream stream(&file);

for (int i=0;i<n-1;i++)

{

stream<<text[i]<<"\r\n";

}

stream.flush();

file.close();

}

}

}

#include "vektor.h"

#include <cmath>

Vektor::Vektor()

{

this->X=0;

this->Y=0;

this->Z=0;

}

//Конструкторкласса,заданныйвручную

Vektor::Vektor(double x,doubley,double z)

{

this->X = x;

this->Y = y;

this->Z = z;

}

//Методвыводавычислений в окно приложения

QStringVektor::Print()

{

QString temp;

temp="{"+QString::number(X)+","+QString::number(Y)+","+QString::number(Z)+"}";

return temp;

}

//Перегрузка оператора сложения

VektorVektor::operator+(Vektor a)

{

return Vektor(this->X + a.X, this->Y + a.Y, this->Z + a.Z);

}

//Перегрузка оператора вычитания

VektorVektor::operator-(Vektor a)

{

return Vektor(this->X - a.X, this->Y - a.Y, this->Z - a.Z);

}

//Перегрузка оператора умножения

double Vektor::operator*(Vektor a)

{

return (this->X * a.X + this->Y * a.Y + this->Z * a.Z);

}

//Метод, возвращающий размер вектора

doubleVektor::Lenght()

{

return sqrt(pow(this->X,2) + pow(this->Y,2) + pow(this->Z,2));

}

//Метод вывода косинуса векторов

double Vektor::Cosine(Vektor a)

{

return (this->X * a.X + this->Y * a.Y + this->Z * a.Z)/(sqrt(pow(this->X,2) + pow(this->Y,2) + pow(this->Z,2))*sqrt(pow(a.X,2) + pow(a.Y,2) + pow(a.Z,2)));

}

3. Тестирование

Рисунок 3 - Окно приложения

Рисунок 4 - Окно добавления векторов

Рисунок 5 - Ввод элементов

Рисунок 6 - Вывод сложения, вычитания, умножения, длины, косинуса векторов

Рисунок 7 - Сохранение данных в файл

Рисунок 8 - Сохраненный файл

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

Заключение

В результате выполненной работы были получены навыки самостоятельной разработки в среде QT creator объектно-ориентированных приложений, имеющих развитый графический интерфейс пользователя (GUI), реализующих общепринятый шаблон «Модель - Представление», реализующих хранение данных на основе абстрактных структур данных с помощью контейнерных типов.

Цели и задачи производственной практики состояли в приобретении и закреплении практических навыков объектно-ориентированного программирования.

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

Считаю, что поставленные цели и задачи были достигнуты.

Литература

программный фреймворк кроссплатформенный

1. Дэвис Стефан Р. С++ для «чайников» / Р. Стефан Дэвис. - 4-е изд. - Москва: Издательский дом «Вильямс», 2003. - 336 с. - Текст: непосредственный.

2. Введение в информатику: Системное программное обеспечение компании Microsoft: лабораторный практикум / Составители: Балабанов И.П., Закиров А. М. ? Набережные Челны: Издательство Камской государственной инженерно- экономической академии, 2010. ? 28 с. - Текст: непосредственный.

3. Шлее М. Qt 5.10. Профессиональное программирование на С++ / М. Шлее. - Санкт-Петербург: БХВ-Петербург, 2018. - 1072 с. ? Текст: непосредственный.

4. Дэвис Стефан Р. С++ для «чайников» / Р. Стефан Дэвис. - 4-е изд. ? Москва: Издательский дом «Вильямс», 2003. - 336 с. ? Текст: непосредственный.

Размещено на Allbest.ru

...

Подобные документы

  • Создание, изучение и разработка приложение на Android. Среда разработки приложения DelphiXE5. Установка и настройка среды программирования. Этапы разработки приложения. Инструменты для упрощения конструирования графического интерфейса пользователя.

    курсовая работа [1,6 M], добавлен 19.04.2017

  • Разработка приложения с помощью среды Microsoft Visual Studio 2010 Express. Интерфейс приложения. Разработка конечного программного продукта, демонстрирующего работу многопоточного приложения, использующего взаимоисключение на основе критической секции.

    лабораторная работа [300,4 K], добавлен 21.07.2012

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

    курсовая работа [1,2 M], добавлен 07.07.2012

  • Основные концепции разработки приложения в трёхуровневой архитектуре. Проектное решение, реализующее модель реляционной БД. Спецификация на разработку интерфейса. Описание выполнения транзакций прибытия и убытия судна. Инсталляционные файлы приложения.

    курсовая работа [4,0 M], добавлен 26.12.2011

  • Преимущества операционной системы Android. Проектирование интерфейса приложений. Визуальные редакторы и средства кроссплатформенной разработки. Оптимизация игрового процесса, выбор фреймворка и библиотек. Классификация и характеристика игр по жанрам.

    дипломная работа [2,6 M], добавлен 10.07.2017

  • Создание программного обеспечения в среде Visual Basic for Applications для проведения теста по работе полушарий мозга человека. Описание команд. Разработка интерфейса и тестирование программы. Листинг приветствия и задаваемых пользователю вопросов.

    курсовая работа [387,1 K], добавлен 09.03.2014

  • Рассмотрение инфологической и даталогической модели базы данных кинотеатров города. Разработка базы данных в программе MS Access. Описание структуры приложения и интерфейса пользователя. Изучение SQL-запросов на вывод информации о кинотеатре и о фильме.

    курсовая работа [1,1 M], добавлен 04.09.2014

  • Общее определение JavaScript-библиотеки, виды библиотек. Создание клиентского приложения с использованием одного из существующий JS-фреймворков. Значение, виды и выбор фреймворка. Выбор приложения и его тематики. Написание программного кода, итоги работы.

    курсовая работа [545,8 K], добавлен 21.12.2013

  • Анализ создания виртуального окружения для разработки. Установка фреймворка Flask. Особенность настройки аутентификации и привилегий. Создание Python-файла и написание в нем простого веб-приложения. Запуск и проверка работоспособности приложения.

    лабораторная работа [2,1 M], добавлен 28.11.2021

  • Изучение инструментальной графической среды программирования промышленных контроллеров и языка программирования FBD. Разработка приложения, реализующего вычисление арифметических и логических выражений. Проверка работы приложения программой "Maple".

    контрольная работа [2,2 M], добавлен 26.05.2015

  • Разработка приложения для шифрования данных с помощью алгоритма DES5: процесс шифрования, расшифрования, получение ключей. Спецификация программы, процедуры и функции; описание интерфейса пользователя. Реализация задачи в среде программирования DELPHI.

    курсовая работа [812,6 K], добавлен 27.03.2012

  • Технология разработки пользовательского интерфейса в среде Delphi. Создание таблицы, меню, форм для ввода и редактирования данных. Принципы организации меню как элемента интерфейса пользователя. Реализация сортировки, фильтрации, вычислений в таблице.

    курсовая работа [1,6 M], добавлен 13.11.2012

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

    курсовая работа [86,7 K], добавлен 27.05.2012

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

    курсовая работа [2,8 M], добавлен 25.06.2017

  • Разработка программного кода и алгоритма действий приложения "калькулятор". Использование функций в программе Matlab. Разработка кнопок, опций, интерфейса, оформление. Части кода Matlab и тестовый набор. Инструкция пользователя по работе программы.

    курсовая работа [527,1 K], добавлен 27.09.2014

  • Практическая обработка навыков работы с платформами Qt Creator, Eclipse и с языками программирования Java и C++. Разработка программного продукта, состоящего из настольного и мобильного органайзера под операционные системы Windows XP, Vista и Android 2.3.

    дипломная работа [2,1 M], добавлен 16.06.2013

  • Разработка базы данных и приложения для автоматизации ведения кадрового учёта предприятия. Формирование таблицы анкетных данных. Разработка графического интерфейса пользователя клиентских приложений. Возможность подключения к удаленной базе данных.

    дипломная работа [47,6 K], добавлен 17.02.2009

  • Формирование входных и выходных данных, SQL–скрипт генерации таблиц базы данных. Создание интерфейса программного приложения и проектирование форм базы данных. Требования к аппаратно–программному обеспечению. Инструкции по установке и эксплуатации.

    курсовая работа [1,6 M], добавлен 08.02.2013

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

    дипломная работа [1,3 M], добавлен 20.12.2013

  • Требования к аппаратным и операционным ресурсам. Логическая и физическая организация. Состав основных классов проекта. Технико-экономическое обоснование разработки программного средства. Задержки при обработке данных. Разработка интерфейса приложения.

    дипломная работа [4,4 M], добавлен 16.06.2017

Работы в архивах красиво оформлены согласно требованиям ВУЗов и содержат рисунки, диаграммы, формулы и т.д.
PPT, PPTX и PDF-файлы представлены только в архивах.
Рекомендуем скачать работу.