Разработка графического приложения для программных проектов на Agile

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

Рубрика Программирование, компьютеры и кибернетика
Вид дипломная работа
Язык русский
Дата добавления 15.09.2018
Размер файла 1,8 M

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

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

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

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

Список литературы

1. Ken Schwaber, Jeff Sutherland. The Scrum Guide. The definitive Guide to Scrum: The Rules of the Game. 2017.

2. Ajay Reddy. The Scrumban [R] Evolution: Getting the Most Out of Agile, Scrum, and Lean Kanban. 2015.

3. Charles G. Cobb. Making Sense of Agile Project Management: Balancing Control and Agility, by Wiley, 2011.

4. Louise Ledbrook, “Waterfall Project Management: An Overview”, 2012

5. Michael Cohn. Succeeding with Agile: Software Development Using Scrum, by Addison-Wesley Professional, 2009. - 504 p.

6. David Anderson, Kanban: Successful Evolutionary Change for Your Technology Business, 2010.

7. Кеннет Рубин. Основы Scrum: Практическое руководство по гибкой разработке ПО = Essential Scrum: A Practical Guide to the Most Popular Agile Process. -- М.: «Вильямс», 2016.

8. Кент Бек: Экстремальное программирование -- Питер, 2002.

9. Кен Ауэр, Рой Миллер: «Экстремальное программирование: постановка процесса с первых шагов и до победного конца» -- Питер, 2003.

10. Е.Р. Алексеев, Г. Г. Злобин, Программирование на языке С++ в среде Qt Creator, 2015. -448с.

11. Шлее М. Qt 5.3. Профессиональное программирование на C++. -- СПб.: БХВ-Петербург, 2015. -- 928 с

Приложение

//infoclass.h

enum TYPE { OPEN, DEVELOPMENT, PLANNED, INPROGRESS, INTESTING, MAINTENANCE, DONE };

class InfoClass {

public:

InfoClass(const int id);

bool CmpID(int id_);

int getID();

void add_info(QString name, QString description, TYPE type);

void save_creation_date(QDate creation);

void save_dates(QDate planned_end, QDate completion_date);

QString getName();

QString getDescription();

TYPE getType();

QDate getCreationDate();

QDate getPlannedEndDate();

QDate getCompletionDate();

private:

int id;

QString name;

QString description;

TYPE type;

QDate CreationDate;

QDate PlannedEndDate;

QDate CompletionDate;

};

//personinfo.h

class PersonInfo

{

public:

PersonInfo(const int id_);

void add_info(QString first, QString second, QString email, QString phone, QString path); //QPicture

bool CmpID(int id_);

int getID();

QString getFirstName();

QString getSecondName();

QString getPhoneNumber();

QString getEmailAdress();

QString getPicturePath();

void setFirstName(QString);

void setSecondName(QString);

void setPhoneNumber(QString);

void setEmailAdress(QString);

void setPicturePath(QString);

private:

QString first_name;

QString second_name;

QString email_adress;

QString phone_number;

QString picture_path;

int id;

};

//editdialog.h

class EditDialog

{

Q_OBJECT

public:

EditDialog ()

~EditDialog();

QString getName();

QString getDescription();

TYPE getType();

virtual void getClass(TaskInfo* task_info);

QDate getCompletionDate_();

QDate getCreationDate_();

QDate getPlannedEndDate_();

private:

QString name;

QString description;

TYPE type;

QDate CompletionDate;

QDate PlannedEndDate;

QDate CreationEndDate;

};

//mainwindow.h

class MainWindow : public QMainWindow

{

Q_OBJECT

public:

explicit MainWindow(QWidget *parent = 0);

~MainWindow();

QString string_wrapping(QString string);

void draw_sprint_column(QString name, QString date, int id);

void move_tasks_to_sprint_window(QDynamicButton *button);

void move_tasks_to_board(QDynamicButton *button);

void refresh_weight();

private slots:

void on_AddPerson_Button_clicked();

void on_AddProject_Button_clicked();

void on_AddTaskButton_clicked();

void ShowPersonInfo_slot();

void ShowProjectInfo_slot();

void ShowSprintInfo_slot();

void EditTaskInfo_slot();

void on_AddSprint_Button_clicked();

void on_tabWidget_currentChanged(int index);

private:

Ui::MainWindow *ui;

PersonInfo* person_info;

ProjectInfo* project_info;

TaskInfo* task_info;

SprintInfo* sprint_info;

std::vector<PersonInfo> VecPerson_Info;

std::vector<ProjectInfo> VecProject_Info;

std::vector<TaskInfo> VecTask_Info;

std::vector<SprintInfo> VecSprint_Info;

QHBoxLayout *SprintWindow_layout;

QSpacerItem *h_spacer;

QString style_string_task_dev;

QString style_string_task_maint;

QString style_string_person;

QString style_string_backlog_sprint;

QString style_string_sprint;

};

//mainwindow.cpp

void MainWindow::ShowPersonInfo_slot()

{

QDynamicButton *button = (QDynamicButton*) sender();

AddPersonDialog edit_person(this);

int right_id = 0;

for (unsigned int i = 0; i < VecPerson_Info.size(); i++)

{

if(VecPerson_Info.at(i).CmpID(button->getID()))

right_id = i;

}

edit_person.getClass(&VecPerson_Info.at(right_id));

switch(edit_person.exec()) {

case QDialog::Accepted: {

qDebug() << "Accepted";

button->setText(VecPerson_Info.at(right_id).getFirstName() + "\n email: " + VecPerson_Info.at(right_id).getEmailAdress());

break;

}

case QDialog::Rejected:

qDebug() << "Rejected";

break;

default:

qDebug() << "Unexpected";

}

}

void MainWindow::ShowProjectInfo_slot()

{

QDynamicButton *button = (QDynamicButton*) sender();

AddProjectDialog edit_project(this);

int right_id = 0;

for (unsigned int i = 0; i < VecProject_Info.size(); i++)

{

if(VecProject_Info.at(i).CmpID(button->getID()))

right_id = i;

}

edit_project.getClass(&VecProject_Info.at(right_id));

switch(edit_project.exec()) {

case QDialog::Accepted: {

qDebug() << "Accepted";

button->setText(VecProject_Info.at(right_id).getName());

break;

}

case QDialog::Rejected:

qDebug() << "Rejected";

break;

default:

qDebug() << "Unexpected";

}

}

void MainWindow::ShowSprintInfo_slot()

{

QDynamicButton *button = (QDynamicButton*) sender();

AddSprintDialog edit_sprint(this);

int right_id = 0;

for (unsigned int i = 0; i < VecSprint_Info.size(); i++)

{

if(VecSprint_Info.at(i).CmpID(button->getID()))

right_id = i;

}

edit_sprint.getClass(&VecSprint_Info.at(right_id));

switch(edit_sprint.exec()) {

case QDialog::Accepted: {

qDebug() << "Accepted";

button->setText(VecSprint_Info.at(right_id).getName() + "\n" + VecSprint_Info.at(right_id).getCreationDate().toString("dd.MM") + " - " + VecSprint_Info.at(right_id).getPlannedEndDate().toString("dd.MM"));

QLabel *label=this->findChild<QLabel *>(QString::number(VecSprint_Info.at(right_id).getID()) + "_sprint_label");

if(label != NULL)

{

label->setText(VecSprint_Info.at(right_id).getName() + "\n" +

QString::number(VecSprint_Info.at(right_id).getSumWeight()) + "/" + QString::number(VecSprint_Info.at(right_id).getMaxWeight()) + "pt " +

VecSprint_Info.at(right_id).getCreationDate().toString("dd.MM") + " - " + VecSprint_Info.at(right_id).getPlannedEndDate().toString("dd.MM"));

}

break;

}

case QDialog::Rejected:

qDebug() << "Rejected";

break;

default:

qDebug() << "Unexpected";

}

}

void MainWindow::EditTaskInfo_slot()

{

QDynamicButton *button = (QDynamicButton*) sender();

EditTaskDialog edit_task(this);

int right_id = 0;

for (int i = 0; i < VecTask_Info.size(); i++)

{

if(VecTask_Info.at(i).CmpID(button->getID()))

right_id = i;

}

edit_task.getClass(&VecTask_Info.at(right_id));

switch(edit_task.exec()) {

case QDialog::Accepted: {

qDebug() << "Accepted";

button->setText(string_wrapping(VecTask_Info.at(right_id).getName()) + "\n " + QString::number(VecTask_Info.at(right_id).getWeight()) + " pt");

VecTask_Info.at(right_id).setSprintID(-1);

for(int j = 0; j < VecSprint_Info.size(); j++)

{

if(VecTask_Info.at(right_id).getSprintName() == VecSprint_Info.at(j).getName())

VecTask_Info.at(right_id).setSprintID(VecSprint_Info.at(j).getID());

}

if(VecTask_Info.at(right_id).isDev())

button->setStyleSheet(style_string_task_dev);

else

button->setStyleSheet(style_string_task_maint);

if(ui->tabWidget->currentIndex() == 1)

switch(VecTask_Info.at(right_id).getType())

{

case OPEN:

ui->BacklogLayout->addWidget(button);

break;

case PLANNED:

ui->ToDoLayout->addWidget(button);

break;

case INTESTING:

ui->InTestingLayout->addWidget(button);

break;

case INPROGRESS:

ui->InProgressLayout->addWidget(button);

break;

case DONE:

ui->DoneLayout->addWidget(button);

break;

default:

break;

}

else if(ui->tabWidget->currentIndex() == 2)

{

if(button->getID() == VecTask_Info.at(right_id).getID())

{

QLayout *layout=this->findChild<QLayout *>(QString::number(VecTask_Info.at(right_id).getSprintID())+"_sprint_layout");

if(layout != NULL)

{

layout->addWidget(button);

}

else

{

QLayout *layout=this->findChild<QLayout *>("BacklogSprintLayout");

if(layout != NULL) layout->addWidget(button);

}

}

refresh_weight();

}

break;

}

case QDialog::Rejected:

qDebug() << "Rejected";

break;

default:

qDebug() << "Unexpected";

}

}

void MainWindow::on_tabWidget_currentChanged(int index)

{

if(index == 1)

{

QLayout *layout=this->findChild<QLayout *>("BacklogSprintLayout");

if(layout != NULL)

{

if(layout->count() != 0)

{

do{

QDynamicButton *button = qobject_cast<QDynamicButton*>(layout->itemAt(0)->widget());

move_tasks_to_board(button);

}while(layout->count() != 0);

}

}

for(int i = 0; i < VecSprint_Info.size(); i ++)

{

QLayout *layout=this->findChild<QLayout *>(QString::number(VecSprint_Info.at(i).getID())+"_sprint_layout");

if(layout != NULL)

{

if(layout->count() != 0)

{

do{

QDynamicButton *button = qobject_cast<QDynamicButton*>(layout->itemAt(0)->widget());

move_tasks_to_board(button);

}while(layout->count() != 0);

}

}

}

}

else if(index == 2)

{

if(ui->BacklogLayout->count() != 0)

{

do{

QDynamicButton *button = qobject_cast<QDynamicButton*>(ui->BacklogLayout->itemAt(0)->widget());

move_tasks_to_sprint_window(button);

}while(ui->BacklogLayout->count() != 0);

}

if(ui->ToDoLayout->count() != 0)

{

do{

QDynamicButton *button = qobject_cast<QDynamicButton*>(ui->ToDoLayout->itemAt(0)->widget());

move_tasks_to_sprint_window(button);

}while(ui->ToDoLayout->count() != 0);

}

if(ui->InProgressLayout->count() != 0)

{

do{

QDynamicButton *button = qobject_cast<QDynamicButton*>(ui->InProgressLayout->itemAt(0)->widget());

move_tasks_to_sprint_window(button);

}while(ui->InProgressLayout->count() != 0);

}

if(ui->InTestingLayout->count() != 0)

{

do{

QDynamicButton *button = qobject_cast<QDynamicButton*>(ui->InTestingLayout->itemAt(0)->widget());

move_tasks_to_sprint_window(button);

}while(ui->InTestingLayout->count() != 0);

}

if(ui->DoneLayout->count() != 0)

{

do{

QDynamicButton *button = qobject_cast<QDynamicButton*>(ui->DoneLayout->itemAt(0)->widget());

move_tasks_to_sprint_window(button);

}while(ui->DoneLayout->count() != 0);

}

refresh_weight();

}

}

void MainWindow::refresh_weight()

{

for(int j = 0; j < VecSprint_Info.size(); j++)

{

VecSprint_Info.at(j).setSumWeight();

QLayout *layout=this->findChild<QLayout *>(QString::number(VecSprint_Info.at(j).getID())+"_sprint_layout");

if(layout != NULL)

{

if(layout->count() != 0)

{

for(int i = 0; i < layout->count(); i++)

{

QDynamicButton *button = qobject_cast<QDynamicButton*>(layout->itemAt(i)->widget());

for(int ind = 0; ind < VecTask_Info.size(); ind++)

{

if(button->getID() == VecTask_Info.at(ind).getID())

{

VecSprint_Info.at(j).change_weight(VecTask_Info.at(ind).getWeight());

if(VecTask_Info.at(ind).isDev())

ecSprint_Info.at(j).change_dev_weight(VecTask_Info.at(ind).getWeight());

else VecSprint_Info.at(j).change_maint_weight(VecTask_Info.at(ind).getWeight());

}

}

}

}

}

QLabel *label=this->findChild<QLabel *>(QString::number(VecSprint_Info.at(j).getID()) + "_sprint_label");

if(label != NULL)

{

int dev_w = (VecSprint_Info.at(j).getMaxWeight()/100)*VecSprint_Info.at(j).getPercentDevelopment() + 0.5;

int maint_w = (VecSprint_Info.at(j).getMaxWeight()/100)*VecSprint_Info.at(j).getPercentMaintenance() + 0.5;

label->setText(VecSprint_Info.at(j).getName() + "\n" +

"Development " + QString::number(VecSprint_Info.at(j).getDevWeight()) + "/" + QString::number(dev_w) + "pt" +

"\nMaintenance " + QString::number(VecSprint_Info.at(j).getMaintWeight()) + "/" + QString::number(maint_w) + "pt" +

"\n" + VecSprint_Info.at(j).getCreationDate().toString("dd.MM") + " - " + VecSprint_Info.at(j).getPlannedEndDate().toString("dd.MM"));

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

...

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

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

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

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

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

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

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

  • Выбор состава технических и программных средств для создания данного приложения "Экзаменатор", использование среды разработки Borland Delphi. Основные компоненты и спецификация программы. Используемые технические средства, описание и запуск программы.

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

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

    курсовая работа [621,5 K], добавлен 14.01.2018

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

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

  • Разработка Web-приложения для ООО "Научно-производственная фирма по применению информационных технологий в электрических сетях". Техническое задание, проектирование процессов, создание базы данных, разработка дизайна, тестирование и отладка сайта.

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

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

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

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

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

  • Классификация служебных программных средств. Файловая структура операционных систем. Основы графического интерфейса пользователя Windows XX. Анализ алгоритмов решения задач. Описание процесса разработки программного обеспечения и результатов работы.

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

  • Мониторинг сервисов веб-приложения. Проблема отслеживания большого количества сервисов, поддерживающих работу веб-приложения, ее решение с помощью "Service discovery"-инструментов. Применение программного инструмента Consul как клиент-серверной системы.

    статья [184,4 K], добавлен 10.12.2016

  • Интегрированная среда разработки Lazarus. Среда программных продуктов Lazarus, объекты программных компонентов. Палитра компонентов Standard, Additional. Разработка справочной системы: структура проекта, интерфейс программы, компоненты приложения.

    курсовая работа [695,2 K], добавлен 08.01.2023

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

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

  • Изучение предметной области и выявление основных задач Интернет-магазинов. Выбор средств разработки системы, базы данных, инфологической и даталогической моделей. Разработка программного приложения, программных модулей, представленных экранными формами.

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

  • Основные этапы разработки web-сайта факультета информатики: структурная схема функционирования, разработка интерфейса (регистрация посетителей, просмотр новостей, просмотр информации о факультете). Прописывание основных программных кодов приложения.

    контрольная работа [4,9 M], добавлен 02.12.2009

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

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

  • Изучение основ программирования и создание полноценного приложения в среде программирования Delphi. Разработка эскизного и технического проектов программы. Внедрение выполнения программы. Разработка рабочего проекта, спецификация и текст программы.

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

  • Классификация пользователей проекта Web-приложения "Такси "Люкс". Выбор основных методов и средств разработки. Описание дизайна сайта. Исходный код обработчиков основных событий на страницах. Расчет себестоимости разработки программного продукта.

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

  • Функциональные возможности графического редактора Paint. Устройства персонального компьютера и их назначения. Стандартные программы операционной системы Windows. Приложения системы графического редактора к решению задач графики, теоретической механики.

    курсовая работа [156,5 K], добавлен 05.12.2008

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

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

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