Создание библиотеки классов и управляемую пользователем программу с псевдографическим интерфейсом

 

Введение


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

Содержание библиотек:

Строковые типы: базовая строка, строка-идентификатор, комплексное число.

Консольно-графические компоненты: меню, рамка, список, консоль, ввод-диалог.

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

Ниже отображены структура и взаимодействие классов и объектов, основные алгоритмы.


1. Упрощённая структура библиотек, иерархия классов


.1 Строковые типы


Имеются следующие типы (рисунок 1):

·BaseString - базовая строка - содержит С-строку глобально заданной (или меньшей) длины, контролирует доступ, обеспечивает ввод-вывод.

·Identifier - строка-идентификатор - следит, чтобы хранимая строка отвечала правилам составления идентификаторов языка С.

·Complex - комплексное число - содержит символьное представление комплексного числа в формате «1234i567» со знаками или без. Обеспечивает алгебраическое сложение и вывод в формате «(1234, i 567)».


Рисунок 1 - библиотека строковых типов.


.2 Графические компоненты


Имеются следующие компоненты и системы (рисунок 2):

·Item - пункт меню - содержит координаты, надпись, вызываемую функцию и массив подменю. Имеет функции рисования и стирания, при стирании экран закрашивается чёрным (если что-то было затёрто, старое содержимое не восстанавливается).

·Menu - меню - содержит массив корневых пунктов меню, контролирует общий процесс исполнения программы: следит за нажатиями на навигационные клавиши, сворачивает и разворачивает пункты и их подменю, вызывает обработчики нажатий. Алгоритм изображён ниже (рисунок 3).

·Frame - рамка - в конструкторе выводит псевдографическую рамку, в деструкторе стирает её. Есть функция перерисовки.

·List - список - рамка, выводящая нужную надпись на любой строчке с номером.

·Console - консоль - потоковый вывод текста в рамке.

·DialogInput - диалог ввода строки - только рисование диалогового окна с некоторой надписью и полем под ввод в конструкторе и стирание в деструкторе.


Рисунок 2 - библиотека графических компонентов



1.3 Форма - оболочка данного приложения


Форма - потомок меню (рисунок 4).

Рисунок 4 - форма


Использованное в ней дерево меню изображено на рисунке 5.



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

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

2. Подробное описание всех классов, их полей и методов


.1 Строковые типы


.1.1 BaseString - базовая строка

Вспомогательные объявления:

enum ourStrings {base, identifier, decimal, complex, binary} - типы строковых объектов int refoolLenght = 16 - максимальная длина строки

Защищённые поля:

char* strPointer - указатель на строку

int lenght - длина строки

ourStrings objType - тип объекта

int refool - переполнение

Защищённые методы:copy (char* str) - копирование массива символов в строку с учётом переполнения

Открытые методы:

BaseString() - конструктор по-умолчанию

BaseString(char* str) - конструктор из С-строки

BaseString(char ch) - конструктор из символа

BaseString(BaseString& orig) - конструктор копирования

virtual ~BaseString() - виртуальный деструктор

char OftenChar() - самый часто встречающийся символ

int getLenght() - возврат длиныObjectType() - возврат типа isRefooled() - возврат переполненностиcontain (char ch) - содержит ли строка данный символ

virtual ostream& outer (ostream& s) - метод потокового выводаistream& iner (istream& s) - метод потокового ввода

Дополнительные функции:& operator <<(ostream& s, const BaseString& str) - оператор потокового вывода& operator >>(istream& s, BaseString& str) - оператор потокового ввода


2.1.2 Identifier - строка-идентификатор - потомок базовой строки

Открытые методы:

static bool isCorrect (char* str) - является ли некоторая С-строка идентификатором

static bool isCorrect (BaseString str) - является ли некоторая базовая строка идентификатором

Identifier() - конструктор по-умолчанию

Identifier(char* str) - конструктор из С-строки

Identifier(char ch) - конструктор из символа

Identifier(Identifier& orig) - конструктор копированияIdentifier& operator= (const Identifier& orig) - оператор присваивания& operator[] (int ind) - оператор индекса, возвращает ссылку на ind-й символ

Identifier operator- (const Identifier& subtrahend) - удаление символов вычитаемого из символов уменьшаемого

void regDown() - перевод букв в нижний регистр

istream& iner (istream& s) - метод потокового ввода

Дополнительные функции:& operator <<(ostream& s, const Identifier& str) - оператор потокового вывода& operator >>(istream& s, Identifier& str) - оператор потокового ввода


2.1.3 Complex - комплексное число - потомок базовой строки

Скрытые методы:toFixedLenght (char* strnum) - перевод строки-числа из "(-)123456\0 " в "±0000000000000123456\0" [refoolLenght+1] (предполагается, что память выделена заранее)toFloatLenght (char* strnum) - обратный перевод (память не освобождается)

void add (char* adden1, char* adden2, char* sum) - алгебраическое сложение чисел-строк, представленных в формате"±0000000000000123456\0" [refoolLenght+1]

Открытые методы:

Complex() - конструктор по-умолчанию

Complex (char* str) - конструктор из С-строки

Complex (int re, int im) - конструктор из значений действительной и мнимой частей

Complex (Complex& orig) - конструктор копирования

bool isCorrect (char* str) - является ли некоторая С-строка комплексным числом

bool isCorrect (BaseString str) - является ли некоторая базовая строка комплексным числом

void getReal(char* ) -копирование действительного поля в массив символов

void getImage(char* ) - копирование мнимого поля в массив символов

const Complex& operator= (const Complex& orig) - оператор присваиванияoperator+ (const Complex& adden) - оператор сложенияoperator- (const Complex& orig) - оператор вычитанияostream& outer (ostream& s) - метод потокового выводаistream& iner (istream& s) - метод потокового ввода

Дополнительные функции:

ostream& operator <<(ostream& s, const Complex& str) - оператор потокового вывода

istream& operator >>(istream& s, Complex& str) - оператор потокового ввода


2.2 Графические компоненты - меню


.2.1 Глобальные константы

const int menuWidth = 16 - какой ширины будет рисоваться каждый пункт

const int lineColor = 1 - цвет линий, обрамляющих пункты

const int activeColor = 10 - цвет активного в данный момент пункта

const int enabledColor = 3 - цвет включённого пунктаint passiveColor = 4 - цвет отключённого пункта

библиотека алгоритм строка

2.2.2 Item - пункт меню

Защищённые поля:* caption - надписьleft, top - координаты группы пунктовindex - номер данного пунктаunderMenuLen - число пунктов подменю в группе** underMenu - массив указателей для пунктов подменю* upperItem - указатель на старший пункт

Открытые поля:

bool enabled, activied - включён и активен ли пункт

Открытые методы:

Item(Item* upperItem, char* caption, int left, int top, int index) - конструктор - инициализирует всё, кроме подменю

~Item() - виртуальный деструктор

void (*onEnter) (Item* sender, Menu* place) - указатель на обработчик события входа в меню - получает аргументами указатель на текущие меню и пункт

void createUndermenu (int left, int top, int itemsN ...) - создание подменю, выводящегося в конкретной точке, из серии заголовков. На место точек при вызове ставится itemsN C-строк.

int getIndex() - возврат номера пункта

Item* getUpperItem() - возврат указателя на старший пункт* moveUp() - перемещение вверх по подменю, возвращает указатель на предыдущий включённый пункт* moveDown() - перемещение вниз по подменю, возвращает указатель на следующий включённый пункт* goToRoot() - закрытие всех подменю и возврат указателя на корневой пунктopen() - вывод пункта на экранclose() - скрытие пункта (очистка экрана)* openUnderMenu() - открытие (вывод) подменю и передача ему активности (переприсваивание поля activied), возврат указателя на пункт, ставший активнымcloseUnderMenu() - скрытие подменю и возврат активности данному пункту* operator[] (int i) - возврат указателя на i-й элемент подменю или 0, если подменю нет


.2.3 Menu - меню

Защищённые поля:** roots - массив указателей для корневых элементовrootsN - число корневых элементов

Защищённые методы:open() - первая прорисовка корневых элементов* moveRight(Item* current) - перемещение вправо по корневым пунктам, возврат указателя на следующий от аргумента включённый пункт* moveLeft(Item* current) - перемещение влево по корневым пунктам, возврат указателя на предыдущий от аргумента включённый пункт

Открытые методы:~Menu() - виртуальный деструктор* operator[] (int i) - возврат указателя на i-й корневой элементperform() - управление процессом через меню (алгоритм на рисунке 4).


.3 Графические компоненты - панели


.3.1 Глобальные константы= 2+7*16 - цвет рамокint dialogColors = 12+2*16 - цвет диалогового окна


.3.2 Frame - рамка

Защищённые поля:

char* caption - надпись

int left, top, width, height - координаты и размеры


Открытые методы:(int left, int top, int width, int height, char* caption) - конструктор - сохранение аргументов и прорисовкаvoid redraw() - перерисовка рамки пустой

~Frame() - деструктор - стирание


.3.3 List - список - потомок рамки

Открытые методы:(int left, int top, int width, int N, char* caption) - конструктор drawLine (int i, char* caption) - вывод данной строки на данной строчке.

void redraw() - перерисовка списка пустым с номерами строк


.3.3 Console - консоль - потомок рамки

Открытые методы:

Console (int left, int top, int width, int height, char* caption) - конструктор output(char* c) - добавление в поток строки


.3.4 DialogInput - диалоговое окно ввода

Скрытые поля:

int left, top, width - координаты и ширина (высота всегда под 1 строку заголовка и 1 строку для ввода)

Открытые методы:(int left, int top, int width, char* caption) - конструктор - рисование

~DialogInput() - деструктор - стирание


.4 Модуль данного приложения


.4.1 Глобальные константы

const int window1left = 3, window1top = 14, window1width = 16 - координаты и приращение ширины (к длине базовой строки) 1-го окна - списка (высота - по числу элементов

const int window2left = 55, window2top = 4 - координаты второго угла - консоли (размеры - до краёв экрана)

const int window3left = 36, window3top = 21 - координаты третьего окна номеров параметров


.4.2 Form - форма - потомок меню

Поля:

int objectsN - число объектов для экспериментов

int arg1, arg2, val - номера операндов

List* window1 - указатель на первое окно (список)

Console* window2 - указатель на второе окно (консоль)

BaseString** array - массив указателей под объекты для манипуляций

Методы:

Form() - конструктор - создание пунктов меню для данной задачи

~Form() - деструктор - удаление строковых объектов и окон

void drawOperandsWindow() - рисование окна под номера операндов

void drawOperands() - вывод номеров операндов в их окне

void outputObject(int i) - вывод информации об i-м объекте в окно 1


.4.3 Обработчики нажатий меню

void <name>(Item* sender, Menu* place) - формат всех обработчиков, далее перечислены только имена и соответствующие пункты меню

initializeObject - Инициализация -> Количество элементов

inputOperands - Инициализация -> Начальное значение

createObject - вызовы всех конструкторов с параметрами, кроме копирующих:

Тестирование -> Базовая строка -> Создать из строки,

Тестирование -> Базовая строка -> Создать из символа,

Тестирование -> Идентификатор -> Создать из строки,

Тестирование -> Идентификатор -> Создать из символа,

Тестирование -> Комплексное число -> Создать из строки,

Тестирование -> Комплексное число -> Создать из чисел

copyObject - вызовы всех конструкторов копирования:

Тестирование -> Базовая строка -> Скопировать,

Тестирование -> Идентификатор -> Скопировать,

Тестирование -> Комплексное число -> Скопировать

stringOftenChar - Тестирование -> Базовая строка -> Частый символ

identifierSubstract - Тестирование -> Идентификатор -> Вычитание

identifierIndexOperator - Тестирование -> Идентификатор -> Индекс…

complexArytmetic - арифметика комплексных чисел:

Тестирование -> Комплексное число -> сложение

Тестирование -> Комплексное число -> вычитание

toExit - Выход


2.4.4 Функция mainmain() {* form = new Form;->perform();

delete form;

}



Вывод


В ходе КР была разработана на языке программирования C++ библиотека классов на основе C-строк и управляемую пользователем программу с псевдографическим интерфейсом, тестирующую её работу и отображающую результат.


Введение Данный программный продукт состоит из двух самостоятельных библиотек: строковых типов и консольно-графических компонентов, которые могут быть ис

Больше работ по теме:

КОНТАКТНЫЙ EMAIL: [email protected]

Скачать реферат © 2017 | Пользовательское соглашение

Скачать      Реферат

ПРОФЕССИОНАЛЬНАЯ ПОМОЩЬ СТУДЕНТАМ