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

Курсовой проект - Компьютеры, программирование

Другие курсовые по предмету Компьютеры, программирование

Введение

 

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

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

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

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

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

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

 

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 (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 (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) - конструктор из С-строки