Разработка приложения для описания класса для объектов-векторов, задаваемых координатами концов в трехмерном пространстве в среде 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