Сделай Сам Свою Работу на 5

Добавление элемента в очередь





 

После нажатия кнопки «Поставить в очередь» пользователю предоставляется возможность ввести произвольные цифры в поле ввода «Номер», чтобы однозначно идентифицировать новый элемент. Ввод символов, отличных от цифр, невозможен, поскольку кнопка подтверждения остается неактивной, пустую строку оставить также нельзя.

 

Успешное добавление

 

В случае успешного добавления элемента пользователь увидит следующее сообщение:

 

Отмена добавления

 

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

После добавления элемента

На данном этапе пользователю доступны все операции, кроме создания новой очереди. Элементы очереди отображаются в списке снизу.

 

Ситуация с несколькими элементами очереди

 

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



 

 

Очистка очереди

При нажатии кнопки очистки очереди модель возвращается в исходное состояние.

 

 

Печать

 

При нажатии кнопки «Печать» открывается стандартное системное окно выбора устройства и настройки печати.

 

В случае успешной печати пользователь обнаружит распечатанный документ у себя в принтере. В случае неудачи (какой-либо непредвиденной ошибки) пользователь получит следующее предупреждение:

 

Обработка элемента очереди

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

 

После нажатия кнопки «Обработать» элемент удаляется из очереди и пользователь получает следующее сообщение:

 

В том случае, если элементов в очереди больше нет, окно модели возвращается в следующее состояние:



 

 

Переполнение очереди

 

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

 

В случае, если пользователь нажмет кнопку «Да», размер очереди будет увеличен на единицу и элемент будет добавлен, в случае отказа, форма состояние, в котором она была до нажатия кнопки «Поставить в очередь».

 

Альтернативный вид интерфейса

В случае нажатия кнопки «Переключить вид» интерфейс приложения принимает другой вид, выполненный в стиле автомата с газированной водой, логика управления программой не изменяется.

Реализация алгоритма

рис. 1 Окно приложения

 

 

Интерфейсная часть:

 

Логическая часть:

 

#include "Queue.h"

#include <iostream>

#include <Windows.h>

 

#ifdef _MANAGED

#pragma managed(push, off)

#endif

 

BOOL APIENTRY DllMain(

HMODULE ,

DWORD ul_reason_for_call,

LPVOID )

{

switch (ul_reason_for_call)

{

case DLL_PROCESS_ATTACH:

case DLL_THREAD_ATTACH:

case DLL_THREAD_DETACH:

case DLL_PROCESS_DETACH:

break;

}

return TRUE;

}

 

#ifdef _MANAGED

#pragma managed(pop)

#endif

 

MyQueue::MyQueue(int size)

{

mCurrent = -1;

if (size < 0)

{

mCapacity = 1;

mElementSet = new int[1];

}

else

{

mElementSet = new int[size];

mCapacity = size;

}

}

 

bool MyQueue::Exists(int node)

{

for (int i = 0; i < mCapacity; i++)

{

if (mElementSet[i] == node)

return true;

}

 

return false;

}

 

int MyQueue::GetCount()

{

return mCurrent >= 0 ? mCapacity : 0;

}

 

MyQueue::~MyQueue()

{

if (mElementSet != NULL)

{

delete[] mElementSet;

}

}

 

int& MyQueue::Insert(int node)

{

int* arr = new int[mCapacity + 1];

arr[0] = node;

 

if (mCapacity > 1)

{

for (int i = 0; i < mCapacity; i++)

{

arr[i + 1] = mElementSet[i];

}

 

delete [] mElementSet;

mElementSet = new int[mCapacity + 1];



 

mCurrent++;

for (int i = 0; i < mCapacity + 1; i++)

{

mElementSet[i] = arr[i];

}

}

else

{

mCurrent = 0;

mElementSet[0] = arr[0];

}

 

delete [] arr;

mCapacity++;

return GetCurrent();

}

 

void MyQueue::Remove()

{

if (mCurrent >= 0)

{

mCurrent--;

mCapacity--;

delete &mElementSet[mCapacity - 1];

}

}

 

void MyQueue::PrintElements()

{

for (int i = mCapacity - 1; i >= 0; i--)

{

std::cout << mElementSet[i] << std::endl;

}

 

getchar();

}

 

int& MyQueue::GetCurrent()

{

if (mCurrent >= 0)

{

return mElementSet[mCurrent];

}

}

 

int& MyQueue::MoveNext()

{

if (mCurrent >= 0);

{

if (mCurrent == mCapacity - 1)

{

mCurrent = 0;

}

else

{

mCurrent++;

}

}

 

return mElementSet[mCurrent];

}

 

void MyQueue::Invert()

{

int* arr = new int[mCapacity];

int j = 0;

for (int i = mCapacity - 1; i >= 0; i--)

{

arr[j] = mElementSet[i];

j++;

}

 

for (int i = 0; i < mCapacity; i++)

{

mElementSet[i] = arr[i];

}

}

 

void MyQueue::Clear()

{

mCurrent = -1;

delete [] mElementSet;

mElementSet = new int[1];

mCapacity = 1;

}


Список использованной литературы

1. Электронный ресурс http://ru.wikipedia.org/

 

 








Не нашли, что искали? Воспользуйтесь поиском по сайту:



©2015 - 2024 stydopedia.ru Все материалы защищены законодательством РФ.